SPARQL如何从xsd:date获取整数年份

时间:2017-10-23 01:26:57

标签: sparql rdf

我有一个SPARQL查询,可以选择1990年出生年份的人。我怎样才能从xsd:date格式获得年份?我可以看到如何使用year()从xsd:dateTime获取年份,但它不适用于xsd:date。

PREFIX dbr: <http://dbpedia.org/resource/>
PREFIX dbo: <http://dbpedia.org/ontology/>
SELECT ?birthYear
WHERE
{dbr:Ilse_DeLange dbo:birthDate ?birth
 #how to get year only as a integer?}

2 个答案:

答案 0 :(得分:0)

根据规范,year()仅适用于xsd:dateTime文字。

根据三重商店的不同,您可能会先尝试转换为xsd:dateTime

PREFIX dbr: <http://dbpedia.org/resource/>
PREFIX dbo: <http://dbpedia.org/ontology/>
SELECT DISTINCT (year(xsd:dateTime(?birthDate)) as ?birthYear) WHERE {
  dbr:Ilse_DeLange dbo:birthDate ?birthDate
}

答案 1 :(得分:0)

要做到这一点,不要对xsd的扩展做任何假设:date需要一些字符串抨击。

您可以在?birthDate的词法形式上使用REPLACE将年份作为字符串,然后将其转换为xsd:integer。

REPLACE(str(?birthDate), "(\\d*)-.*", "$1")