我正在创建一个允许用户使用SPARQL查询搜索电影的Web应用程序。
目前我正在使用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但是遇到了类似的问题。
答案 0 :(得分:1)
DBpedia数据主要来自维基百科页面上的信息框。例如,如果您查看the page for the film Ayyanar,您会发现它包含两个信息框:
这就是为什么你的查询返回该电影的音轨类型的原因。
似乎infoboxes about films不包含任何类型的字段,因此您将无法以这种方式获取该信息。
另一方面,该文章属于动作剧电影类别,它在DBpedia上使用dct:subject
表示。我认为你应该能够通过以下方式获取类型信息:
OPTIONAL { ?movieLink dct:subject ?genreLink.
?genreLink skos:broader+ dbc:Films_by_genre }
虽然它不是非常干净的数据(因为维基百科的类别结构很乱)。它实际上对我不起作用,因为此类查询超出了公共DBpadia SPARQL端点的内存限制。
答案 1 :(得分:1)
@svick提供了一个很好的查询。如果dbpedia.org没有回复,请使用我们的包含传递推理的端点:http://factforge.net/sparql。例如,这有效:
SELECT * {
?movieLink a dbo:Film; dct:subject ?genreLink.
?genreLink skos:broaderTransitive dbc:Films_by_genre
}