在 TDB Jena 中查询同一数据集中的多个模型
Query multiple models within same Dataset in TDB Jena
我有一个 ontology(比如 dgo.owl)和另一个包含相同 ontology 的个人的文件,以 rdf 格式存储。我已经将两个(ontology 和 instances/individual 文件)文件存储在不同命名模型下的 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");
所以整个问题就是如何在给定数据集中查询命名模型的组合。
您可以使默认图成为命名图的并集:
https://jena.apache.org/documentation/tdb/datasets.html
或图表的子集(非常大规模的效率问题):
https://jena.apache.org/documentation/tdb/dynamic_datasets.html
我有一个 ontology(比如 dgo.owl)和另一个包含相同 ontology 的个人的文件,以 rdf 格式存储。我已经将两个(ontology 和 instances/individual 文件)文件存储在不同命名模型下的 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");
所以整个问题就是如何在给定数据集中查询命名模型的组合。
您可以使默认图成为命名图的并集:
https://jena.apache.org/documentation/tdb/datasets.html
或图表的子集(非常大规模的效率问题):
https://jena.apache.org/documentation/tdb/dynamic_datasets.html