1

ARQ Op オブジェクトを使用して、Jena で SPARQL UpdateRequest を作成できるかどうか疑問に思っていました。次のようなプログラムによる更新を作成することに興味があります。

DELETE {?s :predicate <http://example.org#old> }    
INSERT {?s :predicate <http://example.org#toAdd>} 
WHERE  {?s :predicate <http://example.org#old> } 

ARQ API から DELETE、INSERT、および WHERE 句でパターンを作成することによって。これまでのところ、SPARQL Update リクエストを作成する唯一の方法は、SPARQL 文字列を解析するか、com.hp.hpl.jena.update.Updateオブジェクト (使用例が見つからない QuadAcc オブジェクトを使用)を作成することです。 .

私の懸念は、SPARQL UPDATE リクエストの管理と SPARQL SELECT クエリの管理が分離されており、ARQ を使用してその場でクエリを「組み立てる」ことができないことです。

前もって感謝します

4

2 に答える 2

1

この質問も私を燃やしました。オブジェクトとオブジェクトUpdateRequestからを作成したかったのです。これは、Query を構築するために使用される 2 つの主要なクラスです。例えば:ElementGroupElementTriplesBlock

ElementGroup queryPattern = ...
ElementTriplesBlock constructTriples = ...

Query query = new Query();
query.setQueryConstructType();

// set CONSTRUCT clause
query.setConstructTemplate(new Template(constructTriples.getPattern()));

// set WHERE clause
query.setQueryPattern(queryPattern);

Jenaメーリングリストを試してみたところ、次の回答が得られました。

更新 API は、無制限に大きな無制限の INSERT および DELETE データのストリーミングを処理するように設計されているため、更新の INSERT/DELETE 部分には Element ではなく QuadAcc を使用します。

最終的に、ParametrizedSparqlString次を使用してこれを実装しました。

ElementGroup queryPattern = ...
ElementTriplesBlock deleteTriples = ...
ElementTriplesBlock insertTriples = ...

ParameterizedSparqlString qstring = new ParameterizedSparqlString();

// Set DELETE clause
qstring.append("DELETE {");
qstring.append(deleteTriples.toString());
qstring.append("}");

// Set INSERT clause
qstring.append("INSERT {");
qstring.append(insertTriples.toString());
qstring.append("}");

// Set WHERE clause
qstring.append("WHERE {");
qstring.append(queryPattern.toString());
qstring.append("}");

// Construct an update query
UpdateRequest request = qstring.asUpdate();
于 2015-05-21T10:03:27.983 に答える
0

私はこれを自分で試したことはありませんが、Updateオブジェクトを作成してそれらを にアセンブルすることUpdateRequestが実際に進むべき道のようです。

ざっと見てみると、QuadAcc特に難しいことはないように思えaddTriple()ます。変数を含むトリプルで使用するだけです。

UpdateModifyサブクラスはUpdate特に興味深いように見えます。これDELETE … INSERT … WHEREは、例のパターンに対応しています。残念ながら、WHERE句は(代数表現)Elementではなく (クエリ部分の構文表現) で初期化されます。Op

于 2012-04-03T05:48:11.180 に答える