Выражение XSD для проверки XML с датой и временем - PullRequest
1 голос
/ 26 марта 2020

У меня есть следующий 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>

1 Ответ

0 голосов
/ 26 марта 2020

Я понял. Вы должны определить тип, и этот тип должен иметь нужный вам шаблон.

<?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])"/>
...