有没有办法强制 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 模式分面添加到简单类型来完成。如果添加的模式分面在词法上要求值包含时区信息,则此类型的每个值都需要满足此模式分面,因此必须包含时区信息。