オントロジー (dgo.owl など) と、同じオントロジーの個体を含む別のファイルが rdf 形式で保存されています。両方の (オントロジーとインスタンス/個々のファイル) ファイルを TDB に異なる名前のモデル (dgo_ont と homedata など) で保存しました。
ここで、これらの作成されたモデルの組み合わせに対して、さまざまな SPARQL クエリを実行したいと考えています。問題は、既存の 2 つの名前付きモデルのトリプルを含む TDB でもう 1 つのモデルを作成する必要があるか、または既存の 2 つの名前付きモデルを組み合わせる必要がなくても結果が得られるようなメカニズムが 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");
したがって、全体の問題は、特定のデータセット内の名前付きモデルの組み合わせをクエリする方法です。