好的,所以我有一个奇怪的问题。我公司的应用程序解析了许多不同的结构,并根据它们生成模式。实际的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规则。
对于&#34;限制&#34;,同名元素覆盖父级的预期行为是什么?或者是他们共存的预期行为?
对于其他形式的访问基本类型,是要覆盖或共存的预期行为吗?
非常感谢你。
答案 0 :(得分:1)
是的,当您通过限制定义复杂类型时,新内容模型中的所有内容都将覆盖旧内容模型中的所有内容。属性的定义不同:使用属性,您可以定义限制中的不同之处;但是使用子元素,您可以定义新的(受限制的)模型,系统必须离开并确定新模型与旧模型(有效限制)一致。