You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@jena.apache.org by David Jordan <Da...@sas.com> on 2011/09/16 16:56:54 UTC

Assembler question, could really use help before the weekend...

This should be easy…
I have the following assembler file.

@prefix rdfs:     <http://www.w3.org/2000/01/rdf-schema#> .
@prefix rdf:      <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix ja:       <http://jena.hpl.hp.com/2005/11/Assembler#> .
@prefix sdb:      <http://jena.hpl.hp.com/2007/sdb#> .
@prefix tdb:      <http://jena.hpl.hp.com/2008/tdb#> .

 [] ja:loadClass "com.hp.hpl.jena.tdb.TDB" .
tdb:DatasetTDB rdfs:subClassOf ja:RDFDataset .
tdb:GraphTDB   rdfs:subClassOf ja:Model .

<#tdbstore> rdf:type tdb:DatasetTDB ;
      tdb:location "DB" ;
      .

<#ICD9> rdf:type tdb:GraphTDB ;
        tdb:graphName <http://purl.bioontology.org/ontology/HOM_ICD9/> ;
        tdb:dataset <#tdbstore> ;
        .

With the following Java code:

                Model assemblerSpec = FileManager.get().loadModel( "db.ttl" );
                Resource root = assemblerSpec.createResource( assemblerSpec.expandPrefix( "ICD9" ) );
                Model model = Assembler.general.openModel( root );

An exception is thrown on the 3rd line (the assemblerSpec and root are not null):
Exception in thread "main" com.hp.hpl.jena.assembler.exceptions.NoSpecificTypeException: the root ICD9 has no most specific type that is a subclass of ja:Object
        at com.hp.hpl.jena.assembler.assemblers.AssemblerGroup$PlainAssemblerGroup.open(AssemblerGroup.java:101)
        at com.hp.hpl.jena.assembler.assemblers.AssemblerGroup$ExpandingAssemblerGroup.open(AssemblerGroup.java:69)
        at com.hp.hpl.jena.assembler.assemblers.AssemblerBase.open(AssemblerBase.java:37)
        at com.hp.hpl.jena.assembler.assemblers.AssemblerBase.open(AssemblerBase.java:34)
        at com.hp.hpl.jena.assembler.assemblers.AssemblerGroup.openModel(AssemblerGroup.java:23)
        at com.sas.hls.hoa.ontology.Test.main(Test.java:18)


ICD9 is a tdb:GraphTDB, (its most specific type)
tdb:GraphTDB   rdfs:subClassOf ja:Model,
ja:Model is a subclass of ja:Object.

So why would this be occurring?
I need to make a lot of progress on my project over this weekend, so help today is greatly appreciated.

David Jordan
Software Developer
SAS Institute Inc.
Health & Life Sciences, Research & Development
Bldg R ▪ Office 4467
600 Research Drive ▪ Cary, NC 27513
Tel: 919 531 1233 ▪ david.jordan@sas.com<ma...@sas.com>
www.sas.com<http://www.sas.com>
SAS® … THE POWER TO KNOW®




RE: Assembler question, could really use help before the weekend...

Posted by David Jordan <Da...@sas.com>.
Thanks a lot Dave!

-----Original Message-----
From: Dave Reynolds [mailto:dave.e.reynolds@gmail.com] 
Sent: Friday, September 16, 2011 11:30 AM
To: jena-users@incubator.apache.org
Subject: Re: Assembler question, could really use help before the weekend...

On Fri, 2011-09-16 at 14:56 +0000, David Jordan wrote: 
> This should be easy…
> I have the following assembler file.
> 
> @prefix rdfs:     <http://www.w3.org/2000/01/rdf-schema#> .
> @prefix rdf:      <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
> @prefix ja:       <http://jena.hpl.hp.com/2005/11/Assembler#> .
> @prefix sdb:      <http://jena.hpl.hp.com/2007/sdb#> .
> @prefix tdb:      <http://jena.hpl.hp.com/2008/tdb#> .
> 
>  [] ja:loadClass "com.hp.hpl.jena.tdb.TDB" .
> tdb:DatasetTDB rdfs:subClassOf ja:RDFDataset .
> tdb:GraphTDB   rdfs:subClassOf ja:Model .
> 
> <#tdbstore> rdf:type tdb:DatasetTDB ;
>       tdb:location "DB" ;
>       .
> 
> <#ICD9> rdf:type tdb:GraphTDB ;
>         tdb:graphName <http://purl.bioontology.org/ontology/HOM_ICD9/> ;
>         tdb:dataset <#tdbstore> ;
>         .
> 
> With the following Java code:
> 
>                 Model assemblerSpec = FileManager.get().loadModel( "db.ttl" );
>                 Resource root = assemblerSpec.createResource( assemblerSpec.expandPrefix( "ICD9" ) );
>                 Model model = Assembler.general.openModel( root );
> 
> An exception is thrown on the 3rd line (the assemblerSpec and root are not null):
> Exception in thread "main" com.hp.hpl.jena.assembler.exceptions.NoSpecificTypeException: the root ICD9 has no most specific type that is a subclass of ja:Object
>         at com.hp.hpl.jena.assembler.assemblers.AssemblerGroup$PlainAssemblerGroup.open(AssemblerGroup.java:101)
>         at com.hp.hpl.jena.assembler.assemblers.AssemblerGroup$ExpandingAssemblerGroup.open(AssemblerGroup.java:69)
>         at com.hp.hpl.jena.assembler.assemblers.AssemblerBase.open(AssemblerBase.java:37)
>         at com.hp.hpl.jena.assembler.assemblers.AssemblerBase.open(AssemblerBase.java:34)
>         at com.hp.hpl.jena.assembler.assemblers.AssemblerGroup.openModel(AssemblerGroup.java:23)
>         at com.sas.hls.hoa.ontology.Test.main(Test.java:18)
> 
> 
> ICD9 is a tdb:GraphTDB, (its most specific type)
> tdb:GraphTDB   rdfs:subClassOf ja:Model,
> ja:Model is a subclass of ja:Object.
> 
> So why would this be occurring?

You are not referring to the #ICD9 you think you are :)

In your assembler file you have no base specified so the relative URI
#ICD9 will become something like:
    <file:/path/to/assembler/file#ICD9>

Whereas the thing you are passing to createResource to generate root is totally different and won't match up.

I would suggest using an explicit prefix in your assembler file:

  @prefix eg:      <http://some/useful/URI#> .

  eg:ICD9 rdf:type tdb:GraphTDB ;
       tdb:graphName <http://purl.bioontology.org/ontology/HOM_ICD9/> ;
       tdb:dataset <#tdbstore> ;
       .

Then you can find the root by:

Resource root =
assemblerSpec.createResource( assemblerSpec.expandPrefix( "eg:ICD9" ) );

Dave




Re: Assembler question, could really use help before the weekend...

Posted by Dave Reynolds <da...@gmail.com>.
On Fri, 2011-09-16 at 14:56 +0000, David Jordan wrote: 
> This should be easy…
> I have the following assembler file.
> 
> @prefix rdfs:     <http://www.w3.org/2000/01/rdf-schema#> .
> @prefix rdf:      <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
> @prefix ja:       <http://jena.hpl.hp.com/2005/11/Assembler#> .
> @prefix sdb:      <http://jena.hpl.hp.com/2007/sdb#> .
> @prefix tdb:      <http://jena.hpl.hp.com/2008/tdb#> .
> 
>  [] ja:loadClass "com.hp.hpl.jena.tdb.TDB" .
> tdb:DatasetTDB rdfs:subClassOf ja:RDFDataset .
> tdb:GraphTDB   rdfs:subClassOf ja:Model .
> 
> <#tdbstore> rdf:type tdb:DatasetTDB ;
>       tdb:location "DB" ;
>       .
> 
> <#ICD9> rdf:type tdb:GraphTDB ;
>         tdb:graphName <http://purl.bioontology.org/ontology/HOM_ICD9/> ;
>         tdb:dataset <#tdbstore> ;
>         .
> 
> With the following Java code:
> 
>                 Model assemblerSpec = FileManager.get().loadModel( "db.ttl" );
>                 Resource root = assemblerSpec.createResource( assemblerSpec.expandPrefix( "ICD9" ) );
>                 Model model = Assembler.general.openModel( root );
> 
> An exception is thrown on the 3rd line (the assemblerSpec and root are not null):
> Exception in thread "main" com.hp.hpl.jena.assembler.exceptions.NoSpecificTypeException: the root ICD9 has no most specific type that is a subclass of ja:Object
>         at com.hp.hpl.jena.assembler.assemblers.AssemblerGroup$PlainAssemblerGroup.open(AssemblerGroup.java:101)
>         at com.hp.hpl.jena.assembler.assemblers.AssemblerGroup$ExpandingAssemblerGroup.open(AssemblerGroup.java:69)
>         at com.hp.hpl.jena.assembler.assemblers.AssemblerBase.open(AssemblerBase.java:37)
>         at com.hp.hpl.jena.assembler.assemblers.AssemblerBase.open(AssemblerBase.java:34)
>         at com.hp.hpl.jena.assembler.assemblers.AssemblerGroup.openModel(AssemblerGroup.java:23)
>         at com.sas.hls.hoa.ontology.Test.main(Test.java:18)
> 
> 
> ICD9 is a tdb:GraphTDB, (its most specific type)
> tdb:GraphTDB   rdfs:subClassOf ja:Model,
> ja:Model is a subclass of ja:Object.
> 
> So why would this be occurring?

You are not referring to the #ICD9 you think you are :)

In your assembler file you have no base specified so the relative URI
#ICD9 will become something like:
    <file:/path/to/assembler/file#ICD9>

Whereas the thing you are passing to createResource to generate root is
totally different and won't match up.

I would suggest using an explicit prefix in your assembler file:

  @prefix eg:      <http://some/useful/URI#> .

  eg:ICD9 rdf:type tdb:GraphTDB ;
       tdb:graphName <http://purl.bioontology.org/ontology/HOM_ICD9/> ;
       tdb:dataset <#tdbstore> ;
       .

Then you can find the root by:

Resource root =
assemblerSpec.createResource( assemblerSpec.expandPrefix( "eg:ICD9" ) );

Dave