<?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=“relaxng.org/ns/structure/1.0” datatypeLibrary=“www.w3.org/2001/XMLSchema-datatypes”>

<include href="biblio.rng"/>
<start>
  <ref name="standard-document"/>
</start>
<define name="standard-document">
  <element name="standard-document">
    <ref name="bibdata"/>
    <optional>
      <ref name="version"/>
    </optional>
    <oneOrMore>
      <ref name="sections"/>
    </oneOrMore>
    <zeroOrMore>
      <ref name="annex"/>
    </zeroOrMore>
    <zeroOrMore>
      <ref name="references"/>
    </zeroOrMore>
  </element>
</define>
<define name="bibdata">
  <element name="bibdata">
    <ref name="BibData"/>
  </element>
</define>
<define name="status">
  <element name="status">
    <ref name="FormattedString"/>
  </element>
</define>
<define name="version">
  <element name="version">
    <optional>
      <ref name="vedition"/>
    </optional>
    <optional>
      <ref name="revision-date"/>
    </optional>
    <zeroOrMore>
      <ref name="draft"/>
    </zeroOrMore>
  </element>
</define>
<define name="vedition">
  <element name="edition">
    <data type="int"/>
  </element>
</define>
<define name="revision-date">
  <element name="revision-date">
    <data type="date"/>
  </element>
</define>
<define name="draft">
  <element name="draft">
    <text/>
  </element>
</define>
<define name="sections">
  <element name="sections">
    <oneOrMore>
      <choice>
        <ref name="content"/>
        <ref name="clause"/>
        <ref name="terms"/>
        <ref name="definitions"/>
      </choice>
    </oneOrMore>
  </element>
</define>
<define name="definitions">
  <element name="definitions">
    <optional>
      <attribute name="id">
        <data type="ID"/>
      </attribute>
    </optional>
    <optional>
      <ref name="section-title"/>
    </optional>
    <ref name="dl"/>
  </element>
</define>
<define name="section-title">
  <element name="title">
    <text/>
  </element>
</define>
<define name="content">
  <element name="content">
    <ref name="Content-Section"/>
  </element>
</define>
<define name="content-subsection">
  <element name="clause">
    <ref name="Content-Section"/>
  </element>
</define>
<define name="Basic-Section">
  <optional>
    <attribute name="id">
      <data type="ID"/>
    </attribute>
  </optional>
  <optional>
    <ref name="section-title"/>
  </optional>
  <oneOrMore>
    <ref name="BasicBlock"/>
  </oneOrMore>
  <zeroOrMore>
    <ref name="note"/>
  </zeroOrMore>
</define>
<define name="Content-Section">
  <optional>
    <attribute name="id">
      <data type="ID"/>
    </attribute>
  </optional>
  <optional>
    <ref name="section-title"/>
  </optional>
  <choice>
    <group>
      <oneOrMore>
        <ref name="BasicBlock"/>
      </oneOrMore>
      <zeroOrMore>
        <ref name="note"/>
      </zeroOrMore>
    </group>
    <oneOrMore>
      <ref name="content-subsection"/>
    </oneOrMore>
  </choice>
</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>
    <ref name="section-title"/>
  </optional>
  <choice>
    <group>
      <oneOrMore>
        <ref name="BasicBlock"/>
      </oneOrMore>
      <zeroOrMore>
        <ref name="note"/>
      </zeroOrMore>
    </group>
    <oneOrMore>
      <ref name="clause-subsection"/>
    </oneOrMore>
  </choice>
</define>
<define name="clause-subsection">
  <element name="clause">
    <ref name="Clause-Section"/>
  </element>
</define>
<define name="annex">
  <element name="annex">
    <optional>
      <attribute name="id">
        <data type="ID"/>
      </attribute>
    </optional>
    <attribute name="obligation">
      <choice>
        <value>normative</value>
        <value>informative</value>
      </choice>
    </attribute>
    <optional>
      <ref name="section-title"/>
    </optional>
    <choice>
      <group>
        <oneOrMore>
          <ref name="BasicBlock"/>
        </oneOrMore>
        <zeroOrMore>
          <ref name="note"/>
        </zeroOrMore>
      </group>
      <oneOrMore>
        <ref name="clause-subsection"/>
      </oneOrMore>
    </choice>
  </element>
</define>
<define name="references">
  <element name="references">
    <optional>
      <attribute name="id">
        <data type="ID"/>
      </attribute>
    </optional>
    <optional>
      <ref name="section-title"/>
    </optional>
    <zeroOrMore>
      <ref name="bibitem"/>
    </zeroOrMore>
  </element>
</define>
<define name="terms">
  <element name="terms">
    <optional>
      <attribute name="id">
        <data type="ID"/>
      </attribute>
    </optional>
    <oneOrMore>
      <ref name="term"/>
    </oneOrMore>
  </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="deprecates"/>
    </zeroOrMore>
    <optional>
      <ref name="termdomain"/>
    </optional>
    <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="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="definition">
  <element name="definition">
    <ref name="paragraph"/>
  </element>
</define>
<define name="termnote">
  <element name="termnote">
    <attribute name="id">
      <data type="ID"/>
    </attribute>
    <ref name="paragraph"/>
  </element>
</define>
<define name="termexample">
  <element name="termexample">
    <attribute name="id">
      <data type="ID"/>
    </attribute>
    <ref name="BasicBlock"/>
  </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">
    <ref name="erefType"/>
  </element>
</define>
<define name="modification">
  <element name="modification">
    <ref name="paragraph"/>
  </element>
</define>
<define name="BasicBlock">
  <choice>
    <ref name="paragraph-with-footnote"/>
    <ref name="table"/>
    <ref name="formula"/>
    <ref name="admonition"/>
    <ref name="ol"/>
    <ref name="ul"/>
    <ref name="dl"/>
    <ref name="figure"/>
    <ref name="quote"/>
    <ref name="sourcecode"/>
    <ref name="example"/>
    <ref name="review"/>
  </choice>
</define>
<define name="paragraph">
  <element name="p">
    <ref name="ParagraphType"/>
  </element>
</define>
<define name="Alignments">
  <choice>
    <value>left</value>
    <value>right</value>
    <value>center</value>
    <value>justified</value>
  </choice>
</define>
<define name="ParagraphType">
  <attribute name="id">
    <data type="ID"/>
  </attribute>
  <optional>
    <attribute name="align">
      <ref name="Alignments"/>
    </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>
    <zeroOrMore>
      <choice>
        <ref name="TextElement"/>
        <ref name="fn"/>
      </choice>
    </zeroOrMore>
    <zeroOrMore>
      <ref name="note"/>
    </zeroOrMore>
  </element>
</define>
<define name="note">
  <element name="note">
    <attribute name="id">
      <data type="ID"/>
    </attribute>
    <oneOrMore>
      <ref name="paragraph-with-footnote"/>
    </oneOrMore>
  </element>
</define>
<define name="review">
  <element name="review">
    <attribute name="id">
      <data type="ID"/>
    </attribute>
    <attribute name="reviewer"/>
    <optional>
      <attribute name="date">
        <data type="dateTime"/>
      </attribute>
    </optional>
    <attribute name="from">
      <data type="IDREF"/>
    </attribute>
    <optional>
      <attribute name="to">
        <data type="IDREF"/>
      </attribute>
    </optional>
    <oneOrMore>
      <ref name="paragraph"/>
    </oneOrMore>
  </element>
</define>
<define name="formula">
  <element name="formula">
    <attribute name="id">
      <data type="ID"/>
    </attribute>
    <ref name="stem"/>
    <optional>
      <ref name="dl"/>
    </optional>
    <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>
      <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="quote-source">
  <element name="source">
    <ref name="erefType"/>
  </element>
</define>
<define name="quote-author">
  <element name="author">
    <text/>
  </element>
</define>
<define name="sourcecode">
  <element name="sourcecode">
    <attribute name="id">
      <data type="ID"/>
    </attribute>
    <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="table">
  <element name="table">
    <attribute name="id">
      <data type="ID"/>
    </attribute>
    <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="tname">
  <element name="name">
    <text/>
  </element>
</define>
<define name="thead">
  <element name="thead">
    <ref name="tr"/>
  </element>
</define>
<define name="tfoot">
  <element name="tfoot">
    <ref name="tr"/>
  </element>
</define>
<define name="tbody">
  <element name="tbody">
    <oneOrMore>
      <ref name="tr"/>
    </oneOrMore>
  </element>
</define>
<define name="table-note">
  <element name="note">
    <ref name="paragraph"/>
  </element>
</define>
<define name="tr">
  <element name="tr">
    <oneOrMore>
      <choice>
        <ref name="td"/>
        <ref name="th"/>
      </choice>
    </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>
    <choice>
      <zeroOrMore>
        <ref name="TextElement"/>
      </zeroOrMore>
      <oneOrMore>
        <ref name="paragraph-with-footnote"/>
      </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>
    <choice>
      <zeroOrMore>
        <ref name="TextElement"/>
      </zeroOrMore>
      <oneOrMore>
        <ref name="paragraph-with-footnote"/>
      </oneOrMore>
    </choice>
  </element>
</define>
<define name="example">
  <element name="example">
    <attribute name="id">
      <data type="ID"/>
    </attribute>
    <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"/>
      </choice>
    </oneOrMore>
    <zeroOrMore>
      <ref name="note"/>
    </zeroOrMore>
  </element>
</define>
<define name="admonition">
  <element name="admonition">
    <attribute name="type">
      <choice>
        <value>warning</value>
        <value>note</value>
        <value>tip</value>
        <value>important</value>
        <value>caution</value>
      </choice>
    </attribute>
    <attribute name="id">
      <data type="ID"/>
    </attribute>
    <zeroOrMore>
      <ref name="paragraph-with-footnote"/>
    </zeroOrMore>
    <zeroOrMore>
      <ref name="note"/>
    </zeroOrMore>
  </element>
</define>
<define name="figure">
  <element name="figure">
    <attribute name="id">
      <data type="ID"/>
    </attribute>
    <optional>
      <ref name="source"/>
    </optional>
    <optional>
      <ref name="tname"/>
    </optional>
    <choice>
      <oneOrMore>
        <ref name="figure"/>
      </oneOrMore>
      <group>
        <zeroOrMore>
          <ref name="TextElement"/>
        </zeroOrMore>
        <zeroOrMore>
          <ref name="note"/>
        </zeroOrMore>
        <optional>
          <ref name="dl"/>
        </optional>
      </group>
    </choice>
  </element>
</define>
<define name="TextElement">
  <choice>
    <text/>
    <ref name="em"/>
    <ref name="eref"/>
    <ref name="strong"/>
    <ref name="stem"/>
    <ref name="sub"/>
    <ref name="sup"/>
    <ref name="tt"/>
    <ref name="strike"/>
    <ref name="smallcap"/>
    <ref name="xref"/>
    <ref name="br"/>
    <ref name="hyperlink"/>
    <ref name="hr"/>
    <ref name="pagebreak"/>
    <ref name="bookmark"/>
  </choice>
</define>
<define name="source">
  <element name="source">
    <ref name="TypedUri"/>
  </element>
</define>
<define name="em">
  <element name="em">
    <text/>
  </element>
</define>
<define name="strong">
  <element name="strong">
    <text/>
  </element>
</define>
<define name="tt">
  <element name="tt">
    <text/>
  </element>
</define>
<define name="sub">
  <element name="sub">
    <text/>
  </element>
</define>
<define name="sup">
  <element name="sup">
    <text/>
  </element>
</define>
<define name="strike">
  <element name="strike">
    <text/>
  </element>
</define>
<define name="smallcap">
  <element name="smallcap">
    <text/>
  </element>
</define>
<define name="br">
  <element name="br">
    <empty/>
  </element>
</define>
<define name="hr">
  <element name="hr">
    <empty/>
  </element>
</define>
<define name="pagebreak">
  <element name="pagebreak">
    <empty/>
  </element>
</define>
<!-- bare ID element, used for referencing arbitrary spans of text -->
<define name="bookmark">
  <element name="bookmark">
    <attribute name="id">
      <data type="ID"/>
    </attribute>
    <empty/>
  </element>
</define>
<define name="ReferenceFormat">
  <choice>
    <value>external</value>
    <value>inline</value>
    <value>footnote</value>
    <value>callout</value>
  </choice>
</define>
<define name="eref">
  <element name="eref">
    <ref name="erefType"/>
  </element>
</define>
<define name="erefType">
  <optional>
    <attribute name="normative">
      <data type="boolean"/>
    </attribute>
  </optional>
  <attribute name="citeas"/>
  <attribute name="type">
    <ref name="ReferenceFormat"/>
  </attribute>
  <ref name="CitationType"/>
  <text/>
</define>
<define name="hyperlink">
  <element name="link">
    <attribute name="target">
      <data type="anyURI"/>
    </attribute>
    <attribute name="type">
      <ref name="ReferenceFormat"/>
    </attribute>
    <text/>
  </element>
</define>
<define name="xref">
  <element name="xref">
    <attribute name="target">
      <data type="IDREF"/>
    </attribute>
    <attribute name="type">
      <ref name="ReferenceFormat"/>
    </attribute>
    <text/>
  </element>
</define>
<define name="fn">
  <element name="fn">
    <attribute name="reference"/>
    <oneOrMore>
      <ref name="paragraph"/>
    </oneOrMore>
  </element>
</define>
<!--
  This is xref with fixed @type="footnote", and @target built in as paragraph+
  @reference replaces ReferenceElement/text
  so <fn reference="2"><p>This is a footnote</p></fn>
  corresponds to 
  <eref type="footnote" target="fn2">2</xref> <p id="fn2">This is a footnote</p>
-->
<define name="callout">
  <element name="callout">
    <attribute name="target">
      <data type="IDREF"/>
    </attribute>
    <text/>
  </element>
</define>
<!--
  This is xref with fixed @type="callout"; the target by convention is in an annotation in the same source code snippet
  so <callout target="xyz">1</callout>
  corresponds to <xref type="callout" target="xyz">1</xref>
-->
<define name="image">
  <element name="image">
    <attribute name="id">
      <data type="ID"/>
    </attribute>
    <optional>
      <attribute name="src">
        <data type="anyURI"/>
      </attribute>
    </optional>
    <attribute name="imagetype">
      <choice>
        <value>SVG</value>
        <value>JPEG</value>
        <value>GIF</value>
        <value>PNG</value>
        <value>PDF</value>
      </choice>
    </attribute>
    <optional>
      <attribute name="width">
        <choice>
          <data type="int"/>
          <value>auto</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="height">
        <choice>
          <data type="int"/>
          <value>auto</value>
        </choice>
      </attribute>
    </optional>
  </element>
</define>
<define name="stem">
  <element name="stem">
    <attribute name="type">
      <choice>
        <value>MathML</value>
        <value>AsciiMath</value>
      </choice>
    </attribute>
    <text/>
  </element>
</define>
<define name="annotation">
  <element name="annotation">
    <attribute name="id">
      <data type="ID"/>
    </attribute>
    <ref name="paragraph"/>
  </element>
</define>
<define name="ul">
  <element name="ul">
    <attribute name="id">
      <data type="ID"/>
    </attribute>
    <oneOrMore>
      <ref name="li"/>
    </oneOrMore>
    <zeroOrMore>
      <ref name="note"/>
    </zeroOrMore>
  </element>
</define>
<define name="li">
  <element name="li">
    <oneOrMore>
      <ref name="paragraph-with-footnote"/>
    </oneOrMore>
  </element>
</define>
<define name="ol">
  <element name="ol">
    <attribute name="id">
      <data type="ID"/>
    </attribute>
    <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>
    <oneOrMore>
      <ref name="dt"/>
      <ref name="dd"/>
    </oneOrMore>
    <zeroOrMore>
      <ref name="note"/>
    </zeroOrMore>
  </element>
</define>
<define name="dt">
  <element name="dt">
    <ref name="TextElement"/>
  </element>
</define>
<define name="dd">
  <element name="dd">
    <zeroOrMore>
      <ref name="paragraph-with-footnote"/>
    </zeroOrMore>
  </element>
</define>
<define name="BibData">
  <optional>
    <attribute name="type">
      <ref name="BibItemType"/>
    </attribute>
  </optional>
  <oneOrMore>
    <ref name="btitle"/>
  </oneOrMore>
  <optional>
    <ref name="formattedref"/>
  </optional>
  <zeroOrMore>
    <ref name="bsource"/>
  </zeroOrMore>
  <zeroOrMore>
    <ref name="docidentifier"/>
  </zeroOrMore>
  <zeroOrMore>
    <ref name="bdate"/>
  </zeroOrMore>
  <zeroOrMore>
    <ref name="contributor"/>
  </zeroOrMore>
  <optional>
    <ref name="edition"/>
  </optional>
  <zeroOrMore>
    <ref name="biblionote"/>
  </zeroOrMore>
  <zeroOrMore>
    <ref name="language"/>
  </zeroOrMore>
  <zeroOrMore>
    <ref name="script"/>
  </zeroOrMore>
  <optional>
    <ref name="abstract"/>
  </optional>
  <optional>
    <ref name="status"/>
  </optional>
  <ref name="copyright"/>
  <zeroOrMore>
    <ref name="docrelation"/>
  </zeroOrMore>
</define>

</grammar>