是否有一种标准的方法来限制SPARQL查询结果属于特定的命名空间。
简短回答 - 没有标准的直接方法来实现这一点。
长回答 - 但是,您可以使用字符串函数和一个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
时担心转义任何元字符。