如何排除 XSD 中的根元素? [英] How to exclude root elements in an XSD?

查看:31
本文介绍了如何排除 XSD 中的根元素?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在我的 XSD 文件中定义了几个元素,我在文档中稍后将它们用作参考.我确实希望这些参考"元素中的任何一个构成一个有效的 xml 文件.

I have several elements defined in my XSD file that I use as references later on in the document. I do want any of these "reference" elements to constitute a valid xml file.

例如我有

<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(如果这是文件中唯一的一行)

I don't want the following xml to validate (if this is the only line in the file)

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

从全局删除Section"节点阻止我引用它进行递归

Removing the "Section" node from the global prevents me from referencing it for recursion

推荐答案

如果你愿意,不要将这些元素声明为全局元素,而是将你的架构设计基于复杂类型,并且只将你想要的元素声明为根元素全球的.没有人强迫您将每个元素都设为全局.

If you want that, don't declare these elements as global, instead, base your schema design on complex types and declare only the element you want as a root global. Nobody forces you to make every element global.

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

For example, your sample can be refactored as follows:

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

这篇关于如何排除 XSD 中的根元素?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆