<?xml version="1.0"?>
<!-- $Id: simple.rng,v 1.1 2002/05/19 06:39:37 jjc Exp $ -->
<?xml-stylesheet type="text/xsl" href="grammar-standalone.xsl"?>
<grammar xmlns="http://relaxng.org/ns/structure/1.0"
         ns="http://relaxng.org/ns/structure/1.0"
         datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">

<start>
  <ref name="grammar"/>
</start>

<define name="grammar">
  <element name="grammar">
    <element name="start">
      <ref name="top"/>
    </element>
    <zeroOrMore>
      <ref name="define"/>
    </zeroOrMore>
  </element>
</define>

<define name="define">
  <element name="define">
    <attribute name="name">
      <data type="NCName"/>
    </attribute>
    <element name="element">
      <ref name="nameClass"/>
      <ref name="top"/>
    </element>
  </element>
</define>

<define name="top">
  <choice>
    <element name="notAllowed">
      <empty/>
    </element>
    <ref name="pattern"/>
  </choice>
</define>

<define name="pattern">
  <choice>
    <element name="empty">
      <empty/>
    </element>
    <ref name="nonEmptyPattern"/>
  </choice>
</define>

<define name="nonEmptyPattern">
  <choice>
    <element name="text">
      <empty/>
    </element>
    <element name="data">
      <attribute name="type">
        <data type="NCName"/>
      </attribute>
      <attribute name="datatypeLibrary">
        <data type="anyURI"/>
      </attribute>
      <zeroOrMore>
        <ref name="param"/>
      </zeroOrMore>
      <optional>
        <ref name="exceptPattern"/>
      </optional>
    </element>
    <element name="value">
      <attribute name="datatypeLibrary">
        <data type="anyURI"/>
      </attribute>
      <attribute name="type">
        <data type="NCName"/>
      </attribute>
      <attribute name="ns">
        <data type="string"/>
      </attribute>
      <data type="string"/>
    </element>
    <element name="list">
      <ref name="pattern"/>
    </element>
    <element name="attribute">
      <ref name="nameClass"/>
      <ref name="pattern"/>
    </element>
    <element name="ref">
      <attribute name="name">
        <data type="NCName"/>
      </attribute>
    </element>
    <element name="oneOrMore">
      <ref name="nonEmptyPattern"/>
    </element>
    <element name="choice">
      <ref name="pattern"/>
      <ref name="nonEmptyPattern"/>
    </element>
    <element name="group">
      <ref name="nonEmptyPattern"/>
      <ref name="nonEmptyPattern"/>
    </element>
    <element name="interleave">
      <ref name="nonEmptyPattern"/>
      <ref name="nonEmptyPattern"/>
    </element>
  </choice>
</define>

<define name="param">
  <element name="param">
    <attribute name="name">
      <data type="NCName"/>
    </attribute>
    <data type="string"/>
  </element>
</define>

<define name="exceptPattern">
  <element name="except">
    <ref name="pattern"/>
  </element>
</define>

<define name="nameClass">
  <choice>
    <element name="anyName">
      <optional>
        <ref name="exceptNameClass"/>
      </optional>
    </element>
    <element name="nsName">
      <attribute name="ns">
        <data type="string"/>
      </attribute>
      <optional>
        <ref name="exceptNameClass"/>
      </optional>
    </element>
    <element name="name">
      <attribute name="ns">
        <data type="string"/>
      </attribute>
      <data type="NCName"/>
    </element>
    <element name="choice">
      <ref name="nameClass"/>
      <ref name="nameClass"/>
    </element>
  </choice>
</define>

<define name="exceptNameClass">
  <element name="except">
    <ref name="nameClass"/>
  </element>
</define>

</grammar>
