1

TopBraid Composer Free Edition (TBC FE) バージョン 5.1.3 を使用しています。SPIN ルール / CONSTRUCT クエリを作成しています。私のクエリの一部には、複数の OR 条件を持つ FILTER ステートメントがあります。次のように TBC FE に入力します。

FILTER (
 (?orgString = SUBSTR("AF  X"^^xsd:string, 1, 4)) ||
 (?orgString = SUBSTR("J   X"^^xsd:string, 1, 4)) || 
 (?orgString = SUBSTR("AR  X"^^xsd:string, 1, 4)) || 
 (?orgString = SUBSTR("N   X"^^xsd:string, 1, 4)) || 
 (?orgString = SUBSTR("NS  X"^^xsd:string, 1, 4)) || 
 (?orgString = SUBSTR("MC  X"^^xsd:string, 1, 4))
) .

しかし、SPIN ルールを TBC FE に保存すると、OR 条件が再グループ化されてバイナリ OR のセットになります。

FILTER (
(((((?orgString = SUBSTR("AF  X"^^xsd:string, 1, 4))  || 
    (?orgString = SUBSTR("J   X"^^xsd:string, 1, 4))) ||
    (?orgString = SUBSTR("AR  X"^^xsd:string, 1, 4))) ||
    (?orgString = SUBSTR("N   X"^^xsd:string, 1, 4))) ||
    (?orgString = SUBSTR("NS  X"^^xsd:string, 1, 4))) ||
    (?orgString = SUBSTR("MC  X"^^xsd:string, 1, 4))
) .

私の質問は、なぜ再編成するのですか? この再グループ化を行わなかった他の SPARQL エディターとエンドポイントを使用しました。これにより、コードが読みにくくなる(コストがかかる)と主張しているので、どのような利点があるのでしょうか。

また、これが再編成する必要がない場合、TBC FE でそれをオフにする方法はありますか?

ありがとう。

PS: はい、リテラル文字列の部分文字列を取得するのはばかげているように思えます。私は、TBD FE から保存した RDF ファイルを Sesame にロードするときに、リテラル文字列をトリミングする Sesame のバグを回避するためにこれを行っています。このバグは報告されており、対処中です。修正されたら、Sesame のバージョンをアップグレードして、これらの醜い部分文字列を削除します。

4

1 に答える 1

1

これは、TBC FE の側面ではなく、Jena がクエリを出力する方法です。左結合の二項演算子の場合、パーサーは式ツリー (( E1 op E2 ) op E3​​ ) を作成し、そのように出力します。シンプルで安全です。式の印刷は優先順位を考慮しません。

あなたを書く別の方法FILTER

?orgString IN ( SUBSTR("AF  X", 1, 4), SUBSTR("J   X", 1, 4), ...)

それが助けになる場合に備えて。

于 2016-07-05T09:10:43.720 に答える