2

OracleデータベースのSPARQLクエリからRDF/XMLファイルを直接出力しようとしています。ResultSetオブジェクトで結果を確認したので、クエリは正常に機能しています。

しかし、そこからどうすればいいのかわかりません。QuerySolutionごとにステートメントを作成し、それをモデルに追加したいと思います。ただし、述語の値を取得する方法が見つからないため、それを行う方法がわかりません。

私が正しい道を進んでいるかどうかのヒントと同様に、どんな助けもいただければ幸いです。

QueryExecution qe = QueryExecutionFactory.create(query, oracleSemModel) ;       
ResultSet results = qe.execSelect();

Model model = ModelFactory.createDefaultModel();

while (results.hasNext())
{
    QuerySolution result = results.next();
    Resource  subject   =  result.getResource("s");   // get the subject
    Property  predicate =  result.getProperty("p");   // <-- THIS FUNCTION DOESN'T EXIST
    RDFNode   object    =  result.get("o");           // get the object

    Statement stmt = ResourceFactory.createStatement(subject, predicate, object);

    model.add(stmt);
}

model.write(System.out, "RDF/XML-ABBREV");
4

1 に答える 1

6

クエリは表示されていませんが、おそらく次の形式です。

SELECT ?s ?p ?o
WHERE {
    ...
}

SELECTに置き換えると、達成したいことは簡単ですCONSTRUCT

CONSTRUCT { ?s ?p ?o }
WHERE {
    ...
}

CONSTRUCTトリプルテンプレートを取得して各ソリューションをそれにバインドし、それを結果モデルに追加することにより、結果としてモデルを作成 (構築) します。あなたの場合、このテンプレートは単純{ ?s ?p ?o }です。つまり、件名として ?s を使用するなどです。ただし、より複雑なパターンを使用することもできます。クエリ結果の値の位置に変数を使用して、期待する RDF を記述するだけです。

最終的なコード:

QueryExecution qe = QueryExecutionFactory.create(query, oracleSemModel) ;
Model model = qe.execConstruct();
// there is no step 3
于 2013-03-12T21:02:11.157 に答える