1

I have an OWL ontology file as RDF and want to store my data in a TDB and want to use reasoning. Actually this sounds simple so far :)

But here is the point where I'm confuesd:

I created a TDB an stored via SPARQL some statements. Then I tried to load the TDB via a model and OWL reasoner:

OntModelSpec ontModelSpec = OntModelSpec.OWL_MEM;
Reasoner reasoner = ReasonerRegistry.getOWLReasoner();
ontModelSpec.setReasoner(reasoner);



Model schemaModel = FileManager.get().loadModel("D:/Users/jim/Desktop/ontology/schema.rdf");
OntModel schema = ModelFactory.createOntologyModel( ontModelSpec,  schemaModel);

Location location = new Location("D:/Users/jim/Desktop/jena-fuseki-0.2.5/DB");
Dataset dataset = TDBFactory.createDataset(location);
Model model = dataset.getDefaultModel();

OntModel ontModel = ModelFactory.createOntologyModel(ontModelSpec, model);

When I now create new resources via API, they are not stored in the TDB. And I'm not able to see the Statments have added via SPARQL?! The SPAQRL statement shows me only the entries I've added with SPARQL

QueryExecution qExec = QueryExecutionFactory.create(
     StrUtils.strjoinNL("SELECT ?s ?p ?prop",
                "WHERE {?s ?p ?prop}"),
                dataset) ;
ResultSet rs = qExec.execSelect() ;
try {
ResultSetFormatter.out(rs) ;
} finally { qExec.close() ; System.out.println("closed connection");} 

and this returns only the Resource added with the API

System.out.print("instance: " + ontModel.getResource(NS + "TestItem"));

And when I call this:

ExtendedIterator<Statement> iter = ontModel.listStatements();

I get the following exception: org.openjena.atlas.lib.InternalErrorException: Invalid id node for subject (null node): ([0000000000000067], [0000000000000093], [00000000000000C8])

Is someone able to explain that behavior? Or could someone please give me a hint how to separate schema and date with TDB in right way with using the OntModel?

JimBob
  • 156
  • 1
  • 15
  • Obviously I forgot to commit the model after adding a resource via API. Now the resource is also available over SPARQL. But why could the API resolve the resource after I restarted the application and commented out the adding lines? – JimBob Mar 26 '13 at 18:08

1 Answers1

0

Partial answer:

 org.openjena.atlas.lib.InternalErrorException: Invalid id node for subject (null node): ([0000000000000067], [0000000000000093], [00000000000000C8])

You are using TDB without transactions - try adding TDB.sync before exiting to flush changes to the disk.

AndyS
  • 16,345
  • 17
  • 21