У меня есть следующая 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-схеме, который является расширением другого типа, так что содержимое нового типа представляет собой набор элементов (в любом порядке), который является надмножеством содержания супертипа?