ZVON > Tutorials > XML Schema and Relax NG Tutorial
Index | >> Example 6 / 10 << | Prev | Next |
Contents > Simple types > Element can contain a mixture of elements

Element can contain a mixture of elements

  1. XML Schema
  2. Relax NG
XML Schema keys: all
Relax NG keys: interleave

1. XML Schema

Now, we want the element "root" to contain elements "aaa", "bbb", and "ccc" in any order. We will use the "all" element.

Valid document


<root xsi:noNamespaceSchemaLocation="correct_0.xsd" xmlns="" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >
  <aaa/>
  <bbb/>
  <ccc/>
</root>

Valid document


<root xsi:noNamespaceSchemaLocation="correct_0.xsd" xmlns="" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >
  <ccc/>
  <aaa/>
  <bbb/>
</root>

Valid document


<root xsi:noNamespaceSchemaLocation="correct_0.xsd" xmlns="" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >
  <bbb/>
  <ccc/>
  <aaa/>
</root>

Invalid document
Element "bbb" is missing.


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

Invalid document
One element "bbb" is extra.


<root xsi:noNamespaceSchemaLocation="correct_0.xsd" xmlns="" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >
  <aaa/>
  <bbb/>
  <bbb/>
  <ccc/>
</root>

Correct XML Schema (correct_0.xsd)


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

  <xsd:element name="root">
    <xsd:complexType>
      <xsd:all>
        <xsd:element name="aaa" type="xsd:string" minOccurs="1" maxOccurs="1"/>
        <xsd:element name="bbb" type="xsd:string" minOccurs="1" maxOccurs="1"/>
        <xsd:element name="ccc" type="xsd:string" minOccurs="1" maxOccurs="1"/>
      </xsd:all>
    </xsd:complexType>
  </xsd:element>
</xsd:schema>

2. Relax NG

We will use the "interleave" pattern.

Valid document


<root xmlns="">
  <aaa/>
  <bbb/>
  <ccc/>
</root>

Valid document


<root xmlns="">
  <ccc/>
  <aaa/>
  <bbb/>
</root>

Valid document


<root xmlns="">
  <bbb/>
  <ccc/>
  <aaa/>
</root>

Invalid document
Element "bbb" is missing.


<root xmlns="">
  <aaa/>
  <ccc/>
</root>

Invalid document
One element "bbb" is extra.


<root xmlns="">
  <aaa/>
  <bbb/>
  <bbb/>
  <ccc/>
</root>

Correct Relax NG schema (correctRelax_0.rng)


<grammar datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes" xmlns="http://relaxng.org/ns/structure/1.0" >

  <start>
    <element>
      <name ns="">root</name>
      <interleave>
        <element name="aaa">
          <text/>
        </element>
        <element name="bbb">
          <text/>
        </element>
        <element name="ccc">
          <text/>
        </element>
      </interleave>
    </element>
  </start>
</grammar>