1

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

但这是我感到困惑的一点:

我创建了一个 TDB 并通过 SPARQL 存储了一些语句。然后我尝试通过模型和 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 添加的 Statments?!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("实例:" + ontModel.getResource(NS + "TestItem"));

当我称之为:

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

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

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

4

1 回答 1

0

部分答案:

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

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

于 2013-03-26T16:54:47.297 回答