【问题标题】:How to ensure XSD Validation of Date and DateTime fields includes timezone如何确保日期和日期时间字段的 XSD 验证包括时区
【发布时间】:2016-02-24 00:09:15
【问题描述】:

有没有办法强制 xsd:date 或 xsd:datetime 字段在 xml 有效负载中包含时区?

我尝试过的所有验证器、eclipse、camel 等都接受这些字段,无论是否附加了时区。

我想强制要求时区始终存在于 XML 中。

编辑:

我希望有一种标准化的方式来处理这种情况。

最后,当我使用 1.0 XSD 时,我采用了以下解决方案:

<xs:simpleType name="dateNoTz">
    <xs:restriction base="xs:date">
        <xs:pattern value="\d{4}-[01]\d-[0-3]\d"/>
    </xs:restriction>
</xs:simpleType>
<xs:simpleType name="dateTimeNoTz">
    <xs:restriction base="xs:dateTime">
        <xs:pattern value="\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d(.\d?\d?\d?)"/>
    </xs:restriction>
</xs:simpleType>
<xs:simpleType name="dateTimeTz">
    <xs:restriction base="xs:dateTime">
        <xs:pattern value="\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d(.\d?\d?\d?)?((\+[01]\d:[0-5]\d)|Z)"/>
    </xs:restriction>
</xs:simpleType>
<xs:simpleType name="dateTz">
    <xs:restriction base="xs:date">
        <xs:pattern value="\d{4}-[01]\d-[0-3]\d((\+[01]\d:[0-6]\d)|Z)"/>
    </xs:restriction>
</xs:simpleType>

【问题讨论】:

    标签: xml xsd xsd-validation


    【解决方案1】:

    在 XSD 1.0 中,您只能通过使用模式(正则表达式)来做到这一点。

    在 XSD 1.1 中有一个新方面 explicitTimeZone。

    【讨论】:

    • 好一个!我不知道 XSD 1.1 中的有用添加。
    【解决方案2】:

    是的,这可以通过将XSD pattern facet 添加到简单类型来完成。如果您添加的模式方面在词法上要求该值包含时区信息,则该类型的每个值都需要满足该模式方面,因此必须包含时区信息。

    【讨论】:

      猜你喜欢
      • 2021-05-11
      • 2014-02-09
      • 2012-11-07
      • 2018-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-10
      • 1970-01-01
      相关资源
      最近更新 更多