用空格进行Sparql查询

6

假设我想返回“having fun”这个三元组的结果。我不知道如何计算单词之间的空格。以下是我尝试过的查询,但它没有起作用。如果有人能发现我错在哪里,请告诉我。

<rdf:Description rdf:about="http://website.com/urls/playing games">
    <owl:sameAs rdf:resource="http://website.com/urls/having fun"/>
</rdf:Description>

"PREFIX owl: <http://www.w3.org/2002/07/owl#> SELECT * WHERE { ?y owl:sameAs+ <http://website.com/urls/playing fun> }";
2个回答

9
简短回答:你不能直接使用含有空格的 RDF URI 引用。
稍微长一点的回答:RDF 本身使用 RDF URI 引用。而 SPARQL 查询语言则使用 IRI(原因是 RDF 比 IRI 更早,RDF URI 引用的概念是在预期 IRI 最终会变成什么样子的情况下开发出来的。他们几乎做到了 :))。
不幸的是,RDF URI 引用和 IRI 的定义存在差异,你碰到了其中一个问题:虽然 RDF URI 引用允许使用空格,但 IRI 不允许。SPARQL 语法无法处理你示例中的 URI 引用。欲了解更多详细信息,请查看 this discussion
最好的方法?避免在 URI 引用中使用空格。将它们替换为下划线或只是删除它们。
话虽如此,还是有一个解决办法可以使你的查询起作用:
PREFIX owl: <http://www.w3.org/2002/07/owl#> 
SELECT ?y 
WHERE { 
   ?y owl:sameAs+ ?x
   FILTER (str(?x) = "http://website.com/urls/playing fun")
}

很好的答案,可能会避免空格。 - Sam

2
  1. owl:sameAs应该是大写的A,而不是owl:sameas
  2. IRI中不能有空格。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接