1

我目前正在尝试学习如何使用DBPedia上的资源使用 SPARQL 查询 RDF 数据并尝试使用Virtuoso SPARQL 查询编辑器,但我似乎误解了一些东西。

例如,我试图找出低俗小说的导演姓名,使用这个资源 : http://dbpedia.org/resource/Pulp_Fiction,所以我的(简单)查询是:

SELECT ?dirName
FROM <http://dbpedia.org/resource/Pulp_Fiction>
WHERE 
{ 
     ?s <http://dbpedia.org/property/director> ?dirName.
}

它可以工作,但结果是一个 URI 资源 : http://dbpedia.org/resource/Quentin_Tarantino。现在我想检索导演的出生名,所以我尝试了

SELECT ?dirRes ?dirName 
FROM <http://dbpedia.org/resource/Pulp_Fiction>
WHERE 
{ 
    ?s      <http://dbpedia.org/property/director>  ?dirRes. 
    ?dirRes <http://dbpedia.org/ontology/birthDate> ?dirName.
}

没有成功,结果是一个空数组......

有人可以帮我弄这个吗 ?

谢谢 !

4

1 回答 1

5

FROM部分选择您要查询的数据库,而不是实体。

请记住,RDF 由具有主-谓-宾结构的三元组组成。您正在寻找:

Pulp_Fiction director ?director

所以让我们查询一下:

SELECT * {
  <http://dbpedia.org/resource/Pulp_Fiction> <http://dbpedia.org/property/director> ?director.
}

现在要获取?director资源的属性,请在查询中添加更多三元组:

SELECT * {
  <http://dbpedia.org/resource/Pulp_Fiction> <http://dbpedia.org/property/director> ?director.
  ?director <http://dbpedia.org/ontology/birthDate> ?birthdate.
}

您可以使用预定义的前缀而不是完整的<...>URI 来缩短查询。您可以通过单击右上角的“命名空间前缀”来获取列表。如果您可以在使用dbpprop和之间进行选择dbpedia-owl,请始终使用后者,因为该命名空间中的类和属性得到了更好的管理。结果:

SELECT * {
  dbpedia:Pulp_Fiction dbpedia-owl:director ?director.
  ?director dbpedia-owl:birthDate ?birthdate.
}
于 2012-04-08T13:05:55.230 回答