Skip to main content

XSD Indicators

Indicators control the way how elements are to be organized in an XML document.

Indicators​

There are seven types of indicators that fall into three broad categories.

Order Indicators

  • All: Child elements can occur in any order.
  • Choice: Only one of the child element can occur.
  • Sequence: Child element can occur only in specified order.

Occurrence Indicators

  • maxOccurs: Child element can occur only maxOccurs number of times.
  • minOccurs: Child element must occur minOccurs number of times.

Group Indicators

  • Group: Defines related set of elements.
  • attributeGroup: Defines related set of attributes.

Order Indicators​

Order indicators are used to define the order of the elements.

All Indicator​

The <xs:all> indicator specifies that the child elements can appear in any order, and that each child element must occur only once:

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

When using the <xs:all> indicator you can set the minOccurs indicator to 0 or 1 and the maxOccurs indicator can only be set to 1 (the minOccurs and maxOccurs are described later).

Choice Indicator​

The <xs:choice> indicator specifies that either one child element or another can occur:

<xs:element name="person">
<xs:complexType>
<xs:choice>
<xs:element name="employee" type="employee"/>
<xs:element name="member" type="member"/>
</xs:choice>
</xs:complexType>
</xs:element>

Sequence Indicator​

The <xs:sequence> indicator specifies that the child elements must appear in a specific order:

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

Occurrence Indicators​

Occurrence indicators are used to define how often an element can occur.

note

For all "Order" and "Group" indicators (i.e. any, all, choice, sequence, group name, and group reference) the default value for maxOccurs and minOccurs is 1.

maxOccurs Indicator​

The maxOccurs indicator specifies the maximum number of times an element can occur:

<xs:element name="person">
<xs:complexType>
<xs:sequence>
<xs:element name="full_name" type="xs:string"/>
<xs:element name="child_name" type="xs:string" maxOccurs="10"/>
</xs:sequence>
</xs:complexType>
</xs:element>
note

In the example above, the child_name element can occur a minimum of one time (the default value for minOccurs is 1) and a maximum of ten times in the person element

minOccurs Indicator​

The minOccurs indicator specifies the minimum number of times an element can occur:

<xs:element name="person">
<xs:complexType>
<xs:sequence>
<xs:element name="full_name" type="xs:string"/>
<xs:element name="child_name" type="xs:string" minOccurs="0" maxOccurs="10"/>
</xs:sequence>
</xs:complexType>
</xs:element>
note

In the example above, the child_name element can occur a minimum of zero times and a maximum of ten times in the person element.

note

To allow an element to appear an unlimited number of times, use the maxOccurs="unbounded" statement.

Group Indicators​

Group indicators are used to define related sets of elements.

Element Groups​

Element groups are defined with the group declaration in this way:

<xs:group name="groupname">
...
</xs:group>

For example:

<xs:group name="persongroup">
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
<xs:element name="birthday" type="xs:date"/>
</xs:sequence>
</xs:group>

<xs:element name="person" type="personinfo"/>

<xs:complexType name="personinfo">
<xs:sequence>
<xs:group ref="persongroup"/>
<xs:element name="country" type="xs:string"/>
</xs:sequence>
</xs:complexType>

Attribute Groups​

Attribute groups are defined with the attributeGroup declaration in this way:

<xs:attributeGroup name="groupname">
...
</xs:attributeGroup>

For example:

<xs:attributeGroup name="personattrgroup">
<xs:attribute name="firstname" type="xs:string"/>
<xs:attribute name="lastname" type="xs:string"/>
<xs:attribute name="birthday" type="xs:date"/>
</xs:attributeGroup>

<xs:element name="person">
<xs:complexType>
<xs:attributeGroup ref="personattrgroup"/>
</xs:complexType>
</xs:element>