Я хочу указать это также fieldname
или freetext
должен всегда присутствовать в XML-файлах, которые относятся к этому XSD. Существует ли способ сделать это?
<xs:complexType name="tSome">
<xs:sequence>
<!-- either one of the two below has to be present. -->
<xs:element name="fieldname" type="xs:string" />
<xs:element name="freetext" type="xs:string" />
<!-- this one below must always be present -->
<xs:element name="dbtablename" type="xs:string" />
</xs:sequence>
</xs:complexType>
В схеме XML есть индикатор выбора , который позволяет вам брать один из содержащихся элементов, но не два или более. Если вам нужны любые 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>
Итак, вы хотите либо fieldname
, либо freetext
, а не оба сразу? а может и то, и другое? а затем dbtablename
по желанию?
Вот 1 или 2 элемента:
<xs:choice minOccurs="1" maxOccurs="2">
<xs:element name="fieldname" type="xs:string"/>
<xs:element name="freetext" type="xs:string"/>
<xs:element name="dbtablename" type="xs:string"/>
</xs:choice>
Вы этого хотите? или вы хотите, чтобы dbtablename
был отдельным?