XSD - 复杂内容,基本类型和同名元素

时间:2018-04-04 21:03:27

标签: xml xsd

好的,所以我有一个奇怪的问题。我公司的应用程序解析了许多不同的结构,并根据它们生成模式。实际的XSD架构是我们处理的众多事情之一。

我正在使用特定的XSD架构,该架构具有似乎覆盖某些元素的限制。这是该架构的清理版本,具有确切的结构:

<!-- Overriding Restriction -->
<xsd:complexType name="MyRestrictedChoice">
    <xsd:complexContent>
        <xsd:restriction base="MyChoice">
             <xsd:choice>
                  <xsd:element name="Nothing" type="NothingType">
                       <xsd:annotation>
                            <xsd:documentation>My documentation</xsd:documentation>
                       </xsd:annotation>
                  </xsd:element>
                  <xsd:element name="Something" type="SomethingRestricted" maxOccurs="unbounded"/>
             </xsd:choice>
        </xsd:restriction>
    </xsd:complexContent>
</xsd:complexType>

<!-- Base Type -->
<xsd:complexType name="MyChoice">
    <xsd:choice>
        <xsd:element name="Nothing" type="NothingType">
             <xsd:annotation>
                  <xsd:documentation>My Documentation</xsd:documentation>
             </xsd:annotation>
        </xsd:element>
        <xsd:element name="Something" type="SomethingOptional" maxOccurs="unbounded"/>
    </xsd:choice>
</xsd:complexType>

我们的应用程序的当前行为是,如果您具有扩展另一种类型的类型,则两种类型的子项将合并并显示在UI中的结果树中。在这个用例中,这种行为似乎已经破裂了。

我认为架构想要做的是拥有Nothing&amp;第一个块中的某些元素取代了Nothing&amp;第二个中的某些元素。所以应该只有一个Nothing&amp;用户界面中我们树中的一个元素。目前,我们正在重复。

所以:我在此发布此内容的原因是为了澄清XSD规则。

  1. 对于&#34;限制&#34;,同名元素覆盖父级的预期行为是什么?或者是他们共存的预期行为?

  2. 对于其他形式的访问基本类型,是要覆盖或共存的预期行为吗?

  3. 非常感谢你。

1 个答案:

答案 0 :(得分:1)

是的,当您通过限制定义复杂类型时,新内容模型中的所有内容都将覆盖旧内容模型中的所有内容。属性的定义不同:使用属性,您可以定义限制中的不同之处;但是使用子元素,您可以定义新的(受限制的)模型,系统必须离开并确定新模型与旧模型(有效限制)一致。