使用Sparql查询空间

使用Sparql查询空间,sparql,semantic-web,jena,arq,Sparql,Semantic Web,Jena,Arq,如果我想返回三元组的结果“玩得开心”。我不知道如何解释字里行间的空隙。下面是我尝试过的一个查询,但没有成功。如果有人能发现我做错了什么,请告诉我 <rdf:Description rdf:about="http://website.com/urls/playing games"> <owl:sameAs rdf:resource="http://website.com/urls/having fun"/> </rdf:Description> "PR

如果我想返回三元组的结果“玩得开心”。我不知道如何解释字里行间的空隙。下面是我尝试过的一个查询,但没有成功。如果有人能发现我做错了什么,请告诉我

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

“前缀owl:SELECT*其中{?y owl:sameAs+}”;

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

回答稍微长一点:RDF本身使用RDF URI引用。另一方面,SPARQL查询语言使用IRIs(原因是RDF早于IRIs,RDF URI引用的概念是在预期IRIs最终会是什么样子的情况下发展起来的。他们几乎做到了:))

不幸的是,RDF URI引用和IRIs的定义之间存在差异,您刚刚遇到了一种情况:RDF URI引用允许空白,而IRIs不允许空白。SPARQL语法无法处理URI引用,例如示例中的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")
}
前缀owl:
选择?y
何处{
y猫头鹰:sameAs+?x
过滤器(str(?x)=“http://website.com/urls/playing 乐趣“)
}
  • 它是
    owl:sameAs
    而不是
    owl:sameAs
    。注:大写字母A
  • IRIs中不能有空格

  • 很好的答案可能会避开空格