为什么XSD日期类型将YYYYY-MM-DD视为有效日期?

时间:2018-06-13 22:00:40

标签: xml xsd xsd-validation

我有一个带有以下元素的XSD

<element name="fromDate" type="date" maxOccurs="1" minOccurs="1" />

我有一个带有以下元素的XML

<fromDate>20100-11-22</fromDate>

如果我针对上述XSD验证该XML,则不会出现任何错误,并将20100-11-22作为有效日期。为什么会这样?如何强制它检查YYYY而不是YYYYY也有效?

更新

经过进一步阅读,发现根据W3C规范,日期时间的词汇表示允许“四位或更多位数字可选的负号数字代表年份”[1]。

[1] https://www.w3.org/TR/xmlschema-2/#dateTime-lexical-representation

1 个答案:

答案 0 :(得分:1)

如果您不关心10,000年中类似Y2K的问题,您可以使用<xs:simpleType name="ShortSightedDate"> <xs:restriction base="xs:date"> <xs:pattern value="\d{4}-\d{2}-\d{2}"/> </xs:restriction> </xs:simpleType> 将年份数量限制为4位数:

{{1}}