Возможно ли иметь complexType и элементы внутри, но без части последовательности


У меня есть xml doc (и сложный элемент), который похож на этот пример:

<xs:element name="employee">
 <xs:complexType>
  <xs:sequence>
   <xs:element name="firstname" type="xs:string"/>
   <xs:element name="lastname" type="xs:string"/>
  </xs:sequence>
 </xs:complexType>
</xs:element>

Но в моем xml не должно иметь значения, добавляю ли я имя или фамилию первым. Поэтому я хотел бы удалить часть "XS:sequence", но я не уверен, что я должен заменить ее.

Если это невозможно - тогда почему это невозможно?

Обновление: Если я изменю его с помощью , я получу эту ошибку: "{max происходит} всех {сторон} группы all должно быть 0 или 1".

3 7
xml

3 ответа:

Используйте <xs:all> вместо <xs:sequence>:

<xs:element name="employee">
 <xs:complexType>
  <xs:all>
   <xs:element name="firstname" type="xs:string"/>
   <xs:element name="lastname" type="xs:string"/>
  </xs:all>
 </xs:complexType>
</xs:element>

Смотрите страницу W3Schools на индикаторах схемы:

Все Индикаторы

Индикатор <all> указывает, что дочерние элементы могут появляться в любом порядок, и чтобы каждый дочерний элемент должно произойти только один раз:

<xs:element name="employee">
    <xs:complexType>
        <xs:choice minOccurs="0" maxOccurs="unbounded">
            <xs:element name="firstname" type="xs:string" />
            <xs:element name="lastname" type="xs:string" />
        </xs:choice>
   </xs:complexType>
</xs:element>
Это позволит вам иметь элементы в любой последовательности и количестве.

Вам нужен индикатор All (<xs:all>).

<xs:element name="employee">
  <xs:complexType>
    <xs:all>
      <xs:element name="firstname" type="xs:string"/>
      <xs:element name="lastname" type="xs:string"/>
    </xs:all>
 </xs:complexType>
</xs:element>

Учебник по XML-схемена W3Schoolsочень полезен.