<?xml version="1.0" encoding="UTF-8"?>
<grammar xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
  <start>
    <ref name="document"/>
  </start>
  <define name="document">
    <element name="document">
      <ref name="head"/>
      <ref name="body"/>
    </element>
  </define>
  <define name="head">
    <element name="head">
      <interleave>
        <element name="organization">
          <choice>
            <value>ISO</value>
            <value>ISO/IEC</value>
          </choice>
        </element>
        <element name="document-type">
          <choice>
            <value>International Standard</value>
            <value>Technical Report</value>
            <value>Guide</value>
            <value>Publicly Available Specification</value>
            <value>Technical Specification</value>
            <value>International Standardized Profile</value>
          </choice>
        </element>
        <element name="stage">
          <choice>
            <value>committee</value>
            <value>enquiry</value>
            <value>approval</value>
            <value>publication</value>
          </choice>
        </element>
        <element name="tc-number">
          <ref name="positive-integer"/>
        </element>
        <element name="tc-name">
          <text/>
        </element>
        <optional>
          <interleave>
            <element name="sc-number">
              <ref name="positive-integer"/>
            </element>
            <element name="sc-name">
              <text/>
            </element>
          </interleave>
        </optional>
        <optional>
          <element name="wg-number">
            <ref name="positive-integer"/>
          </element>
        </optional>
        <optional>
          <element name="serial-number">
            <ref name="positive-integer"/>
          </element>
        </optional>
        <optional>
          <element name="draft-number">
            <ref name="positive-integer"/>
          </element>
        </optional>
        <element name="document-number">
          <ref name="positive-integer"/>
        </element>
        <optional>
          <element name="part-number">
            <ref name="positive-integer"/>
          </element>
        </optional>
        <element name="document-language">
          <choice>
            <value>E</value>
            <value>F</value>
          </choice>
        </element>
        <element name="secretariat">
          <value>ANSI</value>
        </element>
        <element name="date">
          <data type="date"/>
        </element>
        <element name="title">
          <optional>
            <element name="introductory">
              <text/>
            </element>
          </optional>
          <element name="main">
            <text/>
          </element>
          <optional>
            <element name="complementary">
              <text/>
            </element>
          </optional>
        </element>
      </interleave>
    </element>
  </define>
  <define name="positive-integer">
    <data type="token">
      <param name="pattern">[1-9][0-9]*|0</param>
    </data>
  </define>
  <define name="body">
    <ref name="foreword"/>
    <optional>
      <ref name="introduction"/>
    </optional>
    <ref name="scope"/>
    <optional>
      <ref name="normative-references"/>
    </optional>
    <optional>
      <ref name="terms-and-definitions"/>
    </optional>
    <oneOrMore>
      <ref name="titled-clause"/>
    </oneOrMore>
    <zeroOrMore>
      <ref name="annex"/>
    </zeroOrMore>
    <optional>
      <ref name="bibliography"/>
    </optional>
  </define>
  <define name="foreword">
    <element name="foreword">
      <optional>
        <ref name="part-list"/>
      </optional>
    </element>
  </define>
  <define name="part-list">
    <element name="part-list">
      <oneOrMore>
        <element name="part">
          <element name="number">
            <ref name="positive-integer"/>
          </element>
          <element name="title">
            <text/>
          </element>
        </element>
      </oneOrMore>
    </element>
  </define>
  <define name="title">
    <element name="title">
      <ref name="title-content"/>
    </element>
  </define>
  <define name="title-content">
    <zeroOrMore>
      <choice>
        <text/>
        <element name="code">
          <ref name="title-content"/>
        </element>
      </choice>
    </zeroOrMore>
  </define>
  <define name="clause-content">
    <choice>
      <group>
        <ref name="titled-clause"/>
        <oneOrMore>
          <ref name="titled-clause"/>
        </oneOrMore>
      </group>
      <ref name="untitled-clause-content"/>
    </choice>
  </define>
  <define name="untitled-clause-content">
    <choice>
      <group>
        <ref name="untitled-clause"/>
        <oneOrMore>
          <ref name="untitled-clause"/>
        </oneOrMore>
      </group>
      <oneOrMore>
        <ref name="block"/>
      </oneOrMore>
    </choice>
  </define>
  <define name="introduction">
    <element name="introduction">
      <oneOrMore>
        <ref name="block"/>
      </oneOrMore>
    </element>
  </define>
  <define name="scope">
    <element name="scope">
      <oneOrMore>
        <ref name="block"/>
      </oneOrMore>
    </element>
  </define>
  <define name="normative-references">
    <element name="normative-references">
      <zeroOrMore>
        <ref name="block"/>
      </zeroOrMore>
      <oneOrMore>
        <ref name="referenced-document"/>
      </oneOrMore>
    </element>
  </define>
  <define name="referenced-document">
    <element name="referenced-document">
      <ref name="id"/>
      <element name="abbrev">
        <text/>
      </element>
      <element name="title">
        <text/>
      </element>
      <zeroOrMore>
        <element name="field">
          <text/>
        </element>
      </zeroOrMore>
      <element name="url">
        <data type="anyURI"/>
      </element>
    </element>
  </define>
  <!--
    boilerplate generated automatically
    need markup for supplementary sources of terms and definitions
  -->
  <define name="terms-and-definitions">
    <element name="terms-and-definitions">
      <ref name="terms-and-definitions-content"/>
    </element>
  </define>
  <define name="terms-and-definitions-content">
    <oneOrMore>
      <choice>
        <ref name="term-and-definition"/>
        <element name="clause">
          <ref name="title"/>
          <ref name="terms-and-definitions-content"/>
        </element>
      </choice>
    </oneOrMore>
  </define>
  <define name="term-and-definition">
    <oneOrMore>
      <element name="term-and-definition">
        <element name="term">
          <text/>
        </element>
        <zeroOrMore>
          <element name="term">
            <optional>
              <attribute name="status"/>
            </optional>
            <text/>
          </element>
        </zeroOrMore>
        <element name="definition">
          <optional>
            <attribute name="subject-field"/>
          </optional>
          <ref name="inline"/>
        </element>
        <zeroOrMore>
          <choice>
            <ref name="example"/>
            <ref name="note"/>
          </choice>
        </zeroOrMore>
      </element>
    </oneOrMore>
  </define>
  <define name="titled-clause">
    <element name="clause">
      <ref name="id"/>
      <ref name="title"/>
      <ref name="clause-content"/>
    </element>
  </define>
  <define name="untitled-clause">
    <element name="clause">
      <ref name="id"/>
      <ref name="untitled-clause-content"/>
    </element>
  </define>
  <define name="annex">
    <element name="annex">
      <ref name="id"/>
      <attribute name="normative">
        <choice>
          <value>true</value>
          <value>false</value>
        </choice>
      </attribute>
      <ref name="title"/>
      <ref name="clause-content"/>
    </element>
  </define>
  <define name="bibliography">
    <element name="bibliography">
      <oneOrMore>
        <ref name="referenced-document"/>
      </oneOrMore>
    </element>
  </define>
  <define name="block">
    <choice>
      <ref name="p"/>
      <ref name="ol"/>
      <ref name="ul"/>
      <ref name="example"/>
      <ref name="note"/>
      <ref name="pre"/>
      <ref name="notation-list"/>
    </choice>
  </define>
  <define name="p">
    <element name="p">
      <ref name="inline"/>
    </element>
  </define>
  <define name="ol">
    <element name="ol">
      <oneOrMore>
        <element name="li">
          <ref name="id"/>
          <oneOrMore>
            <ref name="block"/>
          </oneOrMore>
        </element>
      </oneOrMore>
    </element>
  </define>
  <define name="ul">
    <element name="ul">
      <oneOrMore>
        <element name="li">
          <oneOrMore>
            <ref name="block"/>
          </oneOrMore>
        </element>
      </oneOrMore>
    </element>
  </define>
  <define name="example">
    <element name="example">
      <oneOrMore>
        <ref name="p"/>
      </oneOrMore>
    </element>
  </define>
  <define name="note">
    <element name="note">
      <oneOrMore>
        <ref name="p"/>
      </oneOrMore>
    </element>
  </define>
  <define name="notation-list">
    <element name="notation-list">
      <oneOrMore>
        <element name="notation-item">
          <element name="notation">
            <ref name="inline"/>
          </element>
          <element name="notation-definition">
            <ref name="p"/>
            <zeroOrMore>
              <choice>
                <ref name="p"/>
                <ref name="note"/>
              </choice>
            </zeroOrMore>
          </element>
        </element>
      </oneOrMore>
    </element>
  </define>
  <define name="pre">
    <element name="pre">
      <ref name="pre-content"/>
    </element>
  </define>
  <define name="pre-content">
    <zeroOrMore>
      <choice>
        <text/>
        <element name="var">
          <ref name="pre-content"/>
        </element>
      </choice>
    </zeroOrMore>
  </define>
  <define name="inline">
    <zeroOrMore>
      <choice>
        <text/>
        <element>
          <choice>
            <name>code</name>
            <name>b</name>
            <name>i</name>
            <name>var</name>
          </choice>
          <ref name="inline"/>
        </element>
        <ref name="ref"/>
        <ref name="firstterm"/>
        <ref name="strong"/>
      </choice>
    </zeroOrMore>
  </define>
  <define name="ref">
    <choice>
      <ref name="this"/>
      <ref name="xref"/>
    </choice>
  </define>
  <!--
    "This part of ISO/IEC"
    "This International Standard"
  -->
  <define name="this">
    <element>
      <choice>
        <name>This</name>
        <name>this</name>
      </choice>
      <empty/>
    </element>
  </define>
  <define name="xref">
    <choice>
      <element name="Xref">
        <attribute name="to">
          <data type="IDREF"/>
        </attribute>
      </element>
      <element name="xref">
        <attribute name="to">
          <data type="IDREF"/>
        </attribute>
      </element>
    </choice>
  </define>
  <define name="id">
    <optional>
      <attribute name="id">
        <data type="ID"/>
      </attribute>
    </optional>
  </define>
  <define name="firstterm">
    <element name="firstterm">
      <text/>
    </element>
  </define>
  <define name="strong">
    <element name="strong">
      <text/>
    </element>
  </define>
</grammar>
