2016-07-04 13 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”语句更清晰,因此我将转换为此查询。 –