ZVON > Tutorials > XML Schema and Relax NG Tutorial
Index | >> Example 6 / 8 << | Prev | Next |
Contents > Restrictions > "Sequence" from "all"

"Sequence" from "all"

  1. Correct XML Schema
  2. Correct XML Schema - reordered sequence
  3. Incorrect XML Schema - an element extra
XML Schema keys: restriction, sequence, all

1. Correct XML Schema

We can "change" the "all" type to "sequence". Schema Component Constraint: Particle Derivation OK (Sequence:All - RecurseUnordered)

Valid document


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

Invalid document
Document is not valid, because the type "BBB" allows only the sequence x-y (it is a restriction from the "AAA" type, which allowed both x-y and y-x).


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

Correct XML Schema (correct_0.xsd)


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

  <xsd:element name="root" type="BBB"/>

  <xsd:complexType name="AAA">
    <xsd:all maxOccurs="1">
      <xsd:element name="x" type="xsd:string" minOccurs="1" maxOccurs="1"/>
      <xsd:element name="y" type="xsd:string" minOccurs="1" maxOccurs="1"/>
    </xsd:all>
  </xsd:complexType>

  <xsd:complexType name="BBB">
    <xsd:complexContent>
      <xsd:restriction base="AAA">
        <xsd:sequence maxOccurs="1">
          <xsd:element name="x" type="xsd:string" minOccurs="1" maxOccurs="1"/>
          <xsd:element name="y" type="xsd:string" minOccurs="1" maxOccurs="1"/>
        </xsd:sequence>
      </xsd:restriction>
    </xsd:complexContent>
  </xsd:complexType>
</xsd:schema>

2. Correct XML Schema - reordered sequence

We can "change" the "all" type to "sequence". We can define the sequence reordered. Schema Component Constraint: Particle Derivation OK (Sequence:All - RecurseUnordered)

Valid document


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

Invalid document
Document is not valid, because the type "BBB" allows only the sequence y-x (it is a restriction from the "AAA" type, which allowed both x-y and y-x).


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

Correct XML Schema (correct_0.xsd)


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

  <xsd:element name="root" type="BBB"/>

  <xsd:complexType name="AAA">
    <xsd:all maxOccurs="1">
      <xsd:element name="x" type="xsd:string" minOccurs="1" maxOccurs="1"/>
      <xsd:element name="y" type="xsd:string" minOccurs="1" maxOccurs="1"/>
    </xsd:all>
  </xsd:complexType>

  <xsd:complexType name="BBB">
    <xsd:complexContent>
      <xsd:restriction base="AAA">
        <xsd:sequence maxOccurs="1">
          <xsd:element name="y" type="xsd:string" minOccurs="1" maxOccurs="1"/>
          <xsd:element name="x" type="xsd:string" minOccurs="1" maxOccurs="1"/>
        </xsd:sequence>
      </xsd:restriction>
    </xsd:complexContent>
  </xsd:complexType>
</xsd:schema>

3. Incorrect XML Schema - an element extra

When we derive "sequence" from "all", we cannot map each element from the "all" group to more than one element from the "sequence" group. Schema Component Constraint: Particle Derivation OK (Sequence:All - RecurseUnordered), 2.1 . In our example, we want to have two "x" elements in the sequence and that's not allowed.

Incorrect XML Schema (incorrect_0.xsd)


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

  <xsd:element name="root" type="BBB"/>

  <xsd:complexType name="AAA">
    <xsd:all maxOccurs="1">
      <xsd:element name="x" type="xsd:string" minOccurs="1" maxOccurs="1"/>
      <xsd:element name="y" type="xsd:string" minOccurs="1" maxOccurs="1"/>
    </xsd:all>
  </xsd:complexType>

  <xsd:complexType name="BBB">
    <xsd:complexContent>
      <xsd:restriction base="AAA">
        <xsd:sequence maxOccurs="1">
          <xsd:element name="x" type="xsd:string" minOccurs="1" maxOccurs="1"/>
          <xsd:element name="y" type="xsd:string" minOccurs="1" maxOccurs="1"/>
          <xsd:element name="x" type="xsd:string" minOccurs="1" maxOccurs="1"/>
        </xsd:sequence>
      </xsd:restriction>
    </xsd:complexContent>
  </xsd:complexType>
</xsd:schema>