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


Reply via email to