relaton/relaton-omg

View on GitHub
grammars/basicdoc.rng

Summary

Maintainability
Test Coverage
<?xml version="1.0" encoding="UTF-8"?>
<grammar xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
  <define name="document">
    <element name="document">
      <optional>
        <attribute name="identifier"/>
      </optional>
      <ref name="bibdata"/>
      <ref name="sections"/>
      <zeroOrMore>
        <ref name="references"/>
      </zeroOrMore>
    </element>
  </define>
  <define name="bibdata">
    <element name="bibdata">
      <ref name="BibData"/>
    </element>
  </define>
  <define name="sections">
    <element name="sections">
      <oneOrMore>
        <ref name="section"/>
      </oneOrMore>
    </element>
  </define>
  <define name="section">
    <element name="section">
      <ref name="Basic-Section"/>
      <zeroOrMore>
        <ref name="section"/>
      </zeroOrMore>
    </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>
      <ref name="section-title"/>
    </optional>
    <zeroOrMore>
      <ref name="BasicBlock"/>
    </zeroOrMore>
  </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="BasicBlock"/>
      </zeroOrMore>
      <zeroOrMore>
        <ref name="bibitem"/>
      </zeroOrMore>
    </element>
  </define>
  <define name="section-title">
    <element name="title">
      <zeroOrMore>
        <ref name="TextElement"/>
      </zeroOrMore>
    </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"/>
      <ref name="pre"/>
      <ref name="note"/>
      <ref name="pagebreak"/>
      <ref name="hr"/>
      <ref name="bookmark"/>
      <ref name="amend"/>
    </choice>
  </define>
  <define name="amend">
    <element name="amend">
      <ref name="AmendType"/>
    </element>
  </define>
  <define name="AmendType">
    <optional>
      <attribute name="id">
        <data type="ID"/>
      </attribute>
    </optional>
    <attribute name="change">
      <choice>
        <value>add</value>
        <value>modify</value>
        <value>delete</value>
        <value>replace</value>
      </choice>
    </attribute>
    <optional>
      <attribute name="path"/>
    </optional>
    <optional>
      <attribute name="path_end"/>
    </optional>
    <optional>
      <attribute name="title"/>
    </optional>
    <optional>
      <element name="location">
        <zeroOrMore>
          <choice>
            <ref name="locality"/>
            <ref name="localityStack"/>
          </choice>
        </zeroOrMore>
      </element>
    </optional>
    <optional>
      <element name="description">
        <zeroOrMore>
          <ref name="BasicBlock"/>
        </zeroOrMore>
      </element>
    </optional>
    <optional>
      <element name="newcontent">
        <optional>
          <attribute name="id">
            <data type="ID"/>
          </attribute>
        </optional>
        <zeroOrMore>
          <ref name="BasicBlock"/>
        </zeroOrMore>
      </element>
    </optional>
    <zeroOrMore>
      <ref name="classification"/>
    </zeroOrMore>
    <zeroOrMore>
      <ref name="contributor"/>
    </zeroOrMore>
  </define>
  <define name="classification">
    <element name="classification">
      <ref name="classification_tag"/>
      <ref name="classification_value"/>
    </element>
  </define>
  <define name="classification_tag">
    <element name="tag">
      <text/>
    </element>
  </define>
  <define name="classification_value">
    <element name="value">
      <text/>
    </element>
  </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"/>
      </oneOrMore>
    </element>
  </define>
  <define name="review">
    <element name="review">
      <attribute name="id">
        <data type="ID"/>
      </attribute>
      <attribute name="reviewer"/>
      <optional>
        <attribute name="type"/>
      </optional>
      <optional>
        <attribute name="date">
          <data type="dateTime"/>
        </attribute>
      </optional>
      <optional>
        <attribute name="from">
          <data type="IDREF"/>
        </attribute>
      </optional>
      <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>
      <optional>
        <attribute name="unnumbered">
          <data type="boolean"/>
        </attribute>
      </optional>
      <optional>
        <attribute name="subsequence"/>
      </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="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>
        <attribute name="unnumbered">
          <data type="boolean"/>
        </attribute>
      </optional>
      <optional>
        <attribute name="subsequence"/>
      </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="pre">
    <element name="pre">
      <attribute name="id">
        <data type="ID"/>
      </attribute>
      <optional>
        <attribute name="alt"/>
      </optional>
      <optional>
        <ref name="tname"/>
      </optional>
      <text/>
      <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="subsequence"/>
      </optional>
      <optional>
        <attribute name="alt"/>
      </optional>
      <optional>
        <attribute name="summary"/>
      </optional>
      <optional>
        <attribute name="uri">
          <data type="anyURI"/>
        </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="tname">
    <element name="name">
      <oneOrMore>
        <choice>
          <ref name="PureTextElement"/>
          <ref name="eref"/>
          <ref name="stem"/>
          <ref name="keyword"/>
          <ref name="xref"/>
          <ref name="hyperlink"/>
          <ref name="index"/>
          <ref name="index-xref"/>
        </choice>
      </oneOrMore>
    </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>
      <optional>
        <attribute name="valign">
          <choice>
            <value>top</value>
            <value>middle</value>
            <value>bottom</value>
            <value>baseline</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>
      <optional>
        <attribute name="valign">
          <choice>
            <value>top</value>
            <value>middle</value>
            <value>bottom</value>
            <value>baseline</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>
      <optional>
        <attribute name="unnumbered">
          <data type="boolean"/>
        </attribute>
      </optional>
      <optional>
        <attribute name="subsequence"/>
      </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"/>
        </choice>
      </oneOrMore>
      <zeroOrMore>
        <ref name="note"/>
      </zeroOrMore>
    </element>
  </define>
  <define name="admonition">
    <element name="admonition">
      <attribute name="type">
        <ref name="AdmonitionType"/>
      </attribute>
      <optional>
        <attribute name="class"/>
      </optional>
      <attribute name="id">
        <data type="ID"/>
      </attribute>
      <optional>
        <attribute name="uri">
          <data type="anyURI"/>
        </attribute>
      </optional>
      <optional>
        <ref name="tname"/>
      </optional>
      <zeroOrMore>
        <ref name="paragraph-with-footnote"/>
      </zeroOrMore>
      <zeroOrMore>
        <ref name="note"/>
      </zeroOrMore>
    </element>
  </define>
  <define name="AdmonitionType">
    <choice>
      <value>warning</value>
      <value>note</value>
      <value>tip</value>
      <value>important</value>
      <value>caution</value>
    </choice>
  </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="subsequence"/>
      </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="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="underline"/>
      <ref name="keyword"/>
      <ref name="ruby"/>
      <ref name="strike"/>
      <ref name="smallcap"/>
      <ref name="xref"/>
      <ref name="br"/>
      <ref name="hyperlink"/>
      <ref name="hr"/>
      <ref name="pagebreak"/>
      <ref name="bookmark"/>
      <ref name="image"/>
      <ref name="index"/>
      <ref name="index-xref"/>
    </choice>
  </define>
  <define name="PureTextElement">
    <choice>
      <text/>
      <ref name="em"/>
      <ref name="strong"/>
      <ref name="sub"/>
      <ref name="sup"/>
      <ref name="tt"/>
      <ref name="underline"/>
      <ref name="strike"/>
      <ref name="smallcap"/>
      <ref name="br"/>
    </choice>
  </define>
  <define name="source">
    <element name="source">
      <ref name="TypedUri"/>
    </element>
  </define>
  <define name="em">
    <element name="em">
      <zeroOrMore>
        <choice>
          <ref name="PureTextElement"/>
          <ref name="stem"/>
          <ref name="eref"/>
          <ref name="xref"/>
          <ref name="hyperlink"/>
          <ref name="index"/>
          <ref name="index-xref"/>
        </choice>
      </zeroOrMore>
    </element>
  </define>
  <define name="strong">
    <element name="strong">
      <zeroOrMore>
        <choice>
          <ref name="PureTextElement"/>
          <ref name="stem"/>
          <ref name="eref"/>
          <ref name="xref"/>
          <ref name="hyperlink"/>
          <ref name="index"/>
          <ref name="index-xref"/>
        </choice>
      </zeroOrMore>
    </element>
  </define>
  <define name="tt">
    <element name="tt">
      <zeroOrMore>
        <choice>
          <ref name="PureTextElement"/>
          <ref name="eref"/>
          <ref name="xref"/>
          <ref name="hyperlink"/>
          <ref name="index"/>
          <ref name="index-xref"/>
        </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="sub">
    <element name="sub">
      <zeroOrMore>
        <ref name="PureTextElement"/>
      </zeroOrMore>
    </element>
  </define>
  <define name="sup">
    <element name="sup">
      <zeroOrMore>
        <ref name="PureTextElement"/>
      </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">
      <optional>
        <attribute name="style"/>
      </optional>
      <zeroOrMore>
        <ref name="PureTextElement"/>
      </zeroOrMore>
    </element>
  </define>
  <define name="smallcap">
    <element name="smallcap">
      <zeroOrMore>
        <ref name="PureTextElement"/>
      </zeroOrMore>
    </element>
  </define>
  <define name="ruby">
    <element name="ruby">
      <choice>
        <ref name="ruby_pronunciation"/>
        <ref name="ruby_annotation"/>
      </choice>
      <choice>
        <text/>
        <ref name="ruby"/>
      </choice>
    </element>
  </define>
  <define name="ruby_pronunciation">
    <element name="pronunciation">
      <attribute name="value"/>
      <optional>
        <attribute name="script"/>
      </optional>
      <optional>
        <attribute name="lang"/>
      </optional>
    </element>
  </define>
  <define name="ruby_annotation">
    <element name="annotation">
      <attribute name="value"/>
      <optional>
        <attribute name="script"/>
      </optional>
      <optional>
        <attribute name="lang"/>
      </optional>
    </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>
  <define name="index">
    <element name="index">
      <optional>
        <attribute name="to">
          <data type="IDREF"/>
        </attribute>
      </optional>
      <element name="primary">
        <oneOrMore>
          <ref name="PureTextElement"/>
        </oneOrMore>
      </element>
      <optional>
        <element name="secondary">
          <oneOrMore>
            <ref name="PureTextElement"/>
          </oneOrMore>
        </element>
      </optional>
      <optional>
        <element name="tertiary">
          <oneOrMore>
            <ref name="PureTextElement"/>
          </oneOrMore>
        </element>
      </optional>
    </element>
  </define>
  <define name="index-xref">
    <element name="index-xref">
      <attribute name="also">
        <data type="boolean"/>
      </attribute>
      <element name="primary">
        <oneOrMore>
          <ref name="PureTextElement"/>
        </oneOrMore>
      </element>
      <optional>
        <element name="secondary">
          <oneOrMore>
            <ref name="PureTextElement"/>
          </oneOrMore>
        </element>
      </optional>
      <optional>
        <element name="tertiary">
          <oneOrMore>
            <ref name="PureTextElement"/>
          </oneOrMore>
        </element>
      </optional>
      <element name="target">
        <oneOrMore>
          <ref name="PureTextElement"/>
        </oneOrMore>
      </element>
    </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>
    <optional>
      <attribute name="alt"/>
    </optional>
    <ref name="CitationType"/>
    <oneOrMore>
      <ref name="PureTextElement"/>
    </oneOrMore>
  </define>
  <define name="hyperlink">
    <element name="link">
      <attribute name="target">
        <data type="anyURI"/>
      </attribute>
      <attribute name="type">
        <ref name="ReferenceFormat"/>
      </attribute>
      <optional>
        <attribute name="alt"/>
      </optional>
      <oneOrMore>
        <ref name="PureTextElement"/>
      </oneOrMore>
    </element>
  </define>
  <define name="xref">
    <element name="xref">
      <attribute name="target">
        <data type="IDREF"/>
      </attribute>
      <attribute name="type">
        <ref name="ReferenceFormat"/>
      </attribute>
      <optional>
        <attribute name="alt"/>
      </optional>
      <oneOrMore>
        <ref name="PureTextElement"/>
      </oneOrMore>
    </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">
      <ref name="Image"/>
    </element>
  </define>
  <define name="Image">
    <attribute name="id">
      <data type="ID"/>
    </attribute>
    <attribute name="src">
      <data type="anyURI"/>
    </attribute>
    <attribute name="mimetype"/>
    <optional>
      <attribute name="filename"/>
    </optional>
    <optional>
      <attribute name="width">
        <ref name="ImageSize"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="height">
        <ref name="ImageSize"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="alt"/>
    </optional>
    <optional>
      <attribute name="title"/>
    </optional>
    <optional>
      <attribute name="longdesc">
        <data type="anyURI"/>
      </attribute>
    </optional>
  </define>
  <define name="ImageSize">
    <choice>
      <data type="string">
        <param name="pattern">\d+([.]\d+)?(%?)</param>
      </data>
      <value>auto</value>
    </choice>
  </define>
  <define name="video">
    <element name="video">
      <attribute name="id">
        <data type="ID"/>
      </attribute>
      <attribute name="src">
        <data type="anyURI"/>
      </attribute>
      <attribute name="mimetype"/>
      <optional>
        <attribute name="filename"/>
      </optional>
      <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>
      <optional>
        <attribute name="alt"/>
      </optional>
      <optional>
        <attribute name="title"/>
      </optional>
      <optional>
        <attribute name="longdesc">
          <data type="anyURI"/>
        </attribute>
      </optional>
      <zeroOrMore>
        <ref name="altsource"/>
      </zeroOrMore>
    </element>
  </define>
  <define name="audio">
    <element name="audio">
      <attribute name="id">
        <data type="ID"/>
      </attribute>
      <attribute name="src">
        <data type="anyURI"/>
      </attribute>
      <attribute name="mimetype"/>
      <optional>
        <attribute name="filename"/>
      </optional>
      <optional>
        <attribute name="alt"/>
      </optional>
      <optional>
        <attribute name="title"/>
      </optional>
      <optional>
        <attribute name="longdesc">
          <data type="anyURI"/>
        </attribute>
      </optional>
      <zeroOrMore>
        <ref name="altsource"/>
      </zeroOrMore>
    </element>
  </define>
  <define name="altsource">
    <element name="altsource">
      <attribute name="src">
        <data type="anyURI"/>
      </attribute>
      <attribute name="mimetype"/>
      <optional>
        <attribute name="filename"/>
      </optional>
    </element>
  </define>
  <define name="stem">
    <element name="stem">
      <attribute name="type">
        <choice>
          <value>MathML</value>
          <value>AsciiMath</value>
        </choice>
      </attribute>
      <oneOrMore>
        <choice>
          <text/>
          <ref name="AnyElement"/>
        </choice>
      </oneOrMore>
    </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">
      <optional>
        <attribute name="id">
          <data type="ID"/>
        </attribute>
      </optional>
      <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>
      <optional>
        <attribute name="start"/>
      </optional>
      <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">
      <zeroOrMore>
        <ref name="TextElement"/>
      </zeroOrMore>
    </element>
  </define>
  <define name="dd">
    <element name="dd">
      <zeroOrMore>
        <ref name="paragraph-with-footnote"/>
      </zeroOrMore>
    </element>
  </define>
</grammar>