3

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」ノードをグローバルから削除すると、再帰のためにそれを参照できなくなります

4

1 に答える 1

5

それが必要な場合は、これらの要素をグローバルとして宣言しないでください。代わりに、複合型に基づいてスキーマ設計を行い、必要な要素のみをルートグローバルとして宣言してください。すべての要素をグローバルにすることを強制する人は誰もいません。

たとえば、サンプルは次のようにリファクタリングできます。

<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>
于 2010-09-08T22:13:22.407 に答える