Purpose of xs:sequence in XML Schema

The xs:sequence compositor in an XML Schema Definition (XSD) establishes a strict order for child elements within a complex type. This article explains the primary function of xs:sequence, how it enforces data structure and validation rules, how it compares to alternative compositors like xs:all and xs:choice, and why it is essential for deterministic XML data parsing.

What is xs:sequence?

In XML Schema, xs:sequence is an element compositor used within a <xs:complexType> definition. Its primary purpose is to require that all specified child elements appear in the exact order in which they are declared within the schema. If an XML instance document contains the correct child elements but in the wrong order, schema validation will fail.

Key Functions and Characteristics

1. Strict Element Ordering

The core function of xs:sequence is enforcing sequence. For example, if a schema defines a sequence containing <firstName>, <middleName>, and <lastName>, the XML document must supply them in that exact 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>

In the example above, placing <lastName> before <firstName> in the XML instance document results in a validation error.

2. Cardinality Control

The xs:sequence element supports minOccurs and maxOccurs attributes, which can be applied to both the sequence container itself and the individual elements inside it. This allows developers to define: * Mandatory elements (minOccurs="1") * Optional elements (minOccurs="0") * Repeating elements or repeating sequences (maxOccurs="unbounded")

Even when child elements are optional (minOccurs="0"), any optional elements that do appear must still follow the defined sequence order relative to the other elements.

3. Nesting and Composability

xs:sequence can be nested inside other compositors (such as xs:choice) or contain other compositors. This enables the creation of complex, highly structured content models, such as requiring a specific sequence of elements followed by a choice between two alternative elements.

xs:sequence vs. Other Compositors

To understand the purpose of xs:sequence, it helps to compare it with the other two XSD compositors:

Why Use xs:sequence?