SPARQL - 将结果资源限制为某些命名空间

时间:2012-03-07 08:23:23

标签: sparql

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

1 个答案:

答案 0 :(得分:27)

简短回答 - 没有标准的直接方式来做到这一点

长答案 - 但是,您可以使用字符串函数和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时的任何元字符