6

假设我想返回三元组“玩得开心”的结果。我不知道如何解释单词之间的空格。以下是我尝试过的查询,但没有成功。让我知道是否有人能发现我做错了什么

<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> }";
4

2 回答 2

9

简短的回答:你不能,至少不能直接。

稍微长一点的答案:RDF 本身使用 RDF URI 引用。另一方面,SPARQL 查询语言使用 IRI(原因是 RDF 早于 IRI,并且 RDF URI 引用的概念是在预期 IRI 最终的样子时开发的。他们几乎做对了 :))。

不幸的是,RDF URI 引用和 IRI 的定义之间存在差异,您刚刚遇到了一种情况:虽然 RDF URI 引用允许空格,但 IRI 不允许。SPARQL 语法无法处理 URI 引用,例如您的示例中的引用。请查看此讨论以获取更多详细信息。

你最好的选择?避免在 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")
}
于 2012-01-29T20:50:36.550 回答
2
  1. owl:sameAs不是owl:sameas。_ 注意大写A。
  2. IRI 中不能有空格。
于 2012-01-29T20:55:02.937 回答