XML-схема для ограничения дочернего узла

#xsd

#xsd

Вопрос:

Мне нужно создать XML-схему, в которой все узлы <foo> должны содержать либо одно или более вхождений <c1> only, либо одно вхождение <c2> only следующим образом.

  <main>
  <foo>
    <a></a>
    <b></b>
    <c1></c1>
  </foo>
  <foo>
    <a></a>
    <b></b>
    <c1></c1>
  </foo>
  <foo>
    <a></a>
    <b></b>
    <c1></c1>
  </foo>
</main>
  

или

 <main>
  <foo>
    <a></a>
    <b></b>
    <c2></c2>
  </foo>
  <foo>
    <a></a>
    <b></b>
    <c2></c2>
  </foo>
  <foo>
    <a></a>
    <b></b>
    <c2></c2>
  </foo>
</main>
  

Кто-нибудь может мне помочь?

Ответ №1:

Когда у вас возникает ситуация «или — или», ваше решение обычно <xs:choice> . Используйте атрибуты maxOccurs и minOccurs , чтобы ограничить количество отображений элемента. Значение по умолчанию для этих атрибутов равно «1», которое используется, если вы не добавляете эти атрибуты.

Пример фрагмента кода для определения <foo> элемента. Обратите внимание на использование <xs:choice> и maxOccurs="unbounded"

 <xs:element name="foo">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="a" type="xs:string />
            <xs:element name="b" type="xs:string />
            <xs:choice>
                <xs:element name="c1" maxOccurs="unbounded" type="xs:string />
                <xs:element name="c2" type="xs:string />
            </xs:choice>
        </xs:sequence>
    </xs:complexType>
</xs:element>