如何确保XSD验证Date和DateTime字段包括时区

时间:2016-02-24 00:09:16

标签: xml xsd xsd-validation

有没有办法强制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>

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

在XSD 1.0中,您只能使用模式(正则表达式)来完成。

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