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 回答