<?xml version="1.0"?>
<grammar 
 xmlns="http://relaxng.org/ns/structure/1.0" 
 ns="http://www.dehora.net/r/2004/07/"
 datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"> 
  <start>
    <ref name="rdf"/>
  </start>
  <define name="rdf">
    <element name="rdf" >
      <attribute name="version"><value>20040718</value></attribute>
      <optional>
        <ref name="quoted"/>
      </optional>
      <zeroOrMore>
        <ref name="graph"/>
      </zeroOrMore>
    </element>
  </define>
  <define name="graph">
    <element name="graph">
      <optional><ref name="quoted"/></optional>
      <optional>
        <ref name="description"/>
      </optional>
      <optional>
        <ref name="context"/>
      </optional>
      <zeroOrMore>
        <ref name="statement"/>
      </zeroOrMore>
    </element>
  </define>
  <define name="description">
    <element name="description"><text/></element>
  </define>
  <define name="context">
    <element name="context"> 
      <ref name="uri"/>
    </element>
  </define>
  <define name="statement">
    <element name="statement"> 
      <optional>
        <ref name="context"/>
      </optional>
      <interleave>
        <ref name="subject"/>
        <ref name="property"/>
        <ref name="value"/>
      </interleave>
    </element>
  </define>
  <define name="subject">
    <element name="subject">
      <choice>
        <ref name="bnode"/>
        <ref name="uri"/>
      </choice>
    </element>  
  </define>
  <define name="property">
    <element name="property">  
      <ref name="uri"/>
    </element>
  </define>
  <define name="value">
    <choice>
      <ref name="valueURI"/>
      <ref name="valueBNODE"/>
      <ref name="valueTYP"/>
      <ref name="valueTYPXML"/>
    </choice>
  </define>
  <define name="valueURI">
    <element name="value">  
      <ref name="uri"/>
    </element>
  </define>
  <define name="valueBNODE">
    <element name="value">  
      <ref name="bnode"/>
    </element>
  </define>
  <define name="valueTYP">
    <element name="value">
      <optional>
        <attribute name="type"><data type="anyURI" /></attribute>
      </optional>
      <text/>
    </element>
  </define>
  <define name="valueTYPXML">
    <element name="value">
      <attribute name="type">
        <value>http://www.dehora.net/r/2004/07/type/xml</value>
      </attribute>
      <ref name="ANY"/>
    </element>
  </define>
  <define name="ANY">
    <element>
      <anyName/>
      <zeroOrMore>
        <choice>
          <attribute>
            <anyName/>
          </attribute>
          <text/>
          <ref name="ANY"/>
        </choice>
      </zeroOrMore>
    </element>
  </define>
  <define name="quoted">
    <attribute name="quoted">
      <choice>
        <value>yes</value>
        <value>no</value>
      </choice>
    </attribute>
  </define>
  <define name="uri">
    <attribute name="uri"><data type="anyURI" /></attribute>
  </define>
  <define name="bnode">
    <attribute name="bnode"><data type="NMTOKEN" /></attribute>
  </define>
</grammar>

