电影的 SPARQL 查询

SPARQL Query for movies

我正在创建一个 Web 应用程序,允许用户使用 SPARQL 查询来搜索电影。

目前我正在使用 DBpedia 获取数据。

问题是我需要 3 个数据(标题、流派和发布日期)。但问题是我没有收到电影的类型,但由于某种原因我收到了音乐类型:/

这是我创建的查询

PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX db: <http://dbpedia.org/ontology/>
PREFIX prop: <http://dbpedia.org/property/>
SELECT ?movieLink ?title ?genreLink ?genre ?releaseDate
WHERE {
    ?movieLink rdf:type db:Film;
               foaf:name ?title.
    OPTIONAL { ?movieLink prop:genre ?genreLink.
               ?genreLink rdfs:label ?genre.
               FILTER(lang(?genre) = 'en') }.
    OPTIONAL{ ?movieLink <http://dbpedia.org/ontology/releaseDate> ?releaseDate }.

    FILTER(lang(?title) = 'en')
    FILTER((?releaseDate >= '2010-01-01'^^xsd:date) && (?releaseDate < '2010-12-31'^^xsd:date))
}
ORDER BY DESC(?releaseDate)
LIMIT(100)

我已经在这个问题上停留了一段时间,所以任何帮助将不胜感激。

注意:我研究过使用 Linkedmdb,但遇到了类似的问题。

DBpedia 数据主要来自维基百科页面上的信息框。例如,如果您查看 the page for the film Ayyanar,您会注意到它包含两个信息框:

  • 一个关于电影本身,没有提及类型
  • 一个用于电影配乐,类型列为配乐

这就是您查询 returns 该电影配乐类型的原因。

似乎infoboxes about films不包含任何流派字段,因此您将无法通过这种方式获取该信息。

另一方面,该文章属于 动作片 类别,在 DBpedia 上使用 dct:subject 表示。我 认为 你应该能够使用类似的东西从中获取流派信息:

OPTIONAL { ?movieLink dct:subject ?genreLink.
           ?genreLink skos:broader+ dbc:Films_by_genre }

尽管它不会是非常干净的数据(因为维基百科的类别结构一团糟)。它实际上对我不起作用,因为这样的查询超出了 public DBpadia SPARQL 端点的内存限制。

@svick 给出了一个很好的查询。如果 dbpedia.org 无法回答,请使用我们包含传递推理的端点:http://factforge.net/sparql。例如,这有效:

SELECT * {
  ?movieLink a dbo:Film; dct:subject ?genreLink.
  ?genreLink skos:broaderTransitive dbc:Films_by_genre
}