2

例如,在这个站点上,获取第一个 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> .
}

尝试执行它:这里

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

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

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

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

4

2 回答 2

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  .
  }

- 你会得到我认为你想要的结果

于 2011-05-18T13:43:19.767 回答
4

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

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

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

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

于 2011-05-17T15:36:51.557 回答