2017-03-22 85 views
0

我正在创建一个Web应用程序,允许用户使用SPARQL查询搜索电影。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但有类似的问题。

回答

1

DBpedia数据主要来自Wikipedia页面上的Infoboxes。例如,如果你看一下the page for the film Ayyanar,你会发现它包含两个InfoBoxes到:

  • 一个对电影本身,没有提到流派
  • 一个为电影的配乐,与列为原声流派

这就是为什么你的查询返回该电影配乐类型的原因。

看起来infoboxes about films不包含任何类型的字段,所以您将无法以这种方式获取该信息。

另一方面,该文章是在类别动作戏剧电影它是在DBpedia使用dct:subject代表。我认为你应该能够从使用类似取得体裁信息:

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

虽然它不会是非常干净的数据(由于维基百科的类别结构是一个烂摊子)。它实际上并不适用于我,因为此类查询超出了公共DBpadia SPARQL端点上的内存限制。

+0

非常感谢清理,截至由anychance你会知道如何查询linkedmdb相同数据 –

+0

@IeuanWalker如果你给我们一个LinkedMDB链接和一些查询,以便从开始,有一个更好的你的第二个问题将得到回答 –

1

@svick给出了一个很好的查询。如果dbpedia.org不会回答它,请使用我们的包含传递推理的端点:http://factforge.net/sparql。比如这个作品:

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

http://factforge.net/sparql甚至可以回答缓慢的版本'skos:更广泛的+',但在180s而不是瞬间。所以请不要使用它。 –