ZVON > Tutorials > XML Schema and Relax NG Tutorial
Index | >> Example 5 / 9 << | Prev | Next |
Contents > Simple tasks > Element which contains elements only (order is important)

Element which contains elements only (order is important)

  1. XML Schema
  2. Relax NG
XML Schema keys: sequence

1. XML Schema

We want to have the root element to be named "AAA", from null namespace and contains one "BBB" element, followed by one "CCC" element. Use the "sequence" pattern to specify exact order of the elements. The attributes "minOccurs" and "maxOccurs" are not necessary, because their default value is 1.

Valid document


<AAA xsi:noNamespaceSchemaLocation="correct_0.xsd" xmlns="" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >
  <BBB>ZZZ</BBB>
  <CCC>YYY</CCC>
</AAA>

Invalid document
The ordering is wrong.


<AAA xsi:noNamespaceSchemaLocation="correct_0.xsd" xmlns="" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >
  <CCC/>
  <BBB/>
</AAA>

Invalid document
Element CCC is missing.


<AAA xsi:noNamespaceSchemaLocation="correct_0.xsd" xmlns="" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >
  <BBB/>
</AAA>

Correct XML Schema (correct_0.xsd)


<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" >

  <xsd:element name="AAA">
    <xsd:complexType mixed="false">
      <xsd:sequence minOccurs="1" maxOccurs="1">
        <xsd:element name="BBB" type="xsd:string"/>
        <xsd:element name="CCC" type="xsd:string"/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
</xsd:schema>

2. Relax NG

You need not to use any pattern, because the order is implicitly important - it's quite intuitive: if you do not specify otherwise, you want the elements to appear in the same order as you put them in your schema.

Valid document


<AAA xmlns="">
  <BBB>XXX</BBB>
  <CCC> cc </CCC>
</AAA>

Invalid document
The ordering is wrong.


<AAA xmlns="">
  <CCC/>
  <BBB>XXX</BBB>
</AAA>

Invalid document
Element CCC is missing.


<AAA xmlns="">
  <BBB/>
</AAA>

Correct Relax NG schema (correctRelax_0.rng)


<grammar xmlns="http://relaxng.org/ns/structure/1.0" >

  <start>
    <element>
      <name ns="">AAA</name>
      <element>
        <name ns="">BBB</name>
        <text/>
      </element>
      <element>
        <name ns="">CCC</name>
        <text/>
      </element>
    </element>
  </start>
</grammar>

Correct Relax NG schema (correctRelax_1.rng)
This short version is also valid.


<element ns="" name="AAA" xmlns="http://relaxng.org/ns/structure/1.0" >
  <element name="BBB">
    <text/>
  </element>
  <element name="CCC">
    <text/>
  </element>
</element>