XSD 中的日期格式合并

Date formats union in XSD

我在 XSD 中定义了以下简单类型:

<xs:simpleType name="myDateFormat">
    <xs:union memberTypes="xs:dateTime xs:date xs:gYearMonth xs:gYear"/>
</xs:simpleType>

我想允许 YYYY、YYYY-MM、YYYY-MM-DD 和完整的日期时间格式。但在做了一些测试后,我意识到我没有收到以下值的错误:

如何创建只允许 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] 值将被禁止。