我目前正在尝试学习如何使用DBPedia上的资源使用SPARQL查询RDF数据并尝试使用Virtuoso SPARQL查询编辑器,但我似乎误解了一些东西.
例如,我试图找到Pulp Fiction的导演名称,使用这个资源:
http://dbpedia.org/resource/Pulp_Fiction,所以我的(简单)查询是:
SELECT ?dirName
FROM <http://dbpedia.org/resource/Pulp_Fiction>
WHERE
{
?s <http://dbpedia.org/property/director> ?dirName.
}
Run Code Online (Sandbox Code Playgroud)
它可以工作,但结果是一个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.
}
Run Code Online (Sandbox Code Playgroud)
没有成功,结果是一个空数组......
有人可以帮我弄这个吗 ?
谢谢 !
该FROM部分选择要查询的数据库,而不是实体.
请记住,RDF由具有主谓词对象结构的三元组组成.您正在寻找:
Pulp_Fiction director ?director
Run Code Online (Sandbox Code Playgroud)
那么让我们查询一下:
SELECT * {
<http://dbpedia.org/resource/Pulp_Fiction> <http://dbpedia.org/property/director> ?director.
}
Run Code Online (Sandbox Code Playgroud)
现在要获取?director资源的属性,请在查询中添加更多三元组:
SELECT * {
<http://dbpedia.org/resource/Pulp_Fiction> <http://dbpedia.org/property/director> ?director.
?director <http://dbpedia.org/ontology/birthDate> ?birthdate.
}
Run Code Online (Sandbox Code Playgroud)
您可以使用预定义的前缀而不是完整的<...>URI 来缩短查询时间.您可以通过单击右上角的"命名空间前缀"来获取列表.如果您可以选择使用dbpprop和dbpedia-owl,请始终使用后者,因为可以更好地管理该命名空间中的类和属性.结果:
SELECT * {
dbpedia:Pulp_Fiction dbpedia-owl:director ?director.
?director dbpedia-owl:birthDate ?birthdate.
}
Run Code Online (Sandbox Code Playgroud)