为什么TopBraid Composer FE在一个SPIN规则过滤器中重新组合了我的多个OR条件?



我使用的是TopBraid Composer Free Edition (TBC FE) Version 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))
) .

但是,当我在TBC FE中保存SPIN规则时,它将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:是的,我知道取字面值字符串的子字符串看起来很愚蠢。我这样做是为了避免芝麻中的一个bug,当我将从TBD FE保存的RDF文件加载到芝麻中时,这个bug会修改我的文字字符串。这个bug已经被报告并正在解决。当它修复后,我将升级我的Sesame版本并删除这些丑陋的子字符串。

这是Jena打印查询的方式,而不是TBC FE的一个方面。对于左关联的二进制操作符,解析器创建表达式树((E1 op E2) op E3),并像这样打印。它简单安全;打印表达式不考虑优先级。

另一种书写FILTER的方法是

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

如果有什么帮助的话

相关内容

  • 没有找到相关文章

最新更新