XSD: запретить пустой элемент - PullRequest
0 голосов
/ 30 июня 2010

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

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="root">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="A" minOccurs="0" maxOccurs="1"/>
                <xs:element name="B" minOccurs="0" maxOccurs="1"/>
                <xs:element name="C" minOccurs="0" maxOccurs="32"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

В соответствии с этой схемой действует следующее:

<root xsi:noNamespaceSchemaLocation="MySchema.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
</root>

Однако я хотел бы сделать вышеНеверный XML.

В частности, я бы хотел: 1. чтобы у <root> был хотя бы один дочерний элемент, будь то <A>, <B> или <C>и 2. что у <root> есть не более одного <A> ребенка и не более одного <B> ребенка.

Предложения?


Решение:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="root">
        <xs:complexType>
            <xs:choice>
                <xs:sequence>
                    <xs:element name="A"/>
                    <xs:element name="B" minOccurs="0"/>
                    <xs:element name="C" minOccurs="0" maxOccurs="32"/>
                </xs:sequence>
                <xs:sequence>
                    <xs:element name="B"/>
                    <xs:element name="C" minOccurs="0" maxOccurs="32"/>
                </xs:sequence>
                <xs:sequence>
                    <xs:element name="C" minOccurs="1" maxOccurs="32"/>
                </xs:sequence>
            </xs:choice>
        </xs:complexType>
    </xs:element>
</xs:schema>

Ответы [ 2 ]

0 голосов
/ 01 июля 2010

Как насчет использования ровно одной xs: выбор A, B или C, за которым следует 0 или более каждого из них?

Ах, с вашим редактированием это должно быть что-то вроде выбора A, AB или B, за которыми следуют от 0 до 32 Cs.Да?

0 голосов
/ 01 июля 2010

Вы пытались добавить minOccurrs=1 к xs:sequence?

...