IMDB SPARQL端点 - 电影LIKE运算符

Fin*_*ney -1 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
Run Code Online (Sandbox Code Playgroud)

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

Jos*_*lor 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
Run Code Online (Sandbox Code Playgroud)

SPARQL结果

IMDB没有SPARQL端点

我不知道任何IMDB SPARQL端点,谷歌搜索imdb sparql endpoint没有一个.我会说你正在谈论LinkedMDB SPARQL端点,因为它有一些关于同样在IMDB中的电影的信息.它有一个SPARQL端点,以及一个可以测试查询的SNORQL资源管理器.

适用于DBpedia LinkedMDB的查询

如果您还浏览了影片的LinkedMDB页面,您可以找到它们使用的属性.例如,从魔术师的页面,你可以看到LinkedMDB也使用rdfs:label来表示标题.相关的类型不是dbpedia-owl:电影,但电影:电影,这是<http://data.linkedmdb.org/resource/movie/film>.

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

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

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
Run Code Online (Sandbox Code Playgroud)

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