xml - XSD 中的日期格式联合

标签 xml date xsd xsd-validation

我在 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/

相关文章:

java - 在 Camel 中针对 XSD 验证订单

java - 我可以为 complexType 和元素指定相同的名称吗 - XSD 标准

xml - 元素的孙子 (XPath)

xml - 为什么 "encoding"方法得到的字符串中没有 "IXMLDocument.SaveToXML"属性?

java - 在java中获取今天的日期

javascript - node.js 无法解析 ISOString 日期?

java - 解析oasis xml文档

xml - 不匹配的子元素也出现在 XSL 模板下

python - 使用 BeautifulSoup 提取相似的 XML 属性

jQuery 格式化日期范围