我试图解决这个任务,我必须检索给定电影名称的演员列表。我是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中找到特定的服务点,例如本问题中描述的服务点。
答案 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"))
}
该查询适合插入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 ontology和browse the ontology classes。对于交互式查询,public SPARQL endpoint非常有用。