<?xml version="1.0" encoding="UTF-8"?>
<!-- ...................................................................... -->
<!-- SCons DocBook V4.5-Based extension V1.0 XML information pool module .. -->
<!-- File dbpoolx.xsd ..................................................... -->
<!-- Copyright (c) 2001-7,2010,2011,2012 The SCons Foundation

     Permission is hereby granted, free of charge, to any person obtaining
     a copy of this software and associated documentation files (the
     "Software"), to deal in the Software without restriction, including
     without limitation the rights to use, copy, modify, merge, publish,
     distribute, sublicense, and/or sell copies of the Software, and to
     permit persons to whom the Software is furnished to do so, subject to
     the following conditions:

     The above copyright notice and this permission notice shall be included
     in all copies or substantial portions of the Software.

     THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
     KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
     WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
     NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
     LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
     OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
     WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

     This DTD extension is based on the Docbook XML information pool
     module V4.5 with:
     
       Copyright 1992-2004 HaL Computer Systems, Inc.,
       O'Reilly & Associates, Inc., ArborText, Inc., Fujitsu Software
       Corporation, Norman Walsh, Sun Microsystems, Inc., and the
       Organization for the Advancement of Structured Information
       Standards (OASIS).
  
       $Id: dbpoolx.mod 6340 2006-10-03 13:23:24Z nwalsh $

     Please direct all questions, bug reports, or suggestions for
     changes to the docbook@lists.oasis-open.org mailing list. For more
     information, see http://www.oasis-open.org/docbook/.
     For the modified SCons extension files
     
        scons.xsd, dbpoolx.xsd, 

     you can write to its developer mailing list. Check out 
     http://www.scons.org/ and http://www.scons.org/lists.php.
 
-->
<!-- ...................................................................... -->
<!--
  This module contains the definitions for the objects, inline
  elements, and so on that are available to be used as the main
  content of DocBook documents.  Some elements are useful for general
  publishing, and others are useful specifically for computer
  documentation.
  
  This module has the following dependencies on other modules:
  
  o It assumes that a %notation.class; entity is defined by the
    driver file or other high-level module.  This entity is
    referenced in the NOTATION attributes for the graphic-related and
    ModeSpec elements.
  
  o It assumes that an appropriately parameterized table module is
    available for use with the table-related elements.
  
  In DTD driver files referring to this module, please use an entity
  declaration that uses the public identifier shown below:
  
  <!ENTITY % dbpool PUBLIC
  "-//OASIS//ELEMENTS DocBook XML Information Pool V4.5//EN"
  "dbpoolx.mod">
  %dbpool;
  
  See the documentation for detailed information on the parameter
  entity and module scheme used in DocBook, customizing DocBook and
  planning for interchange, and changes made since the last release
  of DocBook.
-->
<!-- ...................................................................... -->
<!-- Forms entities ....................................................... -->
<!-- These PEs provide the hook by which the forms module can be inserted -->
<!-- into the DTD. -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
  <xs:include schemaLocation="htmltblx.xsd"/>
  <xs:include schemaLocation="calstblx.xsd"/>
  <xs:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="xml.xsd"/>
  <!-- ...................................................................... -->
  <!-- General-purpose semantics entities ................................... -->
  <xs:simpleType name="yesorno.attvals">
    <xs:restriction base="xs:string"/>
  </xs:simpleType>
  <!-- ...................................................................... -->
  <!-- Entities for module inclusions ....................................... -->
  <!-- ...................................................................... -->
  <!-- Entities for element classes and mixtures ............................ -->
  <!-- "Ubiquitous" classes: ndxterm.class and beginpage -->
  <xs:element name="ndxterm.class" abstract="true">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="primary"/>
        <xs:choice minOccurs="0">
          <xs:sequence>
            <xs:element ref="secondary"/>
            <xs:choice minOccurs="0">
              <xs:sequence>
                <xs:element ref="tertiary"/>
                <xs:choice minOccurs="0">
                  <xs:element ref="see"/>
                  <xs:element maxOccurs="unbounded" ref="seealso"/>
                </xs:choice>
              </xs:sequence>
              <xs:element ref="see"/>
              <xs:element maxOccurs="unbounded" ref="seealso"/>
            </xs:choice>
          </xs:sequence>
          <xs:element ref="see"/>
          <xs:element maxOccurs="unbounded" ref="seealso"/>
        </xs:choice>
      </xs:sequence>
      <xs:attributeGroup ref="indexterm.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- Object-level classes ................................................. -->
  <xs:element name="list.class" abstract="true"/>
  <xs:element name="admon.class" abstract="true"/>
  <xs:element name="linespecific.class" abstract="true"/>
  <xs:element name="method.synop.class" abstract="true" substitutionGroup="synop.class"/>
  <xs:element name="synop.class" abstract="true"/>
  <xs:element name="para.class" abstract="true"/>
  <xs:element name="informal.class" abstract="true"/>
  <xs:element name="formal.class" abstract="true"/>
  <!-- The DocBook TC may produce an official EBNF module for DocBook. -->
  <!-- This PE provides the hook by which it can be inserted into the DTD. -->
  <xs:element name="compound.class" abstract="true"/>
  <xs:group name="genobj.class">
    <xs:choice>
      <xs:element ref="anchor"/>
      <xs:element ref="bridgehead"/>
      <xs:element ref="remark"/>
      <xs:element ref="highlights"/>
    </xs:choice>
  </xs:group>
  <xs:group name="descobj.class">
    <xs:choice>
      <xs:element ref="abstract"/>
      <xs:element ref="authorblurb"/>
      <xs:element ref="epigraph"/>
    </xs:choice>
  </xs:group>
  <!-- Character-level classes .............................................. -->
  <xs:element name="xref.char.class" abstract="true"/>
  <xs:element name="gen.char.class" abstract="true"/>
  <xs:element name="link.char.class" abstract="true"/>
  <!-- The DocBook TC may produce an official EBNF module for DocBook. -->
  <!-- This PE provides the hook by which it can be inserted into the DTD. -->
  <xs:element name="tech.char.class" abstract="true"/>
  <xs:group name="base.char.class">
    <xs:sequence>
      <xs:element ref="anchor"/>
    </xs:sequence>
  </xs:group>
  <xs:element name="docinfo.char.class" abstract="true"/>
  <xs:group name="other.char.class">
    <xs:choice>
      <xs:element ref="remark"/>
      <xs:element ref="subscript"/>
      <xs:element ref="superscript"/>
    </xs:choice>
  </xs:group>
  <xs:element name="inlineobj.char.class" abstract="true"/>
  <!-- ...................................................................... -->
  <!-- Entities for content models .......................................... -->
  <xs:group name="formalobject.title.content">
    <xs:sequence>
      <xs:element ref="title"/>
      <xs:element minOccurs="0" ref="titleabbrev"/>
    </xs:sequence>
  </xs:group>
  <!-- Redeclaration placeholder ............................................ -->
  <!--
    For redeclaring entities that are declared after this point while
    retaining their references to the entities that are declared before
    this point
  -->
  <!-- Object-level mixtures ................................................ -->
  <!--
                          list admn line synp para infm form cmpd gen  desc
    Component mixture       X    X    X    X    X    X    X    X    X    X
    Sidebar mixture         X    X    X    X    X    X    X    a    X
    Footnote mixture        X         X    X    X    X
    Example mixture         X         X    X    X    X
    Highlights mixture      X    X              X
    Paragraph mixture       X         X    X         X
    Admonition mixture      X         X    X    X    X    X    b    c
    Figure mixture                    X    X         X
    Table entry mixture     X    X    X         X    d
    Glossary def mixture    X         X    X    X    X         e
    Legal notice mixture    X    X    X         X    f
    
    a. Just Procedure; not Sidebar itself or MsgSet.
    b. No MsgSet.
    c. No Highlights.
    d. Just Graphic; no other informal objects.
    e. No Anchor, BridgeHead, or Highlights.
    f. Just BlockQuote; no other informal objects.
  -->
  <xs:group name="component.mix">
    <xs:choice>
      <xs:element ref="list.class"/>
      <xs:element ref="admon.class"/>
      <xs:element ref="linespecific.class"/>
      <xs:element ref="synop.class"/>
      <xs:element ref="para.class"/>
      <xs:element ref="informal.class"/>
      <xs:element ref="formal.class"/>
      <xs:element ref="compound.class"/>
      <xs:group ref="genobj.class"/>
      <xs:group ref="descobj.class"/>
      <xs:element ref="ndxterm.class"/>
      <xs:element ref="beginpage"/>
    </xs:choice>
  </xs:group>
  <xs:group name="sidebar.mix">
    <xs:choice>
      <xs:element ref="list.class"/>
      <xs:element ref="admon.class"/>
      <xs:element ref="linespecific.class"/>
      <xs:element ref="synop.class"/>
      <xs:element ref="para.class"/>
      <xs:element ref="informal.class"/>
      <xs:element ref="formal.class"/>
      <xs:element ref="procedure"/>
      <xs:group ref="genobj.class"/>
      <xs:element ref="ndxterm.class"/>
      <xs:element ref="beginpage"/>
    </xs:choice>
  </xs:group>
  <xs:group name="qandaset.mix">
    <xs:choice>
      <xs:element ref="list.class"/>
      <xs:element ref="admon.class"/>
      <xs:element ref="linespecific.class"/>
      <xs:element ref="synop.class"/>
      <xs:element ref="para.class"/>
      <xs:element ref="informal.class"/>
      <xs:element ref="formal.class"/>
      <xs:element ref="procedure"/>
      <xs:group ref="genobj.class"/>
      <xs:element ref="ndxterm.class"/>
    </xs:choice>
  </xs:group>
  <xs:group name="revdescription.mix">
    <xs:choice>
      <xs:element ref="list.class"/>
      <xs:element ref="admon.class"/>
      <xs:element ref="linespecific.class"/>
      <xs:element ref="synop.class"/>
      <xs:element ref="para.class"/>
      <xs:element ref="informal.class"/>
      <xs:element ref="formal.class"/>
      <xs:element ref="procedure"/>
      <xs:group ref="genobj.class"/>
      <xs:element ref="ndxterm.class"/>
    </xs:choice>
  </xs:group>
  <xs:group name="footnote.mix">
    <xs:choice>
      <xs:element ref="list.class"/>
      <xs:element ref="linespecific.class"/>
      <xs:element ref="synop.class"/>
      <xs:element ref="para.class"/>
      <xs:element ref="informal.class"/>
    </xs:choice>
  </xs:group>
  <xs:group name="example.mix">
    <xs:choice>
      <xs:element ref="list.class"/>
      <xs:element ref="linespecific.class"/>
      <xs:element ref="synop.class"/>
      <xs:element ref="para.class"/>
      <xs:element ref="informal.class"/>
      <xs:element ref="ndxterm.class"/>
      <xs:element ref="beginpage"/>
      <xs:element ref="procedure"/>
    </xs:choice>
  </xs:group>
  <xs:group name="highlights.mix">
    <xs:choice>
      <xs:element ref="list.class"/>
      <xs:element ref="admon.class"/>
      <xs:element ref="para.class"/>
      <xs:element ref="ndxterm.class"/>
    </xs:choice>
  </xs:group>
  <!--
    %formal.class; is explicitly excluded from many contexts in which
    paragraphs are used
  -->
  <xs:group name="para.mix">
    <xs:choice>
      <xs:element ref="list.class"/>
      <xs:element ref="admon.class"/>
      <xs:element ref="linespecific.class"/>
      <xs:element ref="informal.class"/>
      <xs:element ref="formal.class"/>
      <xs:element ref="sconstruct"/>
      <xs:element ref="scons_example"/>
      <xs:element ref="scons_example_file"/>
      <xs:element ref="scons_output"/>
      <xs:element ref="sconsdoc"/>
    </xs:choice>
  </xs:group>
  <xs:group name="summary.mix">
    <xs:choice>
      <xs:element ref="example_commands"/>
    </xs:choice>
  </xs:group>
  <xs:group name="tool.mix">
    <xs:choice>
      <xs:element ref="summary"/>
      <xs:element ref="sets"/>
      <xs:element ref="uses"/>
    </xs:choice>  
  </xs:group>
  <xs:group name="scons_function.mix">
    <xs:choice>
      <xs:element ref="arguments"/>
      <xs:element ref="summary"/>
      <xs:element ref="sets"/>
      <xs:element ref="uses"/>
    </xs:choice>  
  </xs:group>
  <xs:group name="admon.mix">
    <xs:choice>
      <xs:element ref="list.class"/>
      <xs:element ref="linespecific.class"/>
      <xs:element ref="synop.class"/>
      <xs:element ref="para.class"/>
      <xs:element ref="informal.class"/>
      <xs:element ref="formal.class"/>
      <xs:element ref="procedure"/>
      <xs:element ref="sidebar"/>
      <xs:element ref="anchor"/>
      <xs:element ref="bridgehead"/>
      <xs:element ref="remark"/>
      <xs:element ref="ndxterm.class"/>
      <xs:element ref="beginpage"/>
    </xs:choice>
  </xs:group>
  <xs:group name="figure.mix">
    <xs:choice>
      <xs:element ref="linespecific.class"/>
      <xs:element ref="synop.class"/>
      <xs:element ref="informal.class"/>
      <xs:element ref="ndxterm.class"/>
      <xs:element ref="beginpage"/>
    </xs:choice>
  </xs:group>
  <xs:group name="tabentry.mix">
    <xs:choice>
      <xs:element ref="list.class"/>
      <xs:element ref="admon.class"/>
      <xs:element ref="linespecific.class"/>
      <xs:element ref="para.class"/>
      <xs:element ref="graphic"/>
      <xs:element ref="mediaobject"/>
    </xs:choice>
  </xs:group>
  <xs:group name="glossdef.mix">
    <xs:choice>
      <xs:element ref="list.class"/>
      <xs:element ref="linespecific.class"/>
      <xs:element ref="synop.class"/>
      <xs:element ref="para.class"/>
      <xs:element ref="informal.class"/>
      <xs:element ref="formal.class"/>
      <xs:element ref="remark"/>
      <xs:element ref="ndxterm.class"/>
      <xs:element ref="beginpage"/>
    </xs:choice>
  </xs:group>
  <xs:group name="legalnotice.mix">
    <xs:choice>
      <xs:element ref="list.class"/>
      <xs:element ref="admon.class"/>
      <xs:element ref="linespecific.class"/>
      <xs:element ref="para.class"/>
      <xs:element ref="blockquote"/>
      <xs:element ref="ndxterm.class"/>
      <xs:element ref="beginpage"/>
    </xs:choice>
  </xs:group>
  <xs:group name="textobject.mix">
    <xs:choice>
      <xs:element ref="list.class"/>
      <xs:element ref="admon.class"/>
      <xs:element ref="linespecific.class"/>
      <xs:element ref="para.class"/>
      <xs:element ref="blockquote"/>
    </xs:choice>
  </xs:group>
  <xs:element name="mediaobject.mix" abstract="true"/>
  <xs:group name="listpreamble.mix">
    <xs:choice>
      <xs:element ref="admon.class"/>
      <xs:element ref="linespecific.class"/>
      <xs:element ref="synop.class"/>
      <xs:element ref="para.class"/>
      <xs:element ref="informal.class"/>
      <xs:group ref="genobj.class"/>
      <xs:group ref="descobj.class"/>
      <xs:element ref="ndxterm.class"/>
      <xs:element ref="beginpage"/>
    </xs:choice>
  </xs:group>
  <!-- Character-level mixtures ............................................. -->
  <!-- sgml.features -->
  <!-- not [sgml.features[ -->
  <!-- ]] not sgml.features -->
  <!--
                        #PCD xref word link cptr base dnfo othr inob (synop)
    para.char.mix         X    X    X    X    X    X    X    X    X
    title.char.mix        X    X    X    X    X    X    X    X    X
    ndxterm.char.mix      X    X    X    X    X    X    X    X    a
    cptr.char.mix         X              X    X    X         X    a
    smallcptr.char.mix    X                   b                   a
    word.char.mix         X         c    X         X         X    a
    docinfo.char.mix      X         d    X    b              X    a
    
    a. Just InlineGraphic; no InlineEquation.
    b. Just Replaceable; no other computer terms.
    c. Just Emphasis and Trademark; no other word elements.
    d. Just Acronym, Emphasis, and Trademark; no other word elements.
  -->
  <xs:group name="para.char.mix">
    <xs:sequence>
      <xs:choice minOccurs="0">
        <xs:element ref="xref.char.class"/>
        <xs:element ref="gen.char.class"/>
        <xs:element ref="link.char.class"/>
        <xs:element ref="tech.char.class"/>
        <xs:group ref="base.char.class"/>
        <xs:element ref="docinfo.char.class"/>
        <xs:group ref="other.char.class"/>
        <xs:element ref="inlineobj.char.class"/>
        <xs:element ref="synop.class"/>
        <xs:element ref="ndxterm.class"/>
        <xs:element ref="beginpage"/>
      </xs:choice>
    </xs:sequence>
  </xs:group>
  <xs:group name="title.char.mix">
    <xs:sequence>
      <xs:choice minOccurs="0">
        <xs:element ref="xref.char.class"/>
        <xs:element ref="gen.char.class"/>
        <xs:element ref="link.char.class"/>
        <xs:element ref="tech.char.class"/>
        <xs:group ref="base.char.class"/>
        <xs:element ref="docinfo.char.class"/>
        <xs:group ref="other.char.class"/>
        <xs:element ref="inlineobj.char.class"/>
        <xs:element ref="ndxterm.class"/>
      </xs:choice>
    </xs:sequence>
  </xs:group>
  <xs:group name="ndxterm.char.mix">
    <xs:sequence>
      <xs:choice minOccurs="0">
        <xs:element ref="xref.char.class"/>
        <xs:element ref="gen.char.class"/>
        <xs:element ref="link.char.class"/>
        <xs:element ref="tech.char.class"/>
        <xs:group ref="base.char.class"/>
        <xs:element ref="docinfo.char.class"/>
        <xs:group ref="other.char.class"/>
        <xs:element ref="inlinegraphic"/>
        <xs:element ref="inlinemediaobject"/>
      </xs:choice>
    </xs:sequence>
  </xs:group>
  <xs:group name="cptr.char.mix">
    <xs:sequence>
      <xs:choice minOccurs="0">
        <xs:element ref="link.char.class"/>
        <xs:element ref="tech.char.class"/>
        <xs:group ref="base.char.class"/>
        <xs:group ref="other.char.class"/>
        <xs:element ref="inlinegraphic"/>
        <xs:element ref="inlinemediaobject"/>
        <xs:element ref="ndxterm.class"/>
        <xs:element ref="beginpage"/>
      </xs:choice>
    </xs:sequence>
  </xs:group>
  <xs:group name="smallcptr.char.mix">
    <xs:sequence>
      <xs:choice minOccurs="0">
        <xs:element ref="replaceable"/>
        <xs:element ref="inlinegraphic"/>
        <xs:element ref="inlinemediaobject"/>
        <xs:element ref="ndxterm.class"/>
        <xs:element ref="beginpage"/>
      </xs:choice>
    </xs:sequence>
  </xs:group>
  <xs:group name="word.char.mix">
    <xs:sequence>
      <xs:choice minOccurs="0">
        <xs:element ref="acronym"/>
        <xs:element ref="emphasis"/>
        <xs:element ref="trademark"/>
        <xs:element ref="link.char.class"/>
        <xs:group ref="base.char.class"/>
        <xs:group ref="other.char.class"/>
        <xs:element ref="inlinegraphic"/>
        <xs:element ref="inlinemediaobject"/>
        <xs:element ref="ndxterm.class"/>
        <xs:element ref="beginpage"/>
      </xs:choice>
    </xs:sequence>
  </xs:group>
  <xs:group name="docinfo.char.mix">
    <xs:sequence>
      <xs:choice minOccurs="0">
        <xs:element ref="link.char.class"/>
        <xs:element ref="emphasis"/>
        <xs:element ref="trademark"/>
        <xs:element ref="replaceable"/>
        <xs:group ref="other.char.class"/>
        <xs:element ref="inlinegraphic"/>
        <xs:element ref="inlinemediaobject"/>
        <xs:element ref="ndxterm.class"/>
      </xs:choice>
    </xs:sequence>
  </xs:group>
  <!-- ENTITY % bibliocomponent.mix (see Bibliographic section, below) -->
  <!-- ENTITY % person.ident.mix (see Bibliographic section, below) -->
  <!-- ...................................................................... -->
  <!-- Entities for attributes and attribute components ..................... -->
  <!-- Effectivity attributes ............................................... -->
  <!--
    Arch: Computer or chip architecture to which element applies; no
    default
  -->
  <xs:attributeGroup name="arch.attrib">
    <xs:attribute name="arch"/>
  </xs:attributeGroup>
  <!-- Condition: General-purpose effectivity attribute -->
  <xs:attributeGroup name="condition.attrib">
    <xs:attribute name="condition"/>
  </xs:attributeGroup>
  <!-- Conformance: Standards conformance characteristics -->
  <xs:attributeGroup name="conformance.attrib">
    <xs:attribute name="conformance" type="xs:NMTOKENS"/>
  </xs:attributeGroup>
  <!-- OS: Operating system to which element applies; no default -->
  <xs:attributeGroup name="os.attrib">
    <xs:attribute name="os"/>
  </xs:attributeGroup>
  <!-- Revision: Editorial revision to which element belongs; no default -->
  <xs:attributeGroup name="revision.attrib">
    <xs:attribute name="revision"/>
  </xs:attributeGroup>
  <!-- Security: Security classification; no default -->
  <xs:attributeGroup name="security.attrib">
    <xs:attribute name="security"/>
  </xs:attributeGroup>
  <!--
    UserLevel: Level of user experience to which element applies; no
    default
  -->
  <xs:attributeGroup name="userlevel.attrib">
    <xs:attribute name="userlevel"/>
  </xs:attributeGroup>
  <!-- Vendor: Computer vendor to which element applies; no default -->
  <xs:attributeGroup name="vendor.attrib">
    <xs:attribute name="vendor"/>
  </xs:attributeGroup>
  <!-- Wordsize: Computer word size (32 bit, 64 bit, etc.); no default -->
  <xs:attributeGroup name="wordsize.attrib">
    <xs:attribute name="wordsize"/>
  </xs:attributeGroup>
  <xs:attributeGroup name="effectivity.attrib">
    <xs:attributeGroup ref="arch.attrib"/>
    <xs:attributeGroup ref="condition.attrib"/>
    <xs:attributeGroup ref="conformance.attrib"/>
    <xs:attributeGroup ref="os.attrib"/>
    <xs:attributeGroup ref="revision.attrib"/>
    <xs:attributeGroup ref="security.attrib"/>
    <xs:attributeGroup ref="userlevel.attrib"/>
    <xs:attributeGroup ref="vendor.attrib"/>
    <xs:attributeGroup ref="wordsize.attrib"/>
  </xs:attributeGroup>
  <!-- Common attributes .................................................... -->
  <!-- Id: Unique identifier of element; no default -->
  <xs:attributeGroup name="id.attrib">
    <xs:attribute name="id" type="xs:ID"/>
  </xs:attributeGroup>
  <!--
    Id: Unique identifier of element; a value must be supplied; no
    default
  -->
  <xs:attributeGroup name="idreq.attrib">
    <xs:attribute name="id" use="required" type="xs:ID"/>
  </xs:attributeGroup>
  <!--
    Lang: Indicator of language in which element is written, for
    translation, character set management, etc.; no default
  -->
  <xs:attributeGroup name="lang.attrib">
    <xs:attribute name="lang"/>
  </xs:attributeGroup>
  <!-- Remap: Previous role of element before conversion; no default -->
  <xs:attributeGroup name="remap.attrib">
    <xs:attribute name="remap"/>
  </xs:attributeGroup>
  <!-- Role: New role of element in local environment; no default -->
  <xs:attributeGroup name="role.attrib">
    <xs:attribute name="role"/>
  </xs:attributeGroup>
  <!--
    XRefLabel: Alternate labeling string for XRef text generation;
    default is usually title or other appropriate label text already
    contained in element
  -->
  <xs:attributeGroup name="xreflabel.attrib">
    <xs:attribute name="xreflabel"/>
  </xs:attributeGroup>
  <!--
    RevisionFlag: Revision status of element; default is that element
    wasn't revised
  -->
  <xs:attributeGroup name="revisionflag.attrib">
    <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:attributeGroup>
  <!-- dir: Bidirectional override -->
  <xs:attributeGroup name="dir.attrib">
    <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>
  <!-- xml:base: base URI -->
  <xs:attributeGroup name="xml-base.attrib">
    <xs:attribute ref="xml:base"/>
  </xs:attributeGroup>
  <!-- Role is included explicitly on each element -->
  <xs:attributeGroup name="common.attrib">
    <xs:attributeGroup ref="id.attrib"/>
    <xs:attributeGroup ref="lang.attrib"/>
    <xs:attributeGroup ref="remap.attrib"/>
    <xs:attributeGroup ref="xreflabel.attrib"/>
    <xs:attributeGroup ref="revisionflag.attrib"/>
    <xs:attributeGroup ref="effectivity.attrib"/>
    <xs:attributeGroup ref="dir.attrib"/>
    <xs:attributeGroup ref="xml-base.attrib"/>
  </xs:attributeGroup>
  <!-- Role is included explicitly on each element -->
  <xs:attributeGroup name="idreq.common.attrib">
    <xs:attributeGroup ref="idreq.attrib"/>
    <xs:attributeGroup ref="lang.attrib"/>
    <xs:attributeGroup ref="remap.attrib"/>
    <xs:attributeGroup ref="xreflabel.attrib"/>
    <xs:attributeGroup ref="revisionflag.attrib"/>
    <xs:attributeGroup ref="effectivity.attrib"/>
    <xs:attributeGroup ref="dir.attrib"/>
    <xs:attributeGroup ref="xml-base.attrib"/>
  </xs:attributeGroup>
  <!-- Semi-common attributes and other attribute entities .................. -->
  <!--
    EntityRef: Name of an external entity containing the content
    of the graphic
  -->
  <!--
    FileRef: Filename, qualified by a pathname if desired,
    designating the file containing the content of the graphic
  -->
  <!-- Format: Notation of the element content, if any -->
  <!-- SrcCredit: Information about the source of the Graphic -->
  <!-- Width: Same as CALS reprowid (desired width) -->
  <!-- Depth: Same as CALS reprodep (desired depth) -->
  <!--
    Align: Same as CALS hplace with 'none' removed; #IMPLIED means
    application-specific
  -->
  <!-- Scale: Conflation of CALS hscale and vscale -->
  <!-- Scalefit: Same as CALS scalefit -->
  <xs:attributeGroup name="graphics.attrib">
    <xs:attribute name="entityref" type="xs:ENTITY"/>
    <xs:attribute name="fileref"/>
    <xs:attribute name="format" type="notation.class"/>
    <xs:attribute name="srccredit"/>
    <xs:attribute name="width"/>
    <xs:attribute name="contentwidth"/>
    <xs:attribute name="depth"/>
    <xs:attribute name="contentdepth"/>
    <xs:attribute name="align">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="left"/>
          <xs:enumeration value="right"/>
          <xs:enumeration value="center"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="valign">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="top"/>
          <xs:enumeration value="middle"/>
          <xs:enumeration value="bottom"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="scale"/>
    <xs:attribute name="scalefit" type="yesorno.attvals"/>
  </xs:attributeGroup>
  <!--
    Action: Key combination type; default is unspecified if one
    child element, Simul if there is more than one; if value is
    Other, the OtherAction attribute must have a nonempty value
  -->
  <!-- OtherAction: User-defined key combination type -->
  <xs:attributeGroup name="keyaction.attrib">
    <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:attributeGroup>
  <!--
    Label: Identifying number or string; default is usually the
    appropriate number or string autogenerated by a formatter
  -->
  <xs:attributeGroup name="label.attrib">
    <xs:attribute name="label"/>
  </xs:attributeGroup>
  <!-- xml:space: whitespace treatment -->
  <xs:attributeGroup name="xml-space.attrib">
    <xs:attribute ref="xml:space"/>
  </xs:attributeGroup>
  <!--
    Format: whether element is assumed to contain significant white
    space
  -->
  <xs:attributeGroup name="linespecific.attrib">
    <xs:attribute name="format" default="linespecific">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="linespecific"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attributeGroup ref="xml-space.attrib"/>
    <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: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:attribute name="startinglinenumber"/>
    <xs:attribute name="language"/>
  </xs:attributeGroup>
  <!-- Linkend: link to related information; no default -->
  <xs:attributeGroup name="linkend.attrib">
    <xs:attribute name="linkend" type="xs:IDREF"/>
  </xs:attributeGroup>
  <!-- Linkend: required link to related information -->
  <xs:attributeGroup name="linkendreq.attrib">
    <xs:attribute name="linkend" use="required" type="xs:IDREF"/>
  </xs:attributeGroup>
  <!--
    Linkends: link to one or more sets of related information; no
    default
  -->
  <xs:attributeGroup name="linkends.attrib">
    <xs:attribute name="linkends" type="xs:IDREFS"/>
  </xs:attributeGroup>
  <xs:attributeGroup name="mark.attrib">
    <xs:attribute name="mark"/>
  </xs:attributeGroup>
  <!-- MoreInfo: whether element's content has an associated RefEntry -->
  <xs:attributeGroup name="moreinfo.attrib">
    <xs:attribute name="moreinfo" default="none">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="refentry"/>
          <xs:enumeration value="none"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
  </xs:attributeGroup>
  <!-- Pagenum: number of page on which element appears; no default -->
  <xs:attributeGroup name="pagenum.attrib">
    <xs:attribute name="pagenum"/>
  </xs:attributeGroup>
  <!--
    Status: Editorial or publication status of the element
    it applies to, such as "in review" or "approved for distribution"
  -->
  <xs:attributeGroup name="status.attrib">
    <xs:attribute name="status"/>
  </xs:attributeGroup>
  <!--
    Width: width of the longest line in the element to which it
    pertains, in number of characters
  -->
  <xs:attributeGroup name="width.attrib">
    <xs:attribute name="width"/>
  </xs:attributeGroup>
  <!-- ...................................................................... -->
  <!-- Title elements ....................................................... -->
  <xs:attributeGroup name="title.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:The text of the title of a section of a document or of a formal block-level element. -->
  <xs:element name="title">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="title.char.mix"/>
      <xs:attributeGroup ref="title.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of title.element -->
  <xs:attributeGroup name="title.attlist">
    <xs:attributeGroup ref="pagenum.attrib"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="title.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of title.attlist -->
  <!-- end of title.module -->
  <xs:attributeGroup name="titleabbrev.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:The abbreviation of a Title. -->
  <xs:element name="titleabbrev">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="title.char.mix"/>
      <xs:attributeGroup ref="titleabbrev.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of titleabbrev.element -->
  <xs:attributeGroup name="titleabbrev.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="titleabbrev.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of titleabbrev.attlist -->
  <!-- end of titleabbrev.module -->
  <xs:attributeGroup name="subtitle.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:The subtitle of a document. -->
  <xs:element name="subtitle">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="title.char.mix"/>
      <xs:attributeGroup ref="subtitle.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of subtitle.element -->
  <xs:attributeGroup name="subtitle.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="subtitle.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of subtitle.attlist -->
  <!-- end of subtitle.module -->
  <!-- ...................................................................... -->
  <!-- Bibliographic entities and elements .................................. -->
  <!--
    The bibliographic elements are typically used in the document
    hierarchy. They do not appear in content models of information
    pool elements.  See also the document information elements,
    below.
  -->
  <xs:group name="person.ident.mix">
    <xs:choice>
      <xs:element ref="honorific"/>
      <xs:element ref="firstname"/>
      <xs:element ref="surname"/>
      <xs:element ref="lineage"/>
      <xs:element ref="othername"/>
      <xs:element ref="affiliation"/>
      <xs:element ref="authorblurb"/>
      <xs:element ref="contrib"/>
    </xs:choice>
  </xs:group>
  <xs:group name="bibliocomponent.mix">
    <xs:choice>
      <xs:element ref="abbrev"/>
      <xs:element ref="abstract"/>
      <xs:element ref="address"/>
      <xs:element ref="artpagenums"/>
      <xs:element ref="author"/>
      <xs:element ref="authorgroup"/>
      <xs:element ref="authorinitials"/>
      <xs:element ref="bibliomisc"/>
      <xs:element ref="biblioset"/>
      <xs:element ref="collab"/>
      <xs:element ref="confgroup"/>
      <xs:element ref="contractnum"/>
      <xs:element ref="contractsponsor"/>
      <xs:element ref="copyright"/>
      <xs:element ref="corpauthor"/>
      <xs:element ref="corpname"/>
      <xs:element ref="corpcredit"/>
      <xs:element ref="date"/>
      <xs:element ref="edition"/>
      <xs:element ref="editor"/>
      <xs:element ref="invpartnumber"/>
      <xs:element ref="isbn"/>
      <xs:element ref="issn"/>
      <xs:element ref="issuenum"/>
      <xs:element ref="orgname"/>
      <xs:element ref="biblioid"/>
      <xs:element ref="citebiblioid"/>
      <xs:element ref="bibliosource"/>
      <xs:element ref="bibliorelation"/>
      <xs:element ref="bibliocoverage"/>
      <xs:element ref="othercredit"/>
      <xs:element ref="pagenums"/>
      <xs:element ref="printhistory"/>
      <xs:element ref="productname"/>
      <xs:element ref="productnumber"/>
      <xs:element ref="pubdate"/>
      <xs:element ref="publisher"/>
      <xs:element ref="publishername"/>
      <xs:element ref="pubsnumber"/>
      <xs:element ref="releaseinfo"/>
      <xs:element ref="revhistory"/>
      <xs:element ref="seriesvolnums"/>
      <xs:element ref="subtitle"/>
      <xs:element ref="title"/>
      <xs:element ref="titleabbrev"/>
      <xs:element ref="volumenum"/>
      <xs:element ref="citetitle"/>
      <xs:element ref="personname"/>
      <xs:group ref="person.ident.mix"/>
      <xs:element ref="ndxterm.class"/>
    </xs:choice>
  </xs:group>
  <!-- I don't think this is well placed, but it needs to be here because of -->
  <!-- the reference to bibliocomponent.mix -->
  <xs:group name="info.class">
    <xs:choice>
      <xs:element ref="graphic"/>
      <xs:element ref="mediaobject"/>
      <xs:element ref="legalnotice"/>
      <xs:element ref="modespec"/>
      <xs:element ref="subjectset"/>
      <xs:element ref="keywordset"/>
      <xs:element ref="itermset"/>
      <xs:group ref="bibliocomponent.mix"/>
    </xs:choice>
  </xs:group>
  <!-- BiblioList ........................ -->
  <xs:attributeGroup name="bibliolist.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A wrapper for a set of bibliography entries. -->
  <xs:element name="bibliolist" substitutionGroup="list.class">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="blockinfo"/>
        <xs:group minOccurs="0" ref="formalobject.title.content"/>
        <xs:choice maxOccurs="unbounded">
          <xs:element ref="biblioentry"/>
          <xs:element ref="bibliomixed"/>
        </xs:choice>
      </xs:sequence>
      <xs:attributeGroup ref="bibliolist.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of bibliolist.element -->
  <xs:attributeGroup name="bibliolist.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="bibliolist.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of bibliolist.attlist -->
  <!-- end of bibliolist.module -->
  <xs:attributeGroup name="biblioentry.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:An entry in a Bibliography. -->
  <xs:element name="biblioentry">
    <xs:complexType>
      <xs:choice maxOccurs="unbounded">
        <xs:element ref="articleinfo"/>
        <xs:group ref="bibliocomponent.mix"/>
      </xs:choice>
      <xs:attributeGroup ref="biblioentry.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of biblioentry.element -->
  <xs:attributeGroup name="biblioentry.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="biblioentry.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of biblioentry.attlist -->
  <!-- end of biblioentry.module -->
  <xs:attributeGroup name="bibliomixed.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:An entry in a Bibliography. -->
  <xs:element name="bibliomixed">
    <xs:complexType mixed="true">
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:group ref="bibliocomponent.mix"/>
        <xs:element ref="bibliomset"/>
      </xs:choice>
      <xs:attributeGroup ref="bibliomixed.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of bibliomixed.element -->
  <xs:attributeGroup name="bibliomixed.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="bibliomixed.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of bibliomixed.attlist -->
  <!-- end of bibliomixed.module -->
  <xs:attributeGroup name="articleinfo.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:Meta-information for an Article. -->
  <xs:element name="articleinfo">
    <xs:complexType>
      <xs:group maxOccurs="unbounded" ref="info.class"/>
      <xs:attributeGroup ref="articleinfo.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of articleinfo.element -->
  <xs:attributeGroup name="articleinfo.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="articleinfo.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of articleinfo.attlist -->
  <!-- end of articleinfo.module -->
  <xs:attributeGroup name="biblioset.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A "raw" container for related bibliographic information. -->
  <xs:element name="biblioset">
    <xs:complexType>
      <xs:group maxOccurs="unbounded" ref="bibliocomponent.mix"/>
      <xs:attributeGroup ref="biblioset.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of biblioset.element -->
  <!-- Relation: Relationship of elements contained within BiblioSet -->
  <xs:attributeGroup name="biblioset.attlist">
    <xs:attribute name="relation"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="biblioset.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of biblioset.attlist -->
  <!-- end of biblioset.module -->
  <xs:attributeGroup name="bibliomset.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A "cooked" container for related bibliographic information. -->
  <xs:element name="bibliomset">
    <xs:complexType mixed="true">
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:group ref="bibliocomponent.mix"/>
        <xs:element ref="bibliomset"/>
      </xs:choice>
      <xs:attributeGroup ref="bibliomset.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of bibliomset.element -->
  <!-- Relation: Relationship of elements contained within BiblioMSet -->
  <xs:attributeGroup name="bibliomset.attlist">
    <xs:attribute name="relation"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="bibliomset.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of bibliomset.attlist -->
  <!-- end of bibliomset.module -->
  <xs:attributeGroup name="bibliomisc.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:Untyped bibliographic information. -->
  <xs:element name="bibliomisc">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="para.char.mix"/>
      <xs:attributeGroup ref="bibliomisc.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of bibliomisc.element -->
  <xs:attributeGroup name="bibliomisc.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="bibliomisc.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of bibliomisc.attlist -->
  <!-- end of bibliomisc.module -->
  <!-- ...................................................................... -->
  <!-- Subject, Keyword, and ITermSet elements .............................. -->
  <xs:attributeGroup name="subjectset.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A set of terms describing the subject matter of a document. -->
  <xs:element name="subjectset">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" ref="subject"/>
      </xs:sequence>
      <xs:attributeGroup ref="subjectset.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of subjectset.element -->
  <!-- Scheme: Controlled vocabulary employed in SubjectTerms -->
  <xs:attributeGroup name="subjectset.attlist">
    <xs:attribute name="scheme" type="xs:NMTOKEN"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="subjectset.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of subjectset.attlist -->
  <!-- end of subjectset.module -->
  <xs:attributeGroup name="subject.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:One of a group of terms describing the subject matter of a document. -->
  <xs:element name="subject">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" ref="subjectterm"/>
      </xs:sequence>
      <xs:attributeGroup ref="subject.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of subject.element -->
  <!--
    Weight: Ranking of this group of SubjectTerms relative
    to others, 0 is low, no highest value specified
  -->
  <xs:attributeGroup name="subject.attlist">
    <xs:attribute name="weight"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="subject.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of subject.attlist -->
  <!-- end of subject.module -->
  <xs:attributeGroup name="subjectterm.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A term in a group of terms describing the subject matter of a document. -->
  <xs:element name="subjectterm">
    <xs:complexType mixed="true">
      <xs:attributeGroup ref="subjectterm.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of subjectterm.element -->
  <xs:attributeGroup name="subjectterm.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="subjectterm.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of subjectterm.attlist -->
  <!-- end of subjectterm.module -->
  <!-- end of subjectset.content.module -->
  <xs:attributeGroup name="keywordset.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A set of keywords describing the content of a document. -->
  <xs:element name="keywordset">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" ref="keyword"/>
      </xs:sequence>
      <xs:attributeGroup ref="keywordset.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of keywordset.element -->
  <xs:attributeGroup name="keywordset.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="keywordset.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of keywordset.attlist -->
  <!-- end of keywordset.module -->
  <xs:attributeGroup name="keyword.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:One of a set of keywords describing the content of a document. -->
  <xs:element name="keyword">
    <xs:complexType mixed="true">
      <xs:attributeGroup ref="keyword.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of keyword.element -->
  <xs:attributeGroup name="keyword.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="keyword.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of keyword.attlist -->
  <!-- end of keyword.module -->
  <!-- end of keywordset.content.module -->
  <xs:attributeGroup name="itermset.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A set of index terms in the meta-information of a document. -->
  <xs:element name="itermset">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" ref="indexterm"/>
      </xs:sequence>
      <xs:attributeGroup ref="itermset.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of itermset.element -->
  <xs:attributeGroup name="itermset.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="itermset.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of itermset.attlist -->
  <!-- end of itermset.module -->
  <!-- Bibliographic info for "blocks" -->
  <xs:attributeGroup name="blockinfo.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:Meta-information for a block element. -->
  <xs:element name="blockinfo">
    <xs:complexType>
      <xs:group maxOccurs="unbounded" ref="info.class"/>
      <xs:attributeGroup ref="blockinfo.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of blockinfo.element -->
  <xs:attributeGroup name="blockinfo.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="blockinfo.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of blockinfo.attlist -->
  <!-- end of blockinfo.module -->
  <!-- ...................................................................... -->
  <!-- Compound (section-ish) elements ...................................... -->
  <!-- Message set ...................... -->
  <xs:attributeGroup name="msgset.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A detailed set of messages, usually error messages. -->
  <xs:element name="msgset" substitutionGroup="compound.class">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="blockinfo"/>
        <xs:group minOccurs="0" ref="formalobject.title.content"/>
        <xs:choice>
          <xs:element maxOccurs="unbounded" ref="msgentry"/>
          <xs:element maxOccurs="unbounded" ref="simplemsgentry"/>
        </xs:choice>
      </xs:sequence>
      <xs:attributeGroup ref="msgset.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of msgset.element -->
  <xs:attributeGroup name="msgset.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="msgset.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of msgset.attlist -->
  <!-- end of msgset.module -->
  <xs:attributeGroup name="msgentry.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A wrapper for an entry in a message set. -->
  <xs:element name="msgentry">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" ref="msg"/>
        <xs:element minOccurs="0" ref="msginfo"/>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="msgexplan"/>
      </xs:sequence>
      <xs:attributeGroup ref="msgentry.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of msgentry.element -->
  <xs:attributeGroup name="msgentry.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="msgentry.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of msgentry.attlist -->
  <!-- end of msgentry.module -->
  <xs:attributeGroup name="simplemsgentry.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A wrapper for a simpler entry in a message set. -->
  <xs:element name="simplemsgentry">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="msgtext"/>
        <xs:element maxOccurs="unbounded" ref="msgexplan"/>
      </xs:sequence>
      <xs:attributeGroup ref="simplemsgentry.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of simplemsgentry.element -->
  <xs:attributeGroup name="simplemsgentry.attlist">
    <xs:attribute name="audience"/>
    <xs:attribute name="level"/>
    <xs:attribute name="origin"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="simplemsgentry.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of simplemsgentry.attlist -->
  <!-- end of simplemsgentry.module -->
  <xs:attributeGroup name="msg.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A message in a message set. -->
  <xs:element name="msg">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="title"/>
        <xs:element ref="msgmain"/>
        <xs:choice minOccurs="0" maxOccurs="unbounded">
          <xs:element ref="msgsub"/>
          <xs:element ref="msgrel"/>
        </xs:choice>
      </xs:sequence>
      <xs:attributeGroup ref="msg.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of msg.element -->
  <xs:attributeGroup name="msg.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="msg.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of msg.attlist -->
  <!-- end of msg.module -->
  <xs:attributeGroup name="msgmain.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:The primary component of a message in a message set. -->
  <xs:element name="msgmain">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="title"/>
        <xs:element ref="msgtext"/>
      </xs:sequence>
      <xs:attributeGroup ref="msgmain.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of msgmain.element -->
  <xs:attributeGroup name="msgmain.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="msgmain.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of msgmain.attlist -->
  <!-- end of msgmain.module -->
  <xs:attributeGroup name="msgsub.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A subcomponent of a message in a message set. -->
  <xs:element name="msgsub">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="title"/>
        <xs:element ref="msgtext"/>
      </xs:sequence>
      <xs:attributeGroup ref="msgsub.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of msgsub.element -->
  <xs:attributeGroup name="msgsub.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="msgsub.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of msgsub.attlist -->
  <!-- end of msgsub.module -->
  <xs:attributeGroup name="msgrel.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A related component of a message in a message set. -->
  <xs:element name="msgrel">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="title"/>
        <xs:element ref="msgtext"/>
      </xs:sequence>
      <xs:attributeGroup ref="msgrel.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of msgrel.element -->
  <xs:attributeGroup name="msgrel.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="msgrel.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of msgrel.attlist -->
  <!-- end of msgrel.module -->
  <!-- MsgText (defined in the Inlines section, below) -->
  <xs:attributeGroup name="msginfo.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:Information about a message in a message set. -->
  <xs:element name="msginfo">
    <xs:complexType>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element ref="msglevel"/>
        <xs:element ref="msgorig"/>
        <xs:element ref="msgaud"/>
      </xs:choice>
      <xs:attributeGroup ref="msginfo.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of msginfo.element -->
  <xs:attributeGroup name="msginfo.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="msginfo.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of msginfo.attlist -->
  <!-- end of msginfo.module -->
  <xs:attributeGroup name="msglevel.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:The level of importance or severity of a message in a message set. -->
  <xs:element name="msglevel">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="smallcptr.char.mix"/>
      <xs:attributeGroup ref="msglevel.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of msglevel.element -->
  <xs:attributeGroup name="msglevel.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="msglevel.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of msglevel.attlist -->
  <!-- end of msglevel.module -->
  <xs:attributeGroup name="msgorig.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:The origin of a message in a message set. -->
  <xs:element name="msgorig">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="smallcptr.char.mix"/>
      <xs:attributeGroup ref="msgorig.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of msgorig.element -->
  <xs:attributeGroup name="msgorig.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="msgorig.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of msgorig.attlist -->
  <!-- end of msgorig.module -->
  <xs:attributeGroup name="msgaud.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:The audience to which a message in a message set is relevant. -->
  <xs:element name="msgaud">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="para.char.mix"/>
      <xs:attributeGroup ref="msgaud.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of msgaud.element -->
  <xs:attributeGroup name="msgaud.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="msgaud.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of msgaud.attlist -->
  <!-- end of msgaud.module -->
  <xs:attributeGroup name="msgexplan.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:Explanatory material relating to a message in a message set. -->
  <xs:element name="msgexplan">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="title"/>
        <xs:group maxOccurs="unbounded" ref="component.mix"/>
      </xs:sequence>
      <xs:attributeGroup ref="msgexplan.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of msgexplan.element -->
  <xs:attributeGroup name="msgexplan.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="msgexplan.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of msgexplan.attlist -->
  <!-- end of msgexplan.module -->
  <!-- end of msgset.content.module -->
  <xs:attributeGroup name="task.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A task to be completed. -->
  <xs:element name="task" substitutionGroup="compound.class">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="blockinfo"/>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="ndxterm.class"/>
        <xs:group ref="formalobject.title.content"/>
        <xs:element minOccurs="0" ref="tasksummary"/>
        <xs:element minOccurs="0" ref="taskprerequisites"/>
        <xs:element ref="procedure"/>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="example"/>
        <xs:element minOccurs="0" ref="taskrelated"/>
      </xs:sequence>
      <xs:attributeGroup ref="task.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of task.element -->
  <xs:attributeGroup name="task.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="task.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of task.attlist -->
  <!-- end of task.module -->
  <xs:attributeGroup name="tasksummary.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A summary of a task. -->
  <xs:element name="tasksummary">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="blockinfo"/>
        <xs:group minOccurs="0" ref="formalobject.title.content"/>
        <xs:group maxOccurs="unbounded" ref="component.mix"/>
      </xs:sequence>
      <xs:attributeGroup ref="tasksummary.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of tasksummary.element -->
  <xs:attributeGroup name="tasksummary.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="tasksummary.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of tasksummary.attlist -->
  <!-- end of tasksummary.module -->
  <xs:attributeGroup name="taskprerequisites.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:The prerequisites for a task. -->
  <xs:element name="taskprerequisites">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="blockinfo"/>
        <xs:group minOccurs="0" ref="formalobject.title.content"/>
        <xs:group maxOccurs="unbounded" ref="component.mix"/>
      </xs:sequence>
      <xs:attributeGroup ref="taskprerequisites.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of taskprerequisites.element -->
  <xs:attributeGroup name="taskprerequisites.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="taskprerequisites.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of taskprerequisites.attlist -->
  <!-- end of taskprerequisites.module -->
  <xs:attributeGroup name="taskrelated.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:Information related to a task. -->
  <xs:element name="taskrelated">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="blockinfo"/>
        <xs:group minOccurs="0" ref="formalobject.title.content"/>
        <xs:group maxOccurs="unbounded" ref="component.mix"/>
      </xs:sequence>
      <xs:attributeGroup ref="taskrelated.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of taskrelated.element -->
  <xs:attributeGroup name="taskrelated.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="taskrelated.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of taskrelated.attlist -->
  <!-- end of taskrelated.module -->
  <!-- end of task.content.module -->
  <!-- QandASet ........................ -->
  <xs:attributeGroup name="qandaset.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A question-and-answer set. -->
  <xs:element name="qandaset" substitutionGroup="compound.class">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="blockinfo"/>
        <xs:group minOccurs="0" ref="formalobject.title.content"/>
        <xs:group minOccurs="0" maxOccurs="unbounded" ref="qandaset.mix"/>
        <xs:choice>
          <xs:element maxOccurs="unbounded" ref="qandadiv"/>
          <xs:element maxOccurs="unbounded" ref="qandaentry"/>
        </xs:choice>
      </xs:sequence>
      <xs:attributeGroup ref="qandaset.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of qandaset.element -->
  <xs:attributeGroup name="qandaset.attlist">
    <xs:attribute name="defaultlabel">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="qanda"/>
          <xs:enumeration value="number"/>
          <xs:enumeration value="none"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="qandaset.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of qandaset.attlist -->
  <!-- end of qandaset.module -->
  <xs:attributeGroup name="qandadiv.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A titled division in a QandASet. -->
  <xs:element name="qandadiv">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="blockinfo"/>
        <xs:group minOccurs="0" ref="formalobject.title.content"/>
        <xs:group minOccurs="0" maxOccurs="unbounded" ref="qandaset.mix"/>
        <xs:choice>
          <xs:element maxOccurs="unbounded" ref="qandadiv"/>
          <xs:element maxOccurs="unbounded" ref="qandaentry"/>
        </xs:choice>
      </xs:sequence>
      <xs:attributeGroup ref="qandadiv.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of qandadiv.element -->
  <xs:attributeGroup name="qandadiv.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="qandadiv.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of qandadiv.attlist -->
  <!-- end of qandadiv.module -->
  <xs:attributeGroup name="qandaentry.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A question/answer set within a QandASet. -->
  <xs:element name="qandaentry">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="blockinfo"/>
        <xs:element minOccurs="0" ref="revhistory"/>
        <xs:element ref="question"/>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="answer"/>
      </xs:sequence>
      <xs:attributeGroup ref="qandaentry.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of qandaentry.element -->
  <xs:attributeGroup name="qandaentry.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="qandaentry.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of qandaentry.attlist -->
  <!-- end of qandaentry.module -->
  <xs:attributeGroup name="question.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A question in a QandASet. -->
  <xs:element name="question">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="label"/>
        <xs:group maxOccurs="unbounded" ref="qandaset.mix"/>
      </xs:sequence>
      <xs:attributeGroup ref="question.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of question.element -->
  <xs:attributeGroup name="question.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="question.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of question.attlist -->
  <!-- end of question.module -->
  <xs:attributeGroup name="answer.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:An answer to a question posed in a QandASet. -->
  <xs:element name="answer">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="label"/>
        <xs:group minOccurs="0" maxOccurs="unbounded" ref="qandaset.mix"/>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="qandaentry"/>
      </xs:sequence>
      <xs:attributeGroup ref="answer.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of answer.element -->
  <xs:attributeGroup name="answer.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="answer.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of answer.attlist -->
  <!-- end of answer.module -->
  <xs:attributeGroup name="label.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A label on a Question or Answer. -->
  <xs:element name="label">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="word.char.mix"/>
      <xs:attributeGroup ref="label.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of label.element -->
  <xs:attributeGroup name="label.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="label.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of label.attlist -->
  <!-- end of label.module -->
  <!-- end of qandaset.content.module -->
  <!-- Procedure ........................ -->
  <xs:attributeGroup name="procedure.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A list of operations to be performed in a well-defined sequence. -->
  <xs:element name="procedure" substitutionGroup="compound.class">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="blockinfo"/>
        <xs:group minOccurs="0" ref="formalobject.title.content"/>
        <xs:group minOccurs="0" maxOccurs="unbounded" ref="component.mix"/>
        <xs:element maxOccurs="unbounded" ref="step"/>
      </xs:sequence>
      <xs:attributeGroup ref="procedure.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of procedure.element -->
  <xs:attributeGroup name="procedure.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="procedure.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of procedure.attlist -->
  <!-- end of procedure.module -->
  <xs:attributeGroup name="step.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A unit of action in a procedure. -->
  <xs:element name="step">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="title"/>
        <xs:choice>
          <xs:sequence>
            <xs:group maxOccurs="unbounded" ref="component.mix"/>
            <xs:sequence minOccurs="0">
              <xs:choice>
                <xs:element ref="substeps"/>
                <xs:element ref="stepalternatives"/>
              </xs:choice>
              <xs:group minOccurs="0" maxOccurs="unbounded" ref="component.mix"/>
            </xs:sequence>
          </xs:sequence>
          <xs:sequence>
            <xs:choice>
              <xs:element ref="substeps"/>
              <xs:element ref="stepalternatives"/>
            </xs:choice>
            <xs:group minOccurs="0" maxOccurs="unbounded" ref="component.mix"/>
          </xs:sequence>
        </xs:choice>
      </xs:sequence>
      <xs:attributeGroup ref="step.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of step.element -->
  <!-- Performance: Whether the Step must be performed -->
  <!-- not #REQUIRED! -->
  <xs:attributeGroup name="step.attlist">
    <xs:attribute name="performance" default="required">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="optional"/>
          <xs:enumeration value="required"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="step.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of step.attlist -->
  <!-- end of step.module -->
  <xs:attributeGroup name="substeps.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A wrapper for steps that occur within steps in a procedure. -->
  <xs:element name="substeps">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" ref="step"/>
      </xs:sequence>
      <xs:attributeGroup ref="substeps.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of substeps.element -->
  <!-- Performance: whether entire set of substeps must be performed -->
  <!-- not #REQUIRED! -->
  <xs:attributeGroup name="substeps.attlist">
    <xs:attribute name="performance" default="required">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="optional"/>
          <xs:enumeration value="required"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="substeps.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of substeps.attlist -->
  <!-- end of substeps.module -->
  <xs:attributeGroup name="stepalternatives.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:Alternative steps in a procedure. -->
  <xs:element name="stepalternatives">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" ref="step"/>
      </xs:sequence>
      <xs:attributeGroup ref="stepalternatives.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of stepalternatives.element -->
  <!-- Performance: Whether (one of) the alternatives must be performed -->
  <!-- not #REQUIRED! -->
  <xs:attributeGroup name="stepalternatives.attlist">
    <xs:attribute name="performance" default="required">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="optional"/>
          <xs:enumeration value="required"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="stepalternatives.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of stepalternatives.attlist -->
  <!-- end of stepalternatives.module -->
  <!-- end of procedure.content.module -->
  <!-- Sidebar .......................... -->
  <xs:attributeGroup name="sidebarinfo.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:Meta-information for a Sidebar. -->
  <xs:element name="sidebarinfo">
    <xs:complexType>
      <xs:group maxOccurs="unbounded" ref="info.class"/>
      <xs:attributeGroup ref="sidebarinfo.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of sidebarinfo.element -->
  <xs:attributeGroup name="sidebarinfo.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="sidebarinfo.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of sidebarinfo.attlist -->
  <!-- end of sidebarinfo.module -->
  <xs:attributeGroup name="sidebar.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A portion of a document that is isolated from the main narrative flow. -->
  <xs:element name="sidebar" substitutionGroup="compound.class">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="sidebarinfo"/>
        <xs:group minOccurs="0" ref="formalobject.title.content"/>
        <xs:group maxOccurs="unbounded" ref="sidebar.mix"/>
      </xs:sequence>
      <xs:attributeGroup ref="sidebar.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of sidebar.element -->
  <xs:attributeGroup name="sidebar.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="sidebar.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of sidebar.attlist -->
  <!-- end of sidebar.module -->
  <!-- end of sidebar.content.model -->
  <!-- ...................................................................... -->
  <!-- Paragraph-related elements ........................................... -->
  <xs:attributeGroup name="abstract.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A summary. -->
  <xs:element name="abstract">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="title"/>
        <xs:element maxOccurs="unbounded" ref="para.class"/>
      </xs:sequence>
      <xs:attributeGroup ref="abstract.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of abstract.element -->
  <xs:attributeGroup name="abstract.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="abstract.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of abstract.attlist -->
  <!-- end of abstract.module -->
  <xs:attributeGroup name="authorblurb.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A short description or note about an author. -->
  <xs:element name="authorblurb">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="title"/>
        <xs:element maxOccurs="unbounded" ref="para.class"/>
      </xs:sequence>
      <xs:attributeGroup ref="authorblurb.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of authorblurb.element -->
  <xs:attributeGroup name="authorblurb.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="authorblurb.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of authorblurb.attlist -->
  <!-- end of authorblurb.module -->
  <xs:attributeGroup name="personblurb.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A short description or note about a person. -->
  <xs:element name="personblurb">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="title"/>
        <xs:element maxOccurs="unbounded" ref="para.class"/>
      </xs:sequence>
      <xs:attributeGroup ref="personblurb.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of personblurb.element -->
  <xs:attributeGroup name="personblurb.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="personblurb.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of personblurb.attlist -->
  <!-- end of personblurb.module -->
  <xs:attributeGroup name="blockquote.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A quotation set off from the main text. -->
  <xs:element name="blockquote" substitutionGroup="informal.class">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="blockinfo"/>
        <xs:element minOccurs="0" ref="title"/>
        <xs:element minOccurs="0" ref="attribution"/>
        <xs:group maxOccurs="unbounded" ref="component.mix"/>
      </xs:sequence>
      <xs:attributeGroup ref="blockquote.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of blockquote.element -->
  <xs:attributeGroup name="blockquote.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="blockquote.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of blockquote.attlist -->
  <!-- end of blockquote.module -->
  <xs:attributeGroup name="attribution.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:The source of a block quote or epigraph. -->
  <xs:element name="attribution">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="para.char.mix"/>
      <xs:attributeGroup ref="attribution.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of attribution.element -->
  <xs:attributeGroup name="attribution.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="attribution.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of attribution.attlist -->
  <!-- end of attribution.module -->
  <xs:attributeGroup name="bridgehead.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A free-floating heading. -->
  <xs:element name="bridgehead">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="title.char.mix"/>
      <xs:attributeGroup ref="bridgehead.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of bridgehead.element -->
  <!--
    Renderas: Indicates the format in which the BridgeHead
    should appear
  -->
  <xs:attributeGroup name="bridgehead.attlist">
    <xs:attribute name="renderas">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="other"/>
          <xs:enumeration value="sect1"/>
          <xs:enumeration value="sect2"/>
          <xs:enumeration value="sect3"/>
          <xs:enumeration value="sect4"/>
          <xs:enumeration value="sect5"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="bridgehead.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of bridgehead.attlist -->
  <!-- end of bridgehead.module -->
  <xs:attributeGroup name="remark.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A remark (or comment) intended for presentation in a draft manuscript. -->
  <xs:element name="remark">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="para.char.mix"/>
      <xs:attributeGroup ref="remark.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of remark.element -->
  <xs:attributeGroup name="remark.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="remark.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of remark.attlist -->
  <!-- end of remark.module -->
  <xs:attributeGroup name="epigraph.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A short inscription at the beginning of a document or component. -->
  <xs:element name="epigraph">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="attribution"/>
        <xs:choice maxOccurs="unbounded">
          <xs:element ref="para.class"/>
          <xs:element ref="literallayout"/>
        </xs:choice>
      </xs:sequence>
      <xs:attributeGroup ref="epigraph.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of epigraph.element -->
  <xs:attributeGroup name="epigraph.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="epigraph.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of epigraph.attlist -->
  <!-- Attribution (defined above) -->
  <!-- end of epigraph.module -->
  <xs:attributeGroup name="footnote.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A footnote. -->
  <xs:element name="footnote" substitutionGroup="gen.char.class">
    <xs:complexType>
      <xs:group maxOccurs="unbounded" ref="footnote.mix"/>
      <xs:attributeGroup ref="footnote.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of footnote.element -->
  <xs:attributeGroup name="footnote.attlist">
    <xs:attributeGroup ref="label.attrib"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="footnote.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of footnote.attlist -->
  <!-- end of footnote.module -->
  <xs:attributeGroup name="highlights.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A summary of the main points of the discussed component. -->
  <xs:element name="highlights">
    <xs:complexType>
      <xs:group maxOccurs="unbounded" ref="highlights.mix"/>
      <xs:attributeGroup ref="highlights.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of highlights.element -->
  <xs:attributeGroup name="highlights.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="highlights.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of highlights.attlist -->
  <!-- end of highlights.module -->
  <xs:attributeGroup name="formalpara.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A paragraph with a title. -->
  <xs:element name="formalpara" substitutionGroup="para.class">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="title"/>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="ndxterm.class"/>
        <xs:element ref="para"/>
      </xs:sequence>
      <xs:attributeGroup ref="formalpara.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of formalpara.element -->
  <xs:attributeGroup name="formalpara.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="formalpara.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of formalpara.attlist -->
  <!-- end of formalpara.module -->
  <xs:attributeGroup name="para.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A paragraph. -->
  <xs:element name="para" substitutionGroup="para.class">
    <xs:complexType mixed="true">
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:group ref="para.char.mix"/>
        <xs:group ref="para.mix"/>
      </xs:choice>
      <xs:attributeGroup ref="para.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of para.element -->
  <xs:attributeGroup name="para.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="para.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of para.attlist -->
  <!-- end of para.module -->
  <xs:attributeGroup name="simpara.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A paragraph that contains only text and inline markup, no block elements. -->
  <xs:element name="simpara" substitutionGroup="para.class">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="para.char.mix"/>
      <xs:attributeGroup ref="simpara.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of simpara.element -->
  <xs:attributeGroup name="simpara.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="simpara.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of simpara.attlist -->
  <!-- end of simpara.module -->
  <xs:attributeGroup name="sconstruct.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:An SConstruct example file. -->
  <xs:element name="sconstruct" substitutionGroup="linespecific.class">
    <xs:complexType mixed="true">
      <xs:annotation>
        <xs:documentation xml:lang="en">
          TODO
        </xs:documentation>
      </xs:annotation>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:group ref="para.char.mix"/>
        <xs:element ref="co"/>
        <xs:element ref="coref"/>
        <xs:element ref="lineannotation"/>
        <xs:element ref="textobject"/>
      </xs:choice>
      <xs:attributeGroup ref="sconstruct.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of sconstruct.element -->
  <xs:attributeGroup name="sconstruct.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="sconstruct.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of sconstruct.attlist -->
  <!-- end of sconstruct.module -->
  <xs:attributeGroup name="scons_example.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:An SCons example. -->
  <xs:element name="scons_example" substitutionGroup="linespecific.class">
    <xs:complexType>
      <xs:annotation>
        <xs:documentation xml:lang="en">
          TODO
        </xs:documentation>
      </xs:annotation>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element ref="file"/>
        <xs:element ref="directory"/>
      </xs:choice>
      <xs:attributeGroup ref="scons_example.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of scons_example.element -->
  <xs:attributeGroup name="scons_example.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="scons_example.role.attrib"/>
    <xs:attribute name="name" type="xs:string" use="required" />
    <xs:attribute name="printme" type="xs:int" use="optional" />
  </xs:attributeGroup>
  <!-- end of scons_example.attlist -->
  <!-- end of scons_example.module -->
  <xs:attributeGroup name="file.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:An SCons example file. -->
  <xs:element name="file" substitutionGroup="linespecific.class">
    <xs:complexType mixed="true">
      <xs:annotation>
        <xs:documentation xml:lang="en">
          TODO
        </xs:documentation>
      </xs:annotation>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:group ref="para.char.mix"/>
        <xs:element ref="co"/>
        <xs:element ref="coref"/>
        <xs:element ref="lineannotation"/>
        <xs:element ref="textobject"/>
      </xs:choice>
      <xs:attributeGroup ref="file.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of file.element -->
  <xs:attributeGroup name="file.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="file.role.attrib"/>
    <xs:attribute name="name" type="xs:string" use="required" />
    <xs:attribute name="example" type="xs:string" use="optional" />
    <xs:attribute name="chmod" type="xs:string" use="optional" />
    <xs:attribute name="printme" type="xs:int" use="optional" />
  </xs:attributeGroup>
  <!-- end of file.attlist -->
  <!-- end of file.module -->
  <xs:attributeGroup name="directory.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:An SCons example directory. -->
  <xs:element name="directory" substitutionGroup="linespecific.class">
    <xs:complexType mixed="true">
      <xs:annotation>
        <xs:documentation xml:lang="en">
          TODO
        </xs:documentation>
      </xs:annotation>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:group ref="para.char.mix"/>
        <xs:element ref="co"/>
        <xs:element ref="coref"/>
        <xs:element ref="lineannotation"/>
        <xs:element ref="textobject"/>
      </xs:choice>
      <xs:attributeGroup ref="directory.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of directory.element -->
  <xs:attributeGroup name="directory.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="directory.role.attrib"/>
    <xs:attribute name="name" type="xs:string" use="required" />
  </xs:attributeGroup>
  <!-- end of directory.attlist -->
  <!-- end of directory.module -->
  <xs:attributeGroup name="scons_example_file.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A SCons example file. -->
  <xs:element name="scons_example_file" substitutionGroup="linespecific.class">
    <xs:complexType mixed="true">
      <xs:annotation>
        <xs:documentation xml:lang="en">
          TODO
        </xs:documentation>
      </xs:annotation>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:group ref="para.char.mix"/>
        <xs:element ref="co"/>
        <xs:element ref="coref"/>
        <xs:element ref="lineannotation"/>
        <xs:element ref="textobject"/>
      </xs:choice>
      <xs:attributeGroup ref="scons_example_file.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of scons_example_file.element -->
  <xs:attributeGroup name="scons_example_file.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="scons_example_file.role.attrib"/>
    <xs:attribute name="name" type="xs:string" use="required" />
    <xs:attribute name="example" type="xs:string" use="required" />
  </xs:attributeGroup>
  <!-- end of scons_example_file.attlist -->
  <!-- end of scons_example_file.module -->
  <xs:attributeGroup name="scons_output.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:The output of a SCons command/example. -->
  <xs:element name="scons_output" substitutionGroup="linespecific.class">
    <xs:complexType>
      <xs:annotation>
        <xs:documentation xml:lang="en">
          TODO
        </xs:documentation>
      </xs:annotation>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element ref="scons_output_command"/>
      </xs:choice>
      <xs:attributeGroup ref="scons_output.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of scons_output.element -->
  <xs:attributeGroup name="scons_output.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="scons_output.role.attrib"/>
    <xs:attribute name="name" type="xs:string" />
    <xs:attribute name="tools" type="xs:string" />
    <xs:attribute name="example" type="xs:string" use="required" />
    <xs:attribute name="suffix" type="xs:string" use="required" />
  </xs:attributeGroup>
  <!-- end of scons_output.attlist -->
  <!-- end of scons_output.module -->
  <xs:attributeGroup name="scons_output_command.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A SCons example file. -->
  <xs:element name="scons_output_command" substitutionGroup="linespecific.class">
    <xs:complexType mixed="true">
      <xs:annotation>
        <xs:documentation xml:lang="en">
          TODO
        </xs:documentation>
      </xs:annotation>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:group ref="para.char.mix"/>
        <xs:element ref="co"/>
        <xs:element ref="coref"/>
        <xs:element ref="lineannotation"/>
        <xs:element ref="textobject"/>
      </xs:choice>
      <xs:attributeGroup ref="scons_output_command.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of scons_output_command.element -->
  <xs:attributeGroup name="scons_output_command.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="scons_output_command.role.attrib"/>
    <xs:attribute name="edit" type="xs:string" use="optional" />
    <xs:attribute name="environment" type="xs:string" use="optional" />
    <xs:attribute name="output" type="xs:string" use="optional" />
  </xs:attributeGroup>
  <!-- end of scons_output_command.attlist -->
  <!-- end of scons_output_command.module -->
  <xs:attributeGroup name="sconsdoc.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A sconsdoc. -->
  <xs:element name="sconsdoc" substitutionGroup="para.class">
    <xs:complexType mixed="true">
      <xs:annotation>
        <xs:documentation xml:lang="en">
          TODO
        </xs:documentation>
      </xs:annotation>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element ref="tool"/>
        <xs:element ref="builder"/>
        <xs:element ref="scons_function"/>
        <xs:element ref="cvar"/>
      </xs:choice>
      <xs:attributeGroup ref="sconsdoc.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of sconsdoc.element -->
  <xs:attributeGroup name="sconsdoc.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="sconsdoc.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of sconsdoc.attlist -->
  <!-- end of sconsdoc.module -->
  <xs:attributeGroup name="example_commands.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:Text that a user sees or might see on a computer screen. -->
  <xs:element name="example_commands" substitutionGroup="linespecific.class">
    <xs:complexType mixed="true">
      <xs:annotation>
        <xs:documentation xml:lang="en">
          TODO
        </xs:documentation>
      </xs:annotation>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:group ref="para.char.mix"/>
        <xs:element ref="co"/>
        <xs:element ref="coref"/>
        <xs:element ref="textobject"/>
        <xs:element ref="lineannotation"/>
      </xs:choice>
      <xs:attributeGroup ref="example_commands.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of example_commands.element -->
  <xs:attributeGroup name="example_commands.attlist">
    <xs:attributeGroup ref="width.attrib"/>
    <xs:attributeGroup ref="linespecific.attrib"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="example_commands.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of example_commands.attlist -->
  <!-- end of example_commands.module -->
  <xs:attributeGroup name="summary.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A summary. -->
  <xs:element name="summary" substitutionGroup="para.class">
    <xs:complexType mixed="true">
      <xs:annotation>
        <xs:documentation xml:lang="en">
          TODO
        </xs:documentation>
      </xs:annotation>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:group ref="component.mix"/>
        <xs:group ref="summary.mix"/>
      </xs:choice>
      <xs:attributeGroup ref="summary.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of summary.element -->
  <xs:attributeGroup name="summary.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="summary.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of summary.attlist -->
  <!-- end of summary.module -->
  
  <xs:attributeGroup name="item.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A item. -->
  <xs:element name="item">
    <xs:complexType mixed="true">
      <xs:annotation>
        <xs:documentation xml:lang="en">
          TODO
        </xs:documentation>
      </xs:annotation>
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="para.char.mix"/>
      <xs:attributeGroup ref="item.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of item.element -->
  <xs:attributeGroup name="item.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="item.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of item.attlist -->
  <!-- end of item.module -->
  <xs:attributeGroup name="sets.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A list in which each entry is marked with a bullet or other dingbat. -->
  <xs:element name="sets" substitutionGroup="list.class">
    <xs:complexType mixed="true">
      <xs:annotation>
        <xs:documentation xml:lang="en">
          TODO
        </xs:documentation>
      </xs:annotation>
      <xs:sequence>
        <xs:element minOccurs="0" ref="blockinfo"/>
        <xs:group minOccurs="0" ref="formalobject.title.content"/>
        <xs:group minOccurs="0" maxOccurs="unbounded" ref="listpreamble.mix"/>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="item"/>
      </xs:sequence>
      <xs:attributeGroup ref="sets.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of sets.element -->
  <!--
    Spacing: Whether the vertical space in the list should be
    compressed
  -->
  <!--
    Mark: Keyword, e.g., bullet, dash, checkbox, none;
    list of keywords and defaults are implementation specific
  -->
  <xs:attributeGroup name="sets.attlist">
    <xs:attribute name="spacing">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="normal"/>
          <xs:enumeration value="compact"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attributeGroup ref="mark.attrib"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="sets.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of sets.attlist -->
  <!-- end of sets.module -->
  <xs:attributeGroup name="uses.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A list in which each entry is marked with a bullet or other dingbat. -->
  <xs:element name="uses" substitutionGroup="list.class">
    <xs:complexType mixed="true">
      <xs:annotation>
        <xs:documentation xml:lang="en">
          TODO
        </xs:documentation>
      </xs:annotation>
      <xs:sequence>
        <xs:element minOccurs="0" ref="blockinfo"/>
        <xs:group minOccurs="0" ref="formalobject.title.content"/>
        <xs:group minOccurs="0" maxOccurs="unbounded" ref="listpreamble.mix"/>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="item"/>
      </xs:sequence>
      <xs:attributeGroup ref="uses.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of uses.element -->
  <!--
    Spacing: Whether the vertical space in the list should be
    compressed
  -->
  <!--
    Mark: Keyword, e.g., bullet, dash, checkbox, none;
    list of keywords and defaults are implementation specific
  -->
  <xs:attributeGroup name="uses.attlist">
    <xs:attribute name="spacing">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="normal"/>
          <xs:enumeration value="compact"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attributeGroup ref="mark.attrib"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="uses.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of uses.attlist -->
  <!-- end of uses.module -->
  <xs:attributeGroup name="tool.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A paragraph. -->
  <xs:element name="tool" substitutionGroup="para.class">
    <xs:complexType mixed="true">
      <xs:annotation>
        <xs:documentation xml:lang="en">
          TODO
        </xs:documentation>
      </xs:annotation>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:group ref="para.mix"/>
        <xs:group ref="tool.mix"/>
      </xs:choice>
      <xs:attributeGroup ref="tool.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of tool.element -->
  <xs:attributeGroup name="tool.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="tool.role.attrib"/>
    <xs:attribute name="name" type="xs:string" use="required" />
  </xs:attributeGroup>
  <!-- end of tool.attlist -->
  <!-- end of tool.module -->
  <xs:attributeGroup name="builder.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A paragraph. -->
  <xs:element name="builder" substitutionGroup="para.class">
    <xs:complexType mixed="true">
      <xs:annotation>
        <xs:documentation xml:lang="en">
          TODO
        </xs:documentation>
      </xs:annotation>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:group ref="para.mix"/>
        <xs:group ref="tool.mix"/>
      </xs:choice>
      <xs:attributeGroup ref="builder.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of builder.element -->
  <xs:attributeGroup name="builder.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="builder.role.attrib"/>
    <xs:attribute name="name" type="xs:string" use="required" />
  </xs:attributeGroup>
  <!-- end of builder.attlist -->
  <!-- end of builder.module -->
  
  <xs:attributeGroup name="cvar.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A paragraph. -->
  <xs:element name="cvar" substitutionGroup="para.class">
    <xs:complexType mixed="true">
      <xs:annotation>
        <xs:documentation xml:lang="en">
          TODO
        </xs:documentation>
      </xs:annotation>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:group ref="para.mix"/>
        <xs:element ref="summary"/>
      </xs:choice>
      <xs:attributeGroup ref="cvar.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of cvar.element -->
  <xs:attributeGroup name="cvar.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="cvar.role.attrib"/>
    <xs:attribute name="name" type="xs:string" use="required" />
  </xs:attributeGroup>
  <!-- end of cvar.attlist -->
  <!-- end of cvar.module -->
  <xs:attributeGroup name="arguments.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A general-purpose element for representing the syntax of commands or functions. -->
  <xs:element name="arguments" substitutionGroup="synop.class">
    <xs:complexType mixed="true">
      <xs:annotation>
        <xs:documentation xml:lang="en">
          TODO
        </xs:documentation>
      </xs:annotation>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:group ref="para.char.mix"/>
        <xs:element ref="graphic"/>
        <xs:element ref="mediaobject"/>
        <xs:element ref="co"/>
        <xs:element ref="coref"/>
        <xs:element ref="textobject"/>
        <xs:element ref="lineannotation"/>
      </xs:choice>
      <xs:attributeGroup ref="arguments.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of arguments.element -->
  <xs:attributeGroup name="arguments.attlist">
    <xs:attributeGroup ref="label.attrib"/>
    <xs:attributeGroup ref="linespecific.attrib"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="arguments.role.attrib"/>
    <xs:attribute name="signature" type="xs:string" use="optional" />
    <xs:attribute name="both" type="xs:string" use="optional" />
  </xs:attributeGroup>
  <!-- end of arguments.attlist -->
  <!-- end of arguments.module -->
  <xs:attributeGroup name="scons_function.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A paragraph. -->
  <xs:element name="scons_function" substitutionGroup="para.class">
    <xs:complexType mixed="true">
      <xs:annotation>
        <xs:documentation xml:lang="en">
          TODO
        </xs:documentation>
      </xs:annotation>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:group ref="para.char.mix"/>
        <xs:group ref="para.mix"/>
        <xs:group ref="scons_function.mix"/>
      </xs:choice>
      <xs:attributeGroup ref="scons_function.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of scons_function.element -->
  <xs:attributeGroup name="scons_function.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="scons_function.role.attrib"/>
    <xs:attribute name="name" type="xs:string" use="required" />
  </xs:attributeGroup>
  <!-- end of scons_function.attlist -->
  <!-- end of scons_function.module -->
  <xs:attributeGroup name="admon.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A note of caution. -->
  <xs:element name="caution" substitutionGroup="admon.class">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="title"/>
        <xs:group maxOccurs="unbounded" ref="admon.mix"/>
      </xs:sequence>
      <xs:attributeGroup ref="caution.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of caution.element -->
  <xs:attributeGroup name="caution.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="admon.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of caution.attlist -->
  <!-- doc:An admonition set off from the text. -->
  <xs:element name="important" substitutionGroup="admon.class">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="title"/>
        <xs:group maxOccurs="unbounded" ref="admon.mix"/>
      </xs:sequence>
      <xs:attributeGroup ref="important.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of important.element -->
  <xs:attributeGroup name="important.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="admon.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of important.attlist -->
  <!-- doc:A message set off from the text. -->
  <xs:element name="note" substitutionGroup="admon.class">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="title"/>
        <xs:group maxOccurs="unbounded" ref="admon.mix"/>
      </xs:sequence>
      <xs:attributeGroup ref="note.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of note.element -->
  <xs:attributeGroup name="note.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="admon.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of note.attlist -->
  <!-- doc:A suggestion to the user, set off from the text. -->
  <xs:element name="tip" substitutionGroup="admon.class">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="title"/>
        <xs:group maxOccurs="unbounded" ref="admon.mix"/>
      </xs:sequence>
      <xs:attributeGroup ref="tip.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of tip.element -->
  <xs:attributeGroup name="tip.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="admon.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of tip.attlist -->
  <!-- doc:An admonition set off from the text. -->
  <xs:element name="warning" substitutionGroup="admon.class">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="title"/>
        <xs:group maxOccurs="unbounded" ref="admon.mix"/>
      </xs:sequence>
      <xs:attributeGroup ref="warning.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of warning.element -->
  <xs:attributeGroup name="warning.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="admon.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of warning.attlist -->
  <!-- end of admon.module -->
  <!-- ...................................................................... -->
  <!-- Lists ................................................................ -->
  <!-- GlossList ........................ -->
  <xs:attributeGroup name="glosslist.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A wrapper for a set of GlossEntrys. -->
  <xs:element name="glosslist" substitutionGroup="list.class">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="blockinfo"/>
        <xs:group minOccurs="0" ref="formalobject.title.content"/>
        <xs:element maxOccurs="unbounded" ref="glossentry"/>
      </xs:sequence>
      <xs:attributeGroup ref="glosslist.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of glosslist.element -->
  <xs:attributeGroup name="glosslist.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="glosslist.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of glosslist.attlist -->
  <!-- end of glosslist.module -->
  <xs:attributeGroup name="glossentry.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:An entry in a Glossary or GlossList. -->
  <xs:element name="glossentry">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="glossterm"/>
        <xs:element minOccurs="0" ref="acronym"/>
        <xs:element minOccurs="0" ref="abbrev"/>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="ndxterm.class"/>
        <xs:element minOccurs="0" ref="revhistory"/>
        <xs:choice>
          <xs:element ref="glosssee"/>
          <xs:element maxOccurs="unbounded" ref="glossdef"/>
        </xs:choice>
      </xs:sequence>
      <xs:attributeGroup ref="glossentry.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of glossentry.element -->
  <!--
    SortAs: String by which the GlossEntry is to be sorted
    (alphabetized) in lieu of its proper content
  -->
  <xs:attributeGroup name="glossentry.attlist">
    <xs:attribute name="sortas"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="glossentry.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of glossentry.attlist -->
  <!-- end of glossentry.module -->
  <!-- GlossTerm (defined in the Inlines section, below) -->
  <xs:attributeGroup name="glossdef.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A definition in a GlossEntry. -->
  <xs:element name="glossdef">
    <xs:complexType>
      <xs:sequence>
        <xs:group maxOccurs="unbounded" ref="glossdef.mix"/>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="glossseealso"/>
      </xs:sequence>
      <xs:attributeGroup ref="glossdef.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of glossdef.element -->
  <!-- Subject: List of subjects; keywords for the definition -->
  <xs:attributeGroup name="glossdef.attlist">
    <xs:attribute name="subject"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="glossdef.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of glossdef.attlist -->
  <!-- end of glossdef.module -->
  <xs:attributeGroup name="glosssee.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A cross-reference from one GlossEntry to another. -->
  <xs:element name="glosssee">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="para.char.mix"/>
      <xs:attributeGroup ref="glosssee.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of glosssee.element -->
  <!--
    OtherTerm: Reference to the GlossEntry whose GlossTerm
    should be displayed at the point of the GlossSee
  -->
  <xs:attributeGroup name="glosssee.attlist">
    <xs:attribute name="otherterm" type="xs:IDREF"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="glosssee.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of glosssee.attlist -->
  <!-- end of glosssee.module -->
  <xs:attributeGroup name="glossseealso.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A cross-reference from one GlossEntry to another. -->
  <xs:element name="glossseealso">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="para.char.mix"/>
      <xs:attributeGroup ref="glossseealso.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of glossseealso.element -->
  <!--
    OtherTerm: Reference to the GlossEntry whose GlossTerm
    should be displayed at the point of the GlossSeeAlso
  -->
  <xs:attributeGroup name="glossseealso.attlist">
    <xs:attribute name="otherterm" type="xs:IDREF"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="glossseealso.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of glossseealso.attlist -->
  <!-- end of glossseealso.module -->
  <!-- end of glossentry.content.module -->
  <!-- ItemizedList and OrderedList ..... -->
  <xs:attributeGroup name="itemizedlist.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A list in which each entry is marked with a bullet or other dingbat. -->
  <xs:element name="itemizedlist" substitutionGroup="list.class">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="blockinfo"/>
        <xs:group minOccurs="0" ref="formalobject.title.content"/>
        <xs:group minOccurs="0" maxOccurs="unbounded" ref="listpreamble.mix"/>
        <xs:element maxOccurs="unbounded" ref="listitem"/>
      </xs:sequence>
      <xs:attributeGroup ref="itemizedlist.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of itemizedlist.element -->
  <!--
    Spacing: Whether the vertical space in the list should be
    compressed
  -->
  <!--
    Mark: Keyword, e.g., bullet, dash, checkbox, none;
    list of keywords and defaults are implementation specific
  -->
  <xs:attributeGroup name="itemizedlist.attlist">
    <xs:attribute name="spacing">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="normal"/>
          <xs:enumeration value="compact"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attributeGroup ref="mark.attrib"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="itemizedlist.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of itemizedlist.attlist -->
  <!-- end of itemizedlist.module -->
  <xs:attributeGroup name="orderedlist.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A list in which each entry is marked with a sequentially incremented label. -->
  <xs:element name="orderedlist" substitutionGroup="list.class">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="blockinfo"/>
        <xs:group minOccurs="0" ref="formalobject.title.content"/>
        <xs:group minOccurs="0" maxOccurs="unbounded" ref="listpreamble.mix"/>
        <xs:element maxOccurs="unbounded" ref="listitem"/>
      </xs:sequence>
      <xs:attributeGroup ref="orderedlist.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of orderedlist.element -->
  <!--
    Numeration: Style of ListItem numbered; default is expected
    to be Arabic
  -->
  <!--
    InheritNum: Specifies for a nested list that the numbering
    of ListItems should include the number of the item
    within which they are nested (e.g., 1a and 1b within 1,
    rather than a and b)
  -->
  <!--
    Continuation: Where list numbering begins afresh (Restarts,
    the default) or continues that of the immediately preceding
    list (Continues)
  -->
  <!--
    Spacing: Whether the vertical space in the list should be
    compressed
  -->
  <xs:attributeGroup name="orderedlist.attlist">
    <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:attribute name="inheritnum" default="ignore">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="inherit"/>
          <xs:enumeration value="ignore"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="continuation" default="restarts">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="continues"/>
          <xs:enumeration value="restarts"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="spacing">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="normal"/>
          <xs:enumeration value="compact"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="orderedlist.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of orderedlist.attlist -->
  <!-- end of orderedlist.module -->
  <xs:attributeGroup name="listitem.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A wrapper for the elements of a list item. -->
  <xs:element name="listitem">
    <xs:complexType>
      <xs:group maxOccurs="unbounded" ref="component.mix"/>
      <xs:attributeGroup ref="listitem.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of listitem.element -->
  <!--
    Override: Indicates the mark to be used for this ListItem
    instead of the default mark or the mark specified by
    the Mark attribute on the enclosing ItemizedList
  -->
  <xs:attributeGroup name="listitem.attlist">
    <xs:attribute name="override"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="listitem.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of listitem.attlist -->
  <!-- end of listitem.module -->
  <!-- SegmentedList .................... -->
  <xs:attributeGroup name="segmentedlist.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A segmented list, a list of sets of elements. -->
  <xs:element name="segmentedlist" substitutionGroup="list.class">
    <xs:complexType>
      <xs:sequence>
        <xs:group minOccurs="0" ref="formalobject.title.content"/>
        <xs:element maxOccurs="unbounded" ref="segtitle"/>
        <xs:element maxOccurs="unbounded" ref="seglistitem"/>
      </xs:sequence>
      <xs:attributeGroup ref="segmentedlist.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of segmentedlist.element -->
  <xs:attributeGroup name="segmentedlist.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="segmentedlist.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of segmentedlist.attlist -->
  <!-- end of segmentedlist.module -->
  <xs:attributeGroup name="segtitle.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:The title of an element of a list item in a segmented list. -->
  <xs:element name="segtitle">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="title.char.mix"/>
      <xs:attributeGroup ref="segtitle.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of segtitle.element -->
  <xs:attributeGroup name="segtitle.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="segtitle.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of segtitle.attlist -->
  <!-- end of segtitle.module -->
  <xs:attributeGroup name="seglistitem.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A list item in a segmented list. -->
  <xs:element name="seglistitem">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" ref="seg"/>
      </xs:sequence>
      <xs:attributeGroup ref="seglistitem.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of seglistitem.element -->
  <xs:attributeGroup name="seglistitem.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="seglistitem.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of seglistitem.attlist -->
  <!-- end of seglistitem.module -->
  <xs:attributeGroup name="seg.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:An element of a list item in a segmented list. -->
  <xs:element name="seg">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="para.char.mix"/>
      <xs:attributeGroup ref="seg.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of seg.element -->
  <xs:attributeGroup name="seg.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="seg.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of seg.attlist -->
  <!-- end of seg.module -->
  <!-- end of segmentedlist.content.module -->
  <!-- SimpleList ....................... -->
  <xs:attributeGroup name="simplelist.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:An undecorated list of single words or short phrases. -->
  <xs:element name="simplelist" substitutionGroup="list.class">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" ref="member"/>
      </xs:sequence>
      <xs:attributeGroup ref="simplelist.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of simplelist.element -->
  <!-- Columns: The number of columns the array should contain -->
  <!--
    Type: How the Members of the SimpleList should be
    formatted: Inline (members separated with commas etc.
    inline), Vert (top to bottom in n Columns), or Horiz (in
    the direction of text flow) in n Columns.  If Column
    is 1 or implied, Type=Vert and Type=Horiz give the same
    results.
  -->
  <xs:attributeGroup name="simplelist.attlist">
    <xs:attribute name="columns"/>
    <xs:attribute name="type" default="vert">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="inline"/>
          <xs:enumeration value="vert"/>
          <xs:enumeration value="horiz"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="simplelist.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of simplelist.attlist -->
  <!-- end of simplelist.module -->
  <xs:attributeGroup name="member.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:An element of a simple list. -->
  <xs:element name="member">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="para.char.mix"/>
      <xs:attributeGroup ref="member.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of member.element -->
  <xs:attributeGroup name="member.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="member.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of member.attlist -->
  <!-- end of member.module -->
  <!-- end of simplelist.content.module -->
  <!-- VariableList ..................... -->
  <xs:attributeGroup name="variablelist.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A list in which each entry is composed of a set of one or more terms and an associated description. -->
  <xs:element name="variablelist" substitutionGroup="list.class">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="blockinfo"/>
        <xs:group minOccurs="0" ref="formalobject.title.content"/>
        <xs:group minOccurs="0" maxOccurs="unbounded" ref="listpreamble.mix"/>
        <xs:element maxOccurs="unbounded" ref="varlistentry"/>
      </xs:sequence>
      <xs:attributeGroup ref="variablelist.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of variablelist.element -->
  <!--
    TermLength: Length beyond which the presentation engine
    may consider the Term too long and select an alternate
    presentation of the Term and, or, its associated ListItem.
  -->
  <xs:attributeGroup name="variablelist.attlist">
    <xs:attribute name="termlength"/>
    <xs:attribute name="spacing">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="normal"/>
          <xs:enumeration value="compact"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="variablelist.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of variablelist.attlist -->
  <!-- end of variablelist.module -->
  <xs:attributeGroup name="varlistentry.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A wrapper for a set of terms and the associated description in a variable list. -->
  <xs:element name="varlistentry">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" ref="term"/>
        <xs:element ref="listitem"/>
      </xs:sequence>
      <xs:attributeGroup ref="varlistentry.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of varlistentry.element -->
  <xs:attributeGroup name="varlistentry.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="varlistentry.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of varlistentry.attlist -->
  <!-- end of varlistentry.module -->
  <xs:attributeGroup name="term.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:The word or phrase being defined or described in a variable list. -->
  <xs:element name="term">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="para.char.mix"/>
      <xs:attributeGroup ref="term.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of term.element -->
  <xs:attributeGroup name="term.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="term.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of term.attlist -->
  <!-- end of term.module -->
  <!-- ListItem (defined above) -->
  <!-- end of variablelist.content.module -->
  <!-- CalloutList ...................... -->
  <xs:attributeGroup name="calloutlist.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A list of Callouts. -->
  <xs:element name="calloutlist" substitutionGroup="list.class">
    <xs:complexType>
      <xs:sequence>
        <xs:group minOccurs="0" ref="formalobject.title.content"/>
        <xs:element maxOccurs="unbounded" ref="callout"/>
      </xs:sequence>
      <xs:attributeGroup ref="calloutlist.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of calloutlist.element -->
  <xs:attributeGroup name="calloutlist.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="calloutlist.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of calloutlist.attlist -->
  <!-- end of calloutlist.module -->
  <xs:attributeGroup name="callout.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A &ldquo;called out&rdquo; description of a marked Area. -->
  <xs:element name="callout">
    <xs:complexType>
      <xs:group maxOccurs="unbounded" ref="component.mix"/>
      <xs:attributeGroup ref="callout.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of callout.element -->
  <!--
    AreaRefs: IDs of one or more Areas or AreaSets described
    by this Callout
  -->
  <xs:attributeGroup name="callout.attlist">
    <xs:attribute name="arearefs" use="required" type="xs:IDREFS"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="callout.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of callout.attlist -->
  <!-- end of callout.module -->
  <!-- end of calloutlist.content.module -->
  <!-- ...................................................................... -->
  <!-- Objects .............................................................. -->
  <!-- Examples etc. .................... -->
  <xs:attributeGroup name="example.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A formal example, with a title. -->
  <xs:element name="example" substitutionGroup="formal.class">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="blockinfo"/>
        <xs:group ref="formalobject.title.content"/>
        <xs:group maxOccurs="unbounded" ref="example.mix"/>
      </xs:sequence>
      <xs:attributeGroup ref="example.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of example.element -->
  <xs:attributeGroup name="example.attlist">
    <xs:attribute name="floatstyle"/>
    <xs:attributeGroup ref="label.attrib"/>
    <xs:attributeGroup ref="width.attrib"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="example.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of example.attlist -->
  <!-- end of example.module -->
  <xs:attributeGroup name="informalexample.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A displayed example without a title. -->
  <xs:element name="informalexample" substitutionGroup="informal.class">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="blockinfo"/>
        <xs:group maxOccurs="unbounded" ref="example.mix"/>
      </xs:sequence>
      <xs:attributeGroup ref="informalexample.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of informalexample.element -->
  <xs:attributeGroup name="informalexample.attlist">
    <xs:attribute name="floatstyle"/>
    <xs:attributeGroup ref="width.attrib"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="informalexample.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of informalexample.attlist -->
  <!-- end of informalexample.module -->
  <xs:attributeGroup name="programlistingco.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A program listing with associated areas used in callouts. -->
  <xs:element name="programlistingco" substitutionGroup="linespecific.class">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="areaspec"/>
        <xs:element ref="programlisting"/>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="calloutlist"/>
      </xs:sequence>
      <xs:attributeGroup ref="programlistingco.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of programlistingco.element -->
  <xs:attributeGroup name="programlistingco.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="programlistingco.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of programlistingco.attlist -->
  <!-- CalloutList (defined above in Lists) -->
  <!-- end of informalexample.module -->
  <xs:attributeGroup name="areaspec.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A collection of regions in a graphic or code example. -->
  <xs:element name="areaspec">
    <xs:complexType>
      <xs:choice maxOccurs="unbounded">
        <xs:element ref="area"/>
        <xs:element ref="areaset"/>
      </xs:choice>
      <xs:attributeGroup ref="areaspec.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of areaspec.element -->
  <!--
    Units: global unit of measure in which coordinates in
    this spec are expressed:
    
    - CALSPair "x1,y1 x2,y2": lower-left and upper-right
    coordinates in a rectangle describing repro area in which
    graphic is placed, where X and Y dimensions are each some
    number 0..10000 (taken from CALS graphic attributes)
    
    - LineColumn "line column": line number and column number
    at which to start callout text in "linespecific" content
    
    - LineRange "startline endline": whole lines from startline
    to endline in "linespecific" content
    
    - LineColumnPair "line1 col1 line2 col2": starting and ending
    points of area in "linespecific" content that starts at
    first position and ends at second position (including the
    beginnings of any intervening lines)
    
    - Other: directive to look at value of OtherUnits attribute
    to get implementation-specific keyword
    
    The default is implementation-specific; usually dependent on
    the parent element (GraphicCO gets CALSPair, ProgramListingCO
    and ScreenCO get LineColumn)
  -->
  <!-- OtherUnits: User-defined units -->
  <xs:attributeGroup name="areaspec.attlist">
    <xs:attribute name="units">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="calspair"/>
          <xs:enumeration value="linecolumn"/>
          <xs:enumeration value="linerange"/>
          <xs:enumeration value="linecolumnpair"/>
          <xs:enumeration value="other"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="otherunits" type="xs:NMTOKEN"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="areaspec.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of areaspec.attlist -->
  <!-- end of areaspec.module -->
  <xs:attributeGroup name="area.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A region defined for a Callout in a graphic or code example. -->
  <xs:element name="area">
    <xs:complexType>
      <xs:attributeGroup ref="area.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of area.element -->
  <!-- bug number/symbol override or initialization -->
  <!-- to any related information -->
  <!--
    Units: unit of measure in which coordinates in this
    area are expressed; inherits from AreaSet and AreaSpec
  -->
  <!-- OtherUnits: User-defined units -->
  <xs:attributeGroup name="area.attlist">
    <xs:attributeGroup ref="label.attrib"/>
    <xs:attributeGroup ref="linkends.attrib"/>
    <xs:attribute name="units">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="calspair"/>
          <xs:enumeration value="linecolumn"/>
          <xs:enumeration value="linerange"/>
          <xs:enumeration value="linecolumnpair"/>
          <xs:enumeration value="other"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="otherunits" type="xs:NMTOKEN"/>
    <xs:attribute name="coords" use="required"/>
    <xs:attributeGroup ref="idreq.common.attrib"/>
    <xs:attributeGroup ref="area.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of area.attlist -->
  <!-- end of area.module -->
  <xs:attributeGroup name="areaset.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A set of related areas in a graphic or code example. -->
  <xs:element name="areaset">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" ref="area"/>
      </xs:sequence>
      <xs:attributeGroup ref="areaset.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of areaset.element -->
  <!-- bug number/symbol override or initialization -->
  <!--
    Units: unit of measure in which coordinates in this
    area are expressed; inherits from AreaSpec
  -->
  <xs:attributeGroup name="areaset.attlist">
    <xs:attributeGroup ref="label.attrib"/>
    <xs:attribute name="units">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="calspair"/>
          <xs:enumeration value="linecolumn"/>
          <xs:enumeration value="linerange"/>
          <xs:enumeration value="linecolumnpair"/>
          <xs:enumeration value="other"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="otherunits" type="xs:NMTOKEN"/>
    <xs:attribute name="coords" use="required"/>
    <xs:attributeGroup ref="idreq.common.attrib"/>
    <xs:attributeGroup ref="areaset.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of areaset.attlist -->
  <!-- end of areaset.module -->
  <!-- end of areaspec.content.module -->
  <xs:attributeGroup name="programlisting.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A literal listing of all or part of a program. -->
  <xs:element name="programlisting" substitutionGroup="linespecific.class">
    <xs:complexType mixed="true">
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:group ref="para.char.mix"/>
        <xs:element ref="co"/>
        <xs:element ref="coref"/>
        <xs:element ref="lineannotation"/>
        <xs:element ref="textobject"/>
      </xs:choice>
      <xs:attributeGroup ref="programlisting.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of programlisting.element -->
  <xs:attributeGroup name="programlisting.attlist">
    <xs:attributeGroup ref="width.attrib"/>
    <xs:attributeGroup ref="linespecific.attrib"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="programlisting.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of programlisting.attlist -->
  <!-- end of programlisting.module -->
  <xs:attributeGroup name="literallayout.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A block of text in which line breaks and white space are to be reproduced faithfully. -->
  <xs:element name="literallayout" substitutionGroup="linespecific.class">
    <xs:complexType mixed="true">
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:group ref="para.char.mix"/>
        <xs:element ref="co"/>
        <xs:element ref="coref"/>
        <xs:element ref="textobject"/>
        <xs:element ref="lineannotation"/>
      </xs:choice>
      <xs:attributeGroup ref="literallayout.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of literallayout.element -->
  <xs:attributeGroup name="literallayout.attlist">
    <xs:attributeGroup ref="width.attrib"/>
    <xs:attributeGroup ref="linespecific.attrib"/>
    <xs:attribute name="class" default="normal">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="monospaced"/>
          <xs:enumeration value="normal"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="literallayout.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of literallayout.attlist -->
  <!-- LineAnnotation (defined in the Inlines section, below) -->
  <!-- end of literallayout.module -->
  <xs:attributeGroup name="screenco.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A screen with associated areas used in callouts. -->
  <xs:element name="screenco" substitutionGroup="linespecific.class">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="areaspec"/>
        <xs:element ref="screen"/>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="calloutlist"/>
      </xs:sequence>
      <xs:attributeGroup ref="screenco.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of screenco.element -->
  <xs:attributeGroup name="screenco.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="screenco.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of screenco.attlist -->
  <!-- AreaSpec (defined above) -->
  <!-- CalloutList (defined above in Lists) -->
  <!-- end of screenco.module -->
  <xs:attributeGroup name="screen.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:Text that a user sees or might see on a computer screen. -->
  <xs:element name="screen" substitutionGroup="linespecific.class">
    <xs:complexType mixed="true">
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:group ref="para.char.mix"/>
        <xs:element ref="co"/>
        <xs:element ref="coref"/>
        <xs:element ref="textobject"/>
        <xs:element ref="lineannotation"/>
      </xs:choice>
      <xs:attributeGroup ref="screen.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of screen.element -->
  <xs:attributeGroup name="screen.attlist">
    <xs:attributeGroup ref="width.attrib"/>
    <xs:attributeGroup ref="linespecific.attrib"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="screen.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of screen.attlist -->
  <!-- end of screen.module -->
  <xs:attributeGroup name="screenshot.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A representation of what the user sees or might see on a computer screen. -->
  <xs:element name="screenshot" substitutionGroup="linespecific.class">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="screeninfo"/>
        <xs:choice>
          <xs:element ref="graphic"/>
          <xs:element ref="graphicco"/>
          <xs:element ref="mediaobject"/>
          <xs:element ref="mediaobjectco"/>
        </xs:choice>
      </xs:sequence>
      <xs:attributeGroup ref="screenshot.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of screenshot.element -->
  <xs:attributeGroup name="screenshot.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="screenshot.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of screenshot.attlist -->
  <!-- end of screenshot.module -->
  <xs:attributeGroup name="screeninfo.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:Information about how a screen shot was produced. -->
  <xs:element name="screeninfo">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="para.char.mix"/>
      <xs:attributeGroup ref="screeninfo.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of screeninfo.element -->
  <xs:attributeGroup name="screeninfo.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="screeninfo.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of screeninfo.attlist -->
  <!-- end of screeninfo.module -->
  <!-- end of screenshot.content.module -->
  <!-- Figures etc. ..................... -->
  <xs:attributeGroup name="figure.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A formal figure, generally an illustration, with a title. -->
  <xs:element name="figure" substitutionGroup="formal.class">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="blockinfo"/>
        <xs:group ref="formalobject.title.content"/>
        <xs:choice maxOccurs="unbounded">
          <xs:group ref="figure.mix"/>
          <xs:element ref="link.char.class"/>
        </xs:choice>
      </xs:sequence>
      <xs:attributeGroup ref="figure.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of figure.element -->
  <!--
    Float: Whether the Figure is supposed to be rendered
    where convenient (yes (1) value) or at the place it occurs
    in the text (no (0) value, the default)
  -->
  <xs:attributeGroup name="figure.attlist">
    <xs:attribute name="float" default="0" type="yesorno.attvals"/>
    <xs:attribute name="floatstyle"/>
    <xs:attribute name="pgwide" type="yesorno.attvals"/>
    <xs:attributeGroup ref="label.attrib"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="figure.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of figure.attlist -->
  <!-- end of figure.module -->
  <xs:attributeGroup name="informalfigure.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A untitled figure. -->
  <xs:element name="informalfigure" substitutionGroup="informal.class">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="blockinfo"/>
        <xs:choice maxOccurs="unbounded">
          <xs:group ref="figure.mix"/>
          <xs:element ref="link.char.class"/>
        </xs:choice>
      </xs:sequence>
      <xs:attributeGroup ref="informalfigure.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of informalfigure.element -->
  <!--
    Float: Whether the Figure is supposed to be rendered
    where convenient (yes (1) value) or at the place it occurs
    in the text (no (0) value, the default)
  -->
  <xs:attributeGroup name="informalfigure.attlist">
    <xs:attribute name="float" default="0" type="yesorno.attvals"/>
    <xs:attribute name="floatstyle"/>
    <xs:attribute name="pgwide" type="yesorno.attvals"/>
    <xs:attributeGroup ref="label.attrib"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="informalfigure.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of informalfigure.attlist -->
  <!-- end of informalfigure.module -->
  <xs:attributeGroup name="graphicco.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A graphic that contains callout areas. -->
  <xs:element name="graphicco" substitutionGroup="informal.class">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="areaspec"/>
        <xs:element ref="graphic"/>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="calloutlist"/>
      </xs:sequence>
      <xs:attributeGroup ref="graphicco.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of graphicco.element -->
  <xs:attributeGroup name="graphicco.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="graphicco.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of graphicco.attlist -->
  <!-- AreaSpec (defined above in Examples) -->
  <!-- CalloutList (defined above in Lists) -->
  <!-- end of graphicco.module -->
  <!--
    Graphical data can be the content of Graphic, or you can reference
    an external file either as an entity (Entitref) or a filename
    (Fileref).
  -->
  <xs:attributeGroup name="graphic.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A displayed graphical object (not an inline). -->
  <xs:element name="graphic" substitutionGroup="informal.class">
    <xs:complexType>
      <xs:attributeGroup ref="graphic.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of graphic.element -->
  <xs:attributeGroup name="graphic.attlist">
    <xs:attributeGroup ref="graphics.attrib"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="graphic.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of graphic.attlist -->
  <!-- end of graphic.module -->
  <xs:attributeGroup name="inlinegraphic.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:An object containing or pointing to graphical data that will be rendered inline. -->
  <xs:element name="inlinegraphic" substitutionGroup="inlineobj.char.class">
    <xs:complexType>
      <xs:attributeGroup ref="inlinegraphic.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of inlinegraphic.element -->
  <xs:attributeGroup name="inlinegraphic.attlist">
    <xs:attributeGroup ref="graphics.attrib"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="inlinegraphic.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of inlinegraphic.attlist -->
  <!-- end of inlinegraphic.module -->
  <xs:attributeGroup name="mediaobject.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A displayed media object (video, audio, image, etc.). -->
  <xs:element name="mediaobject" substitutionGroup="informal.class">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="objectinfo"/>
        <xs:element maxOccurs="unbounded" ref="mediaobject.mix"/>
        <xs:element minOccurs="0" ref="caption"/>
      </xs:sequence>
      <xs:attributeGroup ref="mediaobject.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of mediaobject.element -->
  <xs:attributeGroup name="mediaobject.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="mediaobject.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of mediaobject.attlist -->
  <!-- end of mediaobject.module -->
  <xs:attributeGroup name="inlinemediaobject.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:An inline media object (video, audio, image, and so on). -->
  <xs:element name="inlinemediaobject" substitutionGroup="inlineobj.char.class">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="objectinfo"/>
        <xs:element maxOccurs="unbounded" ref="mediaobject.mix"/>
      </xs:sequence>
      <xs:attributeGroup ref="inlinemediaobject.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of inlinemediaobject.element -->
  <xs:attributeGroup name="inlinemediaobject.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="inlinemediaobject.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of inlinemediaobject.attlist -->
  <!-- end of inlinemediaobject.module -->
  <xs:attributeGroup name="videoobject.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A wrapper for video data and its associated meta-information. -->
  <xs:element name="videoobject" substitutionGroup="mediaobject.mix">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="objectinfo"/>
        <xs:element ref="videodata"/>
      </xs:sequence>
      <xs:attributeGroup ref="videoobject.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of videoobject.element -->
  <xs:attributeGroup name="videoobject.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="videoobject.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of videoobject.attlist -->
  <!-- end of videoobject.module -->
  <xs:attributeGroup name="audioobject.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A wrapper for audio data and its associated meta-information. -->
  <xs:element name="audioobject" substitutionGroup="mediaobject.mix">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="objectinfo"/>
        <xs:element ref="audiodata"/>
      </xs:sequence>
      <xs:attributeGroup ref="audioobject.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of audioobject.element -->
  <xs:attributeGroup name="audioobject.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="audioobject.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of audioobject.attlist -->
  <!-- end of audioobject.module -->
  <xs:attributeGroup name="imageobject.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A wrapper for image data and its associated meta-information. -->
  <xs:element name="imageobject" substitutionGroup="mediaobject.mix">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="objectinfo"/>
        <xs:element ref="imagedata"/>
      </xs:sequence>
      <xs:attributeGroup ref="imageobject.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of imageobject.element -->
  <xs:attributeGroup name="imageobject.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="imageobject.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of imageobject.attlist -->
  <!-- end of imageobject.module -->
  <xs:attributeGroup name="textobject.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A wrapper for a text description of an object and its associated meta-information. -->
  <xs:element name="textobject" substitutionGroup="mediaobject.mix">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="objectinfo"/>
        <xs:choice>
          <xs:element ref="phrase"/>
          <xs:element ref="textdata"/>
          <xs:group maxOccurs="unbounded" ref="textobject.mix"/>
        </xs:choice>
      </xs:sequence>
      <xs:attributeGroup ref="textobject.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of textobject.element -->
  <xs:attributeGroup name="textobject.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="textobject.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of textobject.attlist -->
  <!-- end of textobject.module -->
  <xs:attributeGroup name="objectinfo.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:Meta-information for an object. -->
  <xs:element name="objectinfo">
    <xs:complexType>
      <xs:group maxOccurs="unbounded" ref="info.class"/>
      <xs:attributeGroup ref="objectinfo.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of objectinfo.element -->
  <xs:attributeGroup name="objectinfo.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="objectinfo.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of objectinfo.attlist -->
  <!-- end of objectinfo.module -->
  <!--
    EntityRef: Name of an external entity containing the content
    of the object data
  -->
  <!--
    FileRef: Filename, qualified by a pathname if desired,
    designating the file containing the content of the object data
  -->
  <!-- Format: Notation of the element content, if any -->
  <!-- SrcCredit: Information about the source of the image -->
  <xs:attributeGroup name="objectdata.attrib">
    <xs:attribute name="entityref" type="xs:ENTITY"/>
    <xs:attribute name="fileref"/>
    <xs:attribute name="format" type="notation.class"/>
    <xs:attribute name="srccredit"/>
  </xs:attributeGroup>
  <xs:attributeGroup name="videodata.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:Pointer to external video data. -->
  <xs:element name="videodata">
    <xs:complexType>
      <xs:attributeGroup ref="videodata.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of videodata.element -->
  <!-- Width: Same as CALS reprowid (desired width) -->
  <!-- Depth: Same as CALS reprodep (desired depth) -->
  <!--
    Align: Same as CALS hplace with 'none' removed; #IMPLIED means
    application-specific
  -->
  <!-- Scale: Conflation of CALS hscale and vscale -->
  <!-- Scalefit: Same as CALS scalefit -->
  <xs:attributeGroup name="videodata.attlist">
    <xs:attribute name="width"/>
    <xs:attribute name="contentwidth"/>
    <xs:attribute name="depth"/>
    <xs:attribute name="contentdepth"/>
    <xs:attribute name="align">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="left"/>
          <xs:enumeration value="right"/>
          <xs:enumeration value="center"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="valign">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="top"/>
          <xs:enumeration value="middle"/>
          <xs:enumeration value="bottom"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="scale"/>
    <xs:attribute name="scalefit" type="yesorno.attvals"/>
    <xs:attributeGroup ref="objectdata.attrib"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="videodata.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of videodata.attlist -->
  <!-- end of videodata.module -->
  <xs:attributeGroup name="audiodata.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:Pointer to external audio data. -->
  <xs:element name="audiodata">
    <xs:complexType>
      <xs:attributeGroup ref="audiodata.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of audiodata.element -->
  <xs:attributeGroup name="audiodata.attlist">
    <xs:attributeGroup ref="objectdata.attrib"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="audiodata.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of audiodata.attlist -->
  <!-- end of audiodata.module -->
  <xs:attributeGroup name="imagedata.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:Pointer to external image data. -->
  <xs:element name="imagedata">
    <xs:complexType>
      <xs:attributeGroup ref="imagedata.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of imagedata.element -->
  <!-- Width: Same as CALS reprowid (desired width) -->
  <!-- Depth: Same as CALS reprodep (desired depth) -->
  <!--
    Align: Same as CALS hplace with 'none' removed; #IMPLIED means
    application-specific
  -->
  <!-- Scale: Conflation of CALS hscale and vscale -->
  <!-- Scalefit: Same as CALS scalefit -->
  <xs:attributeGroup name="imagedata.attlist">
    <xs:attribute name="width"/>
    <xs:attribute name="contentwidth"/>
    <xs:attribute name="depth"/>
    <xs:attribute name="contentdepth"/>
    <xs:attribute name="align">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="left"/>
          <xs:enumeration value="right"/>
          <xs:enumeration value="center"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="valign">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="top"/>
          <xs:enumeration value="middle"/>
          <xs:enumeration value="bottom"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="scale"/>
    <xs:attribute name="scalefit" type="yesorno.attvals"/>
    <xs:attributeGroup ref="objectdata.attrib"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="imagedata.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of imagedata.attlist -->
  <!-- end of imagedata.module -->
  <xs:attributeGroup name="textdata.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:Pointer to external text data. -->
  <xs:element name="textdata">
    <xs:complexType>
      <xs:attributeGroup ref="textdata.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of textdata.element -->
  <xs:attributeGroup name="textdata.attlist">
    <xs:attribute name="encoding"/>
    <xs:attributeGroup ref="objectdata.attrib"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="textdata.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of textdata.attlist -->
  <!-- end of textdata.module -->
  <xs:attributeGroup name="mediaobjectco.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A media object that contains callouts. -->
  <xs:element name="mediaobjectco" substitutionGroup="informal.class">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="objectinfo"/>
        <xs:element ref="imageobjectco"/>
        <xs:choice minOccurs="0" maxOccurs="unbounded">
          <xs:element ref="imageobjectco"/>
          <xs:element ref="textobject"/>
        </xs:choice>
      </xs:sequence>
      <xs:attributeGroup ref="mediaobjectco.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of mediaobjectco.element -->
  <xs:attributeGroup name="mediaobjectco.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="mediaobjectco.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of mediaobjectco.attlist -->
  <!-- end of mediaobjectco.module -->
  <xs:attributeGroup name="imageobjectco.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A wrapper for an image object with callouts. -->
  <xs:element name="imageobjectco" substitutionGroup="mediaobject.mix">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="areaspec"/>
        <xs:element ref="imageobject"/>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="calloutlist"/>
      </xs:sequence>
      <xs:attributeGroup ref="imageobjectco.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of imageobjectco.element -->
  <xs:attributeGroup name="imageobjectco.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="imageobjectco.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of imageobjectco.attlist -->
  <!-- end of imageobjectco.module -->
  <!-- end of mediaobject.content.module -->
  <!-- Equations ........................ -->
  <!-- This PE provides a mechanism for replacing equation content, -->
  <!-- perhaps adding a new or different model (e.g., MathML) -->
  <xs:group name="equation.content">
    <xs:sequence>
      <xs:element minOccurs="0" ref="alt"/>
      <xs:choice>
        <xs:element maxOccurs="unbounded" ref="graphic"/>
        <xs:element maxOccurs="unbounded" ref="mediaobject"/>
        <xs:element maxOccurs="unbounded" ref="mathphrase"/>
      </xs:choice>
    </xs:sequence>
  </xs:group>
  <xs:complexType name="inlineequation.content">
    <xs:sequence>
      <xs:element minOccurs="0" ref="alt"/>
      <xs:choice>
        <xs:element maxOccurs="unbounded" ref="graphic"/>
        <xs:element maxOccurs="unbounded" ref="inlinemediaobject"/>
        <xs:element maxOccurs="unbounded" ref="mathphrase"/>
      </xs:choice>
    </xs:sequence>
  </xs:complexType>
  <xs:attributeGroup name="equation.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A displayed mathematical equation. -->
  <xs:element name="equation" substitutionGroup="formal.class">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="blockinfo"/>
        <xs:group minOccurs="0" ref="formalobject.title.content"/>
        <xs:choice>
          <xs:element ref="informalequation"/>
          <xs:group ref="equation.content"/>
        </xs:choice>
      </xs:sequence>
      <xs:attributeGroup ref="equation.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of equation.element -->
  <xs:attributeGroup name="equation.attlist">
    <xs:attribute name="floatstyle"/>
    <xs:attributeGroup ref="label.attrib"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="equation.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of equation.attlist -->
  <!-- end of equation.module -->
  <xs:attributeGroup name="informalequation.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A displayed mathematical equation without a title. -->
  <xs:element name="informalequation" substitutionGroup="informal.class">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="blockinfo"/>
        <xs:group ref="equation.content"/>
      </xs:sequence>
      <xs:attributeGroup ref="informalequation.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of informalequation.element -->
  <xs:attributeGroup name="informalequation.attlist">
    <xs:attribute name="floatstyle"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="informalequation.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of informalequation.attlist -->
  <!-- end of informalequation.module -->
  <xs:attributeGroup name="inlineequation.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A mathematical equation or expression occurring inline. -->
  <xs:element name="inlineequation" substitutionGroup="inlineobj.char.class">
    <xs:complexType>
      <xs:complexContent>
        <xs:extension base="inlineequation.content">
          <xs:attributeGroup ref="inlineequation.attlist"/>
        </xs:extension>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>
  <!-- end of inlineequation.element -->
  <xs:attributeGroup name="inlineequation.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="inlineequation.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of inlineequation.attlist -->
  <!-- end of inlineequation.module -->
  <xs:attributeGroup name="alt.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:Text representation for a graphical element. -->
  <xs:element name="alt">
    <xs:complexType mixed="true">
      <xs:attributeGroup ref="alt.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of alt.element -->
  <xs:attributeGroup name="alt.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="alt.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of alt.attlist -->
  <!-- end of alt.module -->
  <xs:attributeGroup name="mathphrase.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A mathematical phrase, an expression that can be represented with ordinary text and a small amount of markup. -->
  <xs:element name="mathphrase">
    <xs:complexType mixed="true">
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element ref="subscript"/>
        <xs:element ref="superscript"/>
        <xs:element ref="emphasis"/>
      </xs:choice>
      <xs:attributeGroup ref="mathphrase.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of mathphrase.element -->
  <xs:attributeGroup name="mathphrase.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="mathphrase.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of mathphrase.attlist -->
  <!-- end of mathphrase.module -->
  <!-- Tables ........................... -->
  <!-- Choose a table model. CALS or OASIS XML Exchange -->
  <!-- Do we allow the HTML table model as well? -->
  <!-- ====================================================== -->
  <!--
    xhtmltbl.mod defines HTML tables and sets parameter
    entities so that, when the CALS table module is read,
    we end up allowing any table to be CALS or HTML.
    i.e. This include must come first!
  -->
  <!-- ====================================================== -->
  <!-- end of allow.html.tables -->
  <!-- Add label and role attributes to table and informaltable -->
  <!--
    Add common attributes to Table, TGroup, TBody, THead, TFoot, Row,
    EntryTbl, and Entry (and InformalTable element).
  -->
  <!-- Content model for Table. -->
  <!-- Allow either objects or inlines; beware of REs between elements. -->
  <!-- Reference CALS Table Model -->
  <!-- end of table.module -->
  <!--
    Note that InformalTable is dependent on some of the entity
    declarations that customize Table.
  -->
  <!-- the following entity may have been declared by the XHTML table module -->
  <!-- doc:A table without a title. -->
  <xs:element name="informaltable" substitutionGroup="informal.class">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="blockinfo"/>
        <xs:group ref="informal.tbl.table.mdl"/>
      </xs:sequence>
      <xs:attributeGroup ref="informaltable.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of informaltable.element -->
  <!--
    Frame, Colsep, and Rowsep must be repeated because
    they are not in entities in the table module.
  -->
  <!--
    includes TabStyle, ToCentry, ShortEntry,
    Orient, PgWide
  -->
  <!-- includes Label -->
  <!-- includes common attributes -->
  <xs:attributeGroup name="informaltable.attlist">
    <xs:attribute name="frame" type="tbl.frame.attval"/>
    <xs:attribute name="colsep" type="yesorno.attvals"/>
    <xs:attribute name="rowsep" type="yesorno.attvals"/>
    <xs:attributeGroup ref="common.table.attribs"/>
    <xs:attributeGroup ref="tbl.table.att"/>
  </xs:attributeGroup>
  <!-- end of informaltable.attlist -->
  <!-- end of informaltable.module -->
  <xs:attributeGroup name="caption.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A caption. -->
  <xs:element name="caption">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="textobject.mix"/>
      <xs:attributeGroup ref="caption.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of caption.element -->
  <!-- attrs comes from HTML tables ... -->
  <!-- common.attrib, but without ID because ID is in attrs -->
  <xs:attributeGroup name="caption.attlist.content">
    <xs:attributeGroup ref="caption.role.attrib"/>
    <xs:attributeGroup ref="attrs"/>
    <xs:attribute name="align">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="top"/>
          <xs:enumeration value="bottom"/>
          <xs:enumeration value="left"/>
          <xs:enumeration value="right"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
  </xs:attributeGroup>
  <xs:attributeGroup name="caption.attlist">
    <xs:attributeGroup ref="caption.attlist.content"/>
  </xs:attributeGroup>
  <!-- end of caption.attlist -->
  <!-- end of caption.module -->
  <!-- ...................................................................... -->
  <!-- Synopses ............................................................. -->
  <!-- Synopsis ......................... -->
  <xs:attributeGroup name="synopsis.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A general-purpose element for representing the syntax of commands or functions. -->
  <xs:element name="synopsis" substitutionGroup="synop.class">
    <xs:complexType mixed="true">
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:group ref="para.char.mix"/>
        <xs:element ref="graphic"/>
        <xs:element ref="mediaobject"/>
        <xs:element ref="co"/>
        <xs:element ref="coref"/>
        <xs:element ref="textobject"/>
        <xs:element ref="lineannotation"/>
      </xs:choice>
      <xs:attributeGroup ref="synopsis.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of synopsis.element -->
  <xs:attributeGroup name="synopsis.attlist">
    <xs:attributeGroup ref="label.attrib"/>
    <xs:attributeGroup ref="linespecific.attrib"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="synopsis.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of synopsis.attlist -->
  <!-- LineAnnotation (defined in the Inlines section, below) -->
  <!-- end of synopsis.module -->
  <!-- CmdSynopsis ...................... -->
  <xs:attributeGroup name="cmdsynopsis.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A syntax summary for a software command. -->
  <xs:element name="cmdsynopsis" substitutionGroup="synop.class">
    <xs:complexType>
      <xs:sequence>
        <xs:choice maxOccurs="unbounded">
          <xs:element ref="command"/>
          <xs:element ref="arg"/>
          <xs:element ref="group"/>
          <xs:element ref="sbr"/>
        </xs:choice>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="synopfragment"/>
      </xs:sequence>
      <xs:attributeGroup ref="cmdsynopsis.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of cmdsynopsis.element -->
  <!--
    Sepchar: Character that should separate command and all
    top-level arguments; alternate value might be e.g., &Delta;
  -->
  <xs:attributeGroup name="cmdsynopsis.attlist">
    <xs:attributeGroup ref="label.attrib"/>
    <xs:attribute name="sepchar" default=" "/>
    <xs:attribute name="cmdlength"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="cmdsynopsis.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of cmdsynopsis.attlist -->
  <!-- end of cmdsynopsis.module -->
  <xs:attributeGroup name="arg.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:An argument in a CmdSynopsis. -->
  <xs:element name="arg">
    <xs:complexType mixed="true">
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element ref="arg"/>
        <xs:element ref="group"/>
        <xs:element ref="option"/>
        <xs:element ref="synopfragmentref"/>
        <xs:element ref="replaceable"/>
        <xs:element ref="sbr"/>
      </xs:choice>
      <xs:attributeGroup ref="arg.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of arg.element -->
  <!--
    Choice: Whether Arg must be supplied: Opt (optional to
    supply, e.g. [arg]; the default), Req (required to supply,
    e.g. {arg}), or Plain (required to supply, e.g. arg)
  -->
  <!--
    Rep: whether Arg is repeatable: Norepeat (e.g. arg without
    ellipsis; the default), or Repeat (e.g. arg...)
  -->
  <xs:attributeGroup name="arg.attlist">
    <xs:attribute name="choice" default="opt">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="opt"/>
          <xs:enumeration value="req"/>
          <xs:enumeration value="plain"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="rep" default="norepeat">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="norepeat"/>
          <xs:enumeration value="repeat"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="arg.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of arg.attlist -->
  <!-- end of arg.module -->
  <xs:attributeGroup name="group.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A group of elements in a CmdSynopsis. -->
  <xs:element name="group">
    <xs:complexType>
      <xs:choice maxOccurs="unbounded">
        <xs:element ref="arg"/>
        <xs:element ref="group"/>
        <xs:element ref="option"/>
        <xs:element ref="synopfragmentref"/>
        <xs:element ref="replaceable"/>
        <xs:element ref="sbr"/>
      </xs:choice>
      <xs:attributeGroup ref="group.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of group.element -->
  <!--
    Choice: Whether Group must be supplied: Opt (optional to
    supply, e.g.  [g1|g2|g3]; the default), Req (required to
    supply, e.g.  {g1|g2|g3}), Plain (required to supply,
    e.g.  g1|g2|g3), OptMult (can supply zero or more, e.g.
    [[g1|g2|g3]]), or ReqMult (must supply one or more, e.g.
    {{g1|g2|g3}})
  -->
  <!--
    Rep: whether Group is repeatable: Norepeat (e.g. group
    without ellipsis; the default), or Repeat (e.g. group...)
  -->
  <xs:attributeGroup name="group.attlist">
    <xs:attribute name="choice" default="opt">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="opt"/>
          <xs:enumeration value="req"/>
          <xs:enumeration value="plain"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="rep" default="norepeat">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="norepeat"/>
          <xs:enumeration value="repeat"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="group.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of group.attlist -->
  <!-- end of group.module -->
  <!-- Synopsis break -->
  <xs:attributeGroup name="sbr.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:An explicit line break in a command synopsis. -->
  <xs:element name="sbr">
    <xs:complexType>
      <xs:attributeGroup ref="sbr.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of sbr.element -->
  <xs:attributeGroup name="sbr.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="sbr.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of sbr.attlist -->
  <!-- end of sbr.module -->
  <xs:attributeGroup name="synopfragmentref.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A reference to a fragment of a command synopsis. -->
  <xs:element name="synopfragmentref">
    <xs:complexType mixed="true">
      <xs:attributeGroup ref="synopfragmentref.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of synopfragmentref.element -->
  <!--
    to SynopFragment of complex synopsis
    material for separate referencing
  -->
  <xs:attributeGroup name="synopfragmentref.attlist">
    <xs:attributeGroup ref="linkendreq.attrib"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="synopfragmentref.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of synopfragmentref.attlist -->
  <!-- end of synopfragmentref.module -->
  <xs:attributeGroup name="synopfragment.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A portion of a CmdSynopsis broken out from the main body of the synopsis. -->
  <xs:element name="synopfragment">
    <xs:complexType>
      <xs:choice maxOccurs="unbounded">
        <xs:element ref="arg"/>
        <xs:element ref="group"/>
      </xs:choice>
      <xs:attributeGroup ref="synopfragment.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of synopfragment.element -->
  <xs:attributeGroup name="synopfragment.attlist">
    <xs:attributeGroup ref="idreq.common.attrib"/>
    <xs:attributeGroup ref="synopfragment.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of synopfragment.attlist -->
  <!-- end of synopfragment.module -->
  <!-- Command (defined in the Inlines section, below) -->
  <!-- Option (defined in the Inlines section, below) -->
  <!-- Replaceable (defined in the Inlines section, below) -->
  <!-- end of cmdsynopsis.content.module -->
  <!-- FuncSynopsis ..................... -->
  <xs:attributeGroup name="funcsynopsis.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:The syntax summary for a function definition. -->
  <xs:element name="funcsynopsis" substitutionGroup="synop.class">
    <xs:complexType>
      <xs:choice maxOccurs="unbounded">
        <xs:element ref="funcsynopsisinfo"/>
        <xs:element ref="funcprototype"/>
      </xs:choice>
      <xs:attributeGroup ref="funcsynopsis.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of funcsynopsis.element -->
  <xs:attributeGroup name="funcsynopsis.attlist">
    <xs:attributeGroup ref="label.attrib"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="funcsynopsis.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of funcsynopsis.attlist -->
  <!-- end of funcsynopsis.module -->
  <xs:attributeGroup name="funcsynopsisinfo.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:Information supplementing the FuncDefs of a FuncSynopsis. -->
  <xs:element name="funcsynopsisinfo">
    <xs:complexType mixed="true">
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:group ref="cptr.char.mix"/>
        <xs:element ref="textobject"/>
        <xs:element ref="lineannotation"/>
      </xs:choice>
      <xs:attributeGroup ref="funcsynopsisinfo.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of funcsynopsisinfo.element -->
  <xs:attributeGroup name="funcsynopsisinfo.attlist">
    <xs:attributeGroup ref="linespecific.attrib"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="funcsynopsisinfo.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of funcsynopsisinfo.attlist -->
  <!-- end of funcsynopsisinfo.module -->
  <xs:attributeGroup name="funcprototype.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:The prototype of a function. -->
  <xs:element name="funcprototype">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="modifier"/>
        <xs:element ref="funcdef"/>
        <xs:choice>
          <xs:element ref="void"/>
          <xs:element ref="varargs"/>
          <xs:sequence>
            <xs:element maxOccurs="unbounded" ref="paramdef"/>
            <xs:element minOccurs="0" ref="varargs"/>
          </xs:sequence>
        </xs:choice>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="modifier"/>
      </xs:sequence>
      <xs:attributeGroup ref="funcprototype.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of funcprototype.element -->
  <xs:attributeGroup name="funcprototype.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="funcprototype.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of funcprototype.attlist -->
  <!-- end of funcprototype.module -->
  <xs:attributeGroup name="funcdef.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A function (subroutine) name and its return type. -->
  <xs:element name="funcdef">
    <xs:complexType mixed="true">
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element ref="type"/>
        <xs:element ref="replaceable"/>
        <xs:element ref="function"/>
      </xs:choice>
      <xs:attributeGroup ref="funcdef.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of funcdef.element -->
  <xs:attributeGroup name="funcdef.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="funcdef.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of funcdef.attlist -->
  <!-- end of funcdef.module -->
  <xs:attributeGroup name="void.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:An empty element in a function synopsis indicating that the function in question takes no arguments. -->
  <xs:element name="void">
    <xs:complexType>
      <xs:attributeGroup ref="void.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of void.element -->
  <xs:attributeGroup name="void.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="void.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of void.attlist -->
  <!-- end of void.module -->
  <xs:attributeGroup name="varargs.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:An empty element in a function synopsis indicating a variable number of arguments. -->
  <xs:element name="varargs">
    <xs:complexType>
      <xs:attributeGroup ref="varargs.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of varargs.element -->
  <xs:attributeGroup name="varargs.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="varargs.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of varargs.attlist -->
  <!-- end of varargs.module -->
  <!--
    Processing assumes that only one Parameter will appear in a
    ParamDef, and that FuncParams will be used at most once, for
    providing information on the "inner parameters" for parameters that
    are pointers to functions.
  -->
  <xs:attributeGroup name="paramdef.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:Information about a function parameter in a programming language. -->
  <xs:element name="paramdef">
    <xs:complexType mixed="true">
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element ref="initializer"/>
        <xs:element ref="type"/>
        <xs:element ref="replaceable"/>
        <xs:element ref="parameter"/>
        <xs:element ref="funcparams"/>
      </xs:choice>
      <xs:attributeGroup ref="paramdef.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of paramdef.element -->
  <xs:attributeGroup name="paramdef.attlist">
    <xs:attribute name="choice">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="opt"/>
          <xs:enumeration value="req"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="paramdef.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of paramdef.attlist -->
  <!-- end of paramdef.module -->
  <xs:attributeGroup name="funcparams.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:Parameters for a function referenced through a function pointer in a synopsis. -->
  <xs:element name="funcparams">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="cptr.char.mix"/>
      <xs:attributeGroup ref="funcparams.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of funcparams.element -->
  <xs:attributeGroup name="funcparams.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="funcparams.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of funcparams.attlist -->
  <!-- end of funcparams.module -->
  <!-- LineAnnotation (defined in the Inlines section, below) -->
  <!-- Replaceable (defined in the Inlines section, below) -->
  <!-- Function (defined in the Inlines section, below) -->
  <!-- Parameter (defined in the Inlines section, below) -->
  <!-- end of funcsynopsis.content.module -->
  <!-- ClassSynopsis ..................... -->
  <xs:attributeGroup name="classsynopsis.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:The syntax summary for a class definition. -->
  <xs:element name="classsynopsis" substitutionGroup="synop.class">
    <xs:complexType>
      <xs:sequence>
        <xs:choice maxOccurs="unbounded">
          <xs:element ref="ooclass"/>
          <xs:element ref="oointerface"/>
          <xs:element ref="ooexception"/>
        </xs:choice>
        <xs:choice minOccurs="0" maxOccurs="unbounded">
          <xs:element ref="classsynopsisinfo"/>
          <xs:element ref="fieldsynopsis"/>
          <xs:element ref="method.synop.class"/>
        </xs:choice>
      </xs:sequence>
      <xs:attributeGroup ref="classsynopsis.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of classsynopsis.element -->
  <xs:attributeGroup name="classsynopsis.attlist">
    <xs:attribute name="language"/>
    <xs:attribute name="class" default="class">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="class"/>
          <xs:enumeration value="interface"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="classsynopsis.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of classsynopsis.attlist -->
  <!-- end of classsynopsis.module -->
  <xs:attributeGroup name="classsynopsisinfo.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:Information supplementing the contents of a ClassSynopsis. -->
  <xs:element name="classsynopsisinfo">
    <xs:complexType mixed="true">
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:group ref="cptr.char.mix"/>
        <xs:element ref="textobject"/>
        <xs:element ref="lineannotation"/>
      </xs:choice>
      <xs:attributeGroup ref="classsynopsisinfo.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of classsynopsisinfo.element -->
  <xs:attributeGroup name="classsynopsisinfo.attlist">
    <xs:attributeGroup ref="linespecific.attrib"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="classsynopsisinfo.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of classsynopsisinfo.attlist -->
  <!-- end of classsynopsisinfo.module -->
  <xs:attributeGroup name="ooclass.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A class in an object-oriented programming language. -->
  <xs:element name="ooclass" substitutionGroup="tech.char.class">
    <xs:complexType>
      <xs:sequence>
        <xs:choice minOccurs="0" maxOccurs="unbounded">
          <xs:element ref="modifier"/>
          <xs:element ref="package"/>
        </xs:choice>
        <xs:element ref="classname"/>
      </xs:sequence>
      <xs:attributeGroup ref="ooclass.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of ooclass.element -->
  <xs:attributeGroup name="ooclass.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="ooclass.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of ooclass.attlist -->
  <!-- end of ooclass.module -->
  <xs:attributeGroup name="oointerface.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:An interface in an object-oriented programming language. -->
  <xs:element name="oointerface" substitutionGroup="tech.char.class">
    <xs:complexType>
      <xs:sequence>
        <xs:choice minOccurs="0" maxOccurs="unbounded">
          <xs:element ref="modifier"/>
          <xs:element ref="package"/>
        </xs:choice>
        <xs:element ref="interfacename"/>
      </xs:sequence>
      <xs:attributeGroup ref="oointerface.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of oointerface.element -->
  <xs:attributeGroup name="oointerface.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="oointerface.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of oointerface.attlist -->
  <!-- end of oointerface.module -->
  <xs:attributeGroup name="ooexception.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:An exception in an object-oriented programming language. -->
  <xs:element name="ooexception" substitutionGroup="tech.char.class">
    <xs:complexType>
      <xs:sequence>
        <xs:choice minOccurs="0" maxOccurs="unbounded">
          <xs:element ref="modifier"/>
          <xs:element ref="package"/>
        </xs:choice>
        <xs:element ref="exceptionname"/>
      </xs:sequence>
      <xs:attributeGroup ref="ooexception.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of ooexception.element -->
  <xs:attributeGroup name="ooexception.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="ooexception.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of ooexception.attlist -->
  <!-- end of ooexception.module -->
  <xs:attributeGroup name="modifier.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:Modifiers in a synopsis. -->
  <xs:element name="modifier">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="smallcptr.char.mix"/>
      <xs:attributeGroup ref="modifier.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of modifier.element -->
  <xs:attributeGroup name="modifier.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="modifier.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of modifier.attlist -->
  <!-- end of modifier.module -->
  <xs:attributeGroup name="interfacename.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:The name of an interface. -->
  <xs:element name="interfacename" substitutionGroup="tech.char.class">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="cptr.char.mix"/>
      <xs:attributeGroup ref="interfacename.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of interfacename.element -->
  <xs:attributeGroup name="interfacename.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="interfacename.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of interfacename.attlist -->
  <!-- end of interfacename.module -->
  <xs:attributeGroup name="exceptionname.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:The name of an exception. -->
  <xs:element name="exceptionname" substitutionGroup="tech.char.class">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="smallcptr.char.mix"/>
      <xs:attributeGroup ref="exceptionname.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of exceptionname.element -->
  <xs:attributeGroup name="exceptionname.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="exceptionname.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of exceptionname.attlist -->
  <!-- end of exceptionname.module -->
  <xs:attributeGroup name="fieldsynopsis.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:The name of a field in a class definition. -->
  <xs:element name="fieldsynopsis" substitutionGroup="synop.class">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="modifier"/>
        <xs:element minOccurs="0" ref="type"/>
        <xs:element ref="varname"/>
        <xs:element minOccurs="0" ref="initializer"/>
      </xs:sequence>
      <xs:attributeGroup ref="fieldsynopsis.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of fieldsynopsis.element -->
  <xs:attributeGroup name="fieldsynopsis.attlist">
    <xs:attribute name="language"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="fieldsynopsis.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of fieldsynopsis.attlist -->
  <!-- end of fieldsynopsis.module -->
  <xs:attributeGroup name="initializer.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:The initializer for a FieldSynopsis. -->
  <xs:element name="initializer">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="smallcptr.char.mix"/>
      <xs:attributeGroup ref="initializer.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of initializer.element -->
  <xs:attributeGroup name="initializer.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="initializer.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of initializer.attlist -->
  <!-- end of initializer.module -->
  <xs:attributeGroup name="constructorsynopsis.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A syntax summary for a constructor. -->
  <xs:element name="constructorsynopsis" substitutionGroup="method.synop.class">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="modifier"/>
        <xs:element minOccurs="0" ref="methodname"/>
        <xs:choice>
          <xs:element maxOccurs="unbounded" ref="methodparam"/>
          <xs:element minOccurs="0" ref="void"/>
        </xs:choice>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="exceptionname"/>
      </xs:sequence>
      <xs:attributeGroup ref="constructorsynopsis.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of constructorsynopsis.element -->
  <xs:attributeGroup name="constructorsynopsis.attlist">
    <xs:attribute name="language"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="constructorsynopsis.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of constructorsynopsis.attlist -->
  <!-- end of constructorsynopsis.module -->
  <xs:attributeGroup name="destructorsynopsis.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A syntax summary for a destructor. -->
  <xs:element name="destructorsynopsis" substitutionGroup="method.synop.class">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="modifier"/>
        <xs:element minOccurs="0" ref="methodname"/>
        <xs:choice>
          <xs:element maxOccurs="unbounded" ref="methodparam"/>
          <xs:element minOccurs="0" ref="void"/>
        </xs:choice>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="exceptionname"/>
      </xs:sequence>
      <xs:attributeGroup ref="destructorsynopsis.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of destructorsynopsis.element -->
  <xs:attributeGroup name="destructorsynopsis.attlist">
    <xs:attribute name="language"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="destructorsynopsis.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of destructorsynopsis.attlist -->
  <!-- end of destructorsynopsis.module -->
  <xs:attributeGroup name="methodsynopsis.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A syntax summary for a method. -->
  <xs:element name="methodsynopsis" substitutionGroup="method.synop.class">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="modifier"/>
        <xs:choice minOccurs="0">
          <xs:element ref="type"/>
          <xs:element ref="void"/>
        </xs:choice>
        <xs:element ref="methodname"/>
        <xs:choice>
          <xs:element maxOccurs="unbounded" ref="methodparam"/>
          <xs:element minOccurs="0" ref="void"/>
        </xs:choice>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="exceptionname"/>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="modifier"/>
      </xs:sequence>
      <xs:attributeGroup ref="methodsynopsis.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of methodsynopsis.element -->
  <xs:attributeGroup name="methodsynopsis.attlist">
    <xs:attribute name="language"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="methodsynopsis.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of methodsynopsis.attlist -->
  <!-- end of methodsynopsis.module -->
  <xs:attributeGroup name="methodname.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:The name of a method. -->
  <xs:element name="methodname" substitutionGroup="tech.char.class">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="smallcptr.char.mix"/>
      <xs:attributeGroup ref="methodname.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of methodname.element -->
  <xs:attributeGroup name="methodname.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="methodname.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of methodname.attlist -->
  <!-- end of methodname.module -->
  <xs:attributeGroup name="methodparam.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:Parameters to a method. -->
  <xs:element name="methodparam">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="modifier"/>
        <xs:element minOccurs="0" ref="type"/>
        <xs:choice>
          <xs:sequence>
            <xs:element ref="parameter"/>
            <xs:element minOccurs="0" ref="initializer"/>
          </xs:sequence>
          <xs:element ref="funcparams"/>
        </xs:choice>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="modifier"/>
      </xs:sequence>
      <xs:attributeGroup ref="methodparam.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of methodparam.element -->
  <xs:attributeGroup name="methodparam.attlist">
    <xs:attribute name="choice" default="req">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="opt"/>
          <xs:enumeration value="req"/>
          <xs:enumeration value="plain"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="rep" default="norepeat">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="norepeat"/>
          <xs:enumeration value="repeat"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="methodparam.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of methodparam.attlist -->
  <!-- end of methodparam.module -->
  <!-- end of classsynopsis.content.module -->
  <!-- ...................................................................... -->
  <!-- Document information entities and elements ........................... -->
  <!--
    The document information elements include some elements that are
    currently used only in the document hierarchy module. They are
    defined here so that they will be available for use in customized
    document hierarchies.
  -->
  <!-- .................................. -->
  <!-- Ackno ............................ -->
  <xs:attributeGroup name="ackno.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:Acknowledgements in an Article. -->
  <xs:element name="ackno">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="docinfo.char.mix"/>
      <xs:attributeGroup ref="ackno.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of ackno.element -->
  <xs:attributeGroup name="ackno.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="ackno.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of ackno.attlist -->
  <!-- end of ackno.module -->
  <!-- Address .......................... -->
  <xs:attributeGroup name="address.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A real-world address, generally a postal address. -->
  <xs:element name="address" substitutionGroup="informal.class">
    <xs:complexType mixed="true">
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element ref="personname"/>
        <xs:group ref="person.ident.mix"/>
        <xs:element ref="street"/>
        <xs:element ref="pob"/>
        <xs:element ref="postcode"/>
        <xs:element ref="city"/>
        <xs:element ref="state"/>
        <xs:element ref="country"/>
        <xs:element ref="phone"/>
        <xs:element ref="fax"/>
        <xs:element ref="email"/>
        <xs:element ref="otheraddr"/>
      </xs:choice>
      <xs:attributeGroup ref="address.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of address.element -->
  <xs:attributeGroup name="address.attlist">
    <xs:attributeGroup ref="linespecific.attrib"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="address.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of address.attlist -->
  <!-- end of address.module -->
  <xs:attributeGroup name="street.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A street address in an address. -->
  <xs:element name="street">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="docinfo.char.mix"/>
      <xs:attributeGroup ref="street.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of street.element -->
  <xs:attributeGroup name="street.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="street.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of street.attlist -->
  <!-- end of street.module -->
  <xs:attributeGroup name="pob.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A post office box in an address. -->
  <xs:element name="pob">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="docinfo.char.mix"/>
      <xs:attributeGroup ref="pob.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of pob.element -->
  <xs:attributeGroup name="pob.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="pob.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of pob.attlist -->
  <!-- end of pob.module -->
  <xs:attributeGroup name="postcode.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A postal code in an address. -->
  <xs:element name="postcode">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="docinfo.char.mix"/>
      <xs:attributeGroup ref="postcode.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of postcode.element -->
  <xs:attributeGroup name="postcode.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="postcode.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of postcode.attlist -->
  <!-- end of postcode.module -->
  <xs:attributeGroup name="city.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:The name of a city in an address. -->
  <xs:element name="city">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="docinfo.char.mix"/>
      <xs:attributeGroup ref="city.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of city.element -->
  <xs:attributeGroup name="city.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="city.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of city.attlist -->
  <!-- end of city.module -->
  <xs:attributeGroup name="state.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A state or province in an address. -->
  <xs:element name="state">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="docinfo.char.mix"/>
      <xs:attributeGroup ref="state.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of state.element -->
  <xs:attributeGroup name="state.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="state.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of state.attlist -->
  <!-- end of state.module -->
  <xs:attributeGroup name="country.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:The name of a country. -->
  <xs:element name="country">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="docinfo.char.mix"/>
      <xs:attributeGroup ref="country.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of country.element -->
  <xs:attributeGroup name="country.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="country.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of country.attlist -->
  <!-- end of country.module -->
  <xs:attributeGroup name="phone.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A telephone number. -->
  <xs:element name="phone">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="docinfo.char.mix"/>
      <xs:attributeGroup ref="phone.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of phone.element -->
  <xs:attributeGroup name="phone.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="phone.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of phone.attlist -->
  <!-- end of phone.module -->
  <xs:attributeGroup name="fax.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A fax number. -->
  <xs:element name="fax">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="docinfo.char.mix"/>
      <xs:attributeGroup ref="fax.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of fax.element -->
  <xs:attributeGroup name="fax.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="fax.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of fax.attlist -->
  <!-- end of fax.module -->
  <!-- Email (defined in the Inlines section, below) -->
  <xs:attributeGroup name="otheraddr.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:Uncategorized information in address. -->
  <xs:element name="otheraddr">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="docinfo.char.mix"/>
      <xs:attributeGroup ref="otheraddr.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of otheraddr.element -->
  <xs:attributeGroup name="otheraddr.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="otheraddr.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of otheraddr.attlist -->
  <!-- end of otheraddr.module -->
  <!-- end of address.content.module -->
  <!-- Affiliation ...................... -->
  <xs:attributeGroup name="affiliation.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:The institutional affiliation of an individual. -->
  <xs:element name="affiliation">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="shortaffil"/>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="jobtitle"/>
        <xs:element minOccurs="0" ref="orgname"/>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="orgdiv"/>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="address"/>
      </xs:sequence>
      <xs:attributeGroup ref="affiliation.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of affiliation.element -->
  <xs:attributeGroup name="affiliation.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="affiliation.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of affiliation.attlist -->
  <!-- end of affiliation.module -->
  <xs:attributeGroup name="shortaffil.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A brief description of an affiliation. -->
  <xs:element name="shortaffil">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="docinfo.char.mix"/>
      <xs:attributeGroup ref="shortaffil.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of shortaffil.element -->
  <xs:attributeGroup name="shortaffil.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="shortaffil.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of shortaffil.attlist -->
  <!-- end of shortaffil.module -->
  <xs:attributeGroup name="jobtitle.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:The title of an individual in an organization. -->
  <xs:element name="jobtitle">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="docinfo.char.mix"/>
      <xs:attributeGroup ref="jobtitle.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of jobtitle.element -->
  <xs:attributeGroup name="jobtitle.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="jobtitle.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of jobtitle.attlist -->
  <!-- end of jobtitle.module -->
  <!-- OrgName (defined elsewhere in this section) -->
  <xs:attributeGroup name="orgdiv.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A division of an organization. -->
  <xs:element name="orgdiv">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="docinfo.char.mix"/>
      <xs:attributeGroup ref="orgdiv.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of orgdiv.element -->
  <xs:attributeGroup name="orgdiv.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="orgdiv.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of orgdiv.attlist -->
  <!-- end of orgdiv.module -->
  <!-- Address (defined elsewhere in this section) -->
  <!-- end of affiliation.content.module -->
  <!-- ArtPageNums ...................... -->
  <xs:attributeGroup name="artpagenums.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:The page numbers of an article as published. -->
  <xs:element name="artpagenums">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="docinfo.char.mix"/>
      <xs:attributeGroup ref="artpagenums.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of artpagenums.element -->
  <xs:attributeGroup name="artpagenums.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="artpagenums.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of artpagenums.attlist -->
  <!-- end of artpagenums.module -->
  <!-- PersonName -->
  <xs:attributeGroup name="personname.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:The personal name of an individual. -->
  <xs:element name="personname" substitutionGroup="gen.char.class">
    <xs:complexType>
      <xs:choice maxOccurs="unbounded">
        <xs:element ref="honorific"/>
        <xs:element ref="firstname"/>
        <xs:element ref="surname"/>
        <xs:element ref="lineage"/>
        <xs:element ref="othername"/>
      </xs:choice>
      <xs:attributeGroup ref="personname.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of personname.element -->
  <xs:attributeGroup name="personname.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="personname.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of personname.attlist -->
  <!-- end of personname.module -->
  <!-- Author ........................... -->
  <xs:attributeGroup name="author.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:The name of an individual author. -->
  <xs:element name="author" substitutionGroup="docinfo.char.class">
    <xs:complexType>
      <xs:sequence>
        <xs:choice>
          <xs:element ref="personname"/>
          <xs:group maxOccurs="unbounded" ref="person.ident.mix"/>
        </xs:choice>
        <xs:choice minOccurs="0" maxOccurs="unbounded">
          <xs:element ref="personblurb"/>
          <xs:element ref="email"/>
          <xs:element ref="address"/>
        </xs:choice>
      </xs:sequence>
      <xs:attributeGroup ref="author.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of author.element -->
  <xs:attributeGroup name="author.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="author.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of author.attlist -->
  <!-- (see "Personal identity elements" for %person.ident.mix;) -->
  <!-- end of author.module -->
  <!-- AuthorGroup ...................... -->
  <xs:attributeGroup name="authorgroup.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:Wrapper for author information when a document has multiple authors or collabarators. -->
  <xs:element name="authorgroup">
    <xs:complexType>
      <xs:choice maxOccurs="unbounded">
        <xs:element ref="author"/>
        <xs:element ref="editor"/>
        <xs:element ref="collab"/>
        <xs:element ref="corpauthor"/>
        <xs:element ref="corpcredit"/>
        <xs:element ref="othercredit"/>
      </xs:choice>
      <xs:attributeGroup ref="authorgroup.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of authorgroup.element -->
  <xs:attributeGroup name="authorgroup.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="authorgroup.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of authorgroup.attlist -->
  <!-- end of authorgroup.module -->
  <!-- Author (defined elsewhere in this section) -->
  <!-- Editor (defined elsewhere in this section) -->
  <xs:attributeGroup name="collab.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:Identifies a collaborator. -->
  <xs:element name="collab">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="collabname"/>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="affiliation"/>
      </xs:sequence>
      <xs:attributeGroup ref="collab.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of collab.element -->
  <xs:attributeGroup name="collab.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="collab.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of collab.attlist -->
  <!-- end of collab.module -->
  <xs:attributeGroup name="collabname.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:The name of a collaborator. -->
  <xs:element name="collabname">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="docinfo.char.mix"/>
      <xs:attributeGroup ref="collabname.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of collabname.element -->
  <xs:attributeGroup name="collabname.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="collabname.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of collabname.attlist -->
  <!-- end of collabname.module -->
  <!-- Affiliation (defined elsewhere in this section) -->
  <!-- end of collab.content.module -->
  <!-- CorpAuthor (defined elsewhere in this section) -->
  <!-- OtherCredit (defined elsewhere in this section) -->
  <!-- end of authorgroup.content.module -->
  <!-- AuthorInitials ................... -->
  <xs:attributeGroup name="authorinitials.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:The initials or other short identifier for an author. -->
  <xs:element name="authorinitials" substitutionGroup="docinfo.char.class">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="docinfo.char.mix"/>
      <xs:attributeGroup ref="authorinitials.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of authorinitials.element -->
  <xs:attributeGroup name="authorinitials.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="authorinitials.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of authorinitials.attlist -->
  <!-- end of authorinitials.module -->
  <!-- ConfGroup ........................ -->
  <xs:attributeGroup name="confgroup.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A wrapper for document meta-information about a conference. -->
  <xs:element name="confgroup">
    <xs:complexType>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element ref="confdates"/>
        <xs:element ref="conftitle"/>
        <xs:element ref="confnum"/>
        <xs:element ref="address"/>
        <xs:element ref="confsponsor"/>
      </xs:choice>
      <xs:attributeGroup ref="confgroup.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of confgroup.element -->
  <xs:attributeGroup name="confgroup.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="confgroup.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of confgroup.attlist -->
  <!-- end of confgroup.module -->
  <xs:attributeGroup name="confdates.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:The dates of a conference for which a document was written. -->
  <xs:element name="confdates">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="docinfo.char.mix"/>
      <xs:attributeGroup ref="confdates.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of confdates.element -->
  <xs:attributeGroup name="confdates.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="confdates.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of confdates.attlist -->
  <!-- end of confdates.module -->
  <xs:attributeGroup name="conftitle.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:The title of a conference for which a document was written. -->
  <xs:element name="conftitle">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="docinfo.char.mix"/>
      <xs:attributeGroup ref="conftitle.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of conftitle.element -->
  <xs:attributeGroup name="conftitle.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="conftitle.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of conftitle.attlist -->
  <!-- end of conftitle.module -->
  <xs:attributeGroup name="confnum.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:An identifier, frequently numerical, associated with a conference for which a document was written. -->
  <xs:element name="confnum">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="docinfo.char.mix"/>
      <xs:attributeGroup ref="confnum.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of confnum.element -->
  <xs:attributeGroup name="confnum.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="confnum.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of confnum.attlist -->
  <!-- end of confnum.module -->
  <!-- Address (defined elsewhere in this section) -->
  <xs:attributeGroup name="confsponsor.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:The sponsor of a conference for which a document was written. -->
  <xs:element name="confsponsor">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="docinfo.char.mix"/>
      <xs:attributeGroup ref="confsponsor.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of confsponsor.element -->
  <xs:attributeGroup name="confsponsor.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="confsponsor.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of confsponsor.attlist -->
  <!-- end of confsponsor.module -->
  <!-- end of confgroup.content.module -->
  <!-- ContractNum ...................... -->
  <xs:attributeGroup name="contractnum.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:The contract number of a document. -->
  <xs:element name="contractnum">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="docinfo.char.mix"/>
      <xs:attributeGroup ref="contractnum.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of contractnum.element -->
  <xs:attributeGroup name="contractnum.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="contractnum.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of contractnum.attlist -->
  <!-- end of contractnum.module -->
  <!-- ContractSponsor .................. -->
  <xs:attributeGroup name="contractsponsor.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:The sponsor of a contract. -->
  <xs:element name="contractsponsor">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="docinfo.char.mix"/>
      <xs:attributeGroup ref="contractsponsor.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of contractsponsor.element -->
  <xs:attributeGroup name="contractsponsor.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="contractsponsor.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of contractsponsor.attlist -->
  <!-- end of contractsponsor.module -->
  <!-- Copyright ........................ -->
  <xs:attributeGroup name="copyright.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:Copyright information about a document. -->
  <xs:element name="copyright">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" ref="year"/>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="holder"/>
      </xs:sequence>
      <xs:attributeGroup ref="copyright.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of copyright.element -->
  <xs:attributeGroup name="copyright.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="copyright.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of copyright.attlist -->
  <!-- end of copyright.module -->
  <xs:attributeGroup name="year.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:The year of publication of a document. -->
  <xs:element name="year">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="docinfo.char.mix"/>
      <xs:attributeGroup ref="year.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of year.element -->
  <xs:attributeGroup name="year.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="year.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of year.attlist -->
  <!-- end of year.module -->
  <xs:attributeGroup name="holder.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:The name of the individual or organization that holds a copyright. -->
  <xs:element name="holder">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="docinfo.char.mix"/>
      <xs:attributeGroup ref="holder.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of holder.element -->
  <xs:attributeGroup name="holder.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="holder.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of holder.attlist -->
  <!-- end of holder.module -->
  <!-- end of copyright.content.module -->
  <!-- CorpAuthor ....................... -->
  <xs:attributeGroup name="corpauthor.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A corporate author, as opposed to an individual. -->
  <xs:element name="corpauthor" substitutionGroup="docinfo.char.class">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="docinfo.char.mix"/>
      <xs:attributeGroup ref="corpauthor.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of corpauthor.element -->
  <xs:attributeGroup name="corpauthor.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="corpauthor.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of corpauthor.attlist -->
  <!-- end of corpauthor.module -->
  <!-- CorpCredit ...................... -->
  <xs:attributeGroup name="corpcredit.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A corporation or organization credited in a document. -->
  <xs:element name="corpcredit" substitutionGroup="docinfo.char.class">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="docinfo.char.mix"/>
      <xs:attributeGroup ref="corpcredit.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of corpcredit.element -->
  <xs:attributeGroup name="corpcredit.attlist">
    <xs:attribute name="class">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="graphicdesigner"/>
          <xs:enumeration value="productioneditor"/>
          <xs:enumeration value="copyeditor"/>
          <xs:enumeration value="technicaleditor"/>
          <xs:enumeration value="translator"/>
          <xs:enumeration value="other"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="corpcredit.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of corpcredit.attlist -->
  <!-- end of corpcredit.module -->
  <!-- CorpName ......................... -->
  <!-- doc:The name of a corporation. -->
  <xs:element name="corpname">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="docinfo.char.mix"/>
      <xs:attributeGroup ref="corpname.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of corpname.element -->
  <xs:attributeGroup name="corpname.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <xs:attributeGroup name="corpname.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="corpname.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of corpname.attlist -->
  <!-- end of corpname.module -->
  <!-- Date ............................. -->
  <xs:attributeGroup name="date.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:The date of publication or revision of a document. -->
  <xs:element name="date">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="docinfo.char.mix"/>
      <xs:attributeGroup ref="date.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of date.element -->
  <xs:attributeGroup name="date.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="date.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of date.attlist -->
  <!-- end of date.module -->
  <!-- Edition .......................... -->
  <xs:attributeGroup name="edition.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:The name or number of an edition of a document. -->
  <xs:element name="edition">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="docinfo.char.mix"/>
      <xs:attributeGroup ref="edition.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of edition.element -->
  <xs:attributeGroup name="edition.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="edition.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of edition.attlist -->
  <!-- end of edition.module -->
  <!-- Editor ........................... -->
  <xs:attributeGroup name="editor.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:The name of the editor of a document. -->
  <xs:element name="editor">
    <xs:complexType>
      <xs:sequence>
        <xs:choice>
          <xs:element ref="personname"/>
          <xs:group maxOccurs="unbounded" ref="person.ident.mix"/>
        </xs:choice>
        <xs:choice minOccurs="0" maxOccurs="unbounded">
          <xs:element ref="personblurb"/>
          <xs:element ref="email"/>
          <xs:element ref="address"/>
        </xs:choice>
      </xs:sequence>
      <xs:attributeGroup ref="editor.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of editor.element -->
  <xs:attributeGroup name="editor.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="editor.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of editor.attlist -->
  <!-- (see "Personal identity elements" for %person.ident.mix;) -->
  <!-- end of editor.module -->
  <!-- ISBN ............................. -->
  <xs:attributeGroup name="isbn.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:The International Standard Book Number of a document. -->
  <xs:element name="isbn">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="docinfo.char.mix"/>
      <xs:attributeGroup ref="isbn.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of isbn.element -->
  <xs:attributeGroup name="isbn.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="isbn.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of isbn.attlist -->
  <!-- end of isbn.module -->
  <!-- ISSN ............................. -->
  <xs:attributeGroup name="issn.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:The International Standard Serial Number of a periodical. -->
  <xs:element name="issn">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="docinfo.char.mix"/>
      <xs:attributeGroup ref="issn.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of issn.element -->
  <xs:attributeGroup name="issn.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="issn.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of issn.attlist -->
  <!-- end of issn.module -->
  <!-- BiblioId ................. -->
  <xs:attributeGroup name="biblio.class.attrib">
    <xs:attribute name="class">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="uri"/>
          <xs:enumeration value="doi"/>
          <xs:enumeration value="isbn"/>
          <xs:enumeration value="isrn"/>
          <xs:enumeration value="issn"/>
          <xs:enumeration value="libraryofcongress"/>
          <xs:enumeration value="pubnumber"/>
          <xs:enumeration value="other"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="otherclass"/>
  </xs:attributeGroup>
  <xs:attributeGroup name="biblioid.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:An identifier for a document. -->
  <xs:element name="biblioid">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="docinfo.char.mix"/>
      <xs:attributeGroup ref="biblioid.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of biblioid.element -->
  <xs:attributeGroup name="biblioid.attlist">
    <xs:attributeGroup ref="biblio.class.attrib"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="biblioid.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of biblioid.attlist -->
  <!-- end of biblioid.module -->
  <!-- CiteBiblioId ................. -->
  <xs:attributeGroup name="citebiblioid.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A citation of a bibliographic identifier. -->
  <xs:element name="citebiblioid" substitutionGroup="gen.char.class">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="docinfo.char.mix"/>
      <xs:attributeGroup ref="citebiblioid.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of citebiblioid.element -->
  <xs:attributeGroup name="citebiblioid.attlist">
    <xs:attributeGroup ref="biblio.class.attrib"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="citebiblioid.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of citebiblioid.attlist -->
  <!-- end of citebiblioid.module -->
  <!-- BiblioSource ................. -->
  <xs:attributeGroup name="bibliosource.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:The source of a document. -->
  <xs:element name="bibliosource">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="docinfo.char.mix"/>
      <xs:attributeGroup ref="bibliosource.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of bibliosource.element -->
  <xs:attributeGroup name="bibliosource.attlist">
    <xs:attributeGroup ref="biblio.class.attrib"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="bibliosource.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of bibliosource.attlist -->
  <!-- end of bibliosource.module -->
  <!-- BiblioRelation ................. -->
  <xs:attributeGroup name="bibliorelation.type.attrib">
    <xs:attribute name="type">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="isversionof"/>
          <xs:enumeration value="hasversion"/>
          <xs:enumeration value="isreplacedby"/>
          <xs:enumeration value="replaces"/>
          <xs:enumeration value="isrequiredby"/>
          <xs:enumeration value="requires"/>
          <xs:enumeration value="ispartof"/>
          <xs:enumeration value="haspart"/>
          <xs:enumeration value="isreferencedby"/>
          <xs:enumeration value="references"/>
          <xs:enumeration value="isformatof"/>
          <xs:enumeration value="hasformat"/>
          <xs:enumeration value="othertype"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="othertype"/>
  </xs:attributeGroup>
  <xs:attributeGroup name="bibliorelation.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:The relationship of a document to another. -->
  <xs:element name="bibliorelation">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="docinfo.char.mix"/>
      <xs:attributeGroup ref="bibliorelation.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of bibliorelation.element -->
  <xs:attributeGroup name="bibliorelation.attlist">
    <xs:attributeGroup ref="biblio.class.attrib"/>
    <xs:attributeGroup ref="bibliorelation.type.attrib"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="bibliorelation.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of bibliorelation.attlist -->
  <!-- end of bibliorelation.module -->
  <!-- BiblioCoverage ................. -->
  <xs:attributeGroup name="bibliocoverage.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:The spatial or temporal coverage of a document. -->
  <xs:element name="bibliocoverage">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="docinfo.char.mix"/>
      <xs:attributeGroup ref="bibliocoverage.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of bibliocoverage.element -->
  <xs:attributeGroup name="bibliocoverage.attlist">
    <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="otherspatial"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="otherspatial"/>
    <xs:attribute name="temporal">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="dcmiperiod"/>
          <xs:enumeration value="w3c-dtf"/>
          <xs:enumeration value="othertemporal"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="othertemporal"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="bibliocoverage.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of bibliocoverage.attlist -->
  <!-- end of bibliocoverage.module -->
  <!-- InvPartNumber .................... -->
  <xs:attributeGroup name="invpartnumber.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:An inventory part number. -->
  <xs:element name="invpartnumber">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="docinfo.char.mix"/>
      <xs:attributeGroup ref="invpartnumber.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of invpartnumber.element -->
  <xs:attributeGroup name="invpartnumber.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="invpartnumber.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of invpartnumber.attlist -->
  <!-- end of invpartnumber.module -->
  <!-- IssueNum ......................... -->
  <xs:attributeGroup name="issuenum.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:The number of an issue of a journal. -->
  <xs:element name="issuenum">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="docinfo.char.mix"/>
      <xs:attributeGroup ref="issuenum.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of issuenum.element -->
  <xs:attributeGroup name="issuenum.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="issuenum.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of issuenum.attlist -->
  <!-- end of issuenum.module -->
  <!-- LegalNotice ...................... -->
  <xs:attributeGroup name="legalnotice.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A statement of legal obligations or requirements. -->
  <xs:element name="legalnotice">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="blockinfo"/>
        <xs:element minOccurs="0" ref="title"/>
        <xs:group maxOccurs="unbounded" ref="legalnotice.mix"/>
      </xs:sequence>
      <xs:attributeGroup ref="legalnotice.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of legalnotice.element -->
  <xs:attributeGroup name="legalnotice.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="legalnotice.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of legalnotice.attlist -->
  <!-- end of legalnotice.module -->
  <!-- ModeSpec ......................... -->
  <xs:attributeGroup name="modespec.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:Application-specific information necessary for the completion of an OLink. -->
  <xs:element name="modespec" substitutionGroup="docinfo.char.class">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="docinfo.char.mix"/>
      <xs:attributeGroup ref="modespec.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of modespec.element -->
  <!--
    Application: Type of action required for completion
    of the links to which the ModeSpec is relevant (e.g.,
    retrieval query)
  -->
  <xs:attributeGroup name="modespec.attlist">
    <xs:attribute name="application" type="notation.class"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="modespec.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of modespec.attlist -->
  <!-- end of modespec.module -->
  <!-- OrgName .......................... -->
  <xs:attributeGroup name="orgname.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:The name of an organization other than a corporation. -->
  <xs:element name="orgname" substitutionGroup="gen.char.class">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="docinfo.char.mix"/>
      <xs:attributeGroup ref="orgname.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of orgname.element -->
  <xs:attributeGroup name="orgname.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attribute name="class">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="corporation"/>
          <xs:enumeration value="nonprofit"/>
          <xs:enumeration value="consortium"/>
          <xs:enumeration value="informal"/>
          <xs:enumeration value="other"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="otherclass"/>
    <xs:attributeGroup ref="orgname.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of orgname.attlist -->
  <!-- end of orgname.module -->
  <!-- OtherCredit ...................... -->
  <xs:attributeGroup name="othercredit.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A person or entity, other than an author or editor, credited in a document. -->
  <xs:element name="othercredit" substitutionGroup="docinfo.char.class">
    <xs:complexType>
      <xs:sequence>
        <xs:choice>
          <xs:element ref="personname"/>
          <xs:group maxOccurs="unbounded" ref="person.ident.mix"/>
        </xs:choice>
        <xs:choice minOccurs="0" maxOccurs="unbounded">
          <xs:element ref="personblurb"/>
          <xs:element ref="email"/>
          <xs:element ref="address"/>
        </xs:choice>
      </xs:sequence>
      <xs:attributeGroup ref="othercredit.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of othercredit.element -->
  <xs:attributeGroup name="othercredit.attlist">
    <xs:attribute name="class">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="graphicdesigner"/>
          <xs:enumeration value="productioneditor"/>
          <xs:enumeration value="copyeditor"/>
          <xs:enumeration value="technicaleditor"/>
          <xs:enumeration value="translator"/>
          <xs:enumeration value="other"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="othercredit.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of othercredit.attlist -->
  <!-- (see "Personal identity elements" for %person.ident.mix;) -->
  <!-- end of othercredit.module -->
  <!-- PageNums ......................... -->
  <xs:attributeGroup name="pagenums.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:The numbers of the pages in a book, for use in a bibliographic entry. -->
  <xs:element name="pagenums">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="docinfo.char.mix"/>
      <xs:attributeGroup ref="pagenums.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of pagenums.element -->
  <xs:attributeGroup name="pagenums.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="pagenums.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of pagenums.attlist -->
  <!-- end of pagenums.module -->
  <!-- Personal identity elements ....... -->
  <!--
    These elements are used only within Author, Editor, and
    OtherCredit.
  -->
  <xs:attributeGroup name="contrib.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A summary of the contributions made to a document by a credited source. -->
  <xs:element name="contrib">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="docinfo.char.mix"/>
      <xs:attributeGroup ref="contrib.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of contrib.element -->
  <xs:attributeGroup name="contrib.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="contrib.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of contrib.attlist -->
  <!-- end of contrib.module -->
  <xs:attributeGroup name="firstname.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:The first name of a person. -->
  <xs:element name="firstname">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="docinfo.char.mix"/>
      <xs:attributeGroup ref="firstname.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of firstname.element -->
  <xs:attributeGroup name="firstname.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="firstname.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of firstname.attlist -->
  <!-- end of firstname.module -->
  <xs:attributeGroup name="honorific.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:The title of a person. -->
  <xs:element name="honorific">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="docinfo.char.mix"/>
      <xs:attributeGroup ref="honorific.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of honorific.element -->
  <xs:attributeGroup name="honorific.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="honorific.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of honorific.attlist -->
  <!-- end of honorific.module -->
  <xs:attributeGroup name="lineage.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:The portion of a person's name indicating a relationship to ancestors. -->
  <xs:element name="lineage">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="docinfo.char.mix"/>
      <xs:attributeGroup ref="lineage.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of lineage.element -->
  <xs:attributeGroup name="lineage.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="lineage.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of lineage.attlist -->
  <!-- end of lineage.module -->
  <xs:attributeGroup name="othername.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A component of a persons name that is not a first name, surname, or lineage. -->
  <xs:element name="othername">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="docinfo.char.mix"/>
      <xs:attributeGroup ref="othername.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of othername.element -->
  <xs:attributeGroup name="othername.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="othername.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of othername.attlist -->
  <!-- end of othername.module -->
  <xs:attributeGroup name="surname.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A family name; in western cultures the last name. -->
  <xs:element name="surname">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="docinfo.char.mix"/>
      <xs:attributeGroup ref="surname.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of surname.element -->
  <xs:attributeGroup name="surname.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="surname.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of surname.attlist -->
  <!-- end of surname.module -->
  <!-- end of person.ident.module -->
  <!-- PrintHistory ..................... -->
  <xs:attributeGroup name="printhistory.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:The printing history of a document. -->
  <xs:element name="printhistory">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" ref="para.class"/>
      </xs:sequence>
      <xs:attributeGroup ref="printhistory.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of printhistory.element -->
  <xs:attributeGroup name="printhistory.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="printhistory.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of printhistory.attlist -->
  <!-- end of printhistory.module -->
  <!-- ProductName ...................... -->
  <xs:attributeGroup name="productname.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:The formal name of a product. -->
  <xs:element name="productname" substitutionGroup="docinfo.char.class">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="para.char.mix"/>
      <xs:attributeGroup ref="productname.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of productname.element -->
  <!-- Class: More precisely identifies the item the element names -->
  <xs:attributeGroup name="productname.attlist">
    <xs:attribute name="class" default="trade">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="service"/>
          <xs:enumeration value="trade"/>
          <xs:enumeration value="registered"/>
          <xs:enumeration value="copyright"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="productname.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of productname.attlist -->
  <!-- end of productname.module -->
  <!-- ProductNumber .................... -->
  <xs:attributeGroup name="productnumber.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A number assigned to a product. -->
  <xs:element name="productnumber" substitutionGroup="docinfo.char.class">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="docinfo.char.mix"/>
      <xs:attributeGroup ref="productnumber.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of productnumber.element -->
  <xs:attributeGroup name="productnumber.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="productnumber.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of productnumber.attlist -->
  <!-- end of productnumber.module -->
  <!-- PubDate .......................... -->
  <xs:attributeGroup name="pubdate.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:The date of publication of a document. -->
  <xs:element name="pubdate">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="docinfo.char.mix"/>
      <xs:attributeGroup ref="pubdate.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of pubdate.element -->
  <xs:attributeGroup name="pubdate.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="pubdate.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of pubdate.attlist -->
  <!-- end of pubdate.module -->
  <!-- Publisher ........................ -->
  <xs:attributeGroup name="publisher.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:The publisher of a document. -->
  <xs:element name="publisher">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="publishername"/>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="address"/>
      </xs:sequence>
      <xs:attributeGroup ref="publisher.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of publisher.element -->
  <xs:attributeGroup name="publisher.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="publisher.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of publisher.attlist -->
  <!-- end of publisher.module -->
  <xs:attributeGroup name="publishername.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:The name of the publisher of a document. -->
  <xs:element name="publishername">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="docinfo.char.mix"/>
      <xs:attributeGroup ref="publishername.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of publishername.element -->
  <xs:attributeGroup name="publishername.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="publishername.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of publishername.attlist -->
  <!-- end of publishername.module -->
  <!-- Address (defined elsewhere in this section) -->
  <!-- end of publisher.content.module -->
  <!-- PubsNumber ....................... -->
  <xs:attributeGroup name="pubsnumber.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A number assigned to a publication other than an ISBN or ISSN or inventory part number. -->
  <xs:element name="pubsnumber">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="docinfo.char.mix"/>
      <xs:attributeGroup ref="pubsnumber.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of pubsnumber.element -->
  <xs:attributeGroup name="pubsnumber.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="pubsnumber.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of pubsnumber.attlist -->
  <!-- end of pubsnumber.module -->
  <!-- ReleaseInfo ...................... -->
  <xs:attributeGroup name="releaseinfo.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:Information about a particular release of a document. -->
  <xs:element name="releaseinfo">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="docinfo.char.mix"/>
      <xs:attributeGroup ref="releaseinfo.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of releaseinfo.element -->
  <xs:attributeGroup name="releaseinfo.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="releaseinfo.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of releaseinfo.attlist -->
  <!-- end of releaseinfo.module -->
  <!-- RevHistory ....................... -->
  <xs:attributeGroup name="revhistory.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A history of the revisions to a document. -->
  <xs:element name="revhistory" substitutionGroup="docinfo.char.class">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" ref="revision"/>
      </xs:sequence>
      <xs:attributeGroup ref="revhistory.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of revhistory.element -->
  <xs:attributeGroup name="revhistory.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="revhistory.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of revhistory.attlist -->
  <!-- end of revhistory.module -->
  <xs:attributeGroup name="revision.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:An entry describing a single revision in the history of the revisions to a document. -->
  <xs:element name="revision">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="revnumber"/>
        <xs:element ref="date"/>
        <xs:choice minOccurs="0" maxOccurs="unbounded">
          <xs:element ref="author"/>
          <xs:element ref="authorinitials"/>
        </xs:choice>
        <xs:choice minOccurs="0">
          <xs:element ref="revremark"/>
          <xs:element ref="revdescription"/>
        </xs:choice>
      </xs:sequence>
      <xs:attributeGroup ref="revision.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of revision.element -->
  <xs:attributeGroup name="revision.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="revision.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of revision.attlist -->
  <!-- end of revision.module -->
  <xs:attributeGroup name="revnumber.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A document revision number. -->
  <xs:element name="revnumber">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="docinfo.char.mix"/>
      <xs:attributeGroup ref="revnumber.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of revnumber.element -->
  <xs:attributeGroup name="revnumber.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="revnumber.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of revnumber.attlist -->
  <!-- end of revnumber.module -->
  <!-- Date (defined elsewhere in this section) -->
  <!-- AuthorInitials (defined elsewhere in this section) -->
  <xs:attributeGroup name="revremark.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A description of a revision to a document. -->
  <xs:element name="revremark">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="docinfo.char.mix"/>
      <xs:attributeGroup ref="revremark.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of revremark.element -->
  <xs:attributeGroup name="revremark.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="revremark.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of revremark.attlist -->
  <!-- end of revremark.module -->
  <xs:attributeGroup name="revdescription.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A extended description of a revision to a document. -->
  <xs:element name="revdescription">
    <xs:complexType>
      <xs:group maxOccurs="unbounded" ref="revdescription.mix"/>
      <xs:attributeGroup ref="revdescription.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of revdescription.element -->
  <xs:attributeGroup name="revdescription.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="revdescription.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of revdescription.attlist -->
  <!-- end of revdescription.module -->
  <!-- end of revhistory.content.module -->
  <!-- SeriesVolNums .................... -->
  <xs:attributeGroup name="seriesvolnums.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:Numbers of the volumes in a series of books. -->
  <xs:element name="seriesvolnums">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="docinfo.char.mix"/>
      <xs:attributeGroup ref="seriesvolnums.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of seriesvolnums.element -->
  <xs:attributeGroup name="seriesvolnums.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="seriesvolnums.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of seriesvolnums.attlist -->
  <!-- end of seriesvolnums.module -->
  <!-- VolumeNum ........................ -->
  <xs:attributeGroup name="volumenum.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:The volume number of a document in a set (as of books in a set or articles in a journal). -->
  <xs:element name="volumenum">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="docinfo.char.mix"/>
      <xs:attributeGroup ref="volumenum.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of volumenum.element -->
  <xs:attributeGroup name="volumenum.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="volumenum.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of volumenum.attlist -->
  <!-- end of volumenum.module -->
  <!-- .................................. -->
  <!-- end of docinfo.content.module -->
  <!-- ...................................................................... -->
  <!-- Inline, link, and ubiquitous elements ................................ -->
  <!-- Technical and computer terms ......................................... -->
  <xs:attributeGroup name="accel.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A graphical user interface (GUI) keyboard shortcut. -->
  <xs:element name="accel">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="smallcptr.char.mix"/>
      <xs:attributeGroup ref="accel.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of accel.element -->
  <xs:attributeGroup name="accel.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="accel.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of accel.attlist -->
  <!-- end of accel.module -->
  <xs:attributeGroup name="action.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A response to a user event. -->
  <xs:element name="action" substitutionGroup="tech.char.class">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="cptr.char.mix"/>
      <xs:attributeGroup ref="action.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of action.element -->
  <xs:attributeGroup name="action.attlist">
    <xs:attributeGroup ref="moreinfo.attrib"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="action.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of action.attlist -->
  <!-- end of action.module -->
  <xs:attributeGroup name="application.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:The name of a software program. -->
  <xs:element name="application" substitutionGroup="tech.char.class">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="para.char.mix"/>
      <xs:attributeGroup ref="application.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of application.element -->
  <xs:attributeGroup name="application.attlist">
    <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:attributeGroup ref="moreinfo.attrib"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="application.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of application.attlist -->
  <!-- end of application.module -->
  <xs:attributeGroup name="classname.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:The name of a class, in the object-oriented programming sense. -->
  <xs:element name="classname" substitutionGroup="tech.char.class">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="smallcptr.char.mix"/>
      <xs:attributeGroup ref="classname.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of classname.element -->
  <xs:attributeGroup name="classname.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="classname.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of classname.attlist -->
  <!-- end of classname.module -->
  <xs:attributeGroup name="package.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A package. -->
  <xs:element name="package" substitutionGroup="tech.char.class">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="smallcptr.char.mix"/>
      <xs:attributeGroup ref="package.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of package.element -->
  <xs:attributeGroup name="package.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="package.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of package.attlist -->
  <!-- end of package.module -->
  <!--
    CO is a callout area of the LineColumn unit type (a single character
    position); the position is directly indicated by the location of CO.
  -->
  <xs:attributeGroup name="co.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:The location of a callout embedded in text. -->
  <xs:element name="co">
    <xs:complexType>
      <xs:attributeGroup ref="co.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of co.element -->
  <!-- bug number/symbol override or initialization -->
  <!-- to any related information -->
  <xs:attributeGroup name="co.attlist">
    <xs:attributeGroup ref="label.attrib"/>
    <xs:attributeGroup ref="linkends.attrib"/>
    <xs:attributeGroup ref="idreq.common.attrib"/>
    <xs:attributeGroup ref="co.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of co.attlist -->
  <!-- end of co.module -->
  <!-- COREF is a reference to a CO -->
  <xs:attributeGroup name="coref.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A cross reference to a co. -->
  <xs:element name="coref">
    <xs:complexType>
      <xs:attributeGroup ref="coref.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of coref.element -->
  <!-- bug number/symbol override or initialization -->
  <!-- to any related information -->
  <xs:attributeGroup name="coref.attlist">
    <xs:attributeGroup ref="label.attrib"/>
    <xs:attributeGroup ref="linkendreq.attrib"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="coref.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of coref.attlist -->
  <!-- end of coref.module -->
  <xs:attributeGroup name="command.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:The name of an executable program or other software command. -->
  <xs:element name="command" substitutionGroup="tech.char.class">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="cptr.char.mix"/>
      <xs:attributeGroup ref="command.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of command.element -->
  <xs:attributeGroup name="command.attlist">
    <xs:attributeGroup ref="moreinfo.attrib"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="command.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of command.attlist -->
  <!-- end of command.module -->
  <xs:attributeGroup name="computeroutput.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:Data, generally text, displayed or presented by a computer. -->
  <xs:element name="computeroutput" substitutionGroup="tech.char.class">
    <xs:complexType mixed="true">
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:group ref="cptr.char.mix"/>
        <xs:element ref="co"/>
      </xs:choice>
      <xs:attributeGroup ref="computeroutput.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of computeroutput.element -->
  <xs:attributeGroup name="computeroutput.attlist">
    <xs:attributeGroup ref="moreinfo.attrib"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="computeroutput.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of computeroutput.attlist -->
  <!-- end of computeroutput.module -->
  <xs:attributeGroup name="database.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:The name of a database, or part of a database. -->
  <xs:element name="database" substitutionGroup="tech.char.class">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="cptr.char.mix"/>
      <xs:attributeGroup ref="database.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of database.element -->
  <!-- Class: Type of database the element names; no default -->
  <xs:attributeGroup name="database.attlist">
    <xs:attribute name="class">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="name"/>
          <xs:enumeration value="table"/>
          <xs:enumeration value="field"/>
          <xs:enumeration value="key1"/>
          <xs:enumeration value="key2"/>
          <xs:enumeration value="record"/>
          <xs:enumeration value="index"/>
          <xs:enumeration value="view"/>
          <xs:enumeration value="primarykey"/>
          <xs:enumeration value="secondarykey"/>
          <xs:enumeration value="foreignkey"/>
          <xs:enumeration value="altkey"/>
          <xs:enumeration value="procedure"/>
          <xs:enumeration value="datatype"/>
          <xs:enumeration value="constraint"/>
          <xs:enumeration value="rule"/>
          <xs:enumeration value="user"/>
          <xs:enumeration value="group"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attributeGroup ref="moreinfo.attrib"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="database.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of database.attlist -->
  <!-- end of database.module -->
  <xs:attributeGroup name="email.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:An email address. -->
  <xs:element name="email" substitutionGroup="tech.char.class">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="docinfo.char.mix"/>
      <xs:attributeGroup ref="email.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of email.element -->
  <xs:attributeGroup name="email.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="email.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of email.attlist -->
  <!-- end of email.module -->
  <xs:attributeGroup name="envar.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A software environment variable. -->
  <xs:element name="envar" substitutionGroup="tech.char.class">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="smallcptr.char.mix"/>
      <xs:attributeGroup ref="envar.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of envar.element -->
  <xs:attributeGroup name="envar.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="envar.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of envar.attlist -->
  <!-- end of envar.module -->
  <xs:attributeGroup name="errorcode.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:An error code. -->
  <xs:element name="errorcode" substitutionGroup="tech.char.class">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="smallcptr.char.mix"/>
      <xs:attributeGroup ref="errorcode.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of errorcode.element -->
  <xs:attributeGroup name="errorcode.attlist">
    <xs:attributeGroup ref="moreinfo.attrib"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="errorcode.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of errorcode.attlist -->
  <!-- end of errorcode.module -->
  <xs:attributeGroup name="errorname.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:An error name. -->
  <xs:element name="errorname" substitutionGroup="tech.char.class">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="smallcptr.char.mix"/>
      <xs:attributeGroup ref="errorname.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of errorname.element -->
  <xs:attributeGroup name="errorname.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="errorname.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of errorname.attlist -->
  <!-- end of errorname.module -->
  <xs:attributeGroup name="errortext.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:An error message.. -->
  <xs:element name="errortext" substitutionGroup="tech.char.class">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="smallcptr.char.mix"/>
      <xs:attributeGroup ref="errortext.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of errortext.element -->
  <xs:attributeGroup name="errortext.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="errortext.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of errortext.attlist -->
  <!-- end of errortext.module -->
  <xs:attributeGroup name="errortype.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:The classification of an error message. -->
  <xs:element name="errortype" substitutionGroup="tech.char.class">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="smallcptr.char.mix"/>
      <xs:attributeGroup ref="errortype.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of errortype.element -->
  <xs:attributeGroup name="errortype.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="errortype.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of errortype.attlist -->
  <!-- end of errortype.module -->
  <xs:attributeGroup name="filename.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:The name of a file. -->
  <xs:element name="filename" substitutionGroup="tech.char.class">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="cptr.char.mix"/>
      <xs:attributeGroup ref="filename.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of filename.element -->
  <!-- Class: Type of filename the element names; no default -->
  <!--
    Path: Search path (possibly system-specific) in which
    file can be found
  -->
  <xs:attributeGroup name="filename.attlist">
    <xs:attribute name="class">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="headerfile"/>
          <xs:enumeration value="partition"/>
          <xs:enumeration value="devicefile"/>
          <xs:enumeration value="libraryfile"/>
          <xs:enumeration value="directory"/>
          <xs:enumeration value="extension"/>
          <xs:enumeration value="symlink"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="path"/>
    <xs:attributeGroup ref="moreinfo.attrib"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="filename.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of filename.attlist -->
  <!-- end of filename.module -->
  <xs:attributeGroup name="function.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:The name of a function or subroutine, as in a programming language. -->
  <xs:element name="function" substitutionGroup="tech.char.class">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="cptr.char.mix"/>
      <xs:attributeGroup ref="function.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of function.element -->
  <xs:attributeGroup name="function.attlist">
    <xs:attributeGroup ref="moreinfo.attrib"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="function.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of function.attlist -->
  <!-- end of function.module -->
  <xs:attributeGroup name="guibutton.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:The text on a button in a GUI. -->
  <xs:element name="guibutton" substitutionGroup="tech.char.class">
    <xs:complexType mixed="true">
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:group ref="smallcptr.char.mix"/>
        <xs:element ref="accel"/>
        <xs:element ref="superscript"/>
        <xs:element ref="subscript"/>
      </xs:choice>
      <xs:attributeGroup ref="guibutton.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of guibutton.element -->
  <xs:attributeGroup name="guibutton.attlist">
    <xs:attributeGroup ref="moreinfo.attrib"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="guibutton.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of guibutton.attlist -->
  <!-- end of guibutton.module -->
  <xs:attributeGroup name="guiicon.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:Graphic and/or text appearing as a icon in a GUI. -->
  <xs:element name="guiicon" substitutionGroup="tech.char.class">
    <xs:complexType mixed="true">
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:group ref="smallcptr.char.mix"/>
        <xs:element ref="accel"/>
        <xs:element ref="superscript"/>
        <xs:element ref="subscript"/>
      </xs:choice>
      <xs:attributeGroup ref="guiicon.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of guiicon.element -->
  <xs:attributeGroup name="guiicon.attlist">
    <xs:attributeGroup ref="moreinfo.attrib"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="guiicon.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of guiicon.attlist -->
  <!-- end of guiicon.module -->
  <xs:attributeGroup name="guilabel.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:The text of a label in a GUI. -->
  <xs:element name="guilabel" substitutionGroup="tech.char.class">
    <xs:complexType mixed="true">
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:group ref="smallcptr.char.mix"/>
        <xs:element ref="accel"/>
        <xs:element ref="superscript"/>
        <xs:element ref="subscript"/>
      </xs:choice>
      <xs:attributeGroup ref="guilabel.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of guilabel.element -->
  <xs:attributeGroup name="guilabel.attlist">
    <xs:attributeGroup ref="moreinfo.attrib"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="guilabel.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of guilabel.attlist -->
  <!-- end of guilabel.module -->
  <xs:attributeGroup name="guimenu.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:The name of a menu in a GUI. -->
  <xs:element name="guimenu" substitutionGroup="tech.char.class">
    <xs:complexType mixed="true">
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:group ref="smallcptr.char.mix"/>
        <xs:element ref="accel"/>
        <xs:element ref="superscript"/>
        <xs:element ref="subscript"/>
      </xs:choice>
      <xs:attributeGroup ref="guimenu.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of guimenu.element -->
  <xs:attributeGroup name="guimenu.attlist">
    <xs:attributeGroup ref="moreinfo.attrib"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="guimenu.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of guimenu.attlist -->
  <!-- end of guimenu.module -->
  <xs:attributeGroup name="guimenuitem.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:The name of a terminal menu item in a GUI. -->
  <xs:element name="guimenuitem" substitutionGroup="tech.char.class">
    <xs:complexType mixed="true">
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:group ref="smallcptr.char.mix"/>
        <xs:element ref="accel"/>
        <xs:element ref="superscript"/>
        <xs:element ref="subscript"/>
      </xs:choice>
      <xs:attributeGroup ref="guimenuitem.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of guimenuitem.element -->
  <xs:attributeGroup name="guimenuitem.attlist">
    <xs:attributeGroup ref="moreinfo.attrib"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="guimenuitem.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of guimenuitem.attlist -->
  <!-- end of guimenuitem.module -->
  <xs:attributeGroup name="guisubmenu.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:The name of a submenu in a GUI. -->
  <xs:element name="guisubmenu" substitutionGroup="tech.char.class">
    <xs:complexType mixed="true">
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:group ref="smallcptr.char.mix"/>
        <xs:element ref="accel"/>
        <xs:element ref="superscript"/>
        <xs:element ref="subscript"/>
      </xs:choice>
      <xs:attributeGroup ref="guisubmenu.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of guisubmenu.element -->
  <xs:attributeGroup name="guisubmenu.attlist">
    <xs:attributeGroup ref="moreinfo.attrib"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="guisubmenu.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of guisubmenu.attlist -->
  <!-- end of guisubmenu.module -->
  <xs:attributeGroup name="hardware.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A physical part of a computer system. -->
  <xs:element name="hardware" substitutionGroup="tech.char.class">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="cptr.char.mix"/>
      <xs:attributeGroup ref="hardware.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of hardware.element -->
  <xs:attributeGroup name="hardware.attlist">
    <xs:attributeGroup ref="moreinfo.attrib"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="hardware.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of hardware.attlist -->
  <!-- end of hardware.module -->
  <xs:attributeGroup name="interface.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:An element of a GUI. -->
  <xs:element name="interface" substitutionGroup="tech.char.class">
    <xs:complexType mixed="true">
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:group ref="smallcptr.char.mix"/>
        <xs:element ref="accel"/>
      </xs:choice>
      <xs:attributeGroup ref="interface.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of interface.element -->
  <!-- Class: Type of the Interface item; no default -->
  <xs:attributeGroup name="interface.attlist">
    <xs:attributeGroup ref="moreinfo.attrib"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="interface.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of interface.attlist -->
  <!-- end of interface.module -->
  <xs:attributeGroup name="keycap.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:The text printed on a key on a keyboard. -->
  <xs:element name="keycap" substitutionGroup="tech.char.class">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="cptr.char.mix"/>
      <xs:attributeGroup ref="keycap.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of keycap.element -->
  <xs:attributeGroup name="keycap.attlist">
    <xs:attribute name="function">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="alt"/>
          <xs:enumeration value="control"/>
          <xs:enumeration value="shift"/>
          <xs:enumeration value="meta"/>
          <xs:enumeration value="escape"/>
          <xs:enumeration value="enter"/>
          <xs:enumeration value="tab"/>
          <xs:enumeration value="backspace"/>
          <xs:enumeration value="command"/>
          <xs:enumeration value="option"/>
          <xs:enumeration value="space"/>
          <xs:enumeration value="delete"/>
          <xs:enumeration value="insert"/>
          <xs:enumeration value="up"/>
          <xs:enumeration value="down"/>
          <xs:enumeration value="left"/>
          <xs:enumeration value="right"/>
          <xs:enumeration value="home"/>
          <xs:enumeration value="end"/>
          <xs:enumeration value="pageup"/>
          <xs:enumeration value="pagedown"/>
          <xs:enumeration value="other"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="otherfunction"/>
    <xs:attributeGroup ref="moreinfo.attrib"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="keycap.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of keycap.attlist -->
  <!-- end of keycap.module -->
  <xs:attributeGroup name="keycode.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:The internal, frequently numeric, identifier for a key on a keyboard. -->
  <xs:element name="keycode" substitutionGroup="tech.char.class">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="smallcptr.char.mix"/>
      <xs:attributeGroup ref="keycode.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of keycode.element -->
  <xs:attributeGroup name="keycode.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="keycode.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of keycode.attlist -->
  <!-- end of keycode.module -->
  <xs:attributeGroup name="keycombo.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A combination of input actions. -->
  <xs:element name="keycombo" substitutionGroup="tech.char.class">
    <xs:complexType>
      <xs:choice maxOccurs="unbounded">
        <xs:element ref="keycap"/>
        <xs:element ref="keycombo"/>
        <xs:element ref="keysym"/>
        <xs:element ref="mousebutton"/>
      </xs:choice>
      <xs:attributeGroup ref="keycombo.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of keycombo.element -->
  <xs:attributeGroup name="keycombo.attlist">
    <xs:attributeGroup ref="keyaction.attrib"/>
    <xs:attributeGroup ref="moreinfo.attrib"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="keycombo.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of keycombo.attlist -->
  <!-- end of keycombo.module -->
  <xs:attributeGroup name="keysysm.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:The symbolic name of a key on a keyboard. -->
  <xs:element name="keysym" substitutionGroup="tech.char.class">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="smallcptr.char.mix"/>
      <xs:attributeGroup ref="keysym.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of keysym.element -->
  <xs:attributeGroup name="keysym.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="keysysm.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of keysym.attlist -->
  <!-- end of keysym.module -->
  <xs:attributeGroup name="lineannotation.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A comment on a line in a verbatim listing. -->
  <xs:element name="lineannotation">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="para.char.mix"/>
      <xs:attributeGroup ref="lineannotation.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of lineannotation.element -->
  <xs:attributeGroup name="lineannotation.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="lineannotation.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of lineannotation.attlist -->
  <!-- end of lineannotation.module -->
  <xs:attributeGroup name="literal.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:Inline text that is some literal value. -->
  <xs:element name="literal" substitutionGroup="tech.char.class">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="cptr.char.mix"/>
      <xs:attributeGroup ref="literal.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of literal.element -->
  <xs:attributeGroup name="literal.attlist">
    <xs:attributeGroup ref="moreinfo.attrib"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="literal.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of literal.attlist -->
  <!-- end of literal.module -->
  <xs:attributeGroup name="code.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:An inline code fragment. -->
  <xs:element name="code" substitutionGroup="tech.char.class">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="cptr.char.mix"/>
      <xs:attributeGroup ref="code.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of code.element -->
  <xs:attributeGroup name="code.attlist">
    <xs:attribute name="language"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="code.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of code.attlist -->
  <!-- end of code.module -->
  <xs:attributeGroup name="constant.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A programming or system constant. -->
  <xs:element name="constant" substitutionGroup="tech.char.class">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="smallcptr.char.mix"/>
      <xs:attributeGroup ref="constant.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of constant.element -->
  <xs:attributeGroup name="constant.attlist">
    <xs:attribute name="class">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="limit"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="constant.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of constant.attlist -->
  <!-- end of constant.module -->
  <xs:attributeGroup name="varname.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:The name of a variable. -->
  <xs:element name="varname" substitutionGroup="tech.char.class">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="smallcptr.char.mix"/>
      <xs:attributeGroup ref="varname.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of varname.element -->
  <xs:attributeGroup name="varname.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="varname.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of varname.attlist -->
  <!-- end of varname.module -->
  <xs:attributeGroup name="markup.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A string of formatting markup in text that is to be represented literally. -->
  <xs:element name="markup" substitutionGroup="tech.char.class">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="smallcptr.char.mix"/>
      <xs:attributeGroup ref="markup.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of markup.element -->
  <xs:attributeGroup name="markup.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="markup.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of markup.attlist -->
  <!-- end of markup.module -->
  <xs:attributeGroup name="medialabel.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A name that identifies the physical medium on which some information resides. -->
  <xs:element name="medialabel" substitutionGroup="tech.char.class">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="smallcptr.char.mix"/>
      <xs:attributeGroup ref="medialabel.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of medialabel.element -->
  <!-- Class: Type of medium named by the element; no default -->
  <xs:attributeGroup name="medialabel.attlist">
    <xs:attribute name="class">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="cartridge"/>
          <xs:enumeration value="cdrom"/>
          <xs:enumeration value="disk"/>
          <xs:enumeration value="tape"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="medialabel.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of medialabel.attlist -->
  <!-- end of medialabel.module -->
  <xs:attributeGroup name="menuchoice.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A selection or series of selections from a menu. -->
  <xs:element name="menuchoice" substitutionGroup="tech.char.class">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="shortcut"/>
        <xs:choice maxOccurs="unbounded">
          <xs:element ref="guibutton"/>
          <xs:element ref="guiicon"/>
          <xs:element ref="guilabel"/>
          <xs:element ref="guimenu"/>
          <xs:element ref="guimenuitem"/>
          <xs:element ref="guisubmenu"/>
          <xs:element ref="interface"/>
        </xs:choice>
      </xs:sequence>
      <xs:attributeGroup ref="menuchoice.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of menuchoice.element -->
  <xs:attributeGroup name="menuchoice.attlist">
    <xs:attributeGroup ref="moreinfo.attrib"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="menuchoice.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of menuchoice.attlist -->
  <!-- end of menuchoice.module -->
  <!-- See also KeyCombo -->
  <xs:attributeGroup name="shortcut.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A key combination for an action that is also accessible through a menu. -->
  <xs:element name="shortcut">
    <xs:complexType>
      <xs:choice maxOccurs="unbounded">
        <xs:element ref="keycap"/>
        <xs:element ref="keycombo"/>
        <xs:element ref="keysym"/>
        <xs:element ref="mousebutton"/>
      </xs:choice>
      <xs:attributeGroup ref="shortcut.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of shortcut.element -->
  <xs:attributeGroup name="shortcut.attlist">
    <xs:attributeGroup ref="keyaction.attrib"/>
    <xs:attributeGroup ref="moreinfo.attrib"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="shortcut.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of shortcut.attlist -->
  <!-- end of shortcut.module -->
  <!-- end of menuchoice.content.module -->
  <xs:attributeGroup name="mousebutton.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:The conventional name of a mouse button. -->
  <xs:element name="mousebutton" substitutionGroup="tech.char.class">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="smallcptr.char.mix"/>
      <xs:attributeGroup ref="mousebutton.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of mousebutton.element -->
  <xs:attributeGroup name="mousebutton.attlist">
    <xs:attributeGroup ref="moreinfo.attrib"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="mousebutton.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of mousebutton.attlist -->
  <!-- end of mousebutton.module -->
  <xs:attributeGroup name="msgtext.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:The actual text of a message component in a message set. -->
  <xs:element name="msgtext">
    <xs:complexType>
      <xs:group maxOccurs="unbounded" ref="component.mix"/>
      <xs:attributeGroup ref="msgtext.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of msgtext.element -->
  <xs:attributeGroup name="msgtext.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="msgtext.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of msgtext.attlist -->
  <!-- end of msgtext.module -->
  <xs:attributeGroup name="option.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:An option for a software command. -->
  <xs:element name="option" substitutionGroup="tech.char.class">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="cptr.char.mix"/>
      <xs:attributeGroup ref="option.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of option.element -->
  <xs:attributeGroup name="option.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="option.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of option.attlist -->
  <!-- end of option.module -->
  <xs:attributeGroup name="optional.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:Optional information. -->
  <xs:element name="optional" substitutionGroup="tech.char.class">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="cptr.char.mix"/>
      <xs:attributeGroup ref="optional.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of optional.element -->
  <xs:attributeGroup name="optional.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="optional.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of optional.attlist -->
  <!-- end of optional.module -->
  <xs:attributeGroup name="parameter.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A value or a symbolic reference to a value. -->
  <xs:element name="parameter" substitutionGroup="tech.char.class">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="cptr.char.mix"/>
      <xs:attributeGroup ref="parameter.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of parameter.element -->
  <!-- Class: Type of the Parameter; no default -->
  <xs:attributeGroup name="parameter.attlist">
    <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:attributeGroup ref="moreinfo.attrib"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="parameter.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of parameter.attlist -->
  <!-- end of parameter.module -->
  <xs:attributeGroup name="prompt.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A character or string indicating the start of an input field in a  computer display. -->
  <xs:element name="prompt" substitutionGroup="tech.char.class">
    <xs:complexType mixed="true">
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:group ref="smallcptr.char.mix"/>
        <xs:element ref="co"/>
      </xs:choice>
      <xs:attributeGroup ref="prompt.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of prompt.element -->
  <xs:attributeGroup name="prompt.attlist">
    <xs:attributeGroup ref="moreinfo.attrib"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="prompt.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of prompt.attlist -->
  <!-- end of prompt.module -->
  <xs:attributeGroup name="property.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A unit of data associated with some part of a computer system. -->
  <xs:element name="property" substitutionGroup="tech.char.class">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="cptr.char.mix"/>
      <xs:attributeGroup ref="property.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of property.element -->
  <xs:attributeGroup name="property.attlist">
    <xs:attributeGroup ref="moreinfo.attrib"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="property.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of property.attlist -->
  <!-- end of property.module -->
  <xs:attributeGroup name="replaceable.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:Content that may or must be replaced by the user. -->
  <xs:element name="replaceable" substitutionGroup="tech.char.class">
    <xs:complexType mixed="true">
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element ref="link.char.class"/>
        <xs:element ref="optional"/>
        <xs:group ref="base.char.class"/>
        <xs:group ref="other.char.class"/>
        <xs:element ref="inlinegraphic"/>
        <xs:element ref="inlinemediaobject"/>
        <xs:element ref="co"/>
      </xs:choice>
      <xs:attributeGroup ref="replaceable.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of replaceable.element -->
  <!--
    Class: Type of information the element represents; no
    default
  -->
  <xs:attributeGroup name="replaceable.attlist">
    <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:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="replaceable.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of replaceable.attlist -->
  <!-- end of replaceable.module -->
  <xs:attributeGroup name="returnvalue.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:The value returned by a function. -->
  <xs:element name="returnvalue" substitutionGroup="tech.char.class">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="smallcptr.char.mix"/>
      <xs:attributeGroup ref="returnvalue.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of returnvalue.element -->
  <xs:attributeGroup name="returnvalue.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="returnvalue.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of returnvalue.attlist -->
  <!-- end of returnvalue.module -->
  <xs:attributeGroup name="sgmltag.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A component of SGML markup. -->
  <xs:element name="sgmltag" substitutionGroup="tech.char.class">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="smallcptr.char.mix"/>
      <xs:attributeGroup ref="sgmltag.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of sgmltag.element -->
  <!-- Class: Type of SGML construct the element names; no default -->
  <xs:attributeGroup name="sgmltag.attlist">
    <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="endtag"/>
          <xs:enumeration value="emptytag"/>
          <xs:enumeration value="genentity"/>
          <xs:enumeration value="numcharref"/>
          <xs:enumeration value="paramentity"/>
          <xs:enumeration value="pi"/>
          <xs:enumeration value="xmlpi"/>
          <xs:enumeration value="starttag"/>
          <xs:enumeration value="sgmlcomment"/>
          <xs:enumeration value="prefix"/>
          <xs:enumeration value="namespace"/>
          <xs:enumeration value="localname"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="namespace"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="sgmltag.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of sgmltag.attlist -->
  <!-- end of sgmltag.module -->
  <xs:attributeGroup name="structfield.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A field in a structure (in the programming language sense). -->
  <xs:element name="structfield" substitutionGroup="tech.char.class">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="smallcptr.char.mix"/>
      <xs:attributeGroup ref="structfield.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of structfield.element -->
  <xs:attributeGroup name="structfield.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="structfield.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of structfield.attlist -->
  <!-- end of structfield.module -->
  <xs:attributeGroup name="structname.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:The name of a structure (in the programming language sense). -->
  <xs:element name="structname" substitutionGroup="tech.char.class">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="smallcptr.char.mix"/>
      <xs:attributeGroup ref="structname.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of structname.element -->
  <xs:attributeGroup name="structname.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="structname.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of structname.attlist -->
  <!-- end of structname.module -->
  <xs:attributeGroup name="symbol.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A name that is replaced by a value before processing. -->
  <xs:element name="symbol" substitutionGroup="tech.char.class">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="smallcptr.char.mix"/>
      <xs:attributeGroup ref="symbol.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of symbol.element -->
  <!-- Class: Type of symbol; no default -->
  <xs:attributeGroup name="symbol.attlist">
    <xs:attribute name="class">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="limit"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="symbol.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of symbol.attlist -->
  <!-- end of symbol.module -->
  <xs:attributeGroup name="systemitem.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A system-related item or term. -->
  <xs:element name="systemitem" substitutionGroup="tech.char.class">
    <xs:complexType mixed="true">
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:group ref="cptr.char.mix"/>
        <xs:element ref="acronym"/>
        <xs:element ref="co"/>
      </xs:choice>
      <xs:attributeGroup ref="systemitem.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of systemitem.element -->
  <!-- Class: Type of system item the element names; no default -->
  <xs:attributeGroup name="systemitem.attlist">
    <xs:attribute name="class">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="constant"/>
          <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="protocol"/>
          <xs:enumeration value="resource"/>
          <xs:enumeration value="systemname"/>
          <xs:enumeration value="username"/>
          <xs:enumeration value="process"/>
          <xs:enumeration value="server"/>
          <xs:enumeration value="service"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attributeGroup ref="moreinfo.attrib"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="systemitem.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of systemitem.attlist -->
  <!-- end of systemitem.module -->
  <xs:attributeGroup name="uri.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A Uniform Resource Identifier. -->
  <xs:element name="uri" substitutionGroup="tech.char.class">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="smallcptr.char.mix"/>
      <xs:attributeGroup ref="uri.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of uri.element -->
  <!-- Type: Type of URI; no default -->
  <xs:attributeGroup name="uri.attlist">
    <xs:attribute name="type"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="uri.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of uri.attlist -->
  <!-- end of uri.module -->
  <xs:attributeGroup name="token.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A unit of information. -->
  <xs:element name="token" substitutionGroup="tech.char.class">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="smallcptr.char.mix"/>
      <xs:attributeGroup ref="token.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of token.element -->
  <xs:attributeGroup name="token.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="token.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of token.attlist -->
  <!-- end of token.module -->
  <xs:attributeGroup name="type.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:The classification of a value. -->
  <xs:element name="type" substitutionGroup="tech.char.class">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="smallcptr.char.mix"/>
      <xs:attributeGroup ref="type.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of type.element -->
  <xs:attributeGroup name="type.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="type.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of type.attlist -->
  <!-- end of type.module -->
  <xs:attributeGroup name="userinput.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:Data entered by the user. -->
  <xs:element name="userinput" substitutionGroup="tech.char.class">
    <xs:complexType mixed="true">
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:group ref="cptr.char.mix"/>
        <xs:element ref="co"/>
      </xs:choice>
      <xs:attributeGroup ref="userinput.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of userinput.element -->
  <xs:attributeGroup name="userinput.attlist">
    <xs:attributeGroup ref="moreinfo.attrib"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="userinput.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of userinput.attlist -->
  <!-- end of userinput.module -->
  <xs:attributeGroup name="termdef.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:An inline definition of a term. -->
  <xs:element name="termdef" substitutionGroup="gen.char.class">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="para.char.mix"/>
      <xs:attributeGroup ref="termdef.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of termdef.element -->
  <xs:attributeGroup name="termdef.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="termdef.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of termdef.attlist -->
  <!-- end of termdef.module -->
  <!-- General words and phrases ............................................ -->
  <xs:attributeGroup name="abbrev.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:An abbreviation, especially one followed by a period. -->
  <xs:element name="abbrev" substitutionGroup="gen.char.class">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="word.char.mix"/>
      <xs:attributeGroup ref="abbrev.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of abbrev.element -->
  <xs:attributeGroup name="abbrev.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="abbrev.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of abbrev.attlist -->
  <!-- end of abbrev.module -->
  <xs:attributeGroup name="acronym.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:An often pronounceable word made from the initial (or selected) letters of a name or phrase. -->
  <xs:element name="acronym" substitutionGroup="gen.char.class">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="word.char.mix"/>
      <xs:attributeGroup ref="acronym.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of acronym.element -->
  <xs:attributeGroup name="acronym.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="acronym.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of acronym.attlist -->
  <!-- end of acronym.module -->
  <xs:attributeGroup name="citation.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:An inline bibliographic reference to another published work. -->
  <xs:element name="citation" substitutionGroup="gen.char.class">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="para.char.mix"/>
      <xs:attributeGroup ref="citation.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of citation.element -->
  <xs:attributeGroup name="citation.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="citation.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of citation.attlist -->
  <!-- end of citation.module -->
  <xs:attributeGroup name="citerefentry.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A citation to a reference page. -->
  <xs:element name="citerefentry" substitutionGroup="gen.char.class">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="refentrytitle"/>
        <xs:element minOccurs="0" ref="manvolnum"/>
      </xs:sequence>
      <xs:attributeGroup ref="citerefentry.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of citerefentry.element -->
  <xs:attributeGroup name="citerefentry.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="citerefentry.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of citerefentry.attlist -->
  <!-- end of citerefentry.module -->
  <xs:attributeGroup name="refentrytitle.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:The title of a reference page. -->
  <xs:element name="refentrytitle">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="para.char.mix"/>
      <xs:attributeGroup ref="refentrytitle.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of refentrytitle.element -->
  <xs:attributeGroup name="refentrytitle.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="refentrytitle.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of refentrytitle.attlist -->
  <!-- end of refentrytitle.module -->
  <xs:attributeGroup name="namvolnum.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A reference volume number. -->
  <xs:element name="manvolnum">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="word.char.mix"/>
      <xs:attributeGroup ref="manvolnum.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of manvolnum.element -->
  <xs:attributeGroup name="manvolnum.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="namvolnum.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of manvolnum.attlist -->
  <!-- end of manvolnum.module -->
  <xs:attributeGroup name="citetitle.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:The title of a cited work. -->
  <xs:element name="citetitle" substitutionGroup="gen.char.class">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="para.char.mix"/>
      <xs:attributeGroup ref="citetitle.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of citetitle.element -->
  <!-- Pubwork: Genre of published work cited; no default -->
  <xs:attributeGroup name="citetitle.attlist">
    <xs:attribute name="pubwork">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="article"/>
          <xs:enumeration value="book"/>
          <xs:enumeration value="chapter"/>
          <xs:enumeration value="part"/>
          <xs:enumeration value="refentry"/>
          <xs:enumeration value="section"/>
          <xs:enumeration value="journal"/>
          <xs:enumeration value="series"/>
          <xs:enumeration value="set"/>
          <xs:enumeration value="manuscript"/>
          <xs:enumeration value="cdrom"/>
          <xs:enumeration value="dvd"/>
          <xs:enumeration value="wiki"/>
          <xs:enumeration value="gopher"/>
          <xs:enumeration value="bbs"/>
          <xs:enumeration value="emailmessage"/>
          <xs:enumeration value="webpage"/>
          <xs:enumeration value="newsposting"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="citetitle.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of citetitle.attlist -->
  <!-- end of citetitle.module -->
  <xs:attributeGroup name="emphasis.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:Emphasized text. -->
  <xs:element name="emphasis" substitutionGroup="gen.char.class">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="para.char.mix"/>
      <xs:attributeGroup ref="emphasis.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of emphasis.element -->
  <xs:attributeGroup name="emphasis.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="emphasis.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of emphasis.attlist -->
  <!-- end of emphasis.module -->
  <xs:attributeGroup name="foreignphrase.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A word or phrase in a language other than the primary language of the document. -->
  <xs:element name="foreignphrase" substitutionGroup="gen.char.class">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="para.char.mix"/>
      <xs:attributeGroup ref="foreignphrase.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of foreignphrase.element -->
  <xs:attributeGroup name="foreignphrase.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="foreignphrase.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of foreignphrase.attlist -->
  <!-- end of foreignphrase.module -->
  <xs:attributeGroup name="glossterm.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A glossary term. -->
  <xs:element name="glossterm" substitutionGroup="gen.char.class">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="para.char.mix"/>
      <xs:attributeGroup ref="glossterm.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of glossterm.element -->
  <!-- to GlossEntry if Glossterm used in text -->
  <!--
    BaseForm: Provides the form of GlossTerm to be used
    for indexing
  -->
  <xs:attributeGroup name="glossterm.attlist">
    <xs:attribute name="baseform"/>
    <xs:attributeGroup ref="linkend.attrib"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="glossterm.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of glossterm.attlist -->
  <!-- end of glossterm.module -->
  <xs:attributeGroup name="firstterm.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:The first occurrence of a term. -->
  <xs:element name="firstterm" substitutionGroup="gen.char.class">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="para.char.mix"/>
      <xs:attributeGroup ref="firstterm.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of firstterm.element -->
  <!-- to GlossEntry or other explanation -->
  <xs:attributeGroup name="firstterm.attlist">
    <xs:attribute name="baseform"/>
    <xs:attributeGroup ref="linkend.attrib"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="firstterm.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of firstterm.attlist -->
  <!-- end of firstterm.module -->
  <xs:attributeGroup name="phrase.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A span of text. -->
  <xs:element name="phrase" substitutionGroup="gen.char.class">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="para.char.mix"/>
      <xs:attributeGroup ref="phrase.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of phrase.element -->
  <xs:attributeGroup name="phrase.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="phrase.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of phrase.attlist -->
  <!-- end of phrase.module -->
  <xs:attributeGroup name="quote.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:An inline quotation. -->
  <xs:element name="quote" substitutionGroup="gen.char.class">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="para.char.mix"/>
      <xs:attributeGroup ref="quote.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of quote.element -->
  <xs:attributeGroup name="quote.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="quote.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of quote.attlist -->
  <!-- end of quote.module -->
  <xs:attributeGroup name="ssscript.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A subscript (as in H{^2}O, the molecular formula for water). -->
  <xs:element name="subscript">
    <xs:complexType mixed="true">
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element ref="link.char.class"/>
        <xs:element ref="emphasis"/>
        <xs:element ref="replaceable"/>
        <xs:element ref="symbol"/>
        <xs:element ref="inlinegraphic"/>
        <xs:element ref="inlinemediaobject"/>
        <xs:group ref="base.char.class"/>
        <xs:group ref="other.char.class"/>
      </xs:choice>
      <xs:attributeGroup ref="subscript.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of subscript.element -->
  <xs:attributeGroup name="subscript.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="ssscript.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of subscript.attlist -->
  <!-- doc:A superscript (as in x^2, the mathematical notation for x multiplied by itself). -->
  <xs:element name="superscript">
    <xs:complexType mixed="true">
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element ref="link.char.class"/>
        <xs:element ref="emphasis"/>
        <xs:element ref="replaceable"/>
        <xs:element ref="symbol"/>
        <xs:element ref="inlinegraphic"/>
        <xs:element ref="inlinemediaobject"/>
        <xs:group ref="base.char.class"/>
        <xs:group ref="other.char.class"/>
      </xs:choice>
      <xs:attributeGroup ref="superscript.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of superscript.element -->
  <xs:attributeGroup name="superscript.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="ssscript.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of superscript.attlist -->
  <!-- end of ssscript.module -->
  <xs:attributeGroup name="trademark.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A trademark. -->
  <xs:element name="trademark" substitutionGroup="gen.char.class">
    <xs:complexType mixed="true">
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element ref="link.char.class"/>
        <xs:element ref="tech.char.class"/>
        <xs:group ref="base.char.class"/>
        <xs:group ref="other.char.class"/>
        <xs:element ref="inlinegraphic"/>
        <xs:element ref="inlinemediaobject"/>
        <xs:element ref="emphasis"/>
      </xs:choice>
      <xs:attributeGroup ref="trademark.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of trademark.element -->
  <!-- Class: More precisely identifies the item the element names -->
  <xs:attributeGroup name="trademark.attlist">
    <xs:attribute name="class" default="trade">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="service"/>
          <xs:enumeration value="trade"/>
          <xs:enumeration value="registered"/>
          <xs:enumeration value="copyright"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="trademark.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of trademark.attlist -->
  <!-- end of trademark.module -->
  <xs:attributeGroup name="wordasword.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A word meant specifically as a word and not representing anything else. -->
  <xs:element name="wordasword" substitutionGroup="gen.char.class">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="word.char.mix"/>
      <xs:attributeGroup ref="wordasword.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of wordasword.element -->
  <xs:attributeGroup name="wordasword.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="wordasword.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of wordasword.attlist -->
  <!-- end of wordasword.module -->
  <!-- Links and cross-references ........................................... -->
  <xs:attributeGroup name="link.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A hypertext link. -->
  <xs:element name="link" substitutionGroup="link.char.class">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="para.char.mix"/>
      <xs:attributeGroup ref="link.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of link.element -->
  <!--
    Endterm: ID of element containing text that is to be
    fetched from elsewhere in the document to appear as
    the content of this element
  -->
  <!-- to linked-to object -->
  <!-- Type: Freely assignable parameter -->
  <xs:attributeGroup name="link.attlist">
    <xs:attribute name="endterm" type="xs:IDREF"/>
    <xs:attribute name="xrefstyle"/>
    <xs:attribute name="type"/>
    <xs:attributeGroup ref="linkendreq.attrib"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="link.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of link.attlist -->
  <!-- end of link.module -->
  <xs:attributeGroup name="olink.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A link that addresses its target indirectly, through an entity. -->
  <xs:element name="olink" substitutionGroup="link.char.class">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="para.char.mix"/>
      <xs:attributeGroup ref="olink.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of olink.element -->
  <!-- TargetDocEnt: Name of an entity to be the target of the link -->
  <!--
    LinkMode: ID of a ModeSpec containing instructions for
    operating on the entity named by TargetDocEnt
  -->
  <!-- LocalInfo: Information that may be passed to ModeSpec -->
  <!-- Type: Freely assignable parameter -->
  <xs:attributeGroup name="olink.attlist">
    <xs:attribute name="targetdocent" type="xs:ENTITY"/>
    <xs:attribute name="linkmode" type="xs:IDREF"/>
    <xs:attribute name="localinfo"/>
    <xs:attribute name="type"/>
    <xs:attribute name="targetdoc"/>
    <xs:attribute name="targetptr"/>
    <xs:attribute name="xrefstyle"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="olink.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of olink.attlist -->
  <!-- end of olink.module -->
  <xs:attributeGroup name="ulink.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A link that addresses its target by means of a URL (Uniform Resource Locator). -->
  <xs:element name="ulink" substitutionGroup="link.char.class">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="para.char.mix"/>
      <xs:attributeGroup ref="ulink.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of ulink.element -->
  <!-- URL: uniform resource locator; the target of the ULink -->
  <!-- Type: Freely assignable parameter -->
  <xs:attributeGroup name="ulink.attlist">
    <xs:attribute name="url" use="required"/>
    <xs:attribute name="type"/>
    <xs:attribute name="xrefstyle"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="ulink.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of ulink.attlist -->
  <!-- end of ulink.module -->
  <xs:attributeGroup name="footnoteref.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A cross reference to a footnote (a footnote mark). -->
  <xs:element name="footnoteref" substitutionGroup="xref.char.class">
    <xs:complexType>
      <xs:attributeGroup ref="footnoteref.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of footnoteref.element -->
  <!-- to footnote content supplied elsewhere -->
  <xs:attributeGroup name="footnoteref.attlist">
    <xs:attributeGroup ref="linkendreq.attrib"/>
    <xs:attributeGroup ref="label.attrib"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="footnoteref.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of footnoteref.attlist -->
  <!-- end of footnoteref.module -->
  <xs:attributeGroup name="xref.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A cross reference to another part of the document. -->
  <xs:element name="xref" substitutionGroup="xref.char.class">
    <xs:complexType>
      <xs:attributeGroup ref="xref.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of xref.element -->
  <!--
    Endterm: ID of element containing text that is to be
    fetched from elsewhere in the document to appear as
    the content of this element
  -->
  <!-- to linked-to object -->
  <xs:attributeGroup name="xref.attlist">
    <xs:attribute name="endterm" type="xs:IDREF"/>
    <xs:attribute name="xrefstyle"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="linkendreq.attrib"/>
    <xs:attributeGroup ref="xref.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of xref.attlist -->
  <!-- end of xref.module -->
  <xs:attributeGroup name="biblioref.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A cross reference to a bibliographic entry. -->
  <xs:element name="biblioref" substitutionGroup="xref.char.class">
    <xs:complexType>
      <xs:attributeGroup ref="biblioref.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of biblioref.element -->
  <xs:attributeGroup name="biblioref.attlist">
    <xs:attribute name="endterm" type="xs:IDREF"/>
    <xs:attribute name="xrefstyle"/>
    <xs:attribute name="units"/>
    <xs:attribute name="begin"/>
    <xs:attribute name="end"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="linkendreq.attrib"/>
    <xs:attributeGroup ref="biblioref.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of biblioref.attlist -->
  <!-- end of biblioref.module -->
  <!-- Ubiquitous elements .................................................. -->
  <xs:attributeGroup name="anchor.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A spot in the document. -->
  <xs:element name="anchor">
    <xs:complexType>
      <xs:attributeGroup ref="anchor.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of anchor.element -->
  <!-- required -->
  <!-- replaces Lang -->
  <xs:attributeGroup name="anchor.attlist">
    <xs:attributeGroup ref="idreq.attrib"/>
    <xs:attributeGroup ref="pagenum.attrib"/>
    <xs:attributeGroup ref="remap.attrib"/>
    <xs:attributeGroup ref="xreflabel.attrib"/>
    <xs:attributeGroup ref="revisionflag.attrib"/>
    <xs:attributeGroup ref="effectivity.attrib"/>
    <xs:attributeGroup ref="anchor.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of anchor.attlist -->
  <!-- end of anchor.module -->
  <xs:attributeGroup name="beginpage.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:The location of a page break in a print version of the document. -->
  <xs:element name="beginpage">
    <xs:complexType>
      <xs:attributeGroup ref="beginpage.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of beginpage.element -->
  <!-- PageNum: Number of page that begins at this point -->
  <xs:attributeGroup name="beginpage.attlist">
    <xs:attributeGroup ref="pagenum.attrib"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="beginpage.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of beginpage.attlist -->
  <!-- end of beginpage.module -->
  <!--
    IndexTerms appear in the text flow for generating or linking an
    index.
  -->
  <xs:attributeGroup name="indexterm.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A wrapper for terms to be indexed. -->
  <xs:element name="indexterm" substitutionGroup="ndxterm.class"/>
  <!-- end of indexterm.element -->
  <!--
    Scope: Indicates which generated indices the IndexTerm
    should appear in: Global (whole document set), Local (this
    document only), or All (both)
  -->
  <!--
    Significance: Whether this IndexTerm is the most pertinent
    of its series (Preferred) or not (Normal, the default)
  -->
  <!--
    Class: Indicates type of IndexTerm; default is Singular,
    or EndOfRange if StartRef is supplied; StartOfRange value
    must be supplied explicitly on starts of ranges
  -->
  <!--
    StartRef: ID of the IndexTerm that starts the indexing
    range ended by this IndexTerm
  -->
  <!--
    Zone: IDs of the elements to which the IndexTerm applies,
    and indicates that the IndexTerm applies to those entire
    elements rather than the point at which the IndexTerm
    occurs
  -->
  <xs:attributeGroup name="indexterm.attlist">
    <xs:attributeGroup ref="pagenum.attrib"/>
    <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:attribute name="significance" default="normal">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="preferred"/>
          <xs:enumeration value="normal"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <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:attribute name="zone" type="xs:IDREFS"/>
    <xs:attribute name="type"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="indexterm.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of indexterm.attlist -->
  <!-- end of indexterm.module -->
  <xs:attributeGroup name="primsecter.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:The primary word or phrase under which an index term should be sorted. -->
  <xs:element name="primary">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="ndxterm.char.mix"/>
      <xs:attributeGroup ref="primary.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of primary.element -->
  <!--
    SortAs: Alternate sort string for index sorting, e.g.,
    "fourteen" for an element containing "14"
  -->
  <xs:attributeGroup name="primary.attlist">
    <xs:attribute name="sortas"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="primsecter.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of primary.attlist -->
  <!-- doc:A secondary word or phrase in an index term. -->
  <xs:element name="secondary">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="ndxterm.char.mix"/>
      <xs:attributeGroup ref="secondary.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of secondary.element -->
  <!--
    SortAs: Alternate sort string for index sorting, e.g.,
    "fourteen" for an element containing "14"
  -->
  <xs:attributeGroup name="secondary.attlist">
    <xs:attribute name="sortas"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="primsecter.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of secondary.attlist -->
  <!-- doc:A tertiary word or phrase in an index term. -->
  <xs:element name="tertiary">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="ndxterm.char.mix"/>
      <xs:attributeGroup ref="tertiary.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of tertiary.element -->
  <!--
    SortAs: Alternate sort string for index sorting, e.g.,
    "fourteen" for an element containing "14"
  -->
  <xs:attributeGroup name="tertiary.attlist">
    <xs:attribute name="sortas"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="primsecter.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of tertiary.attlist -->
  <!-- end of primsecter.module -->
  <xs:attributeGroup name="seeseealso.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:Part of an index term directing the reader instead to another entry in the index. -->
  <xs:element name="see">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="ndxterm.char.mix"/>
      <xs:attributeGroup ref="see.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of see.element -->
  <xs:attributeGroup name="see.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="seeseealso.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of see.attlist -->
  <!-- doc:Part of an index term directing the reader also to another entry in the index. -->
  <xs:element name="seealso">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="ndxterm.char.mix"/>
      <xs:attributeGroup ref="seealso.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of seealso.element -->
  <xs:attributeGroup name="seealso.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="seeseealso.role.attrib"/>
  </xs:attributeGroup>
</xs:schema>
<!-- end of seealso.attlist -->
<!-- end of seeseealso.module -->
<!-- end of indexterm.content.module -->
<!-- End of SCons DocBook V4.5-Based extension V1.0 XML information pool module ... -->
<!-- .............................................................................. -->
