XML / XSD ISODateTime Какой правильный формат? - PullRequest
0 голосов
/ 27 сентября 2019

Работа с некоторым старым кодом XML / XSD, который требует, чтобы даты были в формате «ISODateTime».Пробовал несколько различных форматов даты / времени ISO, то есть с буквой «Т» в середине, но проверка по-прежнему не проходит.

Я что-то упускаю из виду?Ниже приведены фрагменты XML и XSD вместе с сообщением об ошибке.Предложения очень ценятся.Заранее спасибо.

XSD:

<xs:complexType name="MessageId">
    <xs:sequence>
        <xs:element name="Id" type="Max35Text"/>
        <xs:element name="Credit" type="ISODateTime"/>
    </xs:sequence>
</xs:complexType>

XML:

<ParentId>
    <Id>unique id</Id>
    <Credit>2019-09-27 04:00:00</Credit>
</ParentId>   <!-- Fixed by edit -->

Ошибка проверки:

ОШИБКА: Элемент '{urn: iso: std: iso: 20022: технология: xsd: tsmt.017.001.03} Кредит': '2019-09-27 04:00:00' не являетсядопустимое значение атомарного типа '{urn: iso: std: iso: 20022: tech: xsd: tsmt.017.001.03} ISODateTime'.

Ответы [ 2 ]

1 голос
/ 28 сентября 2019

Судя по сообщению об ошибке, тип ISODateTime находится в пространстве имен urn:iso:std:iso:20022:tech:xsd:tsmt.017.001.03.ISO 20022 - это набор стандартов, используемых финансовой индустрией.Я не знаком с этим, но я нашел описание этого типа данных в https://tools20022.com/apidocs/com/tools20022/repository/dict/datatype/ISODateTime.html

Эта страница на самом деле не дает XSD-определение типа, и из описания я не вижулюбое отличие от стандартного W3C типа xs: dateTime.Тем не менее, это заслуживает дальнейшего изучения реальных схем.Возможно, что он может наложить некоторые ограничения на тип W3C, например, он может сделать дробные секунды или часовой пояс обязательными или ограничить диапазон разрешенных лет.

Однако ошибка проверки, которую вы указали, заключается в том, чтоу вас есть пробел, а не "T" между датой и временем части значения.

1 голос
/ 27 сентября 2019

Я мог бы заставить ваш XSD работать, изменив формат даты на xs:dateTime из пространства имен http://www.w3.org/2001/XMLSchema, в вашем примере это 2019-09-27T04:00:00.

Я не нашел определения для ISODateTime, но на W3.org - это определение для форматов даты / времени , и самое близкое, что я нашел, было xs:dateTime , описанное здесь.

Поэтому измените ваш XML на (просто добавив "T", который вы упомянули)

<?xml version="1.0" encoding="UTF-8"?>
<ParentId>
    <Id>unique id</Id>
    <Credit>2019-09-27T04:00:00</Credit>
</ParentId>

, и этот образец XSD

<?xml version="1.0" encoding="utf-8"?>
<xs:schema elementFormDefault="qualified"
  xmlns:xs="http://www.w3.org/2001/XMLSchema">

    <xs:complexType name="MessageId">
        <xs:sequence>
            <xs:element name="Id" type="xs:string"/>   <!-- Changed for simplicity -->
            <xs:element name="Credit" type="xs:dateTime"/>
        </xs:sequence>
    </xs:complexType>

    <xs:element name="ParentId" type="MessageId" />

</xs:schema>

проверит ваш XML.

...