2016-07-04 84 views
1

我使用的是TopBraid Composer免費版(TBC FE)版本5.1.3。我正在構建SPIN規則/ CONSTRUCT查詢。我的部分查詢有一個帶有多個OR'd條件的FILTER語句。我將其輸入到TBC FE如下:爲什麼TopBraid Composer 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)) 
) . 

但是,當我保存TBC FE的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)) 
) . 

我的問題是:爲什麼重組?我使用了其他SPARQL編輯器和不重組的重要端點。我認爲這會讓我的代碼更難閱讀(成本),所以我想知道它的好處是什麼?

此外,如果這是重新組合是沒有必要的,有沒有辦法在TBC FE關閉它?

感謝。

PS:是的,我知道採取文字字符串的子字符串似乎很愚蠢。我這樣做是爲了避免Sesame中的一個錯誤,當我將TBD 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」語句更清晰,因此我將轉換爲此查詢。 –