为什么SPARQL regex()函数忽略了"q"标志?



我正在尝试测试一个字符串是否以不区分大小写的方式包含在另一个字符串中。SPARQL 表达式

REGEX ( ?str, ?tok, "iq" )

应该这样做。除了i标志之外,还需要q标志?tok因为它可能有正则表达式特殊字符,例如[。REGEX 的行为应该像 XQueryfn:matches函数一样。但是,包含q标志只会使表达式返回始终为 false。 [更新:它不返回假,根本不返回值]

这是我正在使用的 GraphDB 实现中的问题,还是我误解了标准?有没有人在其他SPARQL实现中观察到这种奇怪之处?

我可以通过将其替换为

CONTAINS ( LCASE(?str), LCASE(?tok) )

但其他可能需要标志xsm的场景似乎没有简单的替换。[更新:其他标志都正常工作,只有q被破坏]

[注意:lcase()的解决方法不是最佳的;regex应该更有效率。

其他三重商店在这方面的表现如何?

这是RDF4J中的一个合规性问题,在即将发布的3.2.2版本中已修复。 使用RDF4F的GraphDB应按顺序合并校正。 Jena/Fuseki 的实现已经符合此要求。 Virtuoso实现似乎也被破坏了(标志被忽略(。 没有其他实施的一致性报告。

最新更新