我有一个带有以下元素的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
答案 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}}