2

I have trying to solve this task where I have to retrieve the list of actors for a given film name. I am new to both SPARQL and dbpedia.

After reading some tutorials, so far I have the following:

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

Perhaps I am getting the names wrong.

On a general note, how should I go about finding specific service points from dbpedia, such as the one described in this question.

4

1 回答 1

2

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

"Total Recall" dbpo:movieTitle  ?movieName .

如果它是合法的,这个三元组将是字符串“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 结果

该查询适用于插入公共 DBpedia SPARQL 端点,但如果您在本地运行并希望使用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 资源名称标准中所讨论的那样,因此给定 Wikipedia 文章XYZ,您可以检索http://dbpedia.org/resource/XYZ并查看数据。对于本体类和属性,您还可以查看有关本体的文档,并浏览本体类。对于交互式查询,公共 SPARQL 端点非常有用。

于 2013-09-03T20:38:53.377 回答