为什么 XSD 日期类型将 YYYYY-MM-DD 视为有效日期?
Why XSD date type consider YYYYY-MM-DD as a valid date?
我有一个 XSD 包含以下元素
<element name="fromDate" type="date" maxOccurs="1" minOccurs="1" />
我有一个 XML 包含以下元素
<fromDate>20100-11-22</fromDate>
如果我根据上述 XSD 验证 XML,它不会给出任何错误并将 20100-11-22 作为有效日期。为什么会这样?如何强制它检查 YYYY 而不是将 YYYYY 也视为有效?
更新
进一步阅读后,发现根据 W3C 规范,日期时间的词法表示允许 "four-or-more digit optionally negative-signed numeral that represents the year" [1]。
[1] https://www.w3.org/TR/xmlschema-2/#dateTime-lexical-representation
如果您不关心 10,000 年类似 Y2K 的问题,您可以使用 xs:pattern
将年份位数限制为四位:
<xs:simpleType name="ShortSightedDate">
<xs:restriction base="xs:date">
<xs:pattern value="\d{4}-\d{2}-\d{2}"/>
</xs:restriction>
</xs:simpleType>
我有一个 XSD 包含以下元素
<element name="fromDate" type="date" maxOccurs="1" minOccurs="1" />
我有一个 XML 包含以下元素
<fromDate>20100-11-22</fromDate>
如果我根据上述 XSD 验证 XML,它不会给出任何错误并将 20100-11-22 作为有效日期。为什么会这样?如何强制它检查 YYYY 而不是将 YYYYY 也视为有效?
更新
进一步阅读后,发现根据 W3C 规范,日期时间的词法表示允许 "four-or-more digit optionally negative-signed numeral that represents the year" [1]。
[1] https://www.w3.org/TR/xmlschema-2/#dateTime-lexical-representation
如果您不关心 10,000 年类似 Y2K 的问题,您可以使用 xs:pattern
将年份位数限制为四位:
<xs:simpleType name="ShortSightedDate">
<xs:restriction base="xs:date">
<xs:pattern value="\d{4}-\d{2}-\d{2}"/>
</xs:restriction>
</xs:simpleType>