为什么这个 SPARQL 查询会给出错误的结果?

Why does this SPARQL query give wrong results?

我尝试在 http://dbpedia.org/sparql 上执行一些 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 年后去世的人。谁能找出查询或语法中的错误?

好吧,我自己想通了。问题肯定是过滤器。我现在已经更改了过滤器并出现了所需的结果。过滤器必须是: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

这是查询的正确解决方案,请注意应用于 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