无法在DBPedia上执行特定的SPARQL查询:/

时间:2011-05-17 15:30:09

标签: sparql dbpedia

例如,在this site上,执行第一个SPARQL查询并创建非常相似的内容:

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX p: <http://dbpedia.org/property/>
SELECT *
WHERE {
    ?name p:name <http://dbpedia.org/resource/Olivier_Theyskens> .
}

尝试执行它:here

我没有结果。但是,请将查询修改为以下内容:

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX p: <http://dbpedia.org/property/>
SELECT *
WHERE {
    ?name p:name ?otherthing.
}

我得到了结果,即使它们不是我想要的结果。

为什么第一个查询不起作用 - 我做错了什么? :/

2 个答案:

答案 0 :(得分:6)

在这种情况下,我认为这是因为您向后订购了查询语句。

DBpedia资源( <http://dbpedia.org/resource/Olivier_Theyskens> )是实体主题 ?s ),属性( p:name )是属性谓词 ?p ),该属性的值( ?name )是值或对象( ?o )。

SPARQL期望所有语句都是 { ?s ?p ?o } ,但您的语句似乎写成 { ?o ?p ?s } ......

总而言之,如果您尝试此查询 -

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX p: <http://dbpedia.org/property/>
SELECT *
WHERE 
  {
    <http://dbpedia.org/resource/Olivier_Theyskens>  p:name  ?name  .
  }

- 你会得到the results I think you want

答案 1 :(得分:4)

您的第一个查询的问题是p:name链接到Literal并且您尝试匹配URI。

如果您希望第一个查询起作用,则必须使用链接到URI而不是文字的属性http://dbpedia.org/ontology/artist

SELECT *
WHERE {
    ?s <http://dbpedia.org/ontology/artist> <http://dbpedia.org/resource/The_Velvet_Underground> .
}

请注意属性<http://dbpedia.org/ontology/artist>的不同名称空间此命名空间包含ontology而不是property - ontology是用于对象属性的名称空间。

相关问题