我在 XSD 中定义了以下简单类型:
<xs:simpleType name="myDateFormat">
<xs:union memberTypes="xs:dateTime xs:date xs:gYearMonth xs:gYear"/>
</xs:simpleType>
我希望允许 YYYY、YYYY-MM、YYYY-MM-DD 和完整日期时间格式。但经过一些测试后,我意识到我没有收到以下值的错误:
- 2006999
- 20061302
- 2006999999
如何创建仅允许 YYYY、YYYY-MM、YYYY-MM-DD 和完整日期时间的类型?
EDIT1:这是一个可能的解决方案吗?
<xs:simpleType name="myDateFormat">
<xs:union>
<xs:simpleType>
<xs:restriction base="xs:gYear">
<xs:pattern value="\d{4}"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType>
<xs:restriction base="xs:gYearMonth">
<xs:pattern value="\d{4}-\d{2}"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType>
<xs:restriction base="xs:date">
<xs:pattern value="\d{4}-\d{2}-\d{2}"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType>
<xs:restriction base="xs:dateTime">
<xs:pattern value="\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}"/>
</xs:restriction>
</xs:simpleType>
</xs:union>
</xs:simpleType>
最佳答案
是 xs:gYear
允许不需要的值。 (允许使用超过 4 位数字的年份。)
您可以定义自己的年份,限制为 4 位数字:
<xs:simpleType name="gYear4">
<xs:restriction base="xs:nonNegativeInteger">
<xs:totalDigits value="4"/>
</xs:restriction>
</xs:simpleType>
并在您的 xs:union
中使用它:
<xs:simpleType name="myDateFormat">
<xs:union memberTypes="xs:dateTime xs:date xs:gYearMonth gYear4"/>
</xs:simpleType>
然后,您想要的值将被允许,而您不希望的 YYYY[YYYYYY]
值将根据要求被禁止。
关于xml - XSD 中的日期格式联合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35539242/