Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是";00“;XML架构日期数据类型的法定月和/或日值?_Xml_Date_Types_Xsd_Bibliography - Fatal编程技术网

是";00“;XML架构日期数据类型的法定月和/或日值?

是";00“;XML架构日期数据类型的法定月和/或日值?,xml,date,types,xsd,bibliography,Xml,Date,Types,Xsd,Bibliography,我正在设计一个XML参考书目,并考虑如何捕获发布日期。对于我正在处理的大多数作品(书籍),出版日期只包括年份,但对于一些(期刊文章)是年和月,而对于其他(报纸文章)是年、月和日 为了简单起见,我想使用一个元素来包含这三个变体。研究规范(附录D.2 at),我发现如果我的元素是日期数据类型,我不能只省略我不需要的日期和/或月份(ISO 8601允许的方式),因为这些表示用于不同的数据类型(gYearMonth和gYear) 但是我可以对不需要的值使用零吗?像这样: <pubdate>2

我正在设计一个XML参考书目,并考虑如何捕获发布日期。对于我正在处理的大多数作品(书籍),出版日期只包括年份,但对于一些(期刊文章)是年和月,而对于其他(报纸文章)是年、月和日

为了简单起见,我想使用一个元素来包含这三个变体。研究规范(附录D.2 at),我发现如果我的元素是日期数据类型,我不能只省略我不需要的日期和/或月份(ISO 8601允许的方式),因为这些表示用于不同的数据类型(gYearMonthgYear

但是我可以对不需要的值使用零吗?像这样:

<pubdate>2009-04-00</pubdate>
<pubdate>2007-00-00</pubdate>
2009-04-00
2007-00-00
规范明确禁止将“0000”作为年值(附录D.3),但没有以任何方式说明月和日的零

我怀疑我的问题的答案是否定的,因为日期值应该与整整一天的间隔相对应(规范第3.2.9节)。但我仍然想问,既为了确保我没有不必要地放弃一个有效的方法,又因为我还没有看到其他地方提到过这个确切的问题


我发现的最接近的东西是:。其中一个解决方案是为日期的每一部分创建一个属性,如果我不能像上面建议的那样使用零,我可能最终会这样做。当然,更好的想法是受欢迎的。

不,
00
不是每个
xsd:date
的月或日的法定值;你列举的例子

<pubdate>2009-04-00</pubdate>
<pubdate>2007-00-00</pubdate>
2009-04-00
2007-00-00
这是无效的

观察#1:

您提到了使用属性。我假设您的意思不是将整个日期字符串放在属性中,而是放在元素中,因为两者的键入问题是相同的。无论哪种方式,您都可以定义一个允许省略月份和天数的新类型(这比允许
00
更好)

观察#2:


日期可能非常混乱,尤其是当源是不受控制的遗留数据时。您可能希望尽可能使用可选的月和日组件将日期规范化为严格的格式,但也支持不受约束的日期文本捕获,因为在由于数据不完整或不明确而无法进行规范化的情况下,原始显示的日期文本捕获。来自无约束用户输入或OCR’ing的日期对于将其强制转换为标准格式尤其具有挑战性。

您可以使用成员类型(xs:date、xs:gYearMonth、xs:gYear)定义联合类型,这将允许您使用以下值:

<pubdate>2013-12-12</pubdate>
<pubdate>2009-04</pubdate>
<pubdate>2007</pubdate>
2013-12-12
2009-04
2007

谢谢你,KJ。你在观察1中的假设是正确的;我重新编写了问题的这一部分来澄清它(将“将日期放入属性”更改为“为日期的每个部分创建属性”)。Michael,我无法想象为什么我从未对此发表评论,因为这正是我想要的。对不起,谢谢!