我有以下 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
并且qux
以任意顺序。但是对于这个模式,qux
必须紧随其后foo
,bar
因为从超类型的选择和子类型的选择中创建了一个序列,而不是选择的联合。
另一种方法,将类型定义替换ExtendedThing
为
<xsd:complexType name="ExtendedThing">
<xsd:complexContent>
<xsd:extension base="SimpleThing">
<xsd:group ref="extendedContent" />
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
也不起作用,因为违反了唯一粒子归属约束。
有没有解决这个问题的方法,或者不可能在 XML Schema 中创建一个类型,它是另一种类型的扩展,这样新类型的内容是一组元素(以任何顺序),它是内容的超集超类型的?