XML-схема может иметь несколько вариантов в одном complexType? - PullRequest
6 голосов
/ 07 июля 2011

Возможно ли сделать что-то подобное в схеме XML?

<xsd:complexType name="ItemsType">
  <xsd:choice minOccurs="0" maxOccurs="unbounded">
    <xsd:element ref="shirt"/>
    <xsd:element ref="hat"/>
    <xsd:element ref="umbrella"/>
  </xsd:choice>
  <xsd:choice minOccurs="1" maxOccurs="3">
    <xsd:element ref="apple"/>
    <xsd:element ref="banana"/>
    <xsd:element ref="strawberry"/>
  </xsd:choice>
</xsd:complexType>

это, по-видимому, неверно. То, что я хотел бы, чтобы было возможно иметь 0 или более из первого выбора .. Например. там может быть элемент рубашки и элемент шляпы, или, возможно, вообще нет элементов одежды (так как minOccurs = "0"), за которыми следует по крайней мере 1 фруктовый элемент (я хочу сделать так, чтобы должен быть хотя бы один, MinOccurs = "1").

есть ли способ сделать это?

Спасибо за любую помощь.

1 Ответ

12 голосов
/ 08 июля 2011

<xsd:complexType> предполагает наличие только одного дочернего элемента.Оберните два варианта внутри одного <xsd:sequence>.

Пример

<xsd:complexType name="ItemsType">
  <xsd:sequence>
    <xsd:choice minOccurs="0" maxOccurs="unbounded">
      ... clothes ...
    </xsd:choice>
    <xsd:choice minOccurs="1" maxOccurs="3">
      ... fruits ...
    </xsd:choice>
  </xsd:sequence>
</xsd:complexType>
...