是否有一种标准方法可以限制SPARQL查询的结果属于特定的命名空间。
答案 0 :(得分:27)
简短回答 - 没有标准的直接方式来做到这一点
长答案 - 但是,您可以使用字符串函数和FILTER
子句对此进行限制。您使用的功能取决于您的引擎支持的SPARQL版本。
现在几乎所有的实现都支持SPARQL 1.1,您可以使用STRSTARTS()
函数,如下所示:
FILTER(STRSTARTS(STR(?var), "http://example.org/ns#"))
这是我的首选方法,应该相对有效,因为它是简单的字符串匹配。
如果您使用仅支持SPARQL 1.0的实现,您仍然可以这样做,但它通过REGEX()
函数使用正则表达式,因此可能会更慢:
FILTER(REGEX(STR(?var), "^http://example\\.org/ns#"))
请注意,对于正则表达式,我们必须转义元字符.
,否则它可以匹配任何字符,例如http://exampleXorg/ns#foo
将被视为有效匹配。
由于\
是正则表达式和SPARQL字符串的转义字符,因此必须对其进行双重转义才能使正则表达式只包含\.
并处理.
作为文字角色。
如果您可以使用SPARQL 1.1,那么这样做是因为使用更简单的字符串函数会更高效,并且无需担心转义使用REGEX
时的任何元字符