Example 7 (date split as a list of nodes)
<grammar xmlns="http://relaxng.org/ns/structure/1.0" xmlns:if="http://namespaces.xmlschemata.org/xvif/iframe" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
<start>
<if:pipe>
<if:transform type="http://simonstl.com/ns/fragments/">
<if:apply>
<fragmentRules xmlns="http://simonstl.com/ns/fragments/">
<fragmentRule pattern="^[ \t\n]*([0-9]{4})-([0-9]{2})-([0-9]{2})[ \t\n]*$">
<applyTo>
<element localName="date"/>
</applyTo>
<produce>
<element localName="year"/>
<element localName="month"/>
<element localName="day"/>
</produce>
</fragmentRule>
</fragmentRules>
</if:apply>
</if:transform>
<if:validate type="http://relaxng.org/ns/structure/1.0">
<if:apply>
<element name="date">
<element name="year">
<data type="unsignedInt">
<param name="minInclusive">2000</param>
</data>
</element>
<element name="month">
<data type="unsignedByte">
<param name="maxInclusive">12</param>
</data>
</element>
<element name="day">
<data type="unsignedByte">
<param name="maxInclusive">31</param>
</data>
</element>
</element>
</if:apply>
</if:validate>
</if:pipe>
</start>
</grammar>
<date>x y</date>
<date>1999-09-18</date>
<date>2002-09-18</date>
<date> 2002-09-18 </date>
<date>2002-09--18</date>
<date>2002-09-18-</date>
<date>2002-09-18-a</date>
<date>2001-13-18</date>
<date>2001-14.5-18</date>
<date>2001-09.-18</date>
<date>2001-09-32</date>
<date>-2001-09-18</date>
<date>2001-12-31</date>
<date>0000002001-012-031</date>
<date> 2001 - 12 - 31 </date>
<date>2001-11-31</date>