Проблема запроса Sparql с получением DBpedia - PullRequest
0 голосов
/ 31 мая 2018

Я пытаюсь запустить этот оператор 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 голосов
/ 31 мая 2018

Проблема не в том, что существуют все запрашиваемые тройки.Если хотя бы одно из отношений не существует, результат не будет получен.

Так что с ключевым словом 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") }
}
...