<?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"/>
      
      <!-- Information Elements -->
      
      <element name="registry">
        <ref name="registryMeta"/>
        <zeroOrMore>
          <element name="record">
            <optional><attribute name="date"><ref name="genericDate"/></attribute></optional>
            <optional><attribute name="updated"><ref name="genericDate"/></attribute></optional>
              <group>
                <element name="name"><text/></element>
                <optional>
                  <element name="dataType">
                    <!-- this should match IE Data Types registry.-->
                  <choice>
                    <value>unsigned8</value>
                    <value>unsigned16</value>
                    <value>unsigned32</value>
                    <value>unsigned64</value>
                    <value>signed8</value>
                    <value>signed16</value>
                    <value>signed32</value>
                    <value>signed64</value>
                    <value>float8</value>
                    <value>float16</value>
                    <value>float32</value>
                    <value>float64</value>
                    <value>boolean</value>
                    <value>macAddress</value>
                    <value>octet</value>
                    <value>octetArray</value>
                    <value>octetArray (16 bytes)</value>
                    <value>string</value>
                    <value>dateTimeSeconds</value>
                    <value>dateTimeMilliseconds</value>
                    <value>dateTimeMicroseconds</value>
                    <value>dateTimeNanoseconds</value>
                    <value>ipv4Address</value>
                    <value>ipv6Address</value>
                    <value>basicList</value>
                    <value>subTemplateList</value>
                    <value>subTemplateMultiList</value>
                  </choice>
                  </element>
                </optional>
                <optional><element name="group"><text/></element></optional>
                <optional>
                  <element name="dataTypeSemantics">
         <!-- this should match IPFIX Information Element Semantics registry.-->
                    <choice>
                      <value>default</value>
                      <value>quantity</value>
                      <value>totalCounter</value>
                      <value>deltaCounter</value>
                      <value>identifier</value>
                      <value>flags</value>
                      <value>list</value>
                      <value>snmpCounter</value>
                      <value>snmpGauge</value>
                    </choice>
                  </element>
                </optional>
                <element name="elementId"><text/></element>
                <optional>
                  <element name="applicability">
                    <choice>
                      <value>data</value>
                      <value>option</value>
                      <value>all</value>
                    </choice>
                  </element>
                </optional>
                <optional><element name="status">
                  <choice>
                    <value>current</value>
                    <value>deprecated</value>
                    <value>obsolete</value>
                  </choice>
                </element></optional>
                <optional><element name="description">
                  <zeroOrMore>
                    <choice>
                      <element name="paragraph"><ref name="richText"/></element>
                      <element name="artwork"><text/></element>
                    </choice>
                  </zeroOrMore>
                </element></optional>
                <optional><element name="units"><text/></element></optional>
                <optional><element name="range"><text/></element></optional>
              </group>
            <optional>
              <element name="references">
                <oneOrMore>
                  <element name="paragraph">
                    <ref name="text_with_references"/>
                  </element>
                </oneOrMore>
              </element>
            </optional>
            <optional><ref name="references"/></optional>
            <optional><element name="revision"><ref name = "text_with_references"/></element></optional>
            <optional><element name="date"><ref name = "text_with_references"/></element></optional>
          </element>
        </zeroOrMore>
        <ref name="footnotes"/>
        
        
        <!--mpls label type (value 46)-->
        <element name="registry">
          <ref name="registryMeta"/>
          <zeroOrMore>
            <element name="record">
              <optional><attribute name="date"><ref name="genericDate"/></attribute></optional>
              <optional><attribute name="updated"><ref name="genericDate"/></attribute></optional>
              <element name="value"><ref name="genericRange"/></element>
              <element name="description"><ref name = "text_with_references"/></element>
              <ref name="references"/>
            </element>
          </zeroOrMore>
          <ref name="footnotes"/>
        </element>
        
        <!--forwarding status (value 89)-->
        <element name="registry">
          <ref name="registryMeta"/>
          <zeroOrMore>
            <element name="record">
              <optional><attribute name="date"><ref name="genericDate"/></attribute></optional>
              <optional><attribute name="updated"><ref name="genericDate"/></attribute></optional>
              <element name="value"><text/></element>
              <element name="description"><ref name = "text_with_references"/></element>
              <ref name="references"/>
            </element>
          </zeroOrMore>
          <ref name="footnotes"/>
          
          <!--(status = 00b, Unknown) (value 89)-->
          
          <element name="registry">
            <ref name="registryMeta"/>
            <zeroOrMore>
              <element name="record">
                <optional><attribute name="date"><ref name="genericDate"/></attribute></optional>
                <optional><attribute name="updated"><ref name="genericDate"/></attribute></optional>
                <element name="binary-value"><text/></element>
                <element name="value"><ref name="genericRange"/></element>
                <element name="description"><ref name = "text_with_references"/></element>
                <ref name="references"/>
              </element>
            </zeroOrMore>
            <ref name="footnotes"/>
          </element>
          
          <!--(status = 01b, Forwarded) (value 89)-->
          
          <element name="registry">
            <ref name="registryMeta"/>
            <zeroOrMore>
              <element name="record">
                <optional><attribute name="date"><ref name="genericDate"/></attribute></optional>
                <optional><attribute name="updated"><ref name="genericDate"/></attribute></optional>
                <element name="binary-value"><text/></element>
                <element name="value"><ref name="genericRange"/></element>
                <element name="description"><ref name = "text_with_references"/></element>
                <ref name="references"/>
              </element>
            </zeroOrMore>
            <ref name="footnotes"/>
          </element>
            
            <!--(status = 10b, Dropped) (value 89)-->
            
            <element name="registry">
              <ref name="registryMeta"/>
              <zeroOrMore>
                <element name="record">
                  <optional><attribute name="date"><ref name="genericDate"/></attribute></optional>
                  <optional><attribute name="updated"><ref name="genericDate"/></attribute></optional>
                  <element name="binary-value"><text/></element>
                  <element name="value"><ref name="genericRange"/></element>
                  <element name="description"><ref name = "text_with_references"/></element>
                  <ref name="references"/>
                </element>
              </zeroOrMore>
              <ref name="footnotes"/>
            </element>
          
          <!--(status = 11b, Consumed) (value 89)-->
              
              <element name="registry">
                <ref name="registryMeta"/>
                <zeroOrMore>
                  <element name="record">
                    <optional><attribute name="date"><ref name="genericDate"/></attribute></optional>
                    <optional><attribute name="updated"><ref name="genericDate"/></attribute></optional>
                    <element name="binary-value"><text/></element>
                    <element name="value"><ref name="genericRange"/></element>
                    <element name="description"><ref name = "text_with_references"/></element>
                    <ref name="references"/>
                  </element>
                </zeroOrMore>
                <ref name="footnotes"/>
              </element>
          
        </element>
        
        <!--Classification Engine Ids (value 101)-->
        <element name="registry">
          <ref name="registryMeta"/>
          <zeroOrMore>
            <element name="record">
              <optional><attribute name="date"><ref name="genericDate"/></attribute></optional>
              <optional><attribute name="updated"><ref name="genericDate"/></attribute></optional>
              <element name="value"><ref name="genericRange"/></element>
              <element name="description"><ref name = "text_with_references"/></element>
              <element name="length"><text/></element>
              <ref name="references"/>
            </element>
          </zeroOrMore>
          <ref name="footnotes"/>
        </element>
        
        <!-- flowEndReason (value 136)-->
        <element name="registry">
          <ref name="registryMeta"/>
          <zeroOrMore>
            <element name="record">
              <optional><attribute name="date"><ref name="genericDate"/></attribute></optional>
              <optional><attribute name="updated"><ref name="genericDate"/></attribute></optional>
              <element name="value"><ref name="genericRange"/></element>
              <element name="name"><text/></element>
              <element name="description"><ref name = "text_with_references"/></element>
              <ref name="references"/>
            </element>
          </zeroOrMore>
          <ref name="footnotes"/>
        </element>
        
        <!--natOriginatingAddressRealm (value 229)-->
        <element name="registry">
          <ref name="registryMeta"/>
          <zeroOrMore>
            <element name="record">
              <optional><attribute name="date"><ref name="genericDate"/></attribute></optional>
              <optional><attribute name="updated"><ref name="genericDate"/></attribute></optional>
              <element name="value"><ref name="genericRange"/></element>
              <element name="description"><ref name = "text_with_references"/></element>
              <ref name="references"/>
            </element>
          </zeroOrMore>
          <ref name="footnotes"/>
        </element>
        
        <!--natEvent IDs (value 230)-->
        <element name="registry">
          <ref name="registryMeta"/>
          <zeroOrMore>
            <element name="record">
              <optional><attribute name="date"><ref name="genericDate"/></attribute></optional>
              <optional><attribute name="updated"><ref name="genericDate"/></attribute></optional>
              <element name="value"><ref name="genericRange"/></element>
              <element name="description"><ref name = "text_with_references"/></element>
              <ref name="references"/>
            </element>
          </zeroOrMore>
          <ref name="footnotes"/>
        </element>
        
        <!--firewallEvent (value 233)-->
        <element name="registry">
          <ref name="registryMeta"/>
          <zeroOrMore>
            <element name="record">
              <optional><attribute name="date"><ref name="genericDate"/></attribute></optional>
              <optional><attribute name="updated"><ref name="genericDate"/></attribute></optional>
              <element name="value"><ref name="genericRange"/></element>
              <element name="description"><ref name = "text_with_references"/></element>
              <ref name="references"/>
            </element>
          </zeroOrMore>
          <ref name="footnotes"/>
        </element>
        
        <!-- biflowDirection (value 239)-->
        <element name="registry">
          <ref name="registryMeta"/>
          <zeroOrMore>
            <element name="record">
              <optional><attribute name="date"><ref name="genericDate"/></attribute></optional>
              <optional><attribute name="updated"><ref name="genericDate"/></attribute></optional>
              <element name="value"><ref name="genericRange"/></element>
              <element name="name"><text/></element>
              <element name="description"><ref name = "text_with_references"/></element>
              <ref name="references"/>
            </element>
          </zeroOrMore>
          <ref name="footnotes"/>
        </element>
        
        <!--observationPointType (value 277)-->
        <element name="registry">
          <ref name="registryMeta"/>
          <zeroOrMore>
            <element name="record">
              <optional><attribute name="date"><ref name="genericDate"/></attribute></optional>
              <optional><attribute name="updated"><ref name="genericDate"/></attribute></optional>
              <element name="value"><ref name="genericRange"/></element>
              <element name="description"><ref name = "text_with_references"/></element>
              <ref name="references"/>
            </element>
          </zeroOrMore>
          <ref name="footnotes"/>
        </element>
        
        <!-- anonymizationTechnique (value 286)-->
        <element name="registry">
          <ref name="registryMeta"/>
          <zeroOrMore>
            <element name="record">
              <optional><attribute name="date"><ref name="genericDate"/></attribute></optional>
              <optional><attribute name="updated"><ref name="genericDate"/></attribute></optional>
              <element name="value"><ref name="genericRange"/></element>
              <element name="name"><text/></element>
              <element name="description"><ref name = "text_with_references"/></element>
              <element name="applicable"><text/></element>
              <element name="recommended"><text/></element>
              <ref name="references"/>
            </element>
          </zeroOrMore>
          <ref name="footnotes"/>
        </element>
        
        <!--natType (value 297)-->
        <element name="registry">
          <ref name="registryMeta"/>
          <zeroOrMore>
            <element name="record">
              <optional><attribute name="date"><ref name="genericDate"/></attribute></optional>
              <optional><attribute name="updated"><ref name="genericDate"/></attribute></optional>
              <element name="value"><ref name="genericRange"/></element>
              <element name="description"><ref name = "text_with_references"/></element>
              <ref name="references"/>
            </element>
          </zeroOrMore>
          <ref name="footnotes"/>
        </element>
        
        <!-- valueDistributionMethod (value 384)-->
        <element name="registry">
          <ref name="registryMeta"/>
          <zeroOrMore>
            <element name="record">
              <optional><attribute name="date"><ref name="genericDate"/></attribute></optional>
              <optional><attribute name="updated"><ref name="genericDate"/></attribute></optional>
              <element name="value"><ref name="genericRange"/></element>
              <element name="name"><text/></element>
              <element name="description"><ref name = "text_with_references"/></element>
              <ref name="references"/>
            </element>
          </zeroOrMore>
          <ref name="footnotes"/>
        </element>
        
       <!--flowSelectorAlgorithms (value 390)-->
        <element name="registry">
          <ref name="registryMeta"/>
          <zeroOrMore>
            <element name="record">
              <optional><attribute name="date"><ref name="genericDate"/></attribute></optional>
              <optional><attribute name="updated"><ref name="genericDate"/></attribute></optional>
              <element name="value"><ref name="genericRange"/></element>
              <element name="description"><ref name = "text_with_references"/></element>
              <element name="parameters"><ref name = "text_with_references"/></element>
              <ref name="references"/>
            </element>
          </zeroOrMore>
          <ref name="footnotes"/>
        </element>
        
        <!-- dataLinkFrameType (Value 408) -->
        <element name="registry">
          <ref name="registryMeta"/>
          <zeroOrMore>
            <element name="record">
              <optional><attribute name="date"><ref name="genericDate"/></attribute></optional>
              <optional><attribute name="updated"><ref name="genericDate"/></attribute></optional>
              <element name="value"><ref name="genericRange"/></element>
              <element name="description"><ref name = "text_with_references"/></element>
              <ref name="references"/>
            </element>
          </zeroOrMore>
          <ref name="footnotes"/>
        </element>
        
        <!-- mibCaptureTimeSemantics (Value 448) -->
        <element name="registry">
          <ref name="registryMeta"/>
          <zeroOrMore>
            <element name="record">
              <optional><attribute name="date"><ref name="genericDate"/></attribute></optional>
              <optional><attribute name="updated"><ref name="genericDate"/></attribute></optional>
              <element name="value"><ref name="genericRange"/></element>
              <element name="name"><text/></element>
              <element name="description"><ref name = "text_with_references"/></element>
              <ref name="references"/>
            </element>
          </zeroOrMore>
          <ref name="footnotes"/>
        </element>
        
        <!--natQuotaExceededEvent (value 466)-->
        <element name="registry">
          <ref name="registryMeta"/>
          <zeroOrMore>
            <element name="record">
              <optional><attribute name="date"><ref name="genericDate"/></attribute></optional>
              <optional><attribute name="updated"><ref name="genericDate"/></attribute></optional>
              <element name="value"><ref name="genericRange"/></element>
              <element name="description"><ref name = "text_with_references"/></element>
              <ref name="references"/>
            </element>
          </zeroOrMore>
          <ref name="footnotes"/>
        </element>
        
        <!--natThresholdEvent (value 467)-->
        <element name="registry">
          <ref name="registryMeta"/>
          <zeroOrMore>
            <element name="record">
              <optional><attribute name="date"><ref name="genericDate"/></attribute></optional>
              <optional><attribute name="updated"><ref name="genericDate"/></attribute></optional>
              <element name="value"><ref name="genericRange"/></element>
              <element name="description"><ref name = "text_with_references"/></element>
              <ref name="references"/>
            </element>
          </zeroOrMore>
          <ref name="footnotes"/>
        </element>
        
      </element>
 
      <!--ipfix-version-numbers-->     
      
      <element name="registry">
        <ref name="registryMeta"/>
        <zeroOrMore>
          <element name="record">
            <optional><attribute name="date"><ref name="genericDate"/></attribute></optional>
            <optional><attribute name="updated"><ref name="genericDate"/></attribute></optional>
            <element name="value"><ref name="genericRange"/></element>
            <element name="description"><ref name = "text_with_references"/></element>
            <ref name="references"/>
          </element>
        </zeroOrMore>
        <ref name="footnotes"/>
      </element>
 
      <!--ipfix-set-ids--> 
  
      <element name="registry">
        <ref name="registryMeta"/>
        <zeroOrMore>
          <element name="record">
            <optional><attribute name="date"><ref name="genericDate"/></attribute></optional>
            <optional><attribute name="updated"><ref name="genericDate"/></attribute></optional>
            <element name="value"><ref name="genericRange"/></element>
            <element name="description"><ref name = "text_with_references"/></element>
            <ref name="references"/>
          </element>
        </zeroOrMore>
        <ref name="footnotes"/>
      </element>
      
    
      <!--informationElementDataTypes sub-registry-->
      <element name="registry">
        <ref name="registryMeta"/>
        <zeroOrMore>
          <element name="record">
            <optional><attribute name="date"><ref name="genericDate"/></attribute></optional>
            <optional><attribute name="updated"><ref name="genericDate"/></attribute></optional>
            <element name="value"><ref name="genericRange"/></element>
            <element name="description"><ref name = "text_with_references"/></element>
            <ref name="references"/>
          </element>
        </zeroOrMore>
        <ref name="footnotes"/>
      </element>
      
      <!--informationElementDataTypes sub-registry-->
      <element name="registry">
        <ref name="registryMeta"/>
        <zeroOrMore>
          <element name="record">
            <optional><attribute name="date"><ref name="genericDate"/></attribute></optional>
            <optional><attribute name="updated"><ref name="genericDate"/></attribute></optional>
            <element name="value"><ref name="genericRange"/></element>
            <element name="description"><ref name = "text_with_references"/></element>
            <ref name="references"/>
          </element>
        </zeroOrMore>
        <ref name="footnotes"/>
      </element>
      
      <!--informationElementUnits sub-registry-->
      <element name="registry">
        <ref name="registryMeta"/>
        <zeroOrMore>
          <element name="record">
            <optional><attribute name="date"><ref name="genericDate"/></attribute></optional>
            <optional><attribute name="updated"><ref name="genericDate"/></attribute></optional>
            <element name="value"><ref name="genericRange"/></element>
            <element name="description"><ref name = "text_with_references"/></element>
            <element name="comments"><text/></element>
            <ref name="references"/>
          </element>
        </zeroOrMore>
        <ref name="footnotes"/>
      </element>
      
      <!--Structured Data Type Semantics-->
      <element name="registry">
        <ref name="registryMeta"/>
        <zeroOrMore>
          <element name="record">
            <optional><attribute name="date"><ref name="genericDate"/></attribute></optional>
            <optional><attribute name="updated"><ref name="genericDate"/></attribute></optional>
            <element name="value"><ref name="genericRange"/></element>
            <element name="name"><text/></element>
            <element name="description"><ref name = "text_with_references"/></element>
            <ref name="references"/>
          </element>
        </zeroOrMore>
        <ref name="footnotes"/>
      </element>
      
      <ref name="people"/>
    </element>
  </start>

</grammar>
