Xml 如何排除XSD中的根元素?

Xml 如何排除XSD中的根元素?,xml,xsd,xml-validation,Xml,Xsd,Xml Validation,我在XSD文件中定义了几个元素,稍后在文档中用作引用。我确实希望这些“引用”元素中的任何一个组成有效的xml文件 比如我有 <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified"> <xs:element name="Section"> <xs:complex

我在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”节点可以防止我引用它进行递归

如果需要,请不要将这些元素声明为全局元素,而是将模式设计基于复杂类型,并仅将所需的元素声明为根全局元素。没有人强迫你把每一个元素都全球化

例如,您的示例可以重构如下:

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


编辑了原始帖子,以提供一个更好的示例,说明我试图通过xmlspy来验证xsd,我仍然会遇到同样的问题,当您说ref=“Section”时,“Section”必须引用现有元素”。不管怎么说?哎呀;由于编辑错误,我删除了该元素引用,并将其替换为本地元素。n、 b.您可能想了解xml模式复杂类型,这是值得您花费时间的!太好了,这正是我想要的。非常感谢您的及时回复!
<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>