有没有一种标准的方法来限制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/

10-13 07:50