XSD определение сложного типа без индикаторов

если я хочу определить сложный тип, я могу пойти

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

или я могу заменить

<xs:sequence> ...     </xs:sequence>

пометить выше с помощью

<xs:all> ...     </xs:all>

or

<xs:choice> ...     </xs:choice>

и это подтверждает.

Однако они накладывают ограничения на порядок/нахождение элементов.

Есть ли способ определить сложный элемент без какого-либо из этих индикаторов?

Был «вдохновлен»

<xs:complexType name="personinfo2">
<xs:complexContent>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
</xs:complexContent>
</xs:complexType>

до сих пор, но не работал.


person Roam    schedule 27.08.2013    source источник


Ответы (1)


Вы действительно должны прочитать учебник по XSD.

Нет, вы не можете определить модель содержимого без указания (явно или неявно) одного из xs:sequence, xs:choice или xs:all.

Если вы не хотите накладывать ограничения на последовательность или количество вхождений ваших дочерних элементов, то вам, вероятно, нужно:

<xs:complexType name="sample">
  <xs:choice minOccurs="0" maxOccurs="unbounded">
    <xs:element name="e1" type="xs:string"/>
    <xs:element name="e2" type="xs:string"/>
  </xs:choice>
</xs:complexType>

Это позволяет любое количество дочерних элементов e1 и e2 в любом порядке. Если вы обнаружите, что не хотите, чтобы допустимые элементы типа personinfo содержали попеременно 37 элементов lastname и 36 элементов firstname, значит, вы узнали кое-что о том, что вы делаете и чего не хотите.

person C. M. Sperberg-McQueen    schedule 28.08.2013