<?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"/>

  <!--
       B: Basic
       V: variable
    -->
  <define name="type">
    <element name="type">
      <choice>
        <value>B</value>
        <value>V</value>
      </choice>
    </element>
  </define>

  <start>
    <element name="registry">
      <ref name="registryMeta"/>

      <!-- GDOI ID Payload Type Values -->
      <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><ref name="references"/></optional>
          </element>
        </zeroOrMore>
      </element>

      <!-- SA KEK Payload Values -->
      <element name="registry">
        <ref name="registryMeta"/>

        <!-- SA KEK Payload Values - POP Algorithm -->
        <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><ref name="references"/></optional>
            </element>
          </zeroOrMore>
        </element>

        <!-- SA KEK Payload Values - KEK Attributes -->
        <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><ref name="type"/></optional>
              <optional><ref name="references"/></optional>
            </element>
          </zeroOrMore>
        </element>

        <!-- SA KEK Payload Values - KEK_MANAGEMENT_ALGORITHM -->
        <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><ref name="references"/></optional>
            </element>
          </zeroOrMore>
        </element>

        <!-- SA KEK Payload Values - KEK_ALGORITHM -->
        <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><ref name="references"/></optional>
            </element>
          </zeroOrMore>
        </element>

        <!-- SA KEK Payload Values - KEK_KEY_LENGTH -->
        <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><ref name="references"/></optional>
            </element>
          </zeroOrMore>
        </element>

        <!-- SA KEK Payload Values - KEK_KEY_LIFETIME -->
        <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><ref name="references"/></optional>
            </element>
          </zeroOrMore>
        </element>

        <!-- SA KEK Payload Values - SIG_HASH_ALGORITHM -->
        <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><ref name="references"/></optional>
            </element>
          </zeroOrMore>
        </element>

        <!-- SA KEK Payload Values - SIG_ALGORITHM -->
        <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><ref name="references"/></optional>
            </element>
          </zeroOrMore>
        </element>

        <!-- SA KEK Payload Values - SIG_KEY_LENGTH -->
        <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><ref name="references"/></optional>
            </element>
          </zeroOrMore>
        </element>

        <!-- SA KEK Payload Values - KE_OAKLEY_GROUP -->
        <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><ref name="references"/></optional>
            </element>
          </zeroOrMore>
        </element>
      </element>

      <!-- SA TEK Payload Values -->
      <element name="registry">
        <ref name="registryMeta"/>

        <!-- SA TEK Payload Values - Protocol-ID -->
        <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><ref name="references"/></optional>
            </element>
          </zeroOrMore>
        </element>
      </element>

      <!-- Key Download Type Values -->
      <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><ref name="references"/></optional>
          </element>
        </zeroOrMore>

        <!-- TEK Download Type -->
        <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><ref name="type"/></optional>
              <optional><ref name="references"/></optional>
            </element>
          </zeroOrMore>
        </element>

        <!-- KEK Download Type -->
        <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><ref name="type"/></optional>
              <optional><ref name="references"/></optional>
            </element>
          </zeroOrMore>
        </element>

        <!-- LKH Download Type -->
        <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><ref name="type"/></optional>
              <optional><ref name="references"/></optional>
            </element>
          </zeroOrMore>
        </element>

        <!-- SID Download Type -->
        <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><ref name="type"/></optional>
              <optional><ref name="references"/></optional>
            </element>
          </zeroOrMore>
        </element>
      </element>

      <!-- GAP Payload Policy Attributes -->
      <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><ref name="type"/></optional>
            <optional><ref name="references"/></optional>
          </element>
        </zeroOrMore>
      </element>
      <ref name="people"/>
    </element>
  </start>

</grammar>
