lib/metanorma/ietf/basicdoc.rng
<?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="BasicBlockNoId">
<choice>
<ref name="paragraph-with-footnote-no-id"/>
<ref name="table-no-id"/>
<ref name="formula-no-id"/>
<ref name="admonition-no-id"/>
<ref name="ol-no-id"/>
<ref name="ul-no-id"/>
<ref name="dl-no-id"/>
<ref name="figure-no-id"/>
<ref name="quote-no-id"/>
<ref name="sourcecode-no-id"/>
<ref name="example-no-id"/>
<ref name="review"/>
<ref name="pre-no-id"/>
<ref name="note-no-id"/>
<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="RequiredId">
<attribute name="id">
<data type="ID"/>
</attribute>
</define>
<define name="OptionalId">
<optional>
<attribute name="id">
<data type="ID"/>
</attribute>
</optional>
</define>
<define name="ParagraphAttrs">
<optional>
<attribute name="align">
<ref name="Alignments"/>
</attribute>
</optional>
</define>
<define name="ParagraphType">
<ref name="RequiredId"/>
<ref name="ParagraphAttrs"/>
<ref name="ParagraphBody"/>
</define>
<define name="ParagraphBody">
<zeroOrMore>
<ref name="TextElement"/>
</zeroOrMore>
<zeroOrMore>
<ref name="note"/>
</zeroOrMore>
</define>
<define name="ParagraphFnBody">
<zeroOrMore>
<choice>
<ref name="TextElement"/>
<ref name="fn"/>
</choice>
</zeroOrMore>
<zeroOrMore>
<ref name="note"/>
</zeroOrMore>
</define>
<define name="paragraph-no-id">
<element name="p">
<ref name="OptionalId"/>
<ref name="ParagraphAttrs"/>
<ref name="ParagraphBody"/>
</element>
</define>
<define name="paragraph-with-footnote">
<element name="p">
<ref name="RequiredId"/>
<ref name="ParagraphAttrs"/>
<ref name="ParagraphFnBody"/>
</element>
</define>
<define name="paragraph-with-footnote-no-id">
<element name="p">
<ref name="OptionalId"/>
<ref name="ParagraphAttrs"/>
<ref name="ParagraphFnBody"/>
</element>
</define>
<define name="note">
<element name="note">
<ref name="RequiredId"/>
<ref name="NoteAttr"/>
<ref name="NoteBody"/>
</element>
</define>
<define name="note-no-id">
<element name="note">
<ref name="OptionalId"/>
<ref name="NoteAttr"/>
<ref name="NoteNoIdBody"/>
</element>
</define>
<define name="NoteAttr">
<empty/>
</define>
<define name="NoteBody">
<oneOrMore>
<ref name="paragraph"/>
</oneOrMore>
</define>
<define name="NoteNoIdBody">
<oneOrMore>
<ref name="paragraph-no-id"/>
</oneOrMore>
</define>
<define name="review">
<element name="review">
<ref name="RequiredId"/>
<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">
<ref name="RequiredId"/>
<ref name="FormulaAttr"/>
<ref name="FormulaBody"/>
</element>
</define>
<define name="formula-no-id">
<element name="formula">
<ref name="OptionalId"/>
<ref name="FormulaAttr"/>
<ref name="FormulaNoIdBody"/>
</element>
</define>
<define name="FormulaAttr">
<optional>
<attribute name="unnumbered">
<data type="boolean"/>
</attribute>
</optional>
<optional>
<attribute name="subsequence"/>
</optional>
<optional>
<attribute name="inequality">
<data type="boolean"/>
</attribute>
</optional>
</define>
<define name="FormulaBody">
<ref name="stem"/>
<optional>
<ref name="dl"/>
</optional>
<zeroOrMore>
<ref name="note"/>
</zeroOrMore>
</define>
<define name="FormulaNoIdBody">
<ref name="stem"/>
<optional>
<ref name="dl-no-id"/>
</optional>
<zeroOrMore>
<ref name="note-no-id"/>
</zeroOrMore>
</define>
<define name="quote">
<element name="quote">
<ref name="RequiredId"/>
<ref name="QuoteAttr"/>
<ref name="QuoteBody"/>
</element>
</define>
<define name="quote-no-id">
<element name="quote">
<ref name="OptionalId"/>
<ref name="QuoteAttr"/>
<ref name="QuoteNoIdBody"/>
</element>
</define>
<define name="QuoteAttr">
<optional>
<attribute name="alignment">
<ref name="Alignments"/>
</attribute>
</optional>
</define>
<define name="QuoteBody">
<optional>
<ref name="quote-source"/>
</optional>
<optional>
<ref name="quote-author"/>
</optional>
<oneOrMore>
<ref name="paragraph-with-footnote"/>
</oneOrMore>
<zeroOrMore>
<ref name="note"/>
</zeroOrMore>
</define>
<define name="QuoteNoIdBody">
<optional>
<ref name="quote-source"/>
</optional>
<optional>
<ref name="quote-author"/>
</optional>
<oneOrMore>
<ref name="paragraph-with-footnote-no-id"/>
</oneOrMore>
<zeroOrMore>
<ref name="note-no-id"/>
</zeroOrMore>
</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">
<ref name="RequiredId"/>
<ref name="SourceAttr"/>
<ref name="SourceBody"/>
</element>
</define>
<define name="sourcecode-no-id">
<element name="sourcecode">
<ref name="OptionalId"/>
<ref name="SourceAttr"/>
<ref name="SourceNoIdBody"/>
</element>
</define>
<define name="SourceAttr">
<optional>
<attribute name="unnumbered">
<data type="boolean"/>
</attribute>
</optional>
<optional>
<attribute name="subsequence"/>
</optional>
<optional>
<attribute name="lang"/>
</optional>
</define>
<define name="SourceBody">
<optional>
<ref name="tname"/>
</optional>
<oneOrMore>
<choice>
<text/>
<ref name="callout"/>
</choice>
</oneOrMore>
<zeroOrMore>
<ref name="annotation"/>
</zeroOrMore>
<zeroOrMore>
<ref name="note"/>
</zeroOrMore>
</define>
<define name="SourceNoIdBody">
<optional>
<ref name="tname"/>
</optional>
<oneOrMore>
<choice>
<text/>
<ref name="callout"/>
</choice>
</oneOrMore>
<zeroOrMore>
<ref name="annotation"/>
</zeroOrMore>
<zeroOrMore>
<ref name="note-no-id"/>
</zeroOrMore>
</define>
<define name="pre">
<element name="pre">
<ref name="RequiredId"/>
<ref name="PreAttr"/>
<ref name="PreBody"/>
</element>
</define>
<define name="pre-no-id">
<element name="pre">
<ref name="OptionalId"/>
<ref name="PreAttr"/>
<ref name="PreNoIdBody"/>
</element>
</define>
<define name="PreAttr">
<optional>
<attribute name="alt"/>
</optional>
</define>
<define name="PreBody">
<optional>
<ref name="tname"/>
</optional>
<text/>
<zeroOrMore>
<ref name="note"/>
</zeroOrMore>
</define>
<define name="PreNoIdBody">
<optional>
<ref name="tname"/>
</optional>
<text/>
<zeroOrMore>
<ref name="note-no-id"/>
</zeroOrMore>
</define>
<define name="table">
<element name="table">
<ref name="RequiredId"/>
<ref name="TableAttr"/>
<ref name="TableBody"/>
</element>
</define>
<define name="table-no-id">
<element name="table">
<ref name="OptionalId"/>
<ref name="TableAttr"/>
<ref name="TableNoIdBody"/>
</element>
</define>
<define name="TableAttr">
<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>
</define>
<define name="TableBody">
<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>
</define>
<define name="TableNoIdBody">
<optional>
<ref name="tname"/>
</optional>
<optional>
<ref name="thead-no-id"/>
</optional>
<ref name="tbody-no-id"/>
<optional>
<ref name="tfoot-no-id"/>
</optional>
<optional>
<ref name="dl-no-id"/>
</optional>
<zeroOrMore>
<ref name="table-note-no-id"/>
</zeroOrMore>
</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="thead-no-id">
<element name="thead">
<ref name="tr-no-id"/>
</element>
</define>
<define name="tfoot">
<element name="tfoot">
<ref name="tr"/>
</element>
</define>
<define name="tfoot-no-id">
<element name="tfoot">
<ref name="tr-no-id"/>
</element>
</define>
<define name="tbody">
<element name="tbody">
<oneOrMore>
<ref name="tr"/>
</oneOrMore>
</element>
</define>
<define name="tbody-no-id">
<element name="tbody">
<oneOrMore>
<ref name="tr-no-id"/>
</oneOrMore>
</element>
</define>
<define name="table-note">
<element name="note">
<ref name="paragraph"/>
</element>
</define>
<define name="table-note-no-id">
<element name="note">
<ref name="paragraph-no-id"/>
</element>
</define>
<define name="tr">
<element name="tr">
<oneOrMore>
<choice>
<ref name="td"/>
<ref name="th"/>
</choice>
</oneOrMore>
</element>
</define>
<define name="tr-no-id">
<element name="tr">
<oneOrMore>
<choice>
<ref name="td-no-id"/>
<ref name="th-no-id"/>
</choice>
</oneOrMore>
</element>
</define>
<define name="td">
<element name="td">
<ref name="TdAttr"/>
<ref name="TdBody"/>
</element>
</define>
<define name="td-no-id">
<element name="td">
<ref name="TdAttr"/>
<ref name="TdNoIdBody"/>
</element>
</define>
<define name="TdAttr">
<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>
</define>
<define name="TdBody">
<choice>
<zeroOrMore>
<ref name="TextElement"/>
</zeroOrMore>
<oneOrMore>
<ref name="paragraph-with-footnote"/>
</oneOrMore>
</choice>
</define>
<define name="TdNoIdBody">
<choice>
<zeroOrMore>
<ref name="TextElement"/>
</zeroOrMore>
<oneOrMore>
<ref name="paragraph-with-footnote-no-id"/>
</oneOrMore>
</choice>
</define>
<define name="th">
<element name="th">
<ref name="ThAttr"/>
<ref name="ThBody"/>
</element>
</define>
<define name="th-no-id">
<element name="th">
<ref name="ThAttr"/>
<ref name="ThNoIdBody"/>
</element>
</define>
<define name="ThAttr">
<ref name="TdAttr"/>
</define>
<define name="ThBody">
<ref name="TdBody"/>
</define>
<define name="ThNoIdBody">
<ref name="TdNoIdBody"/>
</define>
<define name="example">
<element name="example">
<ref name="RequiredId"/>
<ref name="ExampleAttr"/>
<ref name="ExampleBody"/>
</element>
</define>
<define name="example-no-id">
<element name="example">
<ref name="OptionalId"/>
<ref name="ExampleAttr"/>
<ref name="ExampleNoIdBody"/>
</element>
</define>
<define name="ExampleAttr">
<optional>
<attribute name="unnumbered">
<data type="boolean"/>
</attribute>
</optional>
<optional>
<attribute name="subsequence"/>
</optional>
</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"/>
</choice>
</oneOrMore>
<zeroOrMore>
<ref name="note"/>
</zeroOrMore>
</define>
<define name="ExampleNoIdBody">
<optional>
<ref name="tname"/>
</optional>
<oneOrMore>
<choice>
<ref name="formula-no-id"/>
<ref name="ul-no-id"/>
<ref name="ol-no-id"/>
<ref name="dl-no-id"/>
<ref name="quote-no-id"/>
<ref name="sourcecode-no-id"/>
<ref name="paragraph-with-footnote-no-id"/>
</choice>
</oneOrMore>
<zeroOrMore>
<ref name="note-no-id"/>
</zeroOrMore>
</define>
<define name="admonition">
<element name="admonition">
<ref name="RequiredId"/>
<ref name="AdmonitionAttr"/>
<ref name="AdmonitionBody"/>
</element>
</define>
<define name="admonition-no-id">
<element name="admonition">
<ref name="OptionalId"/>
<ref name="AdmonitionAttr"/>
<ref name="AdmonitionNoIdBody"/>
</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>
</define>
<define name="AdmonitionBody">
<optional>
<ref name="tname"/>
</optional>
<zeroOrMore>
<ref name="paragraph-with-footnote"/>
</zeroOrMore>
<zeroOrMore>
<ref name="note"/>
</zeroOrMore>
</define>
<define name="AdmonitionNoIdBody">
<optional>
<ref name="tname"/>
</optional>
<zeroOrMore>
<ref name="paragraph-with-footnote-no-id"/>
</zeroOrMore>
<zeroOrMore>
<ref name="note-no-id"/>
</zeroOrMore>
</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">
<ref name="RequiredId"/>
<ref name="FigureAttr"/>
<ref name="FigureBody"/>
</element>
</define>
<define name="figure-no-id">
<element name="figure">
<ref name="OptionalId"/>
<ref name="FigureAttr"/>
<ref name="FigureNoIdBody"/>
</element>
</define>
<define name="FigureAttr">
<optional>
<attribute name="unnumbered">
<data type="boolean"/>
</attribute>
</optional>
<optional>
<attribute name="subsequence"/>
</optional>
<optional>
<attribute name="class"/>
</optional>
</define>
<define name="FigureBody">
<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>
</define>
<define name="FigureNoIdBody">
<optional>
<ref name="source"/>
</optional>
<optional>
<ref name="tname"/>
</optional>
<choice>
<ref name="image-no-id"/>
<ref name="video-no-id"/>
<ref name="audio-no-id"/>
<ref name="pre-no-id"/>
<oneOrMore>
<ref name="paragraph-with-footnote-no-id"/>
</oneOrMore>
<zeroOrMore>
<ref name="figure-no-id"/>
</zeroOrMore>
</choice>
<zeroOrMore>
<ref name="fn"/>
</zeroOrMore>
<optional>
<ref name="dl-no-id"/>
</optional>
<zeroOrMore>
<ref name="note-no-id"/>
</zeroOrMore>
</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="RequiredId"/>
<ref name="ImageAttr"/>
</element>
</define>
<define name="image-no-id">
<element name="image">
<ref name="OptionalId"/>
<ref name="ImageAttr"/>
</element>
</define>
<define name="ImageAttr">
<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">
<ref name="RequiredId"/>
<ref name="VideoAttr"/>
<ref name="VideoBody"/>
</element>
</define>
<define name="video-no-id">
<element name="video">
<ref name="OptionalId"/>
<ref name="VideoAttr"/>
<ref name="VideoBody"/>
</element>
</define>
<define name="VideoAttr">
<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>
</define>
<define name="VideoBody">
<zeroOrMore>
<ref name="altsource"/>
</zeroOrMore>
</define>
<define name="audio">
<element name="audio">
<ref name="RequiredId"/>
<ref name="AudioAttr"/>
<ref name="AudioBody"/>
</element>
</define>
<define name="audio-no-id">
<element name="audio">
<ref name="OptionalId"/>
<ref name="AudioAttr"/>
<ref name="AudioBody"/>
</element>
</define>
<define name="AudioAttr">
<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>
</define>
<define name="AudioBody">
<zeroOrMore>
<ref name="altsource"/>
</zeroOrMore>
</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">
<ref name="RequiredId"/>
<ref name="paragraph"/>
</element>
</define>
<define name="ul">
<element name="ul">
<ref name="RequiredId"/>
<ref name="UlAttr"/>
<ref name="UlBody"/>
</element>
</define>
<define name="ul-no-id">
<element name="ul">
<ref name="OptionalId"/>
<ref name="UlAttr"/>
<ref name="UlNoIdBody"/>
</element>
</define>
<define name="UlAttr">
<empty/>
</define>
<define name="UlBody">
<oneOrMore>
<ref name="li"/>
</oneOrMore>
<zeroOrMore>
<ref name="note"/>
</zeroOrMore>
</define>
<define name="UlNoIdBody">
<oneOrMore>
<ref name="li-no-id"/>
</oneOrMore>
<zeroOrMore>
<ref name="note-no-id"/>
</zeroOrMore>
</define>
<define name="li">
<element name="li">
<ref name="OptionalId"/>
<ref name="LiAttr"/>
<ref name="LiBody"/>
</element>
</define>
<define name="li-no-id">
<element name="li">
<ref name="OptionalId"/>
<ref name="LiAttr"/>
<ref name="LiNoIdBody"/>
</element>
</define>
<define name="LiAttr">
<empty/>
</define>
<define name="LiBody">
<oneOrMore>
<ref name="paragraph-with-footnote"/>
</oneOrMore>
</define>
<define name="LiNoIdBody">
<oneOrMore>
<ref name="paragraph-with-footnote-no-id"/>
</oneOrMore>
</define>
<define name="ol">
<element name="ol">
<ref name="RequiredId"/>
<ref name="OlAttr"/>
<ref name="OlBody"/>
</element>
</define>
<define name="ol-no-id">
<element name="ol">
<ref name="OptionalId"/>
<ref name="OlAttr"/>
<ref name="OlNoIdBody"/>
</element>
</define>
<define name="OlAttr">
<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>
</define>
<define name="OlBody">
<oneOrMore>
<ref name="li"/>
</oneOrMore>
<zeroOrMore>
<ref name="note"/>
</zeroOrMore>
</define>
<define name="OlNoIdBody">
<oneOrMore>
<ref name="li-no-id"/>
</oneOrMore>
<zeroOrMore>
<ref name="note-no-id"/>
</zeroOrMore>
</define>
<define name="dl">
<element name="dl">
<ref name="RequiredId"/>
<ref name="DlAttr"/>
<ref name="DlBody"/>
</element>
</define>
<define name="dl-no-id">
<element name="dl">
<ref name="OptionalId"/>
<ref name="DlNoIdBody"/>
</element>
</define>
<define name="DlAttr">
<empty/>
</define>
<define name="DlBody">
<oneOrMore>
<ref name="dt"/>
<ref name="dd"/>
</oneOrMore>
<zeroOrMore>
<ref name="note"/>
</zeroOrMore>
</define>
<define name="DlNoIdBody">
<oneOrMore>
<ref name="dt"/>
<ref name="dd-no-id"/>
</oneOrMore>
<zeroOrMore>
<ref name="note-no-id"/>
</zeroOrMore>
</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>
<define name="dd-no-id">
<element name="dd">
<zeroOrMore>
<ref name="paragraph-with-footnote-no-id"/>
</zeroOrMore>
</element>
</define>
</grammar>