0

質問があります。

RDF ファイルを Jena TDB にロードしようとしています。

私はこのコードを書きました:

public void store(){
    String directory = "C:\\tdb";
    String source = "C:\\file1.rdf";
    String source1 = "C:\\file2.rdf";
    Dataset dataset = openTDB(directory);
    Model tdb = loadModel(source, dataset);
    dataset.addNamedModel("File1", tdb);

    Model tdb1 = loadModel(source1, dataset);
    dataset.addNamedModel("File2", tdb1);

    queryTDB(tdb, dataset);
    queryTDB(tdb1, dataset);

    tdb.close();
    tdb1.close();
    dataset.close();
}

public Dataset openTDB(String directory) {
    // open TDB dataset
    Dataset dataset = TDBFactory.createDataset(directory);
    return dataset;
}

public Model loadModel(String source, Dataset dataset) {

    Model tdb = dataset.getDefaultModel();
    FileManager.get().readModel( tdb, source, "RDF/XML" );
    return tdb;
}

特に、2 つのファイルがあり、これらのファイルを Jena TDB にロードしたいと考えています。「addNamedModel」を使用してモデルに名前を追加できることをインターネットで読みました。その際、上記のコードに「File1」と「File2」という名前を追加しました。

今、このデータセットにクエリを実行したいので、次のコードを書き込もうとしています:

public void queryTDB(Model tdb, Dataset dataset) {

    String queryStr = "SELECT * { ?s ?p ?o }";

    Query query = QueryFactory.create(queryStr);
    QueryExecution qexec = QueryExecutionFactory.create(query, tdb);
    /*Execute the Query*/
    ResultSet results = qexec.execSelect();
    ResultSetFormatter.out(results) ;
    qexec.close();
}

このコードは機能しますが、「File1」(または「File2」) という名前のモデルのクエリ結果のみを取得する方法を知りたいです。実際、そのように記述されたクエリを使用すると、両方のモデルの結果が得られます。

どのように私はそれを実現することができますか?

4

1 に答える 1

4

絶対 IRI を使用してグラフに名前を付けていないため、グラフ名がどうなるかわかりません。次のようなクエリを使用して、それらが何であるかを調べることができます。

select * {
  graph ?g {  
    ?s ?p ?o
  }
}

それが完了したら、引き続きgraph ?g { … }パターンを使用from namedするか、クエリでグラフを指定するために使用できます。

select *
from named <name-of-graph>
{
  ?s ?p ?o
}

select * {
  graph <name-of-graph> {  
    ?s ?p ?o
  }
}

詳細とその他の例については、 「 13.2 RDF データセットの指定」および「 13.3 データセットのクエリ」を参照してください。

于 2014-07-16T14:40:58.563 に答える