Почему этот запрос SPARQL дает неправильные результаты? - PullRequest
0 голосов
/ 12 февраля 2019

Я попытался выполнить несколько запросов sparql на http://dbpedia.org/sparql.

Мой запрос на sparql такой:

PREFIX : <http://dbpedia.org/resource/> 
PREFIX dbo: <http://dbpedia.org/ontology/>
SELECT ?Name ?Todestag ?person 
WHERE {
  ?person dbo:deathPlace :Hamburg .
  ?person foaf:name ?Name .
  ?person dbo:deathDate ?Todestag .
  FILTER ( ?Todestag > "2016-01-01"^^xsd:date ) . 
} ORDER BY ?Todestag

Проблема: каким-то образом эта FILTER не работает.Запрос SPARQL дает мне всех людей, которые умерли каждый день с начала времени в DBpedia.Тем не менее, я просто хочу, чтобы люди, которые умерли после 2016 года. Кто-нибудь может определить ошибку в запросе или синтаксисе?

Ответы [ 2 ]

0 голосов
/ 07 апреля 2019

Вот правильное решение для запроса, обратите внимание на приведение, примененное к FILTER CLAUSE (то есть xsd: date (? Todestag):

PREFIX : <http://dbpedia.org/resource/> 
PREFIX dbo: <http://dbpedia.org/ontology/>

SELECT ?Name ?Todestag ?person 
WHERE {
  ?person dbo:deathPlace :Hamburg .
  ?person foaf:name ?Name .
  ?person dbo:deathDate ?Todestag .
  FILTER ( xsd:date(?Todestag) > "2016-01-01"^^xsd:date ) . 
} ORDER BY ?Todestag
0 голосов
/ 12 февраля 2019

Хорошо, я понял это сам.Проблема определенно в фильтре.Теперь я изменил фильтр, и появляется желаемый результат.Фильтр должен быть: FILTER (str(?Todestag) >= "2016") .

Полностью, это будет выглядеть так:

PREFIX : <http://dbpedia.org/resource/> 
PREFIX dbo: <http://dbpedia.org/ontology/> 

SELECT ?Name ?Todestag ?person  
WHERE {       
?person dbo:deathPlace :Hamburg . 
?person foaf:name ?Name . 
?person dbo:deathDate ?Todestag .
FILTER (str(?Todestag) >= "2016") .   
} ORDER BY ?Todestag
...