<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           elementFormDefault="qualified"
           targetNamespace="http://docbook.org/ns/docbook"
           xmlns:xlink="http://www.w3.org/1999/xlink"
           xmlns:db="http://docbook.org/ns/docbook">
  <xs:import namespace="http://www.w3.org/1999/xlink" schemaLocation="xlink.xsd"/>
  <xs:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="xml.xsd"/>

  <xs:annotation xmlns:s="http://purl.oclc.org/dsdl/schematron">
    <xs:appinfo>
      <s:pattern name="Only one kind of linking per element">
        <!-- "and" in the context is intentional -->
        <s:rule context="db:*[@linkend and @xlink:*]">
          <s:assert test="not(@linkend) or not(@xlink:*)"
                    >@linkend cannot be combined with XLink.</s:assert>
        </s:rule>
      </s:pattern>
    </xs:appinfo>
  </xs:annotation>

  <xs:attributeGroup name="effectivity.attributes">
    <xs:attribute name="arch"/>
    <xs:attribute name="audience"/>
    <xs:attribute name="condition"/>
    <xs:attribute name="conformance"/>
    <xs:attribute name="os"/>
    <xs:attribute name="revision"/>
    <xs:attribute name="security"/>
    <xs:attribute name="userlevel"/>
    <xs:attribute name="vendor"/>
    <xs:attribute name="wordsize"/>
  </xs:attributeGroup>

  <xs:attributeGroup name="common.attributes">
    <xs:attribute ref="xml:id"/>
    <xs:attribute ref="xml:lang"/>
    <xs:attribute ref="xml:base"/>
    <xs:attribute name="version"/>
    <xs:attribute name="remap"/>
    <xs:attribute name="xreflabel"/>
    <xs:attribute name="revisionflag">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="changed"/>
          <xs:enumeration value="added"/>
          <xs:enumeration value="deleted"/>
          <xs:enumeration value="off"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="dir">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="ltr"/>
          <xs:enumeration value="rtl"/>
          <xs:enumeration value="lro"/>
          <xs:enumeration value="rlo"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attributeGroup ref="db:effectivity.attributes"/>
    <xs:attribute name="annotations"/>
  </xs:attributeGroup>

  <xs:attributeGroup name="common.idreq.attributes">
    <xs:attribute ref="xml:id" use="required"/>
    <xs:attribute ref="xml:lang"/>
    <xs:attribute ref="xml:base"/>
    <xs:attribute name="version"/>
    <xs:attribute name="remap"/>
    <xs:attribute name="xreflabel"/>
    <xs:attribute name="revisionflag">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="changed"/>
          <xs:enumeration value="added"/>
          <xs:enumeration value="deleted"/>
          <xs:enumeration value="off"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="dir">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="ltr"/>
          <xs:enumeration value="rtl"/>
          <xs:enumeration value="lro"/>
          <xs:enumeration value="rlo"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attributeGroup ref="db:effectivity.attributes"/>
    <xs:attribute name="annotations"/>
  </xs:attributeGroup>

  <xs:attributeGroup name="common.linking.attributes">
    <xs:attribute name="linkend" type="xs:IDREF"/>
    <xs:attribute ref="xlink:href"/>
    <xs:attribute ref="xlink:type"/>
    <xs:attribute ref="xlink:role"/>
    <xs:attribute ref="xlink:arcrole"/>
    <xs:attribute ref="xlink:title"/>
    <xs:attribute ref="xlink:show"/>
    <xs:attribute ref="xlink:actuate"/>
  </xs:attributeGroup>

  <!-- Note: Can't test that linkend or href required; use schematron -->
  <xs:attributeGroup name="common.req.linking.attributes">
    <xs:attribute name="linkend" type="xs:IDREF"/>
    <xs:attribute ref="xlink:href"/>
    <xs:attribute ref="xlink:type"/>
    <xs:attribute ref="xlink:role"/>
    <xs:attribute ref="xlink:arcrole"/>
    <xs:attribute ref="xlink:title"/>
    <xs:attribute ref="xlink:show"/>
    <xs:attribute ref="xlink:actuate"/>
  </xs:attributeGroup>

  <xs:attributeGroup name="common.data.attributes">
    <xs:attribute name="format"/>
    <xs:attribute name="fileref" type="xs:anyURI"/>
    <xs:attribute name="entityref" type="xs:ENTITY"/>
  </xs:attributeGroup>

  <xs:group name="all.inlines">
    <xs:choice>
      <xs:group ref="db:ubiq.inlines"/>
      <xs:group ref="db:general.inlines"/>
      <xs:group ref="db:domain.inlines"/>
    </xs:choice>
  </xs:group>

  <xs:group name="ubiq.inlines">
    <xs:choice>
      <xs:element ref="db:phrase"/>
      <xs:element ref="db:inlinemediaobject"/>
      <xs:element ref="db:remark"/>
      <xs:element ref="db:superscript"/>
      <xs:element ref="db:subscript"/>
      <xs:group ref="db:link.inlines"/>
      <xs:element ref="db:alt"/>
      <xs:element ref="db:annotation"/>
      <!-- ambig <xs:element ref="db:indexterm"/> -->
    </xs:choice>
  </xs:group>

  <xs:group name="_text">
    <xs:sequence>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:group ref="db:ubiq.inlines"/>
        <xs:element ref="db:replaceable"/>
      </xs:choice>
    </xs:sequence>
  </xs:group>

  <xs:group name="general.inlines">
    <xs:choice>
      <xs:group ref="db:publishing.inlines"/>
      <xs:group ref="db:product.inlines"/>
      <xs:group ref="db:bibliography.inlines"/>
      <!-- ubiq: <xs:group ref="db:graphic.inlines"/> -->
      <xs:group ref="db:indexing.inlines"/>
      <!-- ubiq: <xs:group ref="db:link.inlines"/> -->
    </xs:choice>
  </xs:group>

  <xs:group name="domain.inlines">
    <xs:choice>
      <xs:group ref="db:technical.inlines"/>
      <xs:group ref="db:math.inlines"/>
      <xs:group ref="db:markup.inlines"/>
      <xs:group ref="db:gui.inlines"/>
      <xs:group ref="db:keyboard.inlines"/>
      <xs:group ref="db:os.inlines"/>
      <xs:group ref="db:programming.inlines"/>
      <xs:group ref="db:error.inlines"/>
    </xs:choice>
  </xs:group>

  <xs:group name="technical.inlines">
    <xs:choice>
      <xs:element ref="db:replaceable"/>
      <xs:element ref="db:package"/>
      <xs:element ref="db:parameter"/>
      <xs:element ref="db:termdef"/>
      <xs:element ref="db:nonterminal"/>
      <xs:element ref="db:systemitem"/>
      <xs:element ref="db:option"/>
      <xs:element ref="db:optional"/>
      <xs:element ref="db:property"/>
    </xs:choice>
  </xs:group>

  <xs:group name="product.inlines">
    <xs:choice>
      <xs:element ref="db:trademark"/>
      <xs:element ref="db:productnumber"/>
      <xs:element ref="db:productname"/>
      <xs:element ref="db:database"/>
      <xs:element ref="db:application"/>
      <xs:element ref="db:hardware"/>
    </xs:choice>
  </xs:group>

  <xs:group name="bibliography.inlines">
    <xs:choice>
      <xs:element ref="db:citation"/>
      <xs:element ref="db:citerefentry"/>
      <xs:element ref="db:citetitle"/>
      <xs:element ref="db:citebiblioid"/>
      <xs:element ref="db:author"/>
      <xs:element ref="db:person"/>
      <xs:element ref="db:personname"/>
      <xs:element ref="db:org"/>
      <xs:element ref="db:orgname"/>
      <xs:element ref="db:editor"/>
      <xs:element ref="db:jobtitle"/>
    </xs:choice>
  </xs:group>

  <xs:group name="publishing.inlines">
    <xs:choice>
      <xs:element ref="db:abbrev"/>
      <xs:element ref="db:acronym"/>
      <xs:element ref="db:date"/>
      <xs:element ref="db:emphasis"/>
      <xs:element ref="db:footnote"/>
      <xs:element ref="db:footnoteref"/>
      <xs:element ref="db:foreignphrase"/>
      <!-- ubiq: <xs:element ref="db:phrase"/> -->
      <xs:element ref="db:quote"/>
      <!-- ubiq: <xs:element ref="db:subscript"/> -->
      <!-- ubiq: <xs:element ref="db:superscript"/> -->
      <xs:element ref="db:wordasword"/>
      <xs:group ref="db:glossary.inlines"/>
      <xs:element ref="db:coref"/> <!-- ??? really !!! -->
    </xs:choice>
  </xs:group>

  <xs:group name="programming.inlines">
    <xs:choice>
      <xs:element ref="db:function"/>
      <!-- technical.inlines: <xs:element ref="db:parameter"/> -->
      <xs:element ref="db:varname"/>
      <xs:element ref="db:returnvalue"/>
      <xs:element ref="db:type"/>
      <xs:element ref="db:classname"/>
      <xs:element ref="db:exceptionname"/>
      <xs:element ref="db:interfacename"/>
      <xs:element ref="db:methodname"/>
      <xs:element ref="db:modifier"/>
      <xs:element ref="db:initializer"/>
      <xs:group ref="db:oo.inlines"/>
    </xs:choice>
  </xs:group>

  <xs:group name="oo.inlines">
    <xs:choice>
      <xs:element ref="db:ooclass"/>
      <xs:element ref="db:ooexception"/>
      <xs:element ref="db:oointerface"/>
    </xs:choice>
  </xs:group>

  <!-- ubiq: <xs:element ref="db:inlinemediaobject"/>
  <xs:group name="graphic.inlines">
    <xs:choice>
      <xs:element ref="db:inlinemediaobject"/>
    </xs:choice>
  </xs:group>
  -->

  <xs:group name="indexing.inlines">
    <xs:choice>
      <xs:element ref="db:indexterm"/>
    </xs:choice>
  </xs:group>

  <xs:group name="link.inlines">
    <xs:choice>
      <xs:element ref="db:xref"/>
      <xs:element ref="db:link"/>
      <xs:element ref="db:olink"/>
      <xs:element ref="db:anchor"/>
    </xs:choice>
  </xs:group>

  <xs:group name="nopara.blocks">
    <xs:choice>
      <xs:group ref="db:list.blocks"/>
      <xs:group ref="db:formal.blocks"/>
      <xs:group ref="db:informal.blocks"/>
      <xs:group ref="db:publishing.blocks"/>
      <xs:group ref="db:graphic.blocks"/>
      <xs:group ref="db:technical.blocks"/>
      <xs:group ref="db:verbatim.blocks"/>
      <xs:element ref="db:bridgehead"/>
      <!-- ubiq: <xs:element ref="db:remark"/> -->
      <xs:element ref="db:revhistory"/>
      <xs:group ref="db:synopsis.blocks"/>
      <xs:group ref="db:admonition.blocks"/>
    </xs:choice>
  </xs:group>

  <xs:group name="para.blocks">
    <xs:choice>
      <!-- link.inlines: <xs:element ref="db:anchor"/> -->
      <xs:element ref="db:para"/>
      <xs:element ref="db:formalpara"/>
      <xs:element ref="db:simpara"/>
    </xs:choice>
  </xs:group>

  <xs:group name="all.blocks">
    <xs:choice>
      <xs:group ref="db:nopara.blocks"/>
      <xs:element ref="db:remark"/> <!-- because it can't be in nopara.blocks -->
      <xs:group ref="db:para.blocks"/>
      <xs:element ref="db:annotation"/>
      <xs:element ref="db:indexterm"/>
    </xs:choice>
  </xs:group>

  <xs:group name="all-i.blocks">
    <xs:choice>
      <xs:group ref="db:nopara.blocks"/>
      <xs:group ref="db:para.blocks"/>
    </xs:choice>
  </xs:group>

  <xs:group name="formal.blocks">
    <xs:choice>
      <xs:element ref="db:example"/>
      <xs:element ref="db:figure"/>
      <xs:element ref="db:table"/>
      <xs:element ref="db:equation"/>
    </xs:choice>
  </xs:group>

  <xs:group name="informal.blocks">
    <xs:choice>
      <xs:element ref="db:informalexample"/>
      <xs:element ref="db:informalfigure"/>
      <xs:element ref="db:informaltable"/>
      <xs:element ref="db:informalequation"/>
    </xs:choice>
  </xs:group>

  <xs:group name="publishing.blocks">
    <xs:choice>
      <xs:element ref="db:sidebar"/>
      <xs:element ref="db:blockquote"/>
      <xs:element ref="db:address"/>
      <xs:element ref="db:epigraph"/>
    </xs:choice>
  </xs:group>

  <xs:group name="graphic.blocks">
    <xs:choice>
      <xs:element ref="db:mediaobject"/>
      <xs:element ref="db:screenshot"/>
    </xs:choice>
  </xs:group>

  <xs:group name="technical.blocks">
    <xs:choice>
      <xs:element ref="db:procedure"/>
      <xs:element ref="db:task"/>
      <xs:element ref="db:productionset"/>
      <xs:element ref="db:constraintdef"/>
      <xs:element ref="db:msgset"/>
    </xs:choice>
  </xs:group>

  <xs:group name="synopsis.blocks">
    <xs:choice>
      <xs:element ref="db:funcsynopsis"/>
      <xs:element ref="db:classsynopsis"/>
      <xs:element ref="db:methodsynopsis"/>
      <xs:element ref="db:constructorsynopsis"/>
      <xs:element ref="db:destructorsynopsis"/>
      <xs:element ref="db:fieldsynopsis"/>
      <xs:element ref="db:cmdsynopsis"/>
    </xs:choice>
  </xs:group>

  <xs:group name="list.blocks">
    <xs:choice>
      <xs:element ref="db:itemizedlist"/>
      <xs:element ref="db:orderedlist"/>
      <!-- technical.blocks: <xs:element ref="db:procedure"/> -->
      <xs:element ref="db:simplelist"/>
      <xs:element ref="db:variablelist"/>
      <xs:element ref="db:segmentedlist"/>
      <xs:element ref="db:glosslist"/>
      <xs:element ref="db:bibliolist"/>
      <xs:element ref="db:calloutlist"/>
      <xs:element ref="db:qandaset"/>
    </xs:choice>
  </xs:group>

  <xs:group name="verbatim.blocks">
    <xs:choice>
      <xs:element ref="db:screen"/>
      <xs:element ref="db:literallayout"/>
      <xs:element ref="db:programlistingco"/>
      <xs:element ref="db:screenco"/>
      <xs:element ref="db:programlisting"/>
      <xs:element ref="db:synopsis"/>
    </xs:choice>
  </xs:group>

  <xs:group name="admonition.blocks">
    <xs:choice>
      <xs:element ref="db:caution"/>
      <xs:element ref="db:important"/>
      <xs:element ref="db:note"/>
      <xs:element ref="db:tip"/>
      <xs:element ref="db:warning"/>
    </xs:choice>
  </xs:group>

  <xs:group name="info.elements">
    <xs:choice>
      <xs:element ref="db:abstract"/>
      <xs:element ref="db:address"/>
      <xs:element ref="db:artpagenums"/>
      <xs:element ref="db:author"/>
      <xs:element ref="db:authorgroup"/>
      <xs:element ref="db:authorinitials"/>
      <xs:element ref="db:bibliocoverage"/>
      <xs:element ref="db:biblioid"/>
      <xs:element ref="db:bibliosource"/>
      <xs:element ref="db:collab"/>
      <xs:element ref="db:confgroup"/>
      <xs:element ref="db:contractsponsor"/>
      <xs:element ref="db:contractnum"/>
      <xs:element ref="db:copyright"/>
      <xs:element ref="db:cover"/>
      <xs:element ref="db:date"/>
      <xs:element ref="db:edition"/>
      <xs:element ref="db:editor"/>
      <xs:element ref="db:issuenum"/>
      <xs:element ref="db:keywordset"/>
      <xs:element ref="db:legalnotice"/>
      <xs:element ref="db:mediaobject"/>
      <xs:element ref="db:org"/>
      <xs:element ref="db:orgname"/>
      <xs:element ref="db:othercredit"/>
      <xs:element ref="db:pagenums"/>
      <xs:element ref="db:printhistory"/>
      <xs:element ref="db:pubdate"/>
      <xs:element ref="db:publisher"/>
      <xs:element ref="db:publishername"/>
      <xs:element ref="db:releaseinfo"/>
      <xs:element ref="db:revhistory"/>
      <xs:element ref="db:seriesvolnums"/>
      <xs:element ref="db:subjectset"/>
      <xs:element ref="db:volumenum"/>
      <xs:element ref="db:annotation"/>
      <xs:element ref="db:extendedlink"/>
      <xs:element ref="db:bibliomisc"/>
      <xs:element ref="db:bibliomset"/>
      <xs:element ref="db:bibliorelation"/>
      <xs:element ref="db:biblioset"/>
      <xs:element ref="db:itermset"/>
      <xs:element ref="db:productname"/>
      <xs:element ref="db:productnumber"/>
    </xs:choice>
  </xs:group>

  <xs:group name="bibliographic.elements">
    <xs:choice>
      <xs:group ref="db:info.elements"/>

      <!-- This should be publishing.inlines, but there are ambiguity problems -->
      <xs:element ref="db:abbrev"/>
      <xs:element ref="db:acronym"/>
      <xs:element ref="db:emphasis"/>
      <xs:element ref="db:footnote"/>
      <xs:element ref="db:footnoteref"/>
      <xs:element ref="db:foreignphrase"/>
      <xs:element ref="db:quote"/>
      <xs:element ref="db:subscript"/>
      <xs:element ref="db:superscript"/>
      <xs:element ref="db:wordasword"/>

      <xs:element ref="db:citerefentry"/>
      <xs:element ref="db:citetitle"/>
      <xs:element ref="db:citebiblioid"/>
      <xs:element ref="db:person"/>
      <xs:element ref="db:personblurb"/>
      <xs:element ref="db:personname"/>
      <xs:element ref="db:subtitle"/>
      <xs:element ref="db:title"/>
      <xs:element ref="db:titleabbrev"/>
    </xs:choice>
  </xs:group>

  <!-- ============================================================ -->

  <xs:complexType name="inline.type" mixed="true">
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:group ref="db:all.inlines"/>
    </xs:choice>
    <xs:attribute name="role"/>
    <xs:attributeGroup ref="db:common.attributes"/>
    <xs:attributeGroup ref="db:common.linking.attributes"/>
  </xs:complexType>

  <xs:complexType name="block.type" mixed="true">
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:group ref="db:all.blocks"/>
    </xs:choice>
    <xs:attribute name="role"/>
    <xs:attributeGroup ref="db:common.attributes"/>
    <xs:attributeGroup ref="db:common.linking.attributes"/>
  </xs:complexType>

  <!-- ============================================================ -->

  <xs:element name="title">
    <xs:complexType mixed="true">
      <xs:group ref="db:all.inlines" minOccurs="0" maxOccurs="unbounded"/>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="titleabbrev">
    <xs:complexType mixed="true">
      <xs:group ref="db:all.inlines" minOccurs="0"/>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="subtitle">
    <xs:complexType mixed="true">
      <xs:group ref="db:all.inlines" minOccurs="0"/>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
    </xs:complexType>
  </xs:element>

  <xs:group name="_info.title.only">
    <xs:sequence>
      <xs:choice minOccurs="0" maxOccurs="2">
        <xs:element ref="db:title"/>
        <xs:element ref="db:titleabbrev"/>
      </xs:choice>
      <xs:element name="info" minOccurs="0">
        <xs:complexType>
          <xs:choice minOccurs="0" maxOccurs="unbounded">
            <xs:choice>
              <xs:element ref="db:title"/>
              <xs:element ref="db:titleabbrev"/>
            </xs:choice>
            <xs:group ref="db:info.elements"/>
            <xs:any namespace="##other" processContents="skip"/>
          </xs:choice>
          <xs:attribute name="role"/>
          <xs:attributeGroup ref="db:common.attributes"/>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:group>

  <!-- No way to enforce that title is required -->
  <xs:group name="_info.title.onlyreq">
    <xs:sequence>
      <xs:choice minOccurs="0" maxOccurs="2">
        <xs:element ref="db:title"/>
        <xs:element ref="db:titleabbrev"/>
      </xs:choice>
      <xs:element name="info" minOccurs="0">
        <xs:complexType>
          <xs:choice minOccurs="0" maxOccurs="unbounded">
            <xs:choice>
              <xs:element ref="db:title"/>
              <xs:element ref="db:titleabbrev"/>
            </xs:choice>
            <xs:group ref="db:info.elements"/>
            <xs:any namespace="##other" processContents="skip"/>
          </xs:choice>
          <xs:attribute name="role"/>
          <xs:attributeGroup ref="db:common.attributes"/>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:group>

  <!-- No way to enforce that title is required -->
  <xs:group name="_info.title.req">
    <xs:sequence>
      <xs:choice minOccurs="0" maxOccurs="3">
        <xs:element ref="db:title"/>
        <xs:element ref="db:titleabbrev"/>
        <xs:element ref="db:subtitle"/>
      </xs:choice>
      <xs:element name="info" minOccurs="0">
        <xs:complexType>
          <xs:choice minOccurs="0" maxOccurs="unbounded">
            <xs:choice>
              <xs:element ref="db:title"/>
              <xs:element ref="db:titleabbrev"/>
              <xs:element ref="db:subtitle"/>
            </xs:choice>
            <xs:group ref="db:info.elements"/>
            <xs:any namespace="##other" processContents="skip"/>
          </xs:choice>
          <xs:attribute name="role"/>
          <xs:attributeGroup ref="db:common.attributes"/>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:group>

  <!-- No way to enforce that info must not contain a title -->
  <xs:group name="_info.title.forbidden">
    <xs:sequence>
      <xs:element name="info" minOccurs="0">
        <xs:complexType>
          <xs:choice minOccurs="0" maxOccurs="unbounded">
            <xs:group ref="db:info.elements"/>
            <xs:any namespace="##other" processContents="skip"/>
          </xs:choice>
          <xs:attribute name="role"/>
          <xs:attributeGroup ref="db:common.attributes"/>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:group>

  <xs:group name="_info">
    <xs:sequence>
      <xs:choice minOccurs="0" maxOccurs="3">
        <xs:element ref="db:title"/>
        <xs:element ref="db:titleabbrev"/>
        <xs:element ref="db:subtitle"/>
      </xs:choice>
      <xs:element name="info" minOccurs="0">
        <xs:complexType>
          <xs:choice minOccurs="0" maxOccurs="unbounded">
            <xs:element ref="db:title"/>
            <xs:element ref="db:titleabbrev"/>
            <xs:element ref="db:subtitle"/>
            <xs:group ref="db:info.elements"/>
            <xs:any namespace="##other" processContents="skip"/>
          </xs:choice>
          <xs:attribute name="role"/>
          <xs:attributeGroup ref="db:common.attributes"/>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:group>

  <xs:element name="subjectset">
    <xs:complexType>
      <xs:choice maxOccurs="unbounded">
        <xs:element ref="db:subject"/>
      </xs:choice>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
      <xs:attribute name="scheme" type="xs:NMTOKEN"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="subject">
    <xs:complexType>
      <xs:choice maxOccurs="unbounded">
        <xs:element ref="db:subjectterm"/>
      </xs:choice>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
      <xs:attribute name="weight"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="subjectterm">
    <xs:complexType mixed="true">
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="keywordset">
    <xs:complexType>
      <xs:choice maxOccurs="unbounded">
        <xs:element ref="db:keyword"/>
      </xs:choice>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="keyword">
    <xs:complexType mixed="true">
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
    </xs:complexType>
  </xs:element>

  <xs:attributeGroup name="orient.attribute">
    <xs:attribute name="orient">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="land"/>
          <xs:enumeration value="port"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
  </xs:attributeGroup>

  <xs:attributeGroup name="tabstyle.attribute">
    <xs:attribute name="tabstyle"/>
  </xs:attributeGroup>

  <xs:attributeGroup name="floatstyle.attribute">
    <xs:attribute name="floatstyle"/>
  </xs:attributeGroup>

  <xs:simpleType name="zeroorone.type">
    <xs:restriction base="xs:token">
      <xs:enumeration value="0"/>
      <xs:enumeration value="1"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:attributeGroup name="pgwide.attribute">
    <xs:attribute name="pgwide" type="db:zeroorone.type"/>
  </xs:attributeGroup>

  <xs:attributeGroup name="label.attribute">
    <xs:attribute name="label"/>
  </xs:attributeGroup>

  <xs:attributeGroup name="performance.attribute">
    <xs:attribute name="performance">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="optional"/>
          <xs:enumeration value="required"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
  </xs:attributeGroup>

  <xs:element name="procedure">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="db:_info.title.only" minOccurs="0"/>
        <xs:group ref="db:all.blocks" minOccurs="0" maxOccurs="unbounded"/>
        <xs:element ref="db:step" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="step">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="db:_info.title.only" minOccurs="0"/>
        <xs:group ref="db:all.blocks" minOccurs="0" maxOccurs="unbounded"/>
        <xs:sequence minOccurs="0">
          <xs:choice>
            <xs:element ref="db:substeps"/>
            <xs:element ref="db:stepalternatives"/>
          </xs:choice>
          <xs:group ref="db:all.blocks" minOccurs="0" maxOccurs="unbounded"/>
        </xs:sequence>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
      <xs:attributeGroup ref="db:performance.attribute"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="stepalternatives">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="db:_info.title.forbidden" minOccurs="0"/>
        <xs:element ref="db:step" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
      <xs:attributeGroup ref="db:performance.attribute"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="substeps">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="db:step" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
      <xs:attributeGroup ref="db:performance.attribute"/>
    </xs:complexType>
  </xs:element>

  <xs:complexType name="block.container">
    <xs:sequence>
      <xs:group ref="db:_info.title.only" minOccurs="0"/>
      <xs:group ref="db:all.blocks" maxOccurs="unbounded"/>
    </xs:sequence>
    <xs:attribute name="role"/>
    <xs:attributeGroup ref="db:common.attributes"/>
    <xs:attributeGroup ref="db:common.linking.attributes"/>
  </xs:complexType>

  <xs:complexType name="para.container">
    <xs:sequence>
      <xs:group ref="db:_info.title.only" minOccurs="0"/>
      <xs:group ref="db:para.blocks" maxOccurs="unbounded"/>
    </xs:sequence>
    <xs:attribute name="role"/>
    <xs:attributeGroup ref="db:common.attributes"/>
    <xs:attributeGroup ref="db:common.linking.attributes"/>
  </xs:complexType>

  <xs:element name="sidebar" type="db:block.container"/>
  <xs:element name="abstract" type="db:para.container"/>
  <xs:element name="personblurb" type="db:para.container"/>

  <xs:element name="blockquote">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="db:_info.title.only" minOccurs="0"/>
        <xs:element ref="db:attribution" minOccurs="0"/>
        <xs:group ref="db:all.blocks" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="attribution">
    <xs:complexType mixed="true">
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element ref="db:person"/>
        <xs:element ref="db:personname"/>
        <xs:element ref="db:citetitle"/>
        <xs:element ref="db:citation"/>
      </xs:choice>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="bridgehead">
    <xs:complexType mixed="true">
      <xs:sequence>
        <xs:group ref="db:all.inlines" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
      <xs:attribute name="renderas">
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="sect1"/>
            <xs:enumeration value="sect2"/>
            <xs:enumeration value="sect3"/>
            <xs:enumeration value="sect4"/>
            <xs:enumeration value="sect5"/>
            <xs:enumeration value="other"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
      <xs:attribute name="otherrenderas" type="xs:NMTOKEN"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="remark">
    <xs:complexType mixed="true">
      <xs:group ref="db:all.inlines" minOccurs="0" maxOccurs="unbounded"/>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="epigraph">
    <xs:complexType>
      <xs:sequence>
      <xs:group ref="db:_info.title.forbidden" minOccurs="0"/>
      <xs:element ref="db:attribution"/>
      <xs:choice maxOccurs="unbounded">
        <xs:group ref="db:para.blocks"/>
        <xs:element ref="db:literallayout"/>
      </xs:choice>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="footnote">
    <xs:complexType>
      <xs:group ref="db:all.blocks" maxOccurs="unbounded"/>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
      <xs:attributeGroup ref="db:label.attribute"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="formalpara">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="db:_info.title.onlyreq"/>
        <xs:group ref="db:indexing.inlines" minOccurs="0" maxOccurs="unbounded"/>
        <xs:element ref="db:para"/>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="para">
    <xs:complexType mixed="true">
      <xs:sequence>
        <xs:group ref="db:_info.title.forbidden" minOccurs="0"/>
        <xs:choice minOccurs="0" maxOccurs="unbounded">
          <xs:group ref="db:all.inlines"/>
          <xs:group ref="db:nopara.blocks"/>
        </xs:choice>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="simpara">
    <xs:complexType mixed="true">
      <xs:sequence>
        <xs:group ref="db:_info.title.forbidden" minOccurs="0"/>
        <xs:choice minOccurs="0" maxOccurs="unbounded">
          <xs:group ref="db:all.inlines"/>
        </xs:choice>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
    </xs:complexType>
  </xs:element>

  <xs:attributeGroup name="spacing.attribute">
    <xs:attribute name="spacing">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="compact"/>
          <xs:enumeration value="normal"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
  </xs:attributeGroup>

  <xs:element name="itemizedlist">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="db:_info.title.only" minOccurs="0"/>
        <xs:group ref="db:all.blocks" minOccurs="0"/>
        <xs:element ref="db:listitem" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
      <xs:attribute name="mark" type="xs:NMTOKEN"/>
      <xs:attributeGroup ref="db:spacing.attribute"/>
    </xs:complexType>
  </xs:element>

  <xs:attributeGroup name="continuation.attribute">
    <xs:attribute name="continuation">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="continues"/>
          <xs:enumeration value="restarts"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
  </xs:attributeGroup>

  <xs:attributeGroup name="startingnumber.attribute">
    <xs:attribute name="startingnumber" type="xs:integer"/>
  </xs:attributeGroup>

  <xs:attributeGroup name="inheritnum.attribute">
    <xs:attribute name="inheritnum">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="ignore"/>
          <xs:enumeration value="inherit"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
  </xs:attributeGroup>

  <xs:attributeGroup name="numeration.attribute">
    <xs:attribute name="numeration">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="arabic"/>
          <xs:enumeration value="upperalpha"/>
          <xs:enumeration value="loweralpha"/>
          <xs:enumeration value="upperroman"/>
          <xs:enumeration value="lowerroman"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
  </xs:attributeGroup>

  <xs:element name="orderedlist">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="db:_info.title.only" minOccurs="0"/>
        <xs:group ref="db:all.blocks" minOccurs="0" maxOccurs="unbounded"/>
        <xs:element ref="db:listitem" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
      <xs:attributeGroup ref="db:spacing.attribute"/>
      <xs:attributeGroup ref="db:continuation.attribute"/>
      <xs:attributeGroup ref="db:startingnumber.attribute"/>
      <xs:attributeGroup ref="db:inheritnum.attribute"/>
      <xs:attributeGroup ref="db:numeration.attribute"/>
      <xs:assert test="not(@startingnumber and @continuation)">
        <xs:annotation>
          <xs:documentation>List numeration can only be specified with @startingnumber or @continuation, not both</xs:documentation>
        </xs:annotation>
      </xs:assert>
    </xs:complexType>
  </xs:element>

  <xs:element name="listitem">
    <xs:complexType>
      <xs:group ref="db:all.blocks" maxOccurs="unbounded"/>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
      <xs:attribute name="override" type="xs:NMTOKEN"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="segmentedlist">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="db:_info.title.only" minOccurs="0"/>
        <xs:element ref="db:segtitle" maxOccurs="unbounded"/>
        <xs:element ref="db:seglistitem" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="segtitle">
    <xs:complexType mixed="true">
      <xs:group ref="db:all.inlines" minOccurs="0" maxOccurs="unbounded"/>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="seglistitem">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="db:seg" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="seg">
    <xs:complexType mixed="true">
      <xs:group ref="db:all.inlines" minOccurs="0" maxOccurs="unbounded"/>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="simplelist">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="db:member" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
      <xs:attribute name="type">
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="horiz"/>
            <xs:enumeration value="vert"/>
            <xs:enumeration value="inline"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
      <xs:attribute name="columns" type="xs:integer"/>
      <xs:assert test="not(@columns) or not(@type) or (@type != 'inline')">
        <xs:annotation>
          <xs:documentation>Inline simple lists cannot have @columns</xs:documentation>
        </xs:annotation>
      </xs:assert>
    </xs:complexType>
  </xs:element>

  <xs:element name="member">
    <xs:complexType mixed="true">
      <xs:group ref="db:all.inlines" minOccurs="0" maxOccurs="unbounded"/>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="variablelist">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="db:_info.title.only" minOccurs="0"/>
        <xs:group ref="db:all.blocks" minOccurs="0" maxOccurs="unbounded"/>
        <xs:element ref="db:varlistentry" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
      <xs:attributeGroup ref="db:spacing.attribute"/>
      <xs:attribute name="termlength"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="varlistentry">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="db:term" maxOccurs="unbounded"/>
        <xs:element ref="db:listitem"/>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="term">
    <xs:complexType mixed="true">
      <xs:group ref="db:all.inlines" minOccurs="0" maxOccurs="unbounded"/>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="example">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="db:_info.title.onlyreq"/>
        <xs:group ref="db:all.blocks" maxOccurs="unbounded"/>
        <xs:element ref="db:caption" minOccurs="0"/>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
      <xs:attributeGroup ref="db:label.attribute"/>
      <xs:attributeGroup ref="db:floatstyle.attribute"/>
      <xs:attributeGroup ref="db:pgwide.attribute"/>
      <xs:attribute name="width" type="xs:nonNegativeInteger"/>
      <xs:assert test="not(@width and @pgwide)">
        <xs:annotation>
          <xs:documentation>Only one of @width or @pgwide may be specified.</xs:documentation>
        </xs:annotation>
      </xs:assert>
    </xs:complexType>
  </xs:element>

  <xs:element name="informalexample">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="db:_info.title.forbidden"/>
        <xs:group ref="db:all.blocks"/>
        <xs:element ref="db:caption" minOccurs="0"/>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
      <xs:attributeGroup ref="db:floatstyle.attribute"/>
      <xs:attributeGroup ref="db:pgwide.attribute"/>
      <xs:attribute name="width" type="xs:nonNegativeInteger"/>
      <xs:assert test="not(@width and @pgwide)">
        <xs:annotation>
          <xs:documentation>Only one of @width or @pgwide may be specified.</xs:documentation>
        </xs:annotation>
      </xs:assert>
    </xs:complexType>
  </xs:element>

  <xs:group name="verbatim.inlines">
    <xs:choice>
      <xs:group ref="db:all.inlines"/>
      <xs:element ref="db:lineannotation"/>
      <xs:element ref="db:co"/>
    </xs:choice>
  </xs:group>

  <xs:group name="verbatim.contentmodel">
    <xs:sequence>
      <xs:group ref="db:_info.title.forbidden"/>
      <xs:choice>
        <xs:element ref="db:textobject"/>
        <xs:group ref="db:verbatim.inlines" minOccurs="0" maxOccurs="unbounded"/>
      </xs:choice>
    </xs:sequence>
  </xs:group>

  <xs:attributeGroup name="verbatim.continuation.attribute">
    <xs:attribute name="continuation">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="continues"/>
          <xs:enumeration value="restart"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
  </xs:attributeGroup>

  <xs:attributeGroup name="verbatim.linenumbering.attribute">
    <xs:attribute name="linenumbering">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="numbered"/>
          <xs:enumeration value="unnumbered"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
  </xs:attributeGroup>

  <xs:attributeGroup name="verbatim.startinglinenumber.attribute">
    <xs:attribute name="startinglinenumber" type="xs:integer"/>
  </xs:attributeGroup>

  <xs:attributeGroup name="verbatim.language.attribute">
    <xs:attribute name="language"/>
  </xs:attributeGroup>

  <xs:attributeGroup name="verbatim.attributes">
    <xs:attributeGroup ref="db:verbatim.continuation.attribute"/>
    <xs:attributeGroup ref="db:verbatim.linenumbering.attribute"/>
    <xs:attributeGroup ref="db:verbatim.startinglinenumber.attribute"/>
    <xs:attributeGroup ref="db:verbatim.language.attribute"/>
    <xs:attribute ref="xml:space"/>
  </xs:attributeGroup>

  <xs:element name="literallayout">
    <xs:complexType mixed="true">
      <xs:group ref="db:verbatim.contentmodel"/>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
      <xs:attributeGroup ref="db:verbatim.attributes"/>
      <xs:attribute name="class">
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="monospaced"/>
            <xs:enumeration value="normal"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
      <xs:assert test="not(@xml:space) or @xml:space='preserve'">
        <xs:annotation>
          <xs:documentation>In literallayout, @xml:space must be 'preserve'</xs:documentation>
        </xs:annotation>
      </xs:assert>
    </xs:complexType>
  </xs:element>

  <xs:complexType name="verbatim.monospaced" mixed="true">
    <xs:group ref="db:verbatim.contentmodel"/>
    <xs:attribute name="role"/>
    <xs:attributeGroup ref="db:common.attributes"/>
    <xs:attributeGroup ref="db:common.linking.attributes"/>
    <xs:attributeGroup ref="db:verbatim.attributes"/>
    <xs:attribute name="width" type="xs:nonNegativeInteger"/>
  </xs:complexType>

  <xs:element name="screen">
    <xs:complexType mixed="true">
      <xs:complexContent>
        <xs:extension base="db:verbatim.monospaced">
          <xs:assert test="not(@xml:space) or @xml:space='preserve'">
            <xs:annotation>
              <xs:documentation>In screen, @xml:space must be 'preserve'</xs:documentation>
            </xs:annotation>
          </xs:assert>
        </xs:extension>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>

  <xs:element name="programlisting">
    <xs:complexType mixed="true">
      <xs:complexContent>
        <xs:extension base="db:verbatim.monospaced">
          <xs:assert test="not(@xml:space) or @xml:space='preserve'">
            <xs:annotation>
              <xs:documentation>In programlisting, @xml:space must be 'preserve'</xs:documentation>
            </xs:annotation>
          </xs:assert>
        </xs:extension>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>

  <xs:element name="lineannotation">
    <xs:complexType mixed="true">
      <xs:sequence>
        <xs:group ref="db:ubiq.inlines" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
    </xs:complexType>
  </xs:element>

  <xs:attributeGroup name="linkends.attribute">
    <xs:attribute name="linkends" type="xs:IDREFS"/>
  </xs:attributeGroup>

  <xs:attributeGroup name="co.linkends.attribute">
    <xs:attributeGroup ref="db:linkends.attribute"/>
  </xs:attributeGroup>

  <xs:attributeGroup name="co.label.attribute">
    <xs:attributeGroup ref="db:label.attribute"/>
  </xs:attributeGroup>

  <xs:element name="co">
    <xs:complexType>
      <xs:complexContent>
        <xs:restriction base="xs:anyType">
          <xs:attribute name="role"/>
          <xs:attributeGroup ref="db:common.idreq.attributes"/>
          <xs:attributeGroup ref="db:co.linkends.attribute"/>
          <xs:attributeGroup ref="db:co.label.attribute"/>
        </xs:restriction>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>

  <xs:attributeGroup name="coref.label.attribute">
    <xs:attributeGroup ref="db:label.attribute"/>
  </xs:attributeGroup>

  <xs:element name="coref">
    <xs:complexType>
      <xs:complexContent>
        <xs:restriction base="xs:anyType">
          <xs:attribute name="role"/>
          <xs:attributeGroup ref="db:common.attributes"/>
          <xs:attribute name="linkend" type="xs:IDREF"/>
          <xs:attributeGroup ref="db:coref.label.attribute"/>
        </xs:restriction>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>

  <xs:element name="screenshot">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="db:_info" minOccurs="0"/>
        <xs:element ref="db:mediaobject"/>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="figure">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="db:_info.title.onlyreq"/>
        <xs:group ref="db:all.blocks" maxOccurs="unbounded"/>
        <xs:element ref="db:caption" minOccurs="0"/>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
      <xs:attributeGroup ref="db:label.attribute"/>
      <xs:attributeGroup ref="db:floatstyle.attribute"/>
      <xs:attributeGroup ref="db:pgwide.attribute"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="informalfigure">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="db:_info.title.forbidden" minOccurs="0"/>
        <xs:group ref="db:all.blocks" maxOccurs="unbounded"/>
        <xs:element ref="db:caption" minOccurs="0"/>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
      <xs:attributeGroup ref="db:label.attribute"/>
      <xs:attributeGroup ref="db:floatstyle.attribute"/>
      <xs:attributeGroup ref="db:pgwide.attribute"/>
    </xs:complexType>
  </xs:element>

  <xs:group name="mediaobject.content">
    <xs:choice>
      <xs:element ref="db:videoobject"/>
      <xs:element ref="db:audioobject"/>
      <xs:element ref="db:imageobject"/>
      <xs:element ref="db:textobject"/>
      <xs:element ref="db:imageobjectco"/>
    </xs:choice>
  </xs:group>

  <xs:element name="mediaobject">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="db:_info.title.forbidden" minOccurs="0"/>
        <xs:element ref="db:alt" minOccurs="0"/>
        <xs:group ref="db:mediaobject.content" maxOccurs="unbounded"/>
        <xs:element ref="db:caption" minOccurs="0"/>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="inlinemediaobject">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="db:_info.title.forbidden" minOccurs="0"/>
        <xs:element ref="db:alt" minOccurs="0"/>
        <xs:group ref="db:mediaobject.content" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="videoobject">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="db:_info.title.forbidden" minOccurs="0"/>
        <xs:element ref="db:videodata"/>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="audioobject">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="db:_info.title.forbidden" minOccurs="0"/>
        <xs:element ref="db:audiodata"/>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="imageobject">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="db:_info.title.forbidden" minOccurs="0"/>
        <xs:choice>
          <xs:element ref="db:imagedata"/>
          <xs:any namespace="http://www.w3.org/1998/Math/MathML" processContents="lax"/>
          <xs:any namespace="http://www.w3.org/2000/svg" processContents="lax"/>
        </xs:choice>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="textobject">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="db:_info.title.forbidden" minOccurs="0"/>
        <xs:choice>
          <xs:element ref="db:phrase"/>
          <xs:element ref="db:textdata"/>
          <xs:group ref="db:all.blocks" maxOccurs="unbounded"/>
        </xs:choice>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
    </xs:complexType>
  </xs:element>

  <xs:attributeGroup name="videodata.align.attribute">
    <xs:attributeGroup ref="db:align.attribute"/>
  </xs:attributeGroup>

  <xs:attributeGroup name="videodata.valign.attribute">
    <xs:attributeGroup ref="db:valign.attribute"/>
  </xs:attributeGroup>

  <xs:attributeGroup name="width.attribute">
    <xs:attribute name="width"/>
  </xs:attributeGroup>

  <xs:attributeGroup name="videodata.width.attribute">
    <xs:attributeGroup ref="db:width.attribute"/>
  </xs:attributeGroup>

  <xs:attributeGroup name="depth.attribute">
    <xs:attribute name="depth"/>
  </xs:attributeGroup>

  <xs:attributeGroup name="videodata.depth.attribute">
    <xs:attributeGroup ref="db:depth.attribute"/>
  </xs:attributeGroup>

  <xs:attributeGroup name="contentwidth.attribute">
    <xs:attribute name="contentwidth"/>
  </xs:attributeGroup>

  <xs:attributeGroup name="videodata.contentwidth.attribute">
    <xs:attributeGroup ref="db:contentwidth.attribute"/>
  </xs:attributeGroup>

  <xs:attributeGroup name="contentdepth.attribute">
    <xs:attribute name="contentdepth"/>
  </xs:attributeGroup>

  <xs:attributeGroup name="videodata.contentdepth.attribute">
    <xs:attributeGroup ref="db:contentdepth.attribute"/>
  </xs:attributeGroup>

  <xs:attributeGroup name="scalefit.attribute">
    <xs:attribute name="scalefit" type="db:zeroorone.type"/>
  </xs:attributeGroup>

  <xs:attributeGroup name="videodata.scalefit.attribute">
    <xs:attributeGroup ref="db:scalefit.attribute"/>
  </xs:attributeGroup>

  <xs:attributeGroup name="scale.attribute">
    <xs:attribute name="scale" type="xs:positiveInteger"/>
  </xs:attributeGroup>

  <xs:attributeGroup name="videodata.scale.attribute">
    <xs:attributeGroup ref="db:scale.attribute"/>
  </xs:attributeGroup>

  <xs:element name="videodata">
    <xs:complexType>
      <xs:group ref="db:_info.title.forbidden" minOccurs="0"/>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.data.attributes"/>
      <xs:attributeGroup ref="db:videodata.align.attribute"/>
      <xs:attributeGroup ref="db:videodata.valign.attribute"/>
      <xs:attributeGroup ref="db:videodata.width.attribute"/>
      <xs:attributeGroup ref="db:videodata.contentwidth.attribute"/>
      <xs:attributeGroup ref="db:videodata.scalefit.attribute"/>
      <xs:attributeGroup ref="db:videodata.scale.attribute"/>
      <xs:attributeGroup ref="db:videodata.depth.attribute"/>
      <xs:attributeGroup ref="db:videodata.contentdepth.attribute"/>
      <xs:assert test="@fileref or @entityref and not(@fileref and @entityref)">
        <xs:annotation>
          <xs:documentation>Only one of @fileref or @entityref may be specified</xs:documentation>
        </xs:annotation>
      </xs:assert>
    </xs:complexType>
  </xs:element>

  <xs:element name="audiodata">
    <xs:complexType>
      <xs:group ref="db:_info.title.forbidden" minOccurs="0"/>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.data.attributes"/>
      <xs:assert test="@fileref or @entityref and not(@fileref and @entityref)">
        <xs:annotation>
          <xs:documentation>Only one of @fileref or @entityref may be specified</xs:documentation>
        </xs:annotation>
      </xs:assert>
    </xs:complexType>
  </xs:element>

  <xs:attributeGroup name="imagedata.align.attribute">
    <xs:attributeGroup ref="db:align.attribute"/>
  </xs:attributeGroup>

  <xs:attributeGroup name="imagedata.valign.attribute">
    <xs:attributeGroup ref="db:valign.attribute"/>
  </xs:attributeGroup>

  <xs:attributeGroup name="imagedata.width.attribute">
    <xs:attributeGroup ref="db:width.attribute"/>
  </xs:attributeGroup>

  <xs:attributeGroup name="imagedata.depth.attribute">
    <xs:attributeGroup ref="db:depth.attribute"/>
  </xs:attributeGroup>

  <xs:attributeGroup name="imagedata.contentwidth.attribute">
    <xs:attributeGroup ref="db:contentwidth.attribute"/>
  </xs:attributeGroup>

  <xs:attributeGroup name="imagedata.contentdepth.attribute">
    <xs:attributeGroup ref="db:contentdepth.attribute"/>
  </xs:attributeGroup>

  <xs:attributeGroup name="imagedata.scalefit.attribute">
    <xs:attributeGroup ref="db:scalefit.attribute"/>
  </xs:attributeGroup>

  <xs:attributeGroup name="imagedata.scale.attribute">
    <xs:attributeGroup ref="db:scale.attribute"/>
  </xs:attributeGroup>

  <xs:element name="imagedata">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="db:_info.title.forbidden" minOccurs="0"/>
        <xs:any namespace="http://www.w3.org/2000/svg" processContents="lax"
                minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.data.attributes"/>
      <xs:attributeGroup ref="db:imagedata.align.attribute"/>
      <xs:attributeGroup ref="db:imagedata.valign.attribute"/>
      <xs:attributeGroup ref="db:imagedata.width.attribute"/>
      <xs:attributeGroup ref="db:imagedata.contentwidth.attribute"/>
      <xs:attributeGroup ref="db:imagedata.scalefit.attribute"/>
      <xs:attributeGroup ref="db:imagedata.scale.attribute"/>
      <xs:attributeGroup ref="db:imagedata.depth.attribute"/>
      <xs:attributeGroup ref="db:imagedata.contentdepth.attribute"/>
      <xs:assert test="(@fileref or @entityref and not(@fileref and @entityref))
                       or (not(@fileref) and not(@entityref))">
        <xs:annotation>
          <xs:documentation>Only one of @fileref or @entityref may be specified</xs:documentation>
        </xs:annotation>
      </xs:assert>
    </xs:complexType>
  </xs:element>

  <xs:element name="textdata">
    <xs:complexType>
      <xs:group ref="db:_info.title.forbidden" minOccurs="0"/>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.data.attributes"/>
      <xs:attribute name="encoding"/>
      <xs:assert test="@fileref or @entityref and not(@fileref and @entityref)">
        <xs:annotation>
          <xs:documentation>Only one of @fileref or @entityref may be specified</xs:documentation>
        </xs:annotation>
      </xs:assert>
    </xs:complexType>
  </xs:element>

  <xs:element name="caption">
    <xs:complexType mixed="true">
      <xs:sequence>
        <xs:group ref="db:_info.title.forbidden" minOccurs="0"/>
        <xs:choice>
          <xs:group ref="db:all.inlines" minOccurs="0" maxOccurs="unbounded"/>
          <xs:group ref="db:all-i.blocks" minOccurs="0" maxOccurs="unbounded"/>
        </xs:choice>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:html.attrs"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
    </xs:complexType>
  </xs:element>

  <xs:attributeGroup name="area.units.attribute">
    <xs:attribute name="units">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="calspair"/>
          <xs:enumeration value="linecolumn"/>
          <xs:enumeration value="linecolumnpair"/>
          <xs:enumeration value="linerange"/>
          <xs:enumeration value="other"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="otherunits" type="xs:NMTOKEN"/>
  </xs:attributeGroup>

  <xs:element name="calloutlist">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="db:_info.title.only" minOccurs="0"/>
        <xs:group ref="db:all.blocks" minOccurs="0"/>
        <xs:element ref="db:callout" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="callout">
    <xs:complexType>
      <xs:group ref="db:all.blocks" maxOccurs="unbounded"/>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attribute name="arearefs" type="xs:IDREFS"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="programlistingco">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="db:_info.title.forbidden" minOccurs="0"/>
        <xs:element ref="db:areaspec"/>
        <xs:element ref="db:programlisting"/>
        <xs:element ref="db:calloutlist" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="areaspec">
    <xs:complexType>
      <xs:choice maxOccurs="unbounded">
        <xs:element ref="db:area"/>
        <xs:element ref="db:areaset"/>
      </xs:choice>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
      <xs:attributeGroup ref="db:area.units.attribute"/>
      <xs:assert test="(not(@units eq 'other') and not(@otherunits))
                       or (@units='other' and @otherunits)">
        <xs:annotation>
          <xs:documentation>The @units/@otherunits attributes must be consistent</xs:documentation>
        </xs:annotation>
      </xs:assert>
    </xs:complexType>
  </xs:element>

  <xs:element name="area">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="db:alt" minOccurs="0"/>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.idreq.attributes"/>
      <xs:attributeGroup ref="db:area.units.attribute"/>
      <xs:attribute name="linkends" type="xs:IDREFS"/>
      <xs:attribute ref="xlink:href"/>
      <xs:attribute name="label"/>
      <xs:attribute name="coords"/>
      <xs:assert test="(not(@units eq 'other') and not(@otherunits))
                       or (@units='other' and @otherunits)">
        <xs:annotation>
          <xs:documentation>The @units/@otherunits attributes must be consistent</xs:documentation>
        </xs:annotation>
      </xs:assert>
      <xs:assert test="not(@linkends) or not(@xlink:href)">
        <xs:annotation>
          <xs:documentation>Only one of @linkends/@xlink:href may be specified</xs:documentation>
        </xs:annotation>
      </xs:assert>
    </xs:complexType>
  </xs:element>

  <xs:element name="areaset">
    <xs:complexType>
      <xs:sequence>
        <!-- only different from global area in that xml:id is optional -->
        <xs:element name="area" maxOccurs="unbounded">
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="db:alt" minOccurs="0"/>
            </xs:sequence>
            <xs:attribute name="role"/>
            <xs:attributeGroup ref="db:common.attributes"/>
            <xs:attributeGroup ref="db:area.units.attribute"/>
            <xs:attribute name="linkends" type="xs:IDREFS"/>
            <xs:attribute name="href" type="xs:anyURI"/>
            <xs:attribute name="label"/>
            <xs:attribute name="coords"/>
            <xs:assert test="(not(@units eq 'other') and not(@otherunits))
                             or (@units='other' and @otherunits)">
              <xs:annotation>
                <xs:documentation>The @units/@otherunits attributes must be consistent</xs:documentation>
              </xs:annotation>
            </xs:assert>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.idreq.attributes"/>
      <xs:attributeGroup ref="db:area.units.attribute"/>
      <xs:attribute name="linkends" type="xs:IDREFS"/>
      <xs:attribute ref="xlink:href"/>
      <xs:attribute name="label"/>
      <xs:assert test="(not(@units eq 'other') and not(@otherunits))
                       or (@units='other' and @otherunits)">
        <xs:annotation>
          <xs:documentation>The @units/@otherunits attributes must be consistent</xs:documentation>
        </xs:annotation>
      </xs:assert>
      <xs:assert test="not(@linkends) or not(@xlink:href)">
        <xs:annotation>
          <xs:documentation>Only one of @linkends/@xlink:href may be specified</xs:documentation>
        </xs:annotation>
      </xs:assert>
    </xs:complexType>
  </xs:element>

  <xs:element name="screenco">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="db:_info.title.forbidden" minOccurs="0"/>
        <xs:element ref="db:areaspec"/>
        <xs:element ref="db:screen"/>
        <xs:element ref="db:calloutlist" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="imageobjectco">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="db:_info.title.forbidden" minOccurs="0"/>
        <xs:element ref="db:areaspec"/>
        <xs:element ref="db:imageobject" maxOccurs="unbounded"/>
        <xs:element ref="db:calloutlist" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="address">
    <xs:complexType mixed="true">
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:group ref="db:ubiq.inlines"/>
        <xs:element ref="db:personname"/>
        <xs:element ref="db:pob"/>
        <xs:element ref="db:street"/>
        <xs:element ref="db:city"/>
        <xs:element ref="db:state"/>
        <xs:element ref="db:postcode"/>
        <xs:element ref="db:country"/>
        <xs:element ref="db:phone"/>
        <xs:element ref="db:fax"/>
        <xs:element ref="db:email"/>
        <xs:element ref="db:uri"/>
        <xs:element ref="db:otheraddr"/>
      </xs:choice>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
      <xs:attributeGroup ref="db:verbatim.attributes"/>
      <xs:assert test="not(@xml:space) or @xml:space='preserve'">
        <xs:annotation>
          <xs:documentation>In address, @xml:space must be 'preserve'</xs:documentation>
        </xs:annotation>
      </xs:assert>
    </xs:complexType>
  </xs:element>

  <xs:complexType name="limited.text" mixed="true">
    <xs:sequence>
      <xs:group ref="db:_text"/>
    </xs:sequence>
    <xs:attribute name="role"/>
    <xs:attributeGroup ref="db:common.attributes"/>
    <xs:attributeGroup ref="db:common.linking.attributes"/>
  </xs:complexType>

  <xs:element name="street" type="db:limited.text"/>
  <xs:element name="pob" type="db:limited.text"/>
  <xs:element name="postcode" type="db:limited.text"/>
  <xs:element name="city" type="db:limited.text"/>
  <xs:element name="state" type="db:limited.text"/>
  <xs:element name="country" type="db:limited.text"/>
  <xs:element name="phone" type="db:limited.text"/>
  <xs:element name="fax" type="db:limited.text"/>
  <xs:element name="otheraddr" type="db:limited.text"/>

  <xs:element name="affiliation">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="db:shortaffil" minOccurs="0"/>
        <xs:element ref="db:jobtitle" minOccurs="0" maxOccurs="unbounded"/>
        <xs:choice>
          <xs:element ref="db:org" minOccurs="0"/>
          <xs:sequence>
            <xs:element ref="db:orgname" minOccurs="0"/>
            <xs:element ref="db:orgdiv" minOccurs="0" maxOccurs="unbounded"/>
            <xs:element ref="db:address" minOccurs="0" maxOccurs="unbounded"/>
          </xs:sequence>
        </xs:choice>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="shortaffil" type="db:limited.text"/>
  <xs:element name="jobtitle" type="db:limited.text"/>

  <xs:element name="orgname">
    <xs:complexType mixed="true">
      <xs:complexContent>
        <xs:extension base="db:limited.text">
          <xs:attribute name="class">
            <xs:simpleType>
              <xs:restriction base="xs:token">
                <xs:enumeration value="consortium"/>
                <xs:enumeration value="corporation"/>
                <xs:enumeration value="informal"/>
                <xs:enumeration value="nonprofit"/>
                <xs:enumeration value="other"/>
              </xs:restriction>
            </xs:simpleType>
          </xs:attribute>
          <xs:attribute name="otherclass" type="xs:NMTOKEN"/>
          <xs:assert test="(not(@class eq 'other') and not(@otherclass))
                           or (@class='other' and @otherclass)">
        <xs:annotation>
          <xs:documentation>The @class/@otherclass attributes must be consistent</xs:documentation>
        </xs:annotation>
      </xs:assert>
        </xs:extension>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>

  <xs:element name="orgdiv">
    <xs:complexType mixed="true">
      <xs:sequence>
        <xs:group ref="db:all.inlines" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="artpagenums" type="db:limited.text"/>

  <xs:element name="personname">
    <xs:complexType mixed="true">
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:group ref="db:_text"/>
        <xs:element ref="db:honorific"/>
        <xs:element ref="db:firstname"/>
        <xs:element ref="db:surname"/>
        <xs:element ref="db:lineage"/>
        <xs:element ref="db:othername"/>
      </xs:choice>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
      <xs:assert test="normalize-space(string-join(text(),'')) = ''
                       or (not(db:honorific) and not(db:firstname) and not(db:surname)
                           and not(db:lineage) and not(db:othername))">
        <xs:annotation>
          <xs:documentation>A personname must be text or honorific/firstname/surname/lineage/othername, not both</xs:documentation>
        </xs:annotation>
      </xs:assert>
    </xs:complexType>
  </xs:element>

  <xs:group name="person.author.contentmodel">
    <xs:sequence>
      <xs:element ref="db:personname"/>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element ref="db:personblurb"/>
        <xs:element ref="db:affiliation"/>
        <xs:element ref="db:email"/>
        <xs:element ref="db:uri"/>
        <xs:element ref="db:address"/>
        <xs:element ref="db:contrib"/>
      </xs:choice>
    </xs:sequence>
  </xs:group>

  <xs:group name="org.author.contentmodel">
    <xs:sequence>
      <xs:element ref="db:orgname"/>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element ref="db:orgdiv"/>
        <xs:element ref="db:affiliation"/>
        <xs:element ref="db:email"/>
        <xs:element ref="db:uri"/>
        <xs:element ref="db:address"/>
        <xs:element ref="db:contrib"/>
      </xs:choice>
    </xs:sequence>
  </xs:group>

  <xs:group name="credit.contentmodel">
    <xs:choice>
      <xs:group ref="db:person.author.contentmodel"/>
      <xs:group ref="db:org.author.contentmodel"/>
    </xs:choice>
  </xs:group>

  <xs:element name="author">
    <xs:complexType>
      <xs:group ref="db:credit.contentmodel"/>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="authorgroup">
    <xs:complexType>
      <xs:choice maxOccurs="unbounded">
        <xs:element ref="db:author"/>
        <xs:element ref="db:editor"/>
        <xs:element ref="db:othercredit"/>
      </xs:choice>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="collab">
    <xs:complexType>
      <xs:sequence>
        <xs:choice maxOccurs="unbounded">
          <xs:element ref="db:person"/>
          <xs:element ref="db:personname"/>
          <xs:element ref="db:org"/>
          <xs:element ref="db:orgname"/>
        </xs:choice>
        <xs:element ref="db:affiliation" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="authorinitials" type="db:limited.text"/>

  <xs:element name="person">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="db:personname"/>
        <xs:choice minOccurs="0" maxOccurs="unbounded">
          <xs:element ref="db:address"/>
          <xs:element ref="db:affiliation"/>
          <xs:element ref="db:email"/>
          <xs:element ref="db:uri"/>
          <xs:element ref="db:personblurb"/>
        </xs:choice>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="org">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="db:orgname"/>
        <xs:choice minOccurs="0" maxOccurs="unbounded">
          <xs:element ref="db:address"/>
          <xs:element ref="db:affiliation"/>
          <xs:element ref="db:email"/>
          <xs:element ref="db:uri"/>
          <xs:element ref="db:orgdiv"/>
        </xs:choice>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="confgroup">
    <xs:complexType>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element ref="db:confdates"/>
        <xs:element ref="db:conftitle"/>
        <xs:element ref="db:confnum"/>
        <xs:element ref="db:confsponsor"/>
        <xs:element ref="db:address"/>
      </xs:choice>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="confdates" type="db:limited.text"/>
  <xs:element name="conftitle" type="db:limited.text"/>
  <xs:element name="confnum" type="db:limited.text"/>
  <xs:element name="confsponsor" type="db:limited.text"/>
  <xs:element name="contractnum" type="db:limited.text"/>
  <xs:element name="contractsponsor" type="db:limited.text"/>

  <xs:element name="copyright">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="db:year" maxOccurs="unbounded"/>
        <xs:element ref="db:holder" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="year" type="db:limited.text"/>
  <xs:element name="holder" type="db:limited.text"/>

  <xs:group name="cover.contentmodel">
    <xs:choice>
      <xs:group ref="db:para.blocks"/>
      <xs:group ref="db:list.blocks"/>
      <xs:group ref="db:informal.blocks"/>
      <xs:group ref="db:publishing.blocks"/>
      <xs:group ref="db:graphic.blocks"/>
      <xs:group ref="db:technical.blocks"/>
      <xs:group ref="db:verbatim.blocks"/>
      <xs:element ref="db:bridgehead"/>
      <xs:element ref="db:remark"/>
      <xs:element ref="db:revhistory"/>
      <xs:group ref="db:synopsis.blocks"/>
    </xs:choice>
  </xs:group>

  <xs:element name="cover">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="db:cover.contentmodel" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="date">
    <xs:complexType mixed="true">
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="edition" type="db:limited.text"/>

  <xs:element name="editor">
    <xs:complexType>
      <xs:group ref="db:credit.contentmodel"/>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
    </xs:complexType>
  </xs:element>

  <xs:attributeGroup name="biblio.class.attribute">
    <xs:attribute name="class">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="doi"/>
          <xs:enumeration value="isbn"/>
          <xs:enumeration value="isrn"/>
          <xs:enumeration value="issn"/>
          <xs:enumeration value="libraryofcongress"/>
          <xs:enumeration value="pubsnumber"/>
          <xs:enumeration value="uri"/>
          <xs:enumeration value="other"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="otherclass" type="xs:NMTOKEN"/>
  </xs:attributeGroup>

  <xs:element name="biblioid">
    <xs:complexType mixed="true">
      <xs:complexContent>
        <xs:extension base="db:limited.text">
          <xs:attributeGroup ref="db:biblio.class.attribute"/>
          <xs:assert test="(not(@class eq 'other') and not(@otherclass))
                           or (@class='other' and @otherclass)">
        <xs:annotation>
          <xs:documentation>The @class/@otherclass attributes must be consistent</xs:documentation>
        </xs:annotation>
      </xs:assert>
        </xs:extension>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>

  <xs:element name="citebiblioid">
    <xs:complexType mixed="true">
      <xs:complexContent>
        <xs:extension base="db:limited.text">
          <xs:attributeGroup ref="db:biblio.class.attribute"/>
          <xs:assert test="(not(@class eq 'other') and not(@otherclass))
                           or (@class='other' and @otherclass)">
        <xs:annotation>
          <xs:documentation>The @class/@otherclass attributes must be consistent</xs:documentation>
        </xs:annotation>
      </xs:assert>
        </xs:extension>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>

  <xs:element name="bibliosource">
    <xs:complexType mixed="true">
      <xs:complexContent>
        <xs:extension base="db:limited.text">
          <xs:attributeGroup ref="db:biblio.class.attribute"/>
          <xs:assert test="(not(@class eq 'other') and not(@otherclass))
                           or (@class='other' and @otherclass)">
        <xs:annotation>
          <xs:documentation>The @class/@otherclass attributes must be consistent</xs:documentation>
        </xs:annotation>
      </xs:assert>
        </xs:extension>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>

  <xs:element name="bibliorelation">
    <xs:complexType mixed="true">
      <xs:complexContent>
        <xs:extension base="db:limited.text">
          <xs:attributeGroup ref="db:biblio.class.attribute"/>
          <xs:attribute name="type">
            <xs:simpleType>
              <xs:restriction base="xs:token">
                <xs:enumeration value="hasformat"/>
                <xs:enumeration value="haspart"/>
                <xs:enumeration value="hasversion"/>
                <xs:enumeration value="isformatof"/>
                <xs:enumeration value="ispartof"/>
                <xs:enumeration value="isreferencedby"/>
                <xs:enumeration value="isreplacedby"/>
                <xs:enumeration value="isrequiredby"/>
                <xs:enumeration value="isversionof"/>
                <xs:enumeration value="references"/>
                <xs:enumeration value="replaces"/>
                <xs:enumeration value="requires"/>
                <xs:enumeration value="other"/>
              </xs:restriction>
            </xs:simpleType>
          </xs:attribute>
          <xs:attribute name="othertype" type="xs:NMTOKEN"/>
          <xs:assert test="(not(@class eq 'other') and not(@otherclass))
                           or (@class='other' and @otherclass)">
        <xs:annotation>
          <xs:documentation>The @class/@otherclass attributes must be consistent</xs:documentation>
        </xs:annotation>
      </xs:assert>
          <xs:assert test="(not(@type eq 'other') and not(@othertype))
                           or (@type='other' and @othertype)">
        <xs:annotation>
          <xs:documentation>The @type/@othertype attributes must be consistent</xs:documentation>
        </xs:annotation>
      </xs:assert>
        </xs:extension>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>

  <xs:attributeGroup name="bibliocoverage.spatial.attribute">
    <xs:attribute name="spatial">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="dcmipoint"/>
          <xs:enumeration value="iso3166"/>
          <xs:enumeration value="dcmibox"/>
          <xs:enumeration value="tgn"/>
          <xs:enumeration value="other"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="otherspatial" type="xs:NMTOKEN"/>
  </xs:attributeGroup>

  <xs:attributeGroup name="bibliocoverage.temporal.attribute">
    <xs:attribute name="temporal">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="dcmiperiod"/>
          <xs:enumeration value="w3c-dtf"/>
          <xs:enumeration value="other"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="othertemporal" type="xs:NMTOKEN"/>
  </xs:attributeGroup>

  <xs:element name="bibliocoverage">
    <xs:complexType mixed="true">
      <xs:complexContent>
        <xs:extension base="db:limited.text">
          <xs:attributeGroup ref="db:bibliocoverage.spatial.attribute"/>
          <xs:attributeGroup ref="db:bibliocoverage.temporal.attribute"/>
          <xs:assert test="(not(@spatial eq 'other') and not(@otherspatial))
                            or (@spatial='other' and @otherspatial)">
        <xs:annotation>
          <xs:documentation>The @spatial/@otherspatial attributes must be consistent</xs:documentation>
        </xs:annotation>
      </xs:assert>
          <xs:assert test="(not(@temporal eq 'other') and not(@othertemporal))
                            or (@temporal='other' and @othertemporal)">
        <xs:annotation>
          <xs:documentation>The @temporal/@othertemporal attributes must be consistent</xs:documentation>
        </xs:annotation>
      </xs:assert>
        </xs:extension>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>

  <xs:element name="legalnotice" type="db:block.container"/>

  <xs:attributeGroup name="othercredit.class.attribute">
    <xs:attribute name="class">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="copyeditor"/>
          <xs:enumeration value="graphicdesigner"/>
          <xs:enumeration value="productioneditor"/>
          <xs:enumeration value="technicaleditor"/>
          <xs:enumeration value="translator"/>
          <xs:enumeration value="other"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="otherclass" type="xs:NMTOKEN"/>
  </xs:attributeGroup>

  <xs:element name="othercredit">
    <xs:complexType>
      <xs:group ref="db:credit.contentmodel"/>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
      <xs:attributeGroup ref="db:othercredit.class.attribute"/>
      <xs:assert test="(not(@class eq 'other') and not(@otherclass))
                       or (@class='other' and @otherclass)">
        <xs:annotation>
          <xs:documentation>The @class/@otherclass attributes must be consistent</xs:documentation>
        </xs:annotation>
      </xs:assert>
    </xs:complexType>
  </xs:element>

  <xs:element name="pagenums" type="db:limited.text"/>
  <xs:element name="contrib" type="db:limited.text"/>
  <xs:element name="honorific" type="db:limited.text"/>
  <xs:element name="firstname" type="db:limited.text"/>
  <xs:element name="surname" type="db:limited.text"/>
  <xs:element name="lineage" type="db:limited.text"/>
  <xs:element name="othername" type="db:limited.text"/>

  <xs:element name="printhistory">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="db:para.blocks" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="email" type="db:limited.text"/>

  <xs:element name="uri">
    <xs:complexType mixed="true">
      <xs:complexContent>
        <xs:extension base="db:limited.text">
          <xs:attribute name="type"/>
        </xs:extension>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>

  <xs:element name="pubdate">
    <xs:complexType mixed="true">
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="publisher">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="db:publishername"/>
        <xs:element ref="db:address" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="publishername" type="db:limited.text"/>
  <xs:element name="releaseinfo" type="db:limited.text"/>

  <xs:element name="revhistory">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="db:_info.title.only" minOccurs="0"/>
        <xs:element ref="db:revision" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="revision">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="db:revnumber" minOccurs="0"/>
        <xs:element ref="db:date"/>
        <xs:choice minOccurs="0" maxOccurs="unbounded">
          <xs:element ref="db:authorinitials"/>
          <xs:element ref="db:author"/>
        </xs:choice>
        <xs:choice minOccurs="0">
          <xs:element ref="db:revremark"/>
          <xs:element ref="db:revdescription"/>
        </xs:choice>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="revnumber" type="db:limited.text"/>
  <xs:element name="revremark" type="db:limited.text"/>

  <xs:element name="revdescription" type="db:block.type"/>

  <xs:element name="seriesvolnums" type="db:limited.text"/>
  <xs:element name="volumenum" type="db:limited.text"/>
  <xs:element name="issuenum" type="db:limited.text"/>
  <xs:element name="package" type="db:limited.text"/>

  <xs:element name="parameter">
    <xs:complexType mixed="true">
      <xs:complexContent>
        <xs:extension base="db:limited.text">
          <xs:attribute name="class">
            <xs:simpleType>
              <xs:restriction base="xs:token">
                <xs:enumeration value="command"/>
                <xs:enumeration value="function"/>
                <xs:enumeration value="option"/>
              </xs:restriction>
            </xs:simpleType>
          </xs:attribute>
        </xs:extension>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>

  <xs:group name="replaceable.inlines">
    <xs:choice>
      <xs:group ref="db:_text"/>
      <xs:element ref="db:co"/>
    </xs:choice>
  </xs:group>

  <xs:element name="replaceable">
    <xs:complexType mixed="true">
      <xs:sequence>
        <xs:group ref="db:replaceable.inlines" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
      <xs:attribute name="class">
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="command"/>
            <xs:enumeration value="function"/>
            <xs:enumeration value="option"/>
            <xs:enumeration value="parameter"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
    </xs:complexType>
  </xs:element>

  <xs:element name="abbrev">
    <xs:complexType mixed="true">
      <xs:sequence minOccurs="0" maxOccurs="unbounded">
        <xs:group ref="db:_text"/>
        <xs:element ref="db:trademark"/>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="acronym">
    <xs:complexType mixed="true">
      <xs:sequence minOccurs="0" maxOccurs="unbounded">
        <xs:group ref="db:_text"/>
        <xs:element ref="db:trademark"/>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="citation" type="db:inline.type"/>

  <xs:element name="citerefentry">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="db:refentrytitle"/>
        <xs:element ref="db:manvolnum" minOccurs="0"/>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="refentrytitle" type="db:inline.type"/>
  <xs:element name="manvolnum" type="db:limited.text"/>

  <xs:attributeGroup name="citetitle.pubwork.attribute">
    <xs:attribute name="pubwork">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="article"/>
          <xs:enumeration value="bbs"/>
          <xs:enumeration value="book"/>
          <xs:enumeration value="cdrom"/>
          <xs:enumeration value="chapter"/>
          <xs:enumeration value="dvd"/>
          <xs:enumeration value="emailmessage"/>
          <xs:enumeration value="gopher"/>
          <xs:enumeration value="journal"/>
          <xs:enumeration value="manuscript"/>
          <xs:enumeration value="newsposting"/>
          <xs:enumeration value="part"/>
          <xs:enumeration value="refentry"/>
          <xs:enumeration value="section"/>
          <xs:enumeration value="series"/>
          <xs:enumeration value="set"/>
          <xs:enumeration value="webpage"/>
          <xs:enumeration value="wiki"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
  </xs:attributeGroup>

  <xs:element name="citetitle">
    <xs:complexType mixed="true">
      <xs:sequence minOccurs="0" maxOccurs="unbounded">
        <xs:group ref="db:all.inlines"/>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
      <xs:attributeGroup ref="db:citetitle.pubwork.attribute"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="emphasis" type="db:inline.type"/>

  <xs:group name="_emphasis">
    <xs:sequence>
      <xs:element name="emphasis">
        <xs:complexType mixed="true">
          <xs:sequence minOccurs="0" maxOccurs="unbounded">
            <xs:group ref="db:_text"/>
            <xs:group ref="db:_emphasis"/>
          </xs:sequence>
          <xs:attribute name="role"/>
          <xs:attributeGroup ref="db:common.attributes"/>
          <xs:attributeGroup ref="db:common.linking.attributes"/>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:group>

  <xs:element name="foreignphrase">
    <xs:complexType mixed="true">
      <xs:sequence minOccurs="0" maxOccurs="unbounded">
        <xs:group ref="db:general.inlines"/>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="phrase" type="db:inline.type"/>

  <xs:group name="_phrase">
    <xs:sequence>
      <xs:element name="phrase">
        <xs:complexType mixed="true">
          <xs:sequence minOccurs="0" maxOccurs="unbounded">
            <xs:group ref="db:_text"/>
          </xs:sequence>
          <xs:attribute name="role"/>
          <xs:attributeGroup ref="db:common.attributes"/>
          <xs:attributeGroup ref="db:common.linking.attributes"/>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:group>

  <xs:element name="quote" type="db:inline.type"/>
  <xs:element name="subscript" type="db:limited.text"/>
  <xs:element name="superscript" type="db:limited.text"/>

  <xs:element name="trademark">
    <xs:complexType mixed="true">
      <xs:complexContent>
        <xs:extension base="db:limited.text">
          <xs:attribute name="class">
            <xs:simpleType>
              <xs:restriction base="xs:token">
                <xs:enumeration value="copyright"/>
                <xs:enumeration value="registered"/>
                <xs:enumeration value="service"/>
                <xs:enumeration value="trade"/>
              </xs:restriction>
            </xs:simpleType>
          </xs:attribute>
        </xs:extension>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>

  <xs:element name="wordasword" type="db:limited.text"/>

  <xs:element name="footnoteref">
    <xs:complexType>
      <xs:complexContent>
        <xs:restriction base="xs:anyType">
          <xs:attribute name="role"/>
          <xs:attributeGroup ref="db:common.attributes"/>
          <xs:attributeGroup ref="db:common.linking.attributes"/>
          <xs:attribute name="label"/>
        </xs:restriction>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>

  <xs:element name="xref">
    <xs:complexType>
      <xs:complexContent>
        <xs:restriction base="xs:anyType">
          <xs:attribute name="role"/>
          <xs:attributeGroup ref="db:common.attributes"/>
          <xs:attributeGroup ref="db:common.linking.attributes"/>
          <xs:attribute name="xrefstyle"/>
          <xs:attribute name="endterm" type="xs:IDREF"/>
        </xs:restriction>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>

  <xs:element name="link">
    <xs:complexType mixed="true">
      <xs:complexContent>
        <xs:extension base="db:inline.type">
          <xs:attribute name="xrefstyle"/>
          <xs:attribute name="endterm" type="xs:IDREF"/>
        </xs:extension>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>

  <xs:element name="olink">
    <xs:complexType mixed="true">
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:group ref="db:all.inlines"/>
      </xs:choice>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attribute name="xrefstyle"/>
      <xs:attribute name="localinfo"/>
      <xs:attribute name="targetdoc" type="xs:anyURI"/>
      <xs:attribute name="targetptr"/>
      <xs:attribute name="type"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="anchor">
    <xs:complexType>
      <xs:complexContent>
        <xs:restriction base="xs:anyType">
          <xs:attribute name="role"/>
          <xs:attributeGroup ref="db:common.idreq.attributes"/>
        </xs:restriction>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>

  <xs:element name="alt">
    <xs:complexType mixed="true">
      <xs:sequence minOccurs="0" maxOccurs="unbounded">
        <xs:element ref="db:inlinemediaobject"/>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
    </xs:complexType>
  </xs:element>

  <xs:attributeGroup name="status.attribute">
    <xs:attribute name="status"/>
  </xs:attributeGroup>

  <xs:group name="toplevel.sections">
    <xs:choice>
      <xs:choice>
        <xs:sequence>
          <xs:element ref="db:section" maxOccurs="unbounded"/>
          <xs:element ref="db:simplesect" minOccurs="0" maxOccurs="unbounded"/>
        </xs:sequence>
        <xs:element ref="db:simplesect" maxOccurs="unbounded"/>
      </xs:choice>
      <xs:sequence>
        <xs:element ref="db:sect1" maxOccurs="unbounded"/>
        <xs:element ref="db:simplesect" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:element ref="db:refentry" maxOccurs="unbounded"/>
    </xs:choice>
  </xs:group>

  <xs:group name="toplevel.blocks.or.sections">
    <xs:choice>
      <xs:sequence>
        <xs:group ref="db:all.blocks" maxOccurs="unbounded"/>
        <xs:group ref="db:toplevel.sections" minOccurs="0"/>
      </xs:sequence>
      <xs:group ref="db:toplevel.sections"/>
    </xs:choice>
  </xs:group>

  <xs:group name="recursive.sections">
    <xs:choice>
      <xs:choice>
        <xs:sequence>
          <xs:element ref="db:section" maxOccurs="unbounded"/>
          <xs:element ref="db:simplesect" minOccurs="0" maxOccurs="unbounded"/>
        </xs:sequence>
        <xs:element ref="db:simplesect" maxOccurs="unbounded"/>
      </xs:choice>
      <xs:element ref="db:refentry" maxOccurs="unbounded"/>
    </xs:choice>
  </xs:group>

  <xs:group name="recursive.blocks.or.sections">
    <xs:choice>
      <xs:sequence>
        <xs:group ref="db:all.blocks" maxOccurs="unbounded"/>
        <xs:group ref="db:recursive.sections" minOccurs="0"/>
      </xs:sequence>
      <xs:group ref="db:recursive.sections"/>
    </xs:choice>
  </xs:group>

  <xs:group name="divisions">
    <xs:choice>
      <xs:element ref="db:part"/>
      <xs:element ref="db:reference"/>
    </xs:choice>
  </xs:group>

  <xs:group name="components">
    <xs:choice>
      <xs:element ref="db:dedication"/>
      <xs:element ref="db:acknowledgements"/>
      <xs:element ref="db:preface"/>
      <xs:element ref="db:chapter"/>
      <xs:element ref="db:appendix"/>
      <xs:element ref="db:article"/>
      <xs:element ref="db:colophon"/>
    </xs:choice>
  </xs:group>

  <xs:group name="navigation.components">
    <xs:choice>
      <xs:element ref="db:glossary"/>
      <xs:element ref="db:bibliography"/>
      <xs:element ref="db:index"/>
      <xs:element ref="db:toc"/>
    </xs:choice>
  </xs:group>

  <xs:group name="component.contentmodel">
    <xs:sequence>
      <xs:group ref="db:navigation.components" minOccurs="0" maxOccurs="unbounded"/>
      <xs:group ref="db:toplevel.blocks.or.sections"/>
      <xs:group ref="db:navigation.components" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:group>

  <xs:group name="setindex.components">
    <xs:choice>
      <xs:element ref="db:setindex"/>
    </xs:choice>
  </xs:group>

  <xs:group name="toc.components">
    <xs:choice>
      <xs:element ref="db:toc"/>
    </xs:choice>
  </xs:group>

  <xs:group name="set.components">
    <xs:choice>
      <xs:element ref="db:set"/>
      <xs:element ref="db:book"/>
    </xs:choice>
  </xs:group>

  <xs:element name="set">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="db:_info.title.req" minOccurs="0"/>
        <xs:group ref="db:toc.components" minOccurs="0"/>
        <xs:group ref="db:set.components" maxOccurs="unbounded"/>
        <xs:group ref="db:setindex.components" minOccurs="0"/>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
      <xs:attribute name="label"/>
      <xs:attributeGroup ref="db:status.attribute"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="book">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="db:_info" minOccurs="0"/>
        <xs:choice minOccurs="0" maxOccurs="unbounded">
          <xs:group ref="db:navigation.components"/>
          <xs:group ref="db:components"/>
          <xs:group ref="db:divisions"/>
        </xs:choice>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
      <xs:attribute name="label"/>
      <xs:attributeGroup ref="db:status.attribute"/>
    </xs:complexType>
  </xs:element>

  <xs:complexType name="block.component.type">
    <xs:sequence>
      <xs:group ref="db:_info" minOccurs="0"/>
      <xs:group ref="db:all.blocks" maxOccurs="unbounded"/>
    </xs:sequence>
    <xs:attribute name="role"/>
    <xs:attributeGroup ref="db:common.attributes"/>
    <xs:attributeGroup ref="db:common.linking.attributes"/>
    <xs:attribute name="label"/>
    <xs:attributeGroup ref="db:status.attribute"/>
  </xs:complexType>

  <xs:element name="dedication" type="db:block.component.type"/>
  <xs:element name="acknowledgements" type="db:block.component.type"/>
  <xs:element name="colophon" type="db:block.component.type"/>

  <xs:complexType name="component.type">
    <xs:sequence>
      <xs:group ref="db:_info.title.req" minOccurs="0"/>
      <xs:group ref="db:component.contentmodel"/>
    </xs:sequence>
    <xs:attribute name="role"/>
    <xs:attributeGroup ref="db:common.attributes"/>
    <xs:attributeGroup ref="db:common.linking.attributes"/>
    <xs:attribute name="label"/>
    <xs:attributeGroup ref="db:status.attribute"/>
  </xs:complexType>

  <xs:element name="appendix" type="db:component.type"/>
  <xs:element name="chapter" type="db:component.type"/>
  <xs:element name="preface" type="db:component.type"/>

  <xs:group name="part.components">
    <xs:choice>
      <xs:group ref="db:navigation.components"/>
      <xs:group ref="db:components"/>
      <xs:element ref="db:refentry"/>
      <xs:element ref="db:reference"/>
    </xs:choice>
  </xs:group>

  <xs:element name="part">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="db:_info.title.req" minOccurs="0"/>
        <xs:element ref="db:partintro" minOccurs="0"/>
        <xs:group ref="db:part.components" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
      <xs:attribute name="label"/>
      <xs:attributeGroup ref="db:status.attribute"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="partintro">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="db:_info" minOccurs="0"/>
        <xs:group ref="db:toplevel.blocks.or.sections"/>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
      <xs:attribute name="label"/>
      <xs:attributeGroup ref="db:status.attribute"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="section">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="db:_info.title.req" minOccurs="0"/>
        <xs:group ref="db:recursive.blocks.or.sections"/>
        <xs:group ref="db:navigation.components" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
      <xs:attribute name="label"/>
      <xs:attributeGroup ref="db:status.attribute"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="simplesect">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="db:_info.title.req" minOccurs="0"/>
        <xs:group ref="db:all.blocks" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
      <xs:attribute name="label"/>
      <xs:attributeGroup ref="db:status.attribute"/>
    </xs:complexType>
  </xs:element>

  <xs:group name="article.components">
    <xs:choice>
      <xs:group ref="db:toplevel.sections"/>
    </xs:choice>
  </xs:group>

  <xs:element name="article">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="db:_info.title.req" minOccurs="0"/>
        <xs:choice minOccurs="0" maxOccurs="unbounded">
          <xs:group ref="db:navigation.components"/>
          <xs:element ref="db:appendix"/>
          <xs:element ref="db:acknowledgements"/>
          <xs:element ref="db:colophon"/>
        </xs:choice>
        <xs:choice>
          <xs:sequence>
            <xs:group ref="db:all.blocks" minOccurs="1" maxOccurs="unbounded"/>
            <xs:group ref="db:article.components" minOccurs="0"/>
          </xs:sequence>
          <xs:group ref="db:article.components"/>
        </xs:choice>
        <xs:choice minOccurs="0" maxOccurs="unbounded">
          <xs:group ref="db:navigation.components"/>
          <xs:element ref="db:appendix"/>
          <xs:element ref="db:acknowledgements"/>
          <xs:element ref="db:colophon"/>
        </xs:choice>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
      <xs:attribute name="label"/>
      <xs:attributeGroup ref="db:status.attribute"/>
      <xs:attribute name="class">
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="faq"/>
            <xs:enumeration value="journalarticle"/>
            <xs:enumeration value="productsheet"/>
            <xs:enumeration value="specification"/>
            <xs:enumeration value="techreport"/>
            <xs:enumeration value="whitepaper"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
    </xs:complexType>
  </xs:element>

  <xs:element name="annotation">
    <xs:complexType>
      <xs:complexContent>
        <xs:extension base="db:block.container">
          <xs:attribute name="annotates"/>
        </xs:extension>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>

  <xs:element name="extendedlink">
    <xs:complexType>
      <xs:choice maxOccurs="unbounded">
        <xs:element ref="db:locator"/>
        <xs:element ref="db:arc"/>
      </xs:choice>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="locator">
    <xs:complexType>
      <xs:complexContent>
        <xs:restriction base="xs:anyType">
          <xs:attribute name="role"/>
          <xs:attributeGroup ref="db:common.attributes"/>
          <xs:attributeGroup ref="db:coref.label.attribute"/>
        </xs:restriction>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>

  <xs:element name="arc">
    <xs:complexType>
      <xs:complexContent>
        <xs:restriction base="xs:anyType">
          <xs:attribute name="role"/>
          <xs:attributeGroup ref="db:common.attributes"/>
          <xs:attributeGroup ref="db:coref.label.attribute"/>
        </xs:restriction>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>

  <xs:group name="sect1.sections">
    <xs:choice>
      <xs:sequence>
        <xs:element ref="db:sect2" minOccurs="1" maxOccurs="unbounded"/>
        <xs:element ref="db:simplesect" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:element ref="db:simplesect" maxOccurs="unbounded"/>
    </xs:choice>
  </xs:group>

  <xs:element name="sect1">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="db:_info.title.req" minOccurs="0"/>
        <xs:choice>
          <xs:sequence>
            <xs:group ref="db:all.blocks" maxOccurs="unbounded"/>
            <xs:group ref="db:sect1.sections" minOccurs="0"/>
          </xs:sequence>
          <xs:group ref="db:sect1.sections"/>
        </xs:choice>
        <xs:group ref="db:navigation.components" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
      <xs:attribute name="label"/>
      <xs:attributeGroup ref="db:status.attribute"/>
    </xs:complexType>
  </xs:element>

  <xs:group name="sect2.sections">
    <xs:choice>
      <xs:sequence>
        <xs:element ref="db:sect3" minOccurs="1" maxOccurs="unbounded"/>
        <xs:element ref="db:simplesect" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:element ref="db:simplesect" maxOccurs="unbounded"/>
    </xs:choice>
  </xs:group>

  <xs:element name="sect2">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="db:_info.title.req" minOccurs="0"/>
        <xs:choice>
          <xs:sequence>
            <xs:group ref="db:all.blocks" maxOccurs="unbounded"/>
            <xs:group ref="db:sect2.sections" minOccurs="0"/>
          </xs:sequence>
          <xs:group ref="db:sect2.sections"/>
        </xs:choice>
        <xs:group ref="db:navigation.components" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
      <xs:attribute name="label"/>
      <xs:attributeGroup ref="db:status.attribute"/>
    </xs:complexType>
  </xs:element>

  <xs:group name="sect3.sections">
    <xs:choice>
      <xs:sequence>
        <xs:element ref="db:sect4" minOccurs="1" maxOccurs="unbounded"/>
        <xs:element ref="db:simplesect" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:element ref="db:simplesect" maxOccurs="unbounded"/>
    </xs:choice>
  </xs:group>

  <xs:element name="sect3">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="db:_info.title.req" minOccurs="0"/>
        <xs:choice>
          <xs:sequence>
            <xs:group ref="db:all.blocks" maxOccurs="unbounded"/>
            <xs:group ref="db:sect3.sections" minOccurs="0"/>
          </xs:sequence>
          <xs:group ref="db:sect3.sections"/>
        </xs:choice>
        <xs:group ref="db:navigation.components" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
      <xs:attribute name="label"/>
      <xs:attributeGroup ref="db:status.attribute"/>
    </xs:complexType>
  </xs:element>

  <xs:group name="sect4.sections">
    <xs:choice>
      <xs:sequence>
        <xs:element ref="db:sect5" minOccurs="1" maxOccurs="unbounded"/>
        <xs:element ref="db:simplesect" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:element ref="db:simplesect" maxOccurs="unbounded"/>
    </xs:choice>
  </xs:group>

  <xs:element name="sect4">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="db:_info.title.req" minOccurs="0"/>
        <xs:choice>
          <xs:sequence>
            <xs:group ref="db:all.blocks" maxOccurs="unbounded"/>
            <xs:group ref="db:sect4.sections" minOccurs="0"/>
          </xs:sequence>
          <xs:group ref="db:sect4.sections"/>
        </xs:choice>
        <xs:group ref="db:navigation.components" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
      <xs:attribute name="label"/>
      <xs:attributeGroup ref="db:status.attribute"/>
    </xs:complexType>
  </xs:element>

  <xs:group name="sect5.sections">
    <xs:sequence>
      <xs:element ref="db:simplesect" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:group>

  <xs:element name="sect5">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="db:_info.title.req" minOccurs="0"/>
        <xs:choice>
          <xs:sequence>
            <xs:group ref="db:all.blocks" maxOccurs="unbounded"/>
            <xs:group ref="db:sect5.sections" minOccurs="0"/>
          </xs:sequence>
          <xs:group ref="db:sect5.sections"/>
        </xs:choice>
        <xs:group ref="db:navigation.components" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
      <xs:attribute name="label"/>
      <xs:attributeGroup ref="db:status.attribute"/>
    </xs:complexType>
  </xs:element>

  <xs:group name="toplevel.refsection">
    <xs:choice>
      <xs:element ref="db:refsection" maxOccurs="unbounded"/>
      <xs:element ref="db:refsect1" maxOccurs="unbounded"/>
    </xs:choice>
  </xs:group>

  <xs:group name="secondlevel.refsection">
    <xs:choice>
      <xs:element ref="db:refsection" maxOccurs="unbounded"/>
      <xs:element ref="db:refsect2" maxOccurs="unbounded"/>
    </xs:choice>
  </xs:group>

  <xs:group name="reference.components">
    <xs:choice>
      <xs:element ref="db:refentry"/>
    </xs:choice>
  </xs:group>

  <xs:element name="reference">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="db:_info.title.req" minOccurs="0"/>
        <xs:element ref="db:partintro" minOccurs="0"/>
        <xs:group ref="db:reference.components" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
      <xs:attribute name="label"/>
      <xs:attributeGroup ref="db:status.attribute"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="refentry">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="db:indexterm" minOccurs="0" maxOccurs="unbounded"/>
        <xs:group ref="db:_info.title.forbidden" minOccurs="0"/>
        <xs:element ref="db:refmeta" minOccurs="0"/>
        <xs:element ref="db:refnamediv" maxOccurs="unbounded"/>
        <xs:element ref="db:refsynopsisdiv" minOccurs="0"/>
        <xs:group ref="db:toplevel.refsection"/>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
      <xs:attribute name="label"/>
      <xs:attributeGroup ref="db:status.attribute"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="refmeta">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="db:indexterm" minOccurs="0" maxOccurs="unbounded"/>
        <xs:element ref="db:refentrytitle"/>
        <xs:element ref="db:manvolnum" minOccurs="0"/>
        <xs:element ref="db:refmiscinfo" minOccurs="0" maxOccurs="unbounded"/>
        <xs:element ref="db:indexterm" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="refmiscinfo">
    <xs:complexType mixed="true">
      <xs:complexContent>
        <xs:extension base="db:limited.text">
          <xs:attribute name="class">
            <xs:simpleType>
              <xs:restriction base="xs:token">
                <xs:enumeration value="source"/>
                <xs:enumeration value="version"/>
                <xs:enumeration value="manual"/>
                <xs:enumeration value="sectdesc"/>
                <xs:enumeration value="software"/>
                <xs:enumeration value="other"/>
              </xs:restriction>
            </xs:simpleType>
          </xs:attribute>
          <xs:attribute name="otherclass"/>
          <xs:assert test="(not(@class eq 'other') and not(@otherclass))
                           or (@class='other' and @otherclass)">
        <xs:annotation>
          <xs:documentation>The @class/@otherclass attributes must be consistent</xs:documentation>
        </xs:annotation>
      </xs:assert>
        </xs:extension>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>

  <xs:element name="refnamediv">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="db:refdescriptor" minOccurs="0"/>
        <xs:element ref="db:refname" maxOccurs="unbounded"/>
        <xs:element ref="db:refpurpose"/>
        <xs:element ref="db:refclass" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="refdescriptor" type="db:inline.type"/>
  <xs:element name="refname" type="db:inline.type"/>
  <xs:element name="refpurpose" type="db:inline.type"/>

  <xs:element name="refclass">
    <xs:complexType mixed="true">
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element ref="db:application"/>
      </xs:choice>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="refsynopsisdiv">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="db:_info.title.req" minOccurs="0"/>
        <xs:choice>
          <xs:sequence>
            <xs:group ref="db:all.blocks" maxOccurs="unbounded"/>
            <xs:group ref="db:secondlevel.refsection" minOccurs="0"/>
          </xs:sequence>
          <xs:group ref="db:secondlevel.refsection"/>
        </xs:choice>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="refsection">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="db:_info.title.req" minOccurs="0"/>
        <xs:choice>
          <xs:sequence>
            <xs:group ref="db:all.blocks" maxOccurs="unbounded"/>
            <xs:element ref="db:refsection" minOccurs="0" maxOccurs="unbounded"/>
          </xs:sequence>
          <xs:element ref="db:refsection" maxOccurs="unbounded"/>
        </xs:choice>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
      <xs:attribute name="label"/>
      <xs:attributeGroup ref="db:status.attribute"/>
    </xs:complexType>
  </xs:element>

  <xs:group name="refsect1.sections">
    <xs:sequence>
      <xs:element ref="db:refsect2" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:group>

  <xs:element name="refsect1">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="db:_info.title.req" minOccurs="0"/>
        <xs:choice>
          <xs:sequence>
            <xs:group ref="db:all.blocks" maxOccurs="unbounded"/>
            <xs:group ref="db:refsect1.sections" minOccurs="0" maxOccurs="unbounded"/>
          </xs:sequence>
          <xs:group ref="db:refsect1.sections" maxOccurs="unbounded"/>
        </xs:choice>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
      <xs:attribute name="label"/>
      <xs:attributeGroup ref="db:status.attribute"/>
    </xs:complexType>
  </xs:element>

  <xs:group name="refsect2.sections">
    <xs:sequence>
      <xs:element ref="db:refsect3" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:group>

  <xs:element name="refsect2">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="db:_info.title.req" minOccurs="0"/>
        <xs:choice>
          <xs:sequence>
            <xs:group ref="db:all.blocks" maxOccurs="unbounded"/>
            <xs:group ref="db:refsect2.sections" minOccurs="0" maxOccurs="unbounded"/>
          </xs:sequence>
          <xs:group ref="db:refsect2.sections" maxOccurs="unbounded"/>
        </xs:choice>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
      <xs:attribute name="label"/>
      <xs:attributeGroup ref="db:status.attribute"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="refsect3">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="db:_info.title.req" minOccurs="0"/>
        <xs:group ref="db:all.blocks" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
      <xs:attribute name="label"/>
      <xs:attributeGroup ref="db:status.attribute"/>
    </xs:complexType>
  </xs:element>

  <xs:group name="glossary.inlines">
    <xs:choice>
      <xs:element ref="db:firstterm"/>
      <xs:element ref="db:glossterm"/>
    </xs:choice>
  </xs:group>

  <xs:attributeGroup name="baseform.attribute">
    <xs:attribute name="baseform"/>
  </xs:attributeGroup>

  <xs:element name="glosslist">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="db:_info.title.only" minOccurs="0"/>
        <xs:group ref="db:all.blocks" minOccurs="0" maxOccurs="unbounded"/>
        <xs:element ref="db:glossentry" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="glossentry">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="db:glossterm"/>
        <xs:element ref="db:acronym" minOccurs="0"/>
        <xs:element ref="db:abbrev" minOccurs="0"/>
        <xs:element ref="db:indexterm" minOccurs="0" maxOccurs="unbounded"/>
        <xs:choice>
          <xs:element ref="db:glosssee"/>
          <xs:element ref="db:glossdef" maxOccurs="unbounded"/>
        </xs:choice>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
      <xs:attribute name="sortas"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="glossdef">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="db:all.blocks" maxOccurs="unbounded"/>
        <xs:element ref="db:glossseealso" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
      <xs:attribute name="subject"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="glosssee">
    <xs:complexType mixed="true">
      <xs:sequence>
        <xs:group ref="db:all.inlines" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
      <xs:attribute name="otherterm" type="xs:IDREF"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="glossseealso">
    <xs:complexType mixed="true">
      <xs:sequence>
        <xs:group ref="db:all.inlines" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
      <xs:attribute name="otherterm" type="xs:IDREF"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="firstterm">
    <xs:complexType mixed="true">
      <xs:sequence>
        <xs:group ref="db:all.inlines" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
      <xs:attributeGroup ref="db:baseform.attribute"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="glossterm">
    <xs:complexType mixed="true">
      <xs:sequence>
        <xs:group ref="db:all.inlines" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
      <xs:attributeGroup ref="db:baseform.attribute"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="glossary">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="db:_info" minOccurs="0"/>
        <xs:choice minOccurs="0" maxOccurs="unbounded">
          <xs:group ref="db:all.blocks"/>
        </xs:choice>
        <xs:choice>
          <xs:element ref="db:glossdiv" minOccurs="0" maxOccurs="unbounded"/>
          <xs:element ref="db:glossentry" minOccurs="0" maxOccurs="unbounded"/>
        </xs:choice>
        <xs:element ref="db:bibliography" minOccurs="0"/>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
      <xs:attribute name="label"/>
      <xs:attributeGroup ref="db:status.attribute"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="glossdiv">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="db:_info" minOccurs="0"/>
        <xs:group ref="db:all.blocks" minOccurs="0" maxOccurs="unbounded"/>
        <xs:element ref="db:glossentry" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
      <xs:attribute name="label"/>
      <xs:attributeGroup ref="db:status.attribute"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="termdef">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="db:all.inlines" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
      <xs:attributeGroup ref="db:baseform.attribute"/>
      <xs:attribute name="sortas"/>
    </xs:complexType>
  </xs:element>

  <xs:attributeGroup name="relation.attribute">
    <xs:attribute name="relation"/>
  </xs:attributeGroup>

  <xs:element name="biblioentry">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="db:bibliographic.elements" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="bibliomixed">
    <xs:complexType mixed="true">
      <xs:sequence minOccurs="0" maxOccurs="unbounded">
        <xs:group ref="db:bibliographic.elements"/>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="biblioset">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="db:bibliographic.elements" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
      <xs:attributeGroup ref="db:relation.attribute"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="bibliomset">
    <xs:complexType mixed="true">
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:group ref="db:_text"/>

        <!-- This should be db:bibliographic.elements, but there's an ambiguity
             problem with annotation in db:_text and db:info.elements -->

        <xs:element ref="db:abstract"/>
        <xs:element ref="db:address"/>
        <xs:element ref="db:artpagenums"/>
        <xs:element ref="db:author"/>
        <xs:element ref="db:authorgroup"/>
        <xs:element ref="db:authorinitials"/>
        <xs:element ref="db:bibliocoverage"/>
        <xs:element ref="db:biblioid"/>
        <xs:element ref="db:bibliosource"/>
        <xs:element ref="db:collab"/>
        <xs:element ref="db:confgroup"/>
        <xs:element ref="db:contractsponsor"/>
        <xs:element ref="db:contractnum"/>
        <xs:element ref="db:copyright"/>
        <xs:element ref="db:cover"/>
        <xs:element ref="db:date"/>
        <xs:element ref="db:edition"/>
        <xs:element ref="db:editor"/>
        <xs:element ref="db:issuenum"/>
        <xs:element ref="db:keywordset"/>
        <xs:element ref="db:legalnotice"/>
        <xs:element ref="db:mediaobject"/>
        <xs:element ref="db:org"/>
        <xs:element ref="db:orgname"/>
        <xs:element ref="db:othercredit"/>
        <xs:element ref="db:pagenums"/>
        <xs:element ref="db:printhistory"/>
        <xs:element ref="db:pubdate"/>
        <xs:element ref="db:publisher"/>
        <xs:element ref="db:publishername"/>
        <xs:element ref="db:releaseinfo"/>
        <xs:element ref="db:revhistory"/>
        <xs:element ref="db:seriesvolnums"/>
        <xs:element ref="db:subjectset"/>
        <xs:element ref="db:volumenum"/>
        <xs:element ref="db:extendedlink"/>
        <xs:element ref="db:bibliomisc"/>
        <xs:element ref="db:bibliomset"/>
        <xs:element ref="db:bibliorelation"/>
        <xs:element ref="db:biblioset"/>
        <xs:element ref="db:itermset"/>
        <xs:element ref="db:productname"/>
        <xs:element ref="db:productnumber"/>
        <xs:element ref="db:abbrev"/>
        <xs:element ref="db:acronym"/>
        <xs:element ref="db:emphasis"/>
        <xs:element ref="db:footnote"/>
        <xs:element ref="db:footnoteref"/>
        <xs:element ref="db:foreignphrase"/>
        <xs:element ref="db:quote"/>
        <xs:element ref="db:citerefentry"/>
        <xs:element ref="db:citetitle"/>
        <xs:element ref="db:citebiblioid"/>
        <xs:element ref="db:person"/>
        <xs:element ref="db:personblurb"/>
        <xs:element ref="db:personname"/>
        <xs:element ref="db:subtitle"/>
        <xs:element ref="db:title"/>
        <xs:element ref="db:titleabbrev"/>
      </xs:choice>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
      <xs:attributeGroup ref="db:relation.attribute"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="bibliomisc" type="db:limited.text"/>

  <xs:element name="bibliography">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="db:_info" minOccurs="0"/>
        <xs:group ref="db:all.blocks" minOccurs="0" maxOccurs="unbounded"/>
        <xs:choice>
          <xs:element ref="db:bibliodiv" maxOccurs="unbounded"/>
          <xs:choice maxOccurs="unbounded">
            <xs:element ref="db:biblioentry"/>
            <xs:element ref="db:bibliomixed"/>
          </xs:choice>
        </xs:choice>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
      <xs:attribute name="label"/>
      <xs:attributeGroup ref="db:status.attribute"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="bibliodiv">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="db:_info" minOccurs="0"/>
        <xs:group ref="db:all.blocks" minOccurs="0" maxOccurs="unbounded"/>
        <xs:choice maxOccurs="unbounded">
          <xs:element ref="db:biblioentry"/>
          <xs:element ref="db:bibliomixed"/>
        </xs:choice>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
      <xs:attribute name="label"/>
      <xs:attributeGroup ref="db:status.attribute"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="bibliolist">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="db:_info.title.only" minOccurs="0"/>
        <xs:group ref="db:all.blocks" minOccurs="0" maxOccurs="unbounded"/>
        <xs:choice maxOccurs="unbounded">
          <xs:element ref="db:biblioentry"/>
          <xs:element ref="db:bibliomixed"/>
        </xs:choice>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="biblioref">
    <xs:complexType>
      <xs:complexContent>
        <xs:restriction base="xs:anyType">
          <xs:attribute name="role"/>
          <xs:attributeGroup ref="db:common.attributes"/>
          <xs:attributeGroup ref="db:coref.label.attribute"/>
          <xs:attribute name="xrefstyle"/>
          <xs:attribute name="endterm" type="xs:IDREF"/>
          <xs:attribute name="units" type="xs:token"/>
          <xs:attribute name="begin" type="xs:token"/>
          <xs:attribute name="end" type="xs:token"/>
        </xs:restriction>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>

  <xs:attributeGroup name="significance.attribute">
    <xs:attribute name="significance">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="normal"/>
          <xs:enumeration value="preferred"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
  </xs:attributeGroup>

  <xs:attributeGroup name="zone.attribute">
    <xs:attribute name="zone" type="xs:IDREFS"/>
  </xs:attributeGroup>

  <xs:attributeGroup name="pagenum.attribute">
    <xs:attribute name="pagenum"/>
  </xs:attributeGroup>

  <xs:attributeGroup name="scope.attribute">
    <xs:attribute name="scope">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="all"/>
          <xs:enumeration value="global"/>
          <xs:enumeration value="local"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
  </xs:attributeGroup>

  <xs:attributeGroup name="sortas.attribute">
    <xs:attribute name="sortas"/>
  </xs:attributeGroup>

  <xs:element name="itermset">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="db:indexterm" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="indexterm">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="db:primary" minOccurs="0"/>
        <xs:choice minOccurs="0">
          <xs:sequence>
            <xs:element ref="db:secondary"/>
            <xs:choice minOccurs="0">
              <xs:sequence>
                <xs:element ref="db:tertiary"/>
                <xs:choice minOccurs="0">
                  <xs:element ref="db:see"/>
                  <xs:element ref="db:seealso" maxOccurs="unbounded"/>
                </xs:choice>
              </xs:sequence>
              <xs:element ref="db:see"/>
              <xs:element ref="db:seealso" maxOccurs="unbounded"/>
            </xs:choice>
          </xs:sequence>
          <xs:element ref="db:see"/>
          <xs:element ref="db:seealso" maxOccurs="unbounded"/>
        </xs:choice>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
      <xs:attributeGroup ref="db:significance.attribute"/>
      <xs:attributeGroup ref="db:zone.attribute"/>
      <xs:attributeGroup ref="db:pagenum.attribute"/>
      <xs:attributeGroup ref="db:scope.attribute"/>
      <xs:attribute name="type"/>
      <xs:attribute name="class">
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="singular"/>
            <xs:enumeration value="startofrange"/>
            <xs:enumeration value="endofrange"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
      <xs:attribute name="startref" type="xs:IDREF"/>
      <xs:assert test="@class='endofrange' or not(@startref)">
        <xs:annotation>
          <xs:documentation>Only end-of-range indexterms may have @startref</xs:documentation>
        </xs:annotation>
      </xs:assert>
      <xs:assert test="not(@class='endofrange')
                       or (@startref and not(@significance) and not(@zone) and not(@pagenum)
                           and not(@scope) and not(@type))">
        <xs:annotation>
          <xs:documentation>End-of-range indexterms must have @startref and must not have @significance, @zone, @pagenum, @scope, or @type</xs:documentation>
        </xs:annotation>
      </xs:assert>
      <xs:assert test="not(@class='endofrange') or not(*)">
        <xs:annotation>
          <xs:documentation>End-of-range indexterms must be empty</xs:documentation>
        </xs:annotation>
      </xs:assert>
    </xs:complexType>
  </xs:element>

  <xs:complexType name="indexterm.parts.type" mixed="true">
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:group ref="db:all.inlines"/>
    </xs:choice>
    <xs:attribute name="role"/>
    <xs:attributeGroup ref="db:common.attributes"/>
    <xs:attributeGroup ref="db:common.linking.attributes"/>
    <xs:attributeGroup ref="db:sortas.attribute"/>
  </xs:complexType>

  <xs:element name="primary" type="db:indexterm.parts.type"/>
  <xs:element name="secondary" type="db:indexterm.parts.type"/>
  <xs:element name="tertiary" type="db:indexterm.parts.type"/>

  <xs:element name="see" type="db:inline.type"/>
  <xs:element name="seealso" type="db:inline.type"/>

  <xs:element name="index">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="db:_info" minOccurs="0"/>
        <xs:choice minOccurs="0" maxOccurs="unbounded">
          <xs:group ref="db:all.blocks"/>
          <xs:element ref="db:indexdiv"/>
          <xs:element ref="db:indexentry"/>
        </xs:choice>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
      <xs:attribute name="label"/>
      <xs:attributeGroup ref="db:status.attribute"/>
      <xs:attribute name="type"/>
      <xs:assert test="(not(db:indexdiv) and not(db:indexentry))
                       or (db:indexdiv and not(db:indexentry))
                       or (db:indexentry and not(db:indexdiv))">
        <xs:annotation>
          <xs:documentation>Indexes must contain entries or divisions, not both.</xs:documentation>
        </xs:annotation>
      </xs:assert>
      <xs:assert test="not(db:indexdiv)
                       or not(db:indexdiv/following-sibling::*[not(self::db:indexdiv)])">
        <xs:annotation>
          <xs:documentation>Nothing may follow an indexdiv except another indexdiv.</xs:documentation>
        </xs:annotation>
      </xs:assert>
      <xs:assert test="not(db:indexentry)
                       or not(db:indexentry/following-sibling::*[not(self::db:indexentry)])">
        <xs:annotation>
          <xs:documentation>Nothing may follow an indexentry except another indexentry.</xs:documentation>
        </xs:annotation>
      </xs:assert>
    </xs:complexType>
  </xs:element>

  <xs:element name="setindex">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="db:_info" minOccurs="0"/>
        <xs:group ref="db:all.blocks" minOccurs="0" maxOccurs="unbounded"/>
        <xs:choice>
          <xs:element ref="db:indexdiv" minOccurs="0" maxOccurs="unbounded"/>
          <xs:element ref="db:indexentry" minOccurs="0" maxOccurs="unbounded"/>
        </xs:choice>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
      <xs:attribute name="label"/>
      <xs:attributeGroup ref="db:status.attribute"/>
      <xs:attribute name="type"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="indexdiv">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="db:_info.title.req" minOccurs="0"/>
        <xs:choice maxOccurs="unbounded">
          <xs:group ref="db:all.blocks"/>
          <xs:element ref="db:indexentry"/>
        </xs:choice>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
      <xs:attribute name="label"/>
      <xs:attributeGroup ref="db:status.attribute"/>
      <xs:assert test="not(db:indexentry)
                       or not(db:indexentry/following-sibling::*[not(self::db:indexentry)])">
        <xs:annotation>
          <xs:documentation>Nothing may follow an indexentry except another indexentry.</xs:documentation>
        </xs:annotation>
      </xs:assert>
    </xs:complexType>
  </xs:element>

  <xs:element name="indexentry">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="db:primaryie" minOccurs="0"/>
        <xs:choice minOccurs="0">
          <xs:element ref="db:seeie"/>
          <xs:element ref="db:seealsoie"/>
        </xs:choice>
        <xs:sequence minOccurs="0" maxOccurs="unbounded">
          <xs:element ref="db:secondaryie"/>
          <xs:choice minOccurs="0" maxOccurs="unbounded">
            <xs:element ref="db:seeie"/>
            <xs:element ref="db:seealsoie"/>
            <xs:element ref="db:tertiaryie"/>
          </xs:choice>
        </xs:sequence>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="primaryie" type="db:inline.type"/>
  <xs:element name="secondaryie" type="db:inline.type"/>
  <xs:element name="tertiaryie" type="db:inline.type"/>
  <xs:element name="seeie" type="db:inline.type"/>
  <xs:element name="seealsoie" type="db:inline.type"/>

  <xs:element name="toc">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="db:_info.title.only" minOccurs="0"/>
        <xs:group ref="db:all.blocks" minOccurs="0" maxOccurs="unbounded"/>
        <xs:choice minOccurs="0" maxOccurs="unbounded">
          <xs:element ref="db:tocdiv"/>
          <xs:element ref="db:tocentry"/>
        </xs:choice>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="tocdiv">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="db:_info" minOccurs="0"/>
        <xs:group ref="db:all.blocks" minOccurs="0" maxOccurs="unbounded"/>
        <xs:choice maxOccurs="unbounded">
          <xs:element ref="db:tocdiv"/>
          <xs:element ref="db:tocentry"/>
        </xs:choice>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attribute name="pagenum"/>
      <xs:attribute name="linkend" type="xs:IDREF"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="tocentry">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="db:all.inlines" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attribute name="pagenum"/>
      <xs:attribute name="linkend" type="xs:IDREF"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="task">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="db:_info.title.req" minOccurs="0"/>
        <xs:element ref="db:tasksummary" minOccurs="0"/>
        <xs:element ref="db:taskprerequisites" minOccurs="0"/>
        <xs:element ref="db:procedure"/>
        <xs:element ref="db:example" minOccurs="0" maxOccurs="unbounded"/>
        <xs:element ref="db:taskrelated" minOccurs="0"/>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="tasksummary" type="db:block.container"/>
  <xs:element name="taskprerequisites" type="db:block.container"/>
  <xs:element name="taskrelated" type="db:block.container"/>

  <xs:element name="productionset">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="db:_info.title.only" minOccurs="0"/>
        <xs:choice maxOccurs="unbounded">
          <xs:element ref="db:production"/>
          <xs:element ref="db:productionrecap"/>
        </xs:choice>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="production">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="db:lhs"/>
        <xs:element ref="db:rhs"/>
        <xs:element ref="db:constraint" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.idreq.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="lhs">
    <xs:complexType mixed="true">
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="rhs">
    <xs:complexType mixed="true">
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element ref="db:nonterminal"/>
        <xs:element ref="db:lineannotation"/>
        <xs:element ref="db:sbr"/>
      </xs:choice>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="nonterminal">
    <xs:complexType mixed="true">
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
      <xs:attribute name="def" type="xs:anyURI"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="constraint">
    <xs:complexType>
      <xs:complexContent>
        <xs:restriction base="xs:anyType">
          <xs:attribute name="role"/>
          <xs:attributeGroup ref="db:common.attributes"/>
          <xs:attributeGroup ref="db:common.req.linking.attributes"/>
          <xs:assert test="@linkend or @xlink:href">
            <xs:annotation>
              <xs:documentation>A link must be specified with @linkend or @xlink:href</xs:documentation>
            </xs:annotation>
          </xs:assert>
        </xs:restriction>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>

  <xs:element name="productionrecap">
    <xs:complexType>
      <xs:complexContent>
        <xs:restriction base="xs:anyType">
          <xs:attribute name="role"/>
          <xs:attributeGroup ref="db:common.attributes"/>
          <xs:attributeGroup ref="db:common.req.linking.attributes"/>
          <xs:assert test="@linkend or @xlink:href">
            <xs:annotation>
              <xs:documentation>A link must be specified with @linkend or @xlink:href</xs:documentation>
            </xs:annotation>
          </xs:assert>
        </xs:restriction>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>

  <xs:element name="constraintdef" type="db:block.type"/>

  <xs:attributeGroup name="html.coreattrs">
    <xs:attribute name="class"/>
    <xs:attribute name="style"/>
    <xs:attribute name="title"/>
  </xs:attributeGroup>

  <xs:attributeGroup name="html.i18n">
    <xs:attribute name="lang"/>
  </xs:attributeGroup>

  <xs:attributeGroup name="html.events">
    <xs:attribute name="onclick"/>
    <xs:attribute name="ondblclick"/>
    <xs:attribute name="onmousedown"/>
    <xs:attribute name="onmouseup"/>
    <xs:attribute name="onmouseover"/>
    <xs:attribute name="onmousemove"/>
    <xs:attribute name="onmouseout"/>
    <xs:attribute name="onkeypress"/>
    <xs:attribute name="onkeydown"/>
    <xs:attribute name="onkeyup"/>
  </xs:attributeGroup>

  <xs:attributeGroup name="html.attrs">
    <xs:attributeGroup ref="db:common.attributes"/>
    <xs:attributeGroup ref="db:html.coreattrs"/>
    <xs:attributeGroup ref="db:html.i18n"/>
    <xs:attributeGroup ref="db:html.events"/>
  </xs:attributeGroup>

  <xs:attributeGroup name="html.table.attributes">
    <xs:attribute name="summary"/>
    <xs:attribute name="width"/>
    <xs:attribute name="border" type="xs:nonNegativeInteger"/>
    <xs:attribute name="rules">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="none"/>
          <xs:enumeration value="groups"/>
          <xs:enumeration value="rows"/>
          <xs:enumeration value="cols"/>
          <xs:enumeration value="all"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="cellspacing"/>
    <xs:attribute name="cellpadding"/>
  </xs:attributeGroup>

  <xs:attributeGroup name="html.tablecell.attributes">
    <xs:attribute name="abbr"/>
    <xs:attribute name="axis"/>
    <xs:attribute name="headers"/>
    <xs:attribute name="scope">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="row"/>
          <xs:enumeration value="col"/>
          <xs:enumeration value="rowgroup"/>
          <xs:enumeration value="colgroup"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="rowspan" type="xs:nonNegativeInteger"/>
    <xs:attribute name="colspan" type="xs:nonNegativeInteger"/>
  </xs:attributeGroup>

  <xs:attributeGroup name="merged-html-cals-frame.attribute">
    <xs:attribute name="frame">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <!-- CALS -->
          <xs:enumeration value="all"/>
          <xs:enumeration value="bottom"/>
          <xs:enumeration value="none"/>
          <xs:enumeration value="sides"/>
          <xs:enumeration value="top"/>
          <xs:enumeration value="topbot"/>
          <!-- HTML -->
          <xs:enumeration value="void"/>
          <xs:enumeration value="above"/>
          <xs:enumeration value="below"/>
          <xs:enumeration value="hsides"/>
          <xs:enumeration value="lhs"/>
          <xs:enumeration value="rhs"/>
          <xs:enumeration value="vsides"/>
          <xs:enumeration value="box"/>
          <xs:enumeration value="border"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
  </xs:attributeGroup>

  <xs:element name="table">
    <xs:complexType>
      <xs:sequence>
        <xs:choice>
          <xs:sequence> <!-- CALS -->
            <xs:group ref="db:_info.title.onlyreq" minOccurs="0" maxOccurs="1"/>
            <xs:choice minOccurs="0" maxOccurs="unbounded">
              <xs:element ref="db:alt"/>
              <xs:group ref="db:indexing.inlines"/>
              <xs:element ref="db:textobject"/>
            </xs:choice>
            <xs:choice>
              <xs:element ref="db:mediaobject" minOccurs="1" maxOccurs="unbounded"/>
              <xs:element ref="db:tgroup" minOccurs="1" maxOccurs="unbounded"/>
            </xs:choice>
            <xs:element ref="db:caption" minOccurs="0" maxOccurs="1"/>
          </xs:sequence>
          <xs:sequence> <!-- HTML -->
            <xs:element ref="db:caption"/>
            <xs:choice>
              <xs:element ref="db:col" minOccurs="0" maxOccurs="unbounded"/>
              <xs:element ref="db:colgroup" minOccurs="0" maxOccurs="unbounded"/>
            </xs:choice>
            <xs:element ref="db:thead" minOccurs="0" maxOccurs="1"/>
            <xs:element ref="db:tfoot" minOccurs="0" maxOccurs="1"/>
            <xs:choice>
              <xs:element ref="db:tbody" minOccurs="1" maxOccurs="unbounded"/>
              <xs:element ref="db:tr" minOccurs="1" maxOccurs="unbounded"/>
            </xs:choice>
          </xs:sequence>
        </xs:choice>
      </xs:sequence>
      <!-- common and CALS -->
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:label.attribute"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
      <xs:attributeGroup ref="db:tabstyle.attribute"/>
      <xs:attributeGroup ref="db:floatstyle.attribute"/>
      <xs:attributeGroup ref="db:orient.attribute"/>
      <xs:attributeGroup ref="db:colsep.attribute"/>
      <xs:attributeGroup ref="db:rowsep.attribute"/>
      <xs:attributeGroup ref="db:pgwide.attribute"/>
      <xs:attribute name="shortentry" type="db:zeroorone.type"/>
      <xs:attribute name="tocentry" type="db:zeroorone.type"/>
      <xs:attributeGroup ref="db:rowheader.attribute"/>

      <!-- HTML -->
      <xs:attributeGroup ref="db:html.coreattrs"/>
      <xs:attributeGroup ref="db:html.i18n"/>
      <xs:attributeGroup ref="db:html.events"/>
      <xs:attributeGroup ref="db:html.table.attributes"/>

      <!-- Merged -->
      <xs:attributeGroup ref="db:merged-html-cals-frame.attribute"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="informaltable">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="db:_info.title.forbidden" minOccurs="0" maxOccurs="1"/>
        <xs:choice>
          <xs:sequence> <!-- CALS -->
            <xs:choice minOccurs="0" maxOccurs="unbounded">
              <xs:element ref="db:alt"/>
              <xs:group ref="db:indexing.inlines"/>
              <xs:element ref="db:textobject"/>
            </xs:choice>
            <xs:choice>
              <xs:element ref="db:mediaobject" minOccurs="1" maxOccurs="unbounded"/>
              <xs:element ref="db:tgroup" minOccurs="1" maxOccurs="unbounded"/>
            </xs:choice>
            <xs:element ref="db:caption" minOccurs="0" maxOccurs="1"/>
          </xs:sequence>
          <xs:sequence> <!-- HTML -->
            <xs:choice>
              <xs:element ref="db:col" minOccurs="0" maxOccurs="unbounded"/>
              <xs:element ref="db:colgroup" minOccurs="0" maxOccurs="unbounded"/>
            </xs:choice>
            <xs:element ref="db:thead" minOccurs="0" maxOccurs="1"/>
            <xs:element ref="db:tfoot" minOccurs="0" maxOccurs="1"/>
            <xs:choice>
              <xs:element ref="db:tbody" minOccurs="1" maxOccurs="unbounded"/>
              <xs:element ref="db:tr" minOccurs="1" maxOccurs="unbounded"/>
            </xs:choice>
          </xs:sequence>
        </xs:choice>
      </xs:sequence>
      <!-- Common and CALS -->
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:label.attribute"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
      <xs:attributeGroup ref="db:tabstyle.attribute"/>
      <xs:attributeGroup ref="db:floatstyle.attribute"/>
      <xs:attributeGroup ref="db:orient.attribute"/>
      <xs:attributeGroup ref="db:colsep.attribute"/>
      <xs:attributeGroup ref="db:rowsep.attribute"/>
      <xs:attributeGroup ref="db:pgwide.attribute"/>
      <xs:attribute name="shortentry" type="db:zeroorone.type"/>
      <xs:attribute name="tocentry" type="db:zeroorone.type"/>
      <xs:attributeGroup ref="db:rowheader.attribute"/>

      <!-- HTML -->
      <xs:attributeGroup ref="db:html.coreattrs"/>
      <xs:attributeGroup ref="db:html.i18n"/>
      <xs:attributeGroup ref="db:html.events"/>
      <xs:attributeGroup ref="db:html.table.attributes"/>

      <!-- Merged -->
      <xs:attributeGroup ref="db:merged-html-cals-frame.attribute"/>
    </xs:complexType>
  </xs:element>

  <xs:attributeGroup name="html.cellhalign">
    <xs:attribute name="align">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="left"/>
          <xs:enumeration value="center"/>
          <xs:enumeration value="right"/>
          <xs:enumeration value="justfy"/>
          <xs:enumeration value="char"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="charoff"/>
  </xs:attributeGroup>

  <xs:attributeGroup name="html.cellvalign">
    <xs:attribute name="valign">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="bottom"/>
          <xs:enumeration value="middle"/>
          <xs:enumeration value="top"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
  </xs:attributeGroup>

  <xs:element name="col">
    <xs:complexType>
      <xs:complexContent>
        <xs:restriction base="xs:anyType">
          <xs:attributeGroup ref="db:html.attrs"/>
          <xs:attribute name="span" type="xs:nonNegativeInteger"/>
          <xs:attribute name="width"/>
          <xs:attributeGroup ref="db:html.cellhalign"/>
          <xs:attributeGroup ref="db:html.cellvalign"/>
        </xs:restriction>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>

  <xs:element name="colgroup">
    <xs:complexType>
      <xs:sequence minOccurs="0" maxOccurs="unbounded">
        <xs:element ref="db:col"/>
      </xs:sequence>
      <xs:attributeGroup ref="db:html.attrs"/>
      <xs:attribute name="span" type="xs:nonNegativeInteger"/>
      <xs:attribute name="width"/>
      <xs:attributeGroup ref="db:html.cellhalign"/>
      <xs:attributeGroup ref="db:html.cellvalign"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="thead">
    <xs:complexType>
      <xs:choice>
        <xs:sequence> <!-- CALS -->
          <xs:element ref="db:colspec" minOccurs="0" maxOccurs="unbounded"/>
          <xs:element ref="db:row" minOccurs="1" maxOccurs="unbounded"/>
        </xs:sequence>
        <xs:sequence> <!-- HTML -->
          <xs:element ref="db:tr" minOccurs="1" maxOccurs="unbounded"/>
        </xs:sequence>
      </xs:choice>
      <!-- Common and CALS -->
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
      <xs:attributeGroup ref="db:valign.attribute"/>

      <!-- HTML -->
      <xs:attributeGroup ref="db:html.coreattrs"/>
      <xs:attributeGroup ref="db:html.i18n"/>
      <xs:attributeGroup ref="db:html.events"/>
      <xs:attributeGroup ref="db:html.cellhalign"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="tfoot">
    <xs:complexType>
      <xs:choice>
        <xs:sequence> <!-- CALS -->
          <xs:element ref="db:colspec" minOccurs="0" maxOccurs="unbounded"/>
          <xs:element ref="db:row" minOccurs="1" maxOccurs="unbounded"/>
        </xs:sequence>
        <xs:sequence> <!-- HTML -->
          <xs:element ref="db:tr" minOccurs="1" maxOccurs="unbounded"/>
        </xs:sequence>
      </xs:choice>
      <!-- Common and CALS -->
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
      <xs:attributeGroup ref="db:valign.attribute"/>

      <!-- HTML -->
      <xs:attributeGroup ref="db:html.coreattrs"/>
      <xs:attributeGroup ref="db:html.i18n"/>
      <xs:attributeGroup ref="db:html.events"/>
      <xs:attributeGroup ref="db:html.cellhalign"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="tbody">
    <xs:complexType>
      <xs:choice>
        <xs:sequence> <!-- CALS -->
          <xs:element ref="db:row" minOccurs="1" maxOccurs="unbounded"/>
        </xs:sequence>
        <xs:sequence> <!-- HTML -->
          <xs:element ref="db:tr" minOccurs="1" maxOccurs="unbounded"/>
        </xs:sequence>
      </xs:choice>
      <!-- Common and CALS -->
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
      <xs:attributeGroup ref="db:valign.attribute"/>

      <!-- HTML -->
      <xs:attributeGroup ref="db:html.coreattrs"/>
      <xs:attributeGroup ref="db:html.i18n"/>
      <xs:attributeGroup ref="db:html.events"/>
      <xs:attributeGroup ref="db:html.cellhalign"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="tr">
    <xs:complexType>
      <xs:choice minOccurs="1" maxOccurs="unbounded">
        <xs:element ref="db:th"/>
        <xs:element ref="db:td"/>
      </xs:choice>
      <xs:attributeGroup ref="db:html.attrs"/>
      <xs:attributeGroup ref="db:html.cellhalign"/>
      <xs:attributeGroup ref="db:html.cellvalign"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="th">
    <xs:complexType>
      <xs:choice>
        <xs:group ref="db:all.inlines" minOccurs="0" maxOccurs="unbounded"/>
        <xs:group ref="db:all-i.blocks" minOccurs="0" maxOccurs="unbounded"/>
      </xs:choice>
      <xs:attributeGroup ref="db:html.attrs"/>
      <xs:attributeGroup ref="db:html.tablecell.attributes"/>
      <xs:attributeGroup ref="db:html.cellhalign"/>
      <xs:attributeGroup ref="db:html.cellvalign"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="td">
    <xs:complexType mixed="true">
      <xs:choice>
        <xs:group ref="db:all.inlines" minOccurs="0" maxOccurs="unbounded"/>
        <xs:group ref="db:all-i.blocks" minOccurs="0" maxOccurs="unbounded"/>
      </xs:choice>
      <xs:attributeGroup ref="db:html.attrs"/>
      <xs:attributeGroup ref="db:html.tablecell.attributes"/>
      <xs:attributeGroup ref="db:html.cellhalign"/>
      <xs:attributeGroup ref="db:html.cellvalign"/>
    </xs:complexType>
  </xs:element>

  <xs:attributeGroup name="char.attribute">
    <xs:attribute name="char"/>
  </xs:attributeGroup>

  <xs:attributeGroup name="charoff.attribute">
    <xs:attribute name="charoff">
      <xs:simpleType>
        <xs:restriction base="xs:nonNegativeInteger">
          <xs:minExclusive value="0"/>
          <xs:maxExclusive value="100"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
  </xs:attributeGroup>

  <xs:attributeGroup name="colsep.attribute">
    <xs:attribute name="colsep" type="db:zeroorone.type"/>
  </xs:attributeGroup>

  <xs:attributeGroup name="rowsep.attribute">
    <xs:attribute name="rowsep" type="db:zeroorone.type"/>
  </xs:attributeGroup>

  <xs:attributeGroup name="rowheader.attribute">
    <xs:attribute name="rowheader">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="firstcol"/>
          <xs:enumeration value="norowheader"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
  </xs:attributeGroup>

  <xs:attributeGroup name="align.attribute">
    <xs:attribute name="align">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="center"/>
          <xs:enumeration value="char"/>
          <xs:enumeration value="justify"/>
          <xs:enumeration value="left"/>
          <xs:enumeration value="right"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
  </xs:attributeGroup>

  <xs:attributeGroup name="valign.attribute">
    <xs:attribute name="valign">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="bottom"/>
          <xs:enumeration value="middle"/>
          <xs:enumeration value="top"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
  </xs:attributeGroup>

  <xs:attributeGroup name="column-spec.attributes">
    <xs:attribute name="colname"/>
    <xs:attribute name="namest"/>
    <xs:attribute name="nameend"/>
    <xs:attribute name="spanname"/>
  </xs:attributeGroup>

  <xs:element name="tgroup">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="db:colspec" minOccurs="0" maxOccurs="unbounded"/>
        <xs:element ref="db:spanspec" minOccurs="0" maxOccurs="unbounded"/>
        <xs:element ref="db:thead" minOccurs="0" maxOccurs="1"/>
        <xs:element ref="db:tfoot" minOccurs="0" maxOccurs="1"/>
        <xs:element ref="db:tbody" minOccurs="1" maxOccurs="1"/>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attribute name="tgroupstyle"/>
      <xs:attribute name="cols" type="xs:positiveInteger"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
      <xs:attributeGroup ref="db:char.attribute"/>
      <xs:attributeGroup ref="db:charoff.attribute"/>
      <xs:attributeGroup ref="db:colsep.attribute"/>
      <xs:attributeGroup ref="db:rowsep.attribute"/>
      <xs:attributeGroup ref="db:align.attribute"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="colspec">
    <xs:complexType>
      <xs:complexContent>
        <xs:restriction base="xs:anyType">
          <xs:attribute name="role"/>
          <xs:attribute name="colnum" type="xs:positiveInteger"/>
          <xs:attribute name="colwidth"/>
          <xs:attributeGroup ref="db:common.attributes"/>
          <xs:attributeGroup ref="db:common.linking.attributes"/>
          <xs:attributeGroup ref="db:char.attribute"/>
          <xs:attributeGroup ref="db:charoff.attribute"/>
          <xs:attributeGroup ref="db:colsep.attribute"/>
          <xs:attributeGroup ref="db:rowsep.attribute"/>
          <xs:attributeGroup ref="db:align.attribute"/>
          <xs:attribute name="colname"/>
        </xs:restriction>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>

  <xs:element name="spanspec">
    <xs:complexType>
      <xs:complexContent>
        <xs:restriction base="xs:anyType">
          <xs:attribute name="role"/>
          <xs:attributeGroup ref="db:common.attributes"/>
          <xs:attributeGroup ref="db:common.linking.attributes"/>
          <xs:attribute name="spanname"/>
          <xs:attribute name="namest"/>
          <xs:attribute name="nameend"/>
          <xs:attributeGroup ref="db:char.attribute"/>
          <xs:attributeGroup ref="db:charoff.attribute"/>
          <xs:attributeGroup ref="db:colsep.attribute"/>
          <xs:attributeGroup ref="db:rowsep.attribute"/>
          <xs:attributeGroup ref="db:align.attribute"/>
        </xs:restriction>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>

  <xs:element name="row">
    <xs:complexType>
      <xs:choice minOccurs="1" maxOccurs="unbounded">
        <xs:element ref="db:entry"/>
        <xs:element ref="db:entrytbl"/>
      </xs:choice>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
      <xs:attributeGroup ref="db:rowsep.attribute"/>
      <xs:attributeGroup ref="db:valign.attribute"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="entry">
    <xs:complexType mixed="true">
      <xs:choice>
        <xs:group ref="db:all.inlines" minOccurs="0" maxOccurs="unbounded"/>
        <xs:group ref="db:all-i.blocks" minOccurs="0" maxOccurs="unbounded"/>
      </xs:choice>
      <xs:attribute name="role"/>
      <xs:attribute name="morerows" type="xs:nonNegativeInteger"/>
      <xs:attribute name="rotate" type="db:zeroorone.type"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
      <xs:attributeGroup ref="db:valign.attribute"/>
      <xs:attributeGroup ref="db:char.attribute"/>
      <xs:attributeGroup ref="db:charoff.attribute"/>
      <xs:attributeGroup ref="db:colsep.attribute"/>
      <xs:attributeGroup ref="db:rowsep.attribute"/>
      <xs:attributeGroup ref="db:column-spec.attributes"/>
      <xs:attributeGroup ref="db:align.attribute"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="entrytbl">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="db:colspec" minOccurs="0" maxOccurs="unbounded"/>
        <xs:element ref="db:spanspec" minOccurs="0" maxOccurs="unbounded"/>
        <xs:element ref="db:thead" minOccurs="0" maxOccurs="1"/>
        <xs:element ref="db:tbody"/>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attribute name="tgroupstyle"/>
      <xs:attribute name="cols" type="xs:positiveInteger"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
      <xs:attributeGroup ref="db:char.attribute"/>
      <xs:attributeGroup ref="db:charoff.attribute"/>
      <xs:attributeGroup ref="db:colsep.attribute"/>
      <xs:attributeGroup ref="db:rowsep.attribute"/>
      <xs:attributeGroup ref="db:column-spec.attributes"/>
      <xs:attributeGroup ref="db:align.attribute"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="msgset">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="db:_info.title.only" minOccurs="0"/>
        <xs:choice>
          <xs:element ref="db:msgentry" maxOccurs="unbounded"/>
          <xs:element ref="db:simplemsgentry" maxOccurs="unbounded"/>
        </xs:choice>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="msgentry">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="db:msg" maxOccurs="unbounded"/>
        <xs:element ref="db:msginfo" minOccurs="0"/>
        <xs:element ref="db:msgexplan" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="simplemsgentry">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="db:msgtext"/>
        <xs:element ref="db:msgexplan" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
      <xs:attribute name="msgaud"/>
      <xs:attribute name="msgorig"/>
      <xs:attribute name="msglevel"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="msg">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="db:_info.title.only" minOccurs="0"/>
        <xs:element ref="db:msgmain"/>
        <xs:choice minOccurs="0" maxOccurs="unbounded">
          <xs:element ref="db:msgsub"/>
          <xs:element ref="db:msgrel"/>
        </xs:choice>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="msgmain">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="db:_info.title.only" minOccurs="0"/>
        <xs:element ref="db:msgtext"/>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="msgsub">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="db:_info.title.only" minOccurs="0"/>
        <xs:element ref="db:msgtext"/>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="msgrel">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="db:_info.title.only" minOccurs="0"/>
        <xs:element ref="db:msgtext"/>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="msgtext" type="db:block.type"/>

  <xs:element name="msginfo">
    <xs:complexType>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element ref="db:msglevel"/>
        <xs:element ref="db:msgorig"/>
        <xs:element ref="db:msgaud"/>
      </xs:choice>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="msglevel" type="db:limited.text"/>
  <xs:element name="msgorig" type="db:limited.text"/>
  <xs:element name="msgaud" type="db:limited.text"/>
  <xs:element name="msgexplan" type="db:block.container"/>

  <xs:element name="qandaset">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="db:_info.title.only" minOccurs="0"/>
        <xs:group ref="db:all.blocks" minOccurs="0" maxOccurs="unbounded"/>
        <xs:choice>
          <xs:element ref="db:qandadiv" maxOccurs="unbounded"/>
          <xs:element ref="db:qandaentry" maxOccurs="unbounded"/>
        </xs:choice>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
      <xs:attribute name="defaultlabel">
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="none"/>
            <xs:enumeration value="number"/>
            <xs:enumeration value="qanda"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
    </xs:complexType>
  </xs:element>

  <xs:element name="qandadiv">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="db:_info.title.only" minOccurs="0"/>
        <xs:group ref="db:all.blocks" minOccurs="0" maxOccurs="unbounded"/>
        <xs:choice>
          <xs:element ref="db:qandadiv" maxOccurs="unbounded"/>
          <xs:element ref="db:qandaentry" maxOccurs="unbounded"/>
        </xs:choice>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="qandaentry">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="db:_info.title.only" minOccurs="0"/>
        <xs:element ref="db:question"/>
        <xs:element ref="db:answer" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="question">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="db:label" minOccurs="0"/>
        <xs:group ref="db:all.blocks" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="answer">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="db:label" minOccurs="0"/>
        <xs:group ref="db:all.blocks" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="label" type="db:limited.text"/>

  <xs:group name="math.inlines">
    <xs:choice>
      <xs:element ref="db:inlineequation"/>
    </xs:choice>
  </xs:group>

  <xs:group name="equation.content">
    <xs:choice>
      <xs:choice>
        <xs:element ref="db:mediaobject" maxOccurs="unbounded"/>
        <xs:element ref="db:mathphrase" maxOccurs="unbounded"/>
      </xs:choice>
      <xs:any namespace="http://www.w3.org/1998/Math/MathML" processContents="lax"/>
    </xs:choice>
  </xs:group>

  <xs:group name="inlineequation.content">
    <xs:choice>
      <xs:choice>
        <xs:element ref="db:inlinemediaobject" maxOccurs="unbounded"/>
        <xs:element ref="db:mathphrase" maxOccurs="unbounded"/>
      </xs:choice>
      <xs:any namespace="http://www.w3.org/1998/Math/MathML" processContents="lax"/>
    </xs:choice>
  </xs:group>

  <xs:element name="equation">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="db:_info.title.only" minOccurs="0"/>
        <xs:element ref="db:alt" minOccurs="0"/>
        <xs:group ref="db:equation.content"/>
        <xs:element ref="db:caption" minOccurs="0"/>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
      <xs:attributeGroup ref="db:label.attribute"/>
      <xs:attributeGroup ref="db:pgwide.attribute"/>
      <xs:attributeGroup ref="db:floatstyle.attribute"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="informalequation">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="db:_info.title.forbidden" minOccurs="0"/>
        <xs:element ref="db:alt" minOccurs="0"/>
        <xs:group ref="db:equation.content"/>
        <xs:element ref="db:caption" minOccurs="0"/>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
      <xs:attributeGroup ref="db:pgwide.attribute"/>
      <xs:attributeGroup ref="db:floatstyle.attribute"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="inlineequation">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="db:alt" minOccurs="0"/>
        <xs:group ref="db:inlineequation.content"/>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="mathphrase">
    <xs:complexType mixed="true">
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:group ref="db:ubiq.inlines"/>
        <xs:group ref="db:_emphasis"/>
      </xs:choice>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
    </xs:complexType>
  </xs:element>

  <xs:group name="markup.inlines">
    <xs:choice>
      <xs:element ref="db:tag"/>
      <xs:element ref="db:markup"/>
      <xs:element ref="db:token"/>
      <xs:element ref="db:symbol"/>
      <xs:element ref="db:literal"/>
      <xs:element ref="db:code"/>
      <xs:element ref="db:constant"/>
      <xs:element ref="db:email"/>
      <xs:element ref="db:uri"/>
    </xs:choice>
  </xs:group>

  <xs:element name="markup" type="db:limited.text"/>

  <xs:element name="tag">
    <xs:complexType mixed="true">
      <xs:complexContent>
        <xs:extension base="db:limited.text">
          <xs:attribute name="class">
            <xs:simpleType>
              <xs:restriction base="xs:token">
                <xs:enumeration value="attribute"/>
                <xs:enumeration value="attvalue"/>
                <xs:enumeration value="element"/>
                <xs:enumeration value="emptytag"/>
                <xs:enumeration value="endtag"/>
                <xs:enumeration value="genentity"/>
                <xs:enumeration value="localname"/>
                <xs:enumeration value="namespace"/>
                <xs:enumeration value="numcharref"/>
                <xs:enumeration value="paramentity"/>
                <xs:enumeration value="pi"/>
                <xs:enumeration value="prefix"/>
                <xs:enumeration value="comment"/>
                <xs:enumeration value="starttag"/>
                <xs:enumeration value="xmlpi"/>
              </xs:restriction>
            </xs:simpleType>
          </xs:attribute>
          <xs:attribute name="namespace" type="xs:anyURI"/>
        </xs:extension>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>

  <xs:element name="symbol">
    <xs:complexType mixed="true">
      <xs:complexContent>
        <xs:extension base="db:limited.text">
          <xs:attribute name="class">
            <xs:simpleType>
              <xs:restriction base="xs:token">
                <xs:enumeration value="limit"/>
              </xs:restriction>
            </xs:simpleType>
          </xs:attribute>
        </xs:extension>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>

  <xs:element name="token" type="db:limited.text"/>
  <xs:element name="literal" type="db:limited.text"/>

  <xs:element name="code">
    <xs:complexType mixed="true">
      <xs:complexContent>
        <xs:extension base="db:limited.text">
          <xs:attribute name="language"/>
        </xs:extension>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>

  <xs:element name="constant">
    <xs:complexType mixed="true">
      <xs:complexContent>
        <xs:extension base="db:limited.text">
          <xs:attribute name="class">
            <xs:simpleType>
              <xs:restriction base="xs:token">
                <xs:enumeration value="limit"/>
              </xs:restriction>
            </xs:simpleType>
          </xs:attribute>
        </xs:extension>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>

  <xs:element name="productname">
    <xs:complexType mixed="true">
      <xs:complexContent>
        <xs:extension base="db:limited.text">
          <xs:attribute name="class">
            <xs:simpleType>
              <xs:restriction base="xs:token">
                <xs:enumeration value="copyright"/>
                <xs:enumeration value="registered"/>
                <xs:enumeration value="service"/>
                <xs:enumeration value="trade"/>
              </xs:restriction>
            </xs:simpleType>
          </xs:attribute>
        </xs:extension>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>

  <xs:element name="productnumber" type="db:limited.text"/>

  <xs:element name="database">
    <xs:complexType mixed="true">
      <xs:complexContent>
        <xs:extension base="db:limited.text">
          <xs:attribute name="class">
            <xs:simpleType>
              <xs:restriction base="xs:token">
                <xs:enumeration value="altkey"/>
                <xs:enumeration value="constraint"/>
                <xs:enumeration value="datatype"/>
                <xs:enumeration value="field"/>
                <xs:enumeration value="foreignkey"/>
                <xs:enumeration value="group"/>
                <xs:enumeration value="index"/>
                <xs:enumeration value="key1"/>
                <xs:enumeration value="key2"/>
                <xs:enumeration value="name"/>
                <xs:enumeration value="primarykey"/>
                <xs:enumeration value="procedure"/>
                <xs:enumeration value="record"/>
                <xs:enumeration value="rule"/>
                <xs:enumeration value="secondarykey"/>
                <xs:enumeration value="table"/>
                <xs:enumeration value="user"/>
                <xs:enumeration value="view"/>
              </xs:restriction>
            </xs:simpleType>
          </xs:attribute>
        </xs:extension>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>

  <xs:element name="application">
    <xs:complexType mixed="true">
      <xs:complexContent>
        <xs:extension base="db:limited.text">
          <xs:attribute name="class">
            <xs:simpleType>
              <xs:restriction base="xs:token">
                <xs:enumeration value="hardware"/>
                <xs:enumeration value="software"/>
              </xs:restriction>
            </xs:simpleType>
          </xs:attribute>
        </xs:extension>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>

  <xs:element name="hardware" type="db:limited.text"/>

  <xs:group name="gui.inlines">
    <xs:choice>
      <xs:element ref="db:guiicon"/>
      <xs:element ref="db:guibutton"/>
      <xs:element ref="db:guimenuitem"/>
      <xs:element ref="db:guimenu"/>
      <xs:element ref="db:guisubmenu"/>
      <xs:element ref="db:guilabel"/>
      <xs:element ref="db:menuchoice"/>
      <xs:element ref="db:mousebutton"/>
    </xs:choice>
  </xs:group>

  <xs:complexType name="gui.inline.type" mixed="true">
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:group ref="db:_text"/>
      <xs:element ref="db:accel"/>
    </xs:choice>
    <xs:attribute name="role"/>
    <xs:attributeGroup ref="db:common.attributes"/>
    <xs:attributeGroup ref="db:common.linking.attributes"/>
  </xs:complexType>

  <xs:element name="guibutton" type="db:gui.inline.type"/>
  <xs:element name="guiicon" type="db:gui.inline.type"/>
  <xs:element name="guilabel" type="db:gui.inline.type"/>
  <xs:element name="guimenu" type="db:gui.inline.type"/>
  <xs:element name="guimenuitem" type="db:gui.inline.type"/>
  <xs:element name="guisubmenu" type="db:gui.inline.type"/>

  <xs:element name="menuchoice">
    <xs:complexType mixed="true">
      <xs:sequence>
        <xs:element ref="db:shortcut" minOccurs="0"/>
        <xs:choice maxOccurs="unbounded">
          <xs:element ref="db:guibutton"/>
          <xs:element ref="db:guiicon"/>
          <xs:element ref="db:guilabel"/>
          <xs:element ref="db:guimenu"/>
          <xs:element ref="db:guimenuitem"/>
          <xs:element ref="db:guisubmenu"/>
        </xs:choice>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="mousebutton" type="db:limited.text"/>

  <xs:group name="keyboard.inlines">
    <xs:choice>
      <xs:element ref="db:keycombo"/>
      <xs:element ref="db:keycap"/>
      <xs:element ref="db:keycode"/>
      <xs:element ref="db:keysym"/>
      <xs:element ref="db:shortcut"/>
      <xs:element ref="db:accel"/>
    </xs:choice>
  </xs:group>

  <xs:element name="keycap">
    <xs:complexType mixed="true">
      <xs:complexContent>
        <xs:extension base="db:limited.text">
          <xs:attribute name="function">
            <xs:simpleType>
              <xs:restriction base="xs:token">
                <xs:enumeration value="alt"/>
                <xs:enumeration value="backspace"/>
                <xs:enumeration value="command"/>
                <xs:enumeration value="control"/>
                <xs:enumeration value="delete"/>
                <xs:enumeration value="down"/>
                <xs:enumeration value="end"/>
                <xs:enumeration value="enter"/>
                <xs:enumeration value="escape"/>
                <xs:enumeration value="home"/>
                <xs:enumeration value="insert"/>
                <xs:enumeration value="left"/>
                <xs:enumeration value="meta"/>
                <xs:enumeration value="option"/>
                <xs:enumeration value="pagedown"/>
                <xs:enumeration value="pageup"/>
                <xs:enumeration value="right"/>
                <xs:enumeration value="shift"/>
                <xs:enumeration value="space"/>
                <xs:enumeration value="tab"/>
                <xs:enumeration value="up"/>
                <xs:enumeration value="other"/>
              </xs:restriction>
            </xs:simpleType>
          </xs:attribute>
          <xs:attribute name="otherfunction"/>
          <xs:assert test="(not(@function eq 'other') and not(@otherfunction))
                           or (@function='other' and @otherfunction)">
        <xs:annotation>
          <xs:documentation>The @function/@otherfunction attributes must be consistent</xs:documentation>
        </xs:annotation>
      </xs:assert>
        </xs:extension>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>

  <xs:element name="keycode" type="db:limited.text"/>

  <xs:group name="keycombination.contentmodel">
    <xs:choice>
      <xs:element ref="db:keycap"/>
      <xs:element ref="db:keycombo"/>
      <xs:element ref="db:keysym"/>
      <xs:element ref="db:mousebutton"/>
    </xs:choice>
  </xs:group>

  <xs:element name="keycombo">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="db:keycombination.contentmodel" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
      <xs:attribute name="action">
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="click"/>
            <xs:enumeration value="double-click"/>
            <xs:enumeration value="press"/>
            <xs:enumeration value="seq"/>
            <xs:enumeration value="simul"/>
            <xs:enumeration value="other"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
      <xs:attribute name="otheraction"/>
      <xs:assert test="(not(@action eq 'other') and not(@otheraction))
                       or (@action='other' and @otheraction)">
        <xs:annotation>
          <xs:documentation>The @action/@otheraction attributes must be consistent</xs:documentation>
        </xs:annotation>
      </xs:assert>
    </xs:complexType>
  </xs:element>

  <xs:element name="keysym" type="db:limited.text"/>
  <xs:element name="accel" type="db:limited.text"/>

  <xs:element name="shortcut">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="db:keycombination.contentmodel" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
      <xs:attribute name="action">
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="click"/>
            <xs:enumeration value="double-click"/>
            <xs:enumeration value="press"/>
            <xs:enumeration value="seq"/>
            <xs:enumeration value="simul"/>
            <xs:enumeration value="other"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
      <xs:attribute name="otheraction"/>
      <xs:assert test="(not(@action eq 'other') and not(@otheraction))
                       or (@action='other' and @otheraction)">
        <xs:annotation>
          <xs:documentation>The @action/@otheraction attributes must be consistent</xs:documentation>
        </xs:annotation>
      </xs:assert>
    </xs:complexType>
  </xs:element>

  <xs:group name="os.inlines">
    <xs:choice>
      <xs:element ref="db:prompt"/>
      <xs:element ref="db:envar"/>
      <xs:element ref="db:filename"/>
      <xs:element ref="db:command"/>
      <xs:element ref="db:computeroutput"/>
      <xs:element ref="db:userinput"/>
    </xs:choice>
  </xs:group>

  <xs:group name="computeroutput.inlines">
    <xs:choice>
      <xs:group ref="db:ubiq.inlines"/>
      <xs:group ref="db:os.inlines"/>
      <xs:group ref="db:technical.inlines"/>
      <xs:element ref="db:co"/>
      <xs:group ref="db:markup.inlines"/>
    </xs:choice>
  </xs:group>

  <xs:group name="userinput.inlines">
    <xs:choice>
      <xs:group ref="db:ubiq.inlines"/>
      <xs:group ref="db:os.inlines"/>
      <xs:group ref="db:technical.inlines"/>
      <xs:element ref="db:co"/>
      <xs:group ref="db:markup.inlines"/>
      <xs:group ref="db:gui.inlines"/>
      <xs:group ref="db:keyboard.inlines"/>
    </xs:choice>
  </xs:group>

  <xs:group name="prompt.inlines">
    <xs:choice>
      <xs:group ref="db:_text"/>
      <xs:element ref="db:co"/>
    </xs:choice>
  </xs:group>

  <xs:element name="prompt">
    <xs:complexType mixed="true">
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:group ref="db:prompt.inlines"/>
      </xs:choice>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="envar" type="db:limited.text"/>

  <xs:element name="filename">
    <xs:complexType mixed="true">
      <xs:complexContent>
        <xs:extension base="db:limited.text">
          <xs:attribute name="class">
            <xs:simpleType>
              <xs:restriction base="xs:token">
                <xs:enumeration value="devicefile"/>
                <xs:enumeration value="directory"/>
                <xs:enumeration value="extension"/>
                <xs:enumeration value="headerfile"/>
                <xs:enumeration value="libraryfile"/>
                <xs:enumeration value="partition"/>
                <xs:enumeration value="symlink"/>
              </xs:restriction>
            </xs:simpleType>
          </xs:attribute>
          <xs:attribute name="path"/>
        </xs:extension>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>

  <xs:element name="command" type="db:limited.text"/>

  <xs:element name="computeroutput">
    <xs:complexType mixed="true">
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:group ref="db:computeroutput.inlines"/>
      </xs:choice>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="userinput">
    <xs:complexType mixed="true">
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:group ref="db:userinput.inlines"/>
      </xs:choice>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="cmdsynopsis">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="db:_info.title.forbidden" minOccurs="0"/>
        <xs:choice maxOccurs="unbounded">
          <xs:element ref="db:command"/>
          <xs:element ref="db:arg"/>
          <xs:element ref="db:group"/>
          <xs:element ref="db:sbr"/>
        </xs:choice>
        <xs:element ref="db:synopfragment" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
      <xs:attribute name="sepchar"/>
      <xs:attribute name="cmdlength"/>
      <xs:attributeGroup ref="db:label.attribute"/>
    </xs:complexType>
  </xs:element>

  <xs:attributeGroup name="rep.attribute">
    <xs:attribute name="rep">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="norepeat"/>
          <xs:enumeration value="repeat"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
  </xs:attributeGroup>

  <xs:attributeGroup name="choice.attribute">
    <xs:attribute name="choice">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="opt"/>
          <xs:enumeration value="plain"/>
          <xs:enumeration value="req"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
  </xs:attributeGroup>

  <xs:element name="arg">
    <xs:complexType mixed="true">
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:group ref="db:_text"/>
        <xs:element ref="db:arg"/>
        <xs:element ref="db:group"/>
        <xs:element ref="db:option"/>
        <xs:element ref="db:synopfragmentref"/>
        <xs:element ref="db:sbr"/>
      </xs:choice>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
      <xs:attributeGroup ref="db:rep.attribute"/>
      <xs:attributeGroup ref="db:choice.attribute"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="group">
    <xs:complexType>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element ref="db:arg"/>
        <xs:element ref="db:group"/>
        <xs:element ref="db:option"/>
        <xs:element ref="db:synopfragmentref"/>
        <xs:element ref="db:replaceable"/>
        <xs:element ref="db:sbr"/>
      </xs:choice>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
      <xs:attributeGroup ref="db:rep.attribute"/>
      <xs:attributeGroup ref="db:choice.attribute"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="sbr">
    <xs:complexType>
      <xs:complexContent>
        <xs:restriction base="xs:anyType">
          <xs:attribute name="role"/>
          <xs:attributeGroup ref="db:common.attributes"/>
        </xs:restriction>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>

  <xs:element name="synopfragment">
    <xs:complexType>
      <xs:choice maxOccurs="unbounded">
        <xs:element ref="db:arg"/>
        <xs:element ref="db:group"/>
      </xs:choice>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="synopfragmentref">
    <xs:complexType mixed="true">
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="synopsis">
    <xs:complexType mixed="true">
      <xs:complexContent>
        <xs:extension base="db:verbatim.monospaced">
          <xs:assert test="not(@xml:space) or @xml:space='preserve'">
            <xs:annotation>
              <xs:documentation>In synopsis, @xml:space must be 'preserve'</xs:documentation>
            </xs:annotation>
          </xs:assert>
        </xs:extension>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>

  <xs:element name="funcsynopsis">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="db:_info.title.forbidden"/>
        <xs:choice maxOccurs="unbounded">
          <xs:element ref="db:funcsynopsisinfo"/>
          <xs:element ref="db:funcprototype"/>
        </xs:choice>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
      <xs:attributeGroup ref="db:verbatim.language.attribute"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="funcsynopsisinfo">
    <xs:complexType mixed="true">
      <xs:complexContent>
        <xs:extension base="db:verbatim.monospaced">
          <xs:assert test="not(@xml:space) or @xml:space='preserve'">
            <xs:annotation>
              <xs:documentation>In funcsynopsisinfo, @xml:space must be 'preserve'</xs:documentation>
            </xs:annotation>
          </xs:assert>
        </xs:extension>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>

  <xs:element name="funcprototype">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="db:modifier" minOccurs="0" maxOccurs="unbounded"/>
        <xs:element ref="db:funcdef"/>
        <xs:choice>
          <xs:element ref="db:void"/>
          <xs:element ref="db:varargs"/>
          <xs:sequence>
            <xs:element ref="db:paramdef" maxOccurs="unbounded"/>
            <xs:element ref="db:varargs" minOccurs="0"/>
          </xs:sequence>
        </xs:choice>
        <xs:element ref="db:modifier" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="funcdef">
    <xs:complexType mixed="true">
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:group ref="db:_text"/>
        <xs:element ref="db:type"/>
        <xs:element ref="db:function"/>
      </xs:choice>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="function" type="db:limited.text"/>

  <xs:element name="void">
    <xs:complexType>
      <xs:complexContent>
        <xs:restriction base="xs:anyType">
          <xs:attribute name="role"/>
          <xs:attributeGroup ref="db:common.attributes"/>
          <xs:attributeGroup ref="db:common.linking.attributes"/>
        </xs:restriction>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>

  <xs:element name="varargs">
    <xs:complexType>
      <xs:complexContent>
        <xs:restriction base="xs:anyType">
          <xs:attribute name="role"/>
          <xs:attributeGroup ref="db:common.attributes"/>
          <xs:attributeGroup ref="db:common.linking.attributes"/>
        </xs:restriction>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>

  <xs:element name="paramdef">
    <xs:complexType mixed="true">
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:group ref="db:_text"/>
        <xs:element ref="db:initializer"/>
        <xs:element ref="db:type"/>
        <xs:element ref="db:parameter"/>
        <xs:element ref="db:funcparams"/>
      </xs:choice>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
      <xs:attributeGroup ref="db:choice.attribute"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="funcparams" type="db:limited.text"/>

  <xs:element name="classsynopsis">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="db:oo.inlines"/>
        <xs:choice minOccurs="0" maxOccurs="unbounded">
          <xs:element ref="db:classsynopsisinfo"/>
          <xs:element ref="db:methodsynopsis"/>
          <xs:element ref="db:constructorsynopsis"/>
          <xs:element ref="db:destructorsynopsis"/>
          <xs:element ref="db:fieldsynopsis"/>
        </xs:choice>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
      <xs:attributeGroup ref="db:verbatim.language.attribute"/>
      <xs:attribute name="class">
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="class"/>
            <xs:enumeration value="interface"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
    </xs:complexType>
  </xs:element>

  <xs:element name="classsynopsisinfo">
    <xs:complexType mixed="true">
      <xs:complexContent>
        <xs:extension base="db:verbatim.monospaced">
          <xs:assert test="not(@xml:space) or @xml:space='preserve'">
            <xs:annotation>
              <xs:documentation>In classsynopsisinfo, @xml:space must be 'preserve'</xs:documentation>
            </xs:annotation>
          </xs:assert>
        </xs:extension>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>

  <xs:element name="ooclass">
    <xs:complexType>
      <xs:sequence>
        <xs:choice minOccurs="0" maxOccurs="unbounded">
          <xs:element ref="db:package"/>
          <xs:element ref="db:modifier"/>
        </xs:choice>
        <xs:element ref="db:classname"/>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="oointerface">
    <xs:complexType>
      <xs:sequence>
        <xs:choice minOccurs="0" maxOccurs="unbounded">
          <xs:element ref="db:package"/>
          <xs:element ref="db:modifier"/>
        </xs:choice>
        <xs:element ref="db:interfacename"/>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="ooexception">
    <xs:complexType>
      <xs:sequence>
        <xs:choice minOccurs="0" maxOccurs="unbounded">
          <xs:element ref="db:package"/>
          <xs:element ref="db:modifier"/>
        </xs:choice>
        <xs:element ref="db:exceptionname"/>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="modifier">
    <xs:complexType mixed="true">
      <xs:complexContent>
        <xs:extension base="db:limited.text">
          <xs:attribute ref="xml:space"/>
        </xs:extension>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>

  <xs:element name="interfacename" type="db:limited.text"/>
  <xs:element name="exceptionname" type="db:limited.text"/>

  <xs:element name="fieldsynopsis">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="db:modifier" minOccurs="0" maxOccurs="unbounded"/>
        <xs:element ref="db:type" minOccurs="0"/>
        <xs:element ref="db:varname"/>
        <xs:element ref="db:initializer" minOccurs="0"/>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
      <xs:attributeGroup ref="db:verbatim.language.attribute"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="initializer" type="db:limited.text"/>

  <xs:element name="constructorsynopsis">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="db:modifier" minOccurs="0" maxOccurs="unbounded"/>
        <xs:element ref="db:methodname" minOccurs="0"/>
        <xs:choice>
          <xs:element ref="db:methodparam" maxOccurs="unbounded"/>
          <xs:element ref="db:void" minOccurs="0"/>
        </xs:choice>
        <xs:element ref="db:exceptionname" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
      <xs:attributeGroup ref="db:verbatim.language.attribute"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="destructorsynopsis">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="db:modifier" minOccurs="0" maxOccurs="unbounded"/>
        <xs:element ref="db:methodname" minOccurs="0"/>
        <xs:choice>
          <xs:element ref="db:methodparam" maxOccurs="unbounded"/>
          <xs:element ref="db:void" minOccurs="0"/>
        </xs:choice>
        <xs:element ref="db:exceptionname" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
      <xs:attributeGroup ref="db:verbatim.language.attribute"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="methodsynopsis">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="db:modifier" minOccurs="0" maxOccurs="unbounded"/>
        <xs:choice minOccurs="0">
          <xs:element ref="db:type"/>
          <xs:element ref="db:void"/>
        </xs:choice>
        <xs:element ref="db:methodname"/>
        <xs:choice>
          <xs:element ref="db:methodparam" maxOccurs="unbounded"/>
          <xs:element ref="db:void" minOccurs="0"/>
        </xs:choice>
        <xs:element ref="db:exceptionname" minOccurs="0" maxOccurs="unbounded"/>
        <xs:element ref="db:modifier" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
      <xs:attributeGroup ref="db:verbatim.language.attribute"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="methodname" type="db:limited.text"/>

  <xs:element name="methodparam">
    <xs:complexType>
      <xs:sequence>
        <!-- FIXME: Relaxed to avoid ambiguity wrt db:modifier -->
        <xs:choice maxOccurs="unbounded">
          <xs:element ref="db:modifier"/>
          <xs:element ref="db:type"/>
          <xs:element ref="db:parameter"/>
          <xs:element ref="db:initializer"/>
          <xs:element ref="db:funcparams"/>
        </xs:choice>
      </xs:sequence>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
      <xs:attributeGroup ref="db:rep.attribute"/>
      <xs:attributeGroup ref="db:choice.attribute"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="varname" type="db:limited.text"/>
  <xs:element name="returnvalue" type="db:limited.text"/>
  <xs:element name="type" type="db:limited.text"/>
  <xs:element name="classname" type="db:limited.text"/>

  <xs:complexType name="admonition.type">
    <xs:sequence>
      <xs:group ref="db:_info.title.only"/>
      <xs:group ref="db:all.blocks" maxOccurs="unbounded"/>
    </xs:sequence>
    <xs:attribute name="role"/>
    <xs:attributeGroup ref="db:common.attributes"/>
    <xs:attributeGroup ref="db:common.linking.attributes"/>
  </xs:complexType>

  <xs:element name="caution" type="db:admonition.type"/>
  <xs:element name="note" type="db:admonition.type"/>
  <xs:element name="tip" type="db:admonition.type"/>
  <xs:element name="important" type="db:admonition.type"/>
  <xs:element name="warning" type="db:admonition.type"/>

  <xs:group name="error.inlines">
    <xs:choice>
      <xs:element ref="db:errorcode"/>
      <xs:element ref="db:errortext"/>
      <xs:element ref="db:errorname"/>
      <xs:element ref="db:errortype"/>
    </xs:choice>
  </xs:group>

  <xs:element name="errorcode" type="db:limited.text"/>
  <xs:element name="errortext" type="db:limited.text"/>
  <xs:element name="errorname" type="db:limited.text"/>
  <xs:element name="errortype" type="db:limited.text"/>

  <xs:group name="systemitem.inlines">
    <xs:choice>
      <xs:group ref="db:_text"/>
      <xs:element ref="db:co"/>
    </xs:choice>
  </xs:group>

  <xs:element name="systemitem">
    <xs:complexType mixed="true">
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:group ref="db:systemitem.inlines"/>
      </xs:choice>
      <xs:attribute name="role"/>
      <xs:attributeGroup ref="db:common.attributes"/>
      <xs:attributeGroup ref="db:common.linking.attributes"/>
      <xs:attribute name="class">
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="daemon"/>
            <xs:enumeration value="domainname"/>
            <xs:enumeration value="etheraddress"/>
            <xs:enumeration value="event"/>
            <xs:enumeration value="eventhandler"/>
            <xs:enumeration value="filesystem"/>
            <xs:enumeration value="fqdomainname"/>
            <xs:enumeration value="groupname"/>
            <xs:enumeration value="ipaddress"/>
            <xs:enumeration value="library"/>
            <xs:enumeration value="macro"/>
            <xs:enumeration value="netmask"/>
            <xs:enumeration value="newsgroup"/>
            <xs:enumeration value="osname"/>
            <xs:enumeration value="process"/>
            <xs:enumeration value="protocol"/>
            <xs:enumeration value="resource"/>
            <xs:enumeration value="server"/>
            <xs:enumeration value="service"/>
            <xs:enumeration value="systemname"/>
            <xs:enumeration value="username"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
    </xs:complexType>
  </xs:element>

  <xs:element name="option" type="db:limited.text"/>
  <xs:element name="optional" type="db:limited.text"/>
  <xs:element name="property" type="db:limited.text"/>

</xs:schema>
