【问题标题】:Possible to define B.C. dates using xsd:dateTime?可以定义 B.C.使用 xsd:dateTime 的日期?
【发布时间】:2020-12-12 23:32:18
【问题描述】:

我正在开发一个系统来使用 OWL 和知识图来表示历史时期和里程碑。是否可以使用 xsd:dateTime 数据类型来表示 B.C.诸如罗马帝国开始之类的日期?

【问题讨论】:

  • 不确定。来自w3.org/TR/owl2-syntax/#Time_Instants“OWL 2 实现可能支持这些数据类型的所有词法形式;但是,它必须至少支持 XML Schema Datatypes 的第 5.4 节中列出的词法形式。” 此外,来自@ 987654322@: “所有最低限度符合的处理器必须支持小于 10000 的非负年份值。” — 但是,Protege、Pellet 和 HermiT确实支持负的 xsd:dateTimes。

标签: xml datetime xsd owl


【解决方案1】:

您可以用减号表示负日期,但它的含义存在混淆。 XSD 1.0 采用了 ISO 8601,但没有注意到 ISO 8601 中 0001 之前的年份是 0000(这对应于天文学家使用的约定),而在历史学家使用的 BC/AD 日历中,1AD 之前的年份是 1BC。 XSD 1.1 更正了这一点,因此在 1.1 中有零年。当然,这只会影响您计算两个日期之间的间隔。

要注意的另一件事是 ISO 8601 使用预测公历(在 XSD 1.0 中拼写错误为“prolaptic”)。这会将当前的闰年规则投射到过去,而不是使用当时的现行规则。 (当然它也使用现代惯例,例如从 1 月 1 日而不是 3 月 21 日开始一年)。 BC 日期的 ISO 8601 表示与现代历史学家用于同一日期的标签不对应。 (而且它显然不符合当时人们使用的标签——他们不知道弥赛亚何时到来。)

因此,您可以使用负的 ISO 8601 日期,但您需要注意零年的规则,以及哪些年份有 2 月 29 日,可能与您期望的不太一样。

【讨论】:

  • 谢谢。此外,有人提到 Protege 不支持这一点,我也很担心,但我只是尝试了一下,令我惊讶的是 Protege 接受它作为有效的 dateTime 并且 Pellet 推理器也接受它。
【解决方案2】:

The spec 说是的。 (强调我的)

注意:
本建议中描述的日期和时间数据类型 受到 [ISO 8601] 的启发。 '0001' 是 公元 1 年(公元 1 年,有时写作“AD 1”或“1 AD")。没有年份 0,并且 '0000' 不是有效的词法 表示。 '-0001' 是第 1 年的词法表示 共同纪元之前(公元前 1 年,有时写作“公元前 1 年”)。

【讨论】:

    猜你喜欢
    • 2011-10-14
    • 1970-01-01
    • 1970-01-01
    • 2014-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-29
    相关资源
    最近更新 更多