0

あなたに質問があります:

ファイル RDF を TDB Triple Store にロードしました。

Dataset dataset = TDBFactory.createDataset(directory);
Model model = dataset.getNamedModel("http://nameFile");
TDBLoader.loadModel(model, file );

ここで、グラフがトリプルストア上にあるかどうかをチェックする手順を実現したいと思います。

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

String queryStr = "select * {graph <http://nameFile> { ?s ?p ?o }}";

Dataset dataset = TDBFactory.createDataset(directory);

Query query = QueryFactory.create(queryStr);
QueryExecution qexec = QueryExecutionFactory.create(query, dataset);
qexec.getContext().set(TDB.symUnionDefaultGraph, true);

/*Execute the Query*/
ResultSet results = qexec.execSelect();

if (!results.hasNext()) {
    Model model = dataset.getNamedModel("http://nameFile");
    TDBLoader.loadModel(model, label);
} else {
    Model model = dataset.getNamedModel("http://nameFile");
}

StmtIterator stmti = model.listStatements();

while (stmti.hasNext()) {
    Statement statement = stmti.nextStatement();
    System.out.println(statement); 
}

このコードが次のエラーで失敗することを確認しました。

スレッド「メイン」の例外 java.lang.UnsupportedOperationException: クワッド: サブジェクトを null にすることはできません

com.hp.hpl.jena.sparql.core.Quad.(Quad.java:62)
com.hp.hpl.jena.tdb.lib.TupleLib.quad(TupleLib.java:162)
com.hp. hpl.jena.tdb.lib.TupleLib.quad(TupleLib.java:153)
at com.hp.hpl.jena.tdb.lib.TupleLib.access$100(TupleLib.java:45)
at com.hp.hpl.jena .tdb.lib.TupleLib$4.convert(TupleLib.java:87)
at com.hp.hpl.jena.tdb.lib.TupleLib$4.convert(TupleLib.java:83)
at org.apache.jena.atlas.iterator .Iter$4.next(Iter.java:322)
at org.apache.jena.atlas.iterator.Iter$4.next(Iter.java:322)
at org.apache.jena.atlas.iterator.Iter.next( Iter .java:920)
com.hp.hpl.jena.util.iterator.WrappedIterator.next(WrappedIterator.java:94) com.hp.hpl.jena.util.iterator.Map1Iterator.next(Map1Iterator.java:45
) )
com.hp.hpl.jena.util.iterator.WrappedIterator.next(WrappedIterator.java:94)
で com.hp.hpl.jena.rdf.model.impl.StmtIteratorImpl.next(StmtIteratorImpl.java:42)
で.hp.hpl.jena.rdf.model.impl.StmtIteratorImpl.nextStatement(StmtIteratorImpl.java:52)

この行で次のエラーが発生します。

Statement statement = stmti.nextStatement();

特に、トリプル ストアにこのタイプの多くのトリプルがロードされているのを見てきました (他のトリプルの代わりに):

s: null p: http://www.w3.org/2000/01/rdf-schema#label o: null

しかし、私の RDF ファイルにはこれらのトリプルがありません! これらのトリプルがロードされるのはなぜですか?

4

1 に答える 1

2

データ読み込み用のコードは、クエリ コードとは別のプログラムで実行されていると思います。もしそうなら、

TDB.sync(dataset)

(トランザクションを使用する方がよいか、コマンド ライン ツールを使用して一括読み込みを実行します)。

于 2014-09-16T13:20:31.173 に答える