DBpedia检索的Sparql查询问题

时间:2018-05-31 12:34:32

标签: sparql dbpedia

我正在尝试运行此Sparql语句来从DBpedia读取数据;但是,它只返回列名而不返回行数据。 如果有人能告诉我这是什么问题。我会更感激的 Sparql查询如下:

PREFIX dbp: <http://dbpedia.org/property/>
PREFIX dc: <http://purl.org/dc/terms/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
SELECT ?actor ?movie ?director ?movie_date
WHERE {
     ?m dc:subject <http://dbpedia.org/resource/Category:American_films> .
     ?m rdfs:label ?movie .
     FILTER(LANG(?movie) = "en")
     ?m dbp:released ?movie_date .
     FILTER(DATATYPE(?movie_date) = xsd:date)
     ?m dbp:starring ?a .
     ?a rdfs:label ?actor .
     FILTER(LANG(?actor) = "en")
     ?m dbp:director ?d .
     ?d rdfs:label ?director .
     FILTER(LANG(?director) = "en")
   }

1 个答案:

答案 0 :(得分:0)

问题不在于所有查询的三元组都存在。如果至少有一个关系不存在,则不会给出结果。

因此,使用OPTIONAL关键字时,只有在存在时才会给出答案,如果不存在,则不会阻止您的查询。它只是将缺失值留空。

PREFIX dbp: <http://dbpedia.org/property/>
PREFIX dc: <http://purl.org/dc/terms/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>

SELECT ?actor ?movie ?director ?movie_date

WHERE {
 ?m dc:subject <http://dbpedia.org/resource/Category:American_films> .

 OPTIONAL{
   ?m rdfs:label ?movie .
   FILTER(LANG(?movie) = "en") }

 OPTIONAL {
   ?m dbp:released ?movie_date .
   FILTER(DATATYPE(?movie_date) = xsd:date) }

 OPTIONAL{
   ?m dbp:starring ?a .
   ?a rdfs:label ?actor .
   FILTER(LANG(?actor) = "en") }

 OPTIONAL{
   ?m dbp:director ?d .
   ?d rdfs:label ?director .
   FILTER(LANG(?director) = "en") }
}