metanorma/metanorma-ietf

View on GitHub
lib/metanorma/ietf/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.
-->
<!-- VERSION v1.3.2 -->
<grammar xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
  <include href="reqt.rng"/>
  <include href="basicdoc.rng">
    <define name="amend">
      <element name="amend">
        <ref name="BlockAttributes"/>
        <ref name="AmendType"/>
        <zeroOrMore>
          <ref name="autonumber"/>
        </zeroOrMore>
      </element>
    </define>
    <define name="AdmonitionAttr">
      <attribute name="type">
        <ref name="AdmonitionType"/>
      </attribute>
      <optional>
        <attribute name="class"/>
      </optional>
      <optional>
        <attribute name="uri">
          <data type="anyURI"/>
        </attribute>
      </optional>
      <optional>
        <attribute name="coverpage">
          <data type="boolean"/>
        </attribute>
      </optional>
      <optional>
        <attribute name="notag">
          <data type="boolean"/>
        </attribute>
      </optional>
    </define>
    <define name="AdmonitionType">
      <choice>
        <value>warning</value>
        <value>note</value>
        <value>tip</value>
        <value>important</value>
        <value>caution</value>
        <value>statement</value>
        <value>editorial</value>
        <value>box</value>
      </choice>
    </define>
    <define name="index">
      <element name="index">
        <optional>
          <attribute name="to">
            <data type="IDREF"/>
          </attribute>
        </optional>
        <element name="primary">
          <oneOrMore>
            <choice>
              <ref name="PureTextElement"/>
              <ref name="stem"/>
            </choice>
          </oneOrMore>
        </element>
        <optional>
          <element name="secondary">
            <oneOrMore>
              <choice>
                <ref name="PureTextElement"/>
                <ref name="stem"/>
              </choice>
            </oneOrMore>
          </element>
        </optional>
        <optional>
          <element name="tertiary">
            <oneOrMore>
              <choice>
                <ref name="PureTextElement"/>
                <ref name="stem"/>
              </choice>
            </oneOrMore>
          </element>
        </optional>
      </element>
    </define>
    <define name="section-title">
      <element name="title">
        <zeroOrMore>
          <ref name="TextElement"/>
        </zeroOrMore>
      </element>
      <zeroOrMore>
        <element name="variant-title">
          <ref name="TypedTitleString"/>
        </element>
      </zeroOrMore>
    </define>
    <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>
        <optional>
          <attribute name="update-type">
            <data type="boolean"/>
          </attribute>
        </optional>
        <optional>
          <attribute name="style"/>
        </optional>
        <oneOrMore>
          <ref name="PureTextElement"/>
        </oneOrMore>
      </element>
    </define>
    <define name="xref">
      <element name="xref">
        <ref name="XrefAttributes"/>
        <ref name="XrefBody"/>
      </element>
    </define>
    <define name="erefType">
      <optional>
        <attribute name="normative">
          <data type="boolean"/>
        </attribute>
      </optional>
      <attribute name="citeas"/>
      <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>
      <optional>
        <attribute name="style"/>
      </optional>
      <ref name="CitationType"/>
      <oneOrMore>
        <ref name="PureTextElement"/>
      </oneOrMore>
    </define>
    <define name="UlAttr">
      <ref name="BlockAttributes"/>
    </define>
    <define name="UlBody">
      <optional>
        <ref name="tname"/>
      </optional>
      <oneOrMore>
        <ref name="ul_li"/>
      </oneOrMore>
      <zeroOrMore>
        <ref name="note"/>
      </zeroOrMore>
    </define>
    <define name="OlBody">
      <optional>
        <ref name="tname"/>
      </optional>
      <oneOrMore>
        <ref name="li"/>
      </oneOrMore>
      <zeroOrMore>
        <ref name="note"/>
      </zeroOrMore>
    </define>
    <define name="OlAttr">
      <ref name="BlockAttributes"/>
      <optional>
        <attribute name="type">
          <choice>
            <value>roman</value>
            <value>alphabet</value>
            <value>arabic</value>
            <value>roman_upper</value>
            <value>alphabet_upper</value>
          </choice>
        </attribute>
      </optional>
    </define>
    <define name="DlAttr">
      <ref name="BlockAttributes"/>
      <optional>
        <attribute name="key">
          <data type="boolean"/>
        </attribute>
      </optional>
    </define>
    <define name="DlBody">
      <optional>
        <ref name="tname"/>
      </optional>
      <oneOrMore>
        <ref name="dt"/>
        <ref name="dd"/>
      </oneOrMore>
      <zeroOrMore>
        <ref name="note"/>
      </zeroOrMore>
    </define>
    <define name="dt">
      <element name="dt">
        <ref name="OptionalId"/>
        <zeroOrMore>
          <ref name="TextElement"/>
        </zeroOrMore>
      </element>
    </define>
    <define name="ExampleAttr">
      <optional>
        <attribute name="unnumbered">
          <data type="boolean"/>
        </attribute>
      </optional>
      <optional>
        <attribute name="subsequence"/>
      </optional>
      <optional>
        <attribute name="number"/>
      </optional>
      <ref name="BlockAttributes"/>
    </define>
    <define name="ExampleBody">
      <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>
    </define>
    <define name="TableAttr">
      <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="width"/>
      </optional>
      <ref name="BlockAttributes"/>
    </define>
    <define name="TableBody">
      <optional>
        <ref name="colgroup"/>
      </optional>
      <optional>
        <ref name="tname"/>
      </optional>
      <optional>
        <ref name="thead"/>
      </optional>
      <ref name="tbody"/>
      <optional>
        <ref name="tfoot"/>
      </optional>
      <optional>
        <ref name="dl"/>
      </optional>
      <zeroOrMore>
        <ref name="table-note"/>
      </zeroOrMore>
      <optional>
        <ref name="source"/>
      </optional>
    </define>
    <define name="FigureAttr">
      <optional>
        <attribute name="unnumbered">
          <data type="boolean"/>
        </attribute>
      </optional>
      <optional>
        <attribute name="number"/>
      </optional>
      <optional>
        <attribute name="subsequence"/>
      </optional>
      <optional>
        <attribute name="class"/>
      </optional>
      <optional>
        <attribute name="width"/>
      </optional>
      <ref name="BlockAttributes"/>
    </define>
    <define name="FigureBody">
      <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>
      <optional>
        <ref name="source"/>
      </optional>
    </define>
    <define name="source">
      <element name="source">
        <attribute name="status">
          <ref name="SourceStatusType"/>
        </attribute>
        <ref name="origin"/>
        <optional>
          <ref name="modification"/>
        </optional>
      </element>
    </define>
    <define name="SourceAttr">
      <optional>
        <attribute name="unnumbered">
          <data type="boolean"/>
        </attribute>
      </optional>
      <optional>
        <attribute name="number"/>
      </optional>
      <optional>
        <attribute name="subsequence"/>
      </optional>
      <optional>
        <attribute name="lang"/>
      </optional>
      <ref name="BlockAttributes"/>
      <optional>
        <attribute name="linenums">
          <data type="boolean"/>
        </attribute>
      </optional>
    </define>
    <define name="SourceBody">
      <optional>
        <ref name="tname"/>
      </optional>
      <oneOrMore>
        <choice>
          <text/>
          <ref name="callout"/>
          <ref name="xref"/>
          <ref name="eref"/>
        </choice>
      </oneOrMore>
      <zeroOrMore>
        <ref name="annotation"/>
      </zeroOrMore>
      <zeroOrMore>
        <ref name="note"/>
      </zeroOrMore>
    </define>
    <define name="FormulaAttr">
      <optional>
        <attribute name="unnumbered">
          <data type="boolean"/>
        </attribute>
      </optional>
      <optional>
        <attribute name="number"/>
      </optional>
      <optional>
        <attribute name="subsequence"/>
      </optional>
      <optional>
        <attribute name="inequality">
          <data type="boolean"/>
        </attribute>
      </optional>
      <ref name="BlockAttributes"/>
    </define>
    <define name="ParagraphAttrs">
      <optional>
        <attribute name="align">
          <ref name="Alignments"/>
        </attribute>
      </optional>
      <optional>
        <attribute name="type"/>
      </optional>
      <ref name="BlockAttributes"/>
    </define>
    <define name="QuoteAttr">
      <optional>
        <attribute name="alignment">
          <ref name="Alignments"/>
        </attribute>
      </optional>
      <ref name="BlockAttributes"/>
    </define>
    <!-- TitleType = text -->
    <define name="sections">
      <element name="sections">
        <oneOrMore>
          <choice>
            <ref name="clause"/>
            <ref name="terms"/>
            <ref name="term-clause"/>
            <ref name="definitions"/>
            <ref name="floating-title"/>
          </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="doc_bibitem"/>
          <zeroOrMore>
            <ref name="note"/>
          </zeroOrMore>
        </zeroOrMore>
        <zeroOrMore>
          <ref name="references"/>
        </zeroOrMore>
      </element>
    </define>
    <define name="NoteAttr">
      <optional>
        <attribute name="unnumbered">
          <data type="boolean"/>
        </attribute>
      </optional>
      <optional>
        <attribute name="number"/>
      </optional>
      <optional>
        <attribute name="subsequence"/>
      </optional>
      <optional>
        <attribute name="type"/>
      </optional>
      <optional>
        <attribute name="coverpage">
          <data type="boolean"/>
        </attribute>
      </optional>
      <optional>
        <attribute name="notag">
          <data type="boolean"/>
        </attribute>
      </optional>
      <ref name="BlockAttributes"/>
    </define>
    <define name="NoteBody">
      <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>
    </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>
      <oneOrMore>
        <ref name="BasicBlock"/>
      </oneOrMore>
    </define>
    <define name="LiBody">
      <oneOrMore>
        <ref name="BasicBlock"/>
      </oneOrMore>
    </define>
    <!-- exclude figures? -->
    <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="TdBody">
      <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>
    </define>
    <define name="ThBody">
      <choice>
        <zeroOrMore>
          <choice>
            <ref name="TextElement"/>
            <ref name="fn"/>
          </choice>
        </zeroOrMore>
        <oneOrMore>
          <ref name="paragraph-with-footnote"/>
        </oneOrMore>
      </choice>
    </define>
    <define name="table-note">
      <element name="note">
        <optional>
          <attribute name="id">
            <data type="ID"/>
          </attribute>
        </optional>
        <ref name="paragraph"/>
      </element>
    </define>
    <define name="stem">
      <element name="stem">
        <attribute name="type">
          <choice>
            <value>MathML</value>
            <value>AsciiMath</value>
            <value>LatexMath</value>
          </choice>
        </attribute>
        <attribute name="block">
          <data type="boolean"/>
        </attribute>
        <oneOrMore>
          <choice>
            <text/>
            <ref name="AnyElement"/>
          </choice>
        </oneOrMore>
      </element>
    </define>
    <define name="em">
      <element name="em">
        <zeroOrMore>
          <choice>
            <ref name="PureTextElement"/>
            <ref name="stem"/>
            <ref name="index"/>
            <ref name="index-xref"/>
            <ref name="eref"/>
            <ref name="erefstack"/>
            <ref name="xref"/>
            <ref name="hyperlink"/>
          </choice>
        </zeroOrMore>
      </element>
    </define>
    <define name="strong">
      <element name="strong">
        <zeroOrMore>
          <choice>
            <ref name="PureTextElement"/>
            <ref name="stem"/>
            <ref name="index"/>
            <ref name="index-xref"/>
            <ref name="eref"/>
            <ref name="erefstack"/>
            <ref name="xref"/>
            <ref name="hyperlink"/>
          </choice>
        </zeroOrMore>
      </element>
    </define>
    <define name="tt">
      <element name="tt">
        <zeroOrMore>
          <choice>
            <ref name="PureTextElement"/>
            <ref name="index"/>
            <ref name="index-xref"/>
            <ref name="eref"/>
            <ref name="erefstack"/>
            <ref name="xref"/>
            <ref name="hyperlink"/>
          </choice>
        </zeroOrMore>
      </element>
    </define>
    <define name="keyword">
      <element name="keyword">
        <zeroOrMore>
          <choice>
            <ref name="PureTextElement"/>
            <ref name="index"/>
            <ref name="index-xref"/>
          </choice>
        </zeroOrMore>
      </element>
    </define>
    <define name="strike">
      <element name="strike">
        <zeroOrMore>
          <choice>
            <ref name="PureTextElement"/>
            <ref name="index"/>
            <ref name="index-xref"/>
          </choice>
        </zeroOrMore>
      </element>
    </define>
    <define name="underline">
      <element name="underline">
        <zeroOrMore>
          <choice>
            <ref name="PureTextElement"/>
            <ref name="index"/>
            <ref name="index-xref"/>
          </choice>
        </zeroOrMore>
      </element>
    </define>
    <define name="smallcap">
      <element name="smallcap">
        <zeroOrMore>
          <choice>
            <ref name="PureTextElement"/>
            <ref name="index"/>
            <ref name="index-xref"/>
          </choice>
        </zeroOrMore>
      </element>
    </define>
    <define name="sub">
      <element name="sub">
        <zeroOrMore>
          <choice>
            <ref name="PureTextElement"/>
            <ref name="stem"/>
          </choice>
        </zeroOrMore>
      </element>
    </define>
    <define name="sup">
      <element name="sup">
        <zeroOrMore>
          <choice>
            <ref name="PureTextElement"/>
            <ref name="stem"/>
          </choice>
        </zeroOrMore>
      </element>
    </define>
    <define name="pagebreak">
      <element name="pagebreak">
        <optional>
          <attribute name="orientation">
            <choice>
              <value>landscape</value>
              <value>portrait</value>
            </choice>
          </attribute>
        </optional>
      </element>
    </define>
  </include>
  <!-- end overrides -->
  <define name="doc_bibitem">
    <element name="bibitem">
      <attribute name="id">
        <data type="ID"/>
      </attribute>
      <optional>
        <attribute name="hidden">
          <data type="boolean"/>
        </attribute>
      </optional>
      <optional>
        <attribute name="suppress_identifier">
          <data type="boolean"/>
        </attribute>
      </optional>
      <ref name="ReducedBibliographicItem"/>
    </element>
  </define>
  <define name="image" combine="choice">
    <element name="svg">
      <oneOrMore>
        <choice>
          <text/>
          <ref name="AnyElement"/>
        </choice>
      </oneOrMore>
    </element>
  </define>
  <define name="BasicBlock" combine="choice">
    <ref name="columnbreak"/>
  </define>
  <define name="columnbreak">
    <element name="columnbreak">
      <empty/>
    </element>
  </define>
  <define name="MultilingualRenderingType">
    <choice>
      <value>common</value>
      <value>all-columns</value>
      <value>parallel</value>
      <value>tag</value>
    </choice>
  </define>
  <define name="colgroup">
    <element name="colgroup">
      <oneOrMore>
        <ref name="col"/>
      </oneOrMore>
    </element>
  </define>
  <define name="col">
    <element name="col">
      <attribute name="width"/>
    </element>
  </define>
  <define name="BibItemType" combine="choice">
    <value>internal</value>
  </define>
  <define name="TextElement" combine="choice">
    <choice>
      <ref name="concept"/>
      <ref name="add"/>
      <ref name="del"/>
      <ref name="span"/>
      <ref name="erefstack"/>
      <ref name="date_inline"/>
    </choice>
  </define>
  <define name="PureTextElement" combine="choice">
    <ref name="passthrough_inline"/>
  </define>
  <define name="passthrough_inline">
    <element name="passthrough">
      <optional>
        <attribute name="formats"/>
      </optional>
      <text/>
    </element>
  </define>
  <define name="add">
    <element name="add">
      <choice>
        <ref name="PureTextElement"/>
        <ref name="eref"/>
        <ref name="erefstack"/>
        <ref name="stem"/>
        <ref name="keyword"/>
        <ref name="xref"/>
        <ref name="hyperlink"/>
        <ref name="index"/>
        <ref name="index-xref"/>
      </choice>
    </element>
  </define>
  <define name="del">
    <element name="del">
      <choice>
        <ref name="PureTextElement"/>
        <ref name="eref"/>
        <ref name="erefstack"/>
        <ref name="stem"/>
        <ref name="keyword"/>
        <ref name="xref"/>
        <ref name="hyperlink"/>
        <ref name="index"/>
        <ref name="index-xref"/>
      </choice>
    </element>
  </define>
  <define name="span">
    <element name="span">
      <optional>
        <attribute name="class"/>
      </optional>
      <optional>
        <attribute name="style"/>
      </optional>
      <optional>
        <attribute name="custom-charset"/>
      </optional>
      <oneOrMore>
        <ref name="TextElement"/>
      </oneOrMore>
    </element>
  </define>
  <define name="date_inline">
    <element name="date">
      <attribute name="value"/>
      <optional>
        <attribute name="format"/>
      </optional>
      <optional>
        <attribute name="language"/>
      </optional>
      <optional>
        <attribute name="script"/>
      </optional>
      <optional>
        <attribute name="locale"/>
      </optional>
    </element>
  </define>
  <define name="concept">
    <element name="concept">
      <optional>
        <attribute name="bold">
          <data type="boolean"/>
        </attribute>
      </optional>
      <optional>
        <attribute name="ital">
          <data type="boolean"/>
        </attribute>
      </optional>
      <optional>
        <attribute name="ref">
          <data type="boolean"/>
        </attribute>
      </optional>
      <optional>
        <attribute name="linkmention">
          <data type="boolean"/>
        </attribute>
      </optional>
      <optional>
        <attribute name="linkref">
          <data type="boolean"/>
        </attribute>
      </optional>
      <optional>
        <element name="refterm">
          <zeroOrMore>
            <choice>
              <ref name="PureTextElement"/>
              <ref name="stem"/>
              <ref name="index"/>
              <ref name="index-xref"/>
            </choice>
          </zeroOrMore>
        </element>
      </optional>
      <optional>
        <element name="renderterm">
          <zeroOrMore>
            <choice>
              <ref name="PureTextElement"/>
              <ref name="stem"/>
              <ref name="index"/>
              <ref name="index-xref"/>
            </choice>
          </zeroOrMore>
        </element>
      </optional>
      <choice>
        <ref name="eref"/>
        <ref name="erefstack"/>
        <ref name="xref"/>
        <ref name="termref"/>
      </choice>
    </element>
  </define>
  <define name="BasicBlock" combine="choice">
    <choice>
      <ref name="requirement"/>
      <ref name="recommendation"/>
      <ref name="permission"/>
      <ref name="imagemap"/>
      <ref name="svgmap"/>
      <ref name="inputform"/>
      <ref name="toc"/>
      <ref name="passthrough"/>
    </choice>
  </define>
  <define name="toc">
    <element name="toc">
      <ref name="ul"/>
    </element>
  </define>
  <define name="passthrough">
    <element name="passthrough">
      <optional>
        <attribute name="formats"/>
      </optional>
      <text/>
    </element>
  </define>
  <define name="inputform">
    <element name="form">
      <attribute name="id">
        <data type="ID"/>
      </attribute>
      <attribute name="name"/>
      <attribute name="action"/>
      <optional>
        <attribute name="class"/>
      </optional>
      <ref name="BlockAttributes"/>
      <zeroOrMore>
        <choice>
          <ref name="TextElement"/>
          <ref name="FormInput"/>
        </choice>
      </zeroOrMore>
    </element>
  </define>
  <define name="FormInput">
    <choice>
      <ref name="input"/>
      <ref name="formlabel"/>
      <ref name="select"/>
      <ref name="textarea"/>
    </choice>
  </define>
  <define name="InputType">
    <choice>
      <value>button</value>
      <value>checkbox</value>
      <value>date</value>
      <value>file</value>
      <value>password</value>
      <value>radio</value>
      <value>submit</value>
      <value>text</value>
    </choice>
  </define>
  <define name="input">
    <element name="input">
      <attribute name="type">
        <ref name="InputType"/>
      </attribute>
      <optional>
        <attribute name="checked">
          <data type="boolean"/>
        </attribute>
      </optional>
      <optional>
        <attribute name="disabled">
          <data type="boolean"/>
        </attribute>
      </optional>
      <optional>
        <attribute name="readonly">
          <data type="boolean"/>
        </attribute>
      </optional>
      <optional>
        <attribute name="maxlength">
          <data type="int"/>
        </attribute>
      </optional>
      <optional>
        <attribute name="minlength">
          <data type="int"/>
        </attribute>
      </optional>
      <optional>
        <attribute name="name"/>
      </optional>
      <optional>
        <attribute name="value"/>
      </optional>
      <optional>
        <attribute name="id">
          <data type="ID"/>
        </attribute>
      </optional>
    </element>
  </define>
  <define name="formlabel">
    <element name="label">
      <attribute name="for">
        <data type="IDREF"/>
      </attribute>
      <zeroOrMore>
        <ref name="PureTextElement"/>
      </zeroOrMore>
    </element>
  </define>
  <define name="select">
    <element name="select">
      <optional>
        <attribute name="name"/>
      </optional>
      <optional>
        <attribute name="value"/>
      </optional>
      <optional>
        <attribute name="id">
          <data type="ID"/>
        </attribute>
      </optional>
      <optional>
        <attribute name="disabled">
          <data type="boolean"/>
        </attribute>
      </optional>
      <optional>
        <attribute name="multiple">
          <data type="boolean"/>
        </attribute>
      </optional>
      <optional>
        <attribute name="size">
          <data type="int"/>
        </attribute>
      </optional>
      <oneOrMore>
        <ref name="option"/>
      </oneOrMore>
    </element>
  </define>
  <define name="option">
    <element name="option">
      <optional>
        <attribute name="disabled">
          <data type="boolean"/>
        </attribute>
      </optional>
      <optional>
        <attribute name="value"/>
      </optional>
      <zeroOrMore>
        <ref name="PureTextElement"/>
      </zeroOrMore>
    </element>
  </define>
  <define name="textarea">
    <element name="textarea">
      <optional>
        <attribute name="name"/>
      </optional>
      <optional>
        <attribute name="value"/>
      </optional>
      <optional>
        <attribute name="id">
          <data type="ID"/>
        </attribute>
      </optional>
      <optional>
        <attribute name="rows">
          <data type="int"/>
        </attribute>
      </optional>
      <optional>
        <attribute name="cols">
          <data type="int"/>
        </attribute>
      </optional>
    </element>
  </define>
  <define name="bibliography">
    <element name="bibliography">
      <oneOrMore>
        <choice>
          <ref name="references"/>
          <ref name="reference-clause"/>
        </choice>
      </oneOrMore>
    </element>
  </define>
  <define name="Section-Attributes">
    <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="number"/>
    </optional>
    <optional>
      <attribute name="branch-number"/>
    </optional>
    <optional>
      <attribute name="obligation">
        <choice>
          <value>normative</value>
          <value>informative</value>
        </choice>
      </attribute>
    </optional>
  </define>
  <define name="reference-clause">
    <element name="clause">
      <ref name="Section-Attributes"/>
      <optional>
        <ref name="section-title"/>
      </optional>
      <zeroOrMore>
        <ref name="BasicBlock"/>
      </zeroOrMore>
      <choice>
        <oneOrMore>
          <ref name="reference-clause"/>
        </oneOrMore>
        <zeroOrMore>
          <ref name="references"/>
        </zeroOrMore>
      </choice>
    </element>
  </define>
  <define name="Root-Attributes">
    <attribute name="version"/>
    <attribute name="schema-version"/>
    <attribute name="type">
      <choice>
        <value>semantic</value>
        <value>presentation</value>
      </choice>
    </attribute>
  </define>
  <define name="standard-document">
    <element name="standard-document">
      <ref name="Root-Attributes"/>
      <ref name="bibdata"/>
      <optional>
        <ref name="misccontainer"/>
      </optional>
      <optional>
        <ref name="boilerplate"/>
      </optional>
      <optional>
        <ref name="preface"/>
      </optional>
      <ref name="sections"/>
      <zeroOrMore>
        <ref name="annex"/>
      </zeroOrMore>
      <optional>
        <ref name="bibliography"/>
      </optional>
      <zeroOrMore>
        <ref name="indexsect"/>
      </zeroOrMore>
      <optional>
        <ref name="colophon"/>
      </optional>
    </element>
  </define>
  <define name="misccontainer">
    <element name="metanorma-extension">
      <oneOrMore>
        <ref name="AnyElement"/>
      </oneOrMore>
    </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="colophon">
    <element name="colophon">
      <oneOrMore>
        <ref name="content"/>
      </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="indexsect">
    <element name="indexsect">
      <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>
        <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">
    <ref name="Section-Attributes"/>
    <optional>
      <attribute name="type"/>
    </optional>
    <optional>
      <ref name="section-title"/>
    </optional>
    <group>
      <zeroOrMore>
        <ref name="BasicBlock"/>
      </zeroOrMore>
      <zeroOrMore>
        <ref name="content-subsection"/>
      </zeroOrMore>
    </group>
  </define>
  <define name="clause">
    <element name="clause">
      <ref name="Clause-Section"/>
    </element>
  </define>
  <define name="Clause-Section">
    <ref name="Section-Attributes"/>
    <optional>
      <attribute name="type"/>
    </optional>
    <optional>
      <ref name="section-title"/>
    </optional>
    <choice>
      <choice>
        <oneOrMore>
          <ref name="BasicBlock"/>
        </oneOrMore>
        <ref name="amend"/>
      </choice>
      <oneOrMore>
        <choice>
          <ref name="clause-subsection"/>
          <ref name="terms"/>
          <ref name="definitions"/>
          <ref name="floating-title"/>
        </choice>
      </oneOrMore>
    </choice>
  </define>
  <define name="Annex-Section">
    <ref name="Annex-Section-Attr"/>
    <ref name="Annex-Section-Body"/>
  </define>
  <define name="Annex-Section-Attr">
    <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>
  </define>
  <define name="Annex-Section-Body">
    <optional>
      <ref name="section-title"/>
    </optional>
    <group>
      <zeroOrMore>
        <ref name="BasicBlock"/>
      </zeroOrMore>
      <zeroOrMore>
        <choice>
          <ref name="annex-subsection"/>
          <ref name="terms"/>
          <ref name="definitions"/>
          <ref name="references"/>
          <ref name="floating-title"/>
        </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">
      <ref name="Section-Attributes"/>
      <optional>
        <attribute name="type"/>
      </optional>
      <optional>
        <ref name="section-title"/>
      </optional>
      <zeroOrMore>
        <ref name="BasicBlock"/>
      </zeroOrMore>
      <choice>
        <oneOrMore>
          <choice>
            <ref name="term"/>
            <ref name="terms"/>
          </choice>
        </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>
      <optional>
        <attribute name="language"/>
      </optional>
      <optional>
        <attribute name="script"/>
      </optional>
      <ref name="BlockAttributes"/>
      <oneOrMore>
        <ref name="preferred"/>
      </oneOrMore>
      <zeroOrMore>
        <ref name="admitted"/>
      </zeroOrMore>
      <zeroOrMore>
        <ref name="deprecates"/>
      </zeroOrMore>
      <zeroOrMore>
        <ref name="related"/>
      </zeroOrMore>
      <optional>
        <ref name="termdomain"/>
      </optional>
      <optional>
        <ref name="termsubject"/>
      </optional>
      <oneOrMore>
        <ref name="termdefinition"/>
      </oneOrMore>
      <zeroOrMore>
        <ref name="termnote"/>
      </zeroOrMore>
      <zeroOrMore>
        <ref name="termexample"/>
      </zeroOrMore>
      <zeroOrMore>
        <ref name="termsource"/>
      </zeroOrMore>
    </element>
  </define>
  <define name="preferred">
    <element name="preferred">
      <ref name="Designation"/>
    </element>
  </define>
  <define name="admitted">
    <element name="admitted">
      <ref name="Designation"/>
    </element>
  </define>
  <define name="related">
    <element name="related">
      <attribute name="type">
        <ref name="RelatedTermType"/>
      </attribute>
      <element name="preferred">
        <ref name="Designation"/>
      </element>
      <choice>
        <ref name="eref"/>
        <ref name="erefstack"/>
        <ref name="xref"/>
        <ref name="termref"/>
      </choice>
    </element>
  </define>
  <define name="RelatedTermType">
    <choice>
      <value>deprecates</value>
      <value>supersedes</value>
      <value>narrower</value>
      <value>broader</value>
      <value>equivalent</value>
      <value>compare</value>
      <value>contrast</value>
      <value>see</value>
      <value>seealso</value>
    </choice>
  </define>
  <define name="deprecates">
    <element name="deprecates">
      <ref name="Designation"/>
    </element>
  </define>
  <define name="Designation">
    <optional>
      <attribute name="absent">
        <data type="boolean"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="geographic-area"/>
    </optional>
    <choice>
      <ref name="expression_designation"/>
      <ref name="letter_symbol_designation"/>
      <ref name="graphical_symbol_designation"/>
    </choice>
    <optional>
      <ref name="fieldofapplication"/>
    </optional>
    <optional>
      <ref name="usageinfo"/>
    </optional>
    <zeroOrMore>
      <ref name="termsource"/>
    </zeroOrMore>
  </define>
  <define name="fieldofapplication">
    <element name="field-of-application">
      <oneOrMore>
        <ref name="PureTextElement"/>
      </oneOrMore>
    </element>
  </define>
  <define name="usageinfo">
    <element name="usage-info">
      <oneOrMore>
        <ref name="PureTextElement"/>
      </oneOrMore>
    </element>
  </define>
  <define name="letter_symbol_designation">
    <element name="letter-symbol">
      <optional>
        <attribute name="isInternational">
          <data type="boolean"/>
        </attribute>
      </optional>
      <optional>
        <attribute name="type">
          <choice>
            <value>letter</value>
            <value>symbol</value>
            <value>formula</value>
            <value>equation</value>
          </choice>
        </attribute>
      </optional>
      <element name="name">
        <oneOrMore>
          <choice>
            <ref name="PureTextElement"/>
            <ref name="stem"/>
          </choice>
        </oneOrMore>
      </element>
    </element>
  </define>
  <define name="graphical_symbol_designation">
    <element name="graphical-symbol">
      <optional>
        <attribute name="isInternational">
          <data type="boolean"/>
        </attribute>
      </optional>
      <ref name="figure"/>
    </element>
  </define>
  <define name="expression_designation">
    <element name="expression">
      <optional>
        <attribute name="language">
          <a:documentation>ISO-639</a:documentation>
        </attribute>
      </optional>
      <optional>
        <attribute name="script">
          <a:documentation>ISO-15924</a:documentation>
        </attribute>
      </optional>
      <optional>
        <attribute name="type">
          <ref name="ExpressionDesignationType"/>
        </attribute>
      </optional>
      <optional>
        <attribute name="isInternational">
          <data type="boolean"/>
        </attribute>
      </optional>
      <element name="name">
        <zeroOrMore>
          <choice>
            <ref name="PureTextElement"/>
            <ref name="stem"/>
            <ref name="index"/>
          </choice>
        </zeroOrMore>
      </element>
      <optional>
        <element name="abbreviation-type">
          <ref name="AbbreviationType"/>
        </element>
      </optional>
      <optional>
        <element name="pronunciation">
          <ref name="LocalizedString"/>
        </element>
      </optional>
      <optional>
        <element name="grammar">
          <ref name="Grammar"/>
        </element>
      </optional>
    </element>
  </define>
  <define name="ExpressionDesignationType">
    <choice>
      <value>prefix</value>
      <value>suffix</value>
      <value>abbreviation</value>
      <value>full</value>
    </choice>
  </define>
  <define name="AbbreviationType">
    <choice>
      <value>truncation</value>
      <value>acronym</value>
      <value>initialism</value>
    </choice>
  </define>
  <define name="Grammar">
    <zeroOrMore>
      <element name="gender">
        <ref name="GrammarGender"/>
      </element>
    </zeroOrMore>
    <zeroOrMore>
      <element name="number">
        <ref name="GrammarNumber"/>
      </element>
    </zeroOrMore>
    <optional>
      <element name="isPreposition">
        <data type="boolean"/>
      </element>
    </optional>
    <optional>
      <element name="isParticiple">
        <data type="boolean"/>
      </element>
    </optional>
    <optional>
      <element name="isAdjective">
        <data type="boolean"/>
      </element>
    </optional>
    <optional>
      <element name="isVerb">
        <data type="boolean"/>
      </element>
    </optional>
    <optional>
      <element name="isAdverb">
        <data type="boolean"/>
      </element>
    </optional>
    <optional>
      <element name="isNoun">
        <data type="boolean"/>
      </element>
    </optional>
    <zeroOrMore>
      <element name="grammar-value">
        <text/>
      </element>
    </zeroOrMore>
  </define>
  <define name="GrammarGender">
    <choice>
      <value>masculine</value>
      <value>feminine</value>
      <value>neuter</value>
      <value>common</value>
    </choice>
  </define>
  <define name="GrammarNumber">
    <choice>
      <value>singular</value>
      <value>dual</value>
      <value>plural</value>
    </choice>
  </define>
  <define name="termdomain">
    <element name="domain">
      <oneOrMore>
        <ref name="TextElement"/>
      </oneOrMore>
    </element>
  </define>
  <define name="termsubject">
    <element name="subject">
      <oneOrMore>
        <ref name="TextElement"/>
      </oneOrMore>
    </element>
  </define>
  <define name="termdefinition">
    <element name="definition">
      <optional>
        <attribute name="type"/>
      </optional>
      <choice>
        <ref name="verbaldefinition"/>
        <ref name="nonverbalrep"/>
        <group>
          <ref name="verbaldefinition"/>
          <ref name="nonverbalrep"/>
        </group>
      </choice>
    </element>
  </define>
  <define name="verbaldefinition">
    <element name="verbal-definition">
      <oneOrMore>
        <choice>
          <ref name="paragraph"/>
          <ref name="dl"/>
          <ref name="ol"/>
          <ref name="ul"/>
          <ref name="table"/>
          <ref name="figure"/>
          <ref name="formula"/>
        </choice>
      </oneOrMore>
      <zeroOrMore>
        <ref name="termsource"/>
      </zeroOrMore>
    </element>
  </define>
  <define name="nonverbalrep">
    <element name="non-verbal-representation">
      <oneOrMore>
        <choice>
          <ref name="table"/>
          <ref name="figure"/>
          <ref name="formula"/>
        </choice>
      </oneOrMore>
      <zeroOrMore>
        <ref name="termsource"/>
      </zeroOrMore>
    </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>
      <ref name="BlockAttributes"/>
      <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="BlockAttributes"/>
      <oneOrMore>
        <choice>
          <ref name="formula"/>
          <ref name="ul"/>
          <ref name="ol"/>
          <ref name="dl"/>
          <ref name="quote"/>
          <ref name="sourcecode"/>
          <ref name="paragraph"/>
          <ref name="figure"/>
        </choice>
      </oneOrMore>
    </element>
  </define>
  <define name="termsource">
    <element name="termsource">
      <attribute name="status">
        <ref name="SourceStatusType"/>
      </attribute>
      <attribute name="type">
        <choice>
          <value>authoritative</value>
          <value>lineage</value>
        </choice>
      </attribute>
      <ref name="origin"/>
      <optional>
        <ref name="modification"/>
      </optional>
    </element>
  </define>
  <define name="SourceStatusType">
    <choice>
      <value>identical</value>
      <value>modified</value>
      <value>adapted</value>
      <value>restyled</value>
      <value>context-added</value>
      <value>generalisation</value>
      <value>specialisation</value>
      <value>unspecified</value>
    </choice>
  </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="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>
        <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="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>
  <define name="imagemap">
    <element name="imagemap">
      <ref name="BlockAttributes"/>
      <ref name="figure"/>
      <zeroOrMore>
        <element name="area">
          <attribute name="type">
            <choice>
              <value>rect</value>
              <value>circle</value>
              <value>ellipse</value>
              <value>poly</value>
            </choice>
          </attribute>
          <choice>
            <ref name="xref"/>
            <ref name="hyperlink"/>
            <ref name="eref"/>
            <ref name="erefstack"/>
          </choice>
          <oneOrMore>
            <element name="coords">
              <attribute name="x">
                <data type="float"/>
              </attribute>
              <attribute name="y">
                <data type="float"/>
              </attribute>
            </element>
          </oneOrMore>
          <optional>
            <element name="radius">
              <attribute name="x">
                <data type="float"/>
              </attribute>
              <optional>
                <attribute name="y">
                  <data type="float"/>
                </attribute>
              </optional>
            </element>
          </optional>
        </element>
      </zeroOrMore>
    </element>
  </define>
  <define name="svgmap">
    <element name="svgmap">
      <ref name="BlockAttributes"/>
      <ref name="figure"/>
      <zeroOrMore>
        <element name="target">
          <attribute name="href">
            <data type="anyURI"/>
          </attribute>
          <choice>
            <ref name="xref"/>
            <ref name="hyperlink"/>
            <ref name="eref"/>
            <ref name="erefstack"/>
          </choice>
        </element>
      </zeroOrMore>
    </element>
  </define>
  <define name="ul_li">
    <element name="li">
      <optional>
        <attribute name="id">
          <data type="ID"/>
        </attribute>
      </optional>
      <optional>
        <attribute name="uncheckedcheckbox">
          <data type="boolean"/>
        </attribute>
      </optional>
      <optional>
        <attribute name="checkedcheckbox">
          <data type="boolean"/>
        </attribute>
      </optional>
      <oneOrMore>
        <ref name="BasicBlock"/>
      </oneOrMore>
    </element>
  </define>
  <define name="floating-title">
    <element name="floating-title">
      <attribute name="id">
        <data type="ID"/>
      </attribute>
      <attribute name="depth">
        <data type="int"/>
      </attribute>
      <zeroOrMore>
        <ref name="TextElement"/>
      </zeroOrMore>
    </element>
  </define>
  <define name="XrefAttributes">
    <attribute name="target">
      <data type="string">
        <param name="pattern">\i\c*|\c+#\c+</param>
      </data>
    </attribute>
    <optional>
      <attribute name="to">
        <data type="string">
          <param name="pattern">\i\c*|\c+#\c+</param>
        </data>
      </attribute>
    </optional>
    <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>
    <optional>
      <attribute name="style">
        <ref name="XrefStyleType"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="label"/>
    </optional>
  </define>
  <define name="XrefBody">
    <zeroOrMore>
      <ref name="XrefTarget"/>
    </zeroOrMore>
    <oneOrMore>
      <ref name="PureTextElement"/>
    </oneOrMore>
  </define>
  <define name="XrefConnectiveType">
    <choice>
      <value>and</value>
      <value>or</value>
      <value>from</value>
      <value>to</value>
      <value/>
    </choice>
  </define>
  <define name="XrefTarget">
    <element name="location">
      <attribute name="target">
        <data type="string">
          <param name="pattern">\i\c*|\c+#\c+</param>
        </data>
      </attribute>
      <attribute name="connective">
        <ref name="XrefConnectiveType"/>
      </attribute>
    </element>
  </define>
  <define name="XrefStyleType">
    <choice>
      <value>basic</value>
      <value>full</value>
      <value>short</value>
      <value>id</value>
      <text/>
    </choice>
  </define>
  <define name="erefTypeWithConnective">
    <optional>
      <attribute name="connective">
        <ref name="XrefConnectiveType"/>
      </attribute>
    </optional>
    <ref name="erefType"/>
  </define>
  <define name="erefstack">
    <element name="erefstack">
      <oneOrMore>
        <element name="eref">
          <ref name="erefTypeWithConnective"/>
        </element>
      </oneOrMore>
    </element>
  </define>
  <define name="BlockAttributes">
    <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="tag"/>
    </optional>
    <optional>
      <attribute name="multilingual-rendering">
        <ref name="MultilingualRenderingType"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="columns"/>
    </optional>
  </define>
  <start>
    <ref name="standard-document"/>
  </start>
</grammar>