SPARQL查询所有在DBPedia生活了20世纪的人



我想查询所有在DBPedia生活了整个20世纪的人。我正在使用https://dbpedia.org/sparql/以处理我的查询。我已将输出限制在20。

我尝试过的查询如下:

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX dbo: <http://dbpedia.org/ontology/>
PREFIX dbp: <http://dbpedia.org/property/>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
SELECT ?personName ?birthDate ?deathDate
WHERE {
FILTER (?birthDate < "1900-01-01"^^xsd:date AND ?deathDate > "1999-12-31"^^xsd:date).
?p rdf:type dbo:Person.
?p dbp:name ?personName.
?p dbp:birthDate ?birthDate.
?p dbp:deathDate ?deathDate.
}
LIMIT 20.

在输出中,所有人都在1999年12月31日之后死亡,但他们在1900年1月01日之前没有出生。为什么我的查询是错误的?我该怎么修?

提前谢谢你的时间。

此问题是由于查询结果中包含整数值,可以使用相同或新FILTER((部分中的DATATYPE((函数解决。

例如:

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX dbo: <http://dbpedia.org/ontology/>
PREFIX dbp: <http://dbpedia.org/property/>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
SELECT ?personName ?birthDate ?deathDate
WHERE 
{
?person rdf:type dbo:Person;
dbp:name ?personName;
dbp:birthDate ?birthDate;
dbp:deathDate ?deathDate.

#This FILTER ensures that only xsd:date values are returned
FILTER(DATATYPE(?birthDate) = xsd:date && DATATYPE(?deathDate) = xsd:date).

FILTER (?birthDate < "1900-01-01"^^xsd:date && ?deathDate > "1999-12-31"^^xsd:date).

}
LIMIT 20

实时查询定义

实时查询结果

DATATYPE((文档

最新更新