将xsd:date转换为SPARQL中的xsd:gYear

时间:2017-11-04 15:54:15

标签: sparql rdf dbpedia

你好我试图从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

1 个答案:

答案 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社区报告此事。它应该是固定的。