<?xml version="1.0"?>
<grammar xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes" ns="http://www.iana.org/assignments">

  <include href="../_support/iana-registry.rng"/>

  <start>
    <element name="registry">
      <ref name="registryMeta"/>
      
      <element name="registry">
        <ref name="registryMeta"/>
        <zeroOrMore>
          <element name="record">
            <optional><attribute name="date"><ref name="genericDate"/></attribute></optional>
            <element name="value"><ref name="genericRange"/></element>
            <element name="description"><text/></element>
            <ref name="references"/>
          </element>
        </zeroOrMore>
      </element>
      
      <element name="registry">
        <ref name="registryMeta"/>
        <zeroOrMore>
          <element name="record">
            <optional><attribute name="date"><ref name="genericDate"/></attribute></optional>
            <element name="value"><ref name="genericRange"/></element>
            <element name="description"><text/></element>
            <element name="length">
              <data type="string">
                <param name="pattern">\d+|varies+|-</param>
              </data>
            </element>
            <ref name="references"/>
          </element>
        </zeroOrMore>
      </element>
      
      <element name="registry">
        <ref name="registryMeta"/>
        <zeroOrMore>
          <element name="record">
            <optional><attribute name="date"><ref name="genericDate"/></attribute></optional>
            <element name="value"><ref name="genericRange"/></element>
            <element name="description"><text/></element>
            <ref name="references"/>
          </element>
        </zeroOrMore>
      </element>
      
      <element name="registry">
        <ref name="registryMeta"/>
        <zeroOrMore>
          <element name="record">
            <optional><attribute name="date"><ref name="genericDate"/></attribute></optional>
            <element name="value"><ref name="genericRange"/></element>
            <element name="description"><text/></element>
            <ref name="references"/>
          </element>
        </zeroOrMore>
      </element>
      
      <element name="registry">
        <ref name="registryMeta"/>
        <zeroOrMore>
          <element name="record">
            <optional><attribute name="date"><ref name="genericDate"/></attribute></optional>
            <element name="value"><ref name="genericRange"/></element>
            <element name="description"><text/></element>
            <ref name="references"/>
          </element>
        </zeroOrMore>
      </element>
      
      <element name="registry">
        <ref name="registryMeta"/>
        <zeroOrMore>
          <element name="record">
            <optional><attribute name="date"><ref name="genericDate"/></attribute></optional>
            <element name="value"><ref name="genericRange"/></element>
            <element name="description"><text/></element>
            <ref name="references"/>
          </element>
        </zeroOrMore>
      </element>
      
      <element name="registry">
        <ref name="registryMeta"/>
        <zeroOrMore>
          <element name="record">
            <optional><attribute name="date"><ref name="genericDate"/></attribute></optional>
            <element name="value"><ref name="genericRange"/></element>
            <element name="description"><text/></element>
            <ref name="references"/>
          </element>
        </zeroOrMore>
      </element>
      <element name="registry">
        <ref name="registryMeta"/>
        <zeroOrMore>
          <element name="record">
            <optional><attribute name="date"><ref name="genericDate"/></attribute></optional>
            <element name="value"><ref name="genericRange"/></element>
            <element name="description"><text/></element>
            <optional>
              <element name="implementation">
                <choice>
                  <value>gateway</value>
                  <value>host</value>
                </choice>
              </element>
            </optional>
            <optional>
              <element name="status">
                <choice>
                  <value>mandatory</value>
                  <value>optional</value>
                </choice>
              </element>
            </optional>
            <ref name="references"/>
          </element>
        </zeroOrMore>
      </element>
      <element name="registry">
        <ref name="registryMeta"/>
        <zeroOrMore>
          <element name="record">
            <optional><attribute name="date"><ref name="genericDate"/></attribute></optional>
            <element name="value"><ref name="genericRange"/></element>
            <element name="description"><text/></element>
            <ref name="references"/>
          </element>
        </zeroOrMore>
      </element>
      <ref name="people"/>
    </element>
  </start>

</grammar>
