Как указать в XML-схеме, что любое из двух полей должно присутствовать?

Я хочу указать это также 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>
13
задан Amos M. Carpenter 9 September 2015 в 08:14
поделиться

2 ответа

В схеме 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>
24
ответ дан 1 December 2019 в 20:56
поделиться

Итак, вы хотите либо 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 был отдельным?

4
ответ дан 1 December 2019 в 20:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: