Как исключить корневые элементы в XSD? - PullRequest
3 голосов
/ 09 сентября 2010

У меня есть несколько элементов, определенных в моем XSD-файле, которые я использую в качестве ссылок позже в документе. Я хочу, чтобы любой из этих «ссылочных» элементов составлял действительный XML-файл.

Например, у меня есть

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
    <xs:element name="Section">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="Section" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
            <xs:attribute name="code"/>
            <xs:attribute name="url"/>
            <xs:attribute name="isLegacy"/>
            <xs:attribute name="name"/>
            <xs:attribute name="helpFileName"/>
        </xs:complexType>
    </xs:element>
    <xs:element name="Sections">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="Section" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

Я не хочу проверять следующий xml (если это единственная строка в файле)

<Section code="" url="" isLegacy="" name="" helpFileName="" />

Удаление узла "Section" из глобального массива не позволяет мне ссылаться на него для рекурсии

1 Ответ

5 голосов
/ 09 сентября 2010

Если вы хотите этого, не объявляйте эти элементы глобальными, вместо этого, основывайте свой дизайн схемы на сложных типах и объявляйте только тот элемент, который вы хотите, в качестве корневого глобального.Никто не заставляет вас делать каждый элемент глобальным.

Например, ваш образец может быть подвергнут рефакторингу следующим образом:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
    <xs:complexType name="Section">
        <xs:sequence>
            <xs:element name="Section" type="Section" minOccurs="0" maxOccurs="unbounded"/>
        </xs:sequence>
        <xs:attribute name="code"/>
        <xs:attribute name="url"/>
        <xs:attribute name="isLegacy"/>
        <xs:attribute name="name"/>
        <xs:attribute name="helpFileName"/>
    </xs:complexType>
    <xs:element name="Sections">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="Section" type="Section" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>
...