6

私は Jena-TDB と SPARQL の両方に慣れていないので、ばかげた質問かもしれません。Windows XP で tdb-0.9.0 を使用しています。

ファイルの TDB モデルを作成していtrail_1.rdfます。ここでの私の理解 (間違っている場合は訂正してください) は、次のコードが TDB モデルで指定された rdf ファイルを読み取り、指定されたディレクトリにモデルを格納/ロードします (より良い言葉はわかりません) D:\Project\Store_DB\data1\tdb:

// open TDB dataset
String directory = "D:\\Project\\Store_DB\\data1\\tdb";
Dataset dataset = TDBFactory.createDataset(directory);

Model tdb = dataset.getDefaultModel();

// read the input file
String source = "D:\\Project\\Store_DB\\tmp\\trail_1.rdf";
FileManager.get().readModel( tdb, source);

tdb.close();
dataset.close();

この理解は正しいでしょうか?


私の理解によると、モデルはD:\Project\Store_DB\data1\tdbディレクトリに保存されているため、後でクエリを実行できるはずです。

TDB ストアをクエリするD:\Project\Store_DB\data1\tdbには、次のことを試しましたが、何も出力されません。

String directory = "D:\\Project\\Store_DB\\data1\\tdb" ;
Dataset dataset = TDBFactory.createDataset(directory) ;

Iterator<String> graphNames = dataset.listNames();
while (graphNames.hasNext()) {
    String graphName = graphNames.next();
    System.out.println(graphName);
}

私もこれを試しましたが、何も印刷されませんでした:

    String directory = "D:\\Project\\Store_DB\\data1\\tdb" ;
    Dataset dataset = TDBFactory.createDataset(directory) ;

    String sparqlQueryString = "SELECT (count(*) AS ?count) { ?s ?p ?o }" ;

    Query query = QueryFactory.create(sparqlQueryString) ;
    QueryExecution qexec = QueryExecutionFactory.create(query, dataset) ;
    ResultSet results = qexec.execSelect() ;
    ResultSetFormatter.out(results) ;

私は何を間違っていますか?上記の私の理解に何か問題はありますか?

4

2 に答える 2

5

あなたの質問の (i) については、はい、あなたの理解は正しいです。

パート (ii) について、listNames結果が返されない理由は、名前付きグラフにデータを入れていないためです。特に、

Model tdb = dataset.getDefaultModel();

は、TDB のデフォルト グラフ、つまり名前のないグラフにデータを格納していることを意味します。listNames何かを返したい場合は、その行を次のように変更します。

Model tdb = dataset.getNamedGraph( "graph42" );

または似たようなもの。もちろん、データをクエリするときは、そのグラフを名前で参照する必要があります。

ストアにデータが正常に読み込まれたかどうかをテストするだけの場合は、コマンド ライン ツールbin/tdbdump(Linux) またはbat\tdbdump.bat(Windows) を試してください。

パート (iii) については、TDB イメージの 1 つを指定して、私のシステムであなたのコードを試してみましたが、期待どおりに動作します。したがって、使用している TDB イメージにデータが含まれていないか (tdbdump でテスト)、実際に実行したコードが上記のサンプルとは異なっていた可能性があります。

于 2012-06-20T09:07:27.863 に答える
3

パート 1 のコードの問題は、データをコミットしていないことだと思います。

このバージョンのパート 1 コードを試してください。

   String directory = "D:\\Project\\Store_DB\\data1\\tdb";
   Dataset dataset = TDBFactory.createDataset(directory);

   Model tdb = dataset.getDefaultModel();

   // read the input file
   String source = "D:\\Project\\Store_DB\\tmp\\trail_1.rdf";
   FileManager.get().readModel( tdb, source);

   dataset.commit();//INCLUDE THIS STAMEMENT

   tdb.close();
   dataset.close();

そして、パート3のコードを試してみてください:) ....

于 2014-02-27T12:03:23.927 に答える