metanorma/metanorma-gb

View on GitHub
lib/asciidoctor/gb/isodoc.rng

Summary

Maintainability
Test Coverage
<?xml version="1.0" encoding="UTF-8"?>
<!--
  instantiations of this grammar may replace leaf strings
  with more elaborated types; e.g. title (text) replaced with
  title-main, title-intro, title-part; type replaced with
  enum.
  
  some renaming at leaf nodes is permissible
  
  obligations can change both from optional to mandatory,
  and from mandatory to optional; optional elements may
  be omitted; freely positioned alternatives may be replaced
  with strict ordering
  
  DO NOT introduce a namespace here. We do not want a distinct namespace
  for these elements, and a distinct namespace for any grammar inheriting
  these elements; we just want one namespace for any child grammars
  of this.
-->
<grammar xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
  <include href="reqt.rng"/>
  <!-- include "biblio.rnc" { } -->
  <include href="basicdoc.rng">
    <start>
      <ref name="standard-document"/>
    </start>
    <define name="hyperlink">
      <element name="link">
        <attribute name="target">
          <data type="anyURI"/>
        </attribute>
        <optional>
          <attribute name="type">
            <ref name="ReferenceFormat"/>
          </attribute>
        </optional>
        <optional>
          <attribute name="alt"/>
        </optional>
        <text/>
      </element>
    </define>
    <define name="xref">
      <element name="xref">
        <attribute name="target">
          <data type="string">
            <param name="pattern">\i\c*|\c+#\c+</param>
          </data>
        </attribute>
        <optional>
          <attribute name="type">
            <ref name="ReferenceFormat"/>
          </attribute>
        </optional>
        <optional>
          <attribute name="alt"/>
        </optional>
        <optional>
          <attribute name="case">
            <choice>
              <value>capital</value>
              <value>lowercase</value>
            </choice>
          </attribute>
        </optional>
        <optional>
          <attribute name="droploc">
            <data type="boolean"/>
          </attribute>
        </optional>
        <text/>
      </element>
    </define>
    <define name="ul">
      <element name="ul">
        <attribute name="id">
          <data type="ID"/>
        </attribute>
        <optional>
          <attribute name="keep-with-next">
            <data type="boolean"/>
          </attribute>
        </optional>
        <optional>
          <attribute name="keep-lines-together">
            <data type="boolean"/>
          </attribute>
        </optional>
        <oneOrMore>
          <ref name="li"/>
        </oneOrMore>
        <zeroOrMore>
          <ref name="note"/>
        </zeroOrMore>
      </element>
    </define>
    <define name="ol">
      <element name="ol">
        <attribute name="id">
          <data type="ID"/>
        </attribute>
        <optional>
          <attribute name="keep-with-next">
            <data type="boolean"/>
          </attribute>
        </optional>
        <optional>
          <attribute name="keep-lines-together">
            <data type="boolean"/>
          </attribute>
        </optional>
        <attribute name="type">
          <choice>
            <value>roman</value>
            <value>alphabet</value>
            <value>arabic</value>
            <value>roman_upper</value>
            <value>alphabet_upper</value>
          </choice>
        </attribute>
        <oneOrMore>
          <ref name="li"/>
        </oneOrMore>
        <zeroOrMore>
          <ref name="note"/>
        </zeroOrMore>
      </element>
    </define>
    <define name="dl">
      <element name="dl">
        <attribute name="id">
          <data type="ID"/>
        </attribute>
        <optional>
          <attribute name="keep-with-next">
            <data type="boolean"/>
          </attribute>
        </optional>
        <optional>
          <attribute name="keep-lines-together">
            <data type="boolean"/>
          </attribute>
        </optional>
        <oneOrMore>
          <ref name="dt"/>
          <ref name="dd"/>
        </oneOrMore>
        <zeroOrMore>
          <ref name="note"/>
        </zeroOrMore>
      </element>
    </define>
    <define name="example">
      <element name="example">
        <attribute name="id">
          <data type="ID"/>
        </attribute>
        <optional>
          <attribute name="unnumbered">
            <data type="boolean"/>
          </attribute>
        </optional>
        <optional>
          <attribute name="subsequence"/>
        </optional>
        <optional>
          <attribute name="number"/>
        </optional>
        <optional>
          <attribute name="keep-with-next">
            <data type="boolean"/>
          </attribute>
        </optional>
        <optional>
          <attribute name="keep-lines-together">
            <data type="boolean"/>
          </attribute>
        </optional>
        <optional>
          <ref name="tname"/>
        </optional>
        <oneOrMore>
          <choice>
            <ref name="formula"/>
            <ref name="ul"/>
            <ref name="ol"/>
            <ref name="dl"/>
            <ref name="quote"/>
            <ref name="sourcecode"/>
            <ref name="paragraph-with-footnote"/>
            <ref name="figure"/>
          </choice>
        </oneOrMore>
        <zeroOrMore>
          <ref name="note"/>
        </zeroOrMore>
      </element>
    </define>
    <define name="table">
      <element name="table">
        <attribute name="id">
          <data type="ID"/>
        </attribute>
        <optional>
          <attribute name="unnumbered">
            <data type="boolean"/>
          </attribute>
        </optional>
        <optional>
          <attribute name="number"/>
        </optional>
        <optional>
          <attribute name="subsequence"/>
        </optional>
        <optional>
          <attribute name="alt"/>
        </optional>
        <optional>
          <attribute name="summary"/>
        </optional>
        <optional>
          <attribute name="uri">
            <data type="anyURI"/>
          </attribute>
        </optional>
        <optional>
          <attribute name="keep-with-next">
            <data type="boolean"/>
          </attribute>
        </optional>
        <optional>
          <attribute name="keep-lines-together">
            <data type="boolean"/>
          </attribute>
        </optional>
        <optional>
          <ref name="tname"/>
        </optional>
        <optional>
          <ref name="thead"/>
        </optional>
        <ref name="tbody"/>
        <optional>
          <ref name="tfoot"/>
        </optional>
        <zeroOrMore>
          <ref name="table-note"/>
        </zeroOrMore>
        <optional>
          <ref name="dl"/>
        </optional>
      </element>
    </define>
    <define name="figure">
      <element name="figure">
        <attribute name="id">
          <data type="ID"/>
        </attribute>
        <optional>
          <attribute name="unnumbered">
            <data type="boolean"/>
          </attribute>
        </optional>
        <optional>
          <attribute name="number"/>
        </optional>
        <optional>
          <attribute name="subsequence"/>
        </optional>
        <optional>
          <attribute name="keep-with-next">
            <data type="boolean"/>
          </attribute>
        </optional>
        <optional>
          <attribute name="keep-lines-together">
            <data type="boolean"/>
          </attribute>
        </optional>
        <optional>
          <attribute name="class"/>
        </optional>
        <optional>
          <ref name="source"/>
        </optional>
        <optional>
          <ref name="tname"/>
        </optional>
        <choice>
          <ref name="image"/>
          <ref name="video"/>
          <ref name="audio"/>
          <ref name="pre"/>
          <oneOrMore>
            <ref name="paragraph-with-footnote"/>
          </oneOrMore>
          <zeroOrMore>
            <ref name="figure"/>
          </zeroOrMore>
        </choice>
        <zeroOrMore>
          <ref name="fn"/>
        </zeroOrMore>
        <optional>
          <ref name="dl"/>
        </optional>
        <zeroOrMore>
          <ref name="note"/>
        </zeroOrMore>
      </element>
    </define>
    <define name="sourcecode">
      <element name="sourcecode">
        <attribute name="id">
          <data type="ID"/>
        </attribute>
        <optional>
          <attribute name="unnumbered">
            <data type="boolean"/>
          </attribute>
        </optional>
        <optional>
          <attribute name="number"/>
        </optional>
        <optional>
          <attribute name="subsequence"/>
        </optional>
        <optional>
          <attribute name="keep-with-next">
            <data type="boolean"/>
          </attribute>
        </optional>
        <optional>
          <attribute name="keep-lines-together">
            <data type="boolean"/>
          </attribute>
        </optional>
        <optional>
          <attribute name="lang"/>
        </optional>
        <optional>
          <ref name="tname"/>
        </optional>
        <oneOrMore>
          <choice>
            <text/>
            <ref name="callout"/>
          </choice>
        </oneOrMore>
        <zeroOrMore>
          <ref name="annotation"/>
        </zeroOrMore>
        <zeroOrMore>
          <ref name="note"/>
        </zeroOrMore>
      </element>
    </define>
    <define name="formula">
      <element name="formula">
        <attribute name="id">
          <data type="ID"/>
        </attribute>
        <optional>
          <attribute name="unnumbered">
            <data type="boolean"/>
          </attribute>
        </optional>
        <optional>
          <attribute name="number"/>
        </optional>
        <optional>
          <attribute name="subsequence"/>
        </optional>
        <optional>
          <attribute name="keep-with-next">
            <data type="boolean"/>
          </attribute>
        </optional>
        <optional>
          <attribute name="keep-lines-together">
            <data type="boolean"/>
          </attribute>
        </optional>
        <optional>
          <attribute name="inequality">
            <data type="boolean"/>
          </attribute>
        </optional>
        <ref name="stem"/>
        <optional>
          <ref name="dl"/>
        </optional>
        <zeroOrMore>
          <ref name="note"/>
        </zeroOrMore>
      </element>
    </define>
    <define name="ParagraphType">
      <attribute name="id">
        <data type="ID"/>
      </attribute>
      <optional>
        <attribute name="align">
          <ref name="Alignments"/>
        </attribute>
      </optional>
      <optional>
        <attribute name="keep-with-next">
          <data type="boolean"/>
        </attribute>
      </optional>
      <optional>
        <attribute name="keep-lines-together">
          <data type="boolean"/>
        </attribute>
      </optional>
      <zeroOrMore>
        <ref name="TextElement"/>
      </zeroOrMore>
      <zeroOrMore>
        <ref name="note"/>
      </zeroOrMore>
    </define>
    <define name="paragraph-with-footnote">
      <element name="p">
        <attribute name="id">
          <data type="ID"/>
        </attribute>
        <optional>
          <attribute name="align">
            <ref name="Alignments"/>
          </attribute>
        </optional>
        <optional>
          <attribute name="keep-with-next">
            <data type="boolean"/>
          </attribute>
        </optional>
        <optional>
          <attribute name="keep-lines-together">
            <data type="boolean"/>
          </attribute>
        </optional>
        <zeroOrMore>
          <choice>
            <ref name="TextElement"/>
            <ref name="fn"/>
          </choice>
        </zeroOrMore>
        <zeroOrMore>
          <ref name="note"/>
        </zeroOrMore>
      </element>
    </define>
    <define name="quote">
      <element name="quote">
        <attribute name="id">
          <data type="ID"/>
        </attribute>
        <optional>
          <attribute name="alignment">
            <ref name="Alignments"/>
          </attribute>
        </optional>
        <optional>
          <attribute name="keep-with-next">
            <data type="boolean"/>
          </attribute>
        </optional>
        <optional>
          <attribute name="keep-lines-together">
            <data type="boolean"/>
          </attribute>
        </optional>
        <optional>
          <ref name="quote-source"/>
        </optional>
        <optional>
          <ref name="quote-author"/>
        </optional>
        <oneOrMore>
          <ref name="paragraph-with-footnote"/>
        </oneOrMore>
        <zeroOrMore>
          <ref name="note"/>
        </zeroOrMore>
      </element>
    </define>
    <define name="BibDataExtensionType">
      <ref name="doctype"/>
      <optional>
        <ref name="editorialgroup"/>
      </optional>
      <zeroOrMore>
        <ref name="ics"/>
      </zeroOrMore>
      <zeroOrMore>
        <ref name="structuredidentifier"/>
      </zeroOrMore>
    </define>
    <!-- TitleType = text -->
    <define name="sections">
      <element name="sections">
        <oneOrMore>
          <choice>
            <ref name="clause"/>
            <ref name="terms"/>
            <ref name="term-clause"/>
            <ref name="definitions"/>
          </choice>
        </oneOrMore>
      </element>
    </define>
    <define name="references">
      <element name="references">
        <optional>
          <attribute name="id">
            <data type="ID"/>
          </attribute>
        </optional>
        <optional>
          <attribute name="obligation">
            <choice>
              <value>normative</value>
              <value>informative</value>
            </choice>
          </attribute>
        </optional>
        <attribute name="normative">
          <data type="boolean"/>
        </attribute>
        <optional>
          <ref name="section-title"/>
        </optional>
        <zeroOrMore>
          <ref name="BasicBlock"/>
        </zeroOrMore>
        <zeroOrMore>
          <ref name="note"/>
        </zeroOrMore>
        <zeroOrMore>
          <ref name="bibitem"/>
          <zeroOrMore>
            <ref name="note"/>
          </zeroOrMore>
        </zeroOrMore>
        <zeroOrMore>
          <ref name="references"/>
        </zeroOrMore>
      </element>
    </define>
    <define name="note">
      <element name="note">
        <attribute name="id">
          <data type="ID"/>
        </attribute>
        <optional>
          <attribute name="unnumbered">
            <data type="boolean"/>
          </attribute>
        </optional>
        <optional>
          <attribute name="number"/>
        </optional>
        <optional>
          <attribute name="subsequence"/>
        </optional>
        <optional>
          <attribute name="keep-with-next">
            <data type="boolean"/>
          </attribute>
        </optional>
        <optional>
          <attribute name="keep-lines-together">
            <data type="boolean"/>
          </attribute>
        </optional>
        <optional>
          <attribute name="type"/>
        </optional>
        <oneOrMore>
          <choice>
            <ref name="paragraph"/>
            <ref name="ul"/>
            <ref name="ol"/>
            <ref name="dl"/>
            <ref name="formula"/>
            <ref name="quote"/>
            <ref name="sourcecode"/>
          </choice>
        </oneOrMore>
      </element>
    </define>
    <define name="Basic-Section">
      <optional>
        <attribute name="id">
          <data type="ID"/>
        </attribute>
      </optional>
      <optional>
        <attribute name="language"/>
      </optional>
      <optional>
        <attribute name="script"/>
      </optional>
      <optional>
        <attribute name="obligation">
          <choice>
            <value>normative</value>
            <value>informative</value>
          </choice>
        </attribute>
      </optional>
      <optional>
        <ref name="section-title"/>
      </optional>
      <group>
        <oneOrMore>
          <ref name="BasicBlock"/>
        </oneOrMore>
        <zeroOrMore>
          <ref name="note"/>
        </zeroOrMore>
      </group>
    </define>
    <define name="li">
      <element name="li">
        <group>
          <optional>
            <attribute name="id">
              <data type="ID"/>
            </attribute>
          </optional>
          <oneOrMore>
            <ref name="BasicBlock"/>
          </oneOrMore>
        </group>
        <!-- exclude figures? -->
      </element>
    </define>
    <define name="dd">
      <element name="dd">
        <zeroOrMore>
          <!-- exclude figures? -->
          <ref name="BasicBlock"/>
        </zeroOrMore>
      </element>
    </define>
    <define name="thead">
      <element name="thead">
        <oneOrMore>
          <ref name="tr"/>
        </oneOrMore>
      </element>
    </define>
    <define name="td">
      <element name="td">
        <optional>
          <attribute name="colspan"/>
        </optional>
        <optional>
          <attribute name="rowspan"/>
        </optional>
        <optional>
          <attribute name="align">
            <choice>
              <value>left</value>
              <value>right</value>
              <value>center</value>
            </choice>
          </attribute>
        </optional>
        <optional>
          <attribute name="valign">
            <choice>
              <value>top</value>
              <value>middle</value>
              <value>bottom</value>
              <value>baseline</value>
            </choice>
          </attribute>
        </optional>
        <choice>
          <zeroOrMore>
            <choice>
              <ref name="TextElement"/>
              <ref name="fn"/>
            </choice>
          </zeroOrMore>
          <oneOrMore>
            <choice>
              <ref name="paragraph-with-footnote"/>
              <ref name="dl"/>
              <ref name="ul"/>
              <ref name="ol"/>
              <ref name="figure"/>
            </choice>
          </oneOrMore>
        </choice>
      </element>
    </define>
    <define name="th">
      <element name="th">
        <optional>
          <attribute name="colspan"/>
        </optional>
        <optional>
          <attribute name="rowspan"/>
        </optional>
        <optional>
          <attribute name="align">
            <choice>
              <value>left</value>
              <value>right</value>
              <value>center</value>
            </choice>
          </attribute>
        </optional>
        <optional>
          <attribute name="valign">
            <choice>
              <value>top</value>
              <value>middle</value>
              <value>bottom</value>
              <value>baseline</value>
            </choice>
          </attribute>
        </optional>
        <choice>
          <zeroOrMore>
            <choice>
              <ref name="TextElement"/>
              <ref name="fn"/>
            </choice>
          </zeroOrMore>
          <oneOrMore>
            <ref name="paragraph-with-footnote"/>
          </oneOrMore>
        </choice>
      </element>
    </define>
    <define name="table-note">
      <element name="note">
        <optional>
          <attribute name="id">
            <data type="ID"/>
          </attribute>
        </optional>
        <ref name="paragraph"/>
      </element>
    </define>
  </include>
  <!-- end overrides -->
  <define name="TextElement" combine="choice">
    <ref name="concept"/>
  </define>
  <define name="concept">
    <element name="concept">
      <optional>
        <attribute name="term"/>
      </optional>
      <choice>
        <ref name="eref"/>
        <ref name="xref"/>
        <ref name="termref"/>
      </choice>
    </element>
  </define>
  <define name="BasicBlock" combine="choice">
    <choice>
      <ref name="requirement"/>
      <ref name="recommendation"/>
      <ref name="permission"/>
    </choice>
  </define>
  <define name="bibliography">
    <element name="bibliography">
      <oneOrMore>
        <choice>
          <ref name="references"/>
          <ref name="reference-clause"/>
        </choice>
      </oneOrMore>
    </element>
  </define>
  <define name="reference-clause">
    <element name="clause">
      <optional>
        <attribute name="id">
          <data type="ID"/>
        </attribute>
      </optional>
      <optional>
        <attribute name="language"/>
      </optional>
      <optional>
        <attribute name="script"/>
      </optional>
      <optional>
        <attribute name="inline-header">
          <data type="boolean"/>
        </attribute>
      </optional>
      <optional>
        <attribute name="obligation">
          <choice>
            <value>normative</value>
            <value>informative</value>
          </choice>
        </attribute>
      </optional>
      <optional>
        <ref name="section-title"/>
      </optional>
      <zeroOrMore>
        <ref name="BasicBlock"/>
      </zeroOrMore>
      <zeroOrMore>
        <ref name="note"/>
      </zeroOrMore>
      <choice>
        <oneOrMore>
          <ref name="reference-clause"/>
        </oneOrMore>
        <zeroOrMore>
          <ref name="references"/>
        </zeroOrMore>
      </choice>
    </element>
  </define>
  <define name="editorialgroup">
    <element name="editorialgroup">
      <oneOrMore>
        <ref name="technical-committee"/>
      </oneOrMore>
    </element>
  </define>
  <define name="technical-committee">
    <element name="technical-committee">
      <ref name="IsoWorkgroup"/>
    </element>
  </define>
  <define name="IsoWorkgroup">
    <optional>
      <attribute name="number">
        <data type="int"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="type"/>
    </optional>
    <text/>
  </define>
  <define name="ics">
    <element name="ics">
      <element name="code">
        <text/>
      </element>
      <element name="text">
        <text/>
      </element>
    </element>
  </define>
  <define name="standard-document">
    <element name="standard-document">
      <attribute name="version"/>
      <attribute name="type">
        <choice>
          <value>semantic</value>
          <value>presentation</value>
        </choice>
      </attribute>
      <ref name="bibdata"/>
      <optional>
        <ref name="boilerplate"/>
      </optional>
      <optional>
        <ref name="preface"/>
      </optional>
      <ref name="sections"/>
      <zeroOrMore>
        <ref name="annex"/>
      </zeroOrMore>
      <zeroOrMore>
        <ref name="references"/>
      </zeroOrMore>
    </element>
  </define>
  <define name="preface">
    <element name="preface">
      <oneOrMore>
        <choice>
          <ref name="content"/>
          <ref name="abstract"/>
          <ref name="foreword"/>
          <ref name="introduction"/>
          <ref name="acknowledgements"/>
        </choice>
      </oneOrMore>
    </element>
  </define>
  <define name="foreword">
    <element name="foreword">
      <ref name="Content-Section"/>
    </element>
  </define>
  <define name="introduction">
    <element name="introduction">
      <ref name="Content-Section"/>
    </element>
  </define>
  <define name="boilerplate">
    <element name="boilerplate">
      <optional>
        <ref name="copyright-statement"/>
      </optional>
      <optional>
        <ref name="license-statement"/>
      </optional>
      <optional>
        <ref name="legal-statement"/>
      </optional>
      <optional>
        <ref name="feedback-statement"/>
      </optional>
    </element>
  </define>
  <define name="copyright-statement">
    <element name="copyright-statement">
      <ref name="Content-Section"/>
    </element>
  </define>
  <define name="license-statement">
    <element name="license-statement">
      <ref name="Content-Section"/>
    </element>
  </define>
  <define name="legal-statement">
    <element name="legal-statement">
      <ref name="Content-Section"/>
    </element>
  </define>
  <define name="feedback-statement">
    <element name="feedback-statement">
      <ref name="Content-Section"/>
    </element>
  </define>
  <define name="definitions">
    <element name="definitions">
      <optional>
        <attribute name="id">
          <data type="ID"/>
        </attribute>
      </optional>
      <optional>
        <attribute name="language"/>
      </optional>
      <optional>
        <attribute name="script"/>
      </optional>
      <optional>
        <attribute name="type"/>
      </optional>
      <optional>
        <attribute name="obligation">
          <choice>
            <value>normative</value>
            <value>informative</value>
          </choice>
        </attribute>
      </optional>
      <optional>
        <ref name="section-title"/>
      </optional>
      <oneOrMore>
        <zeroOrMore>
          <ref name="BasicBlock"/>
        </zeroOrMore>
        <zeroOrMore>
          <ref name="note"/>
        </zeroOrMore>
        <ref name="dl"/>
      </oneOrMore>
    </element>
  </define>
  <define name="content">
    <element name="clause">
      <ref name="Content-Section"/>
    </element>
  </define>
  <define name="abstract">
    <element name="abstract">
      <ref name="Content-Section"/>
    </element>
  </define>
  <define name="acknowledgements">
    <element name="acknowledgements">
      <ref name="Content-Section"/>
    </element>
  </define>
  <define name="content-subsection">
    <element name="clause">
      <ref name="Content-Section"/>
    </element>
  </define>
  <define name="Content-Section">
    <optional>
      <attribute name="id">
        <data type="ID"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="language"/>
    </optional>
    <optional>
      <attribute name="script"/>
    </optional>
    <optional>
      <attribute name="inline-header">
        <data type="boolean"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="obligation">
        <choice>
          <value>normative</value>
          <value>informative</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="type"/>
    </optional>
    <optional>
      <ref name="section-title"/>
    </optional>
    <group>
      <group>
        <zeroOrMore>
          <ref name="BasicBlock"/>
        </zeroOrMore>
        <zeroOrMore>
          <ref name="note"/>
        </zeroOrMore>
      </group>
      <zeroOrMore>
        <ref name="content-subsection"/>
      </zeroOrMore>
    </group>
  </define>
  <define name="clause">
    <element name="clause">
      <ref name="Clause-Section"/>
    </element>
  </define>
  <define name="Clause-Section">
    <optional>
      <attribute name="id">
        <data type="ID"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="language"/>
    </optional>
    <optional>
      <attribute name="script"/>
    </optional>
    <optional>
      <attribute name="inline-header">
        <data type="boolean"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="obligation">
        <choice>
          <value>normative</value>
          <value>informative</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="type"/>
    </optional>
    <optional>
      <ref name="section-title"/>
    </optional>
    <group>
      <choice>
        <group>
          <zeroOrMore>
            <ref name="BasicBlock"/>
          </zeroOrMore>
          <zeroOrMore>
            <ref name="note"/>
          </zeroOrMore>
        </group>
        <ref name="amend"/>
      </choice>
      <zeroOrMore>
        <choice>
          <ref name="clause-subsection"/>
          <ref name="terms"/>
          <ref name="definitions"/>
        </choice>
      </zeroOrMore>
    </group>
  </define>
  <define name="Annex-Section">
    <optional>
      <attribute name="id">
        <data type="ID"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="language"/>
    </optional>
    <optional>
      <attribute name="script"/>
    </optional>
    <optional>
      <attribute name="inline-header">
        <data type="boolean"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="obligation">
        <choice>
          <value>normative</value>
          <value>informative</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <ref name="section-title"/>
    </optional>
    <group>
      <group>
        <zeroOrMore>
          <ref name="BasicBlock"/>
        </zeroOrMore>
        <zeroOrMore>
          <ref name="note"/>
        </zeroOrMore>
      </group>
      <zeroOrMore>
        <choice>
          <ref name="annex-subsection"/>
          <ref name="terms"/>
          <ref name="definitions"/>
          <ref name="references"/>
        </choice>
      </zeroOrMore>
    </group>
  </define>
  <define name="clause-subsection">
    <element name="clause">
      <ref name="Clause-Section"/>
    </element>
  </define>
  <define name="annex-subsection">
    <element name="clause">
      <ref name="Annex-Section"/>
    </element>
  </define>
  <define name="annex">
    <element name="annex">
      <ref name="Annex-Section"/>
    </element>
  </define>
  <define name="terms">
    <element name="terms">
      <optional>
        <attribute name="id">
          <data type="ID"/>
        </attribute>
      </optional>
      <optional>
        <attribute name="language"/>
      </optional>
      <optional>
        <attribute name="script"/>
      </optional>
      <optional>
        <attribute name="type"/>
      </optional>
      <optional>
        <attribute name="obligation">
          <choice>
            <value>normative</value>
            <value>informative</value>
          </choice>
        </attribute>
      </optional>
      <optional>
        <ref name="section-title"/>
      </optional>
      <zeroOrMore>
        <ref name="BasicBlock"/>
      </zeroOrMore>
      <zeroOrMore>
        <ref name="note"/>
      </zeroOrMore>
      <choice>
        <oneOrMore>
          <ref name="term"/>
        </oneOrMore>
        <group>
          <zeroOrMore>
            <ref name="terms"/>
          </zeroOrMore>
          <optional>
            <ref name="definitions"/>
          </optional>
        </group>
      </choice>
    </element>
  </define>
  <define name="term">
    <element name="term">
      <optional>
        <attribute name="id">
          <data type="ID"/>
        </attribute>
      </optional>
      <oneOrMore>
        <ref name="preferred"/>
      </oneOrMore>
      <zeroOrMore>
        <ref name="admitted"/>
      </zeroOrMore>
      <zeroOrMore>
        <ref name="related"/>
      </zeroOrMore>
      <zeroOrMore>
        <ref name="deprecates"/>
      </zeroOrMore>
      <optional>
        <ref name="termdomain"/>
      </optional>
      <zeroOrMore>
        <ref name="termgrammar"/>
      </zeroOrMore>
      <ref name="definition"/>
      <zeroOrMore>
        <ref name="termnote"/>
      </zeroOrMore>
      <zeroOrMore>
        <ref name="termexample"/>
      </zeroOrMore>
      <zeroOrMore>
        <ref name="termsource"/>
      </zeroOrMore>
    </element>
  </define>
  <define name="preferred">
    <element name="preferred">
      <oneOrMore>
        <ref name="TextElement"/>
      </oneOrMore>
    </element>
  </define>
  <define name="admitted">
    <element name="admitted">
      <oneOrMore>
        <ref name="TextElement"/>
      </oneOrMore>
    </element>
  </define>
  <define name="related">
    <element name="related">
      <optional>
        <attribute name="type">
          <choice>
            <value>compare</value>
            <value>contrast</value>
            <value>see</value>
          </choice>
        </attribute>
      </optional>
      <oneOrMore>
        <ref name="TextElement"/>
      </oneOrMore>
    </element>
  </define>
  <define name="deprecates">
    <element name="deprecates">
      <oneOrMore>
        <ref name="TextElement"/>
      </oneOrMore>
    </element>
  </define>
  <define name="termdomain">
    <element name="domain">
      <oneOrMore>
        <ref name="TextElement"/>
      </oneOrMore>
    </element>
  </define>
  <define name="termgrammar">
    <element name="grammar">
      <oneOrMore>
        <ref name="TextElement"/>
      </oneOrMore>
    </element>
  </define>
  <define name="definition">
    <element name="definition">
      <oneOrMore>
        <choice>
          <ref name="paragraph"/>
          <ref name="figure"/>
          <ref name="formula"/>
        </choice>
      </oneOrMore>
    </element>
  </define>
  <define name="termnote">
    <element name="termnote">
      <attribute name="id">
        <data type="ID"/>
      </attribute>
      <optional>
        <attribute name="unnumbered">
          <data type="boolean"/>
        </attribute>
      </optional>
      <optional>
        <attribute name="number"/>
      </optional>
      <optional>
        <attribute name="subsequence"/>
      </optional>
      <optional>
        <attribute name="keep-with-next">
          <data type="boolean"/>
        </attribute>
      </optional>
      <optional>
        <attribute name="keep-lines-together">
          <data type="boolean"/>
        </attribute>
      </optional>
      <oneOrMore>
        <choice>
          <ref name="paragraph"/>
          <ref name="ul"/>
          <ref name="ol"/>
          <ref name="dl"/>
          <ref name="formula"/>
        </choice>
      </oneOrMore>
    </element>
  </define>
  <define name="termexample">
    <element name="termexample">
      <attribute name="id">
        <data type="ID"/>
      </attribute>
      <ref name="paragraph"/>
    </element>
  </define>
  <define name="termsource">
    <element name="termsource">
      <attribute name="status">
        <choice>
          <value>identical</value>
          <value>modified</value>
        </choice>
      </attribute>
      <ref name="origin"/>
      <optional>
        <ref name="modification"/>
      </optional>
    </element>
  </define>
  <define name="origin">
    <element name="origin">
      <choice>
        <ref name="erefType"/>
        <ref name="termref"/>
      </choice>
    </element>
  </define>
  <define name="modification">
    <element name="modification">
      <ref name="paragraph"/>
    </element>
  </define>
  <define name="termref">
    <element name="termref">
      <attribute name="base"/>
      <attribute name="target"/>
      <optional>
        <text/>
      </optional>
    </element>
  </define>
  <define name="structuredidentifier">
    <element name="structuredidentifier">
      <optional>
        <attribute name="type"/>
      </optional>
      <oneOrMore>
        <element name="agency">
          <text/>
        </element>
      </oneOrMore>
      <optional>
        <element name="class">
          <text/>
        </element>
      </optional>
      <element name="docnumber">
        <text/>
      </element>
      <optional>
        <element name="partnumber">
          <text/>
        </element>
      </optional>
      <optional>
        <element name="edition">
          <text/>
        </element>
      </optional>
      <optional>
        <element name="version">
          <text/>
        </element>
      </optional>
      <optional>
        <element name="supplementtype">
          <text/>
        </element>
      </optional>
      <optional>
        <element name="supplementnumber">
          <text/>
        </element>
      </optional>
      <optional>
        <element name="language">
          <text/>
        </element>
      </optional>
      <optional>
        <element name="year">
          <text/>
        </element>
      </optional>
    </element>
  </define>
  <define name="term-clause">
    <element name="clause">
      <optional>
        <attribute name="id">
          <data type="ID"/>
        </attribute>
      </optional>
      <optional>
        <attribute name="language"/>
      </optional>
      <optional>
        <attribute name="script"/>
      </optional>
      <optional>
        <attribute name="inline-header">
          <data type="boolean"/>
        </attribute>
      </optional>
      <optional>
        <attribute name="obligation">
          <choice>
            <value>normative</value>
            <value>informative</value>
          </choice>
        </attribute>
      </optional>
      <optional>
        <ref name="section-title"/>
      </optional>
      <zeroOrMore>
        <ref name="BasicBlock"/>
      </zeroOrMore>
      <zeroOrMore>
        <ref name="note"/>
      </zeroOrMore>
      <zeroOrMore>
        <choice>
          <ref name="term-clause"/>
          <ref name="terms"/>
          <ref name="definitions"/>
        </choice>
      </zeroOrMore>
    </element>
  </define>
  <define name="termdocsource">
    <element name="termdocsource">
      <ref name="CitationType"/>
    </element>
  </define>
  <define name="amend">
    <element name="amend">
      <optional>
        <attribute name="id">
          <data type="ID"/>
        </attribute>
      </optional>
      <attribute name="change">
        <choice>
          <value>add</value>
          <value>modify</value>
          <value>delete</value>
        </choice>
      </attribute>
      <optional>
        <attribute name="path"/>
      </optional>
      <optional>
        <attribute name="path_end"/>
      </optional>
      <optional>
        <attribute name="title"/>
      </optional>
      <optional>
        <element name="location">
          <zeroOrMore>
            <ref name="locality"/>
          </zeroOrMore>
        </element>
      </optional>
      <zeroOrMore>
        <ref name="autonumber"/>
      </zeroOrMore>
      <optional>
        <element name="description">
          <zeroOrMore>
            <ref name="BasicBlock"/>
          </zeroOrMore>
        </element>
      </optional>
      <optional>
        <element name="newcontent">
          <zeroOrMore>
            <ref name="BasicBlock"/>
          </zeroOrMore>
        </element>
      </optional>
      <optional>
        <element name="description">
          <zeroOrMore>
            <ref name="BasicBlock"/>
          </zeroOrMore>
        </element>
      </optional>
    </element>
  </define>
  <define name="autonumber">
    <element name="autonumber">
      <attribute name="type">
        <choice>
          <value>requirement</value>
          <value>recommendation</value>
          <value>permission</value>
          <value>table</value>
          <value>figure</value>
          <value>admonition</value>
          <value>formula</value>
          <value>sourcecode</value>
          <value>example</value>
          <value>note</value>
        </choice>
      </attribute>
      <text/>
    </element>
  </define>
</grammar>