2016-07-04 4 views
1

私はTopBraid Composer Free Edition(TBC FE)バージョン5.1.3を使用しています。私はSPINルール/ CONSTRUCTクエリを構築しています。クエリの一部に複数のOR条件を持つFILTER文があります。次のように私はTBC FEにそれを入力します。なぜTopBraid Composer FEは複数のOR条件をSPINルールフィルタに再グループ化しましたか?

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)) 
) . 

をしかし、私はTBC FEにSPINルールを保存するとき、バイナリ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:はい、私はリテラル文字列の部分文字列を取ることは馬鹿だと思います。私はTBF FEからセサミに保存するRDFファイルをロードするときに、セサミのバグを避けるためにそれをやっています。このバグは報告され、対処されています。それが修正されたら、私はセサミバージョンをアップグレードし、これらの醜い部分文字列を削除します。

答えて

1

これは、Jena印刷のクエリであり、TBC FEの側面ではありません。左辺にあるバイナリ演算子の場合、パーサは式ツリー((E1 op E2)op E3​​)を作成し、そのように表示されます。それは簡単で安全です。印刷式が優先されることはありません。

あなたFILTERを書くための別の方法は、任意の助けである場合には

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

です。

+0

ありがとう@AndyS。 "IN"ステートメントはより洗練されているので、このクエリーのステートメントに変更します。 –

関連する問題