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

时间:2016-07-04 16:05:12

标签: sparql topbraid-composer spin-rdf

我正在使用TopBraid Composer免费版(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))
) .

但是,当我在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:是的,我知道采用文字字符串的子字符串似乎很愚蠢。我这样做是为了避免在我加载RDF文件时修剪我的文字字符串的Sesame中的一个错误我从TBD FE保存到Sesame。该bug已被报告并正在解决。当它被修复后,我将升级我的芝麻版并删除这些丑陋的子串。

1 个答案:

答案 0 :(得分:1)

这是Jena打印查询的方式,而不是TBC FE的一个方面。对于左关联的二元运算符,解析器创建表达式树((E1 op E2)op E3​​)并且它就像那样打印。它简单安全;打印表达式不会被考虑在内。

撰写FILTER的另一种方法是

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

如果有任何帮助。