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 のバージョンをアップグレードして、これらの醜い部分文字列を削除します。