SPARQL 如何从 xsd:date 中获取整数年
SPARQL How to get year as integer from xsd:date
我有一个 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?}
根据规范,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
}
要在不对 xsd:date 的扩展做任何假设的情况下做到这一点,需要一些字符串攻击。
您可以在 ?birthDate 的词法形式上使用 REPLACE 将年份作为字符串,然后将其转换为 xsd:integer。
REPLACE(str(?birthDate), "(\d*)-.*", "")
我有一个 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?}
根据规范,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
}
要在不对 xsd:date 的扩展做任何假设的情况下做到这一点,需要一些字符串攻击。
您可以在 ?birthDate 的词法形式上使用 REPLACE 将年份作为字符串,然后将其转换为 xsd:integer。
REPLACE(str(?birthDate), "(\d*)-.*", "")