xsd:date是否应该在SPARQL中转换为公共纪元之前的日期时间
考虑这个SPARQL,其中datetime是公元前36年的一个日期:xsd:date是否应该在SPARQL中转换为公共纪元之前的日期时间,date,datetime,xsd,sparql,wikidata,Date,Datetime,Xsd,Sparql,Wikidata,考虑这个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.IllegalArgument
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年之前(包括公元前几年日期)可排序 一年中的日期预计至少有四位数字(实施不愿意处理超过四位数字的情况也不得而知)。这意味着日期的文本字符串可能应该是'-0036-01-01'
,而不是'-036-01-01'
一些实现不愿意考虑BCE日期;这算是一种资源限制,类似于不愿意考虑超过10^10^10^10^10^10
字节的字符串,因此值得注意的是,这是一个实现质量问题,而不是一致性问题
请注意,如果您认真使用BCE日期,您将希望使用,其中文字'-0036-01-01'
表示公元前37年(公历)的一天,而不是公元前36年。(年0000
是1bce
,-0001
是2bce
,等等)据工作组中的任何人所知,在基督教纪元之前的时期,格里高利日的主要用途是天文学家,而由于这一用途是他们的(卡西尼号引入以简化日期计算),使用-0036
来表示36 BCE
确实不是一个好主意