<grammar
    ns="urn:ietf:params:xml:ns:yang:yin:1"
    datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"
    xmlns:dc="http://purl.org/dc/terms"
    xmlns="http://relaxng.org/ns/structure/1.0">

start

<start>
  <choice>
    <ref name="module-stmt"/>
    <ref name="submodule-stmt"/>
  </choice>
</start>

module-stmt

The pattern is referenced by:

<define name="module-stmt">
  <element name="module">
    <attribute name="name">
      <ref name="identifier"/>
    </attribute>
    <interleave>
      <group>
        <ref name="module-header-stmts"/>
        <ref name="linkage-stmts"/>
        <ref name="meta-stmts"/>
        <ref name="revision-stmts"/>
        <ref name="body-stmts"/>
      </group>
      <ref name="an-extension"/>
    </interleave>
  </element>
</define>

submodule-stmt

The pattern is referenced by:

<define name="submodule-stmt">
  <element name="submodule">
    <attribute name="name">
      <ref name="identifier"/>
    </attribute>
    <interleave>
      <group>
        <ref name="submodule-header-stmts"/>
        <ref name="linkage-stmts"/>
        <ref name="meta-stmts"/>
        <ref name="revision-stmts"/>
        <ref name="body-stmts"/>
      </group>
      <ref name="an-extension"/>
    </interleave>
  </element>
</define>

module-header-stmts

The pattern is referenced by:

<define name="module-header-stmts">
  <interleave>
    <optional>
      <ref name="yang-version-stmt"/>
    </optional>
    <ref name="namespace-stmt"/>
    <ref name="prefix-stmt"/>
  </interleave>
</define>

submodule-header-stmts

The pattern is referenced by:

<define name="submodule-header-stmts">
  <interleave>
    <optional>
      <ref name="yang-version-stmt"/>
    </optional>
    <ref name="belongs-to-stmt"/>
    <ref name="an-extension"/>
  </interleave>
</define>

meta-stmts

The pattern is referenced by:

<define name="meta-stmts">
  <interleave>
    <optional>
      <ref name="organization-stmt"/>
    </optional>
    <optional>
      <ref name="contact-stmt"/>
    </optional>
    <optional>
      <ref name="description-stmt"/>
    </optional>
    <optional>
      <ref name="reference-stmt"/>
    </optional>
  </interleave>
</define>

linkage-stmts

The pattern is referenced by:

<define name="linkage-stmts">
  <zeroOrMore>
      <choice>
        <ref name="import-stmt"/>
        <ref name="include-stmt"/>
      </choice>
    </zeroOrMore>
</define>

revision-stmts

The pattern is referenced by:

<define name="revision-stmts">
  <zeroOrMore>
    <ref name="revision-stmt"/>
  </zeroOrMore>
</define>

body-stmts

The pattern is referenced by:

<define name="body-stmts">
  <zeroOrMore>
    <choice>
      <ref name="feature-stmt"/>
      <ref name="identity-stmt"/>
      <ref name="extension-stmt"/>
      <ref name="typedef-stmt"/>
      <ref name="grouping-stmt"/>
      <ref name="data-def-stmt"/>
      <ref name="rpc-stmt"/>
      <ref name="notification-stmt"/>
    </choice>
  </zeroOrMore>
</define>

feature-stmt

The pattern is referenced by:

<define name="feature-stmt">
  <element name="feature">
    <attribute name="name">
      <ref name="identifier"/>
    </attribute>
    <interleave>
      <zeroOrMore>
        <ref name="if-feature-stmt"/>
      </zeroOrMore>
      <ref name="status-desc-ref"/>
      <ref name="an-extension"/>
    </interleave>
  </element>
</define>

if-feature-stmt

The pattern is referenced by:

<define name="if-feature-stmt">
  <element name="if-feature">
    <attribute name="name">
      <ref name="identifier-ref"/>
    </attribute>
    <ref name="an-extension"/>
  </element>
</define>

identity-stmt

The pattern is referenced by:

<define name="identity-stmt">
  <element name="identity">
    <attribute name="name">
      <ref name="identifier"/>
    </attribute>
    <interleave>
      <optional>
        <ref name="base-stmt"/>
      </optional>
      <ref name="status-desc-ref"/>
      <ref name="an-extension"/>
    </interleave>
  </element>
</define>

base-stmt

The pattern is referenced by:

<define name="base-stmt">
  <element name="base">
    <attribute name="name">
      <ref name="identifier-ref"/>
    </attribute>
    <ref name="an-extension"/>
  </element>
</define>

data-def-stmt

The pattern is referenced by:

<define name="data-def-stmt">
  <choice>
    <ref name="container-stmt"/>
    <ref name="leaf-stmt"/>
    <ref name="leaf-list-stmt"/>
    <ref name="list-stmt"/>
    <ref name="choice-stmt"/>
    <ref name="anyxml-stmt"/>
    <ref name="uses-stmt"/>
    <ref name="augment-stmt"/>
  </choice>
</define>

case-data-def-stmt

The pattern is referenced by:

<define name="case-data-def-stmt">
  <choice>
    <ref name="container-stmt"/>
    <ref name="leaf-stmt"/>
    <ref name="leaf-list-stmt"/>
    <ref name="list-stmt"/>
    <ref name="anyxml-stmt"/>
    <ref name="uses-stmt"/>
    <ref name="augment-stmt"/>
  </choice>
</define>

yang-version-stmt

The pattern is referenced by:

<define name="yang-version-stmt">
  <element name="yang-version">
    <attribute name="value">
      <value>1</value>
    </attribute>
    <ref name="an-extension"/>
  </element>
</define>

import-stmt

The pattern is referenced by:

<define name="import-stmt">
  <element name="import">
    <attribute name="module">
      <ref name="identifier"/>
    </attribute>
    <interleave>
      <ref name="prefix-stmt"/>
      <ref name="an-extension"/>
    </interleave>
  </element>
</define>

include-stmt

The pattern is referenced by:

<define name="include-stmt">
  <element name="include">
    <attribute name="module">
      <ref name="identifier"/>
    </attribute>
    <ref name="an-extension"/>
  </element>
</define>

namespace-stmt

The pattern is referenced by:

<define name="namespace-stmt">
  <element name="namespace">
    <attribute name="uri">
      <data type="anyURI"/>
    </attribute>
    <ref name="an-extension"/>
  </element>
</define>

prefix-stmt

The pattern is referenced by:

<define name="prefix-stmt">
  <element name="prefix">
    <attribute name="value">
      <ref name="identifier"/>
    </attribute>
    <ref name="an-extension"/>
  </element>
</define>

belongs-to-stmt

The pattern is referenced by:

<define name="belongs-to-stmt">
  <element name="belongs-to">
    <attribute name="module">
      <ref name="identifier"/>
    </attribute>
    <interleave>
      <ref name="prefix-stmt"/>
      <ref name="an-extension"/>
    </interleave>
  </element>
</define>

organization-stmt

The pattern is referenced by:

<define name="organization-stmt">
  <element name="organization">
    <interleave>
      <element name="text">
        <text/>
      </element>
      <ref name="an-extension"/>
    </interleave>
  </element>
</define>

contact-stmt

The pattern is referenced by:

<define name="contact-stmt">
  <element name="contact">
    <interleave>
      <element name="text">
        <text/>
      </element>
      <ref name="an-extension"/>
    </interleave>
  </element>
</define>

description-stmt

The pattern is referenced by:

<define name="description-stmt">
  <element name="description">
    <interleave>
      <element name="text">
        <text/>
      </element>
      <ref name="an-extension"/>
    </interleave>
  </element>
</define>

reference-stmt

The pattern is referenced by:

<define name="reference-stmt">
  <element name="reference">
    <interleave>
      <element name="text">
        <text/>
      </element>
      <ref name="an-extension"/>
    </interleave>
  </element>
</define>

units-stmt

The pattern is referenced by:

<define name="units-stmt">
  <element name="units">
    <attribute name="name">
      <data type="string"/>
    </attribute>
    <ref name="an-extension"/>
  </element>
</define>

revision-stmt

The pattern is referenced by:

<define name="revision-stmt">
  <element name="revision">
    <attribute name="date">
      <data type="date"/>
    </attribute>
    <interleave>
      <optional>
        <ref name="description-stmt"/>
      </optional>
      <ref name="an-extension"/>
    </interleave>
  </element>
</define>

extension-stmt

The pattern is referenced by:

<define name="extension-stmt">
  <element name="extension">
    <attribute name="name">
      <ref name="identifier"/>
    </attribute>
    <interleave>
      <optional>
        <ref name="argument-stmt"/>
      </optional>
      <ref name="status-desc-ref"/>
      <ref name="an-extension"/>
    </interleave>
  </element>
</define>

argument-stmt

The pattern is referenced by:

<define name="argument-stmt">
  <element name="argument">
    <attribute name="name">
      <ref name="identifier"/>
    </attribute>
    <interleave>
      <optional>
        <ref name="yin-element-stmt"/>
      </optional>
      <ref name="an-extension"/>
    </interleave>
  </element>
</define>

yin-element-stmt

The pattern is referenced by:

<define name="yin-element-stmt">
  <element name="yin-element">
    <attribute name="value">
      <data type="boolean"/>
    </attribute>
    <ref name="an-extension"/>
  </element>
</define>

typedef-stmt

The pattern is referenced by:

<define name="typedef-stmt">
  <element name="typedef">
    <attribute name="name">
      <ref name="identifier"/>
    </attribute>
    <interleave>
      <ref name="type-stmt"/>
      <optional>
        <ref name="units-stmt"/>
      </optional>
      <optional>
        <ref name="default-stmt"/>
      </optional>
      <ref name="status-desc-ref"/>
      <ref name="an-extension"/>
    </interleave>
  </element>
</define>

type-stmt

The pattern is referenced by:

<define name="type-stmt">
  <element name="type">
    <interleave>
      <choice>
        <group>
          <attribute name="name">
            <ref name="identifier-ref"/>
          </attribute>
          <choice>
            <ref name="range-stmt"/>
            <interleave>
              <ref name="length-stmt"/>
              <ref name="pattern-stmts"/>
            </interleave>
          </choice>
        </group>
        <ref name="integer-type"/>
        <ref name="decimal64-type"/>
        <ref name="string-type"/>
        <ref name="enumeration-type"/>
        <ref name="bits-type"/>
        <ref name="binary-type"/>
        <ref name="leafref-type"/>
        <ref name="identityref-type"/>
        <ref name="union-type"/>
        <ref name="instance-identifier-type"/>
      </choice>
      <ref name="an-extension"/>
    </interleave>
  </element>
</define>

integer-type

The pattern is referenced by:

<define name="integer-type">
  <attribute name="name">
    <choice>
      <value>int8</value>
      <value>int16</value>
      <value>int32</value>
      <value>int64</value>
      <value>uint8</value>
      <value>uint16</value>
      <value>uint32</value>
      <value>uint64</value>
    </choice>
  </attribute>
  <ref name="range-stmt"/>
</define>

range-stmt

The pattern is referenced by:

<define name="range-stmt">
  <optional>
    <element name="range">
      <attribute name="value">
        <ref name="range-expr"/>
      </attribute>
      <interleave>
        <optional>
          <ref name="error-message-stmt"/>
        </optional>
        <optional>
          <ref name="error-app-tag-stmt"/>
        </optional>
        <optional>
          <ref name="description-stmt"/>
        </optional>
        <optional>
          <ref name="reference-stmt"/>
        </optional>
        <ref name="an-extension"/>
      </interleave>
    </element>
  </optional>
</define>

decimal64-type

The pattern is referenced by:

<define name="decimal64-type">
  <attribute name="name">
    <value>decimal64</value>
  </attribute>
  <interleave>
    <ref name="range-stmt"/>
    <element name="fraction-digits">
      <attribute name="value">
        <data type="unsignedByte">
          <param name="minInclusive">1</param>
          <param name="maxInclusive">18</param>
        </data>
      </attribute>
    </element>
    <ref name="an-extension"/>
  </interleave>
</define>

string-type

The pattern is referenced by:

<define name="string-type">
  <attribute name="name">
    <value>string</value>
  </attribute>
  <interleave>
    <ref name="length-stmt"/>
    <ref name="pattern-stmts"/>
    <ref name="an-extension"/>
  </interleave>
</define>

length-stmt

The pattern is referenced by:

<define name="length-stmt">
  <optional>
    <element name="length">
      <attribute name="value">
        <ref name="length-expr"/>
      </attribute>
      <interleave>
        <optional>
          <ref name="error-message-stmt"/>
        </optional>
        <optional>
          <ref name="error-app-tag-stmt"/>
        </optional>
        <optional>
          <ref name="description-stmt"/>
        </optional>
        <optional>
          <ref name="reference-stmt"/>
        </optional>
        <ref name="an-extension"/>
      </interleave>
    </element>
  </optional>
</define>

pattern-stmts

The pattern is referenced by:

<define name="pattern-stmts">
  <zeroOrMore>
    <element name="pattern">
      <attribute name="value">
        <data type="string"/>
      </attribute>
      <interleave>
        <optional>
          <ref name="error-message-stmt"/>
        </optional>
        <optional>
          <ref name="error-app-tag-stmt"/>
        </optional>
        <optional>
          <ref name="description-stmt"/>
        </optional>
        <optional>
          <ref name="reference-stmt"/>
        </optional>
        <ref name="an-extension"/>
      </interleave>
    </element>
  </zeroOrMore>
</define>

default-stmt

The pattern is referenced by:

<define name="default-stmt">
  <element name="default">
    <attribute name="value">
      <data type="string"/>
    </attribute>
    <ref name="an-extension"/>
  </element>
</define>

enumeration-type

The pattern is referenced by:

<define name="enumeration-type">
  <attribute name="name">
    <value>enumeration</value>
  </attribute>
  <oneOrMore>
    <ref name="enum-stmt"/>
  </oneOrMore>
</define>

enum-stmt

The pattern is referenced by:

<define name="enum-stmt">
  <element name="enum">
    <attribute name="name">
      <ref name="identifier"/>
    </attribute>
    <interleave>
      <optional>
        <ref name="value-stmt"/>
      </optional>
      <ref name="status-desc-ref"/>
      <ref name="an-extension"/>
    </interleave>
  </element>
</define>

bits-type

The pattern is referenced by:

<define name="bits-type">
  <attribute name="name">
    <value>bits</value>
  </attribute>
  <oneOrMore>
    <ref name="bit-stmt"/>
  </oneOrMore>
</define>

bit-stmt

The pattern is referenced by:

<define name="bit-stmt">
  <element name="bit">
    <attribute name="name">
      <ref name="identifier"/>
    </attribute>
    <interleave>
      <optional>
        <ref name="position-stmt"/>
      </optional>
      <ref name="status-desc-ref"/>
      <ref name="an-extension"/>
    </interleave>
  </element>
</define>

position-stmt

The pattern is referenced by:

<define name="position-stmt">
  <element name="position">
    <attribute name="value">
      <data type="nonNegativeInteger"/>
    </attribute>
    <ref name="an-extension"/>
  </element>
</define>

binary-type

The pattern is referenced by:

<define name="binary-type">
  <attribute name="name">
    <value>binary</value>
  </attribute>
  <interleave>
    <optional>
      <ref name="length-stmt"/>
    </optional>
    <ref name="an-extension"/>
  </interleave>
</define>

leafref-type

The pattern is referenced by:

<define name="leafref-type">
  <attribute name="name">
    <value>leafref</value>
  </attribute>
  <interleave>
    <element name="path">
      <attribute name="value">
        <ref name="path-arg"/>
      </attribute>
      <ref name="an-extension"/>
    </element>
    <optional>
      <ref name="require-instance-stmt"/>
    </optional>
  </interleave>
</define>

require-instance-stmt

The pattern is referenced by:

<define name="require-instance-stmt">
  <element name="require-instance">
    <attribute name="value">
      <data type="boolean"/>
    </attribute>
    <ref name="an-extension"/>
  </element>
</define>

identityref-type

The pattern is referenced by:

<define name="identityref-type">
  <attribute name="name">
    <value>identityref</value>
  </attribute>
  <ref name="base-stmt"/>
</define>

union-type

The pattern is referenced by:

<define name="union-type">
  <attribute name="name">
    <value>union</value>
  </attribute>
  <oneOrMore>
    <ref name="type-stmt"/>
  </oneOrMore>
</define>

instance-identifier-type

The pattern is referenced by:

<define name="instance-identifier-type">
  <attribute name="name">
    <value>instance-identifier</value>
  </attribute>
  <optional>
    <ref name="require-instance-stmt"/>
  </optional>
</define>

status-stmt

The pattern is referenced by:

<define name="status-stmt">
  <element name="status">
    <attribute name="value">
      <ref name="status-arg"/>
    </attribute>
    <ref name="an-extension"/>
  </element>
</define>

status-arg

The pattern is referenced by:

<define name="status-arg">
  <choice>
    <value>current</value>
    <value>obsolete</value>
    <value>deprecated</value>
  </choice>
</define>

config-stmt

The pattern is referenced by:

<define name="config-stmt">
  <element name="config">
    <attribute name="value">
      <data type="boolean"/>
    </attribute>
    <ref name="an-extension"/>
  </element>
</define>

mandatory-stmt

The pattern is referenced by:

<define name="mandatory-stmt">
  <element name="mandatory">
    <attribute name="value">
      <data type="boolean"/>
    </attribute>
    <ref name="an-extension"/>
  </element>
</define>

presence-stmt

The pattern is referenced by:

<define name="presence-stmt">
  <element name="presence">
    <attribute name="value">
      <data type="string"/>
    </attribute>
    <ref name="an-extension"/>
  </element>
</define>

ordered-by-stmt

The pattern is referenced by:

<define name="ordered-by-stmt">
  <element name="ordered-by">
    <attribute name="value">
      <ref name="ordered-by-arg"/>
    </attribute>
    <ref name="an-extension"/>
  </element>
</define>

ordered-by-arg

The pattern is referenced by:

<define name="ordered-by-arg">
  <choice>
    <value>user</value>
    <value>system</value>
  </choice>
</define>

must-stmt

The pattern is referenced by:

<define name="must-stmt">
  <element name="must">
    <attribute name="condition">
      <data type="string"/>
    </attribute>
    <interleave>
      <optional>
        <ref name="error-message-stmt"/>
      </optional>
      <optional>
        <ref name="error-app-tag-stmt"/>
      </optional>
      <optional>
        <ref name="description-stmt"/>
      </optional>
      <optional>
        <ref name="reference-stmt"/>
      </optional>
      <ref name="an-extension"/>
    </interleave>
  </element>
</define>

error-message-stmt

The pattern is referenced by:

<define name="error-message-stmt">
  <element name="error-message">
    <element name="value">
      <text/>
      <ref name="an-extension"/>
    </element>
    <ref name="an-extension"/>
  </element>
</define>

error-app-tag-stmt

The pattern is referenced by:

<define name="error-app-tag-stmt">
  <element name="error-app-tag">
    <attribute name="value">
      <data type="string"/>
    </attribute>
    <ref name="an-extension"/>
  </element>
</define>

min-elements-stmt

The pattern is referenced by:

<define name="min-elements-stmt">
  <element name="min-elements">
    <attribute name="value">
      <data type="nonNegativeInteger"/>
    </attribute>
    <ref name="an-extension"/>
  </element>
</define>

max-elements-stmt

The pattern is referenced by:

<define name="max-elements-stmt">
  <element name="max-elements">
    <attribute name="value">
      <choice>
        <value>unbounded</value>
        <data type="positiveInteger"/>
      </choice>
    </attribute>
    <ref name="an-extension"/>
  </element>
</define>

value-stmt

The pattern is referenced by:

<define name="value-stmt">
  <element name="value">
    <attribute name="value">
      <data type="integer"/>
    </attribute>
    <ref name="an-extension"/>
  </element>
</define>

grouping-stmt

The pattern is referenced by:

<define name="grouping-stmt">
  <element name="grouping">
    <attribute name="name">
      <ref name="identifier"/>
    </attribute>
    <interleave>
      <ref name="status-desc-ref"/>
      <zeroOrMore>
        <choice>
          <ref name="typedef-stmt"/>
          <ref name="grouping-stmt"/>
          <ref name="data-def-stmt"/>
        </choice>
      </zeroOrMore>
      <ref name="an-extension"/>
    </interleave>
  </element>
</define>

container-stmt

The pattern is referenced by:

<define name="container-stmt">
  <element name="container">
    <attribute name="name">
      <ref name="identifier"/>
    </attribute>
    <interleave>
      <optional>
        <ref name="when-stmt"/>
      </optional>
      <zeroOrMore>
        <ref name="if-feature-stmt"/>
      </zeroOrMore>
      <zeroOrMore>
        <ref name="must-stmt"/>
      </zeroOrMore>
      <optional>
        <ref name="presence-stmt"/>
      </optional>
      <optional>
        <ref name="config-stmt"/>
      </optional>
      <ref name="status-desc-ref"/>
      <zeroOrMore>
        <choice>
          <ref name="typedef-stmt"/>
          <ref name="grouping-stmt"/>
          <ref name="data-def-stmt"/>
        </choice>
      </zeroOrMore>
      <ref name="an-extension"/>
    </interleave>
  </element>
</define>

leaf-stmt

The pattern is referenced by:

<define name="leaf-stmt">
  <element name="leaf">
    <attribute name="name">
      <ref name="identifier"/>
    </attribute>
    <interleave>
      <optional>
        <ref name="when-stmt"/>
      </optional>
      <zeroOrMore>
        <ref name="if-feature-stmt"/>
      </zeroOrMore>
      <ref name="type-stmt"/>
      <optional>
        <ref name="units-stmt"/>
      </optional>
      <zeroOrMore>
        <ref name="must-stmt"/>
      </zeroOrMore>
      <optional>
        <ref name="default-stmt"/>
      </optional>
      <optional>
        <ref name="config-stmt"/>
      </optional>
      <optional>
        <ref name="mandatory-stmt"/>
      </optional>
      <ref name="status-desc-ref"/>
      <ref name="an-extension"/>
    </interleave>
  </element>
</define>

leaf-list-stmt

The pattern is referenced by:

<define name="leaf-list-stmt">
  <element name="leaf-list">
    <attribute name="name">
      <ref name="identifier"/>
    </attribute>
    <interleave>
      <optional>
        <ref name="when-stmt"/>
      </optional>
      <zeroOrMore>
        <ref name="if-feature-stmt"/>
      </zeroOrMore>
      <ref name="type-stmt"/>
      <optional>
        <ref name="units-stmt"/>
      </optional>
      <zeroOrMore>
        <ref name="must-stmt"/>
      </zeroOrMore>
      <optional>
        <ref name="config-stmt"/>
      </optional>
      <optional>
        <ref name="min-elements-stmt"/>
      </optional>
      <optional>
        <ref name="max-elements-stmt"/>
      </optional>
      <optional>
        <ref name="ordered-by-stmt"/>
      </optional>
      <ref name="status-desc-ref"/>
      <ref name="an-extension"/>
    </interleave>
  </element>
</define>

list-stmt

The pattern is referenced by:

<define name="list-stmt">
  <element name="list">
    <attribute name="name">
      <ref name="identifier"/>
    </attribute>
    <interleave>
      <optional>
        <ref name="when-stmt"/>
      </optional>
      <zeroOrMore>
        <ref name="if-feature-stmt"/>
      </zeroOrMore>
      <zeroOrMore>
        <ref name="must-stmt"/>
      </zeroOrMore>
      <optional>
        <ref name="key-stmt"/>
      </optional>
      <zeroOrMore>
        <ref name="unique-stmt"/>
      </zeroOrMore>
      <optional>
        <ref name="config-stmt"/>
      </optional>
      <optional>
        <ref name="min-elements-stmt"/>
      </optional>
      <optional>
        <ref name="max-elements-stmt"/>
      </optional>
      <optional>
        <ref name="ordered-by-stmt"/>
      </optional>
      <ref name="status-desc-ref"/>
      <zeroOrMore>
        <choice>
          <ref name="typedef-stmt"/>
          <ref name="grouping-stmt"/>
        </choice>
      </zeroOrMore>
      <oneOrMore>
        <ref name="data-def-stmt"/>
      </oneOrMore>
      <ref name="an-extension"/>
    </interleave>
  </element>
</define>

key-stmt

The pattern is referenced by:

<define name="key-stmt">
  <element name="key">
    <attribute name="value">
      <list>
        <oneOrMore>
          <ref name="identifier"/>
        </oneOrMore>
      </list>
    </attribute>
    <ref name="an-extension"/>
  </element>
</define>

unique-stmt

The pattern is referenced by:

<define name="unique-stmt">
  <element name="unique">
    <attribute name="tag">
      <list>
        <oneOrMore>
          <ref name="descendant-schema-nodeid"/>
        </oneOrMore>
      </list>
    </attribute>
    <ref name="an-extension"/>
  </element>
</define>

choice-stmt

The pattern is referenced by:

<define name="choice-stmt">
  <element name="choice">
    <attribute name="name">
      <ref name="identifier"/>
    </attribute>
    <interleave>
      <optional>
        <ref name="when-stmt"/>
      </optional>
      <zeroOrMore>
        <ref name="if-feature-stmt"/>
      </zeroOrMore>
      <optional>
        <ref name="default-stmt"/>
      </optional>
      <optional>
        <ref name="config-stmt"/>
      </optional>
      <optional>
        <ref name="mandatory-stmt"/>
      </optional>
      <ref name="status-desc-ref"/>
      <zeroOrMore>
        <choice>
          <ref name="short-case-stmt"/>
          <ref name="case-stmt"/>
        </choice>
      </zeroOrMore>
      <ref name="an-extension"/>
    </interleave>
  </element>
</define>

short-case-stmt

The pattern is referenced by:

<define name="short-case-stmt">
  <choice>
    <ref name="container-stmt"/>
    <ref name="leaf-stmt"/>
    <ref name="leaf-list-stmt"/>
    <ref name="list-stmt"/>
    <ref name="anyxml-stmt"/>
  </choice>
</define>

case-stmt

The pattern is referenced by:

<define name="case-stmt">
  <element name="case">
    <attribute name="name">
      <ref name="identifier"/>
    </attribute>
    <interleave>
      <optional>
        <ref name="when-stmt"/>
      </optional>
      <zeroOrMore>
        <ref name="if-feature-stmt"/>
      </zeroOrMore>
      <ref name="status-desc-ref"/>
      <zeroOrMore>
        <ref name="case-data-def-stmt"/>
      </zeroOrMore>
      <ref name="an-extension"/>
    </interleave>
  </element>
</define>

anyxml-stmt

The pattern is referenced by:

<define name="anyxml-stmt">
  <element name="anyxml">
    <attribute name="name">
      <ref name="identifier"/>
    </attribute>
    <interleave>
      <optional>
        <ref name="when-stmt"/>
      </optional>
      <zeroOrMore>
        <ref name="if-feature-stmt"/>
      </zeroOrMore>
      <zeroOrMore>
        <ref name="must-stmt"/>
      </zeroOrMore>
      <optional>
        <ref name="config-stmt"/>
      </optional>
      <optional>
        <ref name="mandatory-stmt"/>
      </optional>
      <ref name="status-desc-ref"/>
      <ref name="an-extension"/>
    </interleave>
  </element>
</define>

uses-stmt

The pattern is referenced by:

<define name="uses-stmt">
  <element name="uses">
    <attribute name="name">
      <ref name="identifier-ref"/>
    </attribute>
    <interleave>
      <optional>
        <ref name="when-stmt"/>
      </optional>
      <zeroOrMore>
        <ref name="if-feature-stmt"/>
      </zeroOrMore>
      <ref name="status-desc-ref"/>
      <zeroOrMore>
        <ref name="refine-stmt"/>
      </zeroOrMore>
      <zeroOrMore>
        <ref name="uses-augment-stmt"/>
      </zeroOrMore>
      <ref name="an-extension"/>
    </interleave>
  </element>
</define>

refine-stmt

The pattern is referenced by:

<define name="refine-stmt">
  <element name="refine">
    <attribute name="target-node">
      <ref name="descendant-schema-nodeid"/>
    </attribute>
    <interleave>
      <choice>
        <ref name="refine-container-stmts"/>
        <ref name="refine-leaf-stmts"/>
        <ref name="refine-leaf-list-stmts"/>
        <ref name="refine-list-stmts"/>
        <ref name="refine-choice-stmts"/>
        <ref name="refine-case-stmts"/>
        <ref name="refine-anyxml-stmts"/>
      </choice>
      <ref name="an-extension"/>
    </interleave>
  </element>
</define>

refine-container-stmts

The pattern is referenced by:

<define name="refine-container-stmts">
  <interleave>
    <zeroOrMore>
      <ref name="must-stmt"/>
    </zeroOrMore>
    <optional>
      <ref name="presence-stmt"/>
    </optional>
    <optional>
      <ref name="config-stmt"/>
    </optional>
    <optional>
      <ref name="description-stmt"/>
    </optional>
    <optional>
      <ref name="reference-stmt"/>
    </optional>
  </interleave>
</define>

refine-leaf-stmts

The pattern is referenced by:

<define name="refine-leaf-stmts">
  <interleave>
    <zeroOrMore>
      <ref name="must-stmt"/>
    </zeroOrMore>
    <optional>
      <ref name="default-stmt"/>
    </optional>
    <optional>
      <ref name="config-stmt"/>
    </optional>
    <optional>
      <ref name="mandatory-stmt"/>
    </optional>
    <optional>
      <ref name="description-stmt"/>
    </optional>
    <optional>
      <ref name="reference-stmt"/>
    </optional>
  </interleave>
</define>

refine-leaf-list-stmts

The pattern is referenced by:

<define name="refine-leaf-list-stmts">
  <interleave>
    <zeroOrMore>
      <ref name="must-stmt"/>
    </zeroOrMore>
    <optional>
      <ref name="config-stmt"/>
    </optional>
    <optional>
      <ref name="min-elements-stmt"/>
    </optional>
    <optional>
      <ref name="max-elements-stmt"/>
    </optional>
    <optional>
      <ref name="description-stmt"/>
    </optional>
    <optional>
      <ref name="reference-stmt"/>
    </optional>
  </interleave>
</define>

refine-list-stmts

The pattern is referenced by:

<define name="refine-list-stmts">
  <interleave>
    <zeroOrMore>
      <ref name="must-stmt"/>
    </zeroOrMore>
    <optional>
      <ref name="config-stmt"/>
    </optional>
    <optional>
      <ref name="min-elements-stmt"/>
    </optional>
    <optional>
      <ref name="max-elements-stmt"/>
    </optional>
    <optional>
      <ref name="description-stmt"/>
    </optional>
    <optional>
      <ref name="reference-stmt"/>
    </optional>
  </interleave>
</define>

refine-choice-stmts

The pattern is referenced by:

<define name="refine-choice-stmts">
  <interleave>
    <optional>
      <ref name="default-stmt"/>
    </optional>
    <optional>
      <ref name="config-stmt"/>
    </optional>
    <optional>
      <ref name="mandatory-stmt"/>
    </optional>
    <optional>
      <ref name="description-stmt"/>
    </optional>
    <optional>
      <ref name="reference-stmt"/>
    </optional>
  </interleave>
</define>

refine-case-stmts

The pattern is referenced by:

<define name="refine-case-stmts">
  <interleave>
    <optional>
      <ref name="description-stmt"/>
    </optional>
    <optional>
      <ref name="reference-stmt"/>
    </optional>
  </interleave>
</define>

refine-anyxml-stmts

The pattern is referenced by:

<define name="refine-anyxml-stmts">
  <interleave>
    <optional>
      <ref name="config-stmt"/>
    </optional>
    <optional>
      <ref name="mandatory-stmt"/>
    </optional>
    <optional>
      <ref name="description-stmt"/>
    </optional>
    <optional>
      <ref name="reference-stmt"/>
    </optional>
  </interleave>
</define>

uses-augment-stmt

The pattern is referenced by:

<define name="uses-augment-stmt">
  <element name="augment">
    <attribute name="target-node">
      <ref name="descendant-schema-nodeid"/>
    </attribute>
    <interleave>
      <optional>
        <ref name="when-stmt"/>
      </optional>
      <zeroOrMore>
        <ref name="if-feature-stmt"/>
      </zeroOrMore>
      <ref name="status-desc-ref"/>
      <oneOrMore>
        <choice>
          <ref name="data-def-stmt"/>
          <ref name="case-stmt"/>
        </choice>
      </oneOrMore>
      <ref name="an-extension"/>
    </interleave>
  </element>
</define>

augment-stmt

The pattern is referenced by:

<define name="augment-stmt">
  <element name="augment">
    <attribute name="target-node">
      <ref name="absolute-schema-nodeid"/>
    </attribute>
    <interleave>
      <optional>
        <ref name="when-stmt"/>
      </optional>
      <zeroOrMore>
        <ref name="if-feature-stmt"/>
      </zeroOrMore>
      <ref name="status-desc-ref"/>
      <oneOrMore>
        <choice>
          <ref name="data-def-stmt"/>
          <ref name="case-stmt"/>
        </choice>
      </oneOrMore>
      <ref name="an-extension"/>
    </interleave>
  </element>
</define>

when-stmt

The pattern is referenced by:

<define name="when-stmt">
  <element name="when">
    <attribute name="condition">
      <data type="string"/>
    </attribute>
    <ref name="an-extension"/>
  </element>
</define>

rpc-stmt

The pattern is referenced by:

<define name="rpc-stmt">
  <element name="rpc">
    <attribute name="name">
      <ref name="identifier"/>
    </attribute>
    <interleave>
      <zeroOrMore>
        <ref name="if-feature-stmt"/>
      </zeroOrMore>
      <ref name="status-desc-ref"/>
      <zeroOrMore>
        <choice>
          <ref name="typedef-stmt"/>
          <ref name="grouping-stmt"/>
        </choice>
      </zeroOrMore>
      <optional>
        <ref name="input-stmt"/>
      </optional>
      <optional>
        <ref name="output-stmt"/>
      </optional>
      <ref name="an-extension"/>
    </interleave>
  </element>
</define>

input-stmt

The pattern is referenced by:

<define name="input-stmt">
  <element name="input">
    <interleave>
      <zeroOrMore>
        <choice>
          <ref name="typedef-stmt"/>
          <ref name="grouping-stmt"/>
        </choice>
      </zeroOrMore>
      <oneOrMore>
        <ref name="data-def-stmt"/>
      </oneOrMore>
      <ref name="an-extension"/>
    </interleave>
  </element>
</define>

output-stmt

The pattern is referenced by:

<define name="output-stmt">
  <element name="output">
    <interleave>
      <zeroOrMore>
        <choice>
          <ref name="typedef-stmt"/>
          <ref name="grouping-stmt"/>
        </choice>
      </zeroOrMore>
      <oneOrMore>
        <ref name="data-def-stmt"/>
      </oneOrMore>
      <ref name="an-extension"/>
    </interleave>
  </element>
</define>

notification-stmt

The pattern is referenced by:

<define name="notification-stmt">
  <element name="notification">
    <attribute name="name">
      <ref name="identifier"/>
    </attribute>
    <interleave>
      <zeroOrMore>
        <ref name="if-feature-stmt"/>
      </zeroOrMore>
      <ref name="status-desc-ref"/>
      <zeroOrMore>
        <choice>
          <ref name="typedef-stmt"/>
          <ref name="grouping-stmt"/>
          <ref name="data-def-stmt"/>
        </choice>
      </zeroOrMore>
      <ref name="an-extension"/>
    </interleave>
  </element>
</define>

an-extension

The pattern is referenced by:

<define name="an-extension">
  <optional>
    <element>
      <anyName>
        <except>
          <nsName/>
        </except>
      </anyName>
      <zeroOrMore>
        <choice>
          <attribute>
            <anyName/>
          </attribute>
          <ref name="any-element"/>
        </choice>
      </zeroOrMore>
    </element>
  </optional>
</define>

any-element

The pattern is referenced by:

<define name="any-element">
  <element>
    <anyName/>
    <zeroOrMore>
      <choice>
        <attribute>
          <anyName/>
        </attribute>
        <ref name="any-element"/>
      </choice>
    </zeroOrMore>
  </element>
</define>

status-desc-ref

The pattern is referenced by:

<define name="status-desc-ref">
  <interleave>
    <optional>
      <ref name="status-stmt"/>
    </optional>
    <optional>
      <ref name="description-stmt"/>
    </optional>
    <optional>
      <ref name="reference-stmt"/>
    </optional>
  </interleave>
</define>

identifier

The pattern is referenced by:

<define name="identifier">
  <data type="NCName">
    <param name="pattern">[_A-Za-z][_-A-Za-z0-9.]*</param>
  </data>
</define>

identifier-ref

The pattern is referenced by:

<define name="identifier-ref">
  <data type="Name">
    <param name="pattern">([_A-Za-z][_-A-Za-z0-9.]*:)?[_A-Za-z][_-A-Za-z0-9.]*</param>
  </data>
</define>

range-expr

The pattern is referenced by:

<define name="range-expr">
  <data type="string">
    <param name="pattern">s*(-INF|INF|min|max|-?(0|[1-9][0-9]*)(.[0-9]+(E[-+]?[0-9]+)?)?)(s*..s*(-INF|INF|min|max|-?(0|[1-9][0-9]*)(.[0-9]+(E[-+]?[0-9]+)?)?))?(s*|s*(-INF|INF|min|max|-?(0|[1-9][0-9]*)(.[0-9]+(E[-+]?[0-9]+)?)?)(s*..s*(-INF|INF|min|max|-?(0|[1-9][0-9]*)(.[0-9]+(E[-+]?[0-9]+)?)?))?)*s*</param>
  </data>
</define>

length-expr

The pattern is referenced by:

<define name="length-expr">
  <data type="string">
    <param name="pattern">s*(min|max|(0|[1-9][0-9]*))(s*..s*(min|max|(0|[1-9][0-9]*)))?(s*|s*(min|max|(0|[1-9][0-9]*))(s*..s*(min|max|(0|[1-9][0-9]*)))?)*s*</param>
  </data>
</define>

path-arg

The pattern is referenced by:

<define name="path-arg">
  <data type="string">
    <param name="pattern">((/([_A-Za-z][._-A-Za-z0-9]*:)?[_A-Za-z][._-A-Za-z0-9]*([s*([_A-Za-z][._-A-Za-z0-9]*:)?[_A-Za-z][._-A-Za-z0-9]*s*=s*currents*(s*)s*/s*(..s*/s*)+(([_A-Za-z][._-A-Za-z0-9]*:)?[_A-Za-z][._-A-Za-z0-9]*s*/s*)*([_A-Za-z][._-A-Za-z0-9]*:)?[_A-Za-z][._-A-Za-z0-9]*s*])*)+)|((../)+([_A-Za-z][._-A-Za-z0-9]*:)?[_A-Za-z][._-A-Za-z0-9]*(([s*([_A-Za-z][._-A-Za-z0-9]*:)?[_A-Za-z][._-A-Za-z0-9]*s*=s*currents*(s*)s*/s*(..s*/s*)+(([_A-Za-z][._-A-Za-z0-9]*:)?[_A-Za-z][._-A-Za-z0-9]*s*/s*)*([_A-Za-z][._-A-Za-z0-9]*:)?[_A-Za-z][._-A-Za-z0-9]*s*])*(/([_A-Za-z][._-A-Za-z0-9]*:)?[_A-Za-z][._-A-Za-z0-9]*([s*([_A-Za-z][._-A-Za-z0-9]*:)?[_A-Za-z][._-A-Za-z0-9]*s*=s*currents*(s*)s*/s*(..s*/s*)+(([_A-Za-z][._-A-Za-z0-9]*:)?[_A-Za-z][._-A-Za-z0-9]*s*/s*)*([_A-Za-z][._-A-Za-z0-9]*:)?[_A-Za-z][._-A-Za-z0-9]*s*])*)+)?)</param>
  </data>
</define>

absolute-schema-nodeid

The pattern is referenced by:

<define name="absolute-schema-nodeid">
  <data type="string">
    <param name="pattern">(/([_A-Za-z][._-A-Za-z0-9]*:)?[_A-Za-z][._-A-Za-z0-9]*)+</param>
  </data>
</define>

descendant-schema-nodeid

The pattern is referenced by:

<define name="descendant-schema-nodeid">
  <data type="string">
    <param name="pattern">([_A-Za-z][._-A-Za-z0-9]*:)?[_A-Za-z][._-A-Za-z0-9]*(/([_A-Za-z][._-A-Za-z0-9]*:)?[_A-Za-z][._-A-Za-z0-9]*)*</param>
  </data>
</define>