<?xml version=“1.0” encoding=“UTF-8”?> <grammar xmlns=“relaxng.org/ns/structure/1.0” datatypeLibrary=“www.w3.org/2001/XMLSchema-datatypes”>

<!-- default namespace = "http://riboseinc.com/gbstandard" -->
<!--
  Currently we inherit from a namespaced grammar, isostandard. Unless 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="gb-standard"/>
  </start>
  <define name="language">
    <element name="language">
      <choice>
        <value>zh</value>
        <value>en</value>
      </choice>
    </element>
  </define>
  <define name="script">
    <element name="script">
      <choice>
        <value>Hans</value>
        <value>Latn</value>
      </choice>
    </element>
  </define>
  <define name="preferred">
    <element name="preferred">
      <ref name="ZhEnLocalizedString"/>
    </element>
  </define>
  <define name="admitted">
    <element name="admitted">
      <ref name="ZhEnLocalizedString"/>
    </element>
  </define>
  <define name="deprecates">
    <element name="deprecates">
      <ref name="ZhEnLocalizedString"/>
    </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="BibliographicItem">
    <optional>
      <attribute name="type">
        <ref name="BibItemType"/>
      </attribute>
    </optional>
    <choice>
      <oneOrMore>
        <ref name="btitle"/>
      </oneOrMore>
      <ref name="formattedref"/>
    </choice>
    <optional>
      <ref name="bsource"/>
    </optional>
    <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>
    <optional>
      <ref name="copyright"/>
    </optional>
    <zeroOrMore>
      <ref name="docrelation"/>
    </zeroOrMore>
    <optional>
      <ref name="editorialgroup"/>
    </optional>
    <zeroOrMore>
      <ref name="ics"/>
    </zeroOrMore>
    <zeroOrMore>
      <ref name="gbcommittee"/>
    </zeroOrMore>
    <optional>
      <ref name="gbtype"/>
    </optional>
    <zeroOrMore>
      <ref name="gbccs"/>
    </zeroOrMore>
    <optional>
      <ref name="gbplannumber"/>
    </optional>
  </define>
  <define name="BibData">
    <optional>
      <attribute name="type">
        <ref name="BibItemType"/>
      </attribute>
    </optional>
    <oneOrMore>
      <ref name="btitle"/>
    </oneOrMore>
    <optional>
      <ref name="formattedref"/>
    </optional>
    <optional>
      <ref name="bsource"/>
    </optional>
    <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>
    <optional>
      <ref name="editorialgroup"/>
    </optional>
    <zeroOrMore>
      <ref name="ics"/>
    </zeroOrMore>
    <zeroOrMore>
      <ref name="gbcommittee"/>
    </zeroOrMore>
    <ref name="gbtype"/>
    <oneOrMore>
      <ref name="gbccs"/>
    </oneOrMore>
    <optional>
      <ref name="gbplannumber"/>
    </optional>
  </define>
  <define name="term-clause">
    <element name="clause">
      <optional>
        <attribute name="id">
          <data type="ID"/>
        </attribute>
      </optional>
      <optional>
        <attribute name="inline-header">
          <data type="boolean"/>
        </attribute>
      </optional>
      <optional>
        <attribute name="obligation">
          <choice>
            <value>normative</value>
            <value>informative</value>
          </choice>
        </attribute>
      </optional>
      <optional>
        <ref name="section-title"/>
      </optional>
      <zeroOrMore>
        <!-- boilerplate not stripped -->
        <choice>
          <ref name="paragraph"/>
          <ref name="ul"/>
        </choice>
      </zeroOrMore>
      <choice>
        <oneOrMore>
          <ref name="term-clause"/>
        </oneOrMore>
        <zeroOrMore>
          <choice>
            <ref name="terms"/>
            <ref name="definitions"/>
          </choice>
        </zeroOrMore>
      </choice>
    </element>
  </define>
  <define name="terms">
    <element name="terms">
      <optional>
        <attribute name="id">
          <data type="ID"/>
        </attribute>
      </optional>
      <optional>
        <attribute name="obligation">
          <choice>
            <value>normative</value>
            <value>informative</value>
          </choice>
        </attribute>
      </optional>
      <optional>
        <ref name="section-title"/>
      </optional>
      <zeroOrMore>
        <!-- boilerplate not stripped -->
        <choice>
          <ref name="paragraph"/>
          <ref name="ul"/>
        </choice>
      </zeroOrMore>
      <choice>
        <oneOrMore>
          <ref name="term"/>
        </oneOrMore>
        <group>
          <zeroOrMore>
            <ref name="terms"/>
          </zeroOrMore>
          <optional>
            <ref name="definitions"/>
          </optional>
        </group>
      </choice>
    </element>
  </define>
</include>
<!-- identical structure to iso-standard -->
<define name="gb-standard">
  <element name="gb-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>
<define name="gbccs">
  <element name="ccs">
    <element name="code">
      <text/>
    </element>
    <optional>
      <element name="text">
        <text/>
      </element>
    </optional>
  </element>
</define>
<define name="gbplannumber">
  <element name="plannumber">
    <text/>
  </element>
</define>
<define name="gbcommittee">
  <element name="gbcommittee">
    <attribute name="type">
      <choice>
        <value>technical</value>
        <value>provisional</value>
        <value>drafting</value>
      </choice>
    </attribute>
    <text/>
  </element>
</define>
<define name="gbtype">
  <element name="gbtype">
    <ref name="gbscope"/>
    <ref name="gbprefix"/>
    <ref name="gbmandate"/>
    <ref name="gbtopic"/>
  </element>
</define>
<define name="BibItemType" combine="choice">
  <value>recommendation</value>
</define>
<define name="gbscope">
  <element name="gbscope">
    <choice>
      <value>national</value>
      <value>sector</value>
      <value>professional</value>
      <value>local</value>
      <value>enterprise</value>
      <value>social-group</value>
    </choice>
  </element>
</define>
<define name="gbmandate">
  <element name="gbmandate">
    <choice>
      <value>mandatory</value>
      <value>recommended</value>
      <value>guidelines</value>
    </choice>
  </element>
</define>
<define name="gbprefix">
  <element name="gbprefix">
    <text/>
  </element>
</define>
<define name="gbtopic">
  <element name="gbtopic">
    <choice>
      <value>basic</value>
      <value>health-and-safety</value>
      <value>environment-protection</value>
      <value>engineering-and-construction</value>
      <value>product</value>
      <value>method</value>
      <value>management-techniques</value>
      <value>other</value>
    </choice>
  </element>
</define>
<define name="ZhEnLocalizedString">
  <!-- multiple languages and scripts possible: comma delimit them if so -->
  <attribute name="language">
    <choice>
      <value>zh</value>
      <value>en</value>
    </choice>
  </attribute>
  <optional>
    <attribute name="script">
      <choice>
        <value>Hans</value>
        <value>Latn</value>
      </choice>
    </attribute>
  </optional>
  <oneOrMore>
    <ref name="TextElement"/>
  </oneOrMore>
</define>

</grammar>