XSD XML вся последовательность maxOccurs - PullRequest
0 голосов
/ 07 февраля 2019

Я пытаюсь создать / исправить следующий XSD для соответствия логике программы.Текущая не-XSD-логика позволяет разбирать следующие атрибуты (представление XML ниже) в любом порядке.Я очень зеленый с XSD.Это был бы ценный инструмент для анализа проверки.Можно ли создать XSD, чтобы разрешить обработку этих атрибутов в любом порядке, чтобы разрешить maxOccurs для Susp_O_CD?Я знаю, что последовательность разрешит maxOccurs, а все - нет, но Susp_O_CD должен иметь до пяти значений, и требуется любой порядок ввода для тегов StReas, StReas_N, ListSusp_T и Susp_O_CD.

<PrimaryReason>
   <StReas>2</StReas>
   <StReas_N>Reason for stop test</StReas_N>
   <ListSusp_T>
       <Susp_T>8</Susp_T>
       <Susp_T>4</Susp_T>
   </ListSusp_T>
   <Susp_O_CD>00100</Susp_O_CD>
   <Susp_O_CD>00200</Susp_O_CD>
   <Susp_O_CD>00101</Susp_O_CD>
   <Susp_O_CD>00201</Susp_O_CD>
</PrimaryReason>

XSD:

<xs:element name="PrimaryReason" type="Reason_Set"/>

<xs:complexType name="Reason_Set">
    <xs:all>
        <xs:element name="StReas" type="StReas"/>
        <xs:element name="StReas_N" type="StReas_N"/>
        <xs:element name="Tr_ID" type="Tr_ID" minOccurs="0"/>
        <xs:element name="Tr_O_CD" type="Tr_O_CD" minOccurs="0"/>
        <xs:element name="EDU_sec_CD" type="EDU_sec_CD" minOccurs="0"/>
        <xs:element name="EDU_subDiv_CD" type="EDU_subDiv_CD" minOccurs="0"/>
        <xs:element name="ListSusp_T" minOccurs="0">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="Susp_T" type="Susp_T" minOccurs="0" maxOccurs="9"/>
            </xs:sequence>
        </xs:complexType>
        </xs:element>
        <xs:element name="Susp_O_CD" type="Susp_O_CD"  minOccurs="0" maxOccurs="5"/>
    </xs:all>   
</xs:complexType>

Надеюсь, это можно сделать.Я попробовал Группу, но она не работает со всеми тегами.Все предложения приветствуются.

1 Ответ

0 голосов
/ 07 февраля 2019

В XSD 1.0 элементы в xs:all частице могут появляться только ноль или один раз.

Это ограничение снято в XSD 1.1, чтобы разрешить любое значение maxOccurs.

Таквам нужно решить, можете ли вы перейти на XSD 1.1 (который поддерживается относительно небольшим числом процессоров схем: Xerces, Altova и Saxon).

Кстати, путать ссылки на ваши элементы в качестве атрибутов довольно сложно.«Атрибуты» - это технический термин в XML.«name» и «maxOccurs» в документе схемы являются атрибутами;«Susp_O_CD» в вашем экземпляре документа является элементом.

См. Также XSD - как разрешить элементы в любом порядке любое количество раз?

...