2012-06-19 15 views
5

Jena-TDBとSPARQLの両方が新しく、愚かな質問かもしれません。私はWindows XPでtdb-0.9.0を使用しています。Jena TDBはAPIを使用して保存してクエリを実行します

trail_1.rdfファイルのTDBモデルを作成しています。ここで私が理解していれば(私が間違っていれば正しい)、次のコードは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ディレクトリに保存されているので、私は時間のいくつかの後の時点で、それにクエリを実行することができるはずです。

のでD:\Project\Store_DB\data1\tdbで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) ; 

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

答えて

3

ご質問の一部(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でテストする)、実際に実行したコードは上記のサンプルとは異なります。

2

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

あなたの部分のこのバージョン1つのコードで試してみてください。

.... :)あなたの部分3のコードで試行し

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(); 

関連する問題