ZVON > Tutorials > XML Schema and Relax NG Tutorial |
Intro / Search / ZVON |
Index | >> Example 7 / 10 << | Prev | Next | |
Let's say we want to define a group of common attributes, which will be reused. The root element is named "root", it must contain the "aaa" and "bbb" elements, and these elements must have attributes "x" and "y".
Valid document <root xsi:noNamespaceSchemaLocation="correct_0.xsd" xmlns="" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > <aaa x="1" y="2"/> <bbb x="3" y="4"/> </root> Invalid document <root xsi:noNamespaceSchemaLocation="correct_0.xsd" xmlns="" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > <aaa y="2"/> <bbb x="3" y="4"/> </root> Invalid document <root xsi:noNamespaceSchemaLocation="correct_0.xsd" xmlns="" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > <aaa x="1" y="2" z="2"/> <bbb x="3" y="4"/> </root> |
Correct XML Schema (correct_0.xsd) <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" > <xsd:element name="root"> <xsd:complexType> <xsd:sequence> <xsd:element name="aaa" minOccurs="1" maxOccurs="1"> <xsd:complexType> <xsd:attributeGroup ref="myAttrs"/> </xsd:complexType> </xsd:element> <xsd:element name="bbb" minOccurs="1" maxOccurs="1"> <xsd:complexType> <xsd:attributeGroup ref="myAttrs"/> </xsd:complexType> </xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:attributeGroup name="myAttrs"> <xsd:attribute name="x" type="xsd:integer" use="required"/> <xsd:attribute name="y" type="xsd:integer" use="required"/> </xsd:attributeGroup> </xsd:schema> |
Relax NG is not so discriminating when it comes to differences between elements and attributes :-). The default behaviour of Relax NG is as follows: if you do not specify explicitly that the use should be optional, it's implicitly required.
Valid document <root xmlns=""> <aaa x="1" y="2"/> <bbb x="3" y="4"/> </root> Invalid document <root xmlns=""> <aaa y="2"/> <bbb x="3" y="4"/> </root> Invalid document <root xmlns=""> <aaa x="1" y="2" z="2"/> <bbb x="3" y="4"/> </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> <element name="aaa"> <ref name="myAttrs"/> <text/> </element> <element name="bbb"> <ref name="myAttrs"/> <text/> </element> </element> </start> <define name="myAttrs"> <attribute name="x"> <data type="integer"/> </attribute> <attribute name="y"> <data type="integer"/> </attribute> </define> </grammar> |