我正在设计 XML参考书目并思考如何捕获发布日期.对于我正在处理的大部分作品(书籍),出版日期仅包括年份,但对于一些(期刊文章),它的年份和月份,以及其他(报纸文章)的年份,月份和日期
为简单起见,我想使用单个元素来包含所有这三个变体.研究规范(附录D.2于http://www.w3.org/TR/xmlschema-2/),我看到如果我的元素是日期数据类型,我不能省略不需要它们的日期和/或月份(ISO 8601允许你的方式)因为这些表示用于不同的数据类型(分别是gYearMonth和gYear).
但是我可以使用零来表示不需要的值吗?像这样:
<pubdate>2009-04-00</pubdate> <pubdate>2007-00-00</pubdate>
该规范明确禁止“0000”作为年份值(附录D.3),但没有说明任何关于月和日的零的方式.
我怀疑我的问题的答案是否定的,因为日期值应该恰好对应于一天的间隔(规范部分3.2.9).但我仍然想问,两者都是为了确保我不会不必要地放弃有效的方法,因为我没有看到其他地方提到的这个问题.
我发现最接近的是:http://www.biglist.com/lists/xsl-list/archives/200408/msg00297.html.提出的一个解决方案是为日期的每个部分创建一个属性,如果我不能像上面提到的那样使用零,我可能最终会这样做.当然,欢迎更好的想法.
不,00不是每个xsd:date的月或日的合法值;你列出的例子<pubdate>2009-04-00</pubdate> <pubdate>2007-00-00</pubdate>
不会有效.
观察#1:
您提到使用属性.我假设你的意思不是将整个日期字符串放在属性而不是元素中,因为两者的输入问题是相同的.无论哪种方式,您都可以定义一个允许省略月份和天数的新类型(这将优于允许00).
观察#2:
日期可能非常混乱,特别是如果源是不受控制的遗留数据.您可能希望尽可能将月份和日期的可选组件规范化为严格格式,但也支持对由于数据不完整或模糊而无法进行规范化的情况下最初提供的日期的无约束文本捕获.源自无约束用户输入或OCR的日期对于鞋拔成标准格式可能特别具有挑战性.