<?xml version="1.0" encoding="UTF-8"?>
<grammar xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
  <!--
    default namespace = "http://riboseinc.com/csd"
    Currently we inherit from a namespaced grammar, isostandard. Until we inherit from isodoc,
    we cannot have a new default namespace: we will end up with a grammar with two different
    namespaces, one for isostandard and one for csd additions. And we do not want that.
  -->
  <include href="isostandard.rng">
    <start>
      <ref name="csd-standard"/>
    </start>
    <define name="language">
      <element name="language">
        <value>en</value>
      </element>
    </define>
    <define name="docidentifier">
      <element name="docidentifier">
        <optional>
          <attribute name="type"/>
        </optional>
        <text/>
      </element>
    </define>
    <define name="btitle">
      <element name="title">
        <ref name="FormattedString"/>
      </element>
    </define>
    <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>
          <ref name="LocalizedString"/>
        </choice>
      </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>
            <choice>
              <zeroOrMore>
                <ref name="TextElement"/>
              </zeroOrMore>
              <ref name="pre"/>
            </choice>
            <zeroOrMore>
              <ref name="note"/>
            </zeroOrMore>
            <optional>
              <ref name="dl"/>
            </optional>
          </group>
        </choice>
      </element>
    </define>
    <define name="BibItemType">
      <choice>
        <value>directive</value>
        <value>guide</value>
        <value>specification</value>
        <value>standard</value>
        <value>report</value>
        <value>administrative</value>
        <value>amendment</value>
        <value>technical corrigendum</value>
        <value>advisory</value>
      </choice>
    </define>
    <define name="BibliographicItem">
      <optional>
        <attribute name="type">
          <ref name="BibItemType"/>
        </attribute>
      </optional>
      <optional>
        <ref name="fetched"/>
      </optional>
      <choice>
        <oneOrMore>
          <ref name="btitle"/>
        </oneOrMore>
        <ref name="formattedref"/>
      </choice>
      <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>
      <zeroOrMore>
        <ref name="abstract"/>
      </zeroOrMore>
      <optional>
        <ref name="status"/>
      </optional>
      <optional>
        <ref name="copyright"/>
      </optional>
      <zeroOrMore>
        <ref name="docrelation"/>
      </zeroOrMore>
      <zeroOrMore>
        <ref name="series"/>
      </zeroOrMore>
      <optional>
        <ref name="medium"/>
      </optional>
      <zeroOrMore>
        <ref name="bplace"/>
      </zeroOrMore>
      <zeroOrMore>
        <ref name="extent"/>
      </zeroOrMore>
      <zeroOrMore>
        <ref name="accesslocation"/>
      </zeroOrMore>
      <optional>
        <ref name="bclassification"/>
      </optional>
      <optional>
        <ref name="validity"/>
      </optional>
      <optional>
        <ref name="editorialgroup"/>
      </optional>
      <zeroOrMore>
        <ref name="ics"/>
      </zeroOrMore>
      <optional>
        <ref name="allParts"/>
      </optional>
    </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>
      <zeroOrMore>
        <ref name="abstract"/>
      </zeroOrMore>
      <optional>
        <ref name="status"/>
      </optional>
      <ref name="copyright"/>
      <zeroOrMore>
        <ref name="docrelation"/>
      </zeroOrMore>
      <zeroOrMore>
        <ref name="series"/>
      </zeroOrMore>
      <optional>
        <ref name="medium"/>
      </optional>
      <zeroOrMore>
        <ref name="bplace"/>
      </zeroOrMore>
      <zeroOrMore>
        <ref name="extent"/>
      </zeroOrMore>
      <zeroOrMore>
        <ref name="accesslocation"/>
      </zeroOrMore>
      <optional>
        <ref name="bclassification"/>
      </optional>
      <optional>
        <ref name="validity"/>
      </optional>
      <ref name="editorialgroup"/>
      <zeroOrMore>
        <ref name="ics"/>
      </zeroOrMore>
      <optional>
        <ref name="allParts"/>
      </optional>
    </define>
    <define name="editorialgroup">
      <element name="editorialgroup">
        <oneOrMore>
          <ref name="technical-committee"/>
        </oneOrMore>
      </element>
    </define>
    <define name="technical-committee">
      <element name="technical-committee">
        <optional>
          <attribute name="type"/>
        </optional>
        <text/>
      </element>
    </define>
  </include>
  <define name="csd-standard">
    <element name="csd-standard">
      <ref name="bibdata"/>
      <optional>
        <ref name="version"/>
      </optional>
      <zeroOrMore>
        <ref name="termdocsource"/>
      </zeroOrMore>
      <ref name="preface"/>
      <oneOrMore>
        <ref name="sections"/>
      </oneOrMore>
      <zeroOrMore>
        <ref name="annex"/>
      </zeroOrMore>
      <ref name="bibliography"/>
    </element>
  </define>
</grammar>