【问题标题】:Why did TopBraid Composer FE re-group my multiple OR conditions in a SPIN rule filter?为什么 TopBraid Composer FE 在 SPIN 规则过滤器中重新组合我的多个 OR 条件?
【发布时间】:2016-07-04 16:05:12
【问题描述】:

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

【问题讨论】:

    标签: sparql topbraid-composer spin-rdf


    【解决方案1】:

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

    编写FILTER 的另一种方法是

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

    如果有帮助的话。

    【讨论】:

    • 谢谢@AndyS。 “IN”语句更简洁,因此我将在此查询中改用该语句。
    猜你喜欢
    • 2015-07-14
    • 1970-01-01
    • 1970-01-01
    • 2019-10-10
    • 2014-12-20
    • 1970-01-01
    • 2022-01-23
    • 2020-01-28
    • 1970-01-01
    相关资源
    最近更新 更多