特定のクエリに基づいて新しいクエリを作成しようとしています (古いクエリ - これは変更できません)。
単純で有効な SPARQL クエリ が与えられたとしますSELECT ?s WHERE{ ?s ?p ?o }
。上記のクエリの jena クエリ オブジェクトを作成し、次のように Java で ElementGroup としてクエリ パターンを取得するとします。
Query q = QueryFactory.create("SELECT ?s WHERE{ ?s ?p ?o }, Syntax.syntaxSPARQL_11);
ElementGroup oldQP = (ElementGroup)q.getQueryPattern();
以前、古いクエリ パターンに新しいトリプルを追加する方法は、次の構文を使用していました。
Triple t = Triple.create(...);
oldQP.addTriplePattern(t);
ただし、新しいクエリ オブジェクトを作成すると、次のようになります。
Query nq = q.cloneQuery();
nq.setQueryPattern(oldQP);
nq.setQuerySelectType();
nq.setQueryResultStar(false);
nq.addResultVar("s");
次のようなクエリになります
SELECT ?s WHERE{
?s ?p ?o
?s2 ?p2 ?s.
}
オブジェクトの QueryPattern を設定するときに、最初のトリプルがピリオドで終わらないことを認識/気にしないためです。これにより、クエリの実行時に解析エラーが発生します...
Encountered " <VAR1> "?s2 "" at line 10, column 3.
Was expecting one of:
"graph" ...
"optional" ...
"minus" ...
"bind" ...
"service" ...
"let" ...
"exists" ...
"not" ...
"filter" ...
"{" ...
"}" ...
";" ...
"," ...
"." ...
これは明らかに有効な SPARQL ではないためです。では、この問題を回避するにはどうすればよいでしょうか。すべてのトリプルに終了期間がある場合、この問題は発生しませんが、これを機能させる方法が見つからないようです。
ありがとう!