Blob Blame History Raw
<?xml version="1.0" encoding="UTF-8"?>
<!-- ...................................................................... -->
<!-- DocBook XML information pool module V4.3CR3 ............................. -->
<!-- File dbpoolx.mod ..................................................... -->
<!--
  Copyright 1992-2002 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,v 1.85 2004/01/21 18:54:21 nwalsh Exp $
  
  Permission to use, copy, modify and distribute the DocBook XML DTD
  and its accompanying documentation for any purpose and without fee
  is hereby granted in perpetuity, provided that the above copyright
  notice and this paragraph appear in all copies.  The copyright
  holders make no representation about the suitability of the DTD for
  any purpose.  It is provided "as is" without expressed or implied
  warranty.
  
  If you modify the DocBook XML DTD in any way, except for declaring and
  referencing additional sets of general entities and declaring
  additional notations, label your DTD as a variant of DocBook.  See
  the maintenance documentation for more information.
  
  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/.
-->
<!-- ...................................................................... -->
<!--
  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.3CR3//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.
-->
<!-- ...................................................................... -->
<!-- General-purpose semantics entities ................................... -->
<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"/>
  <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: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: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.
  -->
  <!-- The DocBook TC may produce an official forms module for DocBook. -->
  <!-- This PE provides the hook by which it can be inserted into the DTD. -->
  <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>
  <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>
  <!-- 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>
  <!--
    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: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>
  <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>
  <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>
  <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>
  <xs:attributeGroup name="biblioentry.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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="admon.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <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 -->
  <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 -->
  <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 -->
  <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 -->
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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: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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <xs:element name="imageobjectco">
    <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: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:choice>
    </xs:sequence>
  </xs:complexType>
  <xs:attributeGroup name="equation.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <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>
  <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>
  <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>
  <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 -->
  <!-- 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 -->
  <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>
  <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="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 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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <xs:element name="ooclass" substitutionGroup="tech.char.class">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="modifier"/>
        <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>
  <xs:element name="oointerface" substitutionGroup="tech.char.class">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="modifier"/>
        <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>
  <xs:element name="ooexception" substitutionGroup="tech.char.class">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="modifier"/>
        <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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 ......................... -->
  <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>
  <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>
  <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>
  <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>
  <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>
  <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="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>
  <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>
  <xs:element name="citebiblioid">
    <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <xs:element name="revision">
    <xs:complexType>
      <xs:sequence>
        <xs:element 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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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 -->
  <!--
    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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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: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>
  <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: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>
  <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: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>
  <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: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>
  <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: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>
  <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: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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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="event"/>
          <xs:enumeration value="eventhandler"/>
          <xs:enumeration value="domainname"/>
          <xs:enumeration value="fqdomainname"/>
          <xs:enumeration value="ipaddress"/>
          <xs:enumeration value="netmask"/>
          <xs:enumeration value="etheraddress"/>
          <xs:enumeration value="groupname"/>
          <xs:enumeration value="library"/>
          <xs:enumeration value="macro"/>
          <xs:enumeration value="osname"/>
          <xs:enumeration value="filesystem"/>
          <xs:enumeration value="resource"/>
          <xs:enumeration value="systemname"/>
          <xs:enumeration value="username"/>
          <xs:enumeration value="newsgroup"/>
          <xs:enumeration value="process"/>
          <xs:enumeration value="service"/>
          <xs:enumeration value="server"/>
          <xs:enumeration value="daemon"/>
        </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>
  <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>
  <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>
  <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>
  <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 -->
  <!-- General words and phrases ............................................ -->
  <xs:attributeGroup name="abbrev.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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 -->
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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>
  <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 -->
  <!-- Ubiquitous elements .................................................. -->
  <xs:attributeGroup name="anchor.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <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>
  <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>
  <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>
  <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 -->
  <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 -->
  <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>
  <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 -->
  <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 DocBook XML information pool module V4.3CR3 ...................... -->
<!-- ...................................................................... -->