SPARQL - 将结果资源限制为特定的名称空间

18

是否有一种标准的方法来限制SPARQL查询结果属于特定的命名空间。

1个回答

29

简短回答 - 没有标准的直接方法来实现这一点。

长回答 - 但是,您可以使用字符串函数和一个FILTER子句来进行此类限制性操作。您使用的功能取决于您的引擎支持的SPARQL版本。

SPARQL 1.1解决方案

几乎所有实现现在都支持SPARQL 1.1,您可以像这样使用STRSTARTS()函数:

FILTER(STRSTARTS(STR(?var), "http://example.org/ns#"))

这是我首选的方法,因为它只涉及简单的字符串匹配,所以应该相对高效。

SPARQL 1.0 解决方案

如果你被迫使用仅支持SPARQL 1.0的实现,你仍然可以通过REGEX()函数使用正则表达式来完成,但可能会更慢:

FILTER(REGEX(STR(?var), "^http://example\\.org/ns#"))

正则表达式和元字符

请注意,对于正则表达式,我们必须转义元字符.,否则它可以匹配任何字符,例如http://exampleXorg/ns#foo将被视为有效匹配。

由于\既是正则表达式又是SPARQL字符串的转义字符,因此在这里必须进行双重转义,以便使正则表达式仅具有\.并将.视为字面字符。

建议

如果您可以使用SPARQL 1.1,则应该使用它,因为使用更简单的字符串函数将更具性能,并避免在使用REGEX时担心转义任何元字符。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接