Просто придерживайтесь элементов типа B, а затем используйте, а затем украсьте элементы вашего экземпляра документа, как описано ниже, соответствующим значением атрибута xsi:type
.
<xsd:complexType name="B">
<xsd:complexContent>
<xsd:element name="options" type="ex_options"/>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="options">
<xsd:sequence>
...some options
</xsd:sequence>
</xsd:element>
<xsd:complexType name="ex_options">
<xsd:complexContent>
<xsd:extension base="options">
<xsd:sequence>
...some more options
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:element>
и затем "украсить" ваш элемент экземпляра как
<options xsi:type="ex_options"> ... (this will work)
или
<options xsi:type="options"> ... (I think you can do this as long as the base xsi:type is not abstract)
Если окажется, что вы не можете украсить основанием xsi:type
,
тогда вы всегда можете "обмануть", создав пустой базовый тип, а затем
расширяя путем тщательной конструкции, чтобы получить два желаемых формата.
См. этот пост для более подробной информации и ссылок.