У меня есть XML, который может быть таким:
<profile>
<docname>Bla bla bla</docname>
<author>Bubi</author>
<doctype>INVOICE</doctype>
</profile>
или как это:
<profile>
<author>Bubi</author>
<docname>Bla bla bla</docname>
<type1>3</type1>
<type2>1</type2>
<type3>0</type3>
</profile>
Элементы могут появляться в любом порядке. Как видите, необходимо иметь теги <doctype>
или <type1>
, <type2>
и <type3>
.
Мне нужен XSD для этого. Я пробовал с
<xs:element name="profile">
<xs:complexType>
<xs:all>
<xs:element type="xs:string" name="author"/>
<xs:element type="xs:string" name="docname"/>
<xs:choice>
<xs:element type="xs:string" name="doctype"/>
<xs:sequence> <!--another little problem: I'd like to put a <xs:all> but is not allowed...-->
<xs:element type="xs:byte" name="type1"/>
<xs:element type="xs:byte" name="type2"/>
<xs:element type="xs:byte" name="type3"/>
</xs:sequence>
</xs:choice>
</xs:all>
</xs:complexType>
</xs:element>
Но <xs:choice>
не допускается внутри <xs:all>
(, почему <xs:all>
так плохо обращаются ??? ). Я нашел это замечательное родственное решение , но оно работает только в том случае, если выбор сделан среди отдельных элементов, а не среди их групп.
Кто-нибудь знает обходной путь? Большое спасибо!