如何确保日期和时间字段的 XSD 验证包括时区



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

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

我想强制执行 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>

在 XSD 1.0 中,只能通过使用模式(正则表达式)来执行此操作。

在XSD 1.1中,有一个新的方面explicitTimeZone

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

最新更新