<?xml version="1.0" encoding="UTF-8"?>
<!-- ...................................................................... -->
<!-- DocBook XML information pool module V4.5CR2 ............................. -->
<!-- File dbpoolx.mod ..................................................... -->
<!--
  Copyright 1992-2004 HaL Computer Systems, Inc.,
  O'Reilly & Associates, Inc., ArborText, Inc., Fujitsu Software
  Corporation, Norman Walsh, Sun Microsystems, Inc., and the
  Organization for the Advancement of Structured Information
  Standards (OASIS).
  
  $Id: dbpoolx.mod,v 1.119 2006/03/07 13:07:41 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.5CR2//EN"
  "dbpoolx.mod">
  %dbpool;
  
  See the documentation for detailed information on the parameter
  entity and module scheme used in DocBook, customizing DocBook and
  planning for interchange, and changes made since the last release
  of DocBook.
-->
<!-- ...................................................................... -->
<!-- Forms entities ....................................................... -->
<!-- These PEs provide the hook by which the forms module can be inserted -->
<!-- into the DTD. -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
  <xs:include schemaLocation="htmltblx.xsd"/>
  <xs:include schemaLocation="calstblx.xsd"/>
  <xs:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="xml.xsd"/>
  <!-- ...................................................................... -->
  <!-- General-purpose semantics entities ................................... -->
  <xs:simpleType name="yesorno.attvals">
    <xs:restriction base="xs:string"/>
  </xs:simpleType>
  <!-- ...................................................................... -->
  <!-- Entities for module inclusions ....................................... -->
  <!-- ...................................................................... -->
  <!-- Entities for element classes and mixtures ............................ -->
  <!-- "Ubiquitous" classes: ndxterm.class and beginpage -->
  <xs:element name="ndxterm.class" abstract="true">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="primary"/>
        <xs:choice minOccurs="0">
          <xs:sequence>
            <xs:element ref="secondary"/>
            <xs:choice minOccurs="0">
              <xs:sequence>
                <xs:element ref="tertiary"/>
                <xs:choice minOccurs="0">
                  <xs:element ref="see"/>
                  <xs:element maxOccurs="unbounded" ref="seealso"/>
                </xs:choice>
              </xs:sequence>
              <xs:element ref="see"/>
              <xs:element maxOccurs="unbounded" ref="seealso"/>
            </xs:choice>
          </xs:sequence>
          <xs:element ref="see"/>
          <xs:element maxOccurs="unbounded" ref="seealso"/>
        </xs:choice>
      </xs:sequence>
      <xs:attributeGroup ref="indexterm.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- Object-level classes ................................................. -->
  <xs:element name="list.class" abstract="true"/>
  <xs:element name="admon.class" abstract="true"/>
  <xs:element name="linespecific.class" abstract="true"/>
  <xs:element name="method.synop.class" abstract="true" substitutionGroup="synop.class"/>
  <xs:element name="synop.class" abstract="true"/>
  <xs:element name="para.class" abstract="true"/>
  <xs:element name="informal.class" abstract="true"/>
  <xs:element name="formal.class" abstract="true"/>
  <!-- The DocBook TC may produce an official EBNF module for DocBook. -->
  <!-- This PE provides the hook by which it can be inserted into the DTD. -->
  <xs:element name="compound.class" abstract="true"/>
  <xs:group name="genobj.class">
    <xs:choice>
      <xs:element ref="anchor"/>
      <xs:element ref="bridgehead"/>
      <xs:element ref="remark"/>
      <xs:element ref="highlights"/>
    </xs:choice>
  </xs:group>
  <xs:group name="descobj.class">
    <xs:choice>
      <xs:element ref="abstract"/>
      <xs:element ref="authorblurb"/>
      <xs:element ref="epigraph"/>
    </xs:choice>
  </xs:group>
  <!-- Character-level classes .............................................. -->
  <xs:element name="xref.char.class" abstract="true"/>
  <xs:element name="gen.char.class" abstract="true"/>
  <xs:element name="link.char.class" abstract="true"/>
  <!-- The DocBook TC may produce an official EBNF module for DocBook. -->
  <!-- This PE provides the hook by which it can be inserted into the DTD. -->
  <xs:element name="tech.char.class" abstract="true"/>
  <xs:group name="base.char.class">
    <xs:sequence>
      <xs:element ref="anchor"/>
    </xs:sequence>
  </xs:group>
  <xs:element name="docinfo.char.class" abstract="true"/>
  <xs:group name="other.char.class">
    <xs:choice>
      <xs:element ref="remark"/>
      <xs:element ref="subscript"/>
      <xs:element ref="superscript"/>
    </xs:choice>
  </xs:group>
  <xs:element name="inlineobj.char.class" abstract="true"/>
  <!-- ...................................................................... -->
  <!-- Entities for content models .......................................... -->
  <xs:group name="formalobject.title.content">
    <xs:sequence>
      <xs:element ref="title"/>
      <xs:element minOccurs="0" ref="titleabbrev"/>
    </xs:sequence>
  </xs:group>
  <!-- Redeclaration placeholder ............................................ -->
  <!--
    For redeclaring entities that are declared after this point while
    retaining their references to the entities that are declared before
    this point
  -->
  <!-- Object-level mixtures ................................................ -->
  <!--
                          list admn line synp para infm form cmpd gen  desc
    Component mixture       X    X    X    X    X    X    X    X    X    X
    Sidebar mixture         X    X    X    X    X    X    X    a    X
    Footnote mixture        X         X    X    X    X
    Example mixture         X         X    X    X    X
    Highlights mixture      X    X              X
    Paragraph mixture       X         X    X         X
    Admonition mixture      X         X    X    X    X    X    b    c
    Figure mixture                    X    X         X
    Table entry mixture     X    X    X         X    d
    Glossary def mixture    X         X    X    X    X         e
    Legal notice mixture    X    X    X         X    f
    
    a. Just Procedure; not Sidebar itself or MsgSet.
    b. No MsgSet.
    c. No Highlights.
    d. Just Graphic; no other informal objects.
    e. No Anchor, BridgeHead, or Highlights.
    f. Just BlockQuote; no other informal objects.
  -->
  <xs:group name="component.mix">
    <xs:choice>
      <xs:element ref="list.class"/>
      <xs:element ref="admon.class"/>
      <xs:element ref="linespecific.class"/>
      <xs:element ref="synop.class"/>
      <xs:element ref="para.class"/>
      <xs:element ref="informal.class"/>
      <xs:element ref="formal.class"/>
      <xs:element ref="compound.class"/>
      <xs:group ref="genobj.class"/>
      <xs:group ref="descobj.class"/>
      <xs:element ref="ndxterm.class"/>
      <xs:element ref="beginpage"/>
    </xs:choice>
  </xs:group>
  <xs:group name="sidebar.mix">
    <xs:choice>
      <xs:element ref="list.class"/>
      <xs:element ref="admon.class"/>
      <xs:element ref="linespecific.class"/>
      <xs:element ref="synop.class"/>
      <xs:element ref="para.class"/>
      <xs:element ref="informal.class"/>
      <xs:element ref="formal.class"/>
      <xs:element ref="procedure"/>
      <xs:group ref="genobj.class"/>
      <xs:element ref="ndxterm.class"/>
      <xs:element ref="beginpage"/>
    </xs:choice>
  </xs:group>
  <xs:group name="qandaset.mix">
    <xs:choice>
      <xs:element ref="list.class"/>
      <xs:element ref="admon.class"/>
      <xs:element ref="linespecific.class"/>
      <xs:element ref="synop.class"/>
      <xs:element ref="para.class"/>
      <xs:element ref="informal.class"/>
      <xs:element ref="formal.class"/>
      <xs:element ref="procedure"/>
      <xs:group ref="genobj.class"/>
      <xs:element ref="ndxterm.class"/>
    </xs:choice>
  </xs:group>
  <xs:group name="revdescription.mix">
    <xs:choice>
      <xs:element ref="list.class"/>
      <xs:element ref="admon.class"/>
      <xs:element ref="linespecific.class"/>
      <xs:element ref="synop.class"/>
      <xs:element ref="para.class"/>
      <xs:element ref="informal.class"/>
      <xs:element ref="formal.class"/>
      <xs:element ref="procedure"/>
      <xs:group ref="genobj.class"/>
      <xs:element ref="ndxterm.class"/>
    </xs:choice>
  </xs:group>
  <xs:group name="footnote.mix">
    <xs:choice>
      <xs:element ref="list.class"/>
      <xs:element ref="linespecific.class"/>
      <xs:element ref="synop.class"/>
      <xs:element ref="para.class"/>
      <xs:element ref="informal.class"/>
    </xs:choice>
  </xs:group>
  <xs:group name="example.mix">
    <xs:choice>
      <xs:element ref="list.class"/>
      <xs:element ref="linespecific.class"/>
      <xs:element ref="synop.class"/>
      <xs:element ref="para.class"/>
      <xs:element ref="informal.class"/>
      <xs:element ref="ndxterm.class"/>
      <xs:element ref="beginpage"/>
      <xs:element ref="procedure"/>
    </xs:choice>
  </xs:group>
  <xs:group name="highlights.mix">
    <xs:choice>
      <xs:element ref="list.class"/>
      <xs:element ref="admon.class"/>
      <xs:element ref="para.class"/>
      <xs:element ref="ndxterm.class"/>
    </xs:choice>
  </xs:group>
  <!--
    %formal.class; is explicitly excluded from many contexts in which
    paragraphs are used
  -->
  <xs:group name="para.mix">
    <xs:choice>
      <xs:element ref="list.class"/>
      <xs:element ref="admon.class"/>
      <xs:element ref="linespecific.class"/>
      <xs:element ref="informal.class"/>
      <xs:element ref="formal.class"/>
    </xs:choice>
  </xs:group>
  <xs:group name="admon.mix">
    <xs:choice>
      <xs:element ref="list.class"/>
      <xs:element ref="linespecific.class"/>
      <xs:element ref="synop.class"/>
      <xs:element ref="para.class"/>
      <xs:element ref="informal.class"/>
      <xs:element ref="formal.class"/>
      <xs:element ref="procedure"/>
      <xs:element ref="sidebar"/>
      <xs:element ref="anchor"/>
      <xs:element ref="bridgehead"/>
      <xs:element ref="remark"/>
      <xs:element ref="ndxterm.class"/>
      <xs:element ref="beginpage"/>
    </xs:choice>
  </xs:group>
  <xs:group name="figure.mix">
    <xs:choice>
      <xs:element ref="linespecific.class"/>
      <xs:element ref="synop.class"/>
      <xs:element ref="informal.class"/>
      <xs:element ref="ndxterm.class"/>
      <xs:element ref="beginpage"/>
    </xs:choice>
  </xs:group>
  <xs:group name="tabentry.mix">
    <xs:choice>
      <xs:element ref="list.class"/>
      <xs:element ref="admon.class"/>
      <xs:element ref="linespecific.class"/>
      <xs:element ref="para.class"/>
      <xs:element ref="graphic"/>
      <xs:element ref="mediaobject"/>
    </xs:choice>
  </xs:group>
  <xs:group name="glossdef.mix">
    <xs:choice>
      <xs:element ref="list.class"/>
      <xs:element ref="linespecific.class"/>
      <xs:element ref="synop.class"/>
      <xs:element ref="para.class"/>
      <xs:element ref="informal.class"/>
      <xs:element ref="formal.class"/>
      <xs:element ref="remark"/>
      <xs:element ref="ndxterm.class"/>
      <xs:element ref="beginpage"/>
    </xs:choice>
  </xs:group>
  <xs:group name="legalnotice.mix">
    <xs:choice>
      <xs:element ref="list.class"/>
      <xs:element ref="admon.class"/>
      <xs:element ref="linespecific.class"/>
      <xs:element ref="para.class"/>
      <xs:element ref="blockquote"/>
      <xs:element ref="ndxterm.class"/>
      <xs:element ref="beginpage"/>
    </xs:choice>
  </xs:group>
  <xs:group name="textobject.mix">
    <xs:choice>
      <xs:element ref="list.class"/>
      <xs:element ref="admon.class"/>
      <xs:element ref="linespecific.class"/>
      <xs:element ref="para.class"/>
      <xs:element ref="blockquote"/>
    </xs:choice>
  </xs:group>
  <xs:element name="mediaobject.mix" abstract="true"/>
  <xs:group name="listpreamble.mix">
    <xs:choice>
      <xs:element ref="admon.class"/>
      <xs:element ref="linespecific.class"/>
      <xs:element ref="synop.class"/>
      <xs:element ref="para.class"/>
      <xs:element ref="informal.class"/>
      <xs:group ref="genobj.class"/>
      <xs:group ref="descobj.class"/>
      <xs:element ref="ndxterm.class"/>
      <xs:element ref="beginpage"/>
    </xs:choice>
  </xs:group>
  <!-- Character-level mixtures ............................................. -->
  <!-- sgml.features -->
  <!-- not [sgml.features[ -->
  <!-- ]] not sgml.features -->
  <!--
                        #PCD xref word link cptr base dnfo othr inob (synop)
    para.char.mix         X    X    X    X    X    X    X    X    X
    title.char.mix        X    X    X    X    X    X    X    X    X
    ndxterm.char.mix      X    X    X    X    X    X    X    X    a
    cptr.char.mix         X              X    X    X         X    a
    smallcptr.char.mix    X                   b                   a
    word.char.mix         X         c    X         X         X    a
    docinfo.char.mix      X         d    X    b              X    a
    
    a. Just InlineGraphic; no InlineEquation.
    b. Just Replaceable; no other computer terms.
    c. Just Emphasis and Trademark; no other word elements.
    d. Just Acronym, Emphasis, and Trademark; no other word elements.
  -->
  <xs:group name="para.char.mix">
    <xs:sequence>
      <xs:choice minOccurs="0">
        <xs:element ref="xref.char.class"/>
        <xs:element ref="gen.char.class"/>
        <xs:element ref="link.char.class"/>
        <xs:element ref="tech.char.class"/>
        <xs:group ref="base.char.class"/>
        <xs:element ref="docinfo.char.class"/>
        <xs:group ref="other.char.class"/>
        <xs:element ref="inlineobj.char.class"/>
        <xs:element ref="synop.class"/>
        <xs:element ref="ndxterm.class"/>
        <xs:element ref="beginpage"/>
      </xs:choice>
    </xs:sequence>
  </xs:group>
  <xs:group name="title.char.mix">
    <xs:sequence>
      <xs:choice minOccurs="0">
        <xs:element ref="xref.char.class"/>
        <xs:element ref="gen.char.class"/>
        <xs:element ref="link.char.class"/>
        <xs:element ref="tech.char.class"/>
        <xs:group ref="base.char.class"/>
        <xs:element ref="docinfo.char.class"/>
        <xs:group ref="other.char.class"/>
        <xs:element ref="inlineobj.char.class"/>
        <xs:element ref="ndxterm.class"/>
      </xs:choice>
    </xs:sequence>
  </xs:group>
  <xs:group name="ndxterm.char.mix">
    <xs:sequence>
      <xs:choice minOccurs="0">
        <xs:element ref="xref.char.class"/>
        <xs:element ref="gen.char.class"/>
        <xs:element ref="link.char.class"/>
        <xs:element ref="tech.char.class"/>
        <xs:group ref="base.char.class"/>
        <xs:element ref="docinfo.char.class"/>
        <xs:group ref="other.char.class"/>
        <xs:element ref="inlinegraphic"/>
        <xs:element ref="inlinemediaobject"/>
      </xs:choice>
    </xs:sequence>
  </xs:group>
  <xs:group name="cptr.char.mix">
    <xs:sequence>
      <xs:choice minOccurs="0">
        <xs:element ref="link.char.class"/>
        <xs:element ref="tech.char.class"/>
        <xs:group ref="base.char.class"/>
        <xs:group ref="other.char.class"/>
        <xs:element ref="inlinegraphic"/>
        <xs:element ref="inlinemediaobject"/>
        <xs:element ref="ndxterm.class"/>
        <xs:element ref="beginpage"/>
      </xs:choice>
    </xs:sequence>
  </xs:group>
  <xs:group name="smallcptr.char.mix">
    <xs:sequence>
      <xs:choice minOccurs="0">
        <xs:element ref="replaceable"/>
        <xs:element ref="inlinegraphic"/>
        <xs:element ref="inlinemediaobject"/>
        <xs:element ref="ndxterm.class"/>
        <xs:element ref="beginpage"/>
      </xs:choice>
    </xs:sequence>
  </xs:group>
  <xs:group name="word.char.mix">
    <xs:sequence>
      <xs:choice minOccurs="0">
        <xs:element ref="acronym"/>
        <xs:element ref="emphasis"/>
        <xs:element ref="trademark"/>
        <xs:element ref="link.char.class"/>
        <xs:group ref="base.char.class"/>
        <xs:group ref="other.char.class"/>
        <xs:element ref="inlinegraphic"/>
        <xs:element ref="inlinemediaobject"/>
        <xs:element ref="ndxterm.class"/>
        <xs:element ref="beginpage"/>
      </xs:choice>
    </xs:sequence>
  </xs:group>
  <xs:group name="docinfo.char.mix">
    <xs:sequence>
      <xs:choice minOccurs="0">
        <xs:element ref="link.char.class"/>
        <xs:element ref="emphasis"/>
        <xs:element ref="trademark"/>
        <xs:element ref="replaceable"/>
        <xs:group ref="other.char.class"/>
        <xs:element ref="inlinegraphic"/>
        <xs:element ref="inlinemediaobject"/>
        <xs:element ref="ndxterm.class"/>
      </xs:choice>
    </xs:sequence>
  </xs:group>
  <!-- ENTITY % bibliocomponent.mix (see Bibliographic section, below) -->
  <!-- ENTITY % person.ident.mix (see Bibliographic section, below) -->
  <!-- ...................................................................... -->
  <!-- Entities for attributes and attribute components ..................... -->
  <!-- Effectivity attributes ............................................... -->
  <!--
    Arch: Computer or chip architecture to which element applies; no
    default
  -->
  <xs:attributeGroup name="arch.attrib">
    <xs:attribute name="arch"/>
  </xs:attributeGroup>
  <!-- Condition: General-purpose effectivity attribute -->
  <xs:attributeGroup name="condition.attrib">
    <xs:attribute name="condition"/>
  </xs:attributeGroup>
  <!-- Conformance: Standards conformance characteristics -->
  <xs:attributeGroup name="conformance.attrib">
    <xs:attribute name="conformance" type="xs:NMTOKENS"/>
  </xs:attributeGroup>
  <!-- OS: Operating system to which element applies; no default -->
  <xs:attributeGroup name="os.attrib">
    <xs:attribute name="os"/>
  </xs:attributeGroup>
  <!-- Revision: Editorial revision to which element belongs; no default -->
  <xs:attributeGroup name="revision.attrib">
    <xs:attribute name="revision"/>
  </xs:attributeGroup>
  <!-- Security: Security classification; no default -->
  <xs:attributeGroup name="security.attrib">
    <xs:attribute name="security"/>
  </xs:attributeGroup>
  <!--
    UserLevel: Level of user experience to which element applies; no
    default
  -->
  <xs:attributeGroup name="userlevel.attrib">
    <xs:attribute name="userlevel"/>
  </xs:attributeGroup>
  <!-- Vendor: Computer vendor to which element applies; no default -->
  <xs:attributeGroup name="vendor.attrib">
    <xs:attribute name="vendor"/>
  </xs:attributeGroup>
  <!-- Wordsize: Computer word size (32 bit, 64 bit, etc.); no default -->
  <xs:attributeGroup name="wordsize.attrib">
    <xs:attribute name="wordsize"/>
  </xs:attributeGroup>
  <xs:attributeGroup name="effectivity.attrib">
    <xs:attributeGroup ref="arch.attrib"/>
    <xs:attributeGroup ref="condition.attrib"/>
    <xs:attributeGroup ref="conformance.attrib"/>
    <xs:attributeGroup ref="os.attrib"/>
    <xs:attributeGroup ref="revision.attrib"/>
    <xs:attributeGroup ref="security.attrib"/>
    <xs:attributeGroup ref="userlevel.attrib"/>
    <xs:attributeGroup ref="vendor.attrib"/>
    <xs:attributeGroup ref="wordsize.attrib"/>
  </xs:attributeGroup>
  <!-- Common attributes .................................................... -->
  <!-- Id: Unique identifier of element; no default -->
  <xs:attributeGroup name="id.attrib">
    <xs:attribute name="id" type="xs:ID"/>
  </xs:attributeGroup>
  <!--
    Id: Unique identifier of element; a value must be supplied; no
    default
  -->
  <xs:attributeGroup name="idreq.attrib">
    <xs:attribute name="id" use="required" type="xs:ID"/>
  </xs:attributeGroup>
  <!--
    Lang: Indicator of language in which element is written, for
    translation, character set management, etc.; no default
  -->
  <xs:attributeGroup name="lang.attrib">
    <xs:attribute name="lang"/>
  </xs:attributeGroup>
  <!-- Remap: Previous role of element before conversion; no default -->
  <xs:attributeGroup name="remap.attrib">
    <xs:attribute name="remap"/>
  </xs:attributeGroup>
  <!-- Role: New role of element in local environment; no default -->
  <xs:attributeGroup name="role.attrib">
    <xs:attribute name="role"/>
  </xs:attributeGroup>
  <!--
    XRefLabel: Alternate labeling string for XRef text generation;
    default is usually title or other appropriate label text already
    contained in element
  -->
  <xs:attributeGroup name="xreflabel.attrib">
    <xs:attribute name="xreflabel"/>
  </xs:attributeGroup>
  <!--
    RevisionFlag: Revision status of element; default is that element
    wasn't revised
  -->
  <xs:attributeGroup name="revisionflag.attrib">
    <xs:attribute name="revisionflag">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="changed"/>
          <xs:enumeration value="added"/>
          <xs:enumeration value="deleted"/>
          <xs:enumeration value="off"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
  </xs:attributeGroup>
  <!-- dir: Bidirectional override -->
  <xs:attributeGroup name="dir.attrib">
    <xs:attribute name="dir">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="ltr"/>
          <xs:enumeration value="rtl"/>
          <xs:enumeration value="lro"/>
          <xs:enumeration value="rlo"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
  </xs:attributeGroup>
  <!-- xml:base: base URI -->
  <xs:attributeGroup name="xml-base.attrib">
    <xs:attribute ref="xml:base"/>
  </xs:attributeGroup>
  <!-- Role is included explicitly on each element -->
  <xs:attributeGroup name="common.attrib">
    <xs:attributeGroup ref="id.attrib"/>
    <xs:attributeGroup ref="lang.attrib"/>
    <xs:attributeGroup ref="remap.attrib"/>
    <xs:attributeGroup ref="xreflabel.attrib"/>
    <xs:attributeGroup ref="revisionflag.attrib"/>
    <xs:attributeGroup ref="effectivity.attrib"/>
    <xs:attributeGroup ref="dir.attrib"/>
    <xs:attributeGroup ref="xml-base.attrib"/>
  </xs:attributeGroup>
  <!-- Role is included explicitly on each element -->
  <xs:attributeGroup name="idreq.common.attrib">
    <xs:attributeGroup ref="idreq.attrib"/>
    <xs:attributeGroup ref="lang.attrib"/>
    <xs:attributeGroup ref="remap.attrib"/>
    <xs:attributeGroup ref="xreflabel.attrib"/>
    <xs:attributeGroup ref="revisionflag.attrib"/>
    <xs:attributeGroup ref="effectivity.attrib"/>
    <xs:attributeGroup ref="dir.attrib"/>
    <xs:attributeGroup ref="xml-base.attrib"/>
  </xs:attributeGroup>
  <!-- Semi-common attributes and other attribute entities .................. -->
  <!--
    EntityRef: Name of an external entity containing the content
    of the graphic
  -->
  <!--
    FileRef: Filename, qualified by a pathname if desired,
    designating the file containing the content of the graphic
  -->
  <!-- Format: Notation of the element content, if any -->
  <!-- SrcCredit: Information about the source of the Graphic -->
  <!-- Width: Same as CALS reprowid (desired width) -->
  <!-- Depth: Same as CALS reprodep (desired depth) -->
  <!--
    Align: Same as CALS hplace with 'none' removed; #IMPLIED means
    application-specific
  -->
  <!-- Scale: Conflation of CALS hscale and vscale -->
  <!-- Scalefit: Same as CALS scalefit -->
  <xs:attributeGroup name="graphics.attrib">
    <xs:attribute name="entityref" type="xs:ENTITY"/>
    <xs:attribute name="fileref"/>
    <xs:attribute name="format" type="notation.class"/>
    <xs:attribute name="srccredit"/>
    <xs:attribute name="width"/>
    <xs:attribute name="contentwidth"/>
    <xs:attribute name="depth"/>
    <xs:attribute name="contentdepth"/>
    <xs:attribute name="align">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="left"/>
          <xs:enumeration value="right"/>
          <xs:enumeration value="center"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="valign">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="top"/>
          <xs:enumeration value="middle"/>
          <xs:enumeration value="bottom"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="scale"/>
    <xs:attribute name="scalefit" type="yesorno.attvals"/>
  </xs:attributeGroup>
  <!--
    Action: Key combination type; default is unspecified if one
    child element, Simul if there is more than one; if value is
    Other, the OtherAction attribute must have a nonempty value
  -->
  <!-- OtherAction: User-defined key combination type -->
  <xs:attributeGroup name="keyaction.attrib">
    <xs:attribute name="action">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="click"/>
          <xs:enumeration value="double-click"/>
          <xs:enumeration value="press"/>
          <xs:enumeration value="seq"/>
          <xs:enumeration value="simul"/>
          <xs:enumeration value="other"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="otheraction"/>
  </xs:attributeGroup>
  <!--
    Label: Identifying number or string; default is usually the
    appropriate number or string autogenerated by a formatter
  -->
  <xs:attributeGroup name="label.attrib">
    <xs:attribute name="label"/>
  </xs:attributeGroup>
  <!-- xml:space: whitespace treatment -->
  <xs:attributeGroup name="xml-space.attrib">
    <xs:attribute ref="xml:space"/>
  </xs:attributeGroup>
  <!--
    Format: whether element is assumed to contain significant white
    space
  -->
  <xs:attributeGroup name="linespecific.attrib">
    <xs:attribute name="format" default="linespecific">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="linespecific"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attributeGroup ref="xml-space.attrib"/>
    <xs:attribute name="linenumbering">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="numbered"/>
          <xs:enumeration value="unnumbered"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="continuation">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="continues"/>
          <xs:enumeration value="restarts"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="startinglinenumber"/>
    <xs:attribute name="language"/>
  </xs:attributeGroup>
  <!-- Linkend: link to related information; no default -->
  <xs:attributeGroup name="linkend.attrib">
    <xs:attribute name="linkend" type="xs:IDREF"/>
  </xs:attributeGroup>
  <!-- Linkend: required link to related information -->
  <xs:attributeGroup name="linkendreq.attrib">
    <xs:attribute name="linkend" use="required" type="xs:IDREF"/>
  </xs:attributeGroup>
  <!--
    Linkends: link to one or more sets of related information; no
    default
  -->
  <xs:attributeGroup name="linkends.attrib">
    <xs:attribute name="linkends" type="xs:IDREFS"/>
  </xs:attributeGroup>
  <xs:attributeGroup name="mark.attrib">
    <xs:attribute name="mark"/>
  </xs:attributeGroup>
  <!-- MoreInfo: whether element's content has an associated RefEntry -->
  <xs:attributeGroup name="moreinfo.attrib">
    <xs:attribute name="moreinfo" default="none">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="refentry"/>
          <xs:enumeration value="none"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
  </xs:attributeGroup>
  <!-- Pagenum: number of page on which element appears; no default -->
  <xs:attributeGroup name="pagenum.attrib">
    <xs:attribute name="pagenum"/>
  </xs:attributeGroup>
  <!--
    Status: Editorial or publication status of the element
    it applies to, such as "in review" or "approved for distribution"
  -->
  <xs:attributeGroup name="status.attrib">
    <xs:attribute name="status"/>
  </xs:attributeGroup>
  <!--
    Width: width of the longest line in the element to which it
    pertains, in number of characters
  -->
  <xs:attributeGroup name="width.attrib">
    <xs:attribute name="width"/>
  </xs:attributeGroup>
  <!-- ...................................................................... -->
  <!-- Title elements ....................................................... -->
  <xs:attributeGroup name="title.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:The text of the title of a section of a document or of a formal block-level element. -->
  <xs:element name="title">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="title.char.mix"/>
      <xs:attributeGroup ref="title.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of title.element -->
  <xs:attributeGroup name="title.attlist">
    <xs:attributeGroup ref="pagenum.attrib"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="title.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of title.attlist -->
  <!-- end of title.module -->
  <xs:attributeGroup name="titleabbrev.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:The abbreviation of a Title. -->
  <xs:element name="titleabbrev">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="title.char.mix"/>
      <xs:attributeGroup ref="titleabbrev.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of titleabbrev.element -->
  <xs:attributeGroup name="titleabbrev.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="titleabbrev.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of titleabbrev.attlist -->
  <!-- end of titleabbrev.module -->
  <xs:attributeGroup name="subtitle.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:The subtitle of a document. -->
  <xs:element name="subtitle">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="title.char.mix"/>
      <xs:attributeGroup ref="subtitle.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of subtitle.element -->
  <xs:attributeGroup name="subtitle.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="subtitle.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of subtitle.attlist -->
  <!-- end of subtitle.module -->
  <!-- ...................................................................... -->
  <!-- Bibliographic entities and elements .................................. -->
  <!--
    The bibliographic elements are typically used in the document
    hierarchy. They do not appear in content models of information
    pool elements.  See also the document information elements,
    below.
  -->
  <xs:group name="person.ident.mix">
    <xs:choice>
      <xs:element ref="honorific"/>
      <xs:element ref="firstname"/>
      <xs:element ref="surname"/>
      <xs:element ref="lineage"/>
      <xs:element ref="othername"/>
      <xs:element ref="affiliation"/>
      <xs:element ref="authorblurb"/>
      <xs:element ref="contrib"/>
    </xs:choice>
  </xs:group>
  <xs:group name="bibliocomponent.mix">
    <xs:choice>
      <xs:element ref="abbrev"/>
      <xs:element ref="abstract"/>
      <xs:element ref="address"/>
      <xs:element ref="artpagenums"/>
      <xs:element ref="author"/>
      <xs:element ref="authorgroup"/>
      <xs:element ref="authorinitials"/>
      <xs:element ref="bibliomisc"/>
      <xs:element ref="biblioset"/>
      <xs:element ref="collab"/>
      <xs:element ref="confgroup"/>
      <xs:element ref="contractnum"/>
      <xs:element ref="contractsponsor"/>
      <xs:element ref="copyright"/>
      <xs:element ref="corpauthor"/>
      <xs:element ref="corpname"/>
      <xs:element ref="corpcredit"/>
      <xs:element ref="date"/>
      <xs:element ref="edition"/>
      <xs:element ref="editor"/>
      <xs:element ref="invpartnumber"/>
      <xs:element ref="isbn"/>
      <xs:element ref="issn"/>
      <xs:element ref="issuenum"/>
      <xs:element ref="orgname"/>
      <xs:element ref="biblioid"/>
      <xs:element ref="citebiblioid"/>
      <xs:element ref="bibliosource"/>
      <xs:element ref="bibliorelation"/>
      <xs:element ref="bibliocoverage"/>
      <xs:element ref="othercredit"/>
      <xs:element ref="pagenums"/>
      <xs:element ref="printhistory"/>
      <xs:element ref="productname"/>
      <xs:element ref="productnumber"/>
      <xs:element ref="pubdate"/>
      <xs:element ref="publisher"/>
      <xs:element ref="publishername"/>
      <xs:element ref="pubsnumber"/>
      <xs:element ref="releaseinfo"/>
      <xs:element ref="revhistory"/>
      <xs:element ref="seriesvolnums"/>
      <xs:element ref="subtitle"/>
      <xs:element ref="title"/>
      <xs:element ref="titleabbrev"/>
      <xs:element ref="volumenum"/>
      <xs:element ref="citetitle"/>
      <xs:element ref="personname"/>
      <xs:group ref="person.ident.mix"/>
      <xs:element ref="ndxterm.class"/>
    </xs:choice>
  </xs:group>
  <!-- I don't think this is well placed, but it needs to be here because of -->
  <!-- the reference to bibliocomponent.mix -->
  <xs:group name="info.class">
    <xs:choice>
      <xs:element ref="graphic"/>
      <xs:element ref="mediaobject"/>
      <xs:element ref="legalnotice"/>
      <xs:element ref="modespec"/>
      <xs:element ref="subjectset"/>
      <xs:element ref="keywordset"/>
      <xs:element ref="itermset"/>
      <xs:group ref="bibliocomponent.mix"/>
    </xs:choice>
  </xs:group>
  <!-- BiblioList ........................ -->
  <xs:attributeGroup name="bibliolist.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A wrapper for a set of bibliography entries. -->
  <xs:element name="bibliolist" substitutionGroup="list.class">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="blockinfo"/>
        <xs:group minOccurs="0" ref="formalobject.title.content"/>
        <xs:choice maxOccurs="unbounded">
          <xs:element ref="biblioentry"/>
          <xs:element ref="bibliomixed"/>
        </xs:choice>
      </xs:sequence>
      <xs:attributeGroup ref="bibliolist.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of bibliolist.element -->
  <xs:attributeGroup name="bibliolist.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="bibliolist.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of bibliolist.attlist -->
  <!-- end of bibliolist.module -->
  <xs:attributeGroup name="biblioentry.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:An entry in a Bibliography. -->
  <xs:element name="biblioentry">
    <xs:complexType>
      <xs:choice maxOccurs="unbounded">
        <xs:element ref="articleinfo"/>
        <xs:group ref="bibliocomponent.mix"/>
      </xs:choice>
      <xs:attributeGroup ref="biblioentry.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of biblioentry.element -->
  <xs:attributeGroup name="biblioentry.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="biblioentry.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of biblioentry.attlist -->
  <!-- end of biblioentry.module -->
  <xs:attributeGroup name="bibliomixed.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:An entry in a Bibliography. -->
  <xs:element name="bibliomixed">
    <xs:complexType mixed="true">
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:group ref="bibliocomponent.mix"/>
        <xs:element ref="bibliomset"/>
      </xs:choice>
      <xs:attributeGroup ref="bibliomixed.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of bibliomixed.element -->
  <xs:attributeGroup name="bibliomixed.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="bibliomixed.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of bibliomixed.attlist -->
  <!-- end of bibliomixed.module -->
  <xs:attributeGroup name="articleinfo.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:Meta-information for an Article. -->
  <xs:element name="articleinfo">
    <xs:complexType>
      <xs:group maxOccurs="unbounded" ref="info.class"/>
      <xs:attributeGroup ref="articleinfo.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of articleinfo.element -->
  <xs:attributeGroup name="articleinfo.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="articleinfo.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of articleinfo.attlist -->
  <!-- end of articleinfo.module -->
  <xs:attributeGroup name="biblioset.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A "raw" container for related bibliographic information. -->
  <xs:element name="biblioset">
    <xs:complexType>
      <xs:group maxOccurs="unbounded" ref="bibliocomponent.mix"/>
      <xs:attributeGroup ref="biblioset.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of biblioset.element -->
  <!-- Relation: Relationship of elements contained within BiblioSet -->
  <xs:attributeGroup name="biblioset.attlist">
    <xs:attribute name="relation"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="biblioset.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of biblioset.attlist -->
  <!-- end of biblioset.module -->
  <xs:attributeGroup name="bibliomset.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A "cooked" container for related bibliographic information. -->
  <xs:element name="bibliomset">
    <xs:complexType mixed="true">
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:group ref="bibliocomponent.mix"/>
        <xs:element ref="bibliomset"/>
      </xs:choice>
      <xs:attributeGroup ref="bibliomset.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of bibliomset.element -->
  <!-- Relation: Relationship of elements contained within BiblioMSet -->
  <xs:attributeGroup name="bibliomset.attlist">
    <xs:attribute name="relation"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="bibliomset.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of bibliomset.attlist -->
  <!-- end of bibliomset.module -->
  <xs:attributeGroup name="bibliomisc.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:Untyped bibliographic information. -->
  <xs:element name="bibliomisc">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="para.char.mix"/>
      <xs:attributeGroup ref="bibliomisc.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of bibliomisc.element -->
  <xs:attributeGroup name="bibliomisc.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="bibliomisc.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of bibliomisc.attlist -->
  <!-- end of bibliomisc.module -->
  <!-- ...................................................................... -->
  <!-- Subject, Keyword, and ITermSet elements .............................. -->
  <xs:attributeGroup name="subjectset.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A set of terms describing the subject matter of a document. -->
  <xs:element name="subjectset">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" ref="subject"/>
      </xs:sequence>
      <xs:attributeGroup ref="subjectset.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of subjectset.element -->
  <!-- Scheme: Controlled vocabulary employed in SubjectTerms -->
  <xs:attributeGroup name="subjectset.attlist">
    <xs:attribute name="scheme" type="xs:NMTOKEN"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="subjectset.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of subjectset.attlist -->
  <!-- end of subjectset.module -->
  <xs:attributeGroup name="subject.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:One of a group of terms describing the subject matter of a document. -->
  <xs:element name="subject">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" ref="subjectterm"/>
      </xs:sequence>
      <xs:attributeGroup ref="subject.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of subject.element -->
  <!--
    Weight: Ranking of this group of SubjectTerms relative
    to others, 0 is low, no highest value specified
  -->
  <xs:attributeGroup name="subject.attlist">
    <xs:attribute name="weight"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="subject.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of subject.attlist -->
  <!-- end of subject.module -->
  <xs:attributeGroup name="subjectterm.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A term in a group of terms describing the subject matter of a document. -->
  <xs:element name="subjectterm">
    <xs:complexType mixed="true">
      <xs:attributeGroup ref="subjectterm.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of subjectterm.element -->
  <xs:attributeGroup name="subjectterm.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="subjectterm.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of subjectterm.attlist -->
  <!-- end of subjectterm.module -->
  <!-- end of subjectset.content.module -->
  <xs:attributeGroup name="keywordset.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A set of keywords describing the content of a document. -->
  <xs:element name="keywordset">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" ref="keyword"/>
      </xs:sequence>
      <xs:attributeGroup ref="keywordset.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of keywordset.element -->
  <xs:attributeGroup name="keywordset.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="keywordset.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of keywordset.attlist -->
  <!-- end of keywordset.module -->
  <xs:attributeGroup name="keyword.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:One of a set of keywords describing the content of a document. -->
  <xs:element name="keyword">
    <xs:complexType mixed="true">
      <xs:attributeGroup ref="keyword.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of keyword.element -->
  <xs:attributeGroup name="keyword.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="keyword.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of keyword.attlist -->
  <!-- end of keyword.module -->
  <!-- end of keywordset.content.module -->
  <xs:attributeGroup name="itermset.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A set of index terms in the meta-information of a document. -->
  <xs:element name="itermset">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" ref="indexterm"/>
      </xs:sequence>
      <xs:attributeGroup ref="itermset.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of itermset.element -->
  <xs:attributeGroup name="itermset.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="itermset.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of itermset.attlist -->
  <!-- end of itermset.module -->
  <!-- Bibliographic info for "blocks" -->
  <xs:attributeGroup name="blockinfo.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:Meta-information for a block element. -->
  <xs:element name="blockinfo">
    <xs:complexType>
      <xs:group maxOccurs="unbounded" ref="info.class"/>
      <xs:attributeGroup ref="blockinfo.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of blockinfo.element -->
  <xs:attributeGroup name="blockinfo.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="blockinfo.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of blockinfo.attlist -->
  <!-- end of blockinfo.module -->
  <!-- ...................................................................... -->
  <!-- Compound (section-ish) elements ...................................... -->
  <!-- Message set ...................... -->
  <xs:attributeGroup name="msgset.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A detailed set of messages, usually error messages. -->
  <xs:element name="msgset" substitutionGroup="compound.class">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="blockinfo"/>
        <xs:group minOccurs="0" ref="formalobject.title.content"/>
        <xs:choice>
          <xs:element maxOccurs="unbounded" ref="msgentry"/>
          <xs:element maxOccurs="unbounded" ref="simplemsgentry"/>
        </xs:choice>
      </xs:sequence>
      <xs:attributeGroup ref="msgset.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of msgset.element -->
  <xs:attributeGroup name="msgset.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="msgset.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of msgset.attlist -->
  <!-- end of msgset.module -->
  <xs:attributeGroup name="msgentry.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A wrapper for an entry in a message set. -->
  <xs:element name="msgentry">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" ref="msg"/>
        <xs:element minOccurs="0" ref="msginfo"/>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="msgexplan"/>
      </xs:sequence>
      <xs:attributeGroup ref="msgentry.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of msgentry.element -->
  <xs:attributeGroup name="msgentry.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="msgentry.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of msgentry.attlist -->
  <!-- end of msgentry.module -->
  <xs:attributeGroup name="simplemsgentry.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A wrapper for a simpler entry in a message set. -->
  <xs:element name="simplemsgentry">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="msgtext"/>
        <xs:element maxOccurs="unbounded" ref="msgexplan"/>
      </xs:sequence>
      <xs:attributeGroup ref="simplemsgentry.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of simplemsgentry.element -->
  <xs:attributeGroup name="simplemsgentry.attlist">
    <xs:attribute name="audience"/>
    <xs:attribute name="level"/>
    <xs:attribute name="origin"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="simplemsgentry.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of simplemsgentry.attlist -->
  <!-- end of simplemsgentry.module -->
  <xs:attributeGroup name="msg.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A message in a message set. -->
  <xs:element name="msg">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="title"/>
        <xs:element ref="msgmain"/>
        <xs:choice minOccurs="0" maxOccurs="unbounded">
          <xs:element ref="msgsub"/>
          <xs:element ref="msgrel"/>
        </xs:choice>
      </xs:sequence>
      <xs:attributeGroup ref="msg.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of msg.element -->
  <xs:attributeGroup name="msg.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="msg.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of msg.attlist -->
  <!-- end of msg.module -->
  <xs:attributeGroup name="msgmain.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:The primary component of a message in a message set. -->
  <xs:element name="msgmain">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="title"/>
        <xs:element ref="msgtext"/>
      </xs:sequence>
      <xs:attributeGroup ref="msgmain.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of msgmain.element -->
  <xs:attributeGroup name="msgmain.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="msgmain.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of msgmain.attlist -->
  <!-- end of msgmain.module -->
  <xs:attributeGroup name="msgsub.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A subcomponent of a message in a message set. -->
  <xs:element name="msgsub">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="title"/>
        <xs:element ref="msgtext"/>
      </xs:sequence>
      <xs:attributeGroup ref="msgsub.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of msgsub.element -->
  <xs:attributeGroup name="msgsub.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="msgsub.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of msgsub.attlist -->
  <!-- end of msgsub.module -->
  <xs:attributeGroup name="msgrel.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A related component of a message in a message set. -->
  <xs:element name="msgrel">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="title"/>
        <xs:element ref="msgtext"/>
      </xs:sequence>
      <xs:attributeGroup ref="msgrel.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of msgrel.element -->
  <xs:attributeGroup name="msgrel.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="msgrel.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of msgrel.attlist -->
  <!-- end of msgrel.module -->
  <!-- MsgText (defined in the Inlines section, below) -->
  <xs:attributeGroup name="msginfo.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:Information about a message in a message set. -->
  <xs:element name="msginfo">
    <xs:complexType>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element ref="msglevel"/>
        <xs:element ref="msgorig"/>
        <xs:element ref="msgaud"/>
      </xs:choice>
      <xs:attributeGroup ref="msginfo.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of msginfo.element -->
  <xs:attributeGroup name="msginfo.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="msginfo.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of msginfo.attlist -->
  <!-- end of msginfo.module -->
  <xs:attributeGroup name="msglevel.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:The level of importance or severity of a message in a message set. -->
  <xs:element name="msglevel">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="smallcptr.char.mix"/>
      <xs:attributeGroup ref="msglevel.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of msglevel.element -->
  <xs:attributeGroup name="msglevel.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="msglevel.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of msglevel.attlist -->
  <!-- end of msglevel.module -->
  <xs:attributeGroup name="msgorig.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:The origin of a message in a message set. -->
  <xs:element name="msgorig">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="smallcptr.char.mix"/>
      <xs:attributeGroup ref="msgorig.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of msgorig.element -->
  <xs:attributeGroup name="msgorig.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="msgorig.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of msgorig.attlist -->
  <!-- end of msgorig.module -->
  <xs:attributeGroup name="msgaud.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:The audience to which a message in a message set is relevant. -->
  <xs:element name="msgaud">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="para.char.mix"/>
      <xs:attributeGroup ref="msgaud.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of msgaud.element -->
  <xs:attributeGroup name="msgaud.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="msgaud.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of msgaud.attlist -->
  <!-- end of msgaud.module -->
  <xs:attributeGroup name="msgexplan.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:Explanatory material relating to a message in a message set. -->
  <xs:element name="msgexplan">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="title"/>
        <xs:group maxOccurs="unbounded" ref="component.mix"/>
      </xs:sequence>
      <xs:attributeGroup ref="msgexplan.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of msgexplan.element -->
  <xs:attributeGroup name="msgexplan.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="msgexplan.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of msgexplan.attlist -->
  <!-- end of msgexplan.module -->
  <!-- end of msgset.content.module -->
  <xs:attributeGroup name="task.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A task to be completed. -->
  <xs:element name="task" substitutionGroup="compound.class">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="blockinfo"/>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="ndxterm.class"/>
        <xs:group ref="formalobject.title.content"/>
        <xs:element minOccurs="0" ref="tasksummary"/>
        <xs:element minOccurs="0" ref="taskprerequisites"/>
        <xs:element ref="procedure"/>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="example"/>
        <xs:element minOccurs="0" ref="taskrelated"/>
      </xs:sequence>
      <xs:attributeGroup ref="task.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of task.element -->
  <xs:attributeGroup name="task.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="task.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of task.attlist -->
  <!-- end of task.module -->
  <xs:attributeGroup name="tasksummary.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A summary of a task. -->
  <xs:element name="tasksummary">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="blockinfo"/>
        <xs:group minOccurs="0" ref="formalobject.title.content"/>
        <xs:group maxOccurs="unbounded" ref="component.mix"/>
      </xs:sequence>
      <xs:attributeGroup ref="tasksummary.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of tasksummary.element -->
  <xs:attributeGroup name="tasksummary.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="tasksummary.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of tasksummary.attlist -->
  <!-- end of tasksummary.module -->
  <xs:attributeGroup name="taskprerequisites.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:The prerequisites for a task. -->
  <xs:element name="taskprerequisites">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="blockinfo"/>
        <xs:group minOccurs="0" ref="formalobject.title.content"/>
        <xs:group maxOccurs="unbounded" ref="component.mix"/>
      </xs:sequence>
      <xs:attributeGroup ref="taskprerequisites.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of taskprerequisites.element -->
  <xs:attributeGroup name="taskprerequisites.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="taskprerequisites.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of taskprerequisites.attlist -->
  <!-- end of taskprerequisites.module -->
  <xs:attributeGroup name="taskrelated.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:Information related to a task. -->
  <xs:element name="taskrelated">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="blockinfo"/>
        <xs:group minOccurs="0" ref="formalobject.title.content"/>
        <xs:group maxOccurs="unbounded" ref="component.mix"/>
      </xs:sequence>
      <xs:attributeGroup ref="taskrelated.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of taskrelated.element -->
  <xs:attributeGroup name="taskrelated.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="taskrelated.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of taskrelated.attlist -->
  <!-- end of taskrelated.module -->
  <!-- end of task.content.module -->
  <!-- QandASet ........................ -->
  <xs:attributeGroup name="qandaset.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A question-and-answer set. -->
  <xs:element name="qandaset" substitutionGroup="compound.class">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="blockinfo"/>
        <xs:group minOccurs="0" ref="formalobject.title.content"/>
        <xs:group minOccurs="0" maxOccurs="unbounded" ref="qandaset.mix"/>
        <xs:choice>
          <xs:element maxOccurs="unbounded" ref="qandadiv"/>
          <xs:element maxOccurs="unbounded" ref="qandaentry"/>
        </xs:choice>
      </xs:sequence>
      <xs:attributeGroup ref="qandaset.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of qandaset.element -->
  <xs:attributeGroup name="qandaset.attlist">
    <xs:attribute name="defaultlabel">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="qanda"/>
          <xs:enumeration value="number"/>
          <xs:enumeration value="none"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="qandaset.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of qandaset.attlist -->
  <!-- end of qandaset.module -->
  <xs:attributeGroup name="qandadiv.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A titled division in a QandASet. -->
  <xs:element name="qandadiv">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="blockinfo"/>
        <xs:group minOccurs="0" ref="formalobject.title.content"/>
        <xs:group minOccurs="0" maxOccurs="unbounded" ref="qandaset.mix"/>
        <xs:choice>
          <xs:element maxOccurs="unbounded" ref="qandadiv"/>
          <xs:element maxOccurs="unbounded" ref="qandaentry"/>
        </xs:choice>
      </xs:sequence>
      <xs:attributeGroup ref="qandadiv.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of qandadiv.element -->
  <xs:attributeGroup name="qandadiv.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="qandadiv.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of qandadiv.attlist -->
  <!-- end of qandadiv.module -->
  <xs:attributeGroup name="qandaentry.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A question/answer set within a QandASet. -->
  <xs:element name="qandaentry">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="blockinfo"/>
        <xs:element minOccurs="0" ref="revhistory"/>
        <xs:element ref="question"/>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="answer"/>
      </xs:sequence>
      <xs:attributeGroup ref="qandaentry.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of qandaentry.element -->
  <xs:attributeGroup name="qandaentry.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="qandaentry.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of qandaentry.attlist -->
  <!-- end of qandaentry.module -->
  <xs:attributeGroup name="question.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A question in a QandASet. -->
  <xs:element name="question">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="label"/>
        <xs:group maxOccurs="unbounded" ref="qandaset.mix"/>
      </xs:sequence>
      <xs:attributeGroup ref="question.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of question.element -->
  <xs:attributeGroup name="question.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="question.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of question.attlist -->
  <!-- end of question.module -->
  <xs:attributeGroup name="answer.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:An answer to a question posed in a QandASet. -->
  <xs:element name="answer">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="label"/>
        <xs:group minOccurs="0" maxOccurs="unbounded" ref="qandaset.mix"/>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="qandaentry"/>
      </xs:sequence>
      <xs:attributeGroup ref="answer.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of answer.element -->
  <xs:attributeGroup name="answer.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="answer.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of answer.attlist -->
  <!-- end of answer.module -->
  <xs:attributeGroup name="label.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A label on a Question or Answer. -->
  <xs:element name="label">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="word.char.mix"/>
      <xs:attributeGroup ref="label.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of label.element -->
  <xs:attributeGroup name="label.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="label.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of label.attlist -->
  <!-- end of label.module -->
  <!-- end of qandaset.content.module -->
  <!-- Procedure ........................ -->
  <xs:attributeGroup name="procedure.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A list of operations to be performed in a well-defined sequence. -->
  <xs:element name="procedure" substitutionGroup="compound.class">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="blockinfo"/>
        <xs:group minOccurs="0" ref="formalobject.title.content"/>
        <xs:group minOccurs="0" maxOccurs="unbounded" ref="component.mix"/>
        <xs:element maxOccurs="unbounded" ref="step"/>
      </xs:sequence>
      <xs:attributeGroup ref="procedure.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of procedure.element -->
  <xs:attributeGroup name="procedure.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="procedure.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of procedure.attlist -->
  <!-- end of procedure.module -->
  <xs:attributeGroup name="step.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A unit of action in a procedure. -->
  <xs:element name="step">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="title"/>
        <xs:choice>
          <xs:sequence>
            <xs:group maxOccurs="unbounded" ref="component.mix"/>
            <xs:sequence minOccurs="0">
              <xs:choice>
                <xs:element ref="substeps"/>
                <xs:element ref="stepalternatives"/>
              </xs:choice>
              <xs:group minOccurs="0" maxOccurs="unbounded" ref="component.mix"/>
            </xs:sequence>
          </xs:sequence>
          <xs:sequence>
            <xs:choice>
              <xs:element ref="substeps"/>
              <xs:element ref="stepalternatives"/>
            </xs:choice>
            <xs:group minOccurs="0" maxOccurs="unbounded" ref="component.mix"/>
          </xs:sequence>
        </xs:choice>
      </xs:sequence>
      <xs:attributeGroup ref="step.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of step.element -->
  <!-- Performance: Whether the Step must be performed -->
  <!-- not #REQUIRED! -->
  <xs:attributeGroup name="step.attlist">
    <xs:attribute name="performance" default="required">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="optional"/>
          <xs:enumeration value="required"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="step.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of step.attlist -->
  <!-- end of step.module -->
  <xs:attributeGroup name="substeps.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A wrapper for steps that occur within steps in a procedure. -->
  <xs:element name="substeps">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" ref="step"/>
      </xs:sequence>
      <xs:attributeGroup ref="substeps.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of substeps.element -->
  <!-- Performance: whether entire set of substeps must be performed -->
  <!-- not #REQUIRED! -->
  <xs:attributeGroup name="substeps.attlist">
    <xs:attribute name="performance" default="required">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="optional"/>
          <xs:enumeration value="required"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="substeps.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of substeps.attlist -->
  <!-- end of substeps.module -->
  <xs:attributeGroup name="stepalternatives.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:Alternative steps in a procedure. -->
  <xs:element name="stepalternatives">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" ref="step"/>
      </xs:sequence>
      <xs:attributeGroup ref="stepalternatives.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of stepalternatives.element -->
  <!-- Performance: Whether (one of) the alternatives must be performed -->
  <!-- not #REQUIRED! -->
  <xs:attributeGroup name="stepalternatives.attlist">
    <xs:attribute name="performance" default="required">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="optional"/>
          <xs:enumeration value="required"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="stepalternatives.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of stepalternatives.attlist -->
  <!-- end of stepalternatives.module -->
  <!-- end of procedure.content.module -->
  <!-- Sidebar .......................... -->
  <xs:attributeGroup name="sidebarinfo.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:Meta-information for a Sidebar. -->
  <xs:element name="sidebarinfo">
    <xs:complexType>
      <xs:group maxOccurs="unbounded" ref="info.class"/>
      <xs:attributeGroup ref="sidebarinfo.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of sidebarinfo.element -->
  <xs:attributeGroup name="sidebarinfo.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="sidebarinfo.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of sidebarinfo.attlist -->
  <!-- end of sidebarinfo.module -->
  <xs:attributeGroup name="sidebar.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A portion of a document that is isolated from the main narrative flow. -->
  <xs:element name="sidebar" substitutionGroup="compound.class">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="sidebarinfo"/>
        <xs:group minOccurs="0" ref="formalobject.title.content"/>
        <xs:group maxOccurs="unbounded" ref="sidebar.mix"/>
      </xs:sequence>
      <xs:attributeGroup ref="sidebar.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of sidebar.element -->
  <xs:attributeGroup name="sidebar.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="sidebar.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of sidebar.attlist -->
  <!-- end of sidebar.module -->
  <!-- end of sidebar.content.model -->
  <!-- ...................................................................... -->
  <!-- Paragraph-related elements ........................................... -->
  <xs:attributeGroup name="abstract.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A summary. -->
  <xs:element name="abstract">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="title"/>
        <xs:element maxOccurs="unbounded" ref="para.class"/>
      </xs:sequence>
      <xs:attributeGroup ref="abstract.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of abstract.element -->
  <xs:attributeGroup name="abstract.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="abstract.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of abstract.attlist -->
  <!-- end of abstract.module -->
  <xs:attributeGroup name="authorblurb.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A short description or note about an author. -->
  <xs:element name="authorblurb">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="title"/>
        <xs:element maxOccurs="unbounded" ref="para.class"/>
      </xs:sequence>
      <xs:attributeGroup ref="authorblurb.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of authorblurb.element -->
  <xs:attributeGroup name="authorblurb.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="authorblurb.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of authorblurb.attlist -->
  <!-- end of authorblurb.module -->
  <xs:attributeGroup name="personblurb.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A short description or note about a person. -->
  <xs:element name="personblurb">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="title"/>
        <xs:element maxOccurs="unbounded" ref="para.class"/>
      </xs:sequence>
      <xs:attributeGroup ref="personblurb.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of personblurb.element -->
  <xs:attributeGroup name="personblurb.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="personblurb.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of personblurb.attlist -->
  <!-- end of personblurb.module -->
  <xs:attributeGroup name="blockquote.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A quotation set off from the main text. -->
  <xs:element name="blockquote" substitutionGroup="informal.class">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="blockinfo"/>
        <xs:element minOccurs="0" ref="title"/>
        <xs:element minOccurs="0" ref="attribution"/>
        <xs:group maxOccurs="unbounded" ref="component.mix"/>
      </xs:sequence>
      <xs:attributeGroup ref="blockquote.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of blockquote.element -->
  <xs:attributeGroup name="blockquote.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="blockquote.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of blockquote.attlist -->
  <!-- end of blockquote.module -->
  <xs:attributeGroup name="attribution.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:The source of a block quote or epigraph. -->
  <xs:element name="attribution">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="para.char.mix"/>
      <xs:attributeGroup ref="attribution.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of attribution.element -->
  <xs:attributeGroup name="attribution.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="attribution.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of attribution.attlist -->
  <!-- end of attribution.module -->
  <xs:attributeGroup name="bridgehead.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A free-floating heading. -->
  <xs:element name="bridgehead">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="title.char.mix"/>
      <xs:attributeGroup ref="bridgehead.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of bridgehead.element -->
  <!--
    Renderas: Indicates the format in which the BridgeHead
    should appear
  -->
  <xs:attributeGroup name="bridgehead.attlist">
    <xs:attribute name="renderas">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="other"/>
          <xs:enumeration value="sect1"/>
          <xs:enumeration value="sect2"/>
          <xs:enumeration value="sect3"/>
          <xs:enumeration value="sect4"/>
          <xs:enumeration value="sect5"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="bridgehead.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of bridgehead.attlist -->
  <!-- end of bridgehead.module -->
  <xs:attributeGroup name="remark.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A remark (or comment) intended for presentation in a draft manuscript. -->
  <xs:element name="remark">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="para.char.mix"/>
      <xs:attributeGroup ref="remark.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of remark.element -->
  <xs:attributeGroup name="remark.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="remark.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of remark.attlist -->
  <!-- end of remark.module -->
  <xs:attributeGroup name="epigraph.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A short inscription at the beginning of a document or component. -->
  <xs:element name="epigraph">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="attribution"/>
        <xs:choice maxOccurs="unbounded">
          <xs:element ref="para.class"/>
          <xs:element ref="literallayout"/>
        </xs:choice>
      </xs:sequence>
      <xs:attributeGroup ref="epigraph.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of epigraph.element -->
  <xs:attributeGroup name="epigraph.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="epigraph.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of epigraph.attlist -->
  <!-- Attribution (defined above) -->
  <!-- end of epigraph.module -->
  <xs:attributeGroup name="footnote.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A footnote. -->
  <xs:element name="footnote" substitutionGroup="gen.char.class">
    <xs:complexType>
      <xs:group maxOccurs="unbounded" ref="footnote.mix"/>
      <xs:attributeGroup ref="footnote.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of footnote.element -->
  <xs:attributeGroup name="footnote.attlist">
    <xs:attributeGroup ref="label.attrib"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="footnote.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of footnote.attlist -->
  <!-- end of footnote.module -->
  <xs:attributeGroup name="highlights.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A summary of the main points of the discussed component. -->
  <xs:element name="highlights">
    <xs:complexType>
      <xs:group maxOccurs="unbounded" ref="highlights.mix"/>
      <xs:attributeGroup ref="highlights.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of highlights.element -->
  <xs:attributeGroup name="highlights.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="highlights.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of highlights.attlist -->
  <!-- end of highlights.module -->
  <xs:attributeGroup name="formalpara.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A paragraph with a title. -->
  <xs:element name="formalpara" substitutionGroup="para.class">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="title"/>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="ndxterm.class"/>
        <xs:element ref="para"/>
      </xs:sequence>
      <xs:attributeGroup ref="formalpara.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of formalpara.element -->
  <xs:attributeGroup name="formalpara.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="formalpara.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of formalpara.attlist -->
  <!-- end of formalpara.module -->
  <xs:attributeGroup name="para.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A paragraph. -->
  <xs:element name="para" substitutionGroup="para.class">
    <xs:complexType mixed="true">
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:group ref="para.char.mix"/>
        <xs:group ref="para.mix"/>
      </xs:choice>
      <xs:attributeGroup ref="para.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of para.element -->
  <xs:attributeGroup name="para.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="para.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of para.attlist -->
  <!-- end of para.module -->
  <xs:attributeGroup name="simpara.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A paragraph that contains only text and inline markup, no block elements. -->
  <xs:element name="simpara" substitutionGroup="para.class">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="para.char.mix"/>
      <xs:attributeGroup ref="simpara.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of simpara.element -->
  <xs:attributeGroup name="simpara.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="simpara.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of simpara.attlist -->
  <!-- end of simpara.module -->
  <xs:attributeGroup name="admon.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A note of caution. -->
  <xs:element name="caution" substitutionGroup="admon.class">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="title"/>
        <xs:group maxOccurs="unbounded" ref="admon.mix"/>
      </xs:sequence>
      <xs:attributeGroup ref="caution.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of caution.element -->
  <xs:attributeGroup name="caution.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="admon.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of caution.attlist -->
  <!-- doc:An admonition set off from the text. -->
  <xs:element name="important" substitutionGroup="admon.class">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="title"/>
        <xs:group maxOccurs="unbounded" ref="admon.mix"/>
      </xs:sequence>
      <xs:attributeGroup ref="important.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of important.element -->
  <xs:attributeGroup name="important.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="admon.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of important.attlist -->
  <!-- doc:A message set off from the text. -->
  <xs:element name="note" substitutionGroup="admon.class">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="title"/>
        <xs:group maxOccurs="unbounded" ref="admon.mix"/>
      </xs:sequence>
      <xs:attributeGroup ref="note.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of note.element -->
  <xs:attributeGroup name="note.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="admon.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of note.attlist -->
  <!-- doc:A suggestion to the user, set off from the text. -->
  <xs:element name="tip" substitutionGroup="admon.class">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="title"/>
        <xs:group maxOccurs="unbounded" ref="admon.mix"/>
      </xs:sequence>
      <xs:attributeGroup ref="tip.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of tip.element -->
  <xs:attributeGroup name="tip.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="admon.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of tip.attlist -->
  <!-- doc:An admonition set off from the text. -->
  <xs:element name="warning" substitutionGroup="admon.class">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="title"/>
        <xs:group maxOccurs="unbounded" ref="admon.mix"/>
      </xs:sequence>
      <xs:attributeGroup ref="warning.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of warning.element -->
  <xs:attributeGroup name="warning.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="admon.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of warning.attlist -->
  <!-- end of admon.module -->
  <!-- ...................................................................... -->
  <!-- Lists ................................................................ -->
  <!-- GlossList ........................ -->
  <xs:attributeGroup name="glosslist.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A wrapper for a set of GlossEntrys. -->
  <xs:element name="glosslist" substitutionGroup="list.class">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="blockinfo"/>
        <xs:group minOccurs="0" ref="formalobject.title.content"/>
        <xs:element maxOccurs="unbounded" ref="glossentry"/>
      </xs:sequence>
      <xs:attributeGroup ref="glosslist.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of glosslist.element -->
  <xs:attributeGroup name="glosslist.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="glosslist.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of glosslist.attlist -->
  <!-- end of glosslist.module -->
  <xs:attributeGroup name="glossentry.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:An entry in a Glossary or GlossList. -->
  <xs:element name="glossentry">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="glossterm"/>
        <xs:element minOccurs="0" ref="acronym"/>
        <xs:element minOccurs="0" ref="abbrev"/>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="ndxterm.class"/>
        <xs:element minOccurs="0" ref="revhistory"/>
        <xs:choice>
          <xs:element ref="glosssee"/>
          <xs:element maxOccurs="unbounded" ref="glossdef"/>
        </xs:choice>
      </xs:sequence>
      <xs:attributeGroup ref="glossentry.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of glossentry.element -->
  <!--
    SortAs: String by which the GlossEntry is to be sorted
    (alphabetized) in lieu of its proper content
  -->
  <xs:attributeGroup name="glossentry.attlist">
    <xs:attribute name="sortas"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="glossentry.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of glossentry.attlist -->
  <!-- end of glossentry.module -->
  <!-- GlossTerm (defined in the Inlines section, below) -->
  <xs:attributeGroup name="glossdef.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A definition in a GlossEntry. -->
  <xs:element name="glossdef">
    <xs:complexType>
      <xs:sequence>
        <xs:group maxOccurs="unbounded" ref="glossdef.mix"/>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="glossseealso"/>
      </xs:sequence>
      <xs:attributeGroup ref="glossdef.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of glossdef.element -->
  <!-- Subject: List of subjects; keywords for the definition -->
  <xs:attributeGroup name="glossdef.attlist">
    <xs:attribute name="subject"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="glossdef.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of glossdef.attlist -->
  <!-- end of glossdef.module -->
  <xs:attributeGroup name="glosssee.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A cross-reference from one GlossEntry to another. -->
  <xs:element name="glosssee">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="para.char.mix"/>
      <xs:attributeGroup ref="glosssee.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of glosssee.element -->
  <!--
    OtherTerm: Reference to the GlossEntry whose GlossTerm
    should be displayed at the point of the GlossSee
  -->
  <xs:attributeGroup name="glosssee.attlist">
    <xs:attribute name="otherterm" type="xs:IDREF"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="glosssee.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of glosssee.attlist -->
  <!-- end of glosssee.module -->
  <xs:attributeGroup name="glossseealso.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A cross-reference from one GlossEntry to another. -->
  <xs:element name="glossseealso">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="para.char.mix"/>
      <xs:attributeGroup ref="glossseealso.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of glossseealso.element -->
  <!--
    OtherTerm: Reference to the GlossEntry whose GlossTerm
    should be displayed at the point of the GlossSeeAlso
  -->
  <xs:attributeGroup name="glossseealso.attlist">
    <xs:attribute name="otherterm" type="xs:IDREF"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="glossseealso.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of glossseealso.attlist -->
  <!-- end of glossseealso.module -->
  <!-- end of glossentry.content.module -->
  <!-- ItemizedList and OrderedList ..... -->
  <xs:attributeGroup name="itemizedlist.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A list in which each entry is marked with a bullet or other dingbat. -->
  <xs:element name="itemizedlist" substitutionGroup="list.class">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="blockinfo"/>
        <xs:group minOccurs="0" ref="formalobject.title.content"/>
        <xs:group minOccurs="0" maxOccurs="unbounded" ref="listpreamble.mix"/>
        <xs:element maxOccurs="unbounded" ref="listitem"/>
      </xs:sequence>
      <xs:attributeGroup ref="itemizedlist.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of itemizedlist.element -->
  <!--
    Spacing: Whether the vertical space in the list should be
    compressed
  -->
  <!--
    Mark: Keyword, e.g., bullet, dash, checkbox, none;
    list of keywords and defaults are implementation specific
  -->
  <xs:attributeGroup name="itemizedlist.attlist">
    <xs:attribute name="spacing">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="normal"/>
          <xs:enumeration value="compact"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attributeGroup ref="mark.attrib"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="itemizedlist.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of itemizedlist.attlist -->
  <!-- end of itemizedlist.module -->
  <xs:attributeGroup name="orderedlist.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A list in which each entry is marked with a sequentially incremented label. -->
  <xs:element name="orderedlist" substitutionGroup="list.class">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="blockinfo"/>
        <xs:group minOccurs="0" ref="formalobject.title.content"/>
        <xs:group minOccurs="0" maxOccurs="unbounded" ref="listpreamble.mix"/>
        <xs:element maxOccurs="unbounded" ref="listitem"/>
      </xs:sequence>
      <xs:attributeGroup ref="orderedlist.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of orderedlist.element -->
  <!--
    Numeration: Style of ListItem numbered; default is expected
    to be Arabic
  -->
  <!--
    InheritNum: Specifies for a nested list that the numbering
    of ListItems should include the number of the item
    within which they are nested (e.g., 1a and 1b within 1,
    rather than a and b)
  -->
  <!--
    Continuation: Where list numbering begins afresh (Restarts,
    the default) or continues that of the immediately preceding
    list (Continues)
  -->
  <!--
    Spacing: Whether the vertical space in the list should be
    compressed
  -->
  <xs:attributeGroup name="orderedlist.attlist">
    <xs:attribute name="numeration">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="arabic"/>
          <xs:enumeration value="upperalpha"/>
          <xs:enumeration value="loweralpha"/>
          <xs:enumeration value="upperroman"/>
          <xs:enumeration value="lowerroman"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="inheritnum" default="ignore">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="inherit"/>
          <xs:enumeration value="ignore"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="continuation" default="restarts">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="continues"/>
          <xs:enumeration value="restarts"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="spacing">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="normal"/>
          <xs:enumeration value="compact"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="orderedlist.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of orderedlist.attlist -->
  <!-- end of orderedlist.module -->
  <xs:attributeGroup name="listitem.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A wrapper for the elements of a list item. -->
  <xs:element name="listitem">
    <xs:complexType>
      <xs:group maxOccurs="unbounded" ref="component.mix"/>
      <xs:attributeGroup ref="listitem.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of listitem.element -->
  <!--
    Override: Indicates the mark to be used for this ListItem
    instead of the default mark or the mark specified by
    the Mark attribute on the enclosing ItemizedList
  -->
  <xs:attributeGroup name="listitem.attlist">
    <xs:attribute name="override"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="listitem.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of listitem.attlist -->
  <!-- end of listitem.module -->
  <!-- SegmentedList .................... -->
  <xs:attributeGroup name="segmentedlist.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A segmented list, a list of sets of elements. -->
  <xs:element name="segmentedlist" substitutionGroup="list.class">
    <xs:complexType>
      <xs:sequence>
        <xs:group minOccurs="0" ref="formalobject.title.content"/>
        <xs:element maxOccurs="unbounded" ref="segtitle"/>
        <xs:element maxOccurs="unbounded" ref="seglistitem"/>
      </xs:sequence>
      <xs:attributeGroup ref="segmentedlist.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of segmentedlist.element -->
  <xs:attributeGroup name="segmentedlist.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="segmentedlist.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of segmentedlist.attlist -->
  <!-- end of segmentedlist.module -->
  <xs:attributeGroup name="segtitle.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:The title of an element of a list item in a segmented list. -->
  <xs:element name="segtitle">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="title.char.mix"/>
      <xs:attributeGroup ref="segtitle.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of segtitle.element -->
  <xs:attributeGroup name="segtitle.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="segtitle.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of segtitle.attlist -->
  <!-- end of segtitle.module -->
  <xs:attributeGroup name="seglistitem.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A list item in a segmented list. -->
  <xs:element name="seglistitem">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" ref="seg"/>
      </xs:sequence>
      <xs:attributeGroup ref="seglistitem.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of seglistitem.element -->
  <xs:attributeGroup name="seglistitem.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="seglistitem.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of seglistitem.attlist -->
  <!-- end of seglistitem.module -->
  <xs:attributeGroup name="seg.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:An element of a list item in a segmented list. -->
  <xs:element name="seg">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="para.char.mix"/>
      <xs:attributeGroup ref="seg.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of seg.element -->
  <xs:attributeGroup name="seg.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="seg.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of seg.attlist -->
  <!-- end of seg.module -->
  <!-- end of segmentedlist.content.module -->
  <!-- SimpleList ....................... -->
  <xs:attributeGroup name="simplelist.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:An undecorated list of single words or short phrases. -->
  <xs:element name="simplelist" substitutionGroup="list.class">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" ref="member"/>
      </xs:sequence>
      <xs:attributeGroup ref="simplelist.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of simplelist.element -->
  <!-- Columns: The number of columns the array should contain -->
  <!--
    Type: How the Members of the SimpleList should be
    formatted: Inline (members separated with commas etc.
    inline), Vert (top to bottom in n Columns), or Horiz (in
    the direction of text flow) in n Columns.  If Column
    is 1 or implied, Type=Vert and Type=Horiz give the same
    results.
  -->
  <xs:attributeGroup name="simplelist.attlist">
    <xs:attribute name="columns"/>
    <xs:attribute name="type" default="vert">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="inline"/>
          <xs:enumeration value="vert"/>
          <xs:enumeration value="horiz"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="simplelist.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of simplelist.attlist -->
  <!-- end of simplelist.module -->
  <xs:attributeGroup name="member.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:An element of a simple list. -->
  <xs:element name="member">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="para.char.mix"/>
      <xs:attributeGroup ref="member.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of member.element -->
  <xs:attributeGroup name="member.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="member.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of member.attlist -->
  <!-- end of member.module -->
  <!-- end of simplelist.content.module -->
  <!-- VariableList ..................... -->
  <xs:attributeGroup name="variablelist.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A list in which each entry is composed of a set of one or more terms and an associated description. -->
  <xs:element name="variablelist" substitutionGroup="list.class">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="blockinfo"/>
        <xs:group minOccurs="0" ref="formalobject.title.content"/>
        <xs:group minOccurs="0" maxOccurs="unbounded" ref="listpreamble.mix"/>
        <xs:element maxOccurs="unbounded" ref="varlistentry"/>
      </xs:sequence>
      <xs:attributeGroup ref="variablelist.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of variablelist.element -->
  <!--
    TermLength: Length beyond which the presentation engine
    may consider the Term too long and select an alternate
    presentation of the Term and, or, its associated ListItem.
  -->
  <xs:attributeGroup name="variablelist.attlist">
    <xs:attribute name="termlength"/>
    <xs:attribute name="spacing">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="normal"/>
          <xs:enumeration value="compact"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="variablelist.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of variablelist.attlist -->
  <!-- end of variablelist.module -->
  <xs:attributeGroup name="varlistentry.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A wrapper for a set of terms and the associated description in a variable list. -->
  <xs:element name="varlistentry">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" ref="term"/>
        <xs:element ref="listitem"/>
      </xs:sequence>
      <xs:attributeGroup ref="varlistentry.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of varlistentry.element -->
  <xs:attributeGroup name="varlistentry.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="varlistentry.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of varlistentry.attlist -->
  <!-- end of varlistentry.module -->
  <xs:attributeGroup name="term.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:The word or phrase being defined or described in a variable list. -->
  <xs:element name="term">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="para.char.mix"/>
      <xs:attributeGroup ref="term.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of term.element -->
  <xs:attributeGroup name="term.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="term.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of term.attlist -->
  <!-- end of term.module -->
  <!-- ListItem (defined above) -->
  <!-- end of variablelist.content.module -->
  <!-- CalloutList ...................... -->
  <xs:attributeGroup name="calloutlist.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A list of Callouts. -->
  <xs:element name="calloutlist" substitutionGroup="list.class">
    <xs:complexType>
      <xs:sequence>
        <xs:group minOccurs="0" ref="formalobject.title.content"/>
        <xs:element maxOccurs="unbounded" ref="callout"/>
      </xs:sequence>
      <xs:attributeGroup ref="calloutlist.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of calloutlist.element -->
  <xs:attributeGroup name="calloutlist.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="calloutlist.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of calloutlist.attlist -->
  <!-- end of calloutlist.module -->
  <xs:attributeGroup name="callout.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A &ldquo;called out&rdquo; description of a marked Area. -->
  <xs:element name="callout">
    <xs:complexType>
      <xs:group maxOccurs="unbounded" ref="component.mix"/>
      <xs:attributeGroup ref="callout.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of callout.element -->
  <!--
    AreaRefs: IDs of one or more Areas or AreaSets described
    by this Callout
  -->
  <xs:attributeGroup name="callout.attlist">
    <xs:attribute name="arearefs" use="required" type="xs:IDREFS"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="callout.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of callout.attlist -->
  <!-- end of callout.module -->
  <!-- end of calloutlist.content.module -->
  <!-- ...................................................................... -->
  <!-- Objects .............................................................. -->
  <!-- Examples etc. .................... -->
  <xs:attributeGroup name="example.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A formal example, with a title. -->
  <xs:element name="example" substitutionGroup="formal.class">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="blockinfo"/>
        <xs:group ref="formalobject.title.content"/>
        <xs:group maxOccurs="unbounded" ref="example.mix"/>
      </xs:sequence>
      <xs:attributeGroup ref="example.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of example.element -->
  <xs:attributeGroup name="example.attlist">
    <xs:attribute name="floatstyle"/>
    <xs:attributeGroup ref="label.attrib"/>
    <xs:attributeGroup ref="width.attrib"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="example.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of example.attlist -->
  <!-- end of example.module -->
  <xs:attributeGroup name="informalexample.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A displayed example without a title. -->
  <xs:element name="informalexample" substitutionGroup="informal.class">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="blockinfo"/>
        <xs:group maxOccurs="unbounded" ref="example.mix"/>
      </xs:sequence>
      <xs:attributeGroup ref="informalexample.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of informalexample.element -->
  <xs:attributeGroup name="informalexample.attlist">
    <xs:attribute name="floatstyle"/>
    <xs:attributeGroup ref="width.attrib"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="informalexample.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of informalexample.attlist -->
  <!-- end of informalexample.module -->
  <xs:attributeGroup name="programlistingco.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A program listing with associated areas used in callouts. -->
  <xs:element name="programlistingco" substitutionGroup="linespecific.class">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="areaspec"/>
        <xs:element ref="programlisting"/>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="calloutlist"/>
      </xs:sequence>
      <xs:attributeGroup ref="programlistingco.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of programlistingco.element -->
  <xs:attributeGroup name="programlistingco.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="programlistingco.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of programlistingco.attlist -->
  <!-- CalloutList (defined above in Lists) -->
  <!-- end of informalexample.module -->
  <xs:attributeGroup name="areaspec.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A collection of regions in a graphic or code example. -->
  <xs:element name="areaspec">
    <xs:complexType>
      <xs:choice maxOccurs="unbounded">
        <xs:element ref="area"/>
        <xs:element ref="areaset"/>
      </xs:choice>
      <xs:attributeGroup ref="areaspec.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of areaspec.element -->
  <!--
    Units: global unit of measure in which coordinates in
    this spec are expressed:
    
    - CALSPair "x1,y1 x2,y2": lower-left and upper-right
    coordinates in a rectangle describing repro area in which
    graphic is placed, where X and Y dimensions are each some
    number 0..10000 (taken from CALS graphic attributes)
    
    - LineColumn "line column": line number and column number
    at which to start callout text in "linespecific" content
    
    - LineRange "startline endline": whole lines from startline
    to endline in "linespecific" content
    
    - LineColumnPair "line1 col1 line2 col2": starting and ending
    points of area in "linespecific" content that starts at
    first position and ends at second position (including the
    beginnings of any intervening lines)
    
    - Other: directive to look at value of OtherUnits attribute
    to get implementation-specific keyword
    
    The default is implementation-specific; usually dependent on
    the parent element (GraphicCO gets CALSPair, ProgramListingCO
    and ScreenCO get LineColumn)
  -->
  <!-- OtherUnits: User-defined units -->
  <xs:attributeGroup name="areaspec.attlist">
    <xs:attribute name="units">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="calspair"/>
          <xs:enumeration value="linecolumn"/>
          <xs:enumeration value="linerange"/>
          <xs:enumeration value="linecolumnpair"/>
          <xs:enumeration value="other"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="otherunits" type="xs:NMTOKEN"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="areaspec.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of areaspec.attlist -->
  <!-- end of areaspec.module -->
  <xs:attributeGroup name="area.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A region defined for a Callout in a graphic or code example. -->
  <xs:element name="area">
    <xs:complexType>
      <xs:attributeGroup ref="area.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of area.element -->
  <!-- bug number/symbol override or initialization -->
  <!-- to any related information -->
  <!--
    Units: unit of measure in which coordinates in this
    area are expressed; inherits from AreaSet and AreaSpec
  -->
  <!-- OtherUnits: User-defined units -->
  <xs:attributeGroup name="area.attlist">
    <xs:attributeGroup ref="label.attrib"/>
    <xs:attributeGroup ref="linkends.attrib"/>
    <xs:attribute name="units">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="calspair"/>
          <xs:enumeration value="linecolumn"/>
          <xs:enumeration value="linerange"/>
          <xs:enumeration value="linecolumnpair"/>
          <xs:enumeration value="other"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="otherunits" type="xs:NMTOKEN"/>
    <xs:attribute name="coords" use="required"/>
    <xs:attributeGroup ref="idreq.common.attrib"/>
    <xs:attributeGroup ref="area.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of area.attlist -->
  <!-- end of area.module -->
  <xs:attributeGroup name="areaset.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A set of related areas in a graphic or code example. -->
  <xs:element name="areaset">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" ref="area"/>
      </xs:sequence>
      <xs:attributeGroup ref="areaset.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of areaset.element -->
  <!-- bug number/symbol override or initialization -->
  <!--
    Units: unit of measure in which coordinates in this
    area are expressed; inherits from AreaSpec
  -->
  <xs:attributeGroup name="areaset.attlist">
    <xs:attributeGroup ref="label.attrib"/>
    <xs:attribute name="units">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="calspair"/>
          <xs:enumeration value="linecolumn"/>
          <xs:enumeration value="linerange"/>
          <xs:enumeration value="linecolumnpair"/>
          <xs:enumeration value="other"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="otherunits" type="xs:NMTOKEN"/>
    <xs:attribute name="coords" use="required"/>
    <xs:attributeGroup ref="idreq.common.attrib"/>
    <xs:attributeGroup ref="areaset.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of areaset.attlist -->
  <!-- end of areaset.module -->
  <!-- end of areaspec.content.module -->
  <xs:attributeGroup name="programlisting.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A literal listing of all or part of a program. -->
  <xs:element name="programlisting" substitutionGroup="linespecific.class">
    <xs:complexType mixed="true">
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:group ref="para.char.mix"/>
        <xs:element ref="co"/>
        <xs:element ref="coref"/>
        <xs:element ref="lineannotation"/>
        <xs:element ref="textobject"/>
      </xs:choice>
      <xs:attributeGroup ref="programlisting.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of programlisting.element -->
  <xs:attributeGroup name="programlisting.attlist">
    <xs:attributeGroup ref="width.attrib"/>
    <xs:attributeGroup ref="linespecific.attrib"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="programlisting.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of programlisting.attlist -->
  <!-- end of programlisting.module -->
  <xs:attributeGroup name="literallayout.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A block of text in which line breaks and white space are to be reproduced faithfully. -->
  <xs:element name="literallayout" substitutionGroup="linespecific.class">
    <xs:complexType mixed="true">
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:group ref="para.char.mix"/>
        <xs:element ref="co"/>
        <xs:element ref="coref"/>
        <xs:element ref="textobject"/>
        <xs:element ref="lineannotation"/>
      </xs:choice>
      <xs:attributeGroup ref="literallayout.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of literallayout.element -->
  <xs:attributeGroup name="literallayout.attlist">
    <xs:attributeGroup ref="width.attrib"/>
    <xs:attributeGroup ref="linespecific.attrib"/>
    <xs:attribute name="class" default="normal">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="monospaced"/>
          <xs:enumeration value="normal"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="literallayout.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of literallayout.attlist -->
  <!-- LineAnnotation (defined in the Inlines section, below) -->
  <!-- end of literallayout.module -->
  <xs:attributeGroup name="screenco.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A screen with associated areas used in callouts. -->
  <xs:element name="screenco" substitutionGroup="linespecific.class">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="areaspec"/>
        <xs:element ref="screen"/>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="calloutlist"/>
      </xs:sequence>
      <xs:attributeGroup ref="screenco.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of screenco.element -->
  <xs:attributeGroup name="screenco.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="screenco.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of screenco.attlist -->
  <!-- AreaSpec (defined above) -->
  <!-- CalloutList (defined above in Lists) -->
  <!-- end of screenco.module -->
  <xs:attributeGroup name="screen.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:Text that a user sees or might see on a computer screen. -->
  <xs:element name="screen" substitutionGroup="linespecific.class">
    <xs:complexType mixed="true">
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:group ref="para.char.mix"/>
        <xs:element ref="co"/>
        <xs:element ref="coref"/>
        <xs:element ref="textobject"/>
        <xs:element ref="lineannotation"/>
      </xs:choice>
      <xs:attributeGroup ref="screen.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of screen.element -->
  <xs:attributeGroup name="screen.attlist">
    <xs:attributeGroup ref="width.attrib"/>
    <xs:attributeGroup ref="linespecific.attrib"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="screen.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of screen.attlist -->
  <!-- end of screen.module -->
  <xs:attributeGroup name="screenshot.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A representation of what the user sees or might see on a computer screen. -->
  <xs:element name="screenshot" substitutionGroup="linespecific.class">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="screeninfo"/>
        <xs:choice>
          <xs:element ref="graphic"/>
          <xs:element ref="graphicco"/>
          <xs:element ref="mediaobject"/>
          <xs:element ref="mediaobjectco"/>
        </xs:choice>
      </xs:sequence>
      <xs:attributeGroup ref="screenshot.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of screenshot.element -->
  <xs:attributeGroup name="screenshot.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="screenshot.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of screenshot.attlist -->
  <!-- end of screenshot.module -->
  <xs:attributeGroup name="screeninfo.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:Information about how a screen shot was produced. -->
  <xs:element name="screeninfo">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="para.char.mix"/>
      <xs:attributeGroup ref="screeninfo.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of screeninfo.element -->
  <xs:attributeGroup name="screeninfo.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="screeninfo.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of screeninfo.attlist -->
  <!-- end of screeninfo.module -->
  <!-- end of screenshot.content.module -->
  <!-- Figures etc. ..................... -->
  <xs:attributeGroup name="figure.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A formal figure, generally an illustration, with a title. -->
  <xs:element name="figure" substitutionGroup="formal.class">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="blockinfo"/>
        <xs:group ref="formalobject.title.content"/>
        <xs:choice maxOccurs="unbounded">
          <xs:group ref="figure.mix"/>
          <xs:element ref="link.char.class"/>
        </xs:choice>
      </xs:sequence>
      <xs:attributeGroup ref="figure.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of figure.element -->
  <!--
    Float: Whether the Figure is supposed to be rendered
    where convenient (yes (1) value) or at the place it occurs
    in the text (no (0) value, the default)
  -->
  <xs:attributeGroup name="figure.attlist">
    <xs:attribute name="float" default="0" type="yesorno.attvals"/>
    <xs:attribute name="floatstyle"/>
    <xs:attribute name="pgwide" type="yesorno.attvals"/>
    <xs:attributeGroup ref="label.attrib"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="figure.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of figure.attlist -->
  <!-- end of figure.module -->
  <xs:attributeGroup name="informalfigure.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A untitled figure. -->
  <xs:element name="informalfigure" substitutionGroup="informal.class">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="blockinfo"/>
        <xs:choice maxOccurs="unbounded">
          <xs:group ref="figure.mix"/>
          <xs:element ref="link.char.class"/>
        </xs:choice>
      </xs:sequence>
      <xs:attributeGroup ref="informalfigure.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of informalfigure.element -->
  <!--
    Float: Whether the Figure is supposed to be rendered
    where convenient (yes (1) value) or at the place it occurs
    in the text (no (0) value, the default)
  -->
  <xs:attributeGroup name="informalfigure.attlist">
    <xs:attribute name="float" default="0" type="yesorno.attvals"/>
    <xs:attribute name="floatstyle"/>
    <xs:attribute name="pgwide" type="yesorno.attvals"/>
    <xs:attributeGroup ref="label.attrib"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="informalfigure.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of informalfigure.attlist -->
  <!-- end of informalfigure.module -->
  <xs:attributeGroup name="graphicco.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A graphic that contains callout areas. -->
  <xs:element name="graphicco" substitutionGroup="informal.class">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="areaspec"/>
        <xs:element ref="graphic"/>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="calloutlist"/>
      </xs:sequence>
      <xs:attributeGroup ref="graphicco.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of graphicco.element -->
  <xs:attributeGroup name="graphicco.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="graphicco.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of graphicco.attlist -->
  <!-- AreaSpec (defined above in Examples) -->
  <!-- CalloutList (defined above in Lists) -->
  <!-- end of graphicco.module -->
  <!--
    Graphical data can be the content of Graphic, or you can reference
    an external file either as an entity (Entitref) or a filename
    (Fileref).
  -->
  <xs:attributeGroup name="graphic.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A displayed graphical object (not an inline). -->
  <xs:element name="graphic" substitutionGroup="informal.class">
    <xs:complexType>
      <xs:attributeGroup ref="graphic.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of graphic.element -->
  <xs:attributeGroup name="graphic.attlist">
    <xs:attributeGroup ref="graphics.attrib"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="graphic.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of graphic.attlist -->
  <!-- end of graphic.module -->
  <xs:attributeGroup name="inlinegraphic.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:An object containing or pointing to graphical data that will be rendered inline. -->
  <xs:element name="inlinegraphic" substitutionGroup="inlineobj.char.class">
    <xs:complexType>
      <xs:attributeGroup ref="inlinegraphic.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of inlinegraphic.element -->
  <xs:attributeGroup name="inlinegraphic.attlist">
    <xs:attributeGroup ref="graphics.attrib"/>
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="inlinegraphic.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of inlinegraphic.attlist -->
  <!-- end of inlinegraphic.module -->
  <xs:attributeGroup name="mediaobject.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A displayed media object (video, audio, image, etc.). -->
  <xs:element name="mediaobject" substitutionGroup="informal.class">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="objectinfo"/>
        <xs:element maxOccurs="unbounded" ref="mediaobject.mix"/>
        <xs:element minOccurs="0" ref="caption"/>
      </xs:sequence>
      <xs:attributeGroup ref="mediaobject.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of mediaobject.element -->
  <xs:attributeGroup name="mediaobject.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="mediaobject.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of mediaobject.attlist -->
  <!-- end of mediaobject.module -->
  <xs:attributeGroup name="inlinemediaobject.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:An inline media object (video, audio, image, and so on). -->
  <xs:element name="inlinemediaobject" substitutionGroup="inlineobj.char.class">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="objectinfo"/>
        <xs:element maxOccurs="unbounded" ref="mediaobject.mix"/>
      </xs:sequence>
      <xs:attributeGroup ref="inlinemediaobject.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of inlinemediaobject.element -->
  <xs:attributeGroup name="inlinemediaobject.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="inlinemediaobject.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of inlinemediaobject.attlist -->
  <!-- end of inlinemediaobject.module -->
  <xs:attributeGroup name="videoobject.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A wrapper for video data and its associated meta-information. -->
  <xs:element name="videoobject" substitutionGroup="mediaobject.mix">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="objectinfo"/>
        <xs:element ref="videodata"/>
      </xs:sequence>
      <xs:attributeGroup ref="videoobject.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of videoobject.element -->
  <xs:attributeGroup name="videoobject.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="videoobject.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of videoobject.attlist -->
  <!-- end of videoobject.module -->
  <xs:attributeGroup name="audioobject.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A wrapper for audio data and its associated meta-information. -->
  <xs:element name="audioobject" substitutionGroup="mediaobject.mix">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="objectinfo"/>
        <xs:element ref="audiodata"/>
      </xs:sequence>
      <xs:attributeGroup ref="audioobject.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of audioobject.element -->
  <xs:attributeGroup name="audioobject.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="audioobject.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of audioobject.attlist -->
  <!-- end of audioobject.module -->
  <xs:attributeGroup name="imageobject.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A wrapper for image data and its associated meta-information. -->
  <xs:element name="imageobject" substitutionGroup="mediaobject.mix">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="objectinfo"/>
        <xs:element ref="imagedata"/>
      </xs:sequence>
      <xs:attributeGroup ref="imageobject.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of imageobject.element -->
  <xs:attributeGroup name="imageobject.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="imageobject.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of imageobject.attlist -->
  <!-- end of imageobject.module -->
  <xs:attributeGroup name="textobject.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:A wrapper for a text description of an object and its associated meta-information. -->
  <xs:element name="textobject" substitutionGroup="mediaobject.mix">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="objectinfo"/>
        <xs:choice>
          <xs:element ref="phrase"/>
          <xs:element ref="textdata"/>
          <xs:group maxOccurs="unbounded" ref="textobject.mix"/>
        </xs:choice>
      </xs:sequence>
      <xs:attributeGroup ref="textobject.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of textobject.element -->
  <xs:attributeGroup name="textobject.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="textobject.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of textobject.attlist -->
  <!-- end of textobject.module -->
  <xs:attributeGroup name="objectinfo.role.attrib">
    <xs:attributeGroup ref="role.attrib"/>
  </xs:attributeGroup>
  <!-- doc:Meta-information for an object. -->
  <xs:element name="objectinfo">
    <xs:complexType>
      <xs:group maxOccurs="unbounded" ref="info.class"/>
      <xs:attributeGroup ref="objectinfo.attlist"/>
    </xs:complexType>
  </xs:element>
  <!-- end of objectinfo.element -->
  <xs:attributeGroup name="objectinfo.attlist">
    <xs:attributeGroup ref="common.attrib"/>
    <xs:attributeGroup ref="objectinfo.role.attrib"/>
  </xs:attributeGroup>
  <!-- end of objectinfo.attlist -->
  <!-- end of objectinfo.module -->
  <!--
    EntityRef: Name of an external entity containing the content
    of the object data
  -->
  <!--
    FileRef: Filename, qualified by a pathname if desired,
    designating the file containing the content of the object data
  -->
  <!-- Format: Notation of the element content, if any -->
  <!-- SrcCredit: Information about the source of the image -->
  <xs:attributeGroup name="objectdata.attrib">
    <xs:attribute name="entityref" type="xs:ENTITY"/>
    <xs:attribute name="fileref"/>
    <xs:attribute name="forma