В схеме XML есть Choice Indicator , который позволяет вам взять один из содержащихся элементов, но не два или более. Если вы хотите 2 из 3, я предлагаю сделать что-то вроде этого:
<xs:choice>
<xs:element name="fieldname" type="xs:string" minOccurs="0" maxOccurs="1" />
<xs:element name="freetext" type="xs:string" minOccurs="0" maxOccurs="1" />
<xs:element name="dbtablename" type="xs:string" minOccurs="0" maxOccurs="1" />
</xs:choice>
<xs:choice>
<xs:element name="fieldname" type="xs:string" minOccurs="0" maxOccurs="1" />
<xs:element name="freetext" type="xs:string" minOccurs="0" maxOccurs="1" />
<xs:element name="dbtablename" type="xs:string" minOccurs="0" maxOccurs="1" />
</xs:choice>
(возможно, maxOccurs
не позволит вам выбрать один и тот же элемент дважды.)
Если это не сработает, я ничего не подумаю.
Отредактировано : Я не правильно понял вопрос в первый раз. Если вы хотите, чтобы dbtablename
всегда присутствовал с любым из fieldname
или freetext
, то это ответ:
<xs:complexType name="tSome">
<xs:sequence>
<xs:choice>
<xs:element name="fieldname" type="xs:string" />
<xs:element name="freetext" type="xs:string" />
</xs:choice>
<xs:element name="dbtablename" type="xs:string" />
</xs:sequence>
</xs:complexType>