<?xml version="1.0" encoding="UTF-8"?> <!-- instantiations of this grammar may replace leaf strings with more elaborated types; e.g. title (text) replaced with title-main, title-intro, title-part; type replaced with enum. some renaming at leaf nodes is permissible obligations can change both from optional to mandatory, and from mandatory to optional; optional elements may be omitted; freely positioned alternatives may be replaced with strict ordering DO NOT introduce a namespace here. We do not want a distinct namespace for these elements, and a distinct namespace for any grammar inheriting these elements; we just want one namespace for any child grammars of this. --> <grammar xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"> <include href="biblio.rng"> <define name="status"> <element name="status"> <choice> <value>proposal</value> <value>working_draft</value> <value>committee_draft</value> <value>draft_standard</value> <value>final_draft</value> <value>published</value> <value>withdrawn</value> </choice> </element> </define> </include> <start> <ref name="standard-document"/> </start> <define name="standard-document"> <element name="standard-document"> <ref name="bibdata"/> <optional> <ref name="version"/> </optional> <optional> <ref name="preface"/> </optional> <ref name="sections"/> <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="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="preface"> <element name="preface"> <oneOrMore> <ref name="content"/> </oneOrMore> </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"> <zeroOrMore> <ref name="TextElement"/> </zeroOrMore> </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="paragraph"/> </element> </define> <define name="termsource"> <element name="termsource"> <attribute name="status"> <choice> <value>identical</value> <value>modified</value> </choice> </attribute> <ref name="origin"/> <optional> <ref name="modification"/> </optional> </element> </define> <define name="origin"> <element name="origin"> <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"/> <ref name="pre"/> </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"/> </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="pre"> <element name="pre"> <attribute name="id"> <data type="ID"/> </attribute> <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> <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> <ref name="image"/> <ref name="pre"/> <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="keyword"/> <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="keyword"> <element name="keyword"> <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"> <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> <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> <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> <optional> <ref name="docnumber"/> </optional> <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>