【发布时间】:2012-03-07 08:23:22
【问题描述】:
是否有一种标准方法可以将 SPARQL 查询的结果限制为属于特定命名空间。
【问题讨论】:
标签: sparql
是否有一种标准方法可以将 SPARQL 查询的结果限制为属于特定命名空间。
【问题讨论】:
标签: 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 时拥有的任何元字符
【讨论】: