Project Index | Documentation | Relax NG | Sample XML File
<grammar datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"
xmlns="http://relaxng.org/ns/structure/1.0">
<start>
<element name="catalog">
<element name="company">
<text/>
</element>
<oneOrMore>
<ref name="Department"/>
</oneOrMore>
</element>
</start>
<define name="Department">
<element name="department">
<attribute name="name"/>
<attribute name="code">
<data type="ID"/>
</attribute>
<oneOrMore>
<ref name="Item"/>
</oneOrMore>
</element>
</define>
<define name="Item">
<element name="item">
<element name="name"><text/></element>
<interleave>
<element name="price">
<attribute name="amt">
<data type="double"/>
</attribute>
<optional>
<attribute name="units">
<choice>
<value>USD</value>
<value>CDN</value>
</choice>
</attribute>
</optional>
</element>
<optional>
<element name="manufacturer"><text/></element>
</optional>
<choice>
<ref name="ColorList"/>
<ref name="Color"/>
<element name="sku">
<ref name="sku_pattern"/>
</element>
</choice>
<element name="summary">
<ref name="XHTML_subset"/>
</element>
<optional>
<element name="description">
<ref name="XHTML_subset"/>
</element>
</optional>
</interleave>
</element>
</define>
<define name="ColorList">
<element name="color-list">
<oneOrMore>
<ref name="Color"/>
</oneOrMore>
</element>
</define>
<define name="Color">
<element name="color">
<text/>
<attribute name="sku">
<ref name="sku_pattern"/>
</attribute>
<optional>
<attribute name="hex">
<data type="string">
<param name="pattern">#[0-9a-fA-F]{6}</param>
</data>
</attribute>
</optional>
</element>
</define>
<define name="sku_pattern">
<data type="string">
<param name="pattern">[A-Z]{1,2}\d{3,4}(-[A-Za-z]{2})?</param>
</data>
</define>
<define name="XHTML_subset">
<zeroOrMore>
<choice>
<ref name="text_with_inline"/>
<element name="p" ns="http://www.w3.org/1999/xhtml">
<ref name="text_with_inline"/>
</element>
<element name="ul" ns="http://www.w3.org/1999/xhtml">
<oneOrMore>
<element name="li">
<ref name="XHTML_subset"/>
</element>
</oneOrMore>
</element>
</choice>
</zeroOrMore>
</define>
<define name="text_with_inline">
<interleave>
<text/>
<zeroOrMore>
<choice>
<element name="strong" ns="http://www.w3.org/1999/xhtml">
<ref name="text_with_inline"/>
</element>
<element name="em" ns="http://www.w3.org/1999/xhtml">
<ref name="text_with_inline"/>
</element>
</choice>
</zeroOrMore>
</interleave>
</define>
</grammar>