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

时间:2015-06-08 14:52:37

标签: rdf sparql jena ontology tdb

我有一个本体(比如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");

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

1 个答案:

答案 0 :(得分:1)

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

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

或图表的一部分(非常大规模的效率问题):

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