<?xml version=“1.0”?> <grammar xmlns=“relaxng.org/ns/structure/1.0” datatypeLibrary=“www.w3.org/2001/XMLSchema-datatypes” ns=“riddl.org/ns/declaration/1.0”>

<include href="../../description/1.0/description.rng">
  <start>
    <ref name="declaration"/>
  </start>
</include>  

<define name="declaration">
  <element name="declaration">
    <ref name="riddl-declaration-other-atts"/>
    <oneOrMore>
      <ref name="riddl-interface"/>
    </oneOrMore>
    <element name="facade">
      <ref name="riddl-facade"/>
    </element>
  </element>
</define>

<define name="riddl-interface">
  <element name="interface">
    <optional>
      <attribute name="location">
        <data type="anyURI"/>
      </attribute>
    </optional>  
    <attribute name="name">
      <ref name="riddl-datatype-name"/>
    </attribute>
    <ref name="riddl-description-include"/>
  </element>
</define>  

<define name="riddl-facade">
  <oneOrMore>
    <element name="tile">
      <optional>
        <attribute name="path">
          <ref name="riddl-datatype-pathtemplate"/>
        </attribute>
      </optional>
      <oneOrMore>
        <element name="layer">
          <ref name="riddl-layer"/>
        </element>
      </oneOrMore>  
    </element>
  </oneOrMore>
</define>  

<define name="riddl-layer">
  <attribute name="name">
    <ref name="riddl-datatype-name"/>
  </attribute>
  <zeroOrMore>
    <element name="apply-to">
      <ref name="riddl-datatype-pathtemplate"/>
    </element>
  </zeroOrMore>  
  <zeroOrMore>
    <element name="block">
      <optional>
        <ref name="riddl-att-method"/>
      </optional>
      <optional>
        <ref name="riddl-atts-request"/>
      </optional>
      <ref name="riddl-datatype-pathtemplate"/>
    </element>  
  </zeroOrMore>  
</define>

<define name="riddl-description-include">
  <choice>
    <element name="include" ns="http://www.w3.org/2001/XInclude">
      <attribute name="href">
        <data type="anyURI"/>
      </attribute>
    </element>
    <element name="description" ns="http://riddl.org/ns/description/1.0">
      <ref name="riddl-description"/>
    </element>
  </choice>   
</define>

<define name="riddl-declaration-others">
  <ref name="other"/>
  <zeroOrMore>
    <attribute>
      <anyName>
        <except>
          <nsName/>
          <nsName ns=""/>
        </except>
      </anyName>
    </attribute>
  </zeroOrMore>
</define>  

<define name="riddl-declaration-other-atts">
  <zeroOrMore>
    <attribute>
      <anyName>
        <except>
          <nsName/>
          <nsName ns=""/>
        </except>
      </anyName>
    </attribute>
  </zeroOrMore>
</define>

</grammar>