有没有一种标准的方法来限制SPARQL查询的结果属于特定的名称空间。
最佳答案
简短答案-没有标准的直接方法可以做到这一点
长答案-但是,可以的,您可以使用字符串函数和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
时所拥有的任何元字符。关于sparql - SPARQL-将结果资源限制到某些命名空间,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9597981/