XSD 用日期和时间验证 XML 的表达式

XSD expression to validate XML with date and time

我有以下XSD来验证这个XML,但我不知道为什么它说这是有效的。请注意,该模式只检查日期,而不是日期 + 时间。你知道我怎样才能把一个模式只当作有效的日期+时间吗?非常感谢您。

XML:

<IN_PARAM>
    <DATE_FROM>20/01/2018 10:35:00</DATE_FROM>
    <DATE_TO>31/12/2019 18:40:00</DATE_TO>
</IN_PARAM>

XSD:

<?xml version="1.0" encoding="ISO-8859-1"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="IN_PARAM">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="DATE_FROM" minOccurs="1" maxOccurs="1" />
                <xs:element name="DATE_TO" minOccurs="1" maxOccurs="1" />
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="DATE_FROM">
        <xs:simpleType>
            <xs:restriction base="xs:string">
                <xs:pattern value="[0-9]{2}/[0-9]{2}/[0-9]{4}"/>
            </xs:restriction>
        </xs:simpleType>
    </xs:element>
    <xs:element name="DATE_TO">
        <xs:simpleType>
            <xs:restriction base="xs:string">
                <xs:pattern value="[0-9]{2}/[0-9]{2}/[0-9]{4}"/>
            </xs:restriction>
        </xs:simpleType>
    </xs:element>
</xs:schema>

我明白了。您必须定义一个类型,并且该类型必须具有您想要的模式。

<?xml version="1.0" encoding="ISO-8859-1"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="IN_PARAM">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="DATE_FROM" type="DateTimeType" minOccurs="1" maxOccurs="1" />
                <xs:element name="DATE_TO" type="DateTimeType" minOccurs="1" maxOccurs="1" />
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:simpleType name="DateTimeType">
        <xs:restriction base="xs:string">
            <xs:pattern value="[0-9]{2}/[0-9]{2}/[0-9]{4}"/>
        </xs:restriction>
    </xs:simpleType>
</xs:schema>

当然,如果您需要,这里是 dd/MM/yyyy hh:mm:ss 的模式:

<xs:pattern value="(0[1-9]|[12][0-9]|3[01])/(0[1-9]|1[012])/[0-9]{4} (0[0-9]|[1][0-9]|2[1-3]):([0-5][0-9]):([0-5][0-9])"/>