java - 耶拿 TDB : Querying a named model

标签 java jena ontology dbpedia tdb

我正在尝试查询我之前存储的 Jena 命名模型(确切地说是 DBPedia TBox)。存储是通过以下方式完成的

Dataset dataset = TDBFactory.createDataset(path);
dataset.begin(ReadWrite.WRITE);
Model model = dataset.getNamedModel(graph);
OntModel ontModel = ModelFactory.createOntologyModel();
model.add(FileManager.get().readModel(ontModel, dbpedia));
model.commit();
model.close();
dataset.commit();
dataset.end();
dataset.close();

path 包含 TDB 的路径,graph 包含命名模型的名称,dbpedia 包含 OWL 文件的路径。到目前为止,一切似乎都很好:

当我稍后想要查询模型时,我会执行以下操作:

Dataset dataset = TDBFactory.createDataset(path);
dataset.begin(ReadWrite.READ);
List<String> out = Lists.newArrayList();
try(QueryExecution qExec = QueryExecutionFactory.create("SELECT * { GRAPH ?g {?s ?p ?o}}",  dataset.getNamedModel(graph))) {
    ResultSet rs = qExec.execSelect();
    ResultSetFormatter.out(rs);
    rs.forEachRemaining(triple -> out.add(triple.toString()));
} catch (Exception e) {
    e.printStackTrace();
}
dataset.close();

ResultSetFormatter.out(rs) 的输出为空,如下所示:

-----------------
| s | p | o | g |
=================
-----------------

但是,在调试器模式下,我可以清楚地看到 dataset.getNamedModel(graph) 中的属性 dataset 显然有数据。

enter image description here

我认为我的问题是查询,但这对我来说似乎很好。我错过了什么吗?

谢谢!

最佳答案

QueryExecutionFactory.create("SELECT * { GRAPH ?g {?s ?p ?o}}", dataset.getNamedModel(graph)))

这会单独询问图表上的查询。图没有名称 - 它们在数据集中的槽有名称。

仅查询模型就是查询数据集的默认图表(在内部创建以执行查询)。

尝试 QueryExecutionFactory.create("SELECT * { GRAPH ?g {?s ?p ?o}}", dataset)

关于java - 耶拿 TDB : Querying a named model,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37497621/

相关文章:

java - 生成 Jena Bnode ID

java - 使用 Reasoner 对象提取披萨本体中的直接父类(super class)

java - 随机访问链表的数据结构

java - 斯波克框架 : problems with spying

java - 用于查找 RDF 中术语的 URL 的 SPARQL 查询

java - 打印日期时间而不在​​ Sparql 输出中指定数据类型

java - fuseki 错误 - 文件初始化异常

java - JPA枚举序数与字符串

Java 正则表达式或 XML 解析器?

rdf - 如何在 Sparql 中查询具有对象属性的类