【问题标题】:Query multiple models within same Dataset in TDB Jena在 TDB Jena 中查询同一数据集中的多个模型
【发布时间】:2015-08-23 02:45:08
【问题描述】:

我有一个本体(比如 dgo.owl)和另一个文件,其中包含以 rdf 格式存储的相同本体的个体。我在不同的命名模型(比如 dgo_ont 和 homedata)下将两个(本体和实例/单个文件)文件存储在 TDB 中。

现在,我想对这些创建的模型的组合触发不同的 SPARQL 查询。所以问题是我是否需要在 TDB 中再创建一个模型,该模型将包含现有两个命名模型的三元组,或者 Jena 中有一种机制,这样我不需要组合两个现有的命名模型,我仍然会得到结果。到目前为止,我尝试使用以下代码:

1 static Dataset dataset;
2 static Model model;
3 public static void main(String[] args)
4 {
5   dataset = TDBFactory.createDataset("TDB_database/");
6   dataset.begin(ReadWrite.READ);
7   try{
8 model=dataset.getNamedModel("dgo_ont").add(dataset.getNamedModel("homedata"));
9   String qr=   SELECT *  Where    { ?s ?p ?o}; //for illustration
10    Query qy = QueryFactory.create(qr);
11    QueryExecution qe = QueryExecutionFactory.create(qy,model);
12    ResultSet rs= qe.execSelect();
13    ResultSetFormatter.out(System.out, rs, qy) ;
14    qe.close();
15    }
16   finally{
17      model.close();
18      dataset.end();       
19 }

运行这个程序得到的输出是:

Exception in thread "main" java.lang.NullPointerException
    at ac.iiitd.sparql.SparqlQuery.main(SparqlQuery.java:56)

在主程序中#56 行对应上面脚本的#17 行。但是,我怀疑第 8 行是根本原因。这是因为每当我将此行更改为以下代码时,我都会获得所需的输出。

         model=dataset.getNamedModel("dgo_ont");
               or
         model=dataset.getNamedModel("homedata");

所以整个问题是如何查询给定数据集中命名模型的组合。

【问题讨论】:

  • "我怀疑第 8 行。它可能没有完成预期的任务。"为什么?你看过返回值吗?之前和之后的系统状态?如果有,请描述你所看到的。如果没有,请做这些事情。 :) 调试是一项宝贵的技能,怀疑代码的特定部分是一个好的开始。
  • 您确定图形名称是“dgo_ont”和“homedata”,而不是解析的 URI? SELECT * { GRAPH ?g {}} 列出图形名称。
  • @AndyS 是的,我确信这些命名模型存在于数据集中,因为我可以单独查询它们,也可以检查它们的大小。

标签: rdf sparql jena ontology tdb


【解决方案1】:

您可以使默认图成为命名图的并集:

https://jena.apache.org/documentation/tdb/datasets.html

或图表的子集(非常大规模的效率问题):

https://jena.apache.org/documentation/tdb/dynamic_datasets.html

【讨论】:

  • 从第一个链接开始,我使用了命令 dataset.getNamedModel("urn:x-arq:UnionGraph") 现在它可以工作了。这实质上使用了数据集中的所有命名模型。第 8 行编写的代码应该可以工作,但我不知道为什么它会带来麻烦。我从link 遵循了这种方法
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多