XSD: объединить неизвестное с необходимыми элементами - PullRequest
0 голосов
/ 02 апреля 2019

Мне нужно проверить XML с некоторыми необходимыми и некоторыми неизвестными элементами.

Проблема в том, что xs:any ожидает быть внутри xs:sequence

Также применяется правило UPA *1012* (относится ли неизвестный элемент к xs:any или к необязательному элементу minOccurs="0"?).

XML:

<person>
    <name>John</name>            <!-- required -->
    <address>Lane 1</address>    <!-- optional -->
    <unknown>someValue</unknown> <!-- unknown  -->
    <status>1</status>           <!-- required -->
</person>

Мой лучший снимок (на самом деле: мое желание, как это должно работать):

<xs:complexType name="person">
    <xs:sequence>
        <xs:element name="name" minOccurs="1" maxOccurs="1" />
        <xs:element name="address" minOccurs="0" maxOccurs="1" />
        <xs:any minOccurs="0" maxOccurs="unbounded" processContents="skip"/>
        <xs:element name="status" minOccurs="1" maxOccurs="1" />
    </xs:sequence>
</xs:complexType>

Но, согласно всей документации, это не разрешено.

Я также пробовал разные способы вложения, например ::1010 *

<xs:all>
    <xs:sequence>

Однако я пока не смог найти решение.

У кого-нибудь есть решение, как совместить обязательные с неизвестными элементами?

1 Ответ

0 голосов
/ 02 апреля 2019

Ответ на удивление прост: используйте XSD 1.1

Тогда следующее действительно подтвердит.

Обратите внимание на <xs:all>: правильный порядок элементов больше не требуется.

<xs:complexType name="person">
    <xs:all>
        <!-- Required -->
        <xs:element name="name"/>
        <xs:element name="status"/>
        <!-- Optional -->
        <xs:element name="address" minOccurs="0"/>
        <!-- Unknown-->
        <xs:any minOccurs="0" maxOccurs="unbounded" processContents="skip"/>
    </xs:all>
</xs:complexType>

(Например, в XMLSpy: tools -> options -> Always v1.1)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...