Rdf 在TDB Jena中查询同一数据集中的多个模型

Rdf 在TDB Jena中查询同一数据集中的多个模型,rdf,sparql,jena,ontology,tdb,Rdf,Sparql,Jena,Ontology,Tdb,我有一个本体(比如dgo.owl)和另一个文件,其中包含以rdf格式存储的相同本体的个体。我在TDB中存储了本体和实例/单个文件文件,它们位于不同的命名模型下,如dgo_ont和homedata 现在,我想对这些已创建模型的组合启动不同的SPARQL查询。所以问题是我是否需要在TDB中再创建一个模型,该模型将包含现有两个命名模型的三元组,或者在Jena中有一种机制,这样我就不需要组合两个现有命名模型,仍然可以得到结果。到目前为止,我尝试了以下代码: 1 static Dataset datase

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

现在,我想对这些已创建模型的组合启动不同的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吗?选择*{GRAPH?g{}列出图形名称。@AndyS是的,我确信这些命名模型存在于数据集中,因为我可以单独查询它们,也可以检查它们的大小。在第一个链接中,我使用了命令dataset.getNamedModelurn:x-arq:UnionGraph,现在它可以工作了。这实际上使用了数据集中的所有命名模型。写在第8行的代码应该可以工作,但我不知道为什么会有麻烦。我从一开始就采用了这种方法