考虑这个 SPARQL,其中 datetime 是公元前 36 年的日期:
SELECT ?date ?year WHERE {
wd:Q1180731 wdt:P577 ?datetime .
BIND(xsd:date(?datetime) AS ?date)
# BIND(YEAR(?datetime) AS ?year)
}
该xsd:date(?datetime)
函数在 Wikidata 查询服务 Blazegraph 实例上失败,带有java.lang.IllegalArgumentException: -036-01-01T00:00:00Z
.
它应该工作吗?与YEAR
不抱怨的行(未注释时)。
我想出了这个变体:
SELECT ?date WHERE {
wd:Q1180731 wdt:P577 ?datetime .
BIND(REPLACE(STR(?datetime), 'T.*', '') AS ?date)
}
在这种情况下,结果是-036-01-01
。此类 BC 日期的可排序性可能不好。我们是否有其他方法/函数可以使 1000 年之前的(字符串?)日期(包括 BC 日期)可排序?