Как исключить корневые элементы в XSD?

У меня есть несколько элементов, определенных в моем файле 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="" />

Удаление узла «Раздел» из глобального не позволяет мне ссылаться на него для рекурсии.


person Tom    schedule 08.09.2010    source источник


Ответы (1)


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

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

<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>
person xcut    schedule 08.09.2010
comment
отредактировал исходный пост, чтобы предоставить лучший пример того, чего я пытаюсь достичь - person Tom; 09.09.2010
comment
используя xmlspy для проверки этого xsd, я все еще сталкиваюсь с той же проблемой, когда вы говорите ref = Section, суки, что «Section» должен ссылаться на существующий элемент. Во всяком случае вокруг этого? - person Tom; 09.09.2010
comment
Ой; ошибка редактирования, я удалил ссылку на этот элемент и заменил ее локальным элементом. н.б. возможно, вы захотите прочитать о сложных типах схемы xml, это стоит вашего времени! - person xcut; 09.09.2010
comment
отлично, это сработало именно так, как я хотел. Большое спасибо за оперативность и многочисленные ответы! - person Tom; 09.09.2010