我有一个 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 分开?