ZVON > Tutorials > XML Schema and Relax NG Tutorial
Index | >> Example 9 / 10 << | Prev | Next |
Contents > Simple types > Attribute contains a list of values

Attribute contains a list of values

  1. XML Schema
  2. Relax NG
XML Schema keys: list, restriction, simpleType
Relax NG keys: list

1. XML Schema

Now, we want the "root" element to have attribute "xyz", which contains a list of three integers. We will define a general list (element "list") of integers and then restrict it (element "restriction") to have exact length (element "length") of three items.

Valid document


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

Invalid document
There is one number extra.


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

Invalid document
The list must be whitespace-separated, not comma-separated.


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

Correct XML Schema (correct_0.xsd)


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

  <xsd:element name="root">
    <xsd:complexType>
      <xsd:attribute name="xyz" use="required">
        <xsd:simpleType>
          <xsd:restriction base="myList">
            <xsd:length value="3"/>
          </xsd:restriction>
        </xsd:simpleType>
      </xsd:attribute>
    </xsd:complexType>
  </xsd:element>

  <xsd:simpleType name="myList">
    <xsd:list itemType="xsd:integer"/>
  </xsd:simpleType>
</xsd:schema>

2. Relax NG

We will use the "list" type and an "integer" type (the latter borrowed from XML Schema datatypes). It's not possible to easily specify exact number - we must enumerate them.

Valid document


<root xyz="0 0 1" xmlns=""/>

Invalid document
There is one number extra.


<root xyz="0 0 1 1" xmlns=""/>

Invalid document
The list must be whitespace-separated, not comma-separated.


<root xyz="0, 0, 1" xmlns=""/>

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>
      <attribute name="xyz">
        <list>
          <data type="integer"/>
          <data type="integer"/>
          <data type="integer"/>
        </list>
      </attribute>
      <empty/>
    </element>
  </start>
</grammar>