使用SPARQL从dbpedia获取actor列表

时间:2013-09-03 20:14:51

标签: sparql dbpedia

我试图解决这个任务,我必须检索给定电影名称的演员列表。我是SPARQL和dbpedia的新手。

在阅读了一些教程后,到目前为止,我有以下内容:

PREFIX dbpo: <http://dbpedia.org/ontology/>

SELECT ?actor_name
WHERE {
  SERVICE <http://dbpedia.org/sparql> {
    "Total Recall" dbpo:movieTitle  ?movieName .
    ?movieName dbpo:actor ?actor.
    ?actor dbpo:actor_name ?actor_name.
  }
}

也许我的名字错了。

总的来说,我应该如何从dbpedia中找到特定的服务点,例如本问题中描述的服务点。

1 个答案:

答案 0 :(得分:1)

我不确定您在查询中使用的属性在哪里,因为它们似乎没有在相关资源上使用。另一个问题是,尽管SPARQL允许它作为三重模式,但是文字不能成为RDF三元组的主题,为了匹配,您需要这些三元组

"Total Recall" dbpo:movieTitle  ?movieName .

这个三元组,如果它是合法的,将断言 string “Total Recall”有一些电影标题,并将变量?movieName绑定到该标题。字符串不是电影,所以它可能也没有电影标题。

在这种特殊情况下,请访问

,查看DBpedia在Total Recall上的信息

你会看到一些形式的三元组

dbpprop:starring dbpedia:Ronny_Cox
dbpprop:starring dbpedia:Arnold_Schwarzenegger

这表明您需要一个类似的查询:

select ?actorName where { 
  ?film rdfs:label "Total Recall"@en ;
        dbpprop:starring ?actor .
  ?actor rdfs:label ?actorName .
  filter(langMatches(lang(?actorName),"en"))
}

SPARQL results

该查询适合插入public DBpedia SPARQL endpoint,但如果您在本地运行并希望使用service关键字来联合查询,则可以使用service <http://dbpedia.org/sparql>进行查询:

prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
prefix dbpprop: <http://dbpedia.org/property/>

select ?actorName where { 
  service <http://dbpedia.org/sparql> {
    ?film rdfs:label "Total Recall"@en ;
          dbpprop:starring ?actor .
    ?actor rdfs:label ?actorName .
    filter(langMatches(lang(?actorName),"en"))
  }
}

通常,查看DBpedia中使用哪种类和属性的最佳方法之一是利用DBpedia具有资源命名约定的事实,如DBpedia resource name standard中所述,因此给出了维基百科文章XYZ,您可以检索http://dbpedia.org/resource/XYZ并查看数据。对于本体类和属性,您还可以看到documentation about the ontologybrowse the ontology classes。对于交互式查询,public SPARQL endpoint非常有用。