-1

我目前正在使用不同的 SPARQL 端点,并希望按标题查询 IMDB 端点以查找电影。我已经为 DBPedia 提出了以下查询。

SELECT DISTINCT film_title
WHERE {
   ?film_title rdf:type <http://dbpedia.org/ontology/Film> .
   ?film_title dbpprop:name ?label . FILTER langMatches(lang(?label), "en")
   ?film_title rdfs:comment ?comment . FILTER(LANGMATCHES(LANG(?comment), "en")) .
   FILTER (REGEX(STR(?film_title), "The Big Lebowski", "i")) .
} LIMIT 10

有人对如何构建 IMDB 查询有任何建议吗?

4

1 回答 1

8

您的查询不合法,修复后没有来自 DBpedia 的结果

您的查询不适用于 DBpedia。?它在 中丢失select distinct film_title,即使您将其添加到中,也不会得到任何结果。我希望你真的想要类似的东西

select distinct ?film where  {
   ?film a dbpedia-owl:Film ; 
         rdfs:label ?label .
   filter contains( ?label, "The Big Lebowski" )
}
limit 10

SPARQL 结果

IMDB 没有 SPARQL 端点

我不知道任何 IMDB SPARQL 端点,Google 搜索imdb sparql endpoint也没有出现。我会冒昧地假设您正在谈论 LinkedMDB SPARQL 端点,因为它包含一些关于也在 IMDB 中的一些电影的信息。它有一个 SPARQL 端点,以及一个SNORQL 资源管理器,您可以在其中测试查询。

适用于 DBpediaLinkedMDB的查询

如果您还浏览电影的 LinkedMDB 页面,您可以找出它们使用的属性。例如,从The Magician的页面中,您可以看到 LinkedMDB 也使用 rdfs:label 来指示标题。不过,相关类型不是 dbpedia-owl:Film,而是 movie:film,即<http://data.linkedmdb.org/resource/movie/film>.

现在,LinkedMDB 端点不使用 SPARQL 1.1,因此您不能使用该contains函数,但您仍然可以使用正则表达式。既然我们知道The Magician那里有一个条目(它看起来不像The Big Lebowski那样),让我们看一个检索它的类似查询:

select distinct ?film where  {
   ?film a movie:film ;
         rdfs:label ?label .
   filter regex( str(?label), "The Magician", "i")
}
limit 10

SPARQL 结果

现在您可以询问是否有适用于 LinkedMDB 和 DBpedia 的查询,果然有:

prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
prefix dbpedia-owl: <http://dbpedia.org/ontology/>
prefix movie: <http://data.linkedmdb.org/resource/movie/>

select distinct ?film where  {
  { ?film a movie:film       } union 
  { ?film a dbpedia-owl:Film }
  ?film rdfs:label ?label .
  filter regex( str(?label), "The Magician", "i")
}
limit 10

LinkedMDB SPARQL 结果(1 部电影)
DBpedia SPARQL 结果(10 部电影)

于 2014-06-14T23:10:56.163 回答