你好我试图从1900年以后出生在里昂的DBpedia人那里取回(" 1900" ^^ xsd:gYear) 这是我的代码:
prefix dbo: <http://dbpedia.org/ontology/>
prefix foaf: <http://xmlns.com/foaf/0.1/>
prefix dbr: <http://dbpedia.org/resource/>
prefix xsd: <http://www.w3.org/2001/XMLSchema#>
select $n $birthDate
{
$p a dbo:Person.
$p dbo:birthPlace dbr:Lyon.
$p foaf:name $n.
$p dbo:birthDate $birthDate.
filter($birthDate > "1980"^^xsd:gYear).
}
我得到以下结果: query results
答案 0 :(得分:1)
根据我的理解,问题在于数据:许多日期没有有效的xsd:date
文字,因此,比较失败。 filter($birthDate > "1980-01-01"^^xsd:date)
也失败了。根据XML Schema,xsd:date
必须以"YYYY-MM-DD"
形式提供文字。遗憾的是,DBpedia中的许多日期并非如此。对于有效日期,比较效果非常好。
解决方法:
prefix dbo: <http://dbpedia.org/ontology/>
prefix foaf: <http://xmlns.com/foaf/0.1/>
prefix dbr: <http://dbpedia.org/resource/>
prefix xsd: <http://www.w3.org/2001/XMLSchema#>
select $n $birthDate ?year
{
$p a dbo:Person.
$p dbo:birthPlace dbr:Lyon.
$p foaf:name $n.
$p dbo:birthDate $birthDate.
filter($birthDate > "1980-01-01"^^xsd:date).
bind(replace(str($birthDate),"(\\d+)-\\d*-\\d*", "$1") as ?year)
filter(xsd:integer(?year) > 1980)
}
请注意,对于其他类型的错误日期,它可能会失败。我没有检查所有角落案件。
有人应该向DBpedia社区报告此事。它应该是固定的。