XSD с необходимыми элементами и неизвестными элементами - PullRequest
0 голосов
/ 08 декабря 2010

У меня есть следующий xml:

<product>
<name>beef</name>
<category>food</category>
<unknownfield1>..</unknownfield1>
<unknownfield2>..</unknownfield2>
</product>

Мне нужно проверить этот xml, чтобы убедиться, что корневым элементом является продукт, и он содержит необходимые имя и категорию элементов.Загвоздка в том, что она не всегда структурирована, как в приведенном выше примере.Это может быть так.

<product>
<category>food</category>
<unknownfield4>..</unknownfield4>
<name>beef</name>
<unknownfield4>..</unknownfield4>
</product>

Если структура не изменилась, я мог бы использовать следующее:

<xs:element name="product">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string" />
<xs:element name="category" type="xs:string" />
<xs:any minOccurs="0" maxOccurs="unbounded" processContents="lax"></xs:any>
</xs:sequence>
</xs:complexType>
</xs:element>

, но это, очевидно, не работает, когда последовательность элементов неизвестна.Любая помощь по этому вопросу приветствуется.

1 Ответ

0 голосов
/ 08 декабря 2010

Вот пример схемы, которая будет проверять оба предоставленных вами примера файлов XML:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="unknownfield4"/>
<xs:element name="unknownfield2"/>
<xs:element name="unknownfield1"/>
<xs:element name="product">
    <xs:complexType>
        <xs:choice>
            <xs:sequence>
                <xs:element ref="name"/>
                <xs:element ref="category"/>
                <xs:any maxOccurs="unbounded"/>
            </xs:sequence>
            <xs:sequence>
                <xs:element ref="category"/>
                <xs:any/>
                <xs:element ref="name"/>
                <xs:any/>
            </xs:sequence>
        </xs:choice>
    </xs:complexType>
</xs:element>
<xs:element name="name">
    <xs:simpleType>
        <xs:restriction base="xs:string"/>
    </xs:simpleType>
</xs:element>
<xs:element name="category">
    <xs:simpleType>
        <xs:restriction base="xs:string"/>
    </xs:simpleType>
</xs:element>

Надеюсь, это поможет !!

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