4

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

为简单起见,我想使用单个元素来包含所有这三个变体。研究规范(http://www.w3.org/TR/xmlschema-2/上的附录 D.2 ),我发现如果我的元素是日期数据类型,我不能只省略日期和/或我不需要它们的月份(ISO 8601 允许您这样做的方式),因为这些表示用于不同的数据类型(分别为gYearMonthgYear)。

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

<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。提出的一种解决方案是为日期的每个部分创建一个属性,如果我不能像上面建议的那样使用零,我最终可能会这样做。当然,欢迎更好的想法。

4

2 回答 2

4

No, 00 is not a legal value for month or day per xsd:date; the examples you listed

<pubdate>2009-04-00</pubdate>
<pubdate>2007-00-00</pubdate>

would not be valid.

Observation #1:

You mentioned using attributes instead. I assume by this that you mean something other than placing the entire date string in an attribute rather than an element, because the typing issue is the same for both. Either way, you could define a new type that allowed months and days to be omitted (which would be preferable to allowing 00).

Observation #2:

Dates can be very messy, especially if the source is uncontrolled legacy data. You may want to normalize to a strict format with optional components for month and day as much as possible, but also support an unconstrained text capture of the date as originally presented for cases where normalization is not possible due to incomplete or ambiguous data. Dates originating from unconstrained user input or OCR'ing can be particularly challenging to shoehorn into a standard format.

于 2013-12-12T00:07:36.403 回答
3

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

<pubdate>2013-12-12</pubdate>
<pubdate>2009-04</pubdate>
<pubdate>2007</pubdate>
于 2013-12-12T09:35:47.633 回答