<!DOCTYPE xsd:schema SYSTEM
  "http://www.w3.org/2000/10/XMLSchema.dtd" [

<!ENTITY % p 'xsd:'>
<!ENTITY % s ':xsd'>
<!ENTITY % schemaAttrs "
	xmlns:db	CDATA	#IMPLIED
	xmlns:xml	CDATA	#IMPLIED
	xmlns:tbl	CDATA	#IMPLIED
">
]>

<xsd:schema xmlns:xsd='http://www.w3.org/2000/10/XMLSchema'
  targetNamespace='http://www.oasis-open.org/docbook/xmlschema/4.1.2'
  xmlns:db='http://www.oasis-open.org/docbook/xmlschema/4.1.2'
  xmlns:xml='http://www.w3.org/XML/1998/namespace'
  xmlns:tbl='http://www.oasis-open.org/tables/exchange/1.0'
  elementFormDefault='qualified'>

  <xsd:import namespace='http://www.oasis-open.org/tables/exchange/1.0'
              schemaLocation="dbtables.xsd"/>

<!-- ...................................................................... -->
<!-- DocBook XML Schema V4.1.2.3........................................... -->
<!-- ...................................................................... -->
<!-- Copyright 2000, Norman Walsh, Sun Microsystems.  Schema
     derived from DocBook DTD Copyright 1992-2000 HaL Computer....  -->

<!-- ...................................................................... -->
<!-- General-purpose semantics entities ................................... -->

<xsd:simpleType name='yesorno.attvals'>
  <xsd:restriction base='xsd:string'>
    <xsd:enumeration value='0'/>
    <xsd:enumeration value='1'/>
  </xsd:restriction>
</xsd:simpleType>

<!-- ...................................................................... -->
<!-- Entities for module inclusions ....................................... -->

<!--ENTITY % dbpool.redecl.module "IGNORE"-->

<!-- ...................................................................... -->
<!-- Entities for element classes and mixtures ............................ -->

<!-- "Ubiquitous" classes: ndxterm.class and beginpage -->

<!--ENTITY % local.ndxterm.class ""-->
<xsd:group name='ndxterm.class'>
  <xsd:choice>
    <xsd:element ref='db:indexterm'/>
    <!-- %local.ndxterm.class; -->
  </xsd:choice>
</xsd:group>


<!-- Object-level classes ................................................. -->

<!--ENTITY % local.list.class ""-->
<xsd:group name='list.class'>
  <xsd:choice>
    <xsd:element ref='db:calloutlist'/>
    <xsd:element ref='db:glosslist'/>
    <xsd:element ref='db:itemizedlist'/>
    <xsd:element ref='db:orderedlist'/>
    <xsd:element ref='db:segmentedlist'/>
    <xsd:element ref='db:simplelist'/>
    <xsd:element ref='db:variablelist'/>
    <!-- %local.list.class; -->
  </xsd:choice>
</xsd:group>


<!--ENTITY % local.admon.class ""-->
<xsd:group name='admon.class'>
  <xsd:choice>
    <xsd:element ref='db:caution'/>
    <xsd:element ref='db:important'/>
    <xsd:element ref='db:note'/>
    <xsd:element ref='db:tip'/>
    <xsd:element ref='db:warning'/>
    <!-- %local.admon.class; -->
  </xsd:choice>
</xsd:group>


<!--ENTITY % local.linespecific.class ""-->
<xsd:group name='linespecific.class'>
  <xsd:choice>
    <xsd:element ref='db:literallayout'/>
    <xsd:element ref='db:programlisting'/>
    <xsd:element ref='db:programlistingco'/>
    <xsd:element ref='db:screen'/>
    <xsd:element ref='db:screenco'/>
    <xsd:element ref='db:screenshot'/>
    <!-- %local.linespecific.class; -->
  </xsd:choice>
</xsd:group>


<!--ENTITY % local.method.synop.class ""-->
<xsd:group name='method.synop.class'>
  <xsd:choice>
    <xsd:element ref='db:constructorsynopsis'/>
    <xsd:element ref='db:destructorsynopsis'/>
    <xsd:element ref='db:methodsynopsis'/>
    <!-- %local.method.synop.class; -->
  </xsd:choice>
</xsd:group>


<!--ENTITY % local.synop.class ""-->
<xsd:group name='synop.class'>
  <xsd:choice>
    <xsd:element ref='db:synopsis'/>
    <xsd:element ref='db:cmdsynopsis'/>
    <xsd:element ref='db:funcsynopsis'/>
    <xsd:element ref='db:classsynopsis'/>
    <xsd:element ref='db:fieldsynopsis'/>
    <!-- %method.synop.class; -->
    <!-- %local.synop.class; -->
  </xsd:choice>
</xsd:group>


<!--ENTITY % local.para.class ""-->
<xsd:group name='para.class'>
  <xsd:choice>
    <xsd:element ref='db:formalpara'/>
    <xsd:element ref='db:para'/>
    <xsd:element ref='db:simpara'/>
    <!-- %local.para.class; -->
  </xsd:choice>
</xsd:group>


<!--ENTITY % local.informal.class ""-->
<xsd:group name='informal.class'>
  <xsd:choice>
    <xsd:element ref='db:address'/>
    <xsd:element ref='db:blockquote'/>
    <xsd:element ref='db:graphic'/>
    <xsd:element ref='db:graphicco'/>
    <xsd:element ref='db:mediaobject'/>
    <xsd:element ref='db:mediaobjectco'/>
    <xsd:element ref='db:informalequation'/>
    <xsd:element ref='db:informalexample'/>
    <xsd:element ref='db:informalfigure'/>
    <xsd:element ref='db:informaltable'/>
    <!-- %local.informal.class; -->
  </xsd:choice>
</xsd:group>


<!--ENTITY % local.formal.class ""-->
<xsd:group name='formal.class'>
  <xsd:choice>
    <xsd:element ref='db:equation'/>
    <xsd:element ref='db:example'/>
    <xsd:element ref='db:figure'/>
    <xsd:element ref='db:table'/>
    <!-- %local.formal.class; -->
  </xsd:choice>
</xsd:group>


<!-- 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. -->
<!--ENTITY % ebnf.block.hook ""-->

<!--ENTITY % local.compound.class ""-->
<xsd:group name='compound.class'>
  <xsd:choice>
    <xsd:element ref='db:msgset'/>
    <xsd:element ref='db:procedure'/>
    <xsd:element ref='db:sidebar'/>
    <xsd:element ref='db:qandaset'/>
    <!-- %ebnf.block.hook; -->
    <!-- %local.compound.class; -->
  </xsd:choice>
</xsd:group>


<!--ENTITY % local.genobj.class ""-->
<xsd:group name='genobj.class'>
  <xsd:choice>
    <xsd:element ref='db:anchor'/>
    <xsd:element ref='db:bridgehead'/>
    <xsd:element ref='db:remark'/>
    <xsd:element ref='db:highlights'/>
    <!-- %local.genobj.class; -->
  </xsd:choice>
</xsd:group>


<!--ENTITY % local.descobj.class ""-->
<xsd:group name='descobj.class'>
  <xsd:choice>
    <xsd:element ref='db:abstract'/>
    <xsd:element ref='db:authorblurb'/>
    <xsd:element ref='db:epigraph'/>
    <!-- %local.descobj.class; -->
  </xsd:choice>
</xsd:group>


<!-- Character-level classes .............................................. -->

<!--ENTITY % local.xref.char.class ""-->
<xsd:group name='xref.char.class'>
  <xsd:choice>
    <xsd:element ref='db:footnoteref'/>
    <xsd:element ref='db:xref'/>
    <!-- %local.xref.char.class; -->
  </xsd:choice>
</xsd:group>


<!--ENTITY % local.gen.char.class ""-->
<xsd:group name='gen.char.class'>
  <xsd:choice>
    <xsd:element ref='db:abbrev'/>
    <xsd:element ref='db:acronym'/>
    <xsd:element ref='db:citation'/>
    <xsd:element ref='db:citerefentry'/>
    <xsd:element ref='db:citetitle'/>
    <xsd:element ref='db:emphasis'/>
    <xsd:element ref='db:firstterm'/>
    <xsd:element ref='db:foreignphrase'/>
    <xsd:element ref='db:glossterm'/>
    <xsd:element ref='db:footnote'/>
    <xsd:element ref='db:phrase'/>
    <xsd:element ref='db:quote'/>
    <xsd:element ref='db:trademark'/>
    <xsd:element ref='db:wordasword'/>
    <!-- %local.gen.char.class; -->
  </xsd:choice>
</xsd:group>


<!--ENTITY % local.link.char.class ""-->
<xsd:group name='link.char.class'>
  <xsd:choice>
    <xsd:element ref='db:link'/>
    <xsd:element ref='db:olink'/>
    <xsd:element ref='db:ulink'/>
    <!-- %local.link.char.class; -->
  </xsd:choice>
</xsd:group>

<!-- 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. -->
<!--ENTITY % ebnf.inline.hook ""-->

<!--ENTITY % local.tech.char.class ""-->
<xsd:group name='tech.char.class'>
  <xsd:choice>
    <xsd:element ref='db:action'/>
    <xsd:element ref='db:application'/>
    <xsd:element ref='db:classname'/>
    <xsd:element ref='db:methodname'/>
    <xsd:element ref='db:interfacename'/>
    <xsd:element ref='db:exceptionname'/>
    <xsd:element ref='db:ooclass'/>
    <xsd:element ref='db:oointerface'/>
    <xsd:element ref='db:ooexception'/>
    <xsd:element ref='db:command'/>
    <xsd:element ref='db:computeroutput'/>
    <xsd:element ref='db:database'/>
    <xsd:element ref='db:email'/>
    <xsd:element ref='db:envar'/>
    <xsd:element ref='db:errorcode'/>
    <xsd:element ref='db:errorname'/>
    <xsd:element ref='db:errortype'/>
    <xsd:element ref='db:filename'/>
    <xsd:element ref='db:function'/>
    <xsd:element ref='db:guibutton'/>
    <xsd:element ref='db:guiicon'/>
    <xsd:element ref='db:guilabel'/>
    <xsd:element ref='db:guimenu'/>
    <xsd:element ref='db:guimenuitem'/>
    <xsd:element ref='db:guisubmenu'/>
    <xsd:element ref='db:hardware'/>
    <xsd:element ref='db:interface'/>
    <xsd:element ref='db:keycap'/>
    <xsd:element ref='db:keycode'/>
    <xsd:element ref='db:keycombo'/>
    <xsd:element ref='db:keysym'/>
    <xsd:element ref='db:literal'/>
    <xsd:element ref='db:constant'/>
    <xsd:element ref='db:markup'/>
    <xsd:element ref='db:medialabel'/>
    <xsd:element ref='db:menuchoice'/>
    <xsd:element ref='db:mousebutton'/>
    <xsd:element ref='db:option'/>
    <xsd:element ref='db:optional'/>
    <xsd:element ref='db:parameter'/>
    <xsd:element ref='db:prompt'/>
    <xsd:element ref='db:property'/>
    <xsd:element ref='db:replaceable'/>
    <xsd:element ref='db:returnvalue'/>
    <xsd:element ref='db:sgmltag'/>
    <xsd:element ref='db:structfield'/>
    <xsd:element ref='db:structname'/>
    <xsd:element ref='db:symbol'/>
    <xsd:element ref='db:systemitem'/>
    <xsd:element ref='db:token'/>
    <xsd:element ref='db:type'/>
    <xsd:element ref='db:userinput'/>
    <xsd:element ref='db:varname'/>
    <!-- %ebnf.inline.hook; -->
    <!-- %local.tech.char.class; -->
  </xsd:choice>
</xsd:group>


<!--ENTITY % local.base.char.class ""-->
<xsd:group name='base.char.class'>
  <xsd:choice>
    <xsd:element ref='db:anchor'/>
    <!-- %local.base.char.class; -->
  </xsd:choice>
</xsd:group>


<!--ENTITY % local.docinfo.char.class ""-->
<xsd:group name='docinfo.char.class'>
  <xsd:choice>
    <xsd:element ref='db:author'/>
    <xsd:element ref='db:authorinitials'/>
    <xsd:element ref='db:corpauthor'/>
    <xsd:element ref='db:modespec'/>
    <xsd:element ref='db:othercredit'/>
    <xsd:element ref='db:productname'/>
    <xsd:element ref='db:productnumber'/>
    <xsd:element ref='db:revhistory'/>
    <!-- %local.docinfo.char.class; -->
  </xsd:choice>
</xsd:group>


<!--ENTITY % local.other.char.class ""-->
<xsd:group name='other.char.class'>
  <xsd:choice>
    <xsd:element ref='db:remark'/>
    <xsd:element ref='db:subscript'/>
    <xsd:element ref='db:superscript'/>
    <!-- %local.other.char.class; -->
  </xsd:choice>
</xsd:group>


<!--ENTITY % local.inlineobj.char.class ""-->
<xsd:group name='inlineobj.char.class'>
  <xsd:choice>
    <xsd:element ref='db:inlinegraphic'/>
    <xsd:element ref='db:inlinemediaobject'/>
    <xsd:element ref='db:inlineequation'/>
    <!-- %local.inlineobj.char.class; -->
  </xsd:choice>
</xsd: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 -->

<!--[%dbpool.redecl.module;[-->
<!-- Defining rdbpool here makes some buggy XML parsers happy. -->
<!--ENTITY % rdbpool ""-->
<!--%rdbpool;-->
<!--end of dbpool.redecl.module-->
<!--] ]>-->

<!-- 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.
-->

<!--ENTITY % local.component.mix ""-->
<xsd:group name='component.mix'>
  <xsd:choice>
    <xsd:group ref='db:list.class'/>
    <xsd:group ref='db:admon.class'/>
    <xsd:group ref='db:linespecific.class'/>
    <xsd:group ref='db:synop.class'/>
    <xsd:group ref='db:para.class'/>
    <xsd:group ref='db:informal.class'/>
    <xsd:group ref='db:formal.class'/>
    <xsd:group ref='db:compound.class'/>
    <xsd:group ref='db:genobj.class'/>
    <xsd:group ref='db:descobj.class'/>
    <xsd:group ref='db:ndxterm.class'/>
    <xsd:element ref='db:beginpage'/>
    <!-- %local.component.mix; -->
  </xsd:choice>
</xsd:group>


<!--ENTITY % local.sidebar.mix ""-->
<xsd:group name='sidebar.mix'>
  <xsd:choice>
    <xsd:group ref='db:list.class'/>
    <xsd:group ref='db:admon.class'/>
    <xsd:group ref='db:linespecific.class'/>
    <xsd:group ref='db:synop.class'/>
    <xsd:group ref='db:para.class'/>
    <xsd:group ref='db:informal.class'/>
    <xsd:group ref='db:formal.class'/>
    <xsd:element ref='db:procedure'/>
    <xsd:group ref='db:genobj.class'/>
    <xsd:group ref='db:ndxterm.class'/>
    <xsd:element ref='db:beginpage'/>
    <!-- %local.sidebar.mix; -->
  </xsd:choice>
</xsd:group>


<!--ENTITY % local.qandaset.mix ""-->
<xsd:group name='qandaset.mix'>
  <xsd:choice>
    <xsd:group ref='db:list.class'/>
    <xsd:group ref='db:admon.class'/>
    <xsd:group ref='db:linespecific.class'/>
    <xsd:group ref='db:synop.class'/>
    <xsd:group ref='db:para.class'/>
    <xsd:group ref='db:informal.class'/>
    <xsd:group ref='db:formal.class'/>
    <xsd:element ref='db:procedure'/>
    <xsd:group ref='db:genobj.class'/>
    <xsd:group ref='db:ndxterm.class'/>
    <!-- %local.qandaset.mix; -->
  </xsd:choice>
</xsd:group>


<!--ENTITY % local.revdescription.mix ""-->
<xsd:group name='revdescription.mix'>
  <xsd:choice>
    <xsd:group ref='db:list.class'/>
    <xsd:group ref='db:admon.class'/>
    <xsd:group ref='db:linespecific.class'/>
    <xsd:group ref='db:synop.class'/>
    <xsd:group ref='db:para.class'/>
    <xsd:group ref='db:informal.class'/>
    <xsd:group ref='db:formal.class'/>
    <xsd:element ref='db:procedure'/>
    <xsd:group ref='db:genobj.class'/>
    <xsd:group ref='db:ndxterm.class'/>
    <!-- %local.revdescription.mix; -->
  </xsd:choice>
</xsd:group>


<!--ENTITY % local.footnote.mix ""-->
<xsd:group name='footnote.mix'>
  <xsd:choice>
    <xsd:group ref='db:list.class'/>
    <xsd:group ref='db:linespecific.class'/>
    <xsd:group ref='db:synop.class'/>
    <xsd:group ref='db:para.class'/>
    <xsd:group ref='db:informal.class'/>
    <!-- %local.footnote.mix; -->
  </xsd:choice>
</xsd:group>


<!--ENTITY % local.example.mix ""-->
<xsd:group name='example.mix'>
  <xsd:choice>
    <xsd:group ref='db:list.class'/>
    <xsd:group ref='db:linespecific.class'/>
    <xsd:group ref='db:synop.class'/>
    <xsd:group ref='db:para.class'/>
    <xsd:group ref='db:informal.class'/>
    <xsd:group ref='db:ndxterm.class'/>
    <xsd:element ref='db:beginpage'/>
    <!-- %local.example.mix; -->
  </xsd:choice>
</xsd:group>


<!--ENTITY % local.highlights.mix ""-->
<xsd:group name='highlights.mix'>
  <xsd:choice>
    <xsd:group ref='db:list.class'/>
    <xsd:group ref='db:admon.class'/>
    <xsd:group ref='db:para.class'/>
    <xsd:group ref='db:ndxterm.class'/>
    <!-- %local.highlights.mix; -->
  </xsd:choice>
</xsd:group>


<!-- %formal.class; is explicitly excluded from many contexts in which
     paragraphs are used -->
<!--ENTITY % local.para.mix ""-->
<xsd:group name='para.mix'>
  <xsd:choice>
    <xsd:group ref='db:list.class'/>
    <xsd:group ref='db:admon.class'/>
    <xsd:group ref='db:linespecific.class'/>
    <xsd:group ref='db:informal.class'/>
    <xsd:group ref='db:formal.class'/>
    <!-- %local.para.mix; -->
  </xsd:choice>
</xsd:group>


<!--ENTITY % local.admon.mix ""-->
<xsd:group name='admon.mix'>
  <xsd:choice>
    <xsd:group ref='db:list.class'/>
    <xsd:group ref='db:linespecific.class'/>
    <xsd:group ref='db:synop.class'/>
    <xsd:group ref='db:para.class'/>
    <xsd:group ref='db:informal.class'/>
    <xsd:group ref='db:formal.class'/>
    <xsd:element ref='db:procedure'/>
    <xsd:element ref='db:sidebar'/>
    <xsd:element ref='db:anchor'/>
    <xsd:element ref='db:bridgehead'/>
    <xsd:element ref='db:remark'/>
    <xsd:group ref='db:ndxterm.class'/>
    <xsd:element ref='db:beginpage'/>
    <!-- %local.admon.mix; -->
  </xsd:choice>
</xsd:group>


<!--ENTITY % local.figure.mix ""-->
<xsd:group name='figure.mix'>
  <xsd:choice>
    <xsd:group ref='db:linespecific.class'/>
    <xsd:group ref='db:synop.class'/>
    <xsd:group ref='db:informal.class'/>
    <xsd:group ref='db:ndxterm.class'/>
    <xsd:element ref='db:beginpage'/>
    <!-- %local.figure.mix; -->
  </xsd:choice>
</xsd:group>


<!--ENTITY % local.tabentry.mix ""-->
<xsd:group name='tabentry.mix'>
  <xsd:choice>
    <xsd:group ref='db:list.class'/>
    <xsd:group ref='db:admon.class'/>
    <xsd:group ref='db:linespecific.class'/>
    <xsd:group ref='db:para.class'/>
    <xsd:element ref='db:graphic'/>
    <xsd:element ref='db:mediaobject'/>
    <!-- %local.tabentry.mix; -->
  </xsd:choice>
</xsd:group>


<!--ENTITY % local.glossdef.mix ""-->
<xsd:group name='glossdef.mix'>
  <xsd:choice>
    <xsd:group ref='db:list.class'/>
    <xsd:group ref='db:linespecific.class'/>
    <xsd:group ref='db:synop.class'/>
    <xsd:group ref='db:para.class'/>
    <xsd:group ref='db:informal.class'/>
    <xsd:group ref='db:formal.class'/>
    <xsd:element ref='db:remark'/>
    <xsd:group ref='db:ndxterm.class'/>
    <xsd:element ref='db:beginpage'/>
    <!-- %local.glossdef.mix; -->
  </xsd:choice>
</xsd:group>


<!--ENTITY % local.legalnotice.mix ""-->
<xsd:group name='legalnotice.mix'>
  <xsd:choice>
    <xsd:group ref='db:list.class'/>
    <xsd:group ref='db:admon.class'/>
    <xsd:group ref='db:linespecific.class'/>
    <xsd:group ref='db:para.class'/>
    <xsd:element ref='db:blockquote'/>
    <xsd:group ref='db:ndxterm.class'/>
    <xsd:element ref='db:beginpage'/>
    <!-- %local.legalnotice.mix; -->
  </xsd:choice>
</xsd:group>


<!--ENTITY % local.textobject.mix ""-->
<xsd:group name='textobject.mix'>
  <xsd:choice>
    <xsd:group ref='db:list.class'/>
    <xsd:group ref='db:admon.class'/>
    <xsd:group ref='db:linespecific.class'/>
    <xsd:group ref='db:para.class'/>
    <xsd:element ref='db:blockquote'/>
    <!-- %local.textobject.mix; -->
  </xsd:choice>
</xsd:group>


<!--ENTITY % local.mediaobject.mix ""-->
<xsd:group name='mediaobject.mix'>
  <xsd:choice>
    <xsd:element ref='db:videoobject'/>
    <xsd:element ref='db:audioobject'/>
    <xsd:element ref='db:imageobject'/>
    <!-- %local.mediaobject.mix; -->
  </xsd:choice>
</xsd:group>


<!-- Character-level mixtures ............................................. -->

<!--
                    #PCD xref word link cptr base dnfo othr inob (synop)
para.char.mix         X    X    X    X    X    X    X    X    X
title.char.mix        X    X    X    X    X    X    X    X    X
ndxterm.char.mix      X    X    X    X    X    X    X    X    a
cptr.char.mix         X              X    X    X         X    a
smallcptr.char.mix    X                   b                   a
word.char.mix         X         c    X         X         X    a
docinfo.char.mix      X         d    X    b              X    a

a. Just InlineGraphic; no InlineEquation.
b. Just Replaceable; no other computer terms.
c. Just Emphasis and Trademark; no other word elements.
d. Just Acronym, Emphasis, and Trademark; no other word elements.
-->

<!-- The DocBook TC may produce an official forms module for DocBook. -->
<!-- This PE provides the hook by which it can be inserted into the DTD. -->
<!--ENTITY % forminlines.hook ""-->

<!--ENTITY % local.para.char.mix ""-->
<xsd:group name='para.char.mix'>
  <xsd:choice>
    <!-- #PCDATA -->
    <xsd:group ref='db:xref.char.class'/>
    <xsd:group ref='db:gen.char.class'/>
    <xsd:group ref='db:link.char.class'/>
    <xsd:group ref='db:tech.char.class'/>
    <xsd:group ref='db:base.char.class'/>
    <xsd:group ref='db:docinfo.char.class'/>
    <xsd:group ref='db:other.char.class'/>
    <xsd:group ref='db:inlineobj.char.class'/>
    <xsd:group ref='db:synop.class'/>
    <xsd:group ref='db:ndxterm.class'/>
    <xsd:element ref='db:beginpage'/>
    <!-- %local.para.char.mix; -->
  </xsd:choice>
</xsd:group>


<!--ENTITY % local.title.char.mix ""-->
<xsd:group name='title.char.mix'>
  <xsd:choice>
    <!-- #PCDATA -->
    <xsd:group ref='db:xref.char.class'/>
    <xsd:group ref='db:gen.char.class'/>
    <xsd:group ref='db:link.char.class'/>
    <xsd:group ref='db:tech.char.class'/>
    <xsd:group ref='db:base.char.class'/>
    <xsd:group ref='db:docinfo.char.class'/>
    <xsd:group ref='db:other.char.class'/>
    <xsd:group ref='db:inlineobj.char.class'/>
    <xsd:group ref='db:ndxterm.class'/>
    <!-- %local.title.char.mix; -->
  </xsd:choice>
</xsd:group>


<!--ENTITY % local.ndxterm.char.mix ""-->
<xsd:group name='ndxterm.char.mix'>
  <xsd:choice>
    <!-- #PCDATA -->
    <xsd:group ref='db:xref.char.class'/>
    <xsd:group ref='db:gen.char.class'/>
    <xsd:group ref='db:link.char.class'/>
    <xsd:group ref='db:tech.char.class'/>
    <xsd:group ref='db:base.char.class'/>
    <xsd:group ref='db:docinfo.char.class'/>
    <xsd:group ref='db:other.char.class'/>
    <xsd:element ref='db:inlinegraphic'/>
    <xsd:element ref='db:inlinemediaobject'/>
    <!-- %local.ndxterm.char.mix; -->
  </xsd:choice>
</xsd:group>


<!--ENTITY % local.cptr.char.mix ""-->
<xsd:group name='cptr.char.mix'>
  <xsd:choice>
    <!-- #PCDATA -->
    <xsd:group ref='db:link.char.class'/>
    <xsd:group ref='db:tech.char.class'/>
    <xsd:group ref='db:base.char.class'/>
    <xsd:group ref='db:other.char.class'/>
    <xsd:element ref='db:inlinegraphic'/>
    <xsd:element ref='db:inlinemediaobject'/>
    <xsd:group ref='db:ndxterm.class'/>
    <xsd:element ref='db:beginpage'/>
    <!-- %local.cptr.char.mix; -->
  </xsd:choice>
</xsd:group>


<!--ENTITY % local.smallcptr.char.mix ""-->
<xsd:group name='smallcptr.char.mix'>
  <xsd:choice>
    <!-- #PCDATA -->
    <xsd:element ref='db:replaceable'/>
    <xsd:element ref='db:inlinegraphic'/>
    <xsd:element ref='db:inlinemediaobject'/>
    <xsd:group ref='db:ndxterm.class'/>
    <xsd:element ref='db:beginpage'/>
    <!-- %local.smallcptr.char.mix; -->
  </xsd:choice>
</xsd:group>


<!--ENTITY % local.word.char.mix ""-->
<xsd:group name='word.char.mix'>
  <xsd:choice>
    <!-- #PCDATA -->
    <xsd:element ref='db:acronym'/>
    <xsd:element ref='db:emphasis'/>
    <xsd:element ref='db:trademark'/>
    <xsd:group ref='db:link.char.class'/>
    <xsd:group ref='db:base.char.class'/>
    <xsd:group ref='db:other.char.class'/>
    <xsd:element ref='db:inlinegraphic'/>
    <xsd:element ref='db:inlinemediaobject'/>
    <xsd:group ref='db:ndxterm.class'/>
    <xsd:element ref='db:beginpage'/>
    <!-- %local.word.char.mix; -->
  </xsd:choice>
</xsd:group>


<!--ENTITY % local.docinfo.char.mix ""-->
<xsd:group name='docinfo.char.mix'>
  <xsd:choice>
    <!-- #PCDATA -->
    <xsd:group ref='db:link.char.class'/>
    <xsd:element ref='db:emphasis'/>
    <xsd:element ref='db:trademark'/>
    <xsd:element ref='db:replaceable'/>
    <xsd:group ref='db:other.char.class'/>
    <xsd:element ref='db:inlinegraphic'/>
    <xsd:element ref='db:inlinemediaobject'/>
    <xsd:group ref='db:ndxterm.class'/>
    <!-- %local.docinfo.char.mix; -->
  </xsd:choice>
</xsd:group>

<!--ENTITY % bibliocomponent.mix (see Bibliographic section, below)-->
<!--ENTITY % person.ident.mix (see Bibliographic section, below)-->

<!-- ...................................................................... -->
<!-- Entities for content models .......................................... -->

<xsd:group name='formalobject.title.content'>
  <xsd:sequence>
    <xsd:element ref='db:title'/>
    <xsd:element ref='db:titleabbrev' minOccurs='0'/>
  </xsd:sequence>
</xsd:group>

<!-- ...................................................................... -->
<!-- Entities for attributes and attribute components ..................... -->

<!-- Effectivity attributes ............................................... -->

<!-- Arch: Computer or chip architecture to which element applies; no
	default -->
<xsd:attributeGroup name='arch.attrib'>
  <xsd:attribute name='arch' type='xsd:string'/>
</xsd:attributeGroup>

<!-- Condition: General-purpose effectivity attribute -->

<xsd:attributeGroup name='condition.attrib'>
  <xsd:attribute name='condition' type='xsd:string'/>
</xsd:attributeGroup>

<!-- Conformance: Standards conformance characteristics -->

<xsd:attributeGroup name='conformance.attrib'>
  <xsd:attribute name='conformance' type='xsd:NMTOKENS'/>
</xsd:attributeGroup>

<!-- OS: Operating system to which element applies; no default -->

<xsd:attributeGroup name='os.attrib'>
  <xsd:attribute name='os' type='xsd:string'/>
</xsd:attributeGroup>

<!-- Revision: Editorial revision to which element belongs; no default -->

<xsd:attributeGroup name='revision.attrib'>
  <xsd:attribute name='revision' type='xsd:string'/>
</xsd:attributeGroup>

<!-- Security: Security classification; no default -->

<xsd:attributeGroup name='security.attrib'>
  <xsd:attribute name='security' type='xsd:string'/>
</xsd:attributeGroup>

<!-- UserLevel: Level of user experience to which element applies; no
	default -->

<xsd:attributeGroup name='userlevel.attrib'>
  <xsd:attribute name='userlevel' type='xsd:string'/>
</xsd:attributeGroup>

<!-- Vendor: Computer vendor to which element applies; no default -->

<xsd:attributeGroup name='vendor.attrib'>
  <xsd:attribute name='vendor' type='xsd:string'/>
</xsd:attributeGroup>

<!--ENTITY % local.effectivity.attrib ""-->
<xsd:attributeGroup name='effectivity.attrib'>
  <xsd:attributeGroup ref='db:arch.attrib'/>
  <xsd:attributeGroup ref='db:condition.attrib'/>
  <xsd:attributeGroup ref='db:conformance.attrib'/>
  <xsd:attributeGroup ref='db:os.attrib'/>
  <xsd:attributeGroup ref='db:revision.attrib'/>
  <xsd:attributeGroup ref='db:security.attrib'/>
  <xsd:attributeGroup ref='db:userlevel.attrib'/>
  <xsd:attributeGroup ref='db:vendor.attrib'/>
  <!-- %local.effectivity.attrib; -->
</xsd:attributeGroup>

<!-- Common attributes .................................................... -->

<!-- Id: Unique identifier of element; no default -->

<xsd:attributeGroup name='id.attrib'>
  <xsd:attribute name='id' type='xsd:ID'/>
</xsd:attributeGroup>

<!-- Id: Unique identifier of element; a value must be supplied; no
	default -->

<xsd:attributeGroup name='idreq.attrib'>
  <xsd:attribute name='id' type='xsd:ID' use='required'/>
</xsd:attributeGroup>

<!-- Lang: Indicator of language in which element is written, for
	translation, character set management, etc.; no default -->

<xsd:attributeGroup name='lang.attrib'>
  <xsd:attribute name='lang' type='xsd:string'/>
</xsd:attributeGroup>

<!-- Remap: Previous role of element before conversion; no default -->

<xsd:attributeGroup name='remap.attrib'>
  <xsd:attribute name='remap' type='xsd:string'/>
</xsd:attributeGroup>

<!-- Role: New role of element in local environment; no default -->

<xsd:attributeGroup name='role.attrib'>
  <xsd:attribute name='role' type='xsd:string'/>
</xsd:attributeGroup>

<!-- XRefLabel: Alternate labeling string for XRef text generation;
	default is usually title or other appropriate label text already
	contained in element -->

<xsd:attributeGroup name='xreflabel.attrib'>
  <xsd:attribute name='xreflabel' type='xsd:string'/>
</xsd:attributeGroup>

<!-- RevisionFlag: Revision status of element; default is that element
	wasn't revised -->

<xsd:attributeGroup name='revisionflag.attrib'>
  <xsd:attribute name='revisionflag'>
    <xsd:simpleType>
      <xsd:restriction base='xsd:string'>
        <xsd:enumeration value='changed'/>
        <xsd:enumeration value='added'/>
        <xsd:enumeration value='deleted'/>
        <xsd:enumeration value='off'/>
      </xsd:restriction>
    </xsd:simpleType>
  </xsd:attribute>
</xsd:attributeGroup>

<!--ENTITY % local.common.attrib ""-->

<!-- Role is included explicitly on each element -->

<xsd:attributeGroup name='common.attrib'>
  <xsd:attributeGroup ref='db:id.attrib'/>
  <xsd:attributeGroup ref='db:lang.attrib'/>
  <xsd:attributeGroup ref='db:remap.attrib'/>
  <xsd:attributeGroup ref='db:xreflabel.attrib'/>
  <xsd:attributeGroup ref='db:revisionflag.attrib'/>
  <xsd:attributeGroup ref='db:effectivity.attrib'/>
  <!-- %local.common.attrib; -->
</xsd:attributeGroup>

<!-- Role is included explicitly on each element -->

<xsd:attributeGroup name='idreq.common.attrib'>
  <xsd:attributeGroup ref='db:idreq.attrib'/>
  <xsd:attributeGroup ref='db:lang.attrib'/>
  <xsd:attributeGroup ref='db:remap.attrib'/>
  <xsd:attributeGroup ref='db:xreflabel.attrib'/>
  <xsd:attributeGroup ref='db:revisionflag.attrib'/>
  <xsd:attributeGroup ref='db:effectivity.attrib'/>
  <!-- %local.common.attrib; -->
</xsd:attributeGroup>

<!-- Semi-common attributes and other attribute entities .................. -->

<!--ENTITY % local.graphics.attrib ""-->

<!-- 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 -->

<xsd:attributeGroup name='graphics.attrib'>
  <!-- FIXME: -->
  <!-- entityref	ENTITY		#IMPLIED -->
  <xsd:attribute name='fileref' type='xsd:string'/>
  <xsd:attribute name='format' type='xsd:NOTATION'/>
  <xsd:attribute name='srccredit' type='xsd:string'/>
  <xsd:attribute name='width' type='xsd:string'/>
  <xsd:attribute name='depth' type='xsd:string'/>
  <xsd:attribute name='align'>
    <xsd:simpleType>
      <xsd:restriction base='xsd:string'>
        <xsd:enumeration value='left'/>
        <xsd:enumeration value='right'/>
        <xsd:enumeration value='center'/>
      </xsd:restriction>
    </xsd:simpleType>
  </xsd:attribute>
  <xsd:attribute name='scale' type='xsd:string'/>
  <xsd:attribute name='scalefit' type='db:yesorno.attvals'/>
  <!-- %local.graphics.attrib;-->
</xsd:attributeGroup>

<!--ENTITY % local.keyaction.attrib ""-->

<!-- 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 -->

<xsd:attributeGroup name='keyaction.attrib'>
  <xsd:attribute name='action'>
    <xsd:simpleType>
      <xsd:restriction base='xsd:string'>
        <xsd:enumeration value='click'/>
        <xsd:enumeration value='double-click'/>
        <xsd:enumeration value='press'/>
        <xsd:enumeration value='seq'/>
        <xsd:enumeration value='simul'/>
        <xsd:enumeration value='other'/>
      </xsd:restriction>
    </xsd:simpleType>
  </xsd:attribute>
  <xsd:attribute name='otheraction' type='xsd:string'/>
  <!-- %local.keyaction.attrib; -->
</xsd:attributeGroup>

<!-- Label: Identifying number or string; default is usually the
	appropriate number or string autogenerated by a formatter -->

<xsd:attributeGroup name='label.attrib'>
  <xsd:attribute name='label' type='xsd:string'/>
</xsd:attributeGroup>

<!-- Format: whether element is assumed to contain significant white
	space -->

<xsd:attributeGroup name='linespecific.attrib'>
  <xsd:attribute name='format'>
    <xsd:simpleType>
      <xsd:restriction base='xsd:NOTATION'>
        <xsd:enumeration value='linespecific'/>
      </xsd:restriction>
    </xsd:simpleType>
  </xsd:attribute>

  <xsd:attribute name='linenumbering'>
    <xsd:simpleType>
      <xsd:restriction base='xsd:string'>
        <xsd:enumeration value='numbered'/>
        <xsd:enumeration value='unnumbered'/>
      </xsd:restriction>
    </xsd:simpleType>
  </xsd:attribute>
</xsd:attributeGroup>

<!-- Linkend: link to related information; no default -->

<xsd:attributeGroup name='linkend.attrib'>
  <xsd:attribute name='linkend' type='xsd:IDREF'/>
</xsd:attributeGroup>

<!-- Linkend: required link to related information -->

<xsd:attributeGroup name='linkendreq.attrib'>
  <xsd:attribute name='linkend' type='xsd:IDREF' use='required'/>
</xsd:attributeGroup>

<!-- Linkends: link to one or more sets of related information; no
	default -->

<xsd:attributeGroup name='linkends.attrib'>
  <xsd:attribute name='linkends' type='xsd:IDREFS'/>
</xsd:attributeGroup>

<!--ENTITY % local.mark.attrib ""-->
<xsd:attributeGroup name='mark.attrib'>
  <xsd:attribute name='mark' type='xsd:string'/>
  <!-- %local.mark.attrib; -->
</xsd:attributeGroup>

<!-- MoreInfo: whether element's content has an associated RefEntry -->

<xsd:attributeGroup name='moreinfo.attrib'>
  <xsd:attribute name='moreinfo' use='default' value='none'>
    <xsd:simpleType>
      <xsd:restriction base='xsd:string'>
        <xsd:enumeration value='refentry'/>
        <xsd:enumeration value='none'/>
      </xsd:restriction>
    </xsd:simpleType>
  </xsd:attribute>
</xsd:attributeGroup>

<!-- Pagenum: number of page on which element appears; no default -->

<xsd:attributeGroup name='pagenum.attrib'>
  <xsd:attribute name='pagenum' type='xsd:string'/>
</xsd:attributeGroup>

<!--ENTITY % local.status.attrib ""-->

<!-- Status: Editorial or publication status of the element
	it applies to, such as "in review" or "approved for distribution" -->

<xsd:attributeGroup name='status.attrib'>
  <xsd:attribute name='status' type='xsd:string'/>
  <!-- %local.status.attrib; -->
</xsd:attributeGroup>

<!-- Width: width of the longest line in the element to which it
	pertains, in number of characters -->

<xsd:attributeGroup name='width.attrib'>
  <xsd:attribute name='width' type='xsd:string'/>
</xsd:attributeGroup>

<!-- ...................................................................... -->
<!-- Title elements ....................................................... -->

<xsd:attributeGroup name='title.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='title' mixed='true'>
  <!-- (%title.char.mix;)* -->
  <xsd:choice minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:title.char.mix'/>
  </xsd:choice>

  <xsd:attributeGroup ref='db:pagenum.attrib'/>
  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:title.role.attrib'/>
  <!-- %local.title.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='titleabbrev.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='titleabbrev' mixed='true'>
  <xsd:choice minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='title.char.mix'/>
  </xsd:choice>
  <!-- (%title.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:titleabbrev.role.attrib'/>
  <!-- %local.titleabbrev.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='subtitle.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='subtitle' mixed='true'>
  <xsd:choice minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='title.char.mix'/>
  </xsd:choice>
  <!-- (%title.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:subtitle.role.attrib'/>
  <!-- %local.subtitle.attrib; -->
</xsd:complexType>

<!-- ...................................................................... -->
<!-- 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. -->

<xsd:group name='person.ident.mix'>
  <xsd:choice>
    <xsd:element ref='db:honorific'/>
    <xsd:element ref='db:firstname'/>
    <xsd:element ref='db:surname'/>
    <xsd:element ref='db:lineage'/>
    <xsd:element ref='db:othername'/>
    <xsd:element ref='db:affiliation'/>
    <xsd:element ref='db:authorblurb'/>
    <xsd:element ref='db:contrib'/>
    <!-- %local.person.ident.mix; -->
  </xsd:choice>
</xsd:group>

<xsd:group name='bibliocomponent.mix'>
  <xsd:choice>
    <xsd:element ref='db:abbrev'/>
    <xsd:element ref='db:abstract'/>
    <xsd:element ref='db:address'/>
    <xsd:element ref='db:artpagenums'/>
    <xsd:element ref='db:author'/>
    <xsd:element ref='db:authorgroup'/>
    <xsd:element ref='db:authorinitials'/>
    <xsd:element ref='db:bibliomisc'/>
    <xsd:element ref='db:biblioset'/>
    <xsd:element ref='db:collab'/>
    <xsd:element ref='db:confgroup'/>
    <xsd:element ref='db:contractnum'/>
    <xsd:element ref='db:contractsponsor'/>
    <xsd:element ref='db:copyright'/>
    <xsd:element ref='db:corpauthor'/>
    <xsd:element ref='db:corpname'/>
    <xsd:element ref='db:date'/>
    <xsd:element ref='db:edition'/>
    <xsd:element ref='db:editor'/>
    <xsd:element ref='db:invpartnumber'/>
    <xsd:element ref='db:isbn'/>
    <xsd:element ref='db:issn'/>
    <xsd:element ref='db:issuenum'/>
    <xsd:element ref='db:orgname'/>
    <xsd:element ref='db:othercredit'/>
    <xsd:element ref='db:pagenums'/>
    <xsd:element ref='db:printhistory'/>
    <xsd:element ref='db:productname'/>
    <xsd:element ref='db:productnumber'/>
    <xsd:element ref='db:pubdate'/>
    <xsd:element ref='db:publisher'/>
    <xsd:element ref='db:publishername'/>
    <xsd:element ref='db:pubsnumber'/>
    <xsd:element ref='db:releaseinfo'/>
    <xsd:element ref='db:revhistory'/>
    <xsd:element ref='db:seriesvolnums'/>
    <xsd:element ref='db:subtitle'/>
    <xsd:element ref='db:title'/>
    <xsd:element ref='db:titleabbrev'/>
    <xsd:element ref='db:volumenum'/>
    <xsd:element ref='db:citetitle'/>
    <xsd:group ref='db:person.ident.mix'/>
    <xsd:group ref='db:ndxterm.class'/>
    <!-- %local.bibliocomponent.mix -->
  </xsd:choice>
</xsd:group>


<xsd:attributeGroup name='biblioentry.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='biblioentry'>
  <xsd:choice minOccurs='1' maxOccurs='unbounded'>
    <xsd:element ref='db:articleinfo'/>
    <xsd:group ref='db:bibliocomponent.mix'/>
  </xsd:choice>
  <!-- ((articleinfo | (%bibliocomponent.mix;))+) -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:biblioentry.role.attrib'/>
  <!-- %local.biblioentry.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='bibliomixed.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='bibliomixed' mixed='true'>
  <xsd:choice minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:bibliocomponent.mix'/>
    <xsd:element ref='db:bibliomset'/>
  </xsd:choice>
  <!-- (#PCDATA | %bibliocomponent.mix; | bibliomset)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:bibliomixed.role.attrib'/>
  <!-- %local.bibliomixed.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='articleinfo.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='infoContentModel'>
  <xsd:choice minOccurs='1' maxOccurs='unbounded'>
    <xsd:element ref='db:graphic'/>
    <xsd:element ref='db:mediaobject'/>
    <xsd:element ref='db:legalnotice'/>
    <xsd:element ref='db:modespec'/>
    <xsd:element ref='db:subjectset'/>
    <xsd:element ref='db:keywordset'/>
    <xsd:element ref='db:itermset'/>
    <xsd:group ref='db:bibliocomponent.mix'/>
  </xsd:choice>
  <!-- ((graphic | mediaobject | legalnotice | modespec
	| subjectset | keywordset | itermset | %bibliocomponent.mix;)+) -->
</xsd:complexType>

<xsd:complexType name='articleinfo'>
  <xsd:complexContent>
    <xsd:extension base='db:infoContentModel'>
      <xsd:attributeGroup ref='db:common.attrib'/>
      <xsd:attributeGroup ref='db:articleinfo.role.attrib'/>
      <!-- %local.articleinfo.attrib; -->
    </xsd:extension>
  </xsd:complexContent>
</xsd:complexType>

<xsd:attributeGroup name='biblioset.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='biblioset'>
  <xsd:choice minOccurs='1' maxOccurs='unbounded'>
    <xsd:group ref='db:bibliocomponent.mix'/>
  </xsd:choice>
  <!-- ((%bibliocomponent.mix;)+) -->

  <!-- Relation: Relationship of elements contained within BiblioSet -->
  <xsd:attribute name='relation' type='xsd:string'/>

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:biblioset.role.attrib'/>
  <!-- %local.biblioset.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='bibliomset.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='bibliomset' mixed='true'>
  <xsd:choice minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:bibliocomponent.mix'/>
    <xsd:element ref='db:bibliomset'/>
  </xsd:choice>
  <!-- (#PCDATA | %bibliocomponent.mix; | bibliomset)* -->

  <!-- Relation: Relationship of elements contained within BiblioMSet -->
  <xsd:attribute name='relation' type='xsd:string'/>

  <xsd:attributeGroup ref='db:bibliomset.role.attrib'/>
  <xsd:attributeGroup ref='db:common.attrib'/>
  <!-- %local.bibliomset.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='bibliomisc.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='bibliomisc' mixed='true'>
  <xsd:choice minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:para.char.mix'/>
  </xsd:choice>
  <!-- (%para.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:bibliomisc.role.attrib'/>
  <!-- %local.bibliomisc.attrib; -->
</xsd:complexType>

<!-- ...................................................................... -->
<!-- Subject, Keyword, and ITermSet elements .............................. -->

<xsd:attributeGroup name='subjectset.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='subjectset'>
  <xsd:sequence minOccurs='1' maxOccurs='unbounded'>
    <xsd:element ref='db:subject'/>
  </xsd:sequence>
  <!-- (subject+) -->

  <!-- Scheme: Controlled vocabulary employed in SubjectTerms -->
  <xsd:attribute name='scheme' type='xsd:NMTOKEN'/>

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:subjectset.role.attrib'/>
  <!-- %local.subjectset.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='subject.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='subject'>
  <xsd:sequence minOccurs='1' maxOccurs='unbounded'>
    <xsd:element ref='db:subjectterm'/>
  </xsd:sequence>
  <!-- (subjectterm+) -->

  <!-- Weight: Ranking of this group of SubjectTerms relative
       to others, 0 is low, no highest value specified -->
  <xsd:attribute name='weight' type='xsd:string'/>

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:subject.role.attrib'/>
  <!-- %local.subject.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='subjectterm.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='subjectterm'>
  <!-- (#PCDATA) -->
  <xsd:simpleContent>
    <xsd:extension base='xsd:string'>
      <xsd:attributeGroup ref='db:common.attrib'/>
      <xsd:attributeGroup ref='db:subjectterm.role.attrib'/>
      <!-- %local.subjectterm.attrib; -->
    </xsd:extension>
  </xsd:simpleContent>
</xsd:complexType>

<xsd:attributeGroup name='keywordset.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='keywordset'>
  <xsd:sequence minOccurs='1' maxOccurs='unbounded'>
    <xsd:element ref='db:keyword'/>
  </xsd:sequence>
  <!-- (keyword+) -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:keywordset.role.attrib'/>
  <!-- %local.keywordset.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='keyword.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='keyword'>
  <!-- (#PCDATA) -->
  <xsd:simpleContent>
    <xsd:extension base='xsd:string'>
      <xsd:attributeGroup ref='db:common.attrib'/>
      <xsd:attributeGroup ref='db:keyword.role.attrib'/>
      <!-- %local.keyword.attrib; -->
    </xsd:extension>
  </xsd:simpleContent>
</xsd:complexType>

<xsd:attributeGroup name='itermset.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='itermset'>
  <xsd:sequence minOccurs='1' maxOccurs='unbounded'>
    <xsd:element ref='db:indexterm'/>
  </xsd:sequence>
  <!-- (indexterm+) -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:itermset.role.attrib'/>
  <!-- %local.itermset.attrib; -->
</xsd:complexType>

<!-- ...................................................................... -->
<!-- Compound (section-ish) elements ...................................... -->

<!-- Message set ...................... -->

<xsd:attributeGroup name='msgset.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='msgset'>
  <xsd:sequence>
    <xsd:group ref='db:formalobject.title.content' minOccurs='0' maxOccurs='1'/>
    <xsd:choice>
      <xsd:element ref='db:msgentry' minOccurs='1' maxOccurs='unbounded'/>
      <xsd:element ref='db:simplemsgentry' minOccurs='1' maxOccurs='unbounded'/>
    </xsd:choice>
  </xsd:sequence>
  <!-- ((%formalobject.title.content;)?, (msgentry+|simplemsgentry+)) -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:msgset.role.attrib'/>
  <!-- %local.msgset.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='msgentry.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='msgentry'>
  <xsd:sequence>
    <xsd:element ref='db:msg' minOccurs='1' maxOccurs='unbounded'/>
    <xsd:element ref='db:msginfo' minOccurs='0' maxOccurs='1'/>
    <xsd:element ref='db:msgexplan' minOccurs='0' maxOccurs='unbounded'/>
  </xsd:sequence>
  <!-- (msg+, msginfo?, msgexplan*) -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:msgentry.role.attrib'/>
  <!-- %local.msgentry.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='simplemsgentry.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='simplemsgentry'>
  <xsd:sequence>
    <xsd:element ref='db:msgtext'/>
    <xsd:element ref='db:msgexplan'/>
  </xsd:sequence>
  <!-- (msgtext, msgexplan) -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:simplemsgentry.role.attrib'/>
  <!-- %local.simplemsgentry.attrib; -->
  <xsd:attribute name='audience' type='xsd:string'/>
  <xsd:attribute name='level' type='xsd:string'/>
  <xsd:attribute name='origin' type='xsd:string'/>
</xsd:complexType>

<xsd:attributeGroup name='msg.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='msg'>
  <xsd:sequence>
    <xsd:element ref='db:title' minOccurs='0' maxOccurs='1'/>
    <xsd:element ref='db:msgmain'/>
    <xsd:choice minOccurs='0' maxOccurs='unbounded'>
      <xsd:element ref='db:msgsub'/>
      <xsd:element ref='db:msgrel'/>
    </xsd:choice>
  </xsd:sequence>
  <!-- (title?, msgmain, (msgsub | msgrel)*) -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:msg.role.attrib'/>
  <!-- %local.msg.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='msgmain.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='msgmain'>
  <xsd:sequence>
    <xsd:element ref='db:title' minOccurs='0' maxOccurs='1'/>
    <xsd:element ref='db:msgtext'/>
  </xsd:sequence>
  <!-- (title?, msgtext) -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:msgmain.role.attrib'/>
  <!-- %local.msgmain.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='msgsub.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='msgsub'>
  <xsd:sequence>
    <xsd:element ref='db:title' minOccurs='0' maxOccurs='1'/>
    <xsd:element ref='db:msgtext'/>
  </xsd:sequence>
  <!-- (title?, msgtext) -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:msgsub.role.attrib'/>
  <!-- %local.msgsub.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='msgrel.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='msgrel'>
  <xsd:sequence>
    <xsd:element ref='db:title' minOccurs='0' maxOccurs='1'/>
    <xsd:element ref='db:msgtext'/>
  </xsd:sequence>
  <!-- (title?, msgtext) -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:msgrel.role.attrib'/>
  <!-- %local.msgrel.attrib; -->
</xsd:complexType>

<!-- MsgText (defined in the Inlines section, below)-->

<xsd:attributeGroup name='msginfo.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='msginfo'>
  <xsd:choice minOccurs='0' maxOccurs='unbounded'>
    <xsd:element ref='db:msglevel'/>
    <xsd:element ref='db:msgorig'/>
    <xsd:element ref='db:msgaud'/>
  </xsd:choice>
  <!-- ((msglevel | msgorig | msgaud)*) -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:msginfo.role.attrib'/>
  <!-- %local.msginfo.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='msglevel.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='msglevel' mixed='true'>
  <xsd:choice minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:smallcptr.char.mix'/>
  </xsd:choice>
  <!-- (%smallcptr.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:msglevel.role.attrib'/>
  <!-- %local.msglevel.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='msgorig.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='msgorig' mixed='true'>
  <xsd:choice minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:smallcptr.char.mix'/>
  </xsd:choice>
  <!-- (%smallcptr.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:msgorig.role.attrib'/>
  <!-- %local.msgorig.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='msgaud.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='msgaud' mixed='true'>
  <xsd:choice minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:para.char.mix'/>
  </xsd:choice>
  <!-- (%para.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:msgaud.role.attrib'/>
  <!-- %local.msgaud.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='msgexplan.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='msgexplan'>
  <xsd:sequence>
    <xsd:element ref='db:title' minOccurs='0' maxOccurs='1'/>
    <xsd:choice minOccurs='0' maxOccurs='unbounded'>
      <xsd:group ref='db:component.mix'/>
    </xsd:choice>
  </xsd:sequence>
  <!-- (title?, (%component.mix;)+) -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:msgexplan.role.attrib'/>
  <!-- %local.msgexplan.attrib; -->
</xsd:complexType>

<!-- QandASet ........................ -->

<xsd:attributeGroup name='qandset.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='qandaset'>
  <xsd:sequence>
    <xsd:group ref='db:formalobject.title.content' minOccurs='0' maxOccurs='1'/>
    <xsd:group ref='db:qandaset.mix' minOccurs='0' maxOccurs='unbounded'/>
    <xsd:choice>
      <xsd:element ref='db:qandadiv' minOccurs='1' maxOccurs='unbounded'/>
      <xsd:element ref='db:qandaentry' minOccurs='1' maxOccurs='unbounded'/>
    </xsd:choice>
  </xsd:sequence>
  <!-- ((%formalobject.title.content;)?,
			(%qandaset.mix;)*,
                        (qandadiv+|qandaentry+)) -->

  <xsd:attribute name='defaultlabel'>
    <xsd:simpleType>
      <xsd:restriction base='xsd:string'>
        <xsd:enumeration value='qanda'/>
        <xsd:enumeration value='number'/>
        <xsd:enumeration value='none'/>
      </xsd:restriction>
    </xsd:simpleType>
  </xsd:attribute>

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:qandset.role.attrib'/>
  <!-- %local.qandset.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='qandadiv.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='qandadiv'>
  <xsd:sequence>
    <xsd:group ref='db:formalobject.title.content' minOccurs='0' maxOccurs='1'/>
    <xsd:group ref='db:qandaset.mix' minOccurs='0' maxOccurs='unbounded'/>
    <xsd:choice>
      <xsd:element ref='db:qandadiv' minOccurs='1' maxOccurs='unbounded'/>
      <xsd:element ref='db:qandaentry' minOccurs='1' maxOccurs='unbounded'/>
    </xsd:choice>
  </xsd:sequence>
  <!-- ((%formalobject.title.content;)?,
			(%qandaset.mix;)*,
			(qandadiv+|qandaentry+)) -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:qandadiv.role.attrib'/>
  <!-- %local.qandadiv.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='qandaentry.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='qandaentry'>
  <xsd:sequence>
    <xsd:element ref='db:revhistory' minOccurs='0' maxOccurs='1'/>
    <xsd:element ref='db:question'/>
    <xsd:element ref='db:answer' minOccurs='0' maxOccurs='unbounded'/>
  </xsd:sequence>
  <!-- (revhistory?, question, answer*) -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:qandaentry.role.attrib'/>
  <!-- %local.qandaentry.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='question.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='question'>
  <xsd:sequence>
    <xsd:element ref='db:label' minOccurs='0' maxOccurs='1'/>
    <xsd:group ref='db:qandaset.mix' minOccurs='1' maxOccurs='unbounded'/>
  </xsd:sequence>
  <!-- (label?, (%qandaset.mix;)+) -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:question.role.attrib'/>
  <!-- %local.question.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='answer.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='answer'>
  <xsd:sequence>
    <xsd:element ref='db:label' minOccurs='0' maxOccurs='1'/>
    <xsd:group ref='db:qandaset.mix' minOccurs='0' maxOccurs='unbounded'/>
    <xsd:element ref='db:qandaentry' minOccurs='0' maxOccurs='unbounded'/>
  </xsd:sequence>
  <!-- (label?, (%qandaset.mix;)*, qandaentry*) -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:answer.role.attrib'/>
  <!-- %local.answer.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='label.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='label' mixed='true'>
  <xsd:sequence>
    <xsd:group ref='db:word.char.mix' minOccurs='0' maxOccurs='unbounded'/>
  </xsd:sequence>
  <!-- (%word.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:label.role.attrib'/>
  <!-- %local.label.attrib; -->
</xsd:complexType>

<!-- Procedure ........................ -->

<xsd:attributeGroup name='procedure.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='procedure'>
  <xsd:sequence>
    <xsd:group ref='db:formalobject.title.content' minOccurs='0' maxOccurs='1'/>
    <xsd:group ref='db:component.mix' minOccurs='0' maxOccurs='unbounded'/>
    <xsd:element ref='db:step' minOccurs='1' maxOccurs='unbounded'/>
  </xsd:sequence>
  <!-- ((%formalobject.title.content;)?,
	(%component.mix;)*, step+) -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:procedure.role.attrib'/>
  <!-- %local.procedure.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='step.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='step'>
  <xsd:sequence>
    <xsd:element ref='db:title' minOccurs='0' maxOccurs='1'/>
    <xsd:choice>
      <xsd:sequence>
        <xsd:group ref='db:component.mix' minOccurs='1' maxOccurs='unbounded'/>
        <xsd:sequence minOccurs='0' maxOccurs='1'>
          <xsd:element ref='db:substeps'/>
          <xsd:group ref='db:component.mix' minOccurs='0' maxOccurs='unbounded'/>
        </xsd:sequence>
      </xsd:sequence>
      <xsd:sequence>
        <xsd:element ref='db:substeps'/>
        <xsd:group ref='db:component.mix' minOccurs='0' maxOccurs='unbounded'/>
      </xsd:sequence>
    </xsd:choice>
  </xsd:sequence>
  <!-- (title?, (((%component.mix;)+, (substeps,
		(%component.mix;)*)?) | (substeps, (%component.mix;)*))) -->

  <!-- Performance: Whether the Step must be performed -->
  <!-- not #REQUIRED! -->
  <xsd:attribute name='performance'>
    <xsd:simpleType>
      <xsd:restriction base='xsd:string'>
        <xsd:enumeration value='optional'/>
        <xsd:enumeration value='required'/>
      </xsd:restriction>
    </xsd:simpleType>
  </xsd:attribute>

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:step.role.attrib'/>
  <!-- %local.step.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='substeps.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='substeps'>
  <xsd:sequence>
    <xsd:element ref='db:step' minOccurs='1' maxOccurs='unbounded'/>
  </xsd:sequence>
  <!-- (step+) -->

  <!-- Performance: whether entire set of substeps must be performed -->
  <!-- not #REQUIRED! -->
  <xsd:attribute name='performance'>
    <xsd:simpleType>
      <xsd:restriction base='xsd:string'>
        <xsd:enumeration value='optional'/>
        <xsd:enumeration value='required'/>
      </xsd:restriction>
    </xsd:simpleType>
  </xsd:attribute>

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:substeps.role.attrib'/>
  <!-- %local.substeps.attrib; -->
</xsd:complexType>

<!-- Sidebar .......................... -->

<xsd:attributeGroup name='sidebarinfo.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='sidebarinfo'>
  <xsd:complexContent>
    <xsd:extension base='db:infoContentModel'>
      <xsd:attributeGroup ref='db:common.attrib'/>
      <xsd:attributeGroup ref='db:sidebarinfo.role.attrib'/>
      <!-- %local.articleinfo.attrib; -->
    </xsd:extension>
  </xsd:complexContent>
</xsd:complexType>

<xsd:attributeGroup name='sidebar.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='sidebar'>
  <xsd:sequence>
    <xsd:element ref='db:sidebarinfo' minOccurs='0' maxOccurs='1'/>
    <xsd:group ref='db:formalobject.title.content' minOccurs='0' maxOccurs='1'/>
    <xsd:group ref='db:sidebar.mix' minOccurs='1' maxOccurs='unbounded'/>
  </xsd:sequence>
  <!-- (sidebarinfo?,
                   (%formalobject.title.content;)?,
                   (%sidebar.mix;)+) -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:sidebar.role.attrib'/>
  <!-- %local.sidebar.attrib; -->
</xsd:complexType>

<!-- ...................................................................... -->
<!-- Paragraph-related elements ........................................... -->

<xsd:attributeGroup name='abstract.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='abstract'>
  <xsd:sequence>
    <xsd:element ref='db:title' minOccurs='0' maxOccurs='1'/>
    <xsd:group ref='db:para.class' minOccurs='1' maxOccurs='unbounded'/>
  </xsd:sequence>
  <!-- (title?, (%para.class;)+) -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:abstract.role.attrib'/>
  <!-- %local.abstract.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='authorblurb.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='authorblurb'>
  <xsd:sequence>
    <xsd:element ref='db:title' minOccurs='0' maxOccurs='1'/>
    <xsd:group ref='db:para.class' minOccurs='1' maxOccurs='unbounded'/>
  </xsd:sequence>
  <!-- (title?, (%para.class;)+) -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:authorblurb.role.attrib'/>
  <!-- %local.authorblurb.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='blockquote.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='blockquote'>
  <xsd:sequence>
    <xsd:element ref='db:title' minOccurs='0' maxOccurs='1'/>
    <xsd:element ref='db:attribution' minOccurs='0' maxOccurs='1'/>
    <xsd:group ref='db:component.mix' minOccurs='1' maxOccurs='unbounded'/>
  </xsd:sequence>
  <!-- (title?, attribution?, (%component.mix;)+) -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:blockquote.role.attrib'/>
  <!-- %local.blockquote.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='attribution.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='attribution' mixed='true'>
  <xsd:sequence>
    <xsd:group ref='db:para.char.mix' minOccurs='0' maxOccurs='unbounded'/>
  </xsd:sequence>
  <!-- (%para.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:attribution.role.attrib'/>
  <!-- %local.attribution.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='bridgehead.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='bridgehead' mixed='true'>
  <xsd:sequence>
    <xsd:group ref='db:title.char.mix' minOccurs='0' maxOccurs='unbounded'/>
  </xsd:sequence>
  <!-- (%title.char.mix;)* -->

  <!-- Renderas: Indicates the format in which the BridgeHead
       should appear -->
  <xsd:attribute name='renderas'>
    <xsd:simpleType>
      <xsd:restriction base='xsd:string'>
        <xsd:enumeration value='other'/>
        <xsd:enumeration value='sect1'/>
        <xsd:enumeration value='sect2'/>
        <xsd:enumeration value='sect3'/>
        <xsd:enumeration value='sect4'/>
        <xsd:enumeration value='sect5'/>
      </xsd:restriction>
    </xsd:simpleType>
  </xsd:attribute>

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:bridgehead.role.attrib'/>
  <!-- %local.bridgehead.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='remark.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='remark' mixed='true'>
  <xsd:sequence>
    <xsd:group ref='db:para.char.mix' minOccurs='0' maxOccurs='unbounded'/>
  </xsd:sequence>
  <!-- (%para.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:remark.role.attrib'/>
  <!-- %local.remark.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='epigraph.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='epigraph'>
  <xsd:sequence>
    <xsd:element ref='db:attribution' minOccurs='0' maxOccurs='1'/>
    <xsd:group ref='db:para.class' minOccurs='1' maxOccurs='unbounded'/>
  </xsd:sequence>
  <!-- (attribution?, (%para.class;)+) -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:epigraph.role.attrib'/>
  <!-- %local.epigraph.attrib; -->
</xsd:complexType>
<!-- Attribution (defined above)-->

<xsd:attributeGroup name='footnote.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='footnote'>
  <xsd:sequence>
    <xsd:group ref='db:footnote.mix' minOccurs='1' maxOccurs='unbounded'/>
  </xsd:sequence>
  <!-- ((%footnote.mix;)+) -->

  <xsd:attributeGroup ref='db:label.attrib'/>
  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:footnote.role.attrib'/>
  <!-- %local.footnote.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='highlights.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='highlights'>
  <xsd:sequence>
    <xsd:group ref='db:highlights.mix' minOccurs='1' maxOccurs='unbounded'/>
  </xsd:sequence>
  <!-- ((%highlights.mix;)+) -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:highlights.role.attrib'/>
  <!-- %local.highlights.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='formalpara.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='formalpara'>
  <xsd:sequence>
    <xsd:element ref='db:title'/>
    <xsd:group ref='db:ndxterm.class' minOccurs='0' maxOccurs='unbounded'/>
    <xsd:element ref='db:para'/>
  </xsd:sequence>
  <!-- (title, (%ndxterm.class;)*, para) -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:formalpara.role.attrib'/>
  <!-- %local.formalpara.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='para.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='para' mixed='true'>
  <xsd:choice minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:para.char.mix'/>
    <xsd:group ref='db:para.mix'/>
  </xsd:choice>
  <!-- (%para.char.mix; | %para.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:para.role.attrib'/>
  <!-- %local.para.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='simpara.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='simpara' mixed='true'>
  <xsd:sequence>
    <xsd:group ref='db:para.char.mix' minOccurs='0' maxOccurs='unbounded'/>
  </xsd:sequence>
  <!-- (%para.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:simpara.role.attrib'/>
  <!-- %local.simpara.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='admon.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='admonitionType'>
  <xsd:sequence>
    <xsd:element ref='db:title'/>
    <xsd:group ref='db:admon.mix' minOccurs='1' maxOccurs='unbounded'/>
  </xsd:sequence>
  <!-- (title?, (%admon.mix;)+) -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:admon.role.attrib'/>
  <!-- %local.admon.attrib; -->
</xsd:complexType>

<!-- ...................................................................... -->
<!-- Lists ................................................................ -->

<!-- GlossList ........................ -->

<xsd:attributeGroup name='glosslist.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='glosslist'>
  <xsd:sequence>
    <xsd:element ref='db:glossentry' minOccurs='1' maxOccurs='unbounded'/>
  </xsd:sequence>
  <!-- (glossentry+) -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:glosslist.role.attrib'/>
  <!-- %local.glosslist.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='glossentry.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='glossentry'>
  <xsd:sequence>
    <xsd:element ref='db:glossterm'/>
    <xsd:element ref='db:acronym' minOccurs='0' maxOccurs='1'/>
    <xsd:element ref='db:abbrev' minOccurs='0' maxOccurs='1'/>
    <xsd:group ref='db:ndxterm.class' minOccurs='0' maxOccurs='unbounded'/>
    <xsd:element ref='db:revhistory' minOccurs='0' maxOccurs='1'/>
    <xsd:choice>
      <xsd:element ref='db:glosssee'/>
      <xsd:element ref='db:glossdef' minOccurs='1' maxOccurs='unbounded'/>
    </xsd:choice>
  </xsd:sequence>
  <!-- (glossterm, acronym?, abbrev?,
                      (%ndxterm.class;)*,
                      revhistory?, (glosssee|glossdef+)) -->

  <!-- SortAs: String by which the GlossEntry is to be sorted
       (alphabetized) in lieu of its proper content -->
  <xsd:attribute name='sortas' type='xsd:string'/>

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:glossentry.role.attrib'/>
  <!-- %local.glossentry.attrib; -->
</xsd:complexType>

<!-- GlossTerm (defined in the Inlines section, below)-->
<xsd:attributeGroup name='glossdef.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='glossdef'>
  <xsd:sequence>
    <xsd:group ref='db:glossdef.mix' minOccurs='1' maxOccurs='unbounded'/>
    <xsd:element ref='db:glossseealso' minOccurs='1' maxOccurs='unbounded'/>
  </xsd:sequence>
  <!-- ((%glossdef.mix;)+, glossseealso*) -->

  <!-- Subject: List of subjects; keywords for the definition -->
  <xsd:attribute name='subject' type='xsd:string'/>

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:glossdef.role.attrib'/>
  <!-- %local.glossdef.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='glosssee.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='glosssee' mixed='true'>
  <xsd:sequence>
    <xsd:group ref='db:para.char.mix' minOccurs='0' maxOccurs='unbounded'/>
  </xsd:sequence>
  <!-- (%para.char.mix;)* -->

  <!-- OtherTerm: Reference to the GlossEntry whose GlossTerm
       should be displayed at the point of the GlossSee -->
  <!-- FIXME: restrict to glossentry -->
  <xsd:attribute name='otherterm' type='xsd:IDREF'/>

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:glosssee.role.attrib'/>
  <!-- %local.glosssee.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='glossseealso.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='glossseealso' mixed='true'>
  <xsd:sequence>
    <xsd:group ref='db:para.char.mix' minOccurs='0' maxOccurs='unbounded'/>
  </xsd:sequence>
  <!-- (%para.char.mix;)* -->

  <!-- OtherTerm: Reference to the GlossEntry whose GlossTerm
       should be displayed at the point of the GlossSeeAlso -->
  <!-- FIXME: restrict to glossentry -->
  <xsd:attribute name='otherterm' type='xsd:IDREF'/>

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:glossseealso.role.attrib'/>
  <!-- %local.glossseealso.attrib; -->
</xsd:complexType>

<!-- ItemizedList and OrderedList ..... -->

<xsd:attributeGroup name='itemizedlist.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='itemizedlist'>
  <xsd:sequence>
    <xsd:group ref='db:formalobject.title.content' minOccurs='0' maxOccurs='1'/>
    <xsd:element ref='db:listitem' minOccurs='1' maxOccurs='unbounded'/>
  </xsd:sequence>
  <!-- ((%formalobject.title.content;)?, listitem+) -->

  <!-- Spacing: Whether the vertical space in the list should be
       compressed -->
  <xsd:attribute name='spacing'>
    <xsd:simpleType>
      <xsd:restriction base='xsd:string'>
        <xsd:enumeration value='normal'/>
        <xsd:enumeration value='compact'/>
      </xsd:restriction>
    </xsd:simpleType>
  </xsd:attribute>

  <!-- Mark: Keyword, e.g., bullet, dash, checkbox, none;
       list of keywords and defaults are implementation specific -->
  <xsd:attributeGroup ref='db:mark.attrib'/>
  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:itemizedlist.role.attrib'/>
  <!-- %local.itemizedlist.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='orderedlist.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='orderedlist'>
  <xsd:sequence>
    <xsd:group ref='db:formalobject.title.content' minOccurs='0' maxOccurs='1'/>
    <xsd:element ref='db:listitem' minOccurs='1' maxOccurs='unbounded'/>
  </xsd:sequence>
  <!-- ((%formalobject.title.content;)?, listitem+) -->

  <!-- Numeration: Style of ListItem numbered; default is expected
       to be Arabic -->
  <xsd:attribute name='numeration'>
    <xsd:simpleType>
      <xsd:restriction base='xsd:string'>
        <xsd:enumeration value='arabic'/>
        <xsd:enumeration value='upperalpha'/>
        <xsd:enumeration value='loweralpha'/>
        <xsd:enumeration value='upperroman'/>
        <xsd:enumeration value='lowerroman'/>
      </xsd:restriction>
    </xsd:simpleType>
  </xsd:attribute>

  <!-- 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) -->
  <xsd:attribute name='inheritnum' use='default' value='ignore'>
    <xsd:simpleType>
      <xsd:restriction base='xsd:string'>
        <xsd:enumeration value='inherit'/>
        <xsd:enumeration value='ignore'/>
      </xsd:restriction>
    </xsd:simpleType>
  </xsd:attribute>

  <!-- Continuation: Where list numbering begins afresh (Restarts,
       the default) or continues that of the immediately preceding
       list (Continues) -->
  <xsd:attribute name='continuation' use='default' value='restarts'>
    <xsd:simpleType>
      <xsd:restriction base='xsd:string'>
        <xsd:enumeration value='continues'/>
        <xsd:enumeration value='restarts'/>
      </xsd:restriction>
    </xsd:simpleType>
  </xsd:attribute>

  <!-- Spacing: Whether the vertical space in the list should be
       compressed -->
  <xsd:attribute name='spacing'>
    <xsd:simpleType>
      <xsd:restriction base='xsd:string'>
        <xsd:enumeration value='normal'/>
        <xsd:enumeration value='compact'/>
      </xsd:restriction>
    </xsd:simpleType>
  </xsd:attribute>

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:orderedlist.role.attrib'/>
  <!-- %local.orderedlist.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='listitem.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='listitem'>
  <xsd:sequence>
    <xsd:group ref='db:component.mix' minOccurs='1' maxOccurs='unbounded'/>
  </xsd:sequence>
  <!-- ((%component.mix;)+) -->

  <!-- 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 -->
  <xsd:attribute name='override' type='xsd:string'/>

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:listitem.role.attrib'/>
  <!-- %local.listitem.attrib; -->
</xsd:complexType>

<!-- SegmentedList .................... -->
<xsd:attributeGroup name='segmentedlist.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='segmentedlist'>
  <xsd:sequence>
    <xsd:group ref='db:formalobject.title.content' minOccurs='0' maxOccurs='1'/>
    <xsd:element ref='db:segtitle' minOccurs='2' maxOccurs='unbounded'/>
    <xsd:element ref='db:seglistitem' minOccurs='1' maxOccurs='unbounded'/>
  </xsd:sequence>
  <!-- ((%formalobject.title.content;)?,
                         segtitle, segtitle+,
                         seglistitem+) -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:segmentedlist.role.attrib'/>
  <!-- %local.segmentedlist.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='segtitle.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='segtitle' mixed='true'>
  <xsd:sequence>
    <xsd:group ref='db:title.char.mix' minOccurs='0' maxOccurs='unbounded'/>
  </xsd:sequence>
  <!-- (%title.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:segtitle.role.attrib'/>
  <!-- %local.segtitle.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='seglistitem.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='seglistitem'>
  <xsd:sequence>
    <xsd:element ref='db:seg' minOccurs='2' maxOccurs='unbounded'/>
  </xsd:sequence>
  <!-- (seg, seg+) -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:seglistitem.role.attrib'/>
  <!-- %local.seglistitem.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='seg.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='seg' mixed='true'>
  <xsd:sequence>
    <xsd:group ref='db:para.char.mix' minOccurs='0' maxOccurs='unbounded'/>
  </xsd:sequence>
  <!-- (%para.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:seg.role.attrib'/>
  <!-- %local.seg.attrib; -->
</xsd:complexType>

<!-- SimpleList ....................... -->

<xsd:attributeGroup name='simplelist.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='simplelist'>
  <xsd:sequence>
    <xsd:element ref='db:member' minOccurs='1' maxOccurs='unbounded'/>
  </xsd:sequence>
  <!-- (member+) -->

  <!-- Columns: The number of columns the array should contain -->
  <xsd:attribute name='columns' type='xsd:integer'/>

  <!-- 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. -->
  <xsd:attribute name='type' use='default' value='vert'>
    <xsd:simpleType>
      <xsd:restriction base='xsd:string'>
        <xsd:enumeration value='inline'/>
        <xsd:enumeration value='vert'/>
        <xsd:enumeration value='horiz'/>
      </xsd:restriction>
    </xsd:simpleType>
  </xsd:attribute>

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:simplelist.role.attrib'/>
  <!-- %local.simplelist.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='member.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='member' mixed='true'>
  <xsd:sequence>
    <xsd:group ref='db:para.char.mix' minOccurs='0' maxOccurs='unbounded'/>
  </xsd:sequence>
  <!-- (%para.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:member.role.attrib'/>
  <!-- %local.member.attrib; -->
</xsd:complexType>

<!-- VariableList ..................... -->

<xsd:attributeGroup name='variablelist.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='variablelist'>
  <xsd:sequence>
    <xsd:group ref='db:formalobject.title.content' minOccurs='0' maxOccurs='1'/>
    <xsd:element ref='db:varlistentry'  minOccurs='1' maxOccurs='unbounded'/>
  </xsd:sequence>
  <!-- ((%formalobject.title.content;)?, varlistentry+) -->

  <!-- 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. -->
  <xsd:attribute name='termlength' type='xsd:string'/>

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:variablelist.role.attrib'/>
  <!-- %local.variablelist.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='varlistentry.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='varlistentry'>
  <xsd:sequence>
    <xsd:element ref='db:term'  minOccurs='1' maxOccurs='unbounded'/>
    <xsd:element ref='db:listitem'/>
  </xsd:sequence>
  <!-- (term+, listitem) -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:varlistentry.role.attrib'/>
  <!-- %local.varlistentry.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='term.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='term' mixed='true'>
  <xsd:sequence>
    <xsd:group ref='db:para.char.mix' minOccurs='0' maxOccurs='unbounded'/>
  </xsd:sequence>
  <!-- (%para.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:term.role.attrib'/>
  <!-- %local.term.attrib; -->
</xsd:complexType>

<!-- ListItem (defined above)-->

<!-- CalloutList ...................... -->

<xsd:attributeGroup name='calloutlist.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='calloutlist'>
  <xsd:sequence>
    <xsd:group ref='db:formalobject.title.content' minOccurs='0' maxOccurs='1'/>
    <xsd:element ref='db:callout'  minOccurs='1' maxOccurs='unbounded'/>
  </xsd:sequence>
  <!-- ((%formalobject.title.content;)?, callout+) -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:calloutlist.role.attrib'/>
  <!-- %local.calloutlist.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='callout.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='callout'>
  <xsd:sequence>
    <xsd:group ref='db:component.mix' minOccurs='1' maxOccurs='unbounded'/>
  </xsd:sequence>
  <!-- ((%component.mix;)+) -->

  <!-- AreaRefs: IDs of one or more Areas or AreaSets described
       by this Callout -->
  <xsd:attribute name='arearefs' type='xsd:IDREFS'/>

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:callout.role.attrib'/>
  <!-- %local.callout.attrib; -->
</xsd:complexType>

<!-- ...................................................................... -->
<!-- Objects .............................................................. -->

<!-- Examples etc. .................... -->

<xsd:attributeGroup name='example.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='example'>
  <xsd:sequence>
    <xsd:group ref='db:formalobject.title.content' minOccurs='0' maxOccurs='1'/>
    <xsd:group ref='db:example.mix'  minOccurs='1' maxOccurs='unbounded'/>
  </xsd:sequence>
  <!-- ((%formalobject.title.content;), (%example.mix;)+) -->

  <xsd:attributeGroup ref='db:label.attrib'/>
  <xsd:attributeGroup ref='db:width.attrib'/>
  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:example.role.attrib'/>
  <!-- %local.example.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='informalexample.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='informalexample'>
  <xsd:sequence>
    <xsd:group ref='db:example.mix'  minOccurs='1' maxOccurs='unbounded'/>
  </xsd:sequence>
  <!-- ((%example.mix;)+) -->

  <xsd:attributeGroup ref='db:width.attrib'/>
  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:informalexample.role.attrib'/>
  <!-- %local.informalexample.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='programlistingco.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='programlistingco'>
  <xsd:sequence>
    <xsd:element ref='db:areaspec'/>
    <xsd:element ref='db:programlisting'/>
    <xsd:element ref='db:calloutlist' minOccurs='0' maxOccurs='unbounded'/>
  </xsd:sequence>
  <!-- (areaspec, programlisting, calloutlist*) -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:programlistingco.role.attrib'/>
  <!-- %local.programlistingco.attrib; -->
</xsd:complexType>
<!-- CalloutList (defined above in Lists)-->

<xsd:attributeGroup name='areaspec.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='areaspec'>
  <xsd:choice minOccurs='1' maxOccurs='unbounded'>
    <xsd:element ref='db:area'/>
    <xsd:element ref='db:areaset'/>
  </xsd:choice>
  <!-- ((area|areaset)+) -->

  <!-- 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) -->
  <xsd:attribute name='units'>
    <xsd:simpleType>
      <xsd:restriction base='xsd:string'>
        <xsd:enumeration value='calspair'/>
        <xsd:enumeration value='linecolumn'/>
        <xsd:enumeration value='linerange'/>
        <xsd:enumeration value='linecolumnpair'/>
        <xsd:enumeration value='other'/>
      </xsd:restriction>
    </xsd:simpleType>
  </xsd:attribute>

  <!-- OtherUnits: User-defined units -->
  <xsd:attribute name='otherunits' type='xsd:NMTOKEN'/>

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:areaspec.role.attrib'/>
  <!-- %local.areaspec.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='area.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='area'>
  <!-- EMPTY -->
  <xsd:complexContent>
    <xsd:restriction base='xsd:anyType'>
      <!-- bug number/symbol override or initialization -->
      <!-- to any related information -->
      <xsd:attributeGroup ref='db:label.attrib'/>

      <!-- Units: unit of measure in which coordinates in this
           area are expressed; inherits from AreaSet and AreaSpec -->
      <xsd:attribute name='units'>
        <xsd:simpleType>
          <xsd:restriction base='xsd:string'>
            <xsd:enumeration value='calspair'/>
            <xsd:enumeration value='linecolumn'/>
            <xsd:enumeration value='linerange'/>
            <xsd:enumeration value='linecolumnpair'/>
            <xsd:enumeration value='other'/>
          </xsd:restriction>
        </xsd:simpleType>
      </xsd:attribute>

      <!-- OtherUnits: User-defined units -->
      <xsd:attribute name='otherunits' type='xsd:NMTOKEN'/>

      <xsd:attributeGroup ref='db:linkends.attrib'/>
      <xsd:attribute name='coords' type='xsd:string' use='required'/>
      <xsd:attributeGroup ref='db:idreq.common.attrib'/>
      <xsd:attributeGroup ref='db:area.role.attrib'/>
      <!-- %local.area.attrib; -->
    </xsd:restriction>
  </xsd:complexContent>
</xsd:complexType>

<xsd:attributeGroup name='areaset.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='areaset'>
  <xsd:sequence>
    <xsd:element ref='db:area' minOccurs='1' maxOccurs='unbounded'/>
  </xsd:sequence>
  <!-- (area+) -->

  <!-- bug number/symbol override or initialization -->
  <xsd:attributeGroup ref='db:label.attrib'/>

  <!-- Units: unit of measure in which coordinates in this
       area are expressed; inherits from AreaSet and AreaSpec -->
  <xsd:attribute name='units'>
    <xsd:simpleType>
      <xsd:restriction base='xsd:string'>
        <xsd:enumeration value='calspair'/>
        <xsd:enumeration value='linecolumn'/>
        <xsd:enumeration value='linerange'/>
        <xsd:enumeration value='linecolumnpair'/>
        <xsd:enumeration value='other'/>
      </xsd:restriction>
    </xsd:simpleType>
  </xsd:attribute>

  <!-- OtherUnits: User-defined units -->
  <xsd:attribute name='otherunits' type='xsd:NMTOKEN'/>

  <xsd:attribute name='coords' type='xsd:string' use='required'/>

  <xsd:attributeGroup ref='db:idreq.common.attrib'/>
  <xsd:attributeGroup ref='db:areaset.role.attrib'/>
  <!-- %local.areaset.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='programlisting.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='programlisting' mixed='true'>
  <xsd:choice minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:para.char.mix'/>
    <xsd:element ref='db:co'/>
    <xsd:element ref='db:lineannotation'/>
  </xsd:choice>
  <!-- (%para.char.mix; | co | lineannotation)* -->

  <xsd:attributeGroup ref='db:width.attrib'/>
  <xsd:attributeGroup ref='db:linespecific.attrib'/>
  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:programlisting.role.attrib'/>
  <!-- %local.programlisting.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='literallayout.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='literallayout' mixed='true'>
  <xsd:choice minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:para.char.mix'/>
    <xsd:element ref='db:co'/>
    <xsd:element ref='db:lineannotation'/>
  </xsd:choice>
  <!-- (%para.char.mix; | lineannotation | co)* -->

  <xsd:attribute name='class' use='default' value='normal'>
    <xsd:simpleType>
      <xsd:restriction base='xsd:string'>
        <xsd:enumeration value='monospaced'/>
        <xsd:enumeration value='normal'/>
      </xsd:restriction>
    </xsd:simpleType>
  </xsd:attribute>

  <xsd:attributeGroup ref='db:width.attrib'/>
  <xsd:attributeGroup ref='db:linespecific.attrib'/>
  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:literallayout.role.attrib'/>
  <!-- %local.literallayout.attrib; -->
</xsd:complexType>

<!-- LineAnnotation (defined in the Inlines section, below)-->

<xsd:attributeGroup name='screenco.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='screenco'>
  <xsd:sequence>
    <xsd:element ref='db:areaspec'/>
    <xsd:element ref='db:screen'/>
    <xsd:element ref='db:calloutlist' minOccurs='0' maxOccurs='unbounded'/>
  </xsd:sequence>
  <!-- (areaspec, screen, calloutlist*) -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:screenco.role.attrib'/>
  <!-- %local.screenco.attrib; -->
</xsd:complexType>

<!-- AreaSpec (defined above)-->
<!-- CalloutList (defined above in Lists)-->

<xsd:attributeGroup name='screen.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='screen' mixed='true'>
  <xsd:choice minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:para.char.mix'/>
    <xsd:element ref='db:co'/>
    <xsd:element ref='db:lineannotation'/>
  </xsd:choice>
  <!-- (%para.char.mix; | co | lineannotation)* -->

  <xsd:attributeGroup ref='db:width.attrib'/>
  <xsd:attributeGroup ref='db:linespecific.attrib'/>
  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:screen.role.attrib'/>
  <!-- %local.screen.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='screenshot.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='screenshot'>
  <xsd:sequence>
    <xsd:element ref='db:screeninfo' minOccurs='0' maxOccurs='1'/>
    <xsd:choice>
      <xsd:element ref='db:graphic'/>
      <xsd:element ref='db:graphicco'/>
      <xsd:element ref='db:mediaobject'/>
      <xsd:element ref='db:mediaobjectco'/>
    </xsd:choice>
  </xsd:sequence>
  <!-- (screeninfo?,
                      (graphic|graphicco
                      |mediaobject|mediaobjectco)) -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:screenshot.role.attrib'/>
  <!-- %local.screenshot.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='screeninfo.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='screeninfo' mixed='true'>
  <xsd:choice minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:para.char.mix'/>
  </xsd:choice>
  <!-- (%para.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:screeninfo.role.attrib'/>
  <!-- %local.screeninfo.attrib; -->
</xsd:complexType>

<!-- Figures etc. ..................... -->

<xsd:attributeGroup name='figure.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='figure'>
  <xsd:sequence>
    <xsd:group ref='db:formalobject.title.content' minOccurs='0' maxOccurs='1'/>
    <xsd:choice minOccurs='1' maxOccurs='unbounded'>
      <xsd:group ref='db:figure.mix'/>
      <xsd:group ref='db:link.char.class'/>
    </xsd:choice>
  </xsd:sequence>
  <!-- ((%formalobject.title.content;), (%figure.mix; |
		%link.char.class;)+) -->

  <!-- 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) -->
  <xsd:attribute name='float' type='db:yesorno.attvals' use='default' value='0'/>
  <xsd:attribute name='pgwide' type='db:yesorno.attvals'/>
  <xsd:attributeGroup ref='db:label.attrib'/>
  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:figure.role.attrib'/>
  <!-- %local.figure.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='informalfigure.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='informalfigure'>
  <xsd:choice minOccurs='1' maxOccurs='unbounded'>
    <xsd:group ref='db:figure.mix'/>
    <xsd:group ref='db:link.char.class'/>
  </xsd:choice>
  <!-- ((%figure.mix; | %link.char.class;)+) -->

  <!-- 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) -->
  <xsd:attribute name='float' type='db:yesorno.attvals' use='default' value='0'/>
  <xsd:attribute name='pgwide' type='db:yesorno.attvals'/>
  <xsd:attributeGroup ref='db:label.attrib'/>
  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:informalfigure.role.attrib'/>
  <!-- %local.informalfigure.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='graphicco.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='graphicco'>
  <xsd:sequence>
    <xsd:element ref='db:areaspec'/>
    <xsd:element ref='db:graphic'/>
    <xsd:element ref='db:calloutlist' minOccurs='0' maxOccurs='unbounded'/>
  </xsd:sequence>
  <!-- (areaspec, graphic, calloutlist*) -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:graphicco.role.attrib'/>
  <!-- %local.graphicco.attrib; -->
</xsd:complexType>

<!-- AreaSpec (defined above in Examples)-->
<!-- CalloutList (defined above in Lists)-->

<!-- Graphical data can be the content of Graphic, or you can reference
     an external file either as an entity (Entitref) or a filename
     (Fileref). -->

<xsd:attributeGroup name='graphic.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='graphic'>
  <!-- EMPTY -->
  <xsd:complexContent>
    <xsd:restriction base='xsd:anyType'>
      <xsd:attributeGroup ref='db:graphics.attrib'/>
      <xsd:attributeGroup ref='db:common.attrib'/>
      <xsd:attributeGroup ref='db:graphic.role.attrib'/>
      <!-- %local.graphic.attrib; -->
    </xsd:restriction>
  </xsd:complexContent>
</xsd:complexType>

<xsd:attributeGroup name='inlinegraphic.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='inlinegraphic'>
  <!-- EMPTY -->
  <xsd:complexContent>
    <xsd:restriction base='xsd:anyType'>
      <xsd:attributeGroup ref='db:graphics.attrib'/>
      <xsd:attributeGroup ref='db:common.attrib'/>
      <xsd:attributeGroup ref='db:inlinegraphic.role.attrib'/>
      <!-- %local.inlinegraphic.attrib; -->
    </xsd:restriction>
  </xsd:complexContent>
</xsd:complexType>

<xsd:attributeGroup name='mediaobject.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='mediaobject'>
  <xsd:sequence>
    <xsd:element ref='db:objectinfo' minOccurs='0' maxOccurs='1'/>
    <xsd:group ref='db:mediaobject.mix'/>
    <xsd:choice minOccurs='0' maxOccurs='unbounded'>
      <xsd:group ref='db:mediaobject.mix'/>
      <xsd:element ref='db:textobject'/>
    </xsd:choice>
    <xsd:element ref='db:caption' minOccurs='0' maxOccurs='1'/>
  </xsd:sequence>
  <!-- (objectinfo?,
                           (%mediaobject.mix;),
			   (%mediaobject.mix;|textobject)*,
			   caption?) -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:mediaobject.role.attrib'/>
  <!-- %local.mediaobject.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='inlinemediaobject.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='inlinemediaobject'>
  <xsd:sequence>
    <xsd:element ref='db:objectinfo' minOccurs='0' maxOccurs='1'/>
    <xsd:group ref='db:mediaobject.mix'/>
    <xsd:choice minOccurs='0' maxOccurs='unbounded'>
      <xsd:group ref='db:mediaobject.mix'/>
      <xsd:element ref='db:textobject'/>
    </xsd:choice>
  </xsd:sequence>
  <!-- (objectinfo?,
                	         (%mediaobject.mix;),
				 (%mediaobject.mix;|textobject)*) -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:inlinemediaobject.role.attrib'/>
  <!-- %local.inlinemediaobject.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='videoobject.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='videoobject'>
  <xsd:sequence>
    <xsd:element ref='db:objectinfo' minOccurs='0' maxOccurs='1'/>
    <xsd:element ref='db:videodata'/>
  </xsd:sequence>
  <!-- (objectinfo?, videodata) -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:videoobject.role.attrib'/>
  <!-- %local.videoobject.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='audioobject.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='audioobject'>
  <xsd:sequence>
    <xsd:element ref='db:objectinfo' minOccurs='0' maxOccurs='1'/>
    <xsd:element ref='db:audiodata'/>
  </xsd:sequence>
  <!-- (objectinfo?, audiodata) -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:audioobject.role.attrib'/>
  <!-- %local.audioobject.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='imageobject.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='imageobject'>
  <xsd:sequence>
    <xsd:element ref='db:objectinfo' minOccurs='0' maxOccurs='1'/>
    <xsd:element ref='db:imagedata'/>
  </xsd:sequence>
  <!-- (objectinfo?, imagedata) -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:imageobject.role.attrib'/>
  <!-- %local.imageobject.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='textobject.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='textobject'>
  <xsd:sequence>
    <xsd:element ref='db:objectinfo' minOccurs='0' maxOccurs='1'/>
    <xsd:choice>
      <xsd:element ref='db:phrase'/>
      <xsd:group ref='db:textobject.mix' minOccurs='1' maxOccurs='unbounded'/>
    </xsd:choice>
  </xsd:sequence>
  <!-- (objectinfo?, (phrase|(%textobject.mix;)+)) -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:textobject.role.attrib'/>
  <!-- %local.textobject.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='objectinfo.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='objectinfo'>
  <xsd:complexContent>
    <xsd:extension base='db:infoContentModel'>
      <xsd:attributeGroup ref='db:common.attrib'/>
      <xsd:attributeGroup ref='db:objectinfo.role.attrib'/>
      <!-- %local.objectinfo.attrib; -->
    </xsd:extension>
  </xsd:complexContent>
</xsd:complexType>

<!--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-->
<xsd:attributeGroup name='objectdata.attrib'>
  <!-- FIXME: -->
  <!-- entityref	ENTITY		#IMPLIED -->
  <xsd:attribute name='fileref' type='xsd:string'/>
  <xsd:attribute name='format' type='xsd:NOTATION'/>
  <xsd:attribute name='srccredit' type='xsd:string'/>
  <!-- %local.objectdata.attrib;-->
</xsd:attributeGroup>

<xsd:attributeGroup name='videodata.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='videodata'>
  <!-- EMPTY -->
  <xsd:complexContent>
    <xsd:restriction base='xsd:anyType'>
      <!--Width: Same as CALS reprowid (desired width)-->
      <xsd:attribute name='width' type='xsd:string'/>

      <!--Depth: Same as CALS reprodep (desired depth)-->
      <xsd:attribute name='depth' type='xsd:string'/>

      <!--Align: Same as CALS hplace with 'none' removed; #IMPLIED means
          application-specific-->
      <xsd:attribute name='align'>
        <xsd:simpleType>
          <xsd:restriction base='xsd:string'>
            <xsd:enumeration value='left'/>
            <xsd:enumeration value='right'/>
            <xsd:enumeration value='center'/>
          </xsd:restriction>
        </xsd:simpleType>
      </xsd:attribute>

      <!--Scale: Conflation of CALS hscale and vscale-->
      <xsd:attribute name='scale' type='xsd:string'/>

      <!--Scalefit: Same as CALS scalefit-->
      <xsd:attribute name='scalefit' type='db:yesorno.attvals'/>

      <xsd:attributeGroup ref='db:common.attrib'/>
      <xsd:attributeGroup ref='db:objectdata.attrib'/>
      <!-- %local.videodata.attrib; -->
    </xsd:restriction>
  </xsd:complexContent>
</xsd:complexType>

<xsd:attributeGroup name='audiodata.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='audiodata'>
  <!-- EMPTY -->
  <xsd:complexContent>
    <xsd:restriction base='xsd:anyType'>
      <xsd:attributeGroup ref='db:common.attrib'/>
      <xsd:attributeGroup ref='db:objectdata.attrib'/>
      <!-- %local.audiodata.attrib; -->
      <xsd:attributeGroup ref='db:audiodata.role.attrib'/>
    </xsd:restriction>
  </xsd:complexContent>
</xsd:complexType>

<xsd:attributeGroup name='imagedata.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='imagedata'>
  <!-- EMPTY -->
  <xsd:complexContent>
    <xsd:restriction base='xsd:anyType'>
      <!--Width: Same as CALS reprowid (desired width)-->
      <xsd:attribute name='width' type='xsd:string'/>

      <!--Depth: Same as CALS reprodep (desired depth)-->
      <xsd:attribute name='depth' type='xsd:string'/>

      <!--Align: Same as CALS hplace with 'none' removed; #IMPLIED means
          application-specific-->
      <xsd:attribute name='align'>
        <xsd:simpleType>
          <xsd:restriction base='xsd:string'>
            <xsd:enumeration value='left'/>
            <xsd:enumeration value='right'/>
            <xsd:enumeration value='center'/>
          </xsd:restriction>
        </xsd:simpleType>
      </xsd:attribute>

      <!--Scale: Conflation of CALS hscale and vscale-->
      <xsd:attribute name='scale' type='xsd:string'/>

      <!--Scalefit: Same as CALS scalefit-->
      <xsd:attribute name='scalefit' type='db:yesorno.attvals'/>

      <xsd:attributeGroup ref='db:common.attrib'/>
      <xsd:attributeGroup ref='db:objectdata.attrib'/>
      <xsd:attributeGroup ref='db:imagedata.role.attrib'/>
      <!-- %local.videodata.attrib; -->
    </xsd:restriction>
  </xsd:complexContent>
</xsd:complexType>

<xsd:attributeGroup name='caption.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='caption'>
  <xsd:sequence>
    <xsd:group ref='db:textobject' minOccurs='0' maxOccurs='unbounded'/>
  </xsd:sequence>

  <xsd:attributeGroup ref='db:common.attrib'/>
  <!-- %local.caption.attrib; -->
  <xsd:attributeGroup ref='db:caption.role.attrib'/>
</xsd:complexType>

<xsd:attributeGroup name='mediaobjectco.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='mediaobjectco'>
  <xsd:sequence>
    <xsd:element ref='db:objectinfo' minOccurs='0' maxOccurs='1'/>
    <xsd:element ref='db:imageobjectco'/>
    <xsd:choice minOccurs='0' maxOccurs='unbounded'>
      <xsd:element ref='db:imageobjectco'/>
      <xsd:element ref='db:textobject'/>
    </xsd:choice>
  </xsd:sequence>
  <!-- (objectinfo?, imageobjectco,
			   (imageobjectco|textobject)*) -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:mediaobjectco.role.attrib'/>
  <!-- %local.mediaobjectco.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='imageobjectco.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='imageobjectco'>
  <xsd:sequence>
    <xsd:element ref='db:areaspec'/>
    <xsd:element ref='db:imageobject'/>
    <xsd:element ref='db:calloutlist' minOccurs='0' maxOccurs='unbounded'/>
  </xsd:sequence>
  <!-- (areaspec, imageobject, calloutlist*) -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:imageobjectco.role.attrib'/>
  <!-- %local.imageobjectco.attrib; -->
</xsd:complexType>

<!-- Equations ........................ -->

<!-- This PE provides a mechanism for replacing equation content, -->
<!-- perhaps adding a new or different model (e.g., MathML) -->

<xsd:group name='equation.content'>
  <xsd:sequence>
    <xsd:element ref='db:alt' minOccurs='0' maxOccurs='1'/>
    <xsd:choice>
      <xsd:element ref='db:graphic' minOccurs='1' maxOccurs='unbounded'/>
      <xsd:element ref='db:mediaobject' minOccurs='1' maxOccurs='unbounded'/>
    </xsd:choice>
  </xsd:sequence>
  <!-- (alt?, (graphic+|mediaobject+)) -->
</xsd:group>

<xsd:group name='inlineequation.content'>
  <xsd:sequence>
    <xsd:element ref='db:alt' minOccurs='0' maxOccurs='1'/>
    <xsd:choice>
      <xsd:element ref='db:graphic' minOccurs='1' maxOccurs='unbounded'/>
      <xsd:element ref='db:inlinemediaobject' minOccurs='1' maxOccurs='unbounded'/>
    </xsd:choice>
  </xsd:sequence>
  <!-- (alt?, (graphic+|inlinemediaobject+)) -->
</xsd:group>

<xsd:attributeGroup name='equation.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='equation'>
  <xsd:sequence>
    <xsd:group ref='db:formalobject.title.content' minOccurs='0' maxOccurs='1'/>
    <xsd:choice>
      <xsd:element ref='db:informalequation'/>
      <xsd:group ref='db:equation.content'/>
    </xsd:choice>
  </xsd:sequence>
  <!-- ((%formalobject.title.content;)?, (informalequation |
		%equation.content;)) -->

  <xsd:attributeGroup ref='db:label.attrib'/>
  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:equation.role.attrib'/>
  <!-- %local.equation.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='informalequation.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='informalequation'>
  <xsd:sequence>
    <xsd:group ref='db:equation.content'/>
  </xsd:sequence>
  <!-- (%equation.content;)  -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:informalequation.role.attrib'/>
  <!-- %local.informalequation.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='inlineequation.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='inlineequation'>
  <xsd:sequence>
    <xsd:group ref='db:inlineequation.content'/>
  </xsd:sequence>
  <!-- (%inlineequation.content;) -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:inlineequation.role.attrib'/>
  <!-- %local.inlineequation.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='alt.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='alt'>
  <!-- (#PCDATA) -->
  <xsd:simpleContent>
    <xsd:extension base='xsd:string'>
      <xsd:attributeGroup ref='db:common.attrib'/>
      <xsd:attributeGroup ref='db:alt.role.attrib'/>
      <!-- %local.alt.attrib; -->
    </xsd:extension>
  </xsd:simpleContent>
</xsd:complexType>

<!-- Tables ........................... -->

<xsd:complexType name='table'>
  <xsd:complexContent>
    <xsd:extension base='tbl:tableType'>
      <xsd:sequence>
        <xsd:group ref='db:formalobject.title.content'/>
        <xsd:group ref='db:ndxterm.class' minOccurs='0' maxOccurs='1'/>
        <xsd:choice>
          <xsd:element ref='db:graphic' minOccurs='1' maxOccurs='unbounded'/>
          <xsd:element ref='db:mediaobject' minOccurs='1' maxOccurs='unbounded'/>
          <xsd:element ref='tbl:tgroup' minOccurs='1' maxOccurs='unbounded'/>
        </xsd:choice>
      </xsd:sequence>
      <!-- % tbl.table.mdl
             "((%formalobject.title.content;),
              (%ndxterm.class;)*,
              (graphic+|tgroup+))"-->
    </xsd:extension>
  </xsd:complexContent>
</xsd:complexType>

<xsd:complexType name='informaltable'>
  <xsd:complexContent>
    <xsd:extension base='tbl:tableType'>
      <xsd:choice>
        <xsd:element ref='db:graphic' minOccurs='1' maxOccurs='unbounded'/>
        <xsd:element ref='db:mediaobject' minOccurs='1' maxOccurs='unbounded'/>
        <xsd:element ref='tbl:tgroup' minOccurs='1' maxOccurs='unbounded'/>
      </xsd:choice>
    </xsd:extension>
  </xsd:complexContent>
</xsd:complexType>

<!-- ...................................................................... -->
<!-- Synopses ............................................................. -->

<!-- Synopsis ......................... -->

<xsd:attributeGroup name='synopsis.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='synopsis' mixed='true'>
  <xsd:choice minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:para.char.mix'/>
    <xsd:element ref='db:graphic'/>
    <xsd:element ref='db:mediaobject'/>
    <xsd:element ref='db:lineannotation'/>
    <xsd:element ref='db:co'/>
  </xsd:choice>
  <!-- (%para.char.mix; | graphic | mediaobject | lineannotation | co)* -->

  <xsd:attributeGroup ref='db:label.attrib'/>
  <xsd:attributeGroup ref='db:linespecific.attrib'/>
  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:synopsis.role.attrib'/>
  <!-- %local.synopsis.attrib; -->
</xsd:complexType>

<!-- LineAnnotation (defined in the Inlines section, below)-->

<!-- CmdSynopsis ...................... -->

<xsd:attributeGroup name='cmdsynopsis.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='cmdsynopsis'>
  <xsd:sequence>
    <xsd:choice minOccurs='1' maxOccurs='unbounded'>
      <xsd:element ref='db:command'/>
      <xsd:element ref='db:arg'/>
      <xsd:element ref='db:group'/>
      <xsd:element ref='db:sbr'/>
    </xsd:choice>
    <xsd:element ref='db:synopfragment' minOccurs='0' maxOccurs='unbounded'/>
  </xsd:sequence>
  <!-- ((command | arg | group | sbr)+, synopfragment*) -->

  <!-- Sepchar: Character that should separate command and all
       top-level arguments; alternate value might be e.g., &Delta; -->
  <xsd:attribute name='sepchar' type='xsd:string' use='default' value=' '/>
  <xsd:attributeGroup ref='db:label.attrib'/>
  <xsd:attribute name='cmdlength' type='xsd:integer'/>
  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:cmdsynopsis.role.attrib'/>
  <!-- %local.cmdsynopsis.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='arg.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='arg' mixed='true'>
  <xsd:choice minOccurs='0' maxOccurs='unbounded'>
    <xsd:element ref='db:arg'/>
    <xsd:element ref='db:group'/>
    <xsd:element ref='db:option'/>
    <xsd:element ref='db:synopfragmentref'/>
    <xsd:element ref='db:replaceable'/>
    <xsd:element ref='db:sbr'/>
  </xsd:choice>
  <!-- (#PCDATA
		| arg
		| group
		| option
		| synopfragmentref
		| replaceable
		| sbr)* -->

  <!-- Choice: Whether Arg must be supplied: Opt (optional to
       supply, e.g. [arg]; the default), Req (required to supply,
       e.g. {arg}), or Plain (required to supply, e.g. arg) -->
  <xsd:attribute name='choice' use='default' value='opt'>
    <xsd:simpleType>
      <xsd:restriction base='xsd:string'>
        <xsd:enumeration value='opt'/>
        <xsd:enumeration value='req'/>
        <xsd:enumeration value='plain'/>
      </xsd:restriction>
    </xsd:simpleType>
  </xsd:attribute>

  <!-- Rep: whether Arg is repeatable: Norepeat (e.g. arg without
       ellipsis; the default), or Repeat (e.g. arg...) -->
  <xsd:attribute name='rep' use='default' value='norepeat'>
    <xsd:simpleType>
      <xsd:restriction base='xsd:string'>
        <xsd:enumeration value='norepeat'/>
        <xsd:enumeration value='repeat'/>
      </xsd:restriction>
    </xsd:simpleType>
  </xsd:attribute>

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:arg.role.attrib'/>
  <!-- %local.arg.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='group.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='group'>
  <xsd:choice minOccurs='1' maxOccurs='unbounded'>
    <xsd:element ref='db:arg'/>
    <xsd:element ref='db:group'/>
    <xsd:element ref='db:option'/>
    <xsd:element ref='db:synopfragmentref'/>
    <xsd:element ref='db:replaceable'/>
    <xsd:element ref='db:sbr'/>
  </xsd:choice>
  <!-- ((arg | group | option | synopfragmentref
		| replaceable | sbr)+) -->

  <!-- Choice: Whether Arg must be supplied: Opt (optional to
       supply, e.g. [arg]; the default), Req (required to supply,
       e.g. {arg}), or Plain (required to supply, e.g. arg) -->
  <xsd:attribute name='choice' use='default' value='opt'>
    <xsd:simpleType>
      <xsd:restriction base='xsd:string'>
        <xsd:enumeration value='opt'/>
        <xsd:enumeration value='req'/>
        <xsd:enumeration value='plain'/>
      </xsd:restriction>
    </xsd:simpleType>
  </xsd:attribute>

  <!-- Rep: whether Arg is repeatable: Norepeat (e.g. arg without
       ellipsis; the default), or Repeat (e.g. arg...) -->
  <xsd:attribute name='rep' use='default' value='norepeat'>
    <xsd:simpleType>
      <xsd:restriction base='xsd:string'>
        <xsd:enumeration value='norepeat'/>
        <xsd:enumeration value='repeat'/>
      </xsd:restriction>
    </xsd:simpleType>
  </xsd:attribute>

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:group.role.attrib'/>
  <!-- %local.group.attrib; -->
</xsd:complexType>

<!-- Synopsis break -->
<xsd:attributeGroup name='sbr.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='sbr'>
  <!-- EMPTY -->
  <xsd:complexContent>
    <xsd:restriction base='xsd:anyType'>
      <xsd:attributeGroup ref='db:common.attrib'/>
      <xsd:attributeGroup ref='db:sbr.role.attrib'/>
      <!-- %local.sbr.attrib; -->
    </xsd:restriction>
  </xsd:complexContent>
</xsd:complexType>

<xsd:attributeGroup name='synopfragmentref.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='synopfragmentref' mixed='true'>
  <!-- (#PCDATA) -->
  <xsd:simpleContent>
    <xsd:extension base='xsd:string'>
      <!-- to SynopFragment of complex synopsis
           material for separate referencing -->
      <xsd:attributeGroup ref='db:linkendreq.attrib'/>
      <xsd:attributeGroup ref='db:common.attrib'/>
      <xsd:attributeGroup ref='db:synopfragmentref.role.attrib'/>
      <!-- %local.synopfragmentref.attrib; -->
    </xsd:extension>
  </xsd:simpleContent>
</xsd:complexType>

<xsd:attributeGroup name='synopfragment.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='synopfragment'>
  <xsd:choice minOccurs='1' maxOccurs='unbounded'>
    <xsd:element ref='db:arg'/>
    <xsd:element ref='db:group'/>
  </xsd:choice>
  <!-- ((arg | group)+) -->

  <xsd:attributeGroup ref='db:idreq.common.attrib'/>
  <xsd:attributeGroup ref='db:synopfragment.role.attrib'/>
  <!-- %local.synopfragment.attrib; -->
</xsd:complexType>

<!-- Command (defined in the Inlines section, below)-->
<!-- Option (defined in the Inlines section, below)-->
<!-- Replaceable (defined in the Inlines section, below)-->

<!-- FuncSynopsis ..................... -->

<xsd:attributeGroup name='funcsynopsis.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='funcsynopsis'>
  <xsd:choice minOccurs='1' maxOccurs='unbounded'>
    <xsd:element ref='db:funcsynopsisinfo'/>
    <xsd:element ref='db:funcprototype'/>
  </xsd:choice>
  <!-- ((funcsynopsisinfo | funcprototype)+) -->

  <xsd:attributeGroup ref='db:label.attrib'/>
  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:funcsynopsis.role.attrib'/>
  <!-- %local.funcsynopsis.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='funcsynopsisinfo.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='funcsynopsisinfo' mixed='true'>
  <xsd:choice minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:cptr.char.mix'/>
    <xsd:element ref='db:lineannotation'/>
  </xsd:choice>
  <!-- (%cptr.char.mix; | lineannotation)* -->

  <xsd:attributeGroup ref='db:linespecific.attrib'/>
  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:funcsynopsisinfo.role.attrib'/>
  <!-- %local.funcsynopsisinfo.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='funcprototype.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='funcprototype'>
  <xsd:sequence>
    <xsd:element ref='db:funcdef'/>
    <xsd:choice minOccurs='1' maxOccurs='unbounded'>
      <xsd:element ref='db:void'/>
      <xsd:element ref='db:varargs'/>
      <xsd:element ref='db:paramdef'/>
    </xsd:choice>
  </xsd:sequence>
  <!-- (funcdef, (void | varargs | paramdef+)) -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:funcprototype.role.attrib'/>
  <!-- %local.funcprototype.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='funcdef.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='funcdef' mixed='true'>
  <xsd:choice minOccurs='0' maxOccurs='unbounded'>
    <xsd:element ref='db:replaceable'/>
    <xsd:element ref='db:function'/>
  </xsd:choice>
  <!-- (#PCDATA
		| replaceable
		| function)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:funcdef.role.attrib'/>
  <!-- %local.funcdef.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='void.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='void'>
  <!-- EMPTY -->
  <xsd:complexContent>
    <xsd:restriction base='xsd:anyType'>
      <xsd:attributeGroup ref='db:common.attrib'/>
      <xsd:attributeGroup ref='db:void.role.attrib'/>
      <!-- %local.void.attrib; -->
    </xsd:restriction>
  </xsd:complexContent>
</xsd:complexType>

<xsd:attributeGroup name='varargs.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='varargs'>
  <!-- EMPTY -->
  <xsd:complexContent>
    <xsd:restriction base='xsd:anyType'>
      <xsd:attributeGroup ref='db:common.attrib'/>
      <xsd:attributeGroup ref='db:varargs.role.attrib'/>
      <!-- %local.varargs.attrib; -->
    </xsd:restriction>
  </xsd:complexContent>
</xsd:complexType>

<!-- Processing assumes that only one Parameter will appear in a
     ParamDef, and that FuncParams will be used at most once, for
     providing information on the "inner parameters" for parameters that
     are pointers to functions. -->

<xsd:attributeGroup name='paramdef.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='paramdef' mixed='true'>
  <xsd:choice minOccurs='0' maxOccurs='unbounded'>
    <xsd:element ref='db:replaceable'/>
    <xsd:element ref='db:parameter'/>
    <xsd:element ref='db:funcparams'/>
  </xsd:choice>
  <!-- (#PCDATA
		| replaceable
		| parameter
		| funcparams)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:paramdef.role.attrib'/>
  <!-- %local.paramdef.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='funcparams.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='funcparams' mixed='true'>
  <xsd:choice minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:cptr.char.mix'/>
  </xsd:choice>
  <!-- (%cptr.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:funcparams.role.attrib'/>
  <!-- %local.funcparams.attrib; -->
</xsd:complexType>

<!-- LineAnnotation (defined in the Inlines section, below)-->
<!-- Replaceable (defined in the Inlines section, below)-->
<!-- Function (defined in the Inlines section, below)-->
<!-- Parameter (defined in the Inlines section, below)-->

<!-- ClassSynopsis ..................... -->

<xsd:attributeGroup name='classsynopsis.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='classsynopsis'>
  <xsd:sequence>
    <xsd:choice minOccurs='1' maxOccurs='unbounded'>
      <xsd:element ref='db:ooclass'/>
      <xsd:element ref='db:oointerface'/>
      <xsd:element ref='db:ooexception'/>
    </xsd:choice>
    <xsd:choice minOccurs='0' maxOccurs='unbounded'>
      <xsd:element ref='db:classsynopsisinfo'/>
      <xsd:element ref='db:fieldsynopsis'/>
      <xsd:group ref='db:method.synop.class'/>
    </xsd:choice>
  </xsd:sequence>
  <!-- ((ooclass|oointerface|ooexception)+,
                         (classsynopsisinfo
                          |fieldsynopsis|%method.synop.class;)*) -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:classsynopsis.role.attrib'/>
  <!-- %local.classsynopsis.attrib; -->
  <xsd:attribute name='language' type='xsd:string'/>
  <xsd:attribute name='class' use='default' value='class'>
    <xsd:simpleType>
      <xsd:restriction base='xsd:string'>
        <xsd:enumeration value='class'/>
        <xsd:enumeration value='interface'/>
      </xsd:restriction>
    </xsd:simpleType>
  </xsd:attribute>
</xsd:complexType>

<xsd:attributeGroup name='classsynopsisinfo.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='classsynopsisinfo' mixed='true'>
  <xsd:choice minOccurs='0' maxOccurs='1'>
    <xsd:group ref='db:cptr.char.mix'/>
    <xsd:element ref='db:lineannotation'/>
  </xsd:choice>
  <!-- (%cptr.char.mix; | lineannotation)* -->

  <xsd:attributeGroup ref='db:linespecific.attrib'/>
  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:classsynopsisinfo.role.attrib'/>
  <!-- %local.classsynopsisinfo.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='ooclass.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='ooclass'>
  <xsd:sequence>
    <xsd:element ref='db:modifier' minOccurs='0' maxOccurs='unbounded'/>
    <xsd:element ref='db:classname'/>
  </xsd:sequence>
  <!-- (modifier*, classname) -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:ooclass.role.attrib'/>
  <!-- %local.ooclass.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='oointerface.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='oointerface'>
  <xsd:sequence>
    <xsd:element ref='db:modifier' minOccurs='0' maxOccurs='unbounded'/>
    <xsd:element ref='db:interfacename'/>
  </xsd:sequence>
  <!-- (modifier*, interfacename) -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:oointerface.role.attrib'/>
  <!-- %local.oointerface.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='ooexception.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='ooexception'>
  <xsd:sequence>
    <xsd:element ref='db:modifier' minOccurs='0' maxOccurs='unbounded'/>
    <xsd:element ref='db:exceptionname'/>
  </xsd:sequence>
  <!-- (modifier*, exceptionname) -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:ooexception.role.attrib'/>
  <!-- %local.ooexception.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='modifier.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='modifier'>
  <xsd:choice minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:smallcptr.char.mix'/>
  </xsd:choice>
  <!-- (%smallcptr.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:modifier.role.attrib'/>
  <!-- %local.modifier.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='interfacename.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='interfacename'>
  <xsd:choice minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:smallcptr.char.mix'/>
  </xsd:choice>
  <!-- (%smallcptr.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:interfacename.role.attrib'/>
  <!-- %local.interfacename.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='exceptionname.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='exceptionname'>
  <xsd:choice minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:smallcptr.char.mix'/>
  </xsd:choice>
  <!-- (%smallcptr.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:exceptionname.role.attrib'/>
  <!-- %local.exceptionname.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='fieldsynopsis.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='fieldsynopsis'>
  <xsd:sequence>
    <xsd:element ref='db:modifier' minOccurs='0' maxOccurs='unbounded'/>
    <xsd:element ref='db:type' minOccurs='0' maxOccurs='1'/>
    <xsd:element ref='db:varname'/>
    <xsd:element ref='db:initializer' minOccurs='0' maxOccurs='1'/>
  </xsd:sequence>
  <!-- (modifier*, type?, varname, initializer?) -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:fieldsynopsis.role.attrib'/>
  <!-- %local.fieldsynopsis.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='initializer.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='initializer'>
  <xsd:choice minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:smallcptr.char.mix'/>
  </xsd:choice>
  <!-- (%smallcptr.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:initializer.role.attrib'/>
  <!-- %local.initializer.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='constructorsynopsis.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='constructorsynopsis'>
  <xsd:sequence>
    <xsd:element ref='db:modifier' minOccurs='0' maxOccurs='unbounded'/>
    <xsd:element ref='db:methodname' minOccurs='0' maxOccurs='1'/>
    <xsd:choice>
      <xsd:element ref='db:methodparam' minOccurs='1' maxOccurs='unbounded'/>
      <xsd:element ref='db:void'/>
    </xsd:choice>
    <xsd:element ref='db:exceptionname' minOccurs='0' maxOccurs='unbounded'/>
  </xsd:sequence>
  <!-- (modifier*,
                               methodname?,
                               (methodparam+|void),
                               exceptionname*) -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:constructorsynopsis.role.attrib'/>
  <!-- %local.constructorsynopsis.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='destructorsynopsis.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='destructorsynopsis'>
  <xsd:sequence>
    <xsd:element ref='db:modifier' minOccurs='0' maxOccurs='unbounded'/>
    <xsd:element ref='db:methodname' minOccurs='0' maxOccurs='1'/>
    <xsd:choice>
      <xsd:element ref='db:methodparam' minOccurs='1' maxOccurs='unbounded'/>
      <xsd:element ref='db:void'/>
    </xsd:choice>
    <xsd:element ref='db:exceptionname' minOccurs='0' maxOccurs='unbounded'/>
  </xsd:sequence>
  <!-- (modifier*,
                              methodname?,
                              (methodparam+|void),
                              exceptionname*) -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:destructorsynopsis.role.attrib'/>
  <!-- %local.destructorsynopsis.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='methodsynopsis.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='methodsynopsis'>
  <xsd:sequence>
    <xsd:element ref='db:modifier' minOccurs='0' maxOccurs='unbounded'/>
    <xsd:choice minOccurs='0' maxOccurs='1'>
      <xsd:element ref='db:type'/>
      <xsd:element ref='db:void'/>
    </xsd:choice>
    <xsd:element ref='db:methodname' minOccurs='0' maxOccurs='1'/>
    <xsd:choice>
      <xsd:element ref='db:methodparam' minOccurs='1' maxOccurs='unbounded'/>
      <xsd:element ref='db:void'/>
    </xsd:choice>
    <xsd:element ref='db:exceptionname' minOccurs='0' maxOccurs='unbounded'/>
    <xsd:element ref='db:modifier' minOccurs='0' maxOccurs='unbounded'/>
  </xsd:sequence>
  <!-- (modifier*,
                          (type|void)?,
                          methodname,
                          (methodparam+|void),
                          exceptionname*,
                          modifier*) -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:methodsynopsis.role.attrib'/>
  <!-- %local.methodsynopsis.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='methodname.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='methodname'>
  <xsd:choice minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:smallcptr.char.mix'/>
  </xsd:choice>
  <!-- (%smallcptr.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:methodname.role.attrib'/>
  <!-- %local.methodname.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='methodparam.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='methodparam'>
  <xsd:sequence>
    <xsd:element name='db:modifier' minOccurs='0' maxOccurs='unbounded'/>
    <xsd:element name='db:type' minOccurs='0' maxOccurs='1'/>
    <xsd:choice>
      <xsd:sequence>
        <xsd:element name='db:parameter'/>
        <xsd:element name='db:initializer' minOccurs='0' maxOccurs='1'/>
      </xsd:sequence>
      <xsd:element name='db:funcparams'/>
    </xsd:choice>
    <xsd:element name='db:modifier' minOccurs='0' maxOccurs='unbounded'/>
  </xsd:sequence>
  <!-- (modifier*,
                       type?,
                       ((parameter,initializer?)|funcparams),
                       modifier*) -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:methodparam.role.attrib'/>
  <!-- %local.methodparam.attrib; -->

  <!-- Choice: Whether Arg must be supplied: Opt (optional to
       supply, e.g. [arg]; the default), Req (required to supply,
       e.g. {arg}), or Plain (required to supply, e.g. arg) -->
  <xsd:attribute name='choice' use='default' value='opt'>
    <xsd:simpleType>
      <xsd:restriction base='xsd:string'>
        <xsd:enumeration value='opt'/>
        <xsd:enumeration value='req'/>
        <xsd:enumeration value='plain'/>
      </xsd:restriction>
    </xsd:simpleType>
  </xsd:attribute>

  <!-- Rep: whether Arg is repeatable: Norepeat (e.g. arg without
       ellipsis; the default), or Repeat (e.g. arg...) -->
  <xsd:attribute name='rep' use='default' value='norepeat'>
    <xsd:simpleType>
      <xsd:restriction base='xsd:string'>
        <xsd:enumeration value='norepeat'/>
        <xsd:enumeration value='repeat'/>
      </xsd:restriction>
    </xsd:simpleType>
  </xsd:attribute>
</xsd:complexType>

<!-- ...................................................................... -->
<!-- Document information entities and elements ........................... -->

<!-- The document information elements include some elements that are
     currently used only in the document hierarchy module. They are
     defined here so that they will be available for use in customized
     document hierarchies. -->

<!-- .................................. -->

<!-- Ackno ............................ -->

<xsd:attributeGroup name='ackno.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='ackno' mixed='true'>
  <xsd:sequence minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:docinfo.char.mix'/>
  </xsd:sequence>
  <!-- (%docinfo.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:ackno.role.attrib'/>
  <!-- %local.ackno.attrib; -->
</xsd:complexType>

<!-- Address .......................... -->

<xsd:attributeGroup name='address.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='address' mixed='true'>
  <xsd:choice minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:person.ident.mix'/>
    <xsd:element ref='db:street'/>
    <xsd:element ref='db:pob'/>
    <xsd:element ref='db:postcode'/>
    <xsd:element ref='db:city'/>
    <xsd:element ref='db:state'/>
    <xsd:element ref='db:country'/>
    <xsd:element ref='db:phone'/>
    <xsd:element ref='db:fax'/>
    <xsd:element ref='db:email'/>
    <xsd:element ref='db:otheraddr'/>
  </xsd:choice>
  <!-- (#PCDATA|%person.ident.mix;
		|street|pob|postcode|city|state|country|phone
		|fax|email|otheraddr)* -->

  <xsd:attributeGroup ref='db:linespecific.attrib'/>
  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:address.role.attrib'/>
  <!-- %local.address.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='street.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='street' mixed='true'>
  <xsd:sequence minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:docinfo.char.mix'/>
  </xsd:sequence>
  <!-- (%docinfo.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:street.role.attrib'/>
  <!-- %local.street.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='pob.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='pob' mixed='true'>
  <xsd:sequence minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:docinfo.char.mix'/>
  </xsd:sequence>
  <!-- (%docinfo.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:pob.role.attrib'/>
  <!-- %local.pob.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='postcode.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='postcode' mixed='true'>
  <xsd:sequence minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:docinfo.char.mix'/>
  </xsd:sequence>
  <!-- (%docinfo.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:postcode.role.attrib'/>
  <!-- %local.postcode.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='city.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='city' mixed='true'>
  <xsd:sequence minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:docinfo.char.mix'/>
  </xsd:sequence>
  <!-- (%docinfo.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:city.role.attrib'/>
  <!-- %local.city.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='state.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='state' mixed='true'>
  <xsd:sequence minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:docinfo.char.mix'/>
  </xsd:sequence>
  <!-- (%docinfo.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:state.role.attrib'/>
  <!-- %local.state.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='country.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='country' mixed='true'>
  <xsd:sequence minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:docinfo.char.mix'/>
  </xsd:sequence>
  <!-- (%docinfo.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:country.role.attrib'/>
  <!-- %local.country.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='phone.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='phone' mixed='true'>
  <xsd:sequence minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:docinfo.char.mix'/>
  </xsd:sequence>
  <!-- (%docinfo.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:phone.role.attrib'/>
  <!-- %local.phone.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='fax.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='fax' mixed='true'>
  <xsd:sequence minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:docinfo.char.mix'/>
  </xsd:sequence>
  <!-- (%docinfo.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:fax.role.attrib'/>
  <!-- %local.fax.attrib; -->
</xsd:complexType>

<!-- Email (defined in the Inlines section, below)-->

<xsd:attributeGroup name='otheraddr.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='otheraddr' mixed='true'>
  <xsd:sequence minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:docinfo.char.mix'/>
  </xsd:sequence>
  <!-- (%docinfo.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:otheraddr.role.attrib'/>
  <!-- %local.otheraddr.attrib; -->
</xsd:complexType>

<!-- Affiliation ...................... -->

<xsd:attributeGroup name='affiliation.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='affiliation'>
  <xsd:sequence>
    <xsd:element ref='db:shortaffil' minOccurs='0' maxOccurs='1'/>
    <xsd:element ref='db:jobtitle' minOccurs='0' maxOccurs='unbounded'/>
    <xsd:element ref='db:orgname' minOccurs='0' maxOccurs='1'/>
    <xsd:element ref='db:orgdiv' minOccurs='0' maxOccurs='unbounded'/>
    <xsd:element ref='db:address' minOccurs='0' maxOccurs='unbounded'/>
  </xsd:sequence>
  <!-- (shortaffil?, jobtitle*, orgname?, orgdiv*,
		address*) -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:affiliation.role.attrib'/>
  <!-- %local.affiliation.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='shortaffil.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='shortaffil' mixed='true'>
  <xsd:sequence minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:docinfo.char.mix'/>
  </xsd:sequence>
  <!-- (%docinfo.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:shortaffil.role.attrib'/>
  <!-- %local.shortaffil.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='jobtitle.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='jobtitle' mixed='true'>
  <xsd:sequence minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:docinfo.char.mix'/>
  </xsd:sequence>
  <!-- (%docinfo.char.mix;)* -->

<xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:jobtitle.role.attrib'/>
  <!-- %local.jobtitle.attrib; -->
</xsd:complexType>

<!-- OrgName (defined elsewhere in this section)-->

<xsd:attributeGroup name='orgdiv.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='orgdiv' mixed='true'>
  <xsd:sequence minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:docinfo.char.mix'/>
  </xsd:sequence>
  <!-- (%docinfo.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:orgdiv.role.attrib'/>
  <!-- %local.orgdiv.attrib; -->
</xsd:complexType>

<!-- Address (defined elsewhere in this section)-->

<!-- ArtPageNums ...................... -->

<xsd:attributeGroup name='artpagenums.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='artpagenums' mixed='true'>
  <xsd:sequence minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:docinfo.char.mix'/>
  </xsd:sequence>
  <!-- (%docinfo.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:artpagenums.role.attrib'/>
  <!-- %local.artpagenums.attrib; -->
</xsd:complexType>

<!-- Author ........................... -->

<xsd:attributeGroup name='author.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='author'>
  <xsd:sequence minOccurs='1' maxOccurs='unbounded'>
    <xsd:group ref='db:person.ident.mix'/>
  </xsd:sequence>
  <!-- ((%person.ident.mix;)+) -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:author.role.attrib'/>
  <!-- %local.author.attrib; -->
</xsd:complexType>
<!--(see "Personal identity elements" for %person.ident.mix;)-->

<!-- AuthorGroup ...................... -->

<xsd:attributeGroup name='authorgroup.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='authorgroup'>
  <xsd:choice minOccurs='1' maxOccurs='unbounded'>
    <xsd:element ref='db:author'/>
    <xsd:element ref='db:editor'/>
    <xsd:element ref='db:collab'/>
    <xsd:element ref='db:corpauthor'/>
    <xsd:element ref='db:othercredit'/>
  </xsd:choice>
  <!-- ((author|editor|collab|corpauthor|othercredit)+) -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:authorgroup.role.attrib'/>
  <!-- %local.authorgroup.attrib; -->
</xsd:complexType>

<!-- Author (defined elsewhere in this section)-->
<!-- Editor (defined elsewhere in this section)-->

<xsd:attributeGroup name='collab.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='collab'>
  <xsd:sequence>
    <xsd:element ref='db:collabname'/>
    <xsd:element ref='db:affiliation' minOccurs='0' maxOccurs='unbounded'/>
  </xsd:sequence>
  <!-- (collabname, affiliation*) -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:collab.role.attrib'/>
  <!-- %local.collab.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='collabname.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='collabname' mixed='true'>
  <xsd:sequence minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:docinfo.char.mix'/>
  </xsd:sequence>
  <!-- (%docinfo.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:collabname.role.attrib'/>
  <!-- %local.collabname.attrib; -->
</xsd:complexType>

<!-- Affiliation (defined elsewhere in this section)-->

<!-- CorpAuthor (defined elsewhere in this section)-->
<!-- OtherCredit (defined elsewhere in this section)-->

<!-- AuthorInitials ................... -->

<xsd:attributeGroup name='authorinitials.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='authorinitials' mixed='true'>
  <xsd:sequence minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:docinfo.char.mix'/>
  </xsd:sequence>
  <!-- (%docinfo.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:authorinitials.role.attrib'/>
  <!-- %local.authorinitials.attrib; -->
</xsd:complexType>

<!-- ConfGroup ........................ -->

<xsd:attributeGroup name='confgroup.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='confgroup'>
  <xsd:choice minOccurs='0' maxOccurs='unbounded'>
    <xsd:element ref='db:confdates'/>
    <xsd:element ref='db:conftitle'/>
    <xsd:element ref='db:confnum'/>
    <xsd:element ref='db:address'/>
    <xsd:element ref='db:confsponsor'/>
  </xsd:choice>
  <!-- ((confdates|conftitle|confnum|address|confsponsor)*) -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:confgroup.role.attrib'/>
  <!-- %local.confgroup.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='confdates.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='confdates' mixed='true'>
  <xsd:sequence minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:docinfo.char.mix'/>
  </xsd:sequence>
  <!-- (%docinfo.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:confdates.role.attrib'/>
  <!-- %local.confdates.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='conftitle.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='conftitle' mixed='true'>
  <xsd:sequence minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:docinfo.char.mix'/>
  </xsd:sequence>
  <!-- (%docinfo.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:conftitle.role.attrib'/>
  <!-- %local.conftitle.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='confnum.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='confnum' mixed='true'>
  <xsd:sequence minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:docinfo.char.mix'/>
  </xsd:sequence>
  <!-- (%docinfo.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:confnum.role.attrib'/>
  <!-- %local.confnum.attrib; -->
</xsd:complexType>

<!-- Address (defined elsewhere in this section)-->

<xsd:attributeGroup name='confsponsor.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='confsponsor' mixed='true'>
  <xsd:sequence minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:docinfo.char.mix'/>
  </xsd:sequence>
  <!-- (%docinfo.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:confsponsor.role.attrib'/>
  <!-- %local.confsponsor.attrib; -->
</xsd:complexType>

<!-- ContractNum ...................... -->

<xsd:attributeGroup name='contractnum.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='contractnum' mixed='true'>
  <xsd:sequence minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:docinfo.char.mix'/>
  </xsd:sequence>
  <!-- (%docinfo.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:contractnum.role.attrib'/>
  <!-- %local.contractnum.attrib; -->
</xsd:complexType>

<!-- ContractSponsor .................. -->

<xsd:attributeGroup name='contractsponsor.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='contractsponsor' mixed='true'>
  <xsd:sequence minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:docinfo.char.mix'/>
  </xsd:sequence>
  <!-- (%docinfo.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:contractsponsor.role.attrib'/>
  <!-- %local.contractsponsor.attrib; -->
</xsd:complexType>

<!-- Copyright ........................ -->

<xsd:attributeGroup name='copyright.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='copyright'>
  <xsd:sequence>
    <xsd:element ref='db:year' minOccurs='1' maxOccurs='unbounded'/>
    <xsd:element ref='db:holder' minOccurs='0' maxOccurs='unbounded'/>
  </xsd:sequence>
  <!-- (year+, holder*) -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:copyright.role.attrib'/>
  <!-- %local.copyright.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='year.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='year' mixed='true'>
  <xsd:sequence minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:docinfo.char.mix'/>
  </xsd:sequence>
  <!-- (%docinfo.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:year.role.attrib'/>
  <!-- %local.year.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='holder.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='holder' mixed='true'>
  <xsd:sequence minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:docinfo.char.mix'/>
  </xsd:sequence>
  <!-- (%docinfo.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:holder.role.attrib'/>
  <!-- %local.holder.attrib; -->
</xsd:complexType>

<!-- CorpAuthor ....................... -->

<xsd:attributeGroup name='corpauthor.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='corpauthor' mixed='true'>
  <xsd:sequence minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:docinfo.char.mix'/>
  </xsd:sequence>
  <!-- (%docinfo.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:corpauthor.role.attrib'/>
  <!-- %local.corpauthor.attrib; -->
</xsd:complexType>

<!-- CorpName ......................... -->

<xsd:attributeGroup name='corpname.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='corpname' mixed='true'>
  <xsd:sequence minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:docinfo.char.mix'/>
  </xsd:sequence>
  <!-- (%docinfo.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:corpname.role.attrib'/>
  <!-- %local.corpname.attrib; -->
</xsd:complexType>

<!-- Date ............................. -->

<xsd:attributeGroup name='date.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='date' mixed='true'>
  <xsd:sequence minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:docinfo.char.mix'/>
  </xsd:sequence>
  <!-- (%docinfo.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:date.role.attrib'/>
  <!-- %local.date.attrib; -->
</xsd:complexType>

<!-- Edition .......................... -->

<xsd:attributeGroup name='edition.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='edition' mixed='true'>
  <xsd:sequence minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:docinfo.char.mix'/>
  </xsd:sequence>
  <!-- (%docinfo.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:edition.role.attrib'/>
  <!-- %local.edition.attrib; -->
</xsd:complexType>

<!-- Editor ........................... -->

<xsd:attributeGroup name='editor.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='editor'>
  <xsd:sequence minOccurs='1' maxOccurs='unbounded'>
    <xsd:group ref='db:person.ident.mix'/>
  </xsd:sequence>
  <!-- ((%person.ident.mix;)+) -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:editor.role.attrib'/>
  <!-- %local.editor.attrib; -->
</xsd:complexType>

<!--(see "Personal identity elements" for %person.ident.mix;)-->

<!-- ISBN ............................. -->

<xsd:attributeGroup name='isbn.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='isbn' mixed='true'>
  <xsd:sequence minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:docinfo.char.mix'/>
  </xsd:sequence>
  <!-- (%docinfo.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:isbn.role.attrib'/>
  <!-- %local.isbn.attrib; -->
</xsd:complexType>

<!-- ISSN ............................. -->

<xsd:attributeGroup name='issn.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='issn' mixed='true'>
  <xsd:sequence minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:docinfo.char.mix'/>
  </xsd:sequence>
  <!-- (%docinfo.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:issn.role.attrib'/>
  <!-- %local.issn.attrib; -->
</xsd:complexType>

<!-- InvPartNumber .................... -->

<xsd:attributeGroup name='invpartnumber.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='invpartnumber' mixed='true'>
  <xsd:sequence minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:docinfo.char.mix'/>
  </xsd:sequence>
  <!-- (%docinfo.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:invpartnumber.role.attrib'/>
  <!-- %local.invpartnumber.attrib; -->
</xsd:complexType>

<!-- IssueNum ......................... -->

<xsd:attributeGroup name='issuenum.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='issuenum' mixed='true'>
  <xsd:sequence minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:docinfo.char.mix'/>
  </xsd:sequence>
  <!-- (%docinfo.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:issuenum.role.attrib'/>
  <!-- %local.issuenum.attrib; -->
</xsd:complexType>

<!-- LegalNotice ...................... -->

<xsd:attributeGroup name='legalnotice.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='legalnotice'>
  <xsd:sequence>
    <xsd:element ref='db:title' minOccurs='0' maxOccurs='1'/>
    <xsd:group ref='db:legalnotice.mix' minOccurs='1' maxOccurs='unbounded'/>
  </xsd:sequence>
  <!-- (title?, (%legalnotice.mix;)+) -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:legalnotice.role.attrib'/>
  <!-- %local.legalnotice.attrib; -->
</xsd:complexType>

<!-- ModeSpec ......................... -->

<xsd:attributeGroup name='modespec.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='modespec' mixed='true'>
  <xsd:sequence minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:docinfo.char.mix'/>
  </xsd:sequence>
  <!-- (%docinfo.char.mix;)* -->

  <!-- Application: Type of action required for completion
       of the links to which the ModeSpec is relevant (e.g.,
       retrieval query) -->

  <xsd:attribute name='application' type='xsd:NOTATION'/>
  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:modespec.role.attrib'/>
  <!-- %local.modespec.attrib; -->
</xsd:complexType>

<!-- OrgName .......................... -->

<xsd:attributeGroup name='orgname.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='orgname' mixed='true'>
  <xsd:sequence minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:docinfo.char.mix'/>
  </xsd:sequence>
  <!-- (%docinfo.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:orgname.role.attrib'/>
  <!-- %local.orgname.attrib; -->
</xsd:complexType>

<!-- OtherCredit ...................... -->

<xsd:attributeGroup name='othercredit.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='othercredit'>
  <xsd:sequence minOccurs='1' maxOccurs='unbounded'>
    <xsd:group ref='db:person.ident.mix'/>
  </xsd:sequence>
  <!-- ((%person.ident.mix;)+) -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:othercredit.role.attrib'/>
  <!-- %local.othercredit.attrib; -->
</xsd:complexType>
  <!--(see "Personal identity elements" for %person.ident.mix;)-->

<!-- PageNums ......................... -->

<xsd:attributeGroup name='pagenums.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='pagenums' mixed='true'>
  <xsd:sequence minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:docinfo.char.mix'/>
  </xsd:sequence>
  <!-- (%docinfo.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:pagenums.role.attrib'/>
  <!-- %local.pagenums.attrib; -->
</xsd:complexType>

<!-- Personal identity elements ....... -->

<!-- These elements are used only within Author, Editor, and
     OtherCredit. -->

<xsd:attributeGroup name='contrib.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='contrib' mixed='true'>
  <xsd:sequence minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:docinfo.char.mix'/>
  </xsd:sequence>
  <!-- (%docinfo.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:contrib.role.attrib'/>
  <!-- %local.contrib.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='firstname.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='firstname' mixed='true'>
  <xsd:sequence minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:docinfo.char.mix'/>
  </xsd:sequence>
  <!-- (%docinfo.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:firstname.role.attrib'/>
  <!-- %local.firstname.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='honorific.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='honorific' mixed='true'>
  <xsd:sequence minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:docinfo.char.mix'/>
  </xsd:sequence>
  <!-- (%docinfo.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:honorific.role.attrib'/>
  <!-- %local.honorific.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='lineage.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='lineage' mixed='true'>
  <xsd:sequence minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:docinfo.char.mix'/>
  </xsd:sequence>
  <!-- (%docinfo.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:lineage.role.attrib'/>
  <!-- %local.lineage.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='othername.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='othername' mixed='true'>
  <xsd:sequence minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:docinfo.char.mix'/>
  </xsd:sequence>
  <!-- (%docinfo.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:othername.role.attrib'/>
  <!-- %local.othername.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='surname.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='surname' mixed='true'>
  <xsd:sequence minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:docinfo.char.mix'/>
  </xsd:sequence>
  <!-- (%docinfo.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:surname.role.attrib'/>
  <!-- %local.surname.attrib; -->
</xsd:complexType>

<!-- PrintHistory ..................... -->

<xsd:attributeGroup name='printhistory.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='printhistory'>
  <xsd:sequence minOccurs='1' maxOccurs='unbounded'>
    <xsd:group ref='db:para.class'/>
  </xsd:sequence>
  <!-- ((%para.class;)+) -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:printhistory.role.attrib'/>
  <!-- %local.printhistory.attrib; -->
</xsd:complexType>

<!-- ProductName ...................... -->

<xsd:attributeGroup name='productname.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='productname' mixed='true'>
  <xsd:sequence minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:para.char.mix'/>
  </xsd:sequence>
  <!-- (%para.char.mix;)* -->

  <!-- Class: More precisely identifies the item the element names -->
  <xsd:attribute name='class' use='default' value='trade'>
    <xsd:simpleType>
      <xsd:restriction base='xsd:string'>
        <xsd:enumeration value='service'/>
        <xsd:enumeration value='trade'/>
        <xsd:enumeration value='registered'/>
        <xsd:enumeration value='copyright'/>
      </xsd:restriction>
    </xsd:simpleType>
  </xsd:attribute>

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:productname.role.attrib'/>
  <!-- %local.productname.attrib; -->
</xsd:complexType>

<!-- ProductNumber .................... -->

<xsd:attributeGroup name='productnumber.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='productnumber' mixed='true'>
  <xsd:sequence minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:docinfo.char.mix'/>
  </xsd:sequence>
  <!-- (%docinfo.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:productnumber.role.attrib'/>
  <!-- %local.productnumber.attrib; -->
</xsd:complexType>

<!-- PubDate .......................... -->

<xsd:attributeGroup name='pubdate.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='pubdate' mixed='true'>
  <xsd:sequence minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:docinfo.char.mix'/>
  </xsd:sequence>
  <!-- (%docinfo.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:pubdate.role.attrib'/>
  <!-- %local.pubdate.attrib; -->
</xsd:complexType>

<!-- Publisher ........................ -->

<xsd:attributeGroup name='publisher.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='publisher'>
  <xsd:sequence>
    <xsd:element ref='db:publishername'/>
    <xsd:element ref='db:address' minOccurs='0' maxOccurs='unbounded'/>
  </xsd:sequence>
  <!-- (publishername, address*) -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:publisher.role.attrib'/>
  <!-- %local.publisher.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='publishername.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='publishername' mixed='true'>
  <xsd:sequence minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:docinfo.char.mix'/>
  </xsd:sequence>
  <!-- (%docinfo.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:publishername.role.attrib'/>
  <!-- %local.publishername.attrib; -->
</xsd:complexType>

<!-- Address (defined elsewhere in this section)-->

<!-- PubsNumber ....................... -->

<xsd:attributeGroup name='pubsnumber.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='pubsnumber' mixed='true'>
  <xsd:sequence minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:docinfo.char.mix'/>
  </xsd:sequence>
  <!-- (%docinfo.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:pubsnumber.role.attrib'/>
  <!-- %local.pubsnumber.attrib; -->
</xsd:complexType>

<!-- ReleaseInfo ...................... -->

<xsd:attributeGroup name='releaseinfo.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='releaseinfo' mixed='true'>
  <xsd:sequence minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:docinfo.char.mix'/>
  </xsd:sequence>
  <!-- (%docinfo.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:releaseinfo.role.attrib'/>
  <!-- %local.releaseinfo.attrib; -->
</xsd:complexType>

<!-- RevHistory ....................... -->

<xsd:attributeGroup name='revhistory.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='revhistory'>
  <xsd:sequence>
    <xsd:element ref='db:revision' minOccurs='1' maxOccurs='unbounded'/>
  </xsd:sequence>
  <!-- (revision+) -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:revhistory.role.attrib'/>
  <!-- %local.revhistory.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='revision.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='revision'>
  <xsd:sequence>
    <xsd:element ref='db:revnumber'/>
    <xsd:element ref='db:date'/>
    <xsd:element ref='db:authorinitials' minOccurs='0' maxOccurs='unbounded'/>
    <xsd:choice minOccurs='0' maxOccurs='1'>
      <xsd:element ref='db:revremark'/>
      <xsd:element ref='db:revdescription'/>
    </xsd:choice>
  </xsd:sequence>
  <!-- (revnumber, date, authorinitials*,
                    (revremark|revdescription)?) -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:revision.role.attrib'/>
  <!-- %local.revision.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='revnumber.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='revnumber' mixed='true'>
  <xsd:sequence minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:docinfo.char.mix'/>
  </xsd:sequence>
  <!-- (%docinfo.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:revnumber.role.attrib'/>
  <!-- %local.revnumber.attrib; -->
</xsd:complexType>

<!-- Date (defined elsewhere in this section)-->
<!-- AuthorInitials (defined elsewhere in this section)-->

<xsd:attributeGroup name='revremark.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='revremark' mixed='true'>
  <xsd:sequence minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:docinfo.char.mix'/>
  </xsd:sequence>
  <!-- (%docinfo.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:revremark.role.attrib'/>
  <!-- %local.revremark.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='revdescription.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='revdescription'>
  <xsd:sequence minOccurs='1' maxOccurs='unbounded'>
    <xsd:group ref='db:revdescription.mix'/>
  </xsd:sequence>
  <!-- ((%revdescription.mix;)+) -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:revdescription.role.attrib'/>
  <!-- %local.revdescription.attrib; -->
</xsd:complexType>

<!-- SeriesVolNums .................... -->

<xsd:attributeGroup name='seriesvolnums.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='seriesvolnums' mixed='true'>
  <xsd:sequence minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:docinfo.char.mix'/>
  </xsd:sequence>
  <!-- (%docinfo.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:seriesvolnums.role.attrib'/>
  <!-- %local.seriesvolnums.attrib; -->
</xsd:complexType>

<!-- VolumeNum ........................ -->

<xsd:attributeGroup name='volumenum.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='volumenum' mixed='true'>
  <xsd:sequence minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:docinfo.char.mix'/>
  </xsd:sequence>
  <!-- (%docinfo.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:volumenum.role.attrib'/>
  <!-- %local.volumenum.attrib; -->
</xsd:complexType>

<!-- .................................. -->

<!-- ...................................................................... -->
<!-- Inline, link, and ubiquitous elements ................................ -->

<!-- Technical and computer terms ......................................... -->

<xsd:attributeGroup name='accel.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='accel' mixed='true'>
  <xsd:sequence minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:smallcptr.char.mix'/>
  </xsd:sequence>
  <!-- (%smallcptr.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:accel.role.attrib'/>
  <!-- %local.accel.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='action.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='action' mixed='true'>
  <xsd:sequence minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:smallcptr.char.mix'/>
  </xsd:sequence>
  <!-- (%smallcptr.char.mix;)* -->

  <xsd:attributeGroup ref='db:moreinfo.attrib'/>
  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:action.role.attrib'/>
  <!-- %local.action.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='application.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='application' mixed='true'>
  <xsd:sequence minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:para.char.mix'/>
  </xsd:sequence>
  <!-- (%para.char.mix;)* -->

  <xsd:attribute name='class'>
    <xsd:simpleType>
      <xsd:restriction base='xsd:string'>
        <xsd:enumeration value='hardware'/>
        <xsd:enumeration value='software'/>
      </xsd:restriction>
    </xsd:simpleType>
  </xsd:attribute>
  <xsd:attributeGroup ref='db:moreinfo.attrib'/>
  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:application.role.attrib'/>
  <!-- %local.application.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='classname.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='classname' mixed='true'>
  <xsd:sequence minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:smallcptr.char.mix'/>
  </xsd:sequence>
  <!-- (%smallcptr.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:classname.role.attrib'/>
  <!-- %local.classname.attrib; -->
</xsd:complexType>

<!-- CO is a callout area of the LineColumn unit type (a single character
     position); the position is directly indicated by the location of CO. -->
<xsd:attributeGroup name='co.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='co'>
  <!-- EMPTY -->
  <xsd:complexContent>
    <xsd:restriction base='xsd:anyType'>
      <!-- bug number/symbol override or initialization -->
      <!-- to any related information -->
      <xsd:attributeGroup ref='db:label.attrib'/>
      <xsd:attributeGroup ref='db:linkends.attrib'/>
      <xsd:attributeGroup ref='db:idreq.common.attrib'/>
      <xsd:attributeGroup ref='db:co.role.attrib'/>
      <!-- %local.co.attrib; -->
    </xsd:restriction>
  </xsd:complexContent>
</xsd:complexType>

<xsd:attributeGroup name='command.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='command' mixed='true'>
  <xsd:sequence minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:cptr.char.mix'/>
  </xsd:sequence>
  <!-- (%cptr.char.mix;)* -->

  <xsd:attributeGroup ref='db:moreinfo.attrib'/>
  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:command.role.attrib'/>
  <!-- %local.command.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='computeroutput.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='computeroutput' mixed='true'>
  <xsd:sequence minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:cptr.char.mix'/>
  </xsd:sequence>
  <!-- (%cptr.char.mix;)* -->

  <xsd:attributeGroup ref='db:moreinfo.attrib'/>
  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:computeroutput.role.attrib'/>
  <!-- %local.computeroutput.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='database.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='database' mixed='true'>
  <xsd:sequence minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:smallcptr.char.mix'/>
  </xsd:sequence>
  <!-- (%smallcptr.char.mix;)* -->

  <!-- Class: Type of database the element names; no default -->
  <xsd:attribute name='class'>
    <xsd:simpleType>
      <xsd:restriction base='xsd:string'>
        <xsd:enumeration value='name'/>
        <xsd:enumeration value='table'/>
        <xsd:enumeration value='field'/>
        <xsd:enumeration value='key1'/>
        <xsd:enumeration value='key2'/>
        <xsd:enumeration value='record'/>
      </xsd:restriction>
    </xsd:simpleType>
  </xsd:attribute>
  <xsd:attributeGroup ref='db:moreinfo.attrib'/>
  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:database.role.attrib'/>
  <!-- %local.database.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='email.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='email' mixed='true'>
  <xsd:sequence minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:docinfo.char.mix'/>
  </xsd:sequence>
  <!-- (%docinfo.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:email.role.attrib'/>
  <!-- %local.email.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='envar.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='envar' mixed='true'>
  <xsd:sequence minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:docinfo.char.mix'/>
  </xsd:sequence>
  <!-- (%smallcptr.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:envar.role.attrib'/>
  <!-- %local.envar.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='errorcode.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='errorcode' mixed='true'>
  <xsd:sequence minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:smallcptr.char.mix'/>
  </xsd:sequence>
  <!-- (%smallcptr.char.mix;)* -->

  <xsd:attributeGroup ref='db:moreinfo.attrib'/>
  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:errorcode.role.attrib'/>
  <!-- %local.errorcode.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='errorname.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='errorname' mixed='true'>
  <xsd:sequence minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:smallcptr.char.mix'/>
  </xsd:sequence>
  <!-- (%smallcptr.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:errorname.role.attrib'/>
  <!-- %local.errorname.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='errortype.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='errortype' mixed='true'>
  <xsd:sequence minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:smallcptr.char.mix'/>
  </xsd:sequence>
  <!-- (%smallcptr.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:errortype.role.attrib'/>
  <!-- %local.errortype.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='filename.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='filename' mixed='true'>
  <xsd:sequence minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:smallcptr.char.mix'/>
  </xsd:sequence>
  <!-- (%smallcptr.char.mix;)* -->

  <!-- Class: Type of filename the element names; no default -->
  <xsd:attribute name='class'>
    <xsd:simpleType>
      <xsd:restriction base='xsd:string'>
        <xsd:enumeration value='headerfile'/>
        <xsd:enumeration value='devicefile'/>
        <xsd:enumeration value='libraryfile'/>
        <xsd:enumeration value='directory'/>
        <xsd:enumeration value='symlink'/>
      </xsd:restriction>
    </xsd:simpleType>
  </xsd:attribute>

  <!-- Path: Search path (possibly system-specific) in which
       file can be found -->
  <xsd:attribute name='path' type='xsd:string'/>

  <xsd:attributeGroup ref='db:moreinfo.attrib'/>
  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:filename.role.attrib'/>
  <!-- %local.filename.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='function.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='function' mixed='true'>
  <xsd:sequence minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:cptr.char.mix'/>
  </xsd:sequence>
  <!-- (%cptr.char.mix;)* -->

  <xsd:attributeGroup ref='db:moreinfo.attrib'/>
  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:function.role.attrib'/>
  <!-- %local.function.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='guibutton.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='guibutton' mixed='true'>
  <xsd:sequence minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:smallcptr.char.mix'/>
  </xsd:sequence>
  <!-- (%smallcptr.char.mix;|accel)* -->

  <xsd:attributeGroup ref='db:moreinfo.attrib'/>
  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:guibutton.role.attrib'/>
  <!-- %local.guibutton.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='guiicon.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='guiicon' mixed='true'>
  <xsd:choice minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:smallcptr.char.mix'/>
    <xsd:element ref='db:accel'/>
  </xsd:choice>
  <!-- (%smallcptr.char.mix;|accel)* -->

  <xsd:attributeGroup ref='db:moreinfo.attrib'/>
  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:guiicon.role.attrib'/>
  <!-- %local.guiicon.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='guilabel.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='guilabel' mixed='true'>
  <xsd:choice minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:smallcptr.char.mix'/>
    <xsd:element ref='db:accel'/>
  </xsd:choice>
  <!-- (%smallcptr.char.mix;|accel)* -->

  <xsd:attributeGroup ref='db:moreinfo.attrib'/>
  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:guilabel.role.attrib'/>
  <!-- %local.guilabel.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='guimenu.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='guimenu' mixed='true'>
  <xsd:choice minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:smallcptr.char.mix'/>
    <xsd:element ref='db:accel'/>
  </xsd:choice>
  <!-- (%smallcptr.char.mix;|accel)* -->

  <xsd:attributeGroup ref='db:moreinfo.attrib'/>
  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:guimenu.role.attrib'/>
  <!-- %local.guimenu.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='guimenuitem.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='guimenuitem' mixed='true'>
  <xsd:choice minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:smallcptr.char.mix'/>
    <xsd:element ref='db:accel'/>
  </xsd:choice>
  <!-- (%smallcptr.char.mix;|accel)* -->

  <xsd:attributeGroup ref='db:moreinfo.attrib'/>
  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:guimenuitem.role.attrib'/>
  <!-- %local.guimenuitem.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='guisubmenu.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='guisubmenu' mixed='true'>
  <xsd:choice minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:smallcptr.char.mix'/>
    <xsd:element ref='db:accel'/>
  </xsd:choice>
  <!-- (%smallcptr.char.mix;|accel)* -->

  <xsd:attributeGroup ref='db:moreinfo.attrib'/>
  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:guisubmenu.role.attrib'/>
  <!-- %local.guisubmenu.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='hardware.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='hardware' mixed='true'>
  <xsd:choice minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:smallcptr.char.mix'/>
  </xsd:choice>
  <!-- (%smallcptr.char.mix;)* -->

  <xsd:attributeGroup ref='db:moreinfo.attrib'/>
  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:hardware.role.attrib'/>
  <!-- %local.hardware.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='interface.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='interface' mixed='true'>
  <xsd:choice minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:smallcptr.char.mix'/>
    <xsd:element ref='db:accel'/>
  </xsd:choice>
  <!-- (%smallcptr.char.mix;|accel)* -->

  <xsd:attributeGroup ref='db:moreinfo.attrib'/>
  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:interface.role.attrib'/>
  <!-- %local.interface.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='keycap.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='keycap' mixed='true'>
  <xsd:choice minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:smallcptr.char.mix'/>
  </xsd:choice>
  <!-- (%smallcptr.char.mix;)* -->

  <xsd:attributeGroup ref='db:moreinfo.attrib'/>
  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:keycap.role.attrib'/>
  <!-- %local.keycap.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='keycode.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='keycode' mixed='true'>
  <xsd:choice minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:smallcptr.char.mix'/>
  </xsd:choice>
  <!-- (%smallcptr.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:keycode.role.attrib'/>
  <!-- %local.keycode.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='keycombo.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='keycombo'>
  <xsd:choice minOccurs='1' maxOccurs='unbounded'>
    <xsd:element ref='db:keycap'/>
    <xsd:element ref='db:keycombo'/>
    <xsd:element ref='db:keysym'/>
    <xsd:element ref='db:mousebutton'/>
  </xsd:choice>
  <!-- ((keycap|keycombo|keysym|mousebutton)+) -->

  <xsd:attributeGroup ref='db:keyaction.attrib'/>
  <xsd:attributeGroup ref='db:moreinfo.attrib'/>
  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:keycombo.role.attrib'/>
  <!-- %local.keycombo.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='keysysm.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='keysym' mixed='true'>
  <xsd:choice minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:smallcptr.char.mix'/>
  </xsd:choice>
  <!-- (%smallcptr.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:keysysm.role.attrib'/>
  <!-- %local.keysym.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='lineannotation.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='lineannotation' mixed='true'>
  <xsd:choice minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:para.char.mix'/>
  </xsd:choice>
  <!-- (%para.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:lineannotation.role.attrib'/>
  <!-- %local.lineannotation.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='literal.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='literal' mixed='true'>
  <xsd:choice minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:cptr.char.mix'/>
  </xsd:choice>
  <!-- (%cptr.char.mix;)* -->

  <xsd:attributeGroup ref='db:moreinfo.attrib'/>
  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:literal.role.attrib'/>
  <!-- %local.literal.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='constant.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='constant' mixed='true'>
  <xsd:choice minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:smallcptr.char.mix'/>
  </xsd:choice>
  <!-- (%smallcptr.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:constant.role.attrib'/>
  <xsd:attribute name='class'>
    <xsd:simpleType>
      <xsd:restriction base='xsd:string'>
        <xsd:enumeration value='limit'/>
      </xsd:restriction>
    </xsd:simpleType>
  </xsd:attribute>
</xsd:complexType>

<xsd:attributeGroup name='varname.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='varname' mixed='true'>
  <xsd:choice minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:smallcptr.char.mix'/>
  </xsd:choice>
  <!-- (%smallcptr.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:varname.role.attrib'/>
  <!-- %local.varname.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='markup.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='markup' mixed='true'>
  <xsd:choice minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:smallcptr.char.mix'/>
  </xsd:choice>
  <!-- (%smallcptr.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:markup.role.attrib'/>
  <!-- %local.markup.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='medialabel.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='medialabel' mixed='true'>
  <xsd:choice minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:smallcptr.char.mix'/>
  </xsd:choice>
  <!-- (%smallcptr.char.mix;)* -->

  <!-- Class: Type of medium named by the element; no default -->
  <xsd:attribute name='class'>
    <xsd:simpleType>
      <xsd:restriction base='xsd:string'>
        <xsd:enumeration value='cartridge'/>
        <xsd:enumeration value='cdrom'/>
        <xsd:enumeration value='disk'/>
        <xsd:enumeration value='tape'/>
      </xsd:restriction>
    </xsd:simpleType>
  </xsd:attribute>
  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:medialabel.role.attrib'/>
  <!-- %local.medialabel.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='menuchoice.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='menuchoice'>
  <xsd:sequence>
    <xsd:element ref='db:shortcut' minOccurs='0' maxOccurs='1'/>
    <xsd:choice minOccurs='1' maxOccurs='unbounded'>
      <xsd:element ref='db:guibutton'/>
      <xsd:element ref='db:guiicon'/>
      <xsd:element ref='db:guilabel'/>
      <xsd:element ref='db:guimenu'/>
      <xsd:element ref='db:guimenuitem'/>
      <xsd:element ref='db:guisubmenu'/>
      <xsd:element ref='db:interface'/>
    </xsd:choice>
  </xsd:sequence>
  <!-- (shortcut?, (guibutton|guiicon|guilabel
		|guimenu|guimenuitem|guisubmenu|interface)+) -->

  <xsd:attributeGroup ref='db:moreinfo.attrib'/>
  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:menuchoice.role.attrib'/>
  <!-- %local.menuchoice.attrib; -->
</xsd:complexType>

<!-- See also KeyCombo -->
<xsd:attributeGroup name='shortcut.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='shortcut'>
  <xsd:choice minOccurs='1' maxOccurs='unbounded'>
    <xsd:element ref='db:keycap'/>
    <xsd:element ref='db:keycombo'/>
    <xsd:element ref='db:keysym'/>
    <xsd:element ref='db:mousebutton'/>
  </xsd:choice>
  <!-- ((keycap|keycombo|keysym|mousebutton)+) -->

  <xsd:attributeGroup ref='db:keyaction.attrib'/>
  <xsd:attributeGroup ref='db:moreinfo.attrib'/>
  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:shortcut.role.attrib'/>
  <!-- %local.shortcut.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='mousebutton.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='mousebutton' mixed='true'>
  <xsd:choice minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:smallcptr.char.mix'/>
  </xsd:choice>
  <!-- (%smallcptr.char.mix;)* -->

  <xsd:attributeGroup ref='db:moreinfo.attrib'/>
  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:mousebutton.role.attrib'/>
  <!-- %local.mousebutton.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='msgtext.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='msgtext'>
  <xsd:choice minOccurs='1' maxOccurs='unbounded'>
    <xsd:group ref='db:component.mix'/>
  </xsd:choice>
  <!-- ((%component.mix;)+) -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:msgtext.role.attrib'/>
  <!-- %local.msgtext.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='option.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='option' mixed='true'>
  <xsd:choice minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:smallcptr.char.mix'/>
  </xsd:choice>
  <!-- (%smallcptr.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:option.role.attrib'/>
  <!-- %local.option.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='optional.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='optional' mixed='true'>
  <xsd:choice minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:cptr.char.mix'/>
  </xsd:choice>
  <!-- (%cptr.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:optional.role.attrib'/>
  <!-- %local.optional.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='parameter.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='parameter' mixed='true'>
  <xsd:choice minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:smallcptr.char.mix'/>
  </xsd:choice>
  <!-- (%smallcptr.char.mix;)* -->

  <!-- Class: Type of the Parameter; no default -->
  <xsd:attribute name='class'>
    <xsd:simpleType>
      <xsd:restriction base='xsd:string'>
        <xsd:enumeration value='command'/>
        <xsd:enumeration value='function'/>
        <xsd:enumeration value='option'/>
      </xsd:restriction>
    </xsd:simpleType>
  </xsd:attribute>
  <xsd:attributeGroup ref='db:moreinfo.attrib'/>
  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:parameter.role.attrib'/>
  <!-- %local.parameter.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='prompt.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='prompt' mixed='true'>
  <xsd:choice minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:smallcptr.char.mix'/>
  </xsd:choice>
  <!-- (%smallcptr.char.mix;)* -->

  <xsd:attributeGroup ref='db:moreinfo.attrib'/>
  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:prompt.role.attrib'/>
  <!-- %local.prompt.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='property.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='property' mixed='true'>
  <xsd:choice minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:smallcptr.char.mix'/>
  </xsd:choice>
  <!-- (%smallcptr.char.mix;)* -->

  <xsd:attributeGroup ref='db:moreinfo.attrib'/>
  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:property.role.attrib'/>
  <!-- %local.property.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='replaceable.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='replaceable' mixed='true'>
  <xsd:choice minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:link.char.class'/>
    <xsd:element ref='db:optional'/>
    <xsd:group ref='db:base.char.class'/>
    <xsd:group ref='db:other.char.class'/>
    <xsd:element ref='db:inlinegraphic'/>
    <xsd:element ref='db:inlinemediaobject'/>
  </xsd:choice>
  <!-- (#PCDATA
		| %link.char.class;
		| optional
		| %base.char.class;
		| %other.char.class;
		| inlinegraphic
                | inlinemediaobject)* -->

  <!-- Class: Type of information the element represents; no
       default -->
  <xsd:attribute name='class'>
    <xsd:simpleType>
      <xsd:restriction base='xsd:string'>
        <xsd:enumeration value='command'/>
        <xsd:enumeration value='function'/>
        <xsd:enumeration value='option'/>
        <xsd:enumeration value='parameter'/>
      </xsd:restriction>
    </xsd:simpleType>
  </xsd:attribute>

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:replaceable.role.attrib'/>
  <!-- %local.replaceable.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='returnvalue.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='returnvalue' mixed='true'>
  <xsd:choice minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:smallcptr.char.mix'/>
  </xsd:choice>
  <!-- (%smallcptr.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:returnvalue.role.attrib'/>
  <!-- %local.returnvalue.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='sgmltag.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='sgmltag' mixed='true'>
  <xsd:choice minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:smallcptr.char.mix'/>
  </xsd:choice>
  <!-- (%smallcptr.char.mix;)* -->

  <!-- Class: Type of SGML construct the element names; no default -->
  <xsd:attribute name='class'>
    <xsd:simpleType>
      <xsd:restriction base='xsd:string'>
        <xsd:enumeration value='attribute'/>
        <xsd:enumeration value='attvalue'/>
        <xsd:enumeration value='element'/>
        <xsd:enumeration value='endtag'/>
        <xsd:enumeration value='emptytag'/>
        <xsd:enumeration value='genentity'/>
        <xsd:enumeration value='numcharref'/>
        <xsd:enumeration value='paramentity'/>
        <xsd:enumeration value='pi'/>
        <xsd:enumeration value='xmlpi'/>
        <xsd:enumeration value='starttag'/>
        <xsd:enumeration value='sgmlcomment'/>
      </xsd:restriction>
    </xsd:simpleType>
  </xsd:attribute>

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:sgmltag.role.attrib'/>
  <!-- %local.sgmltag.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='structfield.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='structfield' mixed='true'>
  <xsd:choice minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:smallcptr.char.mix'/>
  </xsd:choice>
  <!-- (%smallcptr.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:structfield.role.attrib'/>
  <!-- %local.structfield.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='structname.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='structname' mixed='true'>
  <xsd:choice minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:smallcptr.char.mix'/>
  </xsd:choice>
  <!-- (%smallcptr.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:structname.role.attrib'/>
  <!-- %local.structname.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='symbol.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='symbol' mixed='true'>
  <xsd:choice minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:smallcptr.char.mix'/>
  </xsd:choice>
  <!-- (%smallcptr.char.mix;)* -->

  <!-- Class: Type of symbol; no default -->
  <xsd:attribute name='class'>
    <xsd:simpleType>
      <xsd:restriction base='xsd:string'>
        <xsd:enumeration value='limit'/>
      </xsd:restriction>
    </xsd:simpleType>
  </xsd:attribute>

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:symbol.role.attrib'/>
  <!-- %local.symbol.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='systemitem.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='systemitem' mixed='true'>
  <xsd:choice minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:smallcptr.char.mix'/>
    <xsd:element ref='db:acronym'/>
  </xsd:choice>
  <!-- (%smallcptr.char.mix; | acronym)* -->

  <!-- Class: Type of system item the element names; no default -->
  <xsd:attribute name='class'>
    <xsd:simpleType>
      <xsd:restriction base='xsd:string'>
        <xsd:enumeration value='constant'/>
        <xsd:enumeration value='groupname'/>
        <xsd:enumeration value='library'/>
        <xsd:enumeration value='macro'/>
        <xsd:enumeration value='osname'/>
        <xsd:enumeration value='resource'/>
        <xsd:enumeration value='systemname'/>
        <xsd:enumeration value='username'/>
      </xsd:restriction>
    </xsd:simpleType>
  </xsd:attribute>

  <xsd:attributeGroup ref='db:moreinfo.attrib'/>
  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:systemitem.role.attrib'/>
  <!-- %local.systemitem.attrib; -->
</xsd:complexType>


<xsd:attributeGroup name='token.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='token' mixed='true'>
  <xsd:choice minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:smallcptr.char.mix'/>
  </xsd:choice>
  <!-- (%smallcptr.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:token.role.attrib'/>
  <!-- %local.token.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='type.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='type' mixed='true'>
  <xsd:choice minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:smallcptr.char.mix'/>
  </xsd:choice>
  <!-- (%smallcptr.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:type.role.attrib'/>
  <!-- %local.type.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='userinput.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='userinput' mixed='true'>
  <xsd:choice minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:cptr.char.mix'/>
  </xsd:choice>
  <!-- (%cptr.char.mix;)* -->

  <xsd:attributeGroup ref='db:moreinfo.attrib'/>
  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:userinput.role.attrib'/>
  <!-- %local.userinput.attrib; -->
</xsd:complexType>

<!-- General words and phrases ............................................ -->

<xsd:attributeGroup name='abbrev.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='abbrev' mixed='true'>
  <xsd:choice minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:word.char.mix'/>
  </xsd:choice>
  <!-- (%word.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:abbrev.role.attrib'/>
  <!-- %local.abbrev.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='acronym.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='acronym' mixed='true'>
  <xsd:choice minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:word.char.mix'/>
  </xsd:choice>
  <!-- (%word.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:acronym.role.attrib'/>
  <!-- %local.acronym.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='citation.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='citation' mixed='true'>
  <xsd:choice minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:para.char.mix'/>
  </xsd:choice>
  <!-- (%para.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:citation.role.attrib'/>
  <!-- %local.citation.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='citerefentry.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='citerefentry'>
  <xsd:sequence>
    <xsd:element ref='db:refentrytitle'/>
    <xsd:element ref='db:manvolnum' minOccurs='0' maxOccurs='1'/>
  </xsd:sequence>
  <!-- (refentrytitle, manvolnum?) -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:citerefentry.role.attrib'/>
  <!-- %local.citerefentry.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='refentrytitle.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='refentrytitle' mixed='true'>
  <xsd:choice minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:para.char.mix'/>
  </xsd:choice>
  <!-- (%para.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:refentrytitle.role.attrib'/>
  <!-- %local.refentrytitle.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='namvolnum.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='manvolnum' mixed='true'>
  <xsd:choice minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:word.char.mix'/>
  </xsd:choice>
  <!-- (%word.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:namvolnum.role.attrib'/>
  <!-- %local.manvolnum.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='citetitle.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='citetitle' mixed='true'>
  <xsd:choice minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:para.char.mix'/>
  </xsd:choice>
  <!-- (%para.char.mix;)* -->

  <!-- Pubwork: Genre of published work cited; no default -->
  <xsd:attribute name='pubwork'>
    <xsd:simpleType>
      <xsd:restriction base='xsd:string'>
        <xsd:enumeration value='article'/>
        <xsd:enumeration value='book'/>
        <xsd:enumeration value='chapter'/>
        <xsd:enumeration value='part'/>
        <xsd:enumeration value='refentry'/>
        <xsd:enumeration value='section'/>
        <xsd:enumeration value='journal'/>
        <xsd:enumeration value='series'/>
        <xsd:enumeration value='set'/>
        <xsd:enumeration value='manuscript'/>
      </xsd:restriction>
    </xsd:simpleType>
  </xsd:attribute>

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:citetitle.role.attrib'/>
  <!-- %local.citetitle.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='emphasis.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='emphasis' mixed='true'>
  <xsd:choice minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:para.char.mix'/>
  </xsd:choice>
  <!-- (%para.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:emphasis.role.attrib'/>
  <!-- %local.emphasis.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='firstterm.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='firstterm' mixed='true'>
  <xsd:choice minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:word.char.mix'/>
  </xsd:choice>
  <!-- (%word.char.mix;)* -->

  <!-- to GlossEntry or other explanation -->
  <xsd:attributeGroup ref='db:linkend.attrib'/>
  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:firstterm.role.attrib'/>
  <!-- %local.firstterm.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='foreignphrase.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='foreignphrase' mixed='true'>
  <xsd:choice minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:para.char.mix'/>
  </xsd:choice>
  <!-- (%para.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:foreignphrase.role.attrib'/>
  <!-- %local.foreignphrase.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='glossterm.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='glossterm' mixed='true'>
  <xsd:choice minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:para.char.mix'/>
  </xsd:choice>
  <!-- (%para.char.mix;)* -->

  <!-- to GlossEntry if Glossterm used in text -->
  <xsd:attributeGroup ref='db:linkend.attrib'/>

  <!-- BaseForm: Provides the form of GlossTerm to be used
       for indexing -->
  <xsd:attribute name='baseform' type='xsd:string'/>

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:glossterm.role.attrib'/>
  <!-- %local.glossterm.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='phrase.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='phrase' mixed='true'>
  <xsd:choice minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:para.char.mix'/>
  </xsd:choice>
  <!-- (%para.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:phrase.role.attrib'/>
  <!-- %local.phrase.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='quote.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='quote' mixed='true'>
  <xsd:choice minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:para.char.mix'/>
  </xsd:choice>
  <!-- (%para.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:quote.role.attrib'/>
  <!-- %local.quote.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='ssscript.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:group name='subscriptContentModel'>
  <xsd:choice minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:link.char.class'/>
    <xsd:element ref='db:emphasis'/>
    <xsd:element ref='db:replaceable'/>
    <xsd:element ref='db:symbol'/>
    <xsd:element ref='db:inlinegraphic'/>
    <xsd:element ref='db:inlinemediaobject'/>
    <xsd:group ref='db:base.char.class'/>
    <xsd:group ref='db:other.char.class'/>
  </xsd:choice>
  <!-- (#PCDATA
		| %link.char.class;
		| emphasis
		| replaceable
		| symbol
		| inlinegraphic
                | inlinemediaobject
		| %base.char.class;
		| %other.char.class;)* -->

</xsd:group>

<xsd:complexType name='subscript' mixed='true'>
  <xsd:sequence>
    <xsd:group ref='db:subscriptContentModel'/>
  </xsd:sequence>

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:ssscript.role.attrib'/>
  <!-- %local.ssscript.attrib; -->
</xsd:complexType>

<xsd:complexType name='superscript' mixed='true'>
  <xsd:sequence>
    <xsd:group ref='db:subscriptContentModel'/>
  </xsd:sequence>

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:ssscript.role.attrib'/>
  <!-- %local.ssscript.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='trademark.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='trademark' mixed='true'>
  <xsd:choice minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:link.char.class'/>
    <xsd:group ref='db:tech.char.class'/>
    <xsd:group ref='db:base.char.class'/>
    <xsd:group ref='db:other.char.class'/>
    <xsd:element ref='db:inlinegraphic'/>
    <xsd:element ref='db:inlinemediaobject'/>
    <xsd:element ref='db:emphasis'/>
  </xsd:choice>
  <!-- (#PCDATA
		| %link.char.class;
		| %tech.char.class;
		| %base.char.class;
		| %other.char.class;
		| inlinegraphic
                | inlinemediaobject
		| emphasis)* -->

  <!-- Class: More precisely identifies the item the element names -->
  <xsd:attribute name='class' use='default' value='trade'>
    <xsd:simpleType>
      <xsd:restriction base='xsd:string'>
        <xsd:enumeration value='service'/>
        <xsd:enumeration value='trade'/>
        <xsd:enumeration value='registered'/>
        <xsd:enumeration value='copyright'/>
      </xsd:restriction>
    </xsd:simpleType>
  </xsd:attribute>

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:trademark.role.attrib'/>
  <!-- %local.trademark.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='wordasword.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='wordasword' mixed='true'>
  <xsd:choice minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:word.char.mix'/>
  </xsd:choice>
  <!-- (%word.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:wordasword.role.attrib'/>
  <!-- %local.wordasword.attrib; -->
</xsd:complexType>

<!-- Links and cross-references ........................................... -->

<xsd:attributeGroup name='link.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='link' mixed='true'>
  <xsd:choice minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:para.char.mix'/>
  </xsd:choice>
  <!-- (%para.char.mix;)* -->

  <!-- Endterm: ID of element containing text that is to be
       fetched from elsewhere in the document to appear as
       the content of this element -->
  <xsd:attribute name='endterm' type='xsd:IDREF'/>

  <!-- to linked-to object -->
  <xsd:attributeGroup ref='db:linkendreq.attrib'/>

  <!-- Type: Freely assignable parameter -->
  <xsd:attribute name='type' type='xsd:string'/>

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:link.role.attrib'/>
  <!-- %local.link.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='olink.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='olink' mixed='true'>
  <xsd:choice minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:para.char.mix'/>
  </xsd:choice>
  <!-- (%para.char.mix;)* -->

  <!-- TargetDocEnt: Name of an entity to be the target of the link -->
  <!-- FIXME: -->
  <!-- targetdocent	ENTITY 		#IMPLIED -->

  <!-- LinkMode: ID of a ModeSpec containing instructions for
       operating on the entity named by TargetDocEnt -->
  <xsd:attribute name='linkmode' type='xsd:IDREF'/>

  <!-- LocalInfo: Information that may be passed to ModeSpec -->
  <xsd:attribute name='localinfo' type='xsd:string'/>

  <!-- Type: Freely assignable parameter -->
  <xsd:attribute name='type' type='xsd:string'/>

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:olink.role.attrib'/>
  <!-- %local.olink.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='ulink.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='ulink' mixed='true'>
  <xsd:choice minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:para.char.mix'/>
  </xsd:choice>
  <!-- (%para.char.mix;)* -->

  <!-- URL: uniform resource locator; the target of the ULink -->
  <xsd:attribute name='url' type='xsd:string' use='required'/>

  <!-- Type: Freely assignable parameter -->
  <xsd:attribute name='type' type='xsd:string'/>

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:ulink.role.attrib'/>
  <!-- %local.ulink.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='footnoteref.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='footnoteref'>
  <!-- EMPTY -->
  <xsd:complexContent>
    <xsd:restriction base='xsd:anyType'>
      <!-- to footnote content supplied elsewhere -->
      <!-- FIXME: constrain -->
      <xsd:attributeGroup ref='db:linkendreq.attrib'/>

      <xsd:attributeGroup ref='db:label.attrib'/>
      <xsd:attributeGroup ref='db:common.attrib'/>
      <xsd:attributeGroup ref='db:footnoteref.role.attrib'/>
      <!-- %local.footnoteref.attrib; -->
    </xsd:restriction>
  </xsd:complexContent>
</xsd:complexType>

<xsd:attributeGroup name='xref.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='xref'>
  <!-- EMPTY -->
  <xsd:complexContent>
    <xsd:restriction base='xsd:anyType'>

      <!-- Endterm: ID of element containing text that is to be
           fetched from elsewhere in the document to appear as
           the content of this element -->
      <xsd:attribute name='endterm' type='xsd:IDREF'/>

      <!-- to linked-to object -->
      <xsd:attributeGroup ref='db:linkendreq.attrib'/>
      <xsd:attributeGroup ref='db:common.attrib'/>
      <xsd:attributeGroup ref='db:xref.role.attrib'/>
      <!-- %local.xref.attrib; -->
    </xsd:restriction>
  </xsd:complexContent>
</xsd:complexType>

<!-- Ubiquitous elements .................................................. -->

<xsd:attributeGroup name='anchor.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='anchor'>
  <!-- EMPTY -->
  <xsd:complexContent>
    <xsd:restriction base='xsd:anyType'>
      <xsd:attributeGroup ref='db:idreq.attrib'/>
      <xsd:attributeGroup ref='db:pagenum.attrib'/>
      <xsd:attributeGroup ref='db:remap.attrib'/>
      <xsd:attributeGroup ref='db:xreflabel.attrib'/>
      <xsd:attributeGroup ref='db:revisionflag.attrib'/>
      <xsd:attributeGroup ref='db:effectivity.attrib'/>
      <xsd:attributeGroup ref='db:anchor.role.attrib'/>
      <!-- %local.anchor.attrib; -->
    </xsd:restriction>
  </xsd:complexContent>
</xsd:complexType>

<xsd:attributeGroup name='beginpage.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='beginpage'>
  <!-- EMPTY -->
  <xsd:complexContent>
    <xsd:restriction base='xsd:anyType'>
        <!-- PageNum: Number of page that begins at this point -->
        <xsd:attributeGroup ref='db:pagenum.attrib'/>
        <xsd:attributeGroup ref='db:common.attrib'/>
        <xsd:attributeGroup ref='db:beginpage.role.attrib'/>
        <!-- %local.beginpage.attrib; -->
    </xsd:restriction>
  </xsd:complexContent>
</xsd:complexType>

<!-- IndexTerms appear in the text flow for generating or linking an
     index. -->

<xsd:attributeGroup name='indexterm.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='indexterm'>
  <xsd:sequence>
    <xsd:element ref='db:primary' minOccurs='0' maxOccurs='1'/>
    <xsd:choice minOccurs='0' maxOccurs='1'>
      <xsd:sequence>
        <xsd:element ref='db:secondary'/>
        <xsd:choice minOccurs='0' maxOccurs='1'>
          <xsd:sequence>
            <xsd:element ref='db:tertiary'/>
            <xsd:choice minOccurs='0' maxOccurs='1'>
              <xsd:element ref='db:see'/>
              <xsd:element ref='db:seealso' minOccurs='1' maxOccurs='unbounded'/>
            </xsd:choice>
          </xsd:sequence>
          <xsd:element ref='db:see'/>
          <xsd:element ref='db:seealso' minOccurs='1' maxOccurs='unbounded'/>
        </xsd:choice>
        <xsd:element ref='db:see'/>
        <xsd:element ref='db:seealso' minOccurs='1' maxOccurs='unbounded'/>
      </xsd:sequence>
    </xsd:choice>
  </xsd:sequence>
  <!-- (primary?, ((secondary, ((tertiary, (see|seealso+)?)
		| see | seealso+)?) | see | seealso+)?) -->

  <!-- Scope: Indicates which generated indices the IndexTerm
       should appear in: Global (whole document set), Local (this
       document only), or All (both) -->
  <xsd:attribute name='scope'>
    <xsd:simpleType>
      <xsd:restriction base='xsd:string'>
        <xsd:enumeration value='all'/>
        <xsd:enumeration value='global'/>
        <xsd:enumeration value='local'/>
      </xsd:restriction>
    </xsd:simpleType>
  </xsd:attribute>

  <!-- Significance: Whether this IndexTerm is the most pertinent
       of its series (Preferred) or not (Normal, the default) -->
  <xsd:attribute name='significance' use='default' value='normal'>
    <xsd:simpleType>
      <xsd:restriction base='xsd:string'>
        <xsd:enumeration value='preferred'/>
        <xsd:enumeration value='normal'/>
      </xsd:restriction>
    </xsd:simpleType>
  </xsd:attribute>

  <!-- Class: Indicates type of IndexTerm; default is Singular,
       or EndOfRange if StartRef is supplied; StartOfRange value
       must be supplied explicitly on starts of ranges -->
  <xsd:attribute name='class'>
    <xsd:simpleType>
      <xsd:restriction base='xsd:string'>
        <xsd:enumeration value='singular'/>
        <xsd:enumeration value='startofrange'/>
        <xsd:enumeration value='endofrange'/>
      </xsd:restriction>
    </xsd:simpleType>
  </xsd:attribute>

  <!-- StartRef: ID of the IndexTerm that starts the indexing
       range ended by this IndexTerm -->
  <!-- FIXME: constrain -->
  <xsd:attribute name='startref' type='xsd:IDREF'/>

  <!-- Zone: IDs of the elements to which the IndexTerm applies,
       and indicates that the IndexTerm applies to those entire
       elements rather than the point at which the IndexTerm
      occurs -->
  <!-- FIXME: constrain -->
  <xsd:attribute name='zone' type='xsd:IDREFS'/>
  <xsd:attributeGroup ref='db:pagenum.attrib'/>
  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:indexterm.role.attrib'/>
  <!-- %local.indexterm.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='primsecter.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='primary' mixed='true'>
  <xsd:choice minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:ndxterm.char.mix'/>
  </xsd:choice>
  <!-- (%ndxterm.char.mix;)* -->

  <!-- SortAs: Alternate sort string for index sorting, e.g.,
       "fourteen" for an element containing "14" -->
  <xsd:attribute name='sortas' type='xsd:string'/>

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:primsecter.role.attrib'/>
  <!-- %local.primsecter.attrib; -->
</xsd:complexType>

<xsd:complexType name='secondary' mixed='true'>
  <xsd:choice minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:ndxterm.char.mix'/>
  </xsd:choice>
  <!-- (%ndxterm.char.mix;)* -->
  <!-- SortAs: Alternate sort string for index sorting, e.g.,
       "fourteen" for an element containing "14" -->
  <xsd:attribute name='sortas' type='xsd:string'/>

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:primsecter.role.attrib'/>
  <!-- %local.primsecter.attrib; -->
</xsd:complexType>

<xsd:complexType name='tertiary' mixed='true'>
  <xsd:choice minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:ndxterm.char.mix'/>
  </xsd:choice>
  <!-- (%ndxterm.char.mix;)* -->

  <!-- SortAs: Alternate sort string for index sorting, e.g.,
       "fourteen" for an element containing "14" -->
  <xsd:attribute name='sortas' type='xsd:string'/>

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:primsecter.role.attrib'/>
  <!-- %local.primsecter.attrib; -->
</xsd:complexType>

<xsd:attributeGroup name='seeseealso.role.attrib'>
  <xsd:attributeGroup ref='db:role.attrib'/>
</xsd:attributeGroup>

<xsd:complexType name='see' mixed='true'>
  <xsd:choice minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:ndxterm.char.mix'/>
  </xsd:choice>
  <!-- (%ndxterm.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:seeseealso.role.attrib'/>
  <!-- %local.seeseealso.attrib; -->
</xsd:complexType>

<xsd:complexType name='seealso' mixed='true'>
  <xsd:choice minOccurs='0' maxOccurs='unbounded'>
    <xsd:group ref='db:ndxterm.char.mix'/>
  </xsd:choice>
  <!-- (%ndxterm.char.mix;)* -->

  <xsd:attributeGroup ref='db:common.attrib'/>
  <xsd:attributeGroup ref='db:seeseealso.role.attrib'/>
  <!-- %local.seeseealso.attrib; -->
</xsd:complexType>

<xsd:element name='abbrev' type='db:abbrev'/>
<xsd:element name='abstract' type='db:abstract'/>
<xsd:element name='accel' type='db:accel'/>
<xsd:element name='ackno' type='db:ackno'/>
<xsd:element name='acronym' type='db:acronym'/>
<xsd:element name='action' type='db:action'/>
<xsd:element name='address' type='db:address'/>
<xsd:element name='affiliation' type='db:affiliation'/>
<xsd:element name='alt' type='db:alt'/>
<xsd:element name='anchor' type='db:anchor'/>
<xsd:element name='answer' type='db:answer'/>
<xsd:element name='application' type='db:application'/>
<xsd:element name='area' type='db:area'/>
<xsd:element name='areaset' type='db:areaset'/>
<xsd:element name='areaspec' type='db:areaspec'/>
<xsd:element name='arg' type='db:arg'/>
<xsd:element name='articleinfo' type='db:articleinfo'/>
<xsd:element name='artpagenums' type='db:artpagenums'/>
<xsd:element name='attribution' type='db:attribution'/>
<xsd:element name='audiodata' type='db:audiodata'/>
<xsd:element name='audioobject' type='db:audioobject'/>
<xsd:element name='author' type='db:author'/>
<xsd:element name='authorblurb' type='db:authorblurb'/>
<xsd:element name='authorgroup' type='db:authorgroup'/>
<xsd:element name='authorinitials' type='db:authorinitials'/>
<xsd:element name='beginpage' type='db:beginpage'/>
<xsd:element name='biblioentry' type='db:biblioentry'/>
<xsd:element name='bibliomisc' type='db:bibliomisc'/>
<xsd:element name='bibliomixed' type='db:bibliomixed'/>
<xsd:element name='bibliomset' type='db:bibliomset'/>
<xsd:element name='biblioset' type='db:biblioset'/>
<xsd:element name='blockquote' type='db:blockquote'/>
<xsd:element name='bridgehead' type='db:bridgehead'/>
<xsd:element name='callout' type='db:callout'/>
<xsd:element name='calloutlist' type='db:calloutlist'/>
<xsd:element name='caption' type='db:caption'/>
<xsd:element name='caution' type='db:admonitionType'/>
<xsd:element name='citation' type='db:citation'/>
<xsd:element name='citerefentry' type='db:citerefentry'/>
<xsd:element name='citetitle' type='db:citetitle'/>
<xsd:element name='city' type='db:city'/>
<xsd:element name='classname' type='db:classname'/>
<xsd:element name='classsynopsis' type='db:classsynopsis'/>
<xsd:element name='classsynopsisinfo' type='db:classsynopsisinfo'/>
<xsd:element name='cmdsynopsis' type='db:cmdsynopsis'/>
<xsd:element name='co' type='db:co'/>
<xsd:element name='collab' type='db:collab'/>
<xsd:element name='collabname' type='db:collabname'/>
<xsd:element name='command' type='db:command'/>
<xsd:element name='computeroutput' type='db:computeroutput'/>
<xsd:element name='confdates' type='db:confdates'/>
<xsd:element name='confgroup' type='db:confgroup'/>
<xsd:element name='confnum' type='db:confnum'/>
<xsd:element name='confsponsor' type='db:confsponsor'/>
<xsd:element name='conftitle' type='db:conftitle'/>
<xsd:element name='constant' type='db:constant'/>
<xsd:element name='constructorsynopsis' type='db:constructorsynopsis'/>
<xsd:element name='contractnum' type='db:contractnum'/>
<xsd:element name='contractsponsor' type='db:contractsponsor'/>
<xsd:element name='contrib' type='db:contrib'/>
<xsd:element name='copyright' type='db:copyright'/>
<xsd:element name='corpauthor' type='db:corpauthor'/>
<xsd:element name='corpname' type='db:corpname'/>
<xsd:element name='country' type='db:country'/>
<xsd:element name='database' type='db:database'/>
<xsd:element name='date' type='db:date'/>
<xsd:element name='destructorsynopsis' type='db:destructorsynopsis'/>
<xsd:element name='edition' type='db:edition'/>
<xsd:element name='editor' type='db:editor'/>
<xsd:element name='email' type='db:email'/>
<xsd:element name='emphasis' type='db:emphasis'/>
<xsd:element name='envar' type='db:envar'/>
<xsd:element name='epigraph' type='db:epigraph'/>
<xsd:element name='equation' type='db:equation'/>
<xsd:element name='errorcode' type='db:errorcode'/>
<xsd:element name='errorname' type='db:errorname'/>
<xsd:element name='errortype' type='db:errortype'/>
<xsd:element name='example' type='db:example'/>
<xsd:element name='exceptionname' type='db:exceptionname'/>
<xsd:element name='fax' type='db:fax'/>
<xsd:element name='fieldsynopsis' type='db:fieldsynopsis'/>
<xsd:element name='figure' type='db:figure'/>
<xsd:element name='filename' type='db:filename'/>
<xsd:element name='firstname' type='db:firstname'/>
<xsd:element name='firstterm' type='db:firstterm'/>
<xsd:element name='footnote' type='db:footnote'/>
<xsd:element name='footnoteref' type='db:footnoteref'/>
<xsd:element name='foreignphrase' type='db:foreignphrase'/>
<xsd:element name='formalpara' type='db:formalpara'/>
<xsd:element name='funcdef' type='db:funcdef'/>
<xsd:element name='funcparams' type='db:funcparams'/>
<xsd:element name='funcprototype' type='db:funcprototype'/>
<xsd:element name='funcsynopsis' type='db:funcsynopsis'/>
<xsd:element name='funcsynopsisinfo' type='db:funcsynopsisinfo'/>
<xsd:element name='function' type='db:function'/>
<xsd:element name='glossdef' type='db:glossdef'/>
<xsd:element name='glossentry' type='db:glossentry'/>
<xsd:element name='glosslist' type='db:glosslist'/>
<xsd:element name='glosssee' type='db:glosssee'/>
<xsd:element name='glossseealso' type='db:glossseealso'/>
<xsd:element name='glossterm' type='db:glossterm'/>
<xsd:element name='graphic' type='db:graphic'/>
<xsd:element name='graphicco' type='db:graphicco'/>
<xsd:element name='group' type='db:group'/>
<xsd:element name='guibutton' type='db:guibutton'/>
<xsd:element name='guiicon' type='db:guiicon'/>
<xsd:element name='guilabel' type='db:guilabel'/>
<xsd:element name='guimenu' type='db:guimenu'/>
<xsd:element name='guimenuitem' type='db:guimenuitem'/>
<xsd:element name='guisubmenu' type='db:guisubmenu'/>
<xsd:element name='hardware' type='db:hardware'/>
<xsd:element name='highlights' type='db:highlights'/>
<xsd:element name='holder' type='db:holder'/>
<xsd:element name='honorific' type='db:honorific'/>
<xsd:element name='imagedata' type='db:imagedata'/>
<xsd:element name='imageobject' type='db:imageobject'/>
<xsd:element name='imageobjectco' type='db:imageobjectco'/>
<xsd:element name='important' type='db:admonitionType'/>
<xsd:element name='indexterm' type='db:indexterm'/>
<xsd:element name='informalequation' type='db:informalequation'/>
<xsd:element name='informalexample' type='db:informalexample'/>
<xsd:element name='informalfigure' type='db:informalfigure'/>
<xsd:element name='informaltable' type='db:informaltable'/>
<xsd:element name='initializer' type='db:initializer'/>
<xsd:element name='inlineequation' type='db:inlineequation'/>
<xsd:element name='inlinegraphic' type='db:inlinegraphic'/>
<xsd:element name='inlinemediaobject' type='db:inlinemediaobject'/>
<xsd:element name='interface' type='db:interface'/>
<xsd:element name='interfacename' type='db:interfacename'/>
<xsd:element name='invpartnumber' type='db:invpartnumber'/>
<xsd:element name='isbn' type='db:isbn'/>
<xsd:element name='issn' type='db:issn'/>
<xsd:element name='issuenum' type='db:issuenum'/>
<xsd:element name='itemizedlist' type='db:itemizedlist'/>
<xsd:element name='itermset' type='db:itermset'/>
<xsd:element name='jobtitle' type='db:jobtitle'/>
<xsd:element name='keycap' type='db:keycap'/>
<xsd:element name='keycode' type='db:keycode'/>
<xsd:element name='keycombo' type='db:keycombo'/>
<xsd:element name='keysym' type='db:keysym'/>
<xsd:element name='keyword' type='db:keyword'/>
<xsd:element name='keywordset' type='db:keywordset'/>
<xsd:element name='label' type='db:label'/>
<xsd:element name='legalnotice' type='db:legalnotice'/>
<xsd:element name='lineage' type='db:lineage'/>
<xsd:element name='lineannotation' type='db:lineannotation'/>
<xsd:element name='link' type='db:link'/>
<xsd:element name='listitem' type='db:listitem'/>
<xsd:element name='literal' type='db:literal'/>
<xsd:element name='literallayout' type='db:literallayout'/>
<xsd:element name='manvolnum' type='db:manvolnum'/>
<xsd:element name='markup' type='db:markup'/>
<xsd:element name='medialabel' type='db:medialabel'/>
<xsd:element name='mediaobject' type='db:mediaobject'/>
<xsd:element name='mediaobjectco' type='db:mediaobjectco'/>
<xsd:element name='member' type='db:member'/>
<xsd:element name='menuchoice' type='db:menuchoice'/>
<xsd:element name='methodname' type='db:methodname'/>
<xsd:element name='methodparam' type='db:methodparam'/>
<xsd:element name='methodsynopsis' type='db:methodsynopsis'/>
<xsd:element name='modespec' type='db:modespec'/>
<xsd:element name='modifier' type='db:modifier'/>
<xsd:element name='mousebutton' type='db:mousebutton'/>
<xsd:element name='msg' type='db:msg'/>
<xsd:element name='msgaud' type='db:msgaud'/>
<xsd:element name='msgentry' type='db:msgentry'/>
<xsd:element name='msgexplan' type='db:msgexplan'/>
<xsd:element name='msginfo' type='db:msginfo'/>
<xsd:element name='msglevel' type='db:msglevel'/>
<xsd:element name='msgmain' type='db:msgmain'/>
<xsd:element name='msgorig' type='db:msgorig'/>
<xsd:element name='msgrel' type='db:msgrel'/>
<xsd:element name='msgset' type='db:msgset'/>
<xsd:element name='msgsub' type='db:msgsub'/>
<xsd:element name='msgtext' type='db:msgtext'/>
<xsd:element name='note' type='db:admonitionType'/>
<xsd:element name='objectinfo' type='db:objectinfo'/>
<xsd:element name='olink' type='db:olink'/>
<xsd:element name='ooclass' type='db:ooclass'/>
<xsd:element name='ooexception' type='db:ooexception'/>
<xsd:element name='oointerface' type='db:oointerface'/>
<xsd:element name='option' type='db:option'/>
<xsd:element name='optional' type='db:optional'/>
<xsd:element name='orderedlist' type='db:orderedlist'/>
<xsd:element name='orgdiv' type='db:orgdiv'/>
<xsd:element name='orgname' type='db:orgname'/>
<xsd:element name='otheraddr' type='db:otheraddr'/>
<xsd:element name='othercredit' type='db:othercredit'/>
<xsd:element name='othername' type='db:othername'/>
<xsd:element name='pagenums' type='db:pagenums'/>
<xsd:element name='para' type='db:para'/>
<xsd:element name='paramdef' type='db:paramdef'/>
<xsd:element name='parameter' type='db:parameter'/>
<xsd:element name='phone' type='db:phone'/>
<xsd:element name='phrase' type='db:phrase'/>
<xsd:element name='pob' type='db:pob'/>
<xsd:element name='postcode' type='db:postcode'/>
<xsd:element name='primary' type='db:primary'/>
<xsd:element name='printhistory' type='db:printhistory'/>
<xsd:element name='procedure' type='db:procedure'/>
<xsd:element name='productname' type='db:productname'/>
<xsd:element name='productnumber' type='db:productnumber'/>
<xsd:element name='programlisting' type='db:programlisting'/>
<xsd:element name='programlistingco' type='db:programlistingco'/>
<xsd:element name='prompt' type='db:prompt'/>
<xsd:element name='property' type='db:property'/>
<xsd:element name='pubdate' type='db:pubdate'/>
<xsd:element name='publisher' type='db:publisher'/>
<xsd:element name='publishername' type='db:publishername'/>
<xsd:element name='pubsnumber' type='db:pubsnumber'/>
<xsd:element name='qandadiv' type='db:qandadiv'/>
<xsd:element name='qandaentry' type='db:qandaentry'/>
<xsd:element name='qandaset' type='db:qandaset'/>
<xsd:element name='question' type='db:question'/>
<xsd:element name='quote' type='db:quote'/>
<xsd:element name='refentrytitle' type='db:refentrytitle'/>
<xsd:element name='releaseinfo' type='db:releaseinfo'/>
<xsd:element name='remark' type='db:remark'/>
<xsd:element name='replaceable' type='db:replaceable'/>
<xsd:element name='returnvalue' type='db:returnvalue'/>
<xsd:element name='revdescription' type='db:revdescription'/>
<xsd:element name='revhistory' type='db:revhistory'/>
<xsd:element name='revision' type='db:revision'/>
<xsd:element name='revnumber' type='db:revnumber'/>
<xsd:element name='revremark' type='db:revremark'/>
<xsd:element name='sbr' type='db:sbr'/>
<xsd:element name='screen' type='db:screen'/>
<xsd:element name='screenco' type='db:screenco'/>
<xsd:element name='screeninfo' type='db:screeninfo'/>
<xsd:element name='screenshot' type='db:screenshot'/>
<xsd:element name='secondary' type='db:secondary'/>
<xsd:element name='see' type='db:see'/>
<xsd:element name='seealso' type='db:seealso'/>
<xsd:element name='seg' type='db:seg'/>
<xsd:element name='seglistitem' type='db:seglistitem'/>
<xsd:element name='segmentedlist' type='db:segmentedlist'/>
<xsd:element name='segtitle' type='db:segtitle'/>
<xsd:element name='seriesvolnums' type='db:seriesvolnums'/>
<xsd:element name='sgmltag' type='db:sgmltag'/>
<xsd:element name='shortaffil' type='db:shortaffil'/>
<xsd:element name='shortcut' type='db:shortcut'/>
<xsd:element name='sidebar' type='db:sidebar'/>
<xsd:element name='sidebarinfo' type='db:sidebarinfo'/>
<xsd:element name='simpara' type='db:simpara'/>
<xsd:element name='simplelist' type='db:simplelist'/>
<xsd:element name='simplemsgentry' type='db:simplemsgentry'/>
<xsd:element name='state' type='db:state'/>
<xsd:element name='step' type='db:step'/>
<xsd:element name='street' type='db:street'/>
<xsd:element name='structfield' type='db:structfield'/>
<xsd:element name='structname' type='db:structname'/>
<xsd:element name='subject' type='db:subject'/>
<xsd:element name='subjectset' type='db:subjectset'/>
<xsd:element name='subjectterm' type='db:subjectterm'/>
<xsd:element name='subscript' type='db:subscript'/>
<xsd:element name='substeps' type='db:substeps'/>
<xsd:element name='subtitle' type='db:subtitle'/>
<xsd:element name='superscript' type='db:superscript'/>
<xsd:element name='surname' type='db:surname'/>
<xsd:element name='symbol' type='db:symbol'/>
<xsd:element name='synopfragment' type='db:synopfragment'/>
<xsd:element name='synopfragmentref' type='db:synopfragmentref'/>
<xsd:element name='synopsis' type='db:synopsis'/>
<xsd:element name='systemitem' type='db:systemitem'/>
<xsd:element name='table' type='db:table'/>
<xsd:element name='term' type='db:term'/>
<xsd:element name='tertiary' type='db:tertiary'/>
<xsd:element name='textobject' type='db:textobject'/>
<xsd:element name='tip' type='db:admonitionType'/>
<xsd:element name='title' type='db:title'/>
<xsd:element name='titleabbrev' type='db:titleabbrev'/>
<xsd:element name='token' type='db:token'/>
<xsd:element name='trademark' type='db:trademark'/>
<xsd:element name='type' type='db:type'/>
<xsd:element name='ulink' type='db:ulink'/>
<xsd:element name='userinput' type='db:userinput'/>
<xsd:element name='varargs' type='db:varargs'/>
<xsd:element name='variablelist' type='db:variablelist'/>
<xsd:element name='varlistentry' type='db:varlistentry'/>
<xsd:element name='varname' type='db:varname'/>
<xsd:element name='videodata' type='db:videodata'/>
<xsd:element name='videoobject' type='db:videoobject'/>
<xsd:element name='void' type='db:void'/>
<xsd:element name='volumenum' type='db:volumenum'/>
<xsd:element name='warning' type='db:admonitionType'/>
<xsd:element name='wordasword' type='db:wordasword'/>
<xsd:element name='xref' type='db:xref'/>
<xsd:element name='year' type='db:year'/>

</xsd:schema>

