XSD应该:在SPARQL中的共同ERA之前的数据转换日期



考虑此sparql,其中日期时间是36 BC的日期:

SELECT ?date ?year WHERE {
  wd:Q1180731 wdt:P577 ?datetime .
  BIND(xsd:date(?datetime) AS ?date)
  # BIND(YEAR(?datetime) AS ?year)
}

使用java.lang.IllegalArgumentException: -036-01-01T00:00:00Z的Wikidata查询服务BlazeGraph实例上的xsd:date(?datetime)函数失败。

应该可以工作吗?使用YEAR的行不抱怨(未注册时)。

我提出了这种变化:

SELECT ?date WHERE {
  wd:Q1180731 wdt:P577 ?datetime .
  BIND(REPLACE(STR(?datetime), 'T.*', '') AS ?date)
}

在这种情况下,结果是-036-01-01。这种BC日期的可分解性可能不好。我们是否还有其他方法/函数可以制作(字符串?)1000年(包括卑诗省日期)的日期?

ISO 8601日期预计至少有四位数字(并且实施不愿意处理超过四位数并不尚不清楚)。这意味着您日期的文字字符串可能应该是'-0036-01-01',而不是'-036-01-01'

某些实现不愿意考虑BCE日期;这是一种资源限制,类似于不愿意考虑10^10^10^10^10字节的字符串,因此,这是值得的,这是实施问题的质量,而不是符合性问题。

请注意,如果您完全认真使用BCE日期,您将想使用XSD 1.1,其中字面的'-0036-01-01'表示每天(Gregorian)37公元前37年,而不是公元前36年。(0000年是1 BCE-00012 BCE等),据WG中的任何人所知道的,在基督教时代之前的Gregorian Date的主要用途是天文学家,并且由于这种逐步使用的是他们的。(由卡西尼(Cassini)介绍以简化日期计算),使用-0036表示36 BCE

最新更新