Jena TDB:查询命名模型

时间:2016-05-28 10:00:40

标签: 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的属性dataset.getNamedModel(graph)显然有数据。

enter image description here

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

谢谢!

1 个答案:

答案 0 :(得分:1)

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

单独询问图表上的查询。图表没有名称 - 数据集中的插槽名称为。

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

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