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

问题描述 投票:2回答:1

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

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

应该做到这一点。q标志是需要的,除了i标志之外,因为tok可能有regex特殊字符,如[或.REGEX应该像XQuery fn:matches函数一样。然而,包括q标志只是让表达式总是返回false。更新:它并没有返回false,它根本没有返回一个值]这是我使用的GraphDB实现中的一个问题还是我误解了标准?有没有人在其他SPARQL实现中观察到这种奇怪的情况?我可以通过将其替换为以下方式来解决这个特殊情况

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

但其他可能需要标志x、s和m的场景似乎没有一个简单的替代品。[更新:其他标志都能正常工作,只有q是坏的]

[注:用lcase()的变通方法是次优的,用regex应该更有效率]。

其他三层存储在这方面的表现如何?

regex sparql jena virtuoso graphdb
1个回答
0
投票

这是RDF4J中的一个合规性问题,在即将到来的3.2.2版本中得到了修复。使用RDF4F的GraphDB应依次加入修正。JenaFuseki的实现在这个方面已经合规了,Virtuoso的实现似乎也有问题(标志被忽略)。没有其他实现的一致性报告。

© www.soinside.com 2019 - 2024. All rights reserved.