ZVON > Tutorials > XML Schema and Relax NG Tutorial |
Intro / Search / ZVON |
Index | >> Example 9 / 10 << | Prev | Next | |
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 <root xsi:noNamespaceSchemaLocation="correct_0.xsd" xyz="0 0 1 1" xmlns="" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" /> Invalid document <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> |
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 <root xyz="0 0 1 1" xmlns=""/> Invalid document <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> |