Если userDefinedType1
и userDefinedType2
являются простыми атомарными типами, то определите тип объединения:
<xs:element name="session" type="one-or-two"/>
<xs:simpleType name="one-or-two">
<xs:union memberTypes="userDefinedType1 userDefinedType2"/>
</xs:simpleType>
Теперь мы знаем, что они на самом деле являются сложными типами.Определите тип
<xs:complexType name="eitherType">
<xs:choice>
<xs:sequence>... content model of alternative 1</xs:sequence>
<xs:sequence>... content model of alternative 2</xs:sequence>
</xs:choice>
</xs:complexType>
и обратитесь к этому типу из объявления элемента.
Примечание: это работает, только если нет неоднозначность , то есть, если валидаторможет определить, какую ветвь выбора выбрать, основываясь на первом имени элемента, которое он видит в экземпляре документа.Если бы вы выбрали между двумя моделями контента, которые обе начинаются, например, с элемента h1, вам пришлось бы реорганизовать модели контента, чтобы устранить неоднозначность.