我有以下 XML 架构
<xsd:complexType name="SimpleThing">
<xsd:choice maxOccurs="unbounded">
<xsd:group ref="simpleContent" />
</xsd:choice>
</xsd:complexType>
<xsd:complexType name="ExtendedThing">
<xsd:complexContent>
<xsd:extension base="SimpleThing">
<xsd:choice maxOccurs="unbounded">
<xsd:element name="qux" />
</xsd:choice>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:group name="simpleContent">
<xsd:choice>
<xsd:element name="foo" />
<xsd:element name="bar" />
</xsd:choice>
</xsd:group>
<xsd:group name="extendedContent">
<xsd:choice>
<xsd:group ref="simpleContent" />
<xsd:element name="qux" />
</xsd:choice>
</xsd:group>
<xsd:element name="root" type="ExtendedThing" />
我想要类型ExtendedThing
包含装有foo
, bar
and qux
以任意顺序。但有了这个模式,qux
必须在之后foo
and bar
因为选择的序列,而不是联合,是根据超类型的选择和子类型的选择创建的。
另一种方法是替换类型定义ExtendedThing
with
<xsd:complexType name="ExtendedThing">
<xsd:complexContent>
<xsd:extension base="SimpleThing">
<xsd:group ref="extendedContent" />
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
也不起作用,因为独特的粒子归因 http://www.w3.org/TR/xmlschema-1/#cos-nonambig约束被违反。
是否有任何解决方案可以解决此问题,或者是否无法在 XML 模式中创建一个类型作为另一种类型的扩展,以便新类型的内容是一组元素(按任何顺序),该元素是内容的超集超类型的?
出于实际原因,这是不可能的。超类型的内容模型必须始终完整地出现在子类型的内容模型之前。它有助于保持验证器的快速实施。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)