将数据存储在Jena TDB中并使用推理

时间:2013-03-26 14:55:23

标签: jena owl reasoning

我有一个OWL本体文件作为RDF,并希望将我的数据存储在TDB中并想要使用推理。实际上到目前为止听起来很简单:)

但是我有点担心:

我创建了一个通过SPARQL存储的TDB一些语句。然后我尝试通过模型和OWL推理器加载TDB:

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);

当我现在通过API创建新资源时,它们不会存储在TDB中。我无法看到通过SPARQL添加的语句?! SPAQRL语句仅显示我使用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");} 

,这只返回使用API​​添加的资源

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

当我这样称呼时:

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

我收到以下异常: org.openjena.atlas.lib.InternalErrorException:subject(null节点)的id节点无效:([0000000000000067],[0000000000000093],[00000000000000C8])

有人能够解释这种行为吗?或者有人可以给我一个提示,如何使用OntModel以正确的方式将模式和日期与TDB分开?

1 个答案:

答案 0 :(得分:0)

部分答案:

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

您正在使用没有事务的TDB - 尝试在退出之前添加TDB.sync以刷新对磁盘的更改。