IMDB SPARQL端点 - 电影LIKE运算符

时间:2014-06-14 21:40:52

标签: php rdf sparql dbpedia linkedmdb

我目前正在使用不同的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查询有任何建议吗?

1 个答案:

答案 0 :(得分:7)

您的查询不合法,修复后查询没有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 ,也不会得到任何结果。我希望你真的想要像

这样的东西
imdb sparql endpoint

SPARQL results

IMDB没有SPARQL端点

我不知道任何IMDB SPARQL端点,Google搜索<http://data.linkedmdb.org/resource/movie/film>并未解决问题。我将会讨论LinkedMDB SPARQL端点,因为它有一些关于同样在IMDB中的电影的信息。它有一个SPARQL端点,以及一个SNORQL explorer,您可以在其中测试查询。

适用于DBpedia LinkedMDB

的查询

如果您还浏览了影片的LinkedMDB页面,您可以找到他们使用的属性。例如,在The Magician的页面中,您可以看到LinkedMDB也使用rdfs:label来表示标题。相关的类型不是dbpedia-owl:电影,但电影:电影,是contains

现在,LinkedMDB端点不使用SPARQL 1.1,因此您无法使用select distinct ?film where { ?film a movie:film ; rdfs:label ?label . filter regex( str(?label), "The Magician", "i") } limit 10 功能,但您仍然可以使用正则表达式。由于我们知道魔术师在那里有一个条目(它看起来不像那样),让我们看一下类似的查询检索它:

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

SPARQL results

现在您可以询问是否存在可以在LinkedMDB和DBpedia上运行的查询,并且确实存在:

{{1}}

LinkedMDB SPARQL results (1 film)
DBpedia SPARQL results (10 films)