]> granicus.if.org Git - docbook-dsssl/commitdiff
Initial checkin of XML Schema flavors
authorNorman Walsh <ndw@nwalsh.com>
Mon, 9 Apr 2001 14:32:11 +0000 (14:32 +0000)
committerNorman Walsh <ndw@nwalsh.com>
Mon, 9 Apr 2001 14:32:11 +0000 (14:32 +0000)
20 files changed:
schema/relax/dbhier.rlx [new file with mode: 0644]
schema/relax/dbpool.rlx [new file with mode: 0644]
schema/relax/dbtables.rlx [new file with mode: 0644]
schema/relax/docbook.rlx [new file with mode: 0644]
schema/relax/test.xml [new file with mode: 0644]
schema/trex/dbhier.trex [new file with mode: 0644]
schema/trex/dbpool.trex [new file with mode: 0644]
schema/trex/dbtables.trex [new file with mode: 0644]
schema/trex/docbook.trex [new file with mode: 0644]
schema/trex/test.xml [new file with mode: 0644]
schema/xmlschema/.cvsignore [new file with mode: 0644]
schema/xmlschema/Makefile [new file with mode: 0644]
schema/xmlschema/README.xml [new file with mode: 0644]
schema/xmlschema/dbhier.xsd [new file with mode: 0644]
schema/xmlschema/dbnotn.xsd [new file with mode: 0644]
schema/xmlschema/dbpool.xsd [new file with mode: 0644]
schema/xmlschema/dbtables.xsd [new file with mode: 0644]
schema/xmlschema/docbook.xsd [new file with mode: 0644]
schema/xmlschema/soextblx.xsd [new file with mode: 0644]
schema/xmlschema/test.xml [new file with mode: 0644]

diff --git a/schema/relax/dbhier.rlx b/schema/relax/dbhier.rlx
new file mode 100644 (file)
index 0000000..957fb2d
--- /dev/null
@@ -0,0 +1,2148 @@
+<?xml version="1.0" encoding="UTF-8"?> <!-- -*- XML -*- -->
+
+<module moduleVersion="1.2"
+       relaxCoreVersion="1.0"
+       xmlns="http://www.xml.gr.jp/xmlns/relaxCore">
+
+  <interface/>
+
+<!-- ...................................................................... -->
+<!-- DocBook RELAX Schema V4.1.2.1......................................... -->
+<!-- ...................................................................... -->
+<!-- Copyright 2000, Norman Walsh, Sun Microsystems.  Schema
+     derived from DocBook DTD Copyright 1992-2000 HaL Computer....  -->
+<!-- ...................................................................... -->
+
+<!-- Entities for module inclusions ....................................... -->
+
+<!--ENTITY % dbhier.redecl.module              "IGNORE"-->
+<!--ENTITY % dbhier.redecl2.module     "IGNORE"-->
+
+<!-- ...................................................................... -->
+<!-- Entities for element classes ......................................... -->
+
+<!--ENTITY % local.appendix.class ""-->
+<hedgeRule label='appendix.class'>
+  <choice>
+    <ref label='appendix'/>
+    <!-- %local.appendix.class; -->
+  </choice>
+</hedgeRule>
+
+
+<!--ENTITY % local.article.class ""-->
+<hedgeRule label='article.class'>
+  <choice>
+    <ref label='article'/>
+    <!-- %local.article.class; -->
+  </choice>
+</hedgeRule>
+
+
+<!--ENTITY % local.book.class ""-->
+<hedgeRule label='book.class'>
+  <choice>
+    <ref label='book'/>
+    <!-- %local.book.class; -->
+  </choice>
+</hedgeRule>
+
+
+<!--ENTITY % local.chapter.class ""-->
+<hedgeRule label='chapter.class'>
+  <choice>
+    <ref label='chapter'/>
+    <!-- %local.chapter.class; -->
+  </choice>
+</hedgeRule>
+
+<!--ENTITY % local.index.class ""-->
+<hedgeRule label='index.class'>
+  <choice>
+    <ref label='index'/>
+    <ref label='setindex'/>
+    <!-- %local.index.class; -->
+  </choice>
+</hedgeRule>
+
+
+<!--ENTITY % local.refentry.class ""-->
+<hedgeRule label='refentry.class'>
+  <choice>
+    <ref label='refentry'/>
+    <!-- %local.refentry.class; -->
+  </choice>
+</hedgeRule>
+
+
+<!--ENTITY % local.nav.class ""-->
+<hedgeRule label='nav.class'>
+  <choice>
+    <ref label='toc'/>
+    <ref label='lot'/>
+    <ref label='index'/>
+    <ref label='glossary'/>
+    <ref label='bibliography'/>
+    <!-- %local.nav.class; -->
+  </choice>
+</hedgeRule>
+
+
+<!-- Redeclaration placeholder ............................................ -->
+
+<!-- For redeclaring entities that are declared after this point while
+     retaining their references to the entities that are declared before
+     this point -->
+
+<!-- Defining rdbhier here makes some buggy XML parsers happy. -->
+<!--ENTITY % rdbhier ""-->
+<!--%rdbhier;-->
+
+<!-- ...................................................................... -->
+<!-- Entities for element mixtures ........................................ -->
+
+<!-- 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 % forms.hook ""-->
+
+<!--ENTITY % local.divcomponent.mix ""-->
+<hedgeRule label='divcomponent.mix'>
+  <choice>
+    <hedgeRef label='list.class'/>
+    <hedgeRef label='admon.class'/>
+    <hedgeRef label='linespecific.class'/>
+    <hedgeRef label='synop.class'/>
+    <hedgeRef label='para.class'/>
+    <hedgeRef label='informal.class'/>
+    <hedgeRef label='formal.class'/>
+    <hedgeRef label='compound.class'/>
+    <hedgeRef label='genobj.class'/>
+    <hedgeRef label='descobj.class'/>
+    <hedgeRef label='ndxterm.class'/>
+    <ref label='beginpage'/>
+    <!-- %local.divcomponent.mix; -->
+  </choice>
+</hedgeRule>
+
+
+<!--ENTITY % local.refcomponent.mix ""-->
+<hedgeRule label='refcomponent.mix'>
+  <choice>
+    <hedgeRef label='list.class'/>
+    <hedgeRef label='admon.class'/>
+    <hedgeRef label='linespecific.class'/>
+    <hedgeRef label='synop.class'/>
+    <hedgeRef label='para.class'/>
+    <hedgeRef label='informal.class'/>
+    <hedgeRef label='formal.class'/>
+    <hedgeRef label='compound.class'/>
+    <hedgeRef label='genobj.class'/>
+    <hedgeRef label='descobj.class'/>
+    <hedgeRef label='ndxterm.class'/>
+    <ref label='beginpage'/>
+    <!-- %local.refcomponent.mix; -->
+  </choice>
+</hedgeRule>
+
+
+<!--ENTITY % local.indexdivcomponent.mix ""-->
+<hedgeRule label='indexdivcomponent.mix'>
+  <choice>
+    <ref label='itemizedlist'/>
+    <ref label='orderedlist'/>
+    <ref label='variablelist'/>
+    <ref label='simplelist'/>
+    <hedgeRef label='linespecific.class'/>
+    <hedgeRef label='synop.class'/>
+    <hedgeRef label='para.class'/>
+    <hedgeRef label='informal.class'/>
+    <ref label='anchor'/>
+    <ref label='remark'/>
+    <hedgeRef label='link.char.class'/>
+    <ref label='beginpage'/>
+    <!-- %local.indexdivcomponent.mix; -->
+  </choice>
+</hedgeRule>
+
+
+<!--ENTITY % local.refname.char.mix ""-->
+<hedgeRule label='refname.char.mix'>
+  <choice>
+    <!-- #PCDATA -->
+    <hedgeRef label='tech.char.class'/>
+    <!-- %local.refname.char.mix; -->
+  </choice>
+</hedgeRule>
+
+
+<!--ENTITY % local.partcontent.mix ""-->
+<hedgeRule label='partcontent.mix'>
+  <choice>
+    <hedgeRef label='appendix.class'/>
+    <hedgeRef label='chapter.class'/>
+    <hedgeRef label='nav.class'/>
+    <hedgeRef label='article.class'/>
+    <ref label='preface'/>
+    <hedgeRef label='refentry.class'/>
+    <ref label='reference'/>
+    <!-- %local.partcontent.mix; -->
+  </choice>
+</hedgeRule>
+
+
+<!--ENTITY % local.refinline.char.mix ""-->
+<hedgeRule label='refinline.char.mix'>
+  <choice>
+    <!-- #PCDATA -->
+    <hedgeRef label='xref.char.class'/>
+    <hedgeRef label='gen.char.class'/>
+    <hedgeRef label='link.char.class'/>
+    <hedgeRef label='tech.char.class'/>
+    <hedgeRef label='base.char.class'/>
+    <hedgeRef label='docinfo.char.class'/>
+    <hedgeRef label='other.char.class'/>
+    <hedgeRef label='ndxterm.class'/>
+    <ref label='beginpage'/>
+    <!-- %local.refinline.char.mix; -->
+  </choice>
+</hedgeRule>
+
+
+<!--ENTITY % local.refclass.char.mix ""-->
+<hedgeRule label='refclass.char.mix'>
+  <choice>
+    <!-- #PCDATA -->
+    <ref label='application'/>
+    <!-- %local.refclass.char.mix; -->
+  </choice>
+</hedgeRule>
+
+
+<!-- Redeclaration placeholder 2 .......................................... -->
+
+<!-- For redeclaring entities that are declared after this point while
+     retaining their references to the entities that are declared before
+     this point -->
+
+<!-- Defining rdbhier2 here makes some buggy XML parsers happy. -->
+<!--ENTITY % rdbhier2 ""-->
+<!--%rdbhier2;-->
+
+<!-- ...................................................................... -->
+<!-- Entities for content models .......................................... -->
+
+<hedgeRule label='div.title.content'>
+  <sequence>
+    <ref label='title'/>
+    <ref label='subtitle' occurs='?'/>
+    <ref label='titleabbrev' occurs='?'/>
+  </sequence>
+</hedgeRule>
+
+<hedgeRule label='bookcomponent.title.content'>
+  <sequence>
+    <ref label='title'/>
+    <ref label='subtitle' occurs='?'/>
+    <ref label='titleabbrev' occurs='?'/>
+  </sequence>
+</hedgeRule>
+
+<hedgeRule label='sect.title.content'>
+  <sequence>
+    <ref label='title'/>
+    <ref label='subtitle' occurs='?'/>
+    <ref label='titleabbrev' occurs='?'/>
+  </sequence>
+</hedgeRule>
+
+<hedgeRule label='refsect.title.content'>
+  <sequence>
+    <ref label='title'/>
+    <ref label='subtitle' occurs='?'/>
+    <ref label='titleabbrev' occurs='?'/>
+  </sequence>
+</hedgeRule>
+
+<hedgeRule label='bookcomponent.content'>
+  <choice>
+    <sequence>
+      <choice occurs='+'>
+        <hedgeRef label='divcomponent.mix'/>
+      </choice>
+      <choice>
+        <ref label='sect1' occurs='*'/>
+        <hedgeRef label='refentry.class' occurs='*'/>
+        <ref label='simplesect' occurs='*'/>
+        <ref label='section' occurs='*'/>
+      </choice>
+    </sequence>
+    <choice>
+      <ref label='sect1' occurs='+'/>
+      <hedgeRef label='refentry.class' occurs='+'/>
+      <ref label='simplesect' occurs='+'/>
+      <ref label='section' occurs='+'/>
+    </choice>
+  </choice>
+  <!-- "((%divcomponent.mix;)+,
+         (sect1*|(%refentry.class;)*|simplesect*|section*))
+        | (sect1+|(%refentry.class;)+|simplesect+|section+)" -->
+</hedgeRule>
+
+<!-- ...................................................................... -->
+<!-- Set and SetInfo ...................................................... -->
+
+<attPool role='set.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='set'>
+  <sequence>
+    <hedgeRef label='div.title.content' occurs='?'/>
+    <ref label='setinfo' occurs='?'/>
+    <ref label='toc' occurs='?'/>
+    <hedgeRef label='book.class' occurs='+'/>
+    <ref label='setindex' occurs='?'/>
+  </sequence>
+  <!-- ((%div.title.content;)?, setinfo?, toc?, (%book.class;)+,
+               setindex?) -->
+</elementRule>
+
+<tag name='set'>
+  <ref role='status.attrib'/>
+  <ref role='common.attrib'/>
+  <ref role='set.role.attrib'/>
+  <!-- %local.set.attrib; -->
+
+  <!-- FPI: SGML formal public identifier -->
+  <attribute name='fpi' type='string'/>
+</tag>
+
+<attPool role='setinfo.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='setinfo'>
+  <sequence>
+    <hedgeRef label='infoContentModel'/>
+  </sequence>
+</elementRule>
+
+<tag name='setinfo'>
+  <ref role='common.attrib'/>
+  <ref role='setinfo.role.attrib'/>
+  <!-- %local.setinfo.attrib; -->
+
+  <!-- Contents: IDs of the ToC, Books, and SetIndex that comprise
+       the set, in the order of their appearance -->
+  <attribute name='contents' type='IDREFS'/>
+</tag>
+
+<!-- ...................................................................... -->
+<!-- Book and BookInfo .................................................... -->
+
+<attPool role='book.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='book'>
+  <sequence>
+    <hedgeRef label='div.title.content' occurs='?'/>
+    <ref label='bookinfo' occurs='?'/>
+    <choice occurs='*'>
+      <ref label='dedication'/>
+      <ref label='toc'/>
+      <ref label='lot'/>
+      <ref label='glossary'/>
+      <ref label='bibliography'/>
+      <ref label='preface'/>
+      <hedgeRef label='chapter.class'/>
+      <ref label='reference'/>
+      <ref label='part'/>
+      <hedgeRef label='article.class'/>
+      <hedgeRef label='appendix.class'/>
+      <hedgeRef label='index.class'/>
+      <ref label='colophon'/>
+    </choice>
+  </sequence>
+  <!-- ((%div.title.content;)?, bookinfo?,
+               (dedication | toc | lot
+               | glossary | bibliography | preface
+               | %chapter.class; | reference | part
+               | %article.class;
+               | %appendix.class;
+               | %index.class;
+               | colophon)*) -->
+</elementRule>
+
+<tag name='book'>
+  <ref role='label.attrib'/>
+  <ref role='status.attrib'/>
+  <ref role='common.attrib'/>
+  <ref role='book.role.attrib'/>
+  <!-- %local.book.attrib; -->
+
+  <!-- FPI: SGML formal public identifier -->
+  <attribute name='fpi' type='string'/>
+</tag>
+
+<attPool role='bookinfo.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='bookinfo'>
+  <sequence>
+    <hedgeRef label='infoContentModel'/>
+  </sequence>
+</elementRule>
+
+<tag name='bookinfo'>
+  <ref role='common.attrib'/>
+  <ref role='bookinfo.role.attrib'/>
+  <!-- %local.bookinfo.attrib; -->
+  <!-- Contents: IDs of the ToC, Books, and SetIndex that comprise
+       the set, in the order of their appearance -->
+  <attribute name='contents' type='IDREFS'/>
+</tag>
+
+<!-- ...................................................................... -->
+<!-- Dedication, ToC, and LoT ............................................. -->
+
+<attPool role='dedication.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='dedication'>
+  <sequence>
+    <hedgeRef label='sect.title.content' occurs='?'/>
+    <hedgeRef label='legalnotice.mix' occurs='+'/>
+  </sequence>
+  <!-- ((%sect.title.content;)?, (%legalnotice.mix;)+) -->
+</elementRule>
+
+<tag name='dedication'>
+  <ref role='status.attrib'/>
+  <ref role='common.attrib'/>
+  <ref role='dedication.role.attrib'/>
+  <!-- %local.dedication.attrib; -->
+</tag>
+
+<attPool role='colophon.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='colophon'>
+  <sequence>
+    <hedgeRef label='sect.title.content' occurs='?'/>
+    <hedgeRef label='textobject.mix' occurs='+'/>
+  </sequence>
+  <!-- ((%sect.title.content;)?, (%textobject.mix;)+) -->
+</elementRule>
+
+<tag name='colophon'>
+  <ref role='status.attrib'/>
+  <ref role='common.attrib'/>
+  <ref role='colophon.role.attrib'/>
+  <!-- %local.colophon.attrib; -->
+</tag>
+
+<attPool role='toc.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='toc'>
+  <sequence>
+    <hedgeRef label='bookcomponent.title.content' occurs='?'/>
+    <ref label='tocfront' occurs='*'/>
+    <choice occurs='*'>
+      <ref label='tocpart'/>
+      <ref label='tocchap'/>
+    </choice>
+    <ref label='tocback' occurs='*'/>
+  </sequence>
+  <!-- ((%bookcomponent.title.content;)?, tocfront*,
+               (tocpart | tocchap)*, tocback*) -->
+</elementRule>
+
+<tag name='toc'>
+  <ref role='pagenum.attrib'/>
+  <ref role='common.attrib'/>
+  <ref role='toc.role.attrib'/>
+  <!-- %local.toc.attrib; -->
+</tag>
+
+<attPool role='tocfront.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='tocfront'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='para.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%para.char.mix;)* -->
+</elementRule>
+
+<tag name='tocfront'>
+  <ref role='label.attrib'/>
+  <ref role='linkend.attrib'/>
+  <ref role='pagenum.attrib'/>
+  <ref role='common.attrib'/>
+  <ref role='tocfront.role.attrib'/>
+  <!-- %local.tocfront.attrib; -->
+</tag>
+
+<attPool role='tocentry.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='tocentry'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='para.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%para.char.mix;)* -->
+</elementRule>
+
+<tag name='tocentry'>
+  <ref role='linkend.attrib'/>
+  <ref role='pagenum.attrib'/>
+  <ref role='common.attrib'/>
+  <ref role='tocentry.role.attrib'/>
+  <!-- %local.tocentry.attrib; -->
+</tag>
+
+<attPool role='tocpart.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='tocpart'>
+  <sequence>
+    <ref label='tocentry' occurs='+'/>
+    <ref label='tocchap' occurs='*'/>
+  </sequence>
+  <!-- (tocentry+, tocchap*) -->
+</elementRule>
+
+<tag name='tocpart'>
+  <ref role='common.attrib'/>
+  <ref role='tocpart.role.attrib'/>
+  <!-- %local.tocpart.attrib; -->
+</tag>
+
+<attPool role='tocchap.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='tocchap'>
+  <sequence>
+    <ref label='tocentry' occurs='+'/>
+    <ref label='toclevel1' occurs='*'/>
+  </sequence>
+  <!-- (tocentry+, toclevel1*) -->
+</elementRule>
+
+<tag name='tocchap'>
+  <ref role='label.attrib'/>
+  <ref role='common.attrib'/>
+  <ref role='tocchap.role.attrib'/>
+  <!-- %local.tocchap.attrib; -->
+</tag>
+
+<attPool role='toclevel1.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='toclevel1'>
+  <sequence>
+    <ref label='tocentry' occurs='+'/>
+    <ref label='toclevel2' occurs='*'/>
+  </sequence>
+  <!-- (tocentry+, toclevel2*) -->
+</elementRule>
+
+<tag name='toclevel1'>
+  <ref role='common.attrib'/>
+  <ref role='toclevel1.role.attrib'/>
+  <!-- %local.toclevel1.attrib; -->
+</tag>
+
+<attPool role='toclevel2.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='toclevel2'>
+  <sequence>
+    <ref label='tocentry' occurs='+'/>
+    <ref label='toclevel3' occurs='*'/>
+  </sequence>
+  <!-- (tocentry+, toclevel3*) -->
+</elementRule>
+
+<tag name='toclevel2'>
+  <ref role='common.attrib'/>
+  <ref role='toclevel2.role.attrib'/>
+  <!-- %local.toclevel2.attrib; -->
+</tag>
+
+<attPool role='toclevel3.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='toclevel3'>
+  <sequence>
+    <ref label='tocentry' occurs='+'/>
+    <ref label='toclevel4' occurs='*'/>
+  </sequence>
+  <!-- (tocentry+, toclevel4*) -->
+</elementRule>
+
+<tag name='toclevel3'>
+  <ref role='common.attrib'/>
+  <ref role='toclevel3.role.attrib'/>
+  <!-- %local.toclevel3.attrib; -->
+</tag>
+
+<attPool role='toclevel4.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='toclevel4'>
+  <sequence>
+    <ref label='tocentry' occurs='+'/>
+    <ref label='toclevel5' occurs='*'/>
+  </sequence>
+  <!-- (tocentry+, toclevel5*) -->
+</elementRule>
+
+<tag name='toclevel4'>
+  <ref role='common.attrib'/>
+  <ref role='toclevel4.role.attrib'/>
+  <!-- %local.toclevel4.attrib; -->
+</tag>
+
+<attPool role='toclevel5.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='toclevel5'>
+  <sequence>
+    <ref label='tocentry' occurs='+'/>
+  </sequence>
+  <!-- (tocentry+) -->
+</elementRule>
+
+<tag name='toclevel5'>
+  <ref role='common.attrib'/>
+  <ref role='toclevel5.role.attrib'/>
+  <!-- %local.toclevel5.attrib; -->
+</tag>
+
+<attPool role='tocback.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='tocback'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='para.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%para.char.mix;)* -->
+</elementRule>
+
+<tag name='tocback'>
+  <ref role='label.attrib'/>
+  <ref role='linkend.attrib'/>
+  <ref role='pagenum.attrib'/>
+  <ref role='common.attrib'/>
+  <ref role='tocback.role.attrib'/>
+  <!-- %local.tocback.attrib; -->
+</tag>
+
+<attPool role='lot.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='lot'>
+  <sequence>
+    <hedgeRef label='bookcomponent.title.content' occurs='?'/>
+    <ref label='lotentry' occurs='*'/>
+  </sequence>
+  <!-- ((%bookcomponent.title.content;)?, lotentry*) -->
+</elementRule>
+
+<tag name='lot'>
+  <ref role='label.attrib'/>
+  <ref role='common.attrib'/>
+  <ref role='lot.role.attrib'/>
+  <!-- %local.lot.attrib; -->
+</tag>
+
+<attPool role='lotentry.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='lotentry'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='para.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%para.char.mix;)* -->
+</elementRule>
+
+<tag name='lotentry'>
+  <ref role='pagenum.attrib'/>
+  <ref role='common.attrib'/>
+  <ref role='linkend.attrib'/>
+  <ref role='lotentry.role.attrib'/>
+  <!-- %local.lotentry.attrib; -->
+
+  <!-- SrcCredit: Information about the source of the entry,
+       as for a list of illustrations -->
+  <attribute name='srccredit' type='string'/>
+</tag>
+
+<!-- ...................................................................... -->
+<!-- Appendix, Chapter, Part, Preface, Reference, PartIntro ............... -->
+
+<attPool role='appendix.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='appendix'>
+  <sequence>
+    <ref label='appendixinfo' occurs='?'/>
+    <hedgeRef label='bookcomponent.title.content'/>
+    <hedgeRef label='nav.class' occurs='*'/>
+    <ref label='tocchap' occurs='?'/>
+    <hedgeRef label='bookcomponent.content'/>
+    <hedgeRef label='nav.class' occurs='*'/>
+  </sequence>
+  <!-- (appendixinfo?,
+                     (%bookcomponent.title.content;),
+                     (%nav.class;)*,
+                     tocchap?,
+                     (%bookcomponent.content;),
+                     (%nav.class;)*) -->
+</elementRule>
+
+<tag name='appendix'>
+  <ref role='label.attrib'/>
+  <ref role='status.attrib'/>
+  <ref role='common.attrib'/>
+  <ref role='appendix.role.attrib'/>
+  <!-- %local.appendix.attrib; -->
+</tag>
+
+<attPool role='chapter.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='chapter'>
+  <sequence>
+    <ref label='chapterinfo' occurs='?'/>
+    <hedgeRef label='bookcomponent.title.content'/>
+    <hedgeRef label='nav.class' occurs='*'/>
+    <ref label='tocchap' occurs='?'/>
+    <hedgeRef label='bookcomponent.content'/>
+    <hedgeRef label='nav.class' occurs='*'/>
+  </sequence>
+  <!-- (chapterinfo?,
+                    (%bookcomponent.title.content;),
+                    (%nav.class;)*,
+                    tocchap?,
+                    (%bookcomponent.content;),
+                    (%nav.class;)*) -->
+</elementRule>
+
+<tag name='chapter'>
+  <ref role='label.attrib'/>
+  <ref role='status.attrib'/>
+  <ref role='common.attrib'/>
+  <ref role='chapter.role.attrib'/>
+  <!-- %local.chapter.attrib; -->
+</tag>
+
+<!-- Note that Part was to have its content model reduced in V4.1.2.  This
+change will not be made after all. -->
+
+<attPool role='part.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='part'>
+  <sequence>
+    <ref label='partinfo' occurs='?'/>
+    <hedgeRef label='bookcomponent.title.content'/>
+    <ref label='partintro' occurs='?'/>
+    <hedgeRef label='partcontent.mix' occurs='+'/>
+  </sequence>
+  <!-- (partinfo?, (%bookcomponent.title.content;), partintro?,
+               (%partcontent.mix;)+) -->
+</elementRule>
+
+<tag name='part'>
+  <ref role='label.attrib'/>
+  <ref role='status.attrib'/>
+  <ref role='common.attrib'/>
+  <ref role='part.role.attrib'/>
+  <!-- %local.part.attrib; -->
+</tag>
+
+<!--ELEMENT PartIntro (defined below)-->
+
+<attPool role='preface.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='preface'>
+  <sequence>
+    <ref label='prefaceinfo' occurs='?'/>
+    <hedgeRef label='bookcomponent.title.content'/>
+    <hedgeRef label='nav.class' occurs='*'/>
+    <ref label='tocchap' occurs='?'/>
+    <hedgeRef label='bookcomponent.content'/>
+    <hedgeRef label='nav.class' occurs='*'/>
+  </sequence>
+  <!-- (prefaceinfo?,
+                    (%bookcomponent.title.content;),
+                    (%nav.class;)*,
+                    tocchap?,
+                    (%bookcomponent.content;),
+                    (%nav.class;)*) -->
+</elementRule>
+
+<tag name='preface'>
+  <ref role='status.attrib'/>
+  <ref role='common.attrib'/>
+  <ref role='preface.role.attrib'/>
+  <!-- %local.preface.attrib; -->
+</tag>
+
+<attPool role='reference.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='reference'>
+  <sequence>
+    <ref label='referenceinfo' occurs='?'/>
+    <hedgeRef label='bookcomponent.title.content'/>
+    <ref label='partintro' occurs='?'/>
+    <hedgeRef label='refentry.class' occurs='+'/>
+  </sequence>
+  <!-- (referenceinfo?,
+                     (%bookcomponent.title.content;), partintro?,
+                     (%refentry.class;)+) -->
+</elementRule>
+
+<tag name='reference'>
+  <ref role='label.attrib'/>
+  <ref role='status.attrib'/>
+  <ref role='common.attrib'/>
+  <ref role='reference.role.attrib'/>
+  <!-- %local.reference.attrib; -->
+</tag>
+<!--ELEMENT PartIntro (defined below)-->
+
+<attPool role='partintro.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='partintro'>
+  <sequence>
+    <hedgeRef label='div.title.content' occurs='?'/>
+    <hedgeRef label='bookcomponent.content'/>
+  </sequence>
+  <!-- ((%div.title.content;)?, (%bookcomponent.content;)) -->
+</elementRule>
+
+<tag name='partintro'>
+  <ref role='label.attrib'/>
+  <ref role='common.attrib'/>
+  <!-- %local.partintro.attrib; -->
+  <ref role='partintro.role.attrib'/>
+</tag>
+
+<!-- ...................................................................... -->
+<!-- Other Info elements .................................................. -->
+
+<attPool role='appendixinfo.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='appendixinfo'>
+  <sequence>
+    <hedgeRef label='infoContentModel'/>
+  </sequence>
+</elementRule>
+
+<tag name='appendixinfo'>
+  <ref role='common.attrib'/>
+  <ref role='appendixinfo.role.attrib'/>
+  <!-- %local.appendixinfo.attrib; -->
+</tag>
+
+<attPool role='bibliographyinfo.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='bibliographyinfo'>
+  <sequence>
+    <hedgeRef label='infoContentModel'/>
+  </sequence>
+</elementRule>
+
+<tag name='bibliographyinfo'>
+  <ref role='common.attrib'/>
+  <ref role='bibliographyinfo.role.attrib'/>
+  <!-- %local.bibliographyinfo.attrib; -->
+</tag>
+
+<attPool role='chapterinfo.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='chapterinfo'>
+  <sequence>
+    <hedgeRef label='infoContentModel'/>
+  </sequence>
+</elementRule>
+
+<tag name='chapterinfo'>
+  <ref role='common.attrib'/>
+  <ref role='chapterinfo.role.attrib'/>
+  <!-- %local.chapterinfo.attrib; -->
+</tag>
+
+<attPool role='glossaryinfo.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='glossaryinfo'>
+  <sequence>
+    <hedgeRef label='infoContentModel'/>
+  </sequence>
+</elementRule>
+
+<tag name='glossaryinfo'>
+  <ref role='common.attrib'/>
+  <ref role='glossaryinfo.role.attrib'/>
+  <!-- %local.chapterinfo.attrib; -->
+</tag>
+
+<attPool role='indexinfo.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='indexinfo'>
+  <sequence>
+    <hedgeRef label='infoContentModel'/>
+  </sequence>
+</elementRule>
+
+<tag name='indexinfo'>
+  <ref role='common.attrib'/>
+  <ref role='indexinfo.role.attrib'/>
+  <!-- %local.chapterinfo.attrib; -->
+</tag>
+
+<attPool role='setindexinfo.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='setindexinfo'>
+  <sequence>
+    <hedgeRef label='infoContentModel'/>
+  </sequence>
+</elementRule>
+
+<tag name='setindexinfo'>
+  <ref role='common.attrib'/>
+  <ref role='setindexinfo.role.attrib'/>
+  <!-- %local.chapterinfo.attrib; -->
+</tag>
+
+<attPool role='partinfo.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='partinfo'>
+  <sequence>
+    <hedgeRef label='infoContentModel'/>
+  </sequence>
+</elementRule>
+
+<tag name='partinfo'>
+  <ref role='common.attrib'/>
+  <ref role='partinfo.role.attrib'/>
+  <!-- %local.chapterinfo.attrib; -->
+</tag>
+
+<attPool role='prefaceinfo.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='prefaceinfo'>
+  <sequence>
+    <hedgeRef label='infoContentModel'/>
+  </sequence>
+</elementRule>
+
+<tag name='prefaceinfo'>
+  <ref role='common.attrib'/>
+  <ref role='prefaceinfo.role.attrib'/>
+  <!-- %local.chapterinfo.attrib; -->
+</tag>
+
+<attPool role='refentryinfo.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='refentryinfo'>
+  <sequence>
+    <hedgeRef label='infoContentModel'/>
+  </sequence>
+</elementRule>
+
+<tag name='refentryinfo'>
+  <ref role='common.attrib'/>
+  <ref role='refentryinfo.role.attrib'/>
+  <!-- %local.chapterinfo.attrib; -->
+</tag>
+
+<attPool role='refsect1info.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='refsect1info'>
+  <sequence>
+    <hedgeRef label='infoContentModel'/>
+  </sequence>
+</elementRule>
+
+<tag name='refsect1info'>
+  <ref role='common.attrib'/>
+  <ref role='refsect1info.role.attrib'/>
+  <!-- %local.chapterinfo.attrib; -->
+</tag>
+
+<attPool role='refsect2info.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='refsect2info'>
+  <sequence>
+    <hedgeRef label='infoContentModel'/>
+  </sequence>
+</elementRule>
+
+<tag name='refsect2info'>
+  <ref role='common.attrib'/>
+  <ref role='refsect2info.role.attrib'/>
+  <!-- %local.chapterinfo.attrib; -->
+</tag>
+
+<attPool role='refsect3info.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='refsect3info'>
+  <sequence>
+    <hedgeRef label='infoContentModel'/>
+  </sequence>
+</elementRule>
+
+<tag name='refsect3info'>
+  <ref role='common.attrib'/>
+  <ref role='refsect3info.role.attrib'/>
+  <!-- %local.chapterinfo.attrib; -->
+</tag>
+
+<attPool role='refsynopsisdivinfo.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='refsynopsisdivinfo'>
+  <sequence>
+    <hedgeRef label='infoContentModel'/>
+  </sequence>
+</elementRule>
+
+<tag name='refsynopsisdivinfo'>
+  <ref role='common.attrib'/>
+  <ref role='refsynopsisdivinfo.role.attrib'/>
+  <!-- %local.chapterinfo.attrib; -->
+</tag>
+
+<attPool role='referenceinfo.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='referenceinfo'>
+  <sequence>
+    <hedgeRef label='infoContentModel'/>
+  </sequence>
+</elementRule>
+
+<tag name='referenceinfo'>
+  <ref role='common.attrib'/>
+  <ref role='referenceinfo.role.attrib'/>
+  <!-- %local.chapterinfo.attrib; -->
+</tag>
+
+<attPool role='sect1info.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='sect1info'>
+  <sequence>
+    <hedgeRef label='infoContentModel'/>
+  </sequence>
+</elementRule>
+
+<tag name='sect1info'>
+  <ref role='common.attrib'/>
+  <ref role='sect1info.role.attrib'/>
+  <!-- %local.chapterinfo.attrib; -->
+</tag>
+
+<attPool role='sect2info.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='sect2info'>
+  <sequence>
+    <hedgeRef label='infoContentModel'/>
+  </sequence>
+</elementRule>
+
+<tag name='sect2info'>
+  <ref role='common.attrib'/>
+  <ref role='sect2info.role.attrib'/>
+  <!-- %local.chapterinfo.attrib; -->
+</tag>
+
+<attPool role='sect3info.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='sect3info'>
+  <sequence>
+    <hedgeRef label='infoContentModel'/>
+  </sequence>
+</elementRule>
+
+<tag name='sect3info'>
+  <ref role='common.attrib'/>
+  <ref role='sect3info.role.attrib'/>
+  <!-- %local.chapterinfo.attrib; -->
+</tag>
+
+<attPool role='sect4info.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='sect4info'>
+  <sequence>
+    <hedgeRef label='infoContentModel'/>
+  </sequence>
+</elementRule>
+
+<tag name='sect4info'>
+  <ref role='common.attrib'/>
+  <ref role='sect4info.role.attrib'/>
+  <!-- %local.chapterinfo.attrib; -->
+</tag>
+
+<attPool role='sect5info.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='sect5info'>
+  <sequence>
+    <hedgeRef label='infoContentModel'/>
+  </sequence>
+</elementRule>
+
+<tag name='sect5info'>
+  <ref role='common.attrib'/>
+  <ref role='sect5info.role.attrib'/>
+  <!-- %local.chapterinfo.attrib; -->
+</tag>
+
+<!-- ...................................................................... -->
+<!-- Section (parallel to Sect*) ......................................... -->
+
+<attPool role='section.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='section'>
+  <sequence>
+    <ref label='sectioninfo' occurs='?'/>
+    <hedgeRef label='sect.title.content'/>
+    <hedgeRef label='nav.class' occurs='*'/>
+    <choice>
+      <sequence>
+        <hedgeRef label='divcomponent.mix' occurs='+'/>
+        <choice>
+          <hedgeRef label='refentry.class' occurs='*'/>
+          <ref label='section' occurs='*'/>
+        </choice>
+      </sequence>
+      <choice>
+        <hedgeRef label='refentry.class' occurs='+'/>
+        <ref label='section' occurs='+'/>
+      </choice>
+    </choice>
+    <hedgeRef label='nav.class' occurs='*'/>
+  </sequence>
+  <!-- (sectioninfo?,
+                       (%sect.title.content;),
+                       (%nav.class;)*,
+                       (((%divcomponent.mix;)+,
+                         ((%refentry.class;)*|section*))
+                        | (%refentry.class;)+|section+),
+                       (%nav.class;)*) -->
+</elementRule>
+
+<tag name='section'>
+  <ref role='label.attrib'/>
+  <ref role='status.attrib'/>
+  <ref role='common.attrib'/>
+  <ref role='section.role.attrib'/>
+  <!-- %local.section.attrib; -->
+</tag>
+
+<attPool role='sectioninfo.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='sectioninfo'>
+  <sequence>
+    <hedgeRef label='infoContentModel'/>
+  </sequence>
+</elementRule>
+
+<tag name='sectioninfo'>
+  <ref role='common.attrib'/>
+  <ref role='sectioninfo.role.attrib'/>
+  <!-- %local.chapterinfo.attrib; -->
+</tag>
+
+<!-- ...................................................................... -->
+<!-- Sect1, Sect2, Sect3, Sect4, Sect5 .................................... -->
+
+<attPool role='sect1.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='sect1'>
+  <sequence>
+    <ref label='sect1info' occurs='?'/>
+    <hedgeRef label='sect.title.content'/>
+    <hedgeRef label='nav.class' occurs='*'/>
+    <choice>
+      <sequence>
+        <hedgeRef label='divcomponent.mix' occurs='+'/>
+        <choice>
+          <hedgeRef label='refentry.class' occurs='*'/>
+          <ref label='sect2' occurs='*'/>
+          <ref label='simplesect' occurs='*'/>
+        </choice>
+      </sequence>
+      <choice>
+        <hedgeRef label='refentry.class' occurs='+'/>
+        <ref label='sect2' occurs='+'/>
+        <ref label='simplesect' occurs='+'/>
+      </choice>
+    </choice>
+    <hedgeRef label='nav.class' occurs='*'/>
+  </sequence>
+  <!-- (sect1info?, (%sect.title.content;), (%nav.class;)*,
+               (((%divcomponent.mix;)+,
+               ((%refentry.class;)* | sect2* | simplesect*))
+               | (%refentry.class;)+ | sect2+ | simplesect+), (%nav.class;)*)
+   -->
+</elementRule>
+
+<tag name='sect1'>
+  <ref role='label.attrib'/>
+  <ref role='status.attrib'/>
+  <ref role='common.attrib'/>
+  <ref role='sect1.role.attrib'/>
+  <!-- %local.sect1.attrib; -->
+
+  <!-- Renderas: Indicates the format in which the heading should
+       appear -->
+  <attribute name='renderas' type='NMTOKEN'>
+    <enumeration value='sect2'/>
+    <enumeration value='sect3'/>
+    <enumeration value='sect4'/>
+    <enumeration value='sect5'/>
+  </attribute>
+</tag>
+
+<attPool role='sect2.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='sect2'>
+  <sequence>
+    <ref label='sect2info' occurs='?'/>
+    <hedgeRef label='sect.title.content'/>
+    <hedgeRef label='nav.class' occurs='*'/>
+    <choice>
+      <sequence>
+        <hedgeRef label='divcomponent.mix' occurs='+'/>
+        <choice>
+          <hedgeRef label='refentry.class' occurs='*'/>
+          <ref label='sect3' occurs='*'/>
+          <ref label='simplesect' occurs='*'/>
+        </choice>
+      </sequence>
+      <choice>
+        <hedgeRef label='refentry.class' occurs='+'/>
+        <ref label='sect3' occurs='+'/>
+        <ref label='simplesect' occurs='+'/>
+      </choice>
+    </choice>
+    <hedgeRef label='nav.class' occurs='*'/>
+  </sequence>
+  <!-- (sect2info?, (%sect.title.content;), (%nav.class;)*,
+               (((%divcomponent.mix;)+,
+               ((%refentry.class;)* | sect3* | simplesect*))
+               | (%refentry.class;)+ | sect3+ | simplesect+), (%nav.class;)*)
+   -->
+</elementRule>
+
+<tag name='sect2'>
+  <ref role='label.attrib'/>
+  <ref role='status.attrib'/>
+  <ref role='common.attrib'/>
+  <ref role='sect2.role.attrib'/>
+  <!-- %local.sect2.attrib; -->
+
+  <!-- Renderas: Indicates the format in which the heading should
+       appear -->
+  <attribute name='renderas' type='NMTOKEN'>
+    <enumeration value='sect1'/>
+    <enumeration value='sect3'/>
+    <enumeration value='sect4'/>
+    <enumeration value='sect5'/>
+  </attribute>
+</tag>
+
+<attPool role='sect3.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='sect3'>
+  <sequence>
+    <ref label='sect3info' occurs='?'/>
+    <hedgeRef label='sect.title.content'/>
+    <hedgeRef label='nav.class' occurs='*'/>
+    <choice>
+      <sequence>
+        <hedgeRef label='divcomponent.mix' occurs='+'/>
+        <choice>
+          <hedgeRef label='refentry.class' occurs='*'/>
+          <ref label='sect4' occurs='*'/>
+          <ref label='simplesect' occurs='*'/>
+        </choice>
+      </sequence>
+      <choice>
+        <hedgeRef label='refentry.class' occurs='+'/>
+        <ref label='sect4' occurs='+'/>
+        <ref label='simplesect' occurs='+'/>
+      </choice>
+    </choice>
+    <hedgeRef label='nav.class' occurs='*'/>
+  </sequence>
+  <!-- (sect3info?, (%sect.title.content;), (%nav.class;)*,
+               (((%divcomponent.mix;)+,
+               ((%refentry.class;)* | sect4* | simplesect*))
+               | (%refentry.class;)+ | sect4+ | simplesect+), (%nav.class;)*) -->
+</elementRule>
+
+<tag name='sect3'>
+  <ref role='label.attrib'/>
+  <ref role='status.attrib'/>
+  <ref role='common.attrib'/>
+  <ref role='sect3.role.attrib'/>
+  <!-- %local.sect3.attrib; -->
+
+  <!-- Renderas: Indicates the format in which the heading should
+       appear -->
+  <attribute name='renderas' type='NMTOKEN'>
+    <enumeration value='sect1'/>
+    <enumeration value='sect2'/>
+    <enumeration value='sect4'/>
+    <enumeration value='sect5'/>
+  </attribute>
+</tag>
+
+<attPool role='sect4.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='sect4'>
+  <sequence>
+    <ref label='sect4info' occurs='?'/>
+    <hedgeRef label='sect.title.content'/>
+    <hedgeRef label='nav.class' occurs='*'/>
+    <choice>
+      <sequence>
+        <hedgeRef label='divcomponent.mix' occurs='+'/>
+        <choice>
+          <hedgeRef label='refentry.class' occurs='*'/>
+          <ref label='sect5' occurs='*'/>
+          <ref label='simplesect' occurs='*'/>
+        </choice>
+      </sequence>
+      <choice>
+        <hedgeRef label='refentry.class' occurs='+'/>
+        <ref label='sect5' occurs='+'/>
+        <ref label='simplesect' occurs='+'/>
+      </choice>
+    </choice>
+    <hedgeRef label='nav.class' occurs='*'/>
+  </sequence>
+  <!-- (sect4info?, (%sect.title.content;), (%nav.class;)*,
+               (((%divcomponent.mix;)+,
+               ((%refentry.class;)* | sect5* | simplesect*))
+               | (%refentry.class;)+ | sect5+ | simplesect+), (%nav.class;)*) -->
+</elementRule>
+
+<tag name='sect4'>
+  <ref role='label.attrib'/>
+  <ref role='status.attrib'/>
+  <ref role='common.attrib'/>
+  <ref role='sect4.role.attrib'/>
+  <!-- %local.sect4.attrib; -->
+
+  <!-- Renderas: Indicates the format in which the heading should
+       appear -->
+  <attribute name='renderas' type='NMTOKEN'>
+    <enumeration value='sect1'/>
+    <enumeration value='sect2'/>
+    <enumeration value='sect3'/>
+    <enumeration value='sect5'/>
+  </attribute>
+</tag>
+
+<attPool role='sect5.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='sect5'>
+  <sequence>
+    <ref label='sect5info' occurs='?'/>
+    <hedgeRef label='sect.title.content'/>
+    <hedgeRef label='nav.class' occurs='*'/>
+    <choice>
+      <sequence>
+        <hedgeRef label='divcomponent.mix' occurs='+'/>
+        <choice>
+          <hedgeRef label='refentry.class' occurs='*'/>
+          <ref label='simplesect' occurs='*'/>
+        </choice>
+      </sequence>
+      <choice>
+        <hedgeRef label='refentry.class' occurs='+'/>
+        <ref label='simplesect' occurs='+'/>
+      </choice>
+    </choice>
+    <hedgeRef label='nav.class' occurs='*'/>
+  </sequence>
+  <!-- (sect5info?, (%sect.title.content;), (%nav.class;)*,
+               (((%divcomponent.mix;)+, ((%refentry.class;)* | simplesect*))
+               | (%refentry.class;)+ | simplesect+), (%nav.class;)*) -->
+</elementRule>
+
+<tag name='sect5'>
+  <ref role='label.attrib'/>
+  <ref role='status.attrib'/>
+  <ref role='common.attrib'/>
+  <ref role='sect5.role.attrib'/>
+  <!-- %local.sect5.attrib; -->
+
+  <!-- Renderas: Indicates the format in which the heading should
+       appear -->
+  <attribute name='renderas' type='NMTOKEN'>
+    <enumeration value='sect1'/>
+    <enumeration value='sect2'/>
+    <enumeration value='sect3'/>
+    <enumeration value='sect4'/>
+  </attribute>
+</tag>
+
+<attPool role='simplesect.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='simplesect'>
+  <sequence>
+    <hedgeRef label='sect.title.content'/>
+    <hedgeRef label='divcomponent.mix' occurs='+'/>
+  </sequence>
+  <!-- ((%sect.title.content;), (%divcomponent.mix;)+) -->
+</elementRule>
+
+<tag name='simplesect'>
+  <ref role='common.attrib'/>
+  <ref role='simplesect.role.attrib'/>
+  <!-- %local.simplesect.attrib; -->
+</tag>
+
+<!-- ...................................................................... -->
+<!-- Bibliography ......................................................... -->
+
+<attPool role='bibliography.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='bibliography'>
+  <sequence>
+    <ref label='bibliographyinfo' occurs='*'/>
+    <hedgeRef label='bookcomponent.title.content' occurs='?'/>
+    <hedgeRef label='component.mix' occurs='*'/>
+    <choice>
+      <ref label='bibliodiv' occurs='+'/>
+      <choice occurs='+'>
+        <ref label='biblioentry'/>
+        <ref label='bibliomixed'/>
+      </choice>
+    </choice>
+  </sequence>
+  <!-- (bibliographyinfo?,
+                        (%bookcomponent.title.content;)?,
+                        (%component.mix;)*,
+                        (bibliodiv+ | (biblioentry|bibliomixed)+)) -->
+</elementRule>
+
+<tag name='bibliography'>
+  <ref role='status.attrib'/>
+  <ref role='common.attrib'/>
+  <ref role='bibliography.role.attrib'/>
+  <!-- %local.bibliography.attrib; -->
+</tag>
+
+<attPool role='bibliodiv.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='bibliodiv'>
+  <sequence>
+    <hedgeRef label='sect.title.content' occurs='?'/>
+    <hedgeRef label='component.mix' occurs='*'/>
+    <choice occurs='+'>
+      <ref label='biblioentry'/>
+      <ref label='bibliomixed'/>
+    </choice>
+  </sequence>
+  <!-- ((%sect.title.content;)?, (%component.mix;)*,
+               (biblioentry|bibliomixed)+) -->
+</elementRule>
+
+<tag name='bibliodiv'>
+  <ref role='status.attrib'/>
+  <ref role='common.attrib'/>
+  <ref role='bibliodiv.role.attrib'/>
+  <!-- %local.bibliodiv.attrib; -->
+</tag>
+
+<!-- ...................................................................... -->
+<!-- Glossary ............................................................. -->
+
+<attPool role='glossary.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='glossary'>
+  <sequence>
+    <ref label='glossaryinfo' occurs='*'/>
+    <hedgeRef label='bookcomponent.title.content' occurs='?'/>
+    <hedgeRef label='component.mix' occurs='*'/>
+    <choice>
+      <ref label='glossdiv' occurs='+'/>
+      <ref label='glossentry' occurs='+'/>
+    </choice>
+    <ref label='bibliography' occurs='?'/>
+  </sequence>
+  <!-- (glossaryinfo?,
+                    (%bookcomponent.title.content;)?,
+                    (%component.mix;)*,
+                    (glossdiv+ | glossentry+), bibliography?) -->
+</elementRule>
+
+<tag name='glossary'>
+  <ref role='status.attrib'/>
+  <ref role='common.attrib'/>
+  <ref role='glossary.role.attrib'/>
+  <!-- %local.glossary.attrib; -->
+</tag>
+
+<attPool role='glossdiv.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='glossdiv'>
+  <sequence>
+    <hedgeRef label='sect.title.content' occurs='?'/>
+    <hedgeRef label='component.mix' occurs='*'/>
+    <ref label='glossentry' occurs='+'/>
+  </sequence>
+  <!-- ((%sect.title.content;), (%component.mix;)*,
+               glossentry+) -->
+</elementRule>
+
+<tag name='glossdiv'>
+  <ref role='status.attrib'/>
+  <ref role='common.attrib'/>
+  <ref role='glossdiv.role.attrib'/>
+  <!-- %local.glossdiv.attrib; -->
+</tag>
+
+<!-- ...................................................................... -->
+<!-- Index and SetIndex ................................................... -->
+
+<attPool role='indexes.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='index'>
+  <sequence>
+    <ref label='indexinfo' occurs='*'/>
+    <hedgeRef label='bookcomponent.title.content' occurs='?'/>
+    <hedgeRef label='component.mix' occurs='*'/>
+    <choice>
+      <ref label='indexdiv' occurs='+'/>
+      <ref label='indexentry' occurs='+'/>
+    </choice>
+  </sequence>
+  <!-- (indexinfo?,
+                 (%bookcomponent.title.content;)?,
+                 (%component.mix;)*,
+                 (indexdiv* | indexentry*)) -->
+</elementRule>
+
+<tag name='index'>
+  <ref role='common.attrib'/>
+  <ref role='indexes.role.attrib'/>
+  <!-- %local.indexes.attrib; -->
+</tag>
+
+<elementRule role='setindex'>
+  <sequence>
+    <ref label='setindexinfo' occurs='*'/>
+    <hedgeRef label='bookcomponent.title.content' occurs='?'/>
+    <hedgeRef label='component.mix' occurs='*'/>
+    <choice>
+      <ref label='indexdiv' occurs='+'/>
+      <ref label='indexentry' occurs='+'/>
+    </choice>
+  </sequence>
+  <!-- (setindexinfo?,
+                    (%bookcomponent.title.content;)?,
+                    (%component.mix;)*, (indexdiv* | indexentry*)) -->
+</elementRule>
+
+<tag name='setindex'>
+  <ref role='common.attrib'/>
+  <ref role='indexes.role.attrib'/>
+  <!-- %local.indexes.attrib; -->
+</tag>
+
+<!-- SegmentedList in this content is useful for marking up permuted
+     indices. -->
+
+<attPool role='indexdiv.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='indexdiv'>
+  <sequence>
+    <hedgeRef label='sect.title.content' occurs='?'/>
+    <sequence>
+      <hedgeRef label='indexdivcomponent.mix' occurs='*'/>
+      <ref label='indexentry' occurs='*'/>
+      <ref label='segmentedlist'/>
+    </sequence>
+  </sequence>
+  <!-- ((%sect.title.content;)?, ((%indexdivcomponent.mix;)*,
+               (indexentry+ | segmentedlist))) -->
+</elementRule>
+
+<tag name='indexdiv'>
+  <ref role='common.attrib'/>
+  <ref role='indexdiv.role.attrib'/>
+  <!-- %local.indexdiv.attrib; -->
+</tag>
+
+<!-- Index entries appear in the index, not the text. -->
+
+<attPool role='indexentry.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='indexentry'>
+  <sequence>
+    <ref label='primaryie'/>
+    <choice occurs='*'>
+      <ref label='seeie'/>
+      <ref label='seealsoie'/>
+    </choice>
+    <sequence occurs='*'>
+      <ref label='secondaryie'/>
+      <choice occurs='*'>
+        <ref label='seeie'/>
+        <ref label='seealsoie'/>
+        <ref label='tertiaryie'/>
+      </choice>
+    </sequence>
+  </sequence>
+  <!-- (primaryie, (seeie|seealsoie)*,
+               (secondaryie, (seeie|seealsoie|tertiaryie)*)*) -->
+</elementRule>
+
+<tag name='indexentry'>
+  <ref role='common.attrib'/>
+  <ref role='indexentry.role.attrib'/>
+  <!-- %local.indexentry.attrib; -->
+</tag>
+
+<attPool role='primsecterie.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='primaryie'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='ndxterm.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%ndxterm.char.mix;)* -->
+</elementRule>
+
+<tag name='primaryie'>
+  <!-- to IndexTerms that these entries represent -->
+  <!-- FIXME: constrain -->
+  <ref role='linkends.attrib'/>
+  <ref role='common.attrib'/>
+  <ref role='primsecterie.role.attrib'/>
+  <!-- %local.primsecterie.attrib; -->
+</tag>
+
+<elementRule role='secondaryie'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='ndxterm.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%ndxterm.char.mix;)* -->
+</elementRule>
+
+<tag name='secondaryie'>
+  <!-- to IndexTerms that these entries represent -->
+  <!-- FIXME: constrain -->
+  <ref role='linkends.attrib'/>
+  <ref role='common.attrib'/>
+  <ref role='primsecterie.role.attrib'/>
+  <!-- %local.primsecterie.attrib; -->
+</tag>
+
+<elementRule role='tertiaryie'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='ndxterm.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%ndxterm.char.mix;)* -->
+</elementRule>
+
+<tag name='tertiaryie'>
+  <!-- to IndexTerms that these entries represent -->
+  <!-- FIXME: constrain -->
+  <ref role='linkends.attrib'/>
+  <ref role='common.attrib'/>
+  <ref role='primsecterie.role.attrib'/>
+  <!-- %local.primsecterie.attrib; -->
+</tag>
+
+<attPool role='seeie.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='seeie'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='ndxterm.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%ndxterm.char.mix;)* -->
+</elementRule>
+
+<tag name='seeie'>
+  <!-- to IndexEntry to look up -->
+  <!-- FIXME: constrain -->
+
+  <ref role='linkend.attrib'/>
+  <ref role='common.attrib'/>
+  <ref role='seeie.role.attrib'/>
+  <!-- %local.seeie.attrib; -->
+</tag>
+
+<attPool role='seealsoie.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='seealsoie'>
+  <choice occurs='*'>
+    <hedgeRef label='ndxterm.char.mix'/>
+  </choice>
+  <!-- (%ndxterm.char.mix;)* -->
+</elementRule>
+
+<tag name='seealsoie'>
+  <!-- to related IndexEntries -->
+  <!-- FIXME: constrain -->
+
+  <ref role='linkends.attrib'/>
+  <ref role='common.attrib'/>
+  <ref role='seealsoie.role.attrib'/>
+  <!-- %local.seealsoie.attrib; -->
+</tag>
+
+<!-- ...................................................................... -->
+<!-- RefEntry ............................................................. -->
+
+<attPool role='refentry.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='refentry'>
+  <sequence>
+    <hedgeRef label='ndxterm.class' occurs='*'/>
+    <ref label='refentryinfo' occurs='?'/>
+    <ref label='refmeta' occurs='?'/>
+    <choice occurs='*'>
+      <ref label='remark'/>
+      <hedgeRef label='link.char.class'/>
+    </choice>
+    <ref label='refnamediv'/>
+    <ref label='refsynopsisdiv' occurs='?'/>
+    <ref label='refsect1' occurs='+'/>
+  </sequence>
+  <!-- ((%ndxterm.class;)*,
+                    refentryinfo?, refmeta?, (remark|%link.char.class;)*,
+                    refnamediv, refsynopsisdiv?, refsect1+) -->
+</elementRule>
+
+<tag name='refentry'>
+  <ref role='status.attrib'/>
+  <ref role='common.attrib'/>
+  <ref role='refentry.role.attrib'/>
+  <!-- %local.refentry.attrib; -->
+</tag>
+
+<attPool role='refmeta.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='refmeta'>
+  <sequence>
+    <hedgeRef label='ndxterm.class' occurs='*'/>
+    <ref label='refentrytitle'/>
+    <ref label='manvolnum' occurs='?'/>
+    <ref label='refmiscinfo' occurs='*'/>
+    <hedgeRef label='ndxterm.class' occurs='*'/>
+  </sequence>
+  <!-- ((%ndxterm.class;)*,
+                   refentrytitle, manvolnum?, refmiscinfo*,
+                   (%ndxterm.class;)*) -->
+</elementRule>
+
+<tag name='refmeta'>
+  <ref role='common.attrib'/>
+  <ref role='refmeta.role.attrib'/>
+  <!-- %local.refmeta.attrib; -->
+</tag>
+
+<attPool role='refmiscinfo.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='refmiscinfo'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='docinfo.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%docinfo.char.mix;)* -->
+</elementRule>
+
+<tag name='refmiscinfo'>
+  <ref role='common.attrib'/>
+  <ref role='refmiscinfo.role.attrib'/>
+  <!-- %local.refmiscinfo.attrib; -->
+
+  <!-- Class: Freely assignable parameter; no default -->
+  <attribute name='class' type='string'/>
+</tag>
+
+<attPool role='refnamediv.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='refnamediv'>
+  <sequence>
+    <ref label='refdescriptor' occurs='?'/>
+    <ref label='refname' occurs='+'/>
+    <ref label='refpurpose'/>
+    <choice occurs='*'>
+      <ref label='remark'/>
+      <hedgeRef label='link.char.class'/>
+    </choice>
+  </sequence>
+  <!-- (refdescriptor?, refname+, refpurpose, refclass*,
+               (remark|%link.char.class;)*) -->
+</elementRule>
+
+<tag name='refnamediv'>
+  <ref role='common.attrib'/>
+  <ref role='refnamediv.role.attrib'/>
+  <!-- %local.refnamediv.attrib; -->
+</tag>
+
+<attPool role='refdescriptor.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='refdescriptor'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='refname.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%refname.char.mix;)* -->
+</elementRule>
+
+<tag name='refdescriptor'>
+  <ref role='common.attrib'/>
+  <ref role='refdescriptor.role.attrib'/>
+  <!-- %local.refdescriptor.attrib; -->
+</tag>
+
+<attPool role='refname.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='refname'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='refname.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%refname.char.mix;)* -->
+</elementRule>
+
+<tag name='refname'>
+  <ref role='common.attrib'/>
+  <ref role='refname.role.attrib'/>
+  <!-- %local.refname.attrib; -->
+</tag>
+
+<attPool role='refpurpose.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='refpurpose'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='refinline.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%refinline.char.mix;)* -->
+</elementRule>
+
+<tag name='refpurpose'>
+  <ref role='common.attrib'/>
+  <ref role='refpurpose.role.attrib'/>
+  <!-- %local.refpurpose.attrib; -->
+</tag>
+
+<attPool role='refclass.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='refclass'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='refclass.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%refclass.char.mix;)* -->
+</elementRule>
+
+<tag name='refclass'>
+  <ref role='common.attrib'/>
+  <ref role='refclass.role.attrib'/>
+  <!-- %local.refclass.attrib; -->
+</tag>
+
+<attPool role='refsynopsisdiv.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='refsynopsisdiv'>
+  <sequence>
+    <ref label='refsynopsisdivinfo' occurs='?'/>
+    <hedgeRef label='refsect.title.content' occurs='?'/>
+    <choice>
+      <sequence>
+        <hedgeRef label='refcomponent.mix' occurs='+'/>
+        <ref label='refsect2' occurs='*'/>
+      </sequence>
+      <ref label='refsect2' occurs='+'/>
+    </choice>
+  </sequence>
+  <!-- (refsynopsisdivinfo?, (%refsect.title.content;)?,
+               (((%refcomponent.mix;)+, refsect2*) | (refsect2+))) -->
+</elementRule>
+
+<tag name='refsynopsisdiv'>
+  <ref role='common.attrib'/>
+  <ref role='refsynopsisdiv.role.attrib'/>
+  <!-- %local.refsynopsisdiv.attrib; -->
+</tag>
+
+<attPool role='refsect1.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='refsect1'>
+  <sequence>
+    <ref label='refsect1info' occurs='?'/>
+    <hedgeRef label='refsect.title.content'/>
+    <choice>
+      <sequence>
+        <hedgeRef label='refcomponent.mix' occurs='+'/>
+        <ref label='refsect2' occurs='*'/>
+      </sequence>
+      <ref label='refsect2' occurs='+'/>
+    </choice>
+  </sequence>
+  <!-- (refsect1info?, (%refsect.title.content;),
+               (((%refcomponent.mix;)+, refsect2*) | refsect2+)) -->
+</elementRule>
+
+<tag name='refsect1'>
+  <ref role='status.attrib'/>
+  <ref role='common.attrib'/>
+  <ref role='refsect1.role.attrib'/>
+  <!-- %local.refsect1.attrib; -->
+</tag>
+
+<attPool role='refsect2.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='refsect2'>
+  <sequence>
+    <ref label='refsect2info' occurs='?'/>
+    <hedgeRef label='refsect.title.content'/>
+    <choice>
+      <sequence>
+        <hedgeRef label='refcomponent.mix' occurs='+'/>
+        <ref label='refsect3' occurs='*'/>
+      </sequence>
+      <ref label='refsect3' occurs='+'/>
+    </choice>
+  </sequence>
+  <!-- (refsect2info?, (%refsect.title.content;),
+       (((%refcomponent.mix;)+, refsect3*) | refsect3+)) -->
+</elementRule>
+
+<tag name='refsect2'>
+  <ref role='status.attrib'/>
+  <ref role='common.attrib'/>
+  <ref role='refsect2.role.attrib'/>
+  <!-- %local.refsect2.attrib; -->
+</tag>
+
+<attPool role='refsect3.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='refsect3'>
+  <sequence>
+    <ref label='refsect3info' occurs='?'/>
+    <hedgeRef label='refsect.title.content'/>
+    <hedgeRef label='refcomponent.mix' occurs='+'/>
+  </sequence>
+  <!-- (refsect3info?, (%refsect.title.content;),
+       (%refcomponent.mix;)+) -->
+</elementRule>
+
+<tag name='refsect3'>
+  <ref role='status.attrib'/>
+  <ref role='common.attrib'/>
+  <ref role='refsect3.role.attrib'/>
+  <!-- %local.refsect3.attrib; -->
+</tag>
+
+<!-- ...................................................................... -->
+<!-- Article .............................................................. -->
+
+<!-- An Article is a chapter-level, stand-alone document that is often,
+     but need not be, collected into a Book. -->
+
+<attPool role='article.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='article'>
+  <sequence>
+    <hedgeRef label='div.title.content' occurs='?'/>
+    <ref label='articleinfo' occurs='?'/>
+    <ref label='tocchap' occurs='?'/>
+    <ref label='lot' occurs='*'/>
+    <hedgeRef label='bookcomponent.content'/>
+    <choice occurs='*'>
+      <hedgeRef label='nav.class'/>
+      <hedgeRef label='appendix.class'/>
+      <ref label='ackno'/>
+    </choice>
+  </sequence>
+  <!-- ((%div.title.content;)?, articleinfo?, tocchap?, lot*,
+                       (%bookcomponent.content;),
+                       ((%nav.class;) | (%appendix.class;) | ackno)*) -->
+</elementRule>
+
+<tag name='article'>
+  <ref role='status.attrib'/>
+  <ref role='common.attrib'/>
+  <ref role='article.role.attrib'/>
+  <!-- %local.article.attrib; -->
+
+  <!-- Class: Indicates the type of a particular article;
+       all articles have the same structure and general purpose.
+       No default. -->
+  <attribute name='class' type='NMTOKEN'>
+    <enumeration value='journalarticle'/>
+    <enumeration value='productsheet'/>
+    <enumeration value='whitepaper'/>
+    <enumeration value='techreport'/>
+    <enumeration value='specification'/>
+    <enumeration value='faq'/>
+  </attribute>
+
+  <!-- ParentBook: ID of the enclosing Book -->
+  <attribute name='parentbook' type='IDREF'/>
+</tag>
+
+</module>
\ No newline at end of file
diff --git a/schema/relax/dbpool.rlx b/schema/relax/dbpool.rlx
new file mode 100644 (file)
index 0000000..2abf4af
--- /dev/null
@@ -0,0 +1,7589 @@
+<?xml version="1.0" encoding="UTF-8"?> <!-- -*- XML -*- -->
+
+<module moduleVersion="1.2"
+       relaxCoreVersion="1.0"
+       xmlns="http://www.xml.gr.jp/xmlns/relaxCore">
+
+  <interface/>
+
+<!-- ...................................................................... -->
+<!-- DocBook RELAX Schema V4.1.2.1......................................... -->
+<!-- ...................................................................... -->
+<!-- Copyright 2000, Norman Walsh, Sun Microsystems.  Schema
+     derived from DocBook DTD Copyright 1992-2000 HaL Computer....  -->
+
+<!-- ...................................................................... -->
+<!-- General-purpose semantics entities ................................... -->
+
+<!-- yesorno.attvals ... -->
+
+<!-- ...................................................................... -->
+<!-- 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 ""-->
+<hedgeRule label='ndxterm.class'>
+  <choice>
+    <ref label='indexterm'/>
+    <!-- %local.ndxterm.class; -->
+  </choice>
+</hedgeRule>
+
+<!-- Object-level classes ................................................. -->
+
+<!--ENTITY % local.list.class ""-->
+<hedgeRule label='list.class'>
+  <choice>
+    <ref label='calloutlist'/>
+    <ref label='glosslist'/>
+    <ref label='itemizedlist'/>
+    <ref label='orderedlist'/>
+    <ref label='segmentedlist'/>
+    <ref label='simplelist'/>
+    <ref label='variablelist'/>
+    <!-- %local.list.class; -->
+  </choice>
+</hedgeRule>
+
+<!--ENTITY % local.admon.class ""-->
+<hedgeRule label='admon.class'>
+  <choice>
+    <ref label='caution'/>
+    <ref label='important'/>
+    <ref label='note'/>
+    <ref label='tip'/>
+    <ref label='warning'/>
+    <!-- %local.admon.class; -->
+  </choice>
+</hedgeRule>
+
+<!--ENTITY % local.linespecific.class ""-->
+<hedgeRule label='linespecific.class'>
+  <choice>
+    <ref label='literallayout'/>
+    <ref label='programlisting'/>
+    <ref label='programlistingco'/>
+    <ref label='screen'/>
+    <ref label='screenco'/>
+    <ref label='screenshot'/>
+    <!-- %local.linespecific.class; -->
+  </choice>
+</hedgeRule>
+
+<!--ENTITY % local.method.synop.class ""-->
+<hedgeRule label='method.synop.class'>
+  <choice>
+    <ref label='constructorsynopsis'/>
+    <ref label='destructorsynopsis'/>
+    <ref label='methodsynopsis'/>
+    <!-- %local.method.synop.class; -->
+  </choice>
+</hedgeRule>
+
+<!--ENTITY % local.synop.class ""-->
+<hedgeRule label='synop.class'>
+  <choice>
+    <ref label='synopsis'/>
+    <ref label='cmdsynopsis'/>
+    <ref label='funcsynopsis'/>
+    <ref label='classsynopsis'/>
+    <ref label='fieldsynopsis'/>
+    <!-- %method.synop.class; -->
+    <!-- %local.synop.class; -->
+  </choice>
+</hedgeRule>
+
+<!--ENTITY % local.para.class ""-->
+<hedgeRule label='para.class'>
+  <choice>
+    <ref label='formalpara'/>
+    <ref label='para'/>
+    <ref label='simpara'/>
+    <!-- %local.para.class; -->
+  </choice>
+</hedgeRule>
+
+<!--ENTITY % local.informal.class ""-->
+<hedgeRule label='informal.class'>
+  <choice>
+    <ref label='address'/>
+    <ref label='blockquote'/>
+    <ref label='graphic'/>
+    <ref label='graphicco'/>
+    <ref label='mediaobject'/>
+    <ref label='mediaobjectco'/>
+    <ref label='informalequation'/>
+    <ref label='informalexample'/>
+    <ref label='informalfigure'/>
+    <ref label='informaltable'/>
+    <!-- %local.informal.class; -->
+  </choice>
+</hedgeRule>
+
+<!--ENTITY % local.formal.class ""-->
+<hedgeRule label='formal.class'>
+  <choice>
+    <ref label='equation'/>
+    <ref label='example'/>
+    <ref label='figure'/>
+    <ref label='table'/>
+    <!-- %local.formal.class; -->
+  </choice>
+</hedgeRule>
+
+<!-- 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 ""-->
+<hedgeRule label='compound.class'>
+  <choice>
+    <ref label='msgset'/>
+    <ref label='procedure'/>
+    <ref label='sidebar'/>
+    <ref label='qandaset'/>
+    <!-- %ebnf.block.hook; -->
+    <!-- %local.compound.class; -->
+  </choice>
+</hedgeRule>
+
+<!--ENTITY % local.genobj.class ""-->
+<hedgeRule label='genobj.class'>
+  <choice>
+    <ref label='anchor'/>
+    <ref label='bridgehead'/>
+    <ref label='remark'/>
+    <ref label='highlights'/>
+    <!-- %local.genobj.class; -->
+  </choice>
+</hedgeRule>
+
+<!--ENTITY % local.descobj.class ""-->
+<hedgeRule label='descobj.class'>
+  <choice>
+    <ref label='abstract'/>
+    <ref label='authorblurb'/>
+    <ref label='epigraph'/>
+    <!-- %local.descobj.class; -->
+  </choice>
+</hedgeRule>
+
+<!-- Character-level classes .............................................. -->
+
+<!--ENTITY % local.xref.char.class ""-->
+<hedgeRule label='xref.char.class'>
+  <choice>
+    <ref label='footnoteref'/>
+    <ref label='xref'/>
+    <!-- %local.xref.char.class; -->
+  </choice>
+</hedgeRule>
+
+<!--ENTITY % local.gen.char.class ""-->
+<hedgeRule label='gen.char.class'>
+  <choice>
+    <ref label='abbrev'/>
+    <ref label='acronym'/>
+    <ref label='citation'/>
+    <ref label='citerefentry'/>
+    <ref label='citetitle'/>
+    <ref label='emphasis'/>
+    <ref label='firstterm'/>
+    <ref label='foreignphrase'/>
+    <ref label='glossterm'/>
+    <ref label='footnote'/>
+    <ref label='phrase'/>
+    <ref label='quote'/>
+    <ref label='trademark'/>
+    <ref label='wordasword'/>
+    <!-- %local.gen.char.class; -->
+  </choice>
+</hedgeRule>
+
+<!--ENTITY % local.link.char.class ""-->
+<hedgeRule label='link.char.class'>
+  <choice>
+    <ref label='link'/>
+    <ref label='olink'/>
+    <ref label='ulink'/>
+    <!-- %local.link.char.class; -->
+  </choice>
+</hedgeRule>
+
+<!-- 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 ""-->
+<hedgeRule label='tech.char.class'>
+  <choice>
+    <ref label='action'/>
+    <ref label='application'/>
+    <ref label='classname'/>
+    <ref label='methodname'/>
+    <ref label='interfacename'/>
+    <ref label='exceptionname'/>
+    <ref label='ooclass'/>
+    <ref label='oointerface'/>
+    <ref label='ooexception'/>
+    <ref label='command'/>
+    <ref label='computeroutput'/>
+    <ref label='database'/>
+    <ref label='email'/>
+    <ref label='envar'/>
+    <ref label='errorcode'/>
+    <ref label='errorname'/>
+    <ref label='errortype'/>
+    <ref label='filename'/>
+    <ref label='function'/>
+    <ref label='guibutton'/>
+    <ref label='guiicon'/>
+    <ref label='guilabel'/>
+    <ref label='guimenu'/>
+    <ref label='guimenuitem'/>
+    <ref label='guisubmenu'/>
+    <ref label='hardware'/>
+    <ref label='interface'/>
+    <ref label='keycap'/>
+    <ref label='keycode'/>
+    <ref label='keycombo'/>
+    <ref label='keysym'/>
+    <ref label='literal'/>
+    <ref label='constant'/>
+    <ref label='markup'/>
+    <ref label='medialabel'/>
+    <ref label='menuchoice'/>
+    <ref label='mousebutton'/>
+    <ref label='option'/>
+    <ref label='optional'/>
+    <ref label='parameter'/>
+    <ref label='prompt'/>
+    <ref label='property'/>
+    <ref label='replaceable'/>
+    <ref label='returnvalue'/>
+    <ref label='sgmltag'/>
+    <ref label='structfield'/>
+    <ref label='structname'/>
+    <ref label='symbol'/>
+    <ref label='systemitem'/>
+    <ref label='token'/>
+    <ref label='type'/>
+    <ref label='userinput'/>
+    <ref label='varname'/>
+    <!-- %ebnf.inline.hook; -->
+    <!-- %local.tech.char.class; -->
+  </choice>
+</hedgeRule>
+
+<!--ENTITY % local.base.char.class ""-->
+<hedgeRule label='base.char.class'>
+  <choice>
+    <ref label='anchor'/>
+    <!-- %local.base.char.class; -->
+  </choice>
+</hedgeRule>
+
+<!--ENTITY % local.docinfo.char.class ""-->
+<hedgeRule label='docinfo.char.class'>
+  <choice>
+    <ref label='author'/>
+    <ref label='authorinitials'/>
+    <ref label='corpauthor'/>
+    <ref label='modespec'/>
+    <ref label='othercredit'/>
+    <ref label='productname'/>
+    <ref label='productnumber'/>
+    <ref label='revhistory'/>
+    <!-- %local.docinfo.char.class; -->
+  </choice>
+</hedgeRule>
+
+<!--ENTITY % local.other.char.class ""-->
+<hedgeRule label='other.char.class'>
+  <choice>
+    <ref label='remark'/>
+    <ref label='subscript'/>
+    <ref label='superscript'/>
+    <!-- %local.other.char.class; -->
+  </choice>
+</hedgeRule>
+
+<!--ENTITY % local.inlineobj.char.class ""-->
+<hedgeRule label='inlineobj.char.class'>
+  <choice>
+    <ref label='inlinegraphic'/>
+    <ref label='inlinemediaobject'/>
+    <ref label='inlineequation'/>
+    <!-- %local.inlineobj.char.class; -->
+  </choice>
+</hedgeRule>
+
+<!-- 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 ""-->
+<hedgeRule label='component.mix'>
+  <choice>
+    <hedgeRef label='list.class'/>
+    <hedgeRef label='admon.class'/>
+    <hedgeRef label='linespecific.class'/>
+    <hedgeRef label='synop.class'/>
+    <hedgeRef label='para.class'/>
+    <hedgeRef label='informal.class'/>
+    <hedgeRef label='formal.class'/>
+    <hedgeRef label='compound.class'/>
+    <hedgeRef label='genobj.class'/>
+    <hedgeRef label='descobj.class'/>
+    <hedgeRef label='ndxterm.class'/>
+    <ref label='beginpage'/>
+    <!-- %local.component.mix; -->
+  </choice>
+</hedgeRule>
+
+<!--ENTITY % local.sidebar.mix ""-->
+<hedgeRule label='sidebar.mix'>
+  <choice>
+    <hedgeRef label='list.class'/>
+    <hedgeRef label='admon.class'/>
+    <hedgeRef label='linespecific.class'/>
+    <hedgeRef label='synop.class'/>
+    <hedgeRef label='para.class'/>
+    <hedgeRef label='informal.class'/>
+    <hedgeRef label='formal.class'/>
+    <ref label='procedure'/>
+    <hedgeRef label='genobj.class'/>
+    <hedgeRef label='ndxterm.class'/>
+    <ref label='beginpage'/>
+    <!-- %local.sidebar.mix; -->
+  </choice>
+</hedgeRule>
+
+<!--ENTITY % local.qandaset.mix ""-->
+<hedgeRule label='qandaset.mix'>
+  <choice>
+    <hedgeRef label='list.class'/>
+    <hedgeRef label='admon.class'/>
+    <hedgeRef label='linespecific.class'/>
+    <hedgeRef label='synop.class'/>
+    <hedgeRef label='para.class'/>
+    <hedgeRef label='informal.class'/>
+    <hedgeRef label='formal.class'/>
+    <ref label='procedure'/>
+    <hedgeRef label='genobj.class'/>
+    <hedgeRef label='ndxterm.class'/>
+    <!-- %local.qandaset.mix; -->
+  </choice>
+</hedgeRule>
+
+<!--ENTITY % local.revdescription.mix ""-->
+<hedgeRule label='revdescription.mix'>
+  <choice>
+    <hedgeRef label='list.class'/>
+    <hedgeRef label='admon.class'/>
+    <hedgeRef label='linespecific.class'/>
+    <hedgeRef label='synop.class'/>
+    <hedgeRef label='para.class'/>
+    <hedgeRef label='informal.class'/>
+    <hedgeRef label='formal.class'/>
+    <ref label='procedure'/>
+    <hedgeRef label='genobj.class'/>
+    <hedgeRef label='ndxterm.class'/>
+    <!-- %local.revdescription.mix; -->
+  </choice>
+</hedgeRule>
+
+<!--ENTITY % local.footnote.mix ""-->
+<hedgeRule label='footnote.mix'>
+  <choice>
+    <hedgeRef label='list.class'/>
+    <hedgeRef label='linespecific.class'/>
+    <hedgeRef label='synop.class'/>
+    <hedgeRef label='para.class'/>
+    <hedgeRef label='informal.class'/>
+    <!-- %local.footnote.mix; -->
+  </choice>
+</hedgeRule>
+
+<!--ENTITY % local.example.mix ""-->
+<hedgeRule label='example.mix'>
+  <choice>
+    <hedgeRef label='list.class'/>
+    <hedgeRef label='linespecific.class'/>
+    <hedgeRef label='synop.class'/>
+    <hedgeRef label='para.class'/>
+    <hedgeRef label='informal.class'/>
+    <hedgeRef label='ndxterm.class'/>
+    <ref label='beginpage'/>
+    <!-- %local.example.mix; -->
+  </choice>
+</hedgeRule>
+
+<!--ENTITY % local.highlights.mix ""-->
+<hedgeRule label='highlights.mix'>
+  <choice>
+    <hedgeRef label='list.class'/>
+    <hedgeRef label='admon.class'/>
+    <hedgeRef label='para.class'/>
+    <hedgeRef label='ndxterm.class'/>
+    <!-- %local.highlights.mix; -->
+  </choice>
+</hedgeRule>
+
+<!-- %formal.class; is explicitly excluded from many contexts in which
+     paragraphs are used -->
+<!--ENTITY % local.para.mix ""-->
+<hedgeRule label='para.mix'>
+  <choice>
+    <hedgeRef label='list.class'/>
+    <hedgeRef label='admon.class'/>
+    <hedgeRef label='linespecific.class'/>
+    <hedgeRef label='informal.class'/>
+    <hedgeRef label='formal.class'/>
+    <!-- %local.para.mix; -->
+  </choice>
+</hedgeRule>
+
+<!--ENTITY % local.admon.mix ""-->
+<hedgeRule label='admon.mix'>
+  <choice>
+    <hedgeRef label='list.class'/>
+    <hedgeRef label='linespecific.class'/>
+    <hedgeRef label='synop.class'/>
+    <hedgeRef label='para.class'/>
+    <hedgeRef label='informal.class'/>
+    <hedgeRef label='formal.class'/>
+    <ref label='procedure'/>
+    <ref label='sidebar'/>
+    <ref label='anchor'/>
+    <ref label='bridgehead'/>
+    <ref label='remark'/>
+    <hedgeRef label='ndxterm.class'/>
+    <ref label='beginpage'/>
+    <!-- %local.admon.mix; -->
+  </choice>
+</hedgeRule>
+
+<!--ENTITY % local.figure.mix ""-->
+<hedgeRule label='figure.mix'>
+  <choice>
+    <hedgeRef label='linespecific.class'/>
+    <hedgeRef label='synop.class'/>
+    <hedgeRef label='informal.class'/>
+    <hedgeRef label='ndxterm.class'/>
+    <ref label='beginpage'/>
+    <!-- %local.figure.mix; -->
+  </choice>
+</hedgeRule>
+
+<!--ENTITY % local.tabentry.mix ""-->
+<hedgeRule label='tabentry.mix'>
+  <choice>
+    <hedgeRef label='list.class'/>
+    <hedgeRef label='admon.class'/>
+    <hedgeRef label='linespecific.class'/>
+    <hedgeRef label='para.class'/>
+    <ref label='graphic'/>
+    <ref label='mediaobject'/>
+    <!-- %local.tabentry.mix; -->
+  </choice>
+</hedgeRule>
+
+<!--ENTITY % local.glossdef.mix ""-->
+<hedgeRule label='glossdef.mix'>
+  <choice>
+    <hedgeRef label='list.class'/>
+    <hedgeRef label='linespecific.class'/>
+    <hedgeRef label='synop.class'/>
+    <hedgeRef label='para.class'/>
+    <hedgeRef label='informal.class'/>
+    <hedgeRef label='formal.class'/>
+    <ref label='remark'/>
+    <hedgeRef label='ndxterm.class'/>
+    <ref label='beginpage'/>
+    <!-- %local.glossdef.mix; -->
+  </choice>
+</hedgeRule>
+
+<!--ENTITY % local.legalnotice.mix ""-->
+<hedgeRule label='legalnotice.mix'>
+  <choice>
+    <hedgeRef label='list.class'/>
+    <hedgeRef label='admon.class'/>
+    <hedgeRef label='linespecific.class'/>
+    <hedgeRef label='para.class'/>
+    <ref label='blockquote'/>
+    <hedgeRef label='ndxterm.class'/>
+    <ref label='beginpage'/>
+    <!-- %local.legalnotice.mix; -->
+  </choice>
+</hedgeRule>
+
+<!--ENTITY % local.textobject.mix ""-->
+<hedgeRule label='textobject.mix'>
+  <choice>
+    <hedgeRef label='list.class'/>
+    <hedgeRef label='admon.class'/>
+    <hedgeRef label='linespecific.class'/>
+    <hedgeRef label='para.class'/>
+    <ref label='blockquote'/>
+    <!-- %local.textobject.mix; -->
+  </choice>
+</hedgeRule>
+
+<!--ENTITY % local.mediaobject.mix ""-->
+<hedgeRule label='mediaobject.mix'>
+  <choice>
+    <ref label='videoobject'/>
+    <ref label='audioobject'/>
+    <ref label='imageobject'/>
+    <!-- %local.mediaobject.mix; -->
+  </choice>
+</hedgeRule>
+
+<!-- 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 ""-->
+<hedgeRule label='para.char.mix'>
+  <choice>
+    <!-- #PCDATA -->
+    <hedgeRef label='xref.char.class'/>
+    <hedgeRef label='gen.char.class'/>
+    <hedgeRef label='link.char.class'/>
+    <hedgeRef label='tech.char.class'/>
+    <hedgeRef label='base.char.class'/>
+    <hedgeRef label='docinfo.char.class'/>
+    <hedgeRef label='other.char.class'/>
+    <hedgeRef label='inlineobj.char.class'/>
+    <hedgeRef label='synop.class'/>
+    <hedgeRef label='ndxterm.class'/>
+    <ref label='beginpage'/>
+    <!-- %local.para.char.mix; -->
+  </choice>
+</hedgeRule>
+
+<!--ENTITY % local.title.char.mix ""-->
+<hedgeRule label='title.char.mix'>
+  <choice>
+    <!-- #PCDATA -->
+    <hedgeRef label='xref.char.class'/>
+    <hedgeRef label='gen.char.class'/>
+    <hedgeRef label='link.char.class'/>
+    <hedgeRef label='tech.char.class'/>
+    <hedgeRef label='base.char.class'/>
+    <hedgeRef label='docinfo.char.class'/>
+    <hedgeRef label='other.char.class'/>
+    <hedgeRef label='inlineobj.char.class'/>
+    <hedgeRef label='ndxterm.class'/>
+    <!-- %local.title.char.mix; -->
+  </choice>
+</hedgeRule>
+
+<!--ENTITY % local.ndxterm.char.mix ""-->
+<hedgeRule label='ndxterm.char.mix'>
+  <choice>
+    <!-- #PCDATA -->
+    <hedgeRef label='xref.char.class'/>
+    <hedgeRef label='gen.char.class'/>
+    <hedgeRef label='link.char.class'/>
+    <hedgeRef label='tech.char.class'/>
+    <hedgeRef label='base.char.class'/>
+    <hedgeRef label='docinfo.char.class'/>
+    <hedgeRef label='other.char.class'/>
+    <ref label='inlinegraphic'/>
+    <ref label='inlinemediaobject'/>
+    <!-- %local.ndxterm.char.mix; -->
+  </choice>
+</hedgeRule>
+
+<!--ENTITY % local.cptr.char.mix ""-->
+<hedgeRule label='cptr.char.mix'>
+  <choice>
+    <!-- #PCDATA -->
+    <hedgeRef label='link.char.class'/>
+    <hedgeRef label='tech.char.class'/>
+    <hedgeRef label='base.char.class'/>
+    <hedgeRef label='other.char.class'/>
+    <ref label='inlinegraphic'/>
+    <ref label='inlinemediaobject'/>
+    <hedgeRef label='ndxterm.class'/>
+    <ref label='beginpage'/>
+    <!-- %local.cptr.char.mix; -->
+  </choice>
+</hedgeRule>
+
+<!--ENTITY % local.smallcptr.char.mix ""-->
+<hedgeRule label='smallcptr.char.mix'>
+  <choice>
+    <!-- #PCDATA -->
+    <ref label='replaceable'/>
+    <ref label='inlinegraphic'/>
+    <ref label='inlinemediaobject'/>
+    <hedgeRef label='ndxterm.class'/>
+    <ref label='beginpage'/>
+    <!-- %local.smallcptr.char.mix; -->
+  </choice>
+</hedgeRule>
+
+<!--ENTITY % local.word.char.mix ""-->
+<hedgeRule label='word.char.mix'>
+  <choice>
+    <!-- #PCDATA -->
+    <ref label='acronym'/>
+    <ref label='emphasis'/>
+    <ref label='trademark'/>
+    <hedgeRef label='link.char.class'/>
+    <hedgeRef label='base.char.class'/>
+    <hedgeRef label='other.char.class'/>
+    <ref label='inlinegraphic'/>
+    <ref label='inlinemediaobject'/>
+    <hedgeRef label='ndxterm.class'/>
+    <ref label='beginpage'/>
+    <!-- %local.word.char.mix; -->
+  </choice>
+</hedgeRule>
+
+<!--ENTITY % local.docinfo.char.mix ""-->
+<hedgeRule label='docinfo.char.mix'>
+  <choice>
+    <!-- #PCDATA -->
+    <hedgeRef label='link.char.class'/>
+    <ref label='emphasis'/>
+    <ref label='trademark'/>
+    <ref label='replaceable'/>
+    <hedgeRef label='other.char.class'/>
+    <ref label='inlinegraphic'/>
+    <ref label='inlinemediaobject'/>
+    <hedgeRef label='ndxterm.class'/>
+    <!-- %local.docinfo.char.mix; -->
+  </choice>
+</hedgeRule>
+
+<!--ENTITY % bibliocomponent.mix (see Bibliographic section, below)-->
+<!--ENTITY % person.ident.mix (see Bibliographic section, below)-->
+
+<!-- ...................................................................... -->
+<!-- Entities for content models .......................................... -->
+
+<hedgeRule label='formalobject.title.content'>
+  <sequence>
+    <ref label='title'/>
+    <ref label='titleabbrev' occurs='?'/>
+  </sequence>
+</hedgeRule>
+
+<!-- ...................................................................... -->
+<!-- Entities for attributes and attribute components ..................... -->
+
+<!-- Effectivity attributes ............................................... -->
+
+<!-- Arch: Computer or chip architecture to which element applies; no
+       default -->
+<attPool role='arch.attrib'>
+  <attribute name='arch' type='string'/>
+</attPool>
+
+<!-- Condition: General-purpose effectivity attribute -->
+
+<attPool role='condition.attrib'>
+  <attribute name='condition' type='string'/>
+</attPool>
+
+<!-- Conformance: Standards conformance characteristics -->
+
+<attPool role='conformance.attrib'>
+  <attribute name='conformance' type='NMTOKEN'/>
+</attPool>
+
+<!-- OS: Operating system to which element applies; no default -->
+
+<attPool role='os.attrib'>
+  <attribute name='os' type='string'/>
+</attPool>
+
+<!-- Revision: Editorial revision to which element belongs; no default -->
+
+<attPool role='revision.attrib'>
+  <attribute name='revision' type='string'/>
+</attPool>
+
+<!-- Security: Security classification; no default -->
+
+<attPool role='security.attrib'>
+  <attribute name='security' type='string'/>
+</attPool>
+
+<!-- UserLevel: Level of user experience to which element applies; no
+       default -->
+
+<attPool role='userlevel.attrib'>
+  <attribute name='userlevel' type='string'/>
+</attPool>
+
+<!-- Vendor: Computer vendor to which element applies; no default -->
+
+<attPool role='vendor.attrib'>
+  <attribute name='vendor' type='string'/>
+</attPool>
+
+<!--ENTITY % local.effectivity.attrib ""-->
+<attPool role='effectivity.attrib'>
+  <ref role='arch.attrib'/>
+  <ref role='condition.attrib'/>
+  <ref role='conformance.attrib'/>
+  <ref role='os.attrib'/>
+  <ref role='revision.attrib'/>
+  <ref role='security.attrib'/>
+  <ref role='userlevel.attrib'/>
+  <ref role='vendor.attrib'/>
+  <!-- %local.effectivity.attrib; -->
+</attPool>
+
+<!-- Common attributes .................................................... -->
+
+<!-- Id: Unique identifier of element; no default -->
+
+<attPool role='id.attrib'>
+  <attribute name='id' type='ID'/>
+</attPool>
+
+<!-- Id: Unique identifier of element; a value must be supplied; no
+       default -->
+
+<attPool role='idreq.attrib'>
+  <attribute name='id' type='ID' required='true'/>
+</attPool>
+
+<!-- Lang: Indicator of language in which element is written, for
+       translation, character set management, etc.; no default -->
+
+<attPool role='lang.attrib'>
+  <attribute name='lang' type='string'/>
+</attPool>
+
+<!-- Remap: Previous role of element before conversion; no default -->
+
+<attPool role='remap.attrib'>
+  <attribute name='remap' type='string'/>
+</attPool>
+
+<!-- Role: New role of element in local environment; no default -->
+
+<attPool role='role.attrib'>
+  <attribute name='role' type='string'/>
+</attPool>
+
+<!-- XRefLabel: Alternate labeling string for XRef text generation;
+       default is usually title or other appropriate label text already
+       contained in element -->
+
+<attPool role='xreflabel.attrib'>
+  <attribute name='xreflabel' type='string'/>
+</attPool>
+
+<!-- RevisionFlag: Revision status of element; default is that element
+       wasn't revised -->
+
+<attPool role='revisionflag.attrib'>
+  <attribute name='revisionflag' type='NMTOKEN'>
+    <enumeration value='changed'/>
+    <enumeration value='added'/>
+    <enumeration value='deleted'/>
+    <enumeration value='off'/>
+  </attribute>
+</attPool>
+
+<!--ENTITY % local.common.attrib ""-->
+
+<!-- Role is included explicitly on each element -->
+
+<attPool role='common.attrib'>
+  <ref role='id.attrib'/>
+  <ref role='lang.attrib'/>
+  <ref role='remap.attrib'/>
+  <ref role='xreflabel.attrib'/>
+  <ref role='revisionflag.attrib'/>
+  <ref role='effectivity.attrib'/>
+  <!-- %local.common.attrib; -->
+</attPool>
+
+<!-- Role is included explicitly on each element -->
+
+<attPool role='idreq.common.attrib'>
+  <ref role='idreq.attrib'/>
+  <ref role='lang.attrib'/>
+  <ref role='remap.attrib'/>
+  <ref role='xreflabel.attrib'/>
+  <ref role='revisionflag.attrib'/>
+  <ref role='effectivity.attrib'/>
+  <!-- %local.common.attrib; -->
+</attPool>
+
+<!-- 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 -->
+
+<attPool role='graphics.attrib'>
+  <!-- FIXME: -->
+  <!-- entityref       ENTITY          #IMPLIED -->
+  <attribute name='fileref' type='string'/>
+  <attribute name='format' type='NMTOKEN'>
+    <enumeration value='BMP'/>
+    <enumeration value='CGM-CHAR'/>
+    <enumeration value='CGM-BINARY'/>
+    <enumeration value='CGM-CLEAR'/>
+    <enumeration value='DITROFF'/>
+    <enumeration value='DVI'/>
+    <enumeration value='EPS'/>
+    <enumeration value='EQN'/>
+    <enumeration value='FAX'/>
+    <enumeration value='GIF'/>
+    <enumeration value='GIF87a'/>
+    <enumeration value='GIF89a'/>
+    <enumeration value='JPG'/>
+    <enumeration value='JPEG'/>
+    <enumeration value='IGES'/>
+    <enumeration value='PCX'/>
+    <enumeration value='PIC'/>
+    <enumeration value='PNG'/>
+    <enumeration value='PS'/>
+    <enumeration value='SGML'/>
+    <enumeration value='TBL'/>
+    <enumeration value='TEX'/>
+    <enumeration value='TIFF'/>
+    <enumeration value='WMF'/>
+    <enumeration value='WPG'/>
+    <enumeration value='linespecific'/>
+  </attribute>
+  <attribute name='srccredit' type='string'/>
+  <attribute name='width' type='string'/>
+  <attribute name='depth' type='string'/>
+  <attribute name='align' type='NMTOKEN'>
+    <enumeration value='left'/>
+    <enumeration value='right'/>
+    <enumeration value='center'/>
+  </attribute>
+  <attribute name='scale' type='string'/>
+  <attribute name='scalefit' type='string'>
+    <enumeration value='0'/>
+    <enumeration value='1'/>
+  </attribute>
+  <!-- %local.graphics.attrib;-->
+</attPool>
+
+<!--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 -->
+
+<attPool role='keyaction.attrib'>
+  <attribute name='action' type='string'>
+    <enumeration value='click'/>
+    <enumeration value='double-click'/>
+    <enumeration value='press'/>
+    <enumeration value='seq'/>
+    <enumeration value='simul'/>
+    <enumeration value='other'/>
+  </attribute>
+  <attribute name='otheraction' type='string'/>
+  <!-- %local.keyaction.attrib; -->
+</attPool>
+
+<!-- Label: Identifying number or string; default is usually the
+       appropriate number or string autogenerated by a formatter -->
+
+<attPool role='label.attrib'>
+  <attribute name='label' type='string'/>
+</attPool>
+
+<!-- Format: whether element is assumed to contain significant white
+       space -->
+
+<attPool role='linespecific.attrib'>
+  <attribute name='format' type='NMTOKEN'>
+    <enumeration value='linespecific'/>
+  </attribute>
+
+  <attribute name='linenumbering' type='string'>
+    <enumeration value='numbered'/>
+    <enumeration value='unnumbered'/>
+  </attribute>
+</attPool>
+
+<!-- Linkend: link to related information; no default -->
+
+<attPool role='linkend.attrib'>
+  <attribute name='linkend' type='IDREF'/>
+</attPool>
+
+<!-- Linkend: required link to related information -->
+
+<attPool role='linkendreq.attrib'>
+  <attribute name='linkend' type='IDREF' required='true'/>
+</attPool>
+
+<!-- Linkends: link to one or more sets of related information; no
+       default -->
+
+<attPool role='linkends.attrib'>
+  <attribute name='linkends' type='IDREFS'/>
+</attPool>
+
+<!--ENTITY % local.mark.attrib ""-->
+<attPool role='mark.attrib'>
+  <attribute name='mark' type='string'/>
+  <!-- %local.mark.attrib; -->
+</attPool>
+
+<!-- MoreInfo: whether element's content has an associated RefEntry -->
+
+<attPool role='moreinfo.attrib'>
+  <attribute name='moreinfo' type='string'>
+    <enumeration value='refentry'/>
+    <enumeration value='none'/>
+  </attribute>
+</attPool>
+
+<!-- Pagenum: number of page on which element appears; no default -->
+
+<attPool role='pagenum.attrib'>
+  <attribute name='pagenum' type='string'/>
+</attPool>
+
+<!--ENTITY % local.status.attrib ""-->
+
+<!-- Status: Editorial or publication status of the element
+       it applies to, such as "in review" or "approved for distribution" -->
+
+<attPool role='status.attrib'>
+  <attribute name='status' type='string'/>
+  <!-- %local.status.attrib; -->
+</attPool>
+
+<!-- Width: width of the longest line in the element to which it
+       pertains, in number of characters -->
+
+<attPool role='width.attrib'>
+  <attribute name='width' type='string'/>
+</attPool>
+
+<!-- ...................................................................... -->
+<!-- Title elements ....................................................... -->
+
+<attPool role='title.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='title'>
+  <!-- (%title.char.mix;)* -->
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='title.char.mix'/>
+    </choice>
+  </mixed>
+</elementRule>
+
+<tag name='title'>
+  <ref role='pagenum.attrib'/>
+  <ref role='common.attrib'/>
+  <ref role='title.role.attrib'/>
+  <!-- %local.title.attrib; -->
+</tag>
+
+<attPool role='titleabbrev.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='titleabbrev'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='title.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%title.char.mix;)* -->
+</elementRule>
+
+<tag name='titleabbrev'>
+  <ref role='common.attrib'/>
+  <ref role='titleabbrev.role.attrib'/>
+  <!-- %local.titleabbrev.attrib; -->
+</tag>
+
+<attPool role='subtitle.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='subtitle'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='title.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%title.char.mix;)* -->
+</elementRule>
+
+<tag name='subtitle'>
+  <ref role='common.attrib'/>
+  <ref role='subtitle.role.attrib'/>
+  <!-- %local.subtitle.attrib; -->
+</tag>
+
+<!-- ...................................................................... -->
+<!-- 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. -->
+
+<hedgeRule label='person.ident.mix'>
+  <choice>
+    <ref label='honorific'/>
+    <ref label='firstname'/>
+    <ref label='surname'/>
+    <ref label='lineage'/>
+    <ref label='othername'/>
+    <ref label='affiliation'/>
+    <ref label='authorblurb'/>
+    <ref label='contrib'/>
+    <!-- %local.person.ident.mix; -->
+  </choice>
+</hedgeRule>
+
+<hedgeRule label='bibliocomponent.mix'>
+  <choice>
+    <ref label='abbrev'/>
+    <ref label='abstract'/>
+    <ref label='address'/>
+    <ref label='artpagenums'/>
+    <ref label='author'/>
+    <ref label='authorgroup'/>
+    <ref label='authorinitials'/>
+    <ref label='bibliomisc'/>
+    <ref label='biblioset'/>
+    <ref label='collab'/>
+    <ref label='confgroup'/>
+    <ref label='contractnum'/>
+    <ref label='contractsponsor'/>
+    <ref label='copyright'/>
+    <ref label='corpauthor'/>
+    <ref label='corpname'/>
+    <ref label='date'/>
+    <ref label='edition'/>
+    <ref label='editor'/>
+    <ref label='invpartnumber'/>
+    <ref label='isbn'/>
+    <ref label='issn'/>
+    <ref label='issuenum'/>
+    <ref label='orgname'/>
+    <ref label='othercredit'/>
+    <ref label='pagenums'/>
+    <ref label='printhistory'/>
+    <ref label='productname'/>
+    <ref label='productnumber'/>
+    <ref label='pubdate'/>
+    <ref label='publisher'/>
+    <ref label='publishername'/>
+    <ref label='pubsnumber'/>
+    <ref label='releaseinfo'/>
+    <ref label='revhistory'/>
+    <ref label='seriesvolnums'/>
+    <ref label='subtitle'/>
+    <ref label='title'/>
+    <ref label='titleabbrev'/>
+    <ref label='volumenum'/>
+    <ref label='citetitle'/>
+    <hedgeRef label='person.ident.mix'/>
+    <hedgeRef label='ndxterm.class'/>
+    <!-- %local.bibliocomponent.mix -->
+  </choice>
+</hedgeRule>
+
+<attPool role='biblioentry.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='biblioentry'>
+  <choice occurs='+'>
+    <ref label='articleinfo'/>
+    <hedgeRef label='bibliocomponent.mix'/>
+  </choice>
+  <!-- ((articleinfo | (%bibliocomponent.mix;))+) -->
+</elementRule>
+
+<tag name='biblioentry'>
+  <ref role='common.attrib'/>
+  <ref role='biblioentry.role.attrib'/>
+  <!-- %local.biblioentry.attrib; -->
+</tag>
+
+<attPool role='bibliomixed.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='bibliomixed'>
+  <mixed>
+    <choice occurs="*">
+      <hedgeRef label='bibliocomponent.mix'/>
+      <ref label='bibliomset'/>
+    </choice>
+  </mixed>
+  <!-- (#PCDATA | %bibliocomponent.mix; | bibliomset)* -->
+</elementRule>
+
+<tag name='bibliomixed'>
+  <ref role='common.attrib'/>
+  <ref role='bibliomixed.role.attrib'/>
+  <!-- %local.bibliomixed.attrib; -->
+</tag>
+
+<attPool role='articleinfo.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<hedgeRule label='infoContentModel'>
+  <choice occurs='+'>
+    <ref label='graphic'/>
+    <ref label='mediaobject'/>
+    <ref label='legalnotice'/>
+    <ref label='modespec'/>
+    <ref label='subjectset'/>
+    <ref label='keywordset'/>
+    <ref label='itermset'/>
+    <hedgeRef label='bibliocomponent.mix'/>
+  </choice>
+  <!-- ((graphic | mediaobject | legalnotice | modespec
+       | subjectset | keywordset | itermset | %bibliocomponent.mix;)+) -->
+</hedgeRule>
+
+<elementRule role='articleinfo'>
+  <sequence>
+    <hedgeRef label='infoContentModel'/>
+  </sequence>
+</elementRule>
+
+<tag name='articleinfo'>
+  <ref role='common.attrib'/>
+  <ref role='articleinfo.role.attrib'/>
+  <!-- %local.articleinfo.attrib; -->
+</tag>
+
+<attPool role='biblioset.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='biblioset'>
+  <choice occurs='+'>
+    <hedgeRef label='bibliocomponent.mix'/>
+  </choice>
+  <!-- ((%bibliocomponent.mix;)+) -->
+</elementRule>
+
+<tag name='biblioset'>
+  <ref role='common.attrib'/>
+  <ref role='biblioset.role.attrib'/>
+  <!-- %local.biblioset.attrib; -->
+
+  <!-- Relation: Relationship of elements contained within BiblioSet -->
+  <attribute name='relation' type='string'/>
+</tag>
+
+<attPool role='bibliomset.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='bibliomset'>
+  <mixed>
+    <choice occurs="*">
+      <hedgeRef label='bibliocomponent.mix'/>
+      <ref label='bibliomset'/>
+    </choice>
+  </mixed>
+  <!-- (#PCDATA | %bibliocomponent.mix; | bibliomset)* -->
+</elementRule>
+
+<tag name='bibliomset'>
+  <ref role='bibliomset.role.attrib'/>
+  <ref role='common.attrib'/>
+  <!-- %local.bibliomset.attrib; -->
+
+  <!-- Relation: Relationship of elements contained within BiblioMSet -->
+  <attribute name='relation' type='string'/>
+</tag>
+
+<attPool role='bibliomisc.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='bibliomisc'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='para.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%para.char.mix;)* -->
+</elementRule>
+
+<tag name='bibliomisc'>
+  <ref role='common.attrib'/>
+  <ref role='bibliomisc.role.attrib'/>
+  <!-- %local.bibliomisc.attrib; -->
+</tag>
+
+<!-- ...................................................................... -->
+<!-- Subject, Keyword, and ITermSet elements .............................. -->
+
+<attPool role='subjectset.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='subjectset'>
+  <sequence occurs='+'>
+    <ref label='subject'/>
+  </sequence>
+  <!-- (subject+) -->
+</elementRule>
+
+<tag name='subjectset'>
+  <ref role='common.attrib'/>
+  <ref role='subjectset.role.attrib'/>
+  <!-- %local.subjectset.attrib; -->
+
+  <!-- Scheme: Controlled vocabulary employed in SubjectTerms -->
+  <attribute name='scheme' type='NMTOKEN'/>
+</tag>
+
+<attPool role='subject.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='subject'>
+  <sequence occurs='+'>
+    <ref label='subjectterm'/>
+  </sequence>
+  <!-- (subjectterm+) -->
+</elementRule>
+
+<tag name='subject'>
+  <ref role='common.attrib'/>
+  <ref role='subject.role.attrib'/>
+  <!-- %local.subject.attrib; -->
+
+  <!-- Weight: Ranking of this group of SubjectTerms relative
+       to others, 0 is low, no highest value specified -->
+  <attribute name='weight' type='string'/>
+</tag>
+
+<attPool role='subjectterm.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='subjectterm'>
+  <!-- (#PCDATA) -->
+  <mixed>
+    <empty/>
+  </mixed>
+</elementRule>
+
+<tag name='subjectterm'>
+  <ref role='common.attrib'/>
+  <ref role='subjectterm.role.attrib'/>
+  <!-- %local.subjectterm.attrib; -->
+</tag>
+
+<attPool role='keywordset.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='keywordset'>
+  <sequence occurs='+'>
+    <ref label='keyword'/>
+  </sequence>
+  <!-- (keyword+) -->
+</elementRule>
+
+<tag name='keywordset'>
+  <ref role='common.attrib'/>
+  <ref role='keywordset.role.attrib'/>
+  <!-- %local.keywordset.attrib; -->
+</tag>
+
+<attPool role='keyword.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='keyword'>
+  <!-- (#PCDATA) -->
+  <mixed>
+    <empty/>
+  </mixed>
+</elementRule>
+
+<tag name='keyword'>
+  <ref role='common.attrib'/>
+  <ref role='keyword.role.attrib'/>
+   <!-- %local.keyword.attrib; -->
+</tag>
+
+<attPool role='itermset.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='itermset'>
+  <sequence occurs='+'>
+    <ref label='indexterm'/>
+  </sequence>
+  <!-- (indexterm+) -->
+</elementRule>
+
+<tag name='itermset'>
+  <ref role='common.attrib'/>
+  <ref role='itermset.role.attrib'/>
+  <!-- %local.itermset.attrib; -->
+</tag>
+
+<!-- ...................................................................... -->
+<!-- Compound (section-ish) elements ...................................... -->
+
+<!-- Message set ...................... -->
+
+<attPool role='msgset.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='msgset'>
+  <sequence>
+    <hedgeRef label='formalobject.title.content' occurs='?'/>
+    <choice>
+      <ref label='msgentry' occurs='+'/>
+      <ref label='simplemsgentry' occurs='+'/>
+    </choice>
+  </sequence>
+  <!-- ((%formalobject.title.content;)?, (msgentry+|simplemsgentry+)) -->
+</elementRule>
+
+<tag name='msgset'>
+  <ref role='common.attrib'/>
+  <ref role='msgset.role.attrib'/>
+  <!-- %local.msgset.attrib; -->
+</tag>
+
+<attPool role='msgentry.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='msgentry'>
+  <sequence>
+    <ref label='msg' occurs='+'/>
+    <ref label='msginfo' occurs='?'/>
+    <ref label='msgexplan' occurs='*'/>
+  </sequence>
+  <!-- (msg+, msginfo?, msgexplan*) -->
+</elementRule>
+
+<tag name='msgentry'>
+  <ref role='common.attrib'/>
+  <ref role='msgentry.role.attrib'/>
+  <!-- %local.msgentry.attrib; -->
+</tag>
+
+<attPool role='simplemsgentry.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='simplemsgentry'>
+  <sequence>
+    <ref label='msgtext'/>
+    <ref label='msgexplan'/>
+  </sequence>
+  <!-- (msgtext, msgexplan) -->
+</elementRule>
+
+<tag name='simplemsgentry'>
+  <ref role='common.attrib'/>
+  <ref role='simplemsgentry.role.attrib'/>
+  <!-- %local.simplemsgentry.attrib; -->
+  <attribute name='audience' type='string'/>
+  <attribute name='level' type='string'/>
+  <attribute name='origin' type='string'/>
+</tag>
+
+<attPool role='msg.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='msg'>
+  <sequence>
+    <ref label='title' occurs='?'/>
+    <ref label='msgmain'/>
+    <choice occurs='*'>
+      <ref label='msgsub'/>
+      <ref label='msgrel'/>
+    </choice>
+  </sequence>
+  <!-- (title?, msgmain, (msgsub | msgrel)*) -->
+</elementRule>
+
+<tag name='msg'>
+  <ref role='common.attrib'/>
+  <ref role='msg.role.attrib'/>
+  <!-- %local.msg.attrib; -->
+</tag>
+
+<attPool role='msgmain.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='msgmain'>
+  <sequence>
+    <ref label='title' occurs='?'/>
+    <ref label='msgtext'/>
+  </sequence>
+  <!-- (title?, msgtext) -->
+</elementRule>
+
+<tag name='msgmain'>
+  <ref role='common.attrib'/>
+  <ref role='msgmain.role.attrib'/>
+  <!-- %local.msgmain.attrib; -->
+</tag>
+
+<attPool role='msgsub.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='msgsub'>
+  <sequence>
+    <ref label='title' occurs='?'/>
+    <ref label='msgtext'/>
+  </sequence>
+  <!-- (title?, msgtext) -->
+</elementRule>
+
+<tag name='msgsub'>
+  <ref role='common.attrib'/>
+  <ref role='msgsub.role.attrib'/>
+  <!-- %local.msgsub.attrib; -->
+</tag>
+
+<attPool role='msgrel.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='msgrel'>
+  <sequence>
+    <ref label='title' occurs='?'/>
+    <ref label='msgtext'/>
+  </sequence>
+  <!-- (title?, msgtext) -->
+</elementRule>
+
+<tag name='msgrel'>
+  <ref role='common.attrib'/>
+  <ref role='msgrel.role.attrib'/>
+  <!-- %local.msgrel.attrib; -->
+</tag>
+
+<!-- MsgText (defined in the Inlines section, below)-->
+
+<attPool role='msginfo.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='msginfo'>
+  <choice occurs='*'>
+    <ref label='msglevel'/>
+    <ref label='msgorig'/>
+    <ref label='msgaud'/>
+  </choice>
+  <!-- ((msglevel | msgorig | msgaud)*) -->
+</elementRule>
+
+<tag name='msginfo'>
+  <ref role='common.attrib'/>
+  <ref role='msginfo.role.attrib'/>
+  <!-- %local.msginfo.attrib; -->
+</tag>
+
+<attPool role='msglevel.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='msglevel'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='smallcptr.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%smallcptr.char.mix;)* -->
+</elementRule>
+
+<tag name='msglevel'>
+  <ref role='common.attrib'/>
+  <ref role='msglevel.role.attrib'/>
+  <!-- %local.msglevel.attrib; -->
+</tag>
+
+<attPool role='msgorig.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='msgorig'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='smallcptr.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%smallcptr.char.mix;)* -->
+</elementRule>
+
+<tag name='msgorig'>
+  <ref role='common.attrib'/>
+  <ref role='msgorig.role.attrib'/>
+  <!-- %local.msgorig.attrib; -->
+</tag>
+
+<attPool role='msgaud.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='msgaud'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='para.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%para.char.mix;)* -->
+</elementRule>
+
+<tag name='msgaud'>
+  <ref role='common.attrib'/>
+  <ref role='msgaud.role.attrib'/>
+  <!-- %local.msgaud.attrib; -->
+</tag>
+
+<attPool role='msgexplan.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='msgexplan'>
+  <sequence>
+    <ref label='title' occurs='?'/>
+    <choice occurs='*'>
+      <hedgeRef label='component.mix'/>
+    </choice>
+  </sequence>
+  <!-- (title?, (%component.mix;)+) -->
+</elementRule>
+
+<tag name='msgexplan'>
+  <ref role='common.attrib'/>
+  <ref role='msgexplan.role.attrib'/>
+  <!-- %local.msgexplan.attrib; -->
+</tag>
+
+<!-- QandASet ........................ -->
+
+<attPool role='qandset.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='qandaset'>
+  <sequence>
+    <hedgeRef label='formalobject.title.content' occurs='?'/>
+    <hedgeRef label='qandaset.mix' occurs='*'/>
+    <choice>
+      <ref label='qandadiv' occurs='+'/>
+      <ref label='qandaentry' occurs='+'/>
+    </choice>
+  </sequence>
+  <!-- ((%formalobject.title.content;)?,
+                       (%qandaset.mix;)*,
+                        (qandadiv+|qandaentry+)) -->
+</elementRule>
+
+<tag name='qandaset'>
+  <ref role='common.attrib'/>
+  <ref role='qandset.role.attrib'/>
+  <!-- %local.qandset.attrib; -->
+
+  <attribute name='defaultlabel' type='string'>
+    <enumeration value='qanda'/>
+    <enumeration value='number'/>
+    <enumeration value='none'/>
+  </attribute>
+</tag>
+
+<attPool role='qandadiv.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='qandadiv'>
+  <sequence>
+    <hedgeRef label='formalobject.title.content' occurs='?'/>
+    <hedgeRef label='qandaset.mix' occurs='*'/>
+    <choice>
+      <ref label='qandadiv' occurs='+'/>
+      <ref label='qandaentry' occurs='+'/>
+    </choice>
+  </sequence>
+  <!-- ((%formalobject.title.content;)?,
+                       (%qandaset.mix;)*,
+                       (qandadiv+|qandaentry+)) -->
+</elementRule>
+
+<tag name='qandadiv'>
+  <ref role='common.attrib'/>
+  <ref role='qandadiv.role.attrib'/>
+  <!-- %local.qandadiv.attrib; -->
+</tag>
+
+<attPool role='qandaentry.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='qandaentry'>
+  <sequence>
+    <ref label='revhistory' occurs='?'/>
+    <ref label='question'/>
+    <ref label='answer' occurs='*'/>
+  </sequence>
+  <!-- (revhistory?, question, answer*) -->
+</elementRule>
+
+<tag name='qandaentry'>
+  <ref role='common.attrib'/>
+  <ref role='qandaentry.role.attrib'/>
+  <!-- %local.qandaentry.attrib; -->
+</tag>
+
+<attPool role='question.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='question'>
+  <sequence>
+    <ref label='label' occurs='?'/>
+    <hedgeRef label='qandaset.mix' occurs='+'/>
+  </sequence>
+  <!-- (label?, (%qandaset.mix;)+) -->
+</elementRule>
+
+<tag name='question'>
+  <ref role='common.attrib'/>
+  <ref role='question.role.attrib'/>
+  <!-- %local.question.attrib; -->
+</tag>
+
+<attPool role='answer.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='answer'>
+  <sequence>
+    <ref label='label' occurs='?'/>
+    <hedgeRef label='qandaset.mix' occurs='*'/>
+    <ref label='qandaentry' occurs='*'/>
+  </sequence>
+  <!-- (label?, (%qandaset.mix;)*, qandaentry*) -->
+</elementRule>
+
+<tag name='answer'>
+  <ref role='common.attrib'/>
+  <ref role='answer.role.attrib'/>
+  <!-- %local.answer.attrib; -->
+</tag>
+
+<attPool role='label.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='label'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='word.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%word.char.mix;)* -->
+</elementRule>
+
+<tag name='label'>
+  <ref role='common.attrib'/>
+  <ref role='label.role.attrib'/>
+  <!-- %local.label.attrib; -->
+</tag>
+
+<!-- Procedure ........................ -->
+
+<attPool role='procedure.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='procedure'>
+  <sequence>
+    <hedgeRef label='formalobject.title.content' occurs='?'/>
+    <hedgeRef label='component.mix' occurs='*'/>
+    <ref label='step' occurs='+'/>
+  </sequence>
+  <!-- ((%formalobject.title.content;)?,
+       (%component.mix;)*, step+) -->
+</elementRule>
+
+<tag name='procedure'>
+  <ref role='common.attrib'/>
+  <ref role='procedure.role.attrib'/>
+  <!-- %local.procedure.attrib; -->
+</tag>
+
+<attPool role='step.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='step'>
+  <sequence>
+    <ref label='title' occurs='?'/>
+    <choice>
+      <sequence>
+        <hedgeRef label='component.mix' occurs='+'/>
+        <sequence occurs='?'>
+          <ref label='substeps'/>
+          <hedgeRef label='component.mix' occurs='*'/>
+        </sequence>
+      </sequence>
+      <sequence>
+        <ref label='substeps'/>
+        <hedgeRef label='component.mix' occurs='*'/>
+      </sequence>
+    </choice>
+  </sequence>
+  <!-- (title?, (((%component.mix;)+, (substeps,
+               (%component.mix;)*)?) | (substeps, (%component.mix;)*))) -->
+</elementRule>
+
+<tag name='step'>
+  <ref role='common.attrib'/>
+  <ref role='step.role.attrib'/>
+  <!-- %local.step.attrib; -->
+
+  <!-- Performance: Whether the Step must be performed -->
+  <!-- not #REQUIRED! -->
+  <attribute name='performance' type='string'>
+    <enumeration value='optional'/>
+    <enumeration value='required'/>
+  </attribute>
+</tag>
+
+<attPool role='substeps.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='substeps'>
+  <sequence>
+    <ref label='step' occurs='+'/>
+  </sequence>
+  <!-- (step+) -->
+</elementRule>
+
+<tag name='substeps'>
+  <ref role='common.attrib'/>
+  <ref role='substeps.role.attrib'/>
+  <!-- %local.substeps.attrib; -->
+
+  <!-- Performance: whether entire set of substeps must be performed -->
+  <!-- not #REQUIRED! -->
+  <attribute name='performance' type='string'>
+    <enumeration value='optional'/>
+    <enumeration value='required'/>
+  </attribute>
+</tag>
+
+<!-- Sidebar .......................... -->
+
+<attPool role='sidebarinfo.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='sidebarinfo'>
+  <mixed>
+    <empty/>
+  </mixed>
+</elementRule>
+
+<tag name='sidebarinfo'>
+  <ref role='common.attrib'/>
+  <ref role='sidebarinfo.role.attrib'/>
+  <!-- %local.articleinfo.attrib; -->
+</tag>
+
+<attPool role='sidebar.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='sidebar'>
+  <sequence>
+    <ref label='sidebarinfo' occurs='?'/>
+    <hedgeRef label='formalobject.title.content' occurs='?'/>
+    <hedgeRef label='sidebar.mix' occurs='+'/>
+  </sequence>
+  <!-- (sidebarinfo?,
+                   (%formalobject.title.content;)?,
+                   (%sidebar.mix;)+) -->
+</elementRule>
+
+<tag name='sidebar'>
+  <ref role='common.attrib'/>
+  <ref role='sidebar.role.attrib'/>
+  <!-- %local.sidebar.attrib; -->
+</tag>
+
+<!-- ...................................................................... -->
+<!-- Paragraph-related elements ........................................... -->
+
+<attPool role='abstract.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='abstract'>
+  <sequence>
+    <ref label='title' occurs='?'/>
+    <hedgeRef label='para.class' occurs='+'/>
+  </sequence>
+  <!-- (title?, (%para.class;)+) -->
+</elementRule>
+
+<tag name='abstract'>
+  <ref role='common.attrib'/>
+  <ref role='abstract.role.attrib'/>
+  <!-- %local.abstract.attrib; -->
+</tag>
+
+<attPool role='authorblurb.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='authorblurb'>
+  <sequence>
+    <ref label='title' occurs='?'/>
+    <hedgeRef label='para.class' occurs='+'/>
+  </sequence>
+  <!-- (title?, (%para.class;)+) -->
+</elementRule>
+
+<tag name='authorblurb'>
+  <ref role='common.attrib'/>
+  <ref role='authorblurb.role.attrib'/>
+  <!-- %local.authorblurb.attrib; -->
+</tag>
+
+<attPool role='blockquote.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='blockquote'>
+  <sequence>
+    <ref label='title' occurs='?'/>
+    <ref label='attribution' occurs='?'/>
+    <hedgeRef label='component.mix' occurs='+'/>
+  </sequence>
+  <!-- (title?, attribution?, (%component.mix;)+) -->
+</elementRule>
+
+<tag name='blockquote'>
+  <ref role='common.attrib'/>
+  <ref role='blockquote.role.attrib'/>
+  <!-- %local.blockquote.attrib; -->
+</tag>
+
+<attPool role='attribution.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='attribution'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='para.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%para.char.mix;)* -->
+</elementRule>
+
+<tag name='attribution'>
+  <ref role='common.attrib'/>
+  <ref role='attribution.role.attrib'/>
+  <!-- %local.attribution.attrib; -->
+</tag>
+
+<attPool role='bridgehead.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='bridgehead'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='title.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%title.char.mix;)* -->
+</elementRule>
+
+<tag name='bridgehead'>
+  <ref role='common.attrib'/>
+  <ref role='bridgehead.role.attrib'/>
+  <!-- %local.bridgehead.attrib; -->
+
+  <!-- Renderas: Indicates the format in which the BridgeHead
+       should appear -->
+  <attribute name='renderas' type='string'>
+    <enumeration value='other'/>
+    <enumeration value='sect1'/>
+    <enumeration value='sect2'/>
+    <enumeration value='sect3'/>
+    <enumeration value='sect4'/>
+    <enumeration value='sect5'/>
+  </attribute>
+</tag>
+
+<attPool role='remark.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='remark'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='para.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%para.char.mix;)* -->
+</elementRule>
+
+<tag name='remark'>
+  <ref role='common.attrib'/>
+  <ref role='remark.role.attrib'/>
+  <!-- %local.remark.attrib; -->
+</tag>
+
+<attPool role='epigraph.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='epigraph'>
+  <sequence>
+    <ref label='attribution' occurs='?'/>
+    <hedgeRef label='para.class' occurs='+'/>
+  </sequence>
+  <!-- (attribution?, (%para.class;)+) -->
+</elementRule>
+
+<tag name='epigraph'>
+  <ref role='common.attrib'/>
+  <ref role='epigraph.role.attrib'/>
+  <!-- %local.epigraph.attrib; -->
+</tag>
+<!-- Attribution (defined above)-->
+
+<attPool role='footnote.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='footnote'>
+  <sequence>
+    <hedgeRef label='footnote.mix' occurs='+'/>
+  </sequence>
+  <!-- ((%footnote.mix;)+) -->
+</elementRule>
+
+<tag name='footnote'>
+  <ref role='label.attrib'/>
+  <ref role='common.attrib'/>
+  <ref role='footnote.role.attrib'/>
+  <!-- %local.footnote.attrib; -->
+</tag>
+
+<attPool role='highlights.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='highlights'>
+  <sequence>
+    <hedgeRef label='highlights.mix' occurs='+'/>
+  </sequence>
+  <!-- ((%highlights.mix;)+) -->
+</elementRule>
+
+<tag name='highlights'>
+  <ref role='common.attrib'/>
+  <ref role='highlights.role.attrib'/>
+  <!-- %local.highlights.attrib; -->
+</tag>
+
+<attPool role='formalpara.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='formalpara'>
+  <sequence>
+    <ref label='title'/>
+    <hedgeRef label='ndxterm.class' occurs='*'/>
+    <ref label='para'/>
+  </sequence>
+  <!-- (title, (%ndxterm.class;)*, para) -->
+</elementRule>
+
+<tag name='formalpara'>
+  <ref role='common.attrib'/>
+  <ref role='formalpara.role.attrib'/>
+  <!-- %local.formalpara.attrib; -->
+</tag>
+
+<attPool role='para.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='para'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='para.char.mix'/>
+      <hedgeRef label='para.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%para.char.mix; | %para.mix;)* -->
+</elementRule>
+
+<tag name='para'>
+  <ref role='common.attrib'/>
+  <ref role='para.role.attrib'/>
+  <!-- %local.para.attrib; -->
+</tag>
+
+<attPool role='simpara.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='simpara'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='para.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%para.char.mix;)* -->
+</elementRule>
+
+<tag name='simpara'>
+  <ref role='common.attrib'/>
+  <ref role='simpara.role.attrib'/>
+  <!-- %local.simpara.attrib; -->
+</tag>
+
+<attPool role='admon.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<hedgeRule label='admonitionType'>
+  <sequence>
+    <ref label='title'/>
+    <hedgeRef label='admon.mix' occurs='+'/>
+  </sequence>
+  <!-- (title?, (%admon.mix;)+) -->
+</hedgeRule>
+
+<elementRule role='important'>
+  <sequence>
+    <hedgeRef label='admonitionType'/>
+  </sequence>
+</elementRule>
+
+<tag name='important'>
+  <ref role='common.attrib'/>
+  <ref role='admon.role.attrib'/>
+  <!-- %local.admon.attrib; -->
+</tag>
+
+<elementRule role='warning'>
+  <sequence>
+    <hedgeRef label='admonitionType'/>
+  </sequence>
+</elementRule>
+
+<tag name='warning'>
+  <ref role='common.attrib'/>
+  <ref role='admon.role.attrib'/>
+  <!-- %local.admon.attrib; -->
+</tag>
+
+<elementRule role='caution'>
+  <sequence>
+    <hedgeRef label='admonitionType'/>
+  </sequence>
+</elementRule>
+
+<tag name='caution'>
+  <ref role='common.attrib'/>
+  <ref role='admon.role.attrib'/>
+  <!-- %local.admon.attrib; -->
+</tag>
+
+<elementRule role='note'>
+  <sequence>
+    <hedgeRef label='admonitionType'/>
+  </sequence>
+</elementRule>
+
+<tag name='note'>
+  <ref role='common.attrib'/>
+  <ref role='admon.role.attrib'/>
+  <!-- %local.admon.attrib; -->
+</tag>
+
+<elementRule role='tip'>
+  <sequence>
+    <hedgeRef label='admonitionType'/>
+  </sequence>
+</elementRule>
+
+<tag name='tip'>
+  <ref role='common.attrib'/>
+  <ref role='admon.role.attrib'/>
+  <!-- %local.admon.attrib; -->
+</tag>
+
+<!-- ...................................................................... -->
+<!-- Lists ................................................................ -->
+
+<!-- GlossList ........................ -->
+
+<attPool role='glosslist.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='glosslist'>
+  <sequence>
+    <ref label='glossentry' occurs='+'/>
+  </sequence>
+  <!-- (glossentry+) -->
+</elementRule>
+
+<tag name='glosslist'>
+  <ref role='common.attrib'/>
+  <ref role='glosslist.role.attrib'/>
+  <!-- %local.glosslist.attrib; -->
+</tag>
+
+<attPool role='glossentry.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='glossentry'>
+  <sequence>
+    <ref label='glossterm'/>
+    <ref label='acronym' occurs='?'/>
+    <ref label='abbrev' occurs='?'/>
+    <hedgeRef label='ndxterm.class' occurs='*'/>
+    <ref label='revhistory' occurs='?'/>
+    <choice>
+      <ref label='glosssee'/>
+      <ref label='glossdef' occurs='+'/>
+    </choice>
+  </sequence>
+  <!-- (glossterm, acronym?, abbrev?,
+                      (%ndxterm.class;)*,
+                      revhistory?, (glosssee|glossdef+)) -->
+</elementRule>
+
+<tag name='glossentry'>
+  <ref role='common.attrib'/>
+  <ref role='glossentry.role.attrib'/>
+  <!-- %local.glossentry.attrib; -->
+
+  <!-- SortAs: String by which the GlossEntry is to be sorted
+       (alphabetized) in lieu of its proper content -->
+  <attribute name='sortas' type='string'/>
+</tag>
+
+<!-- GlossTerm (defined in the Inlines section, below)-->
+<attPool role='glossdef.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='glossdef'>
+  <sequence>
+    <hedgeRef label='glossdef.mix' occurs='+'/>
+    <ref label='glossseealso' occurs='+'/>
+  </sequence>
+  <!-- ((%glossdef.mix;)+, glossseealso*) -->
+</elementRule>
+
+<tag name='glossdef'>
+  <ref role='common.attrib'/>
+  <ref role='glossdef.role.attrib'/>
+  <!-- %local.glossdef.attrib; -->
+
+  <!-- Subject: List of subjects; keywords for the definition -->
+  <attribute name='subject' type='string'/>
+</tag>
+
+<attPool role='glosssee.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='glosssee'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='para.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%para.char.mix;)* -->
+</elementRule>
+
+<tag name='glosssee'>
+  <ref role='common.attrib'/>
+  <ref role='glosssee.role.attrib'/>
+  <!-- %local.glosssee.attrib; -->
+
+  <!-- OtherTerm: Reference to the GlossEntry whose GlossTerm
+       should be displayed at the point of the GlossSee -->
+  <!-- FIXME: restrict to glossentry -->
+  <attribute name='otherterm' type='IDREF'/>
+</tag>
+
+<attPool role='glossseealso.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='glossseealso'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='para.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%para.char.mix;)* -->
+</elementRule>
+
+<tag name='glossseealso'>
+  <ref role='common.attrib'/>
+  <ref role='glossseealso.role.attrib'/>
+  <!-- %local.glossseealso.attrib; -->
+
+  <!-- OtherTerm: Reference to the GlossEntry whose GlossTerm
+       should be displayed at the point of the GlossSeeAlso -->
+  <!-- FIXME: restrict to glossentry -->
+  <attribute name='otherterm' type='IDREF'/>
+</tag>
+
+<!-- ItemizedList and OrderedList ..... -->
+
+<attPool role='itemizedlist.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='itemizedlist'>
+  <sequence>
+    <hedgeRef label='formalobject.title.content' occurs='?'/>
+    <ref label='listitem' occurs='+'/>
+  </sequence>
+  <!-- ((%formalobject.title.content;)?, listitem+) -->
+</elementRule>
+
+<tag name='itemizedlist'>
+  <!-- Mark: Keyword, e.g., bullet, dash, checkbox, none;
+       list of keywords and defaults are implementation specific -->
+  <ref role='mark.attrib'/>
+  <ref role='common.attrib'/>
+  <ref role='itemizedlist.role.attrib'/>
+  <!-- %local.itemizedlist.attrib; -->
+
+  <!-- Spacing: Whether the vertical space in the list should be
+       compressed -->
+  <attribute name='spacing' type='string'>
+    <enumeration value='normal'/>
+    <enumeration value='compact'/>
+  </attribute>
+</tag>
+
+<attPool role='orderedlist.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='orderedlist'>
+  <sequence>
+    <hedgeRef label='formalobject.title.content' occurs='?'/>
+    <ref label='listitem' occurs='+'/>
+  </sequence>
+  <!-- ((%formalobject.title.content;)?, listitem+) -->
+</elementRule>
+
+<tag name='orderedlist'>
+  <ref role='common.attrib'/>
+  <ref role='orderedlist.role.attrib'/>
+  <!-- %local.orderedlist.attrib; -->
+
+  <!-- Numeration: Style of ListItem numbered; default is expected
+       to be Arabic -->
+  <attribute name='numeration' type='NMTOKEN'>
+    <enumeration value='arabic'/>
+    <enumeration value='upperalpha'/>
+    <enumeration value='loweralpha'/>
+    <enumeration value='upperroman'/>
+    <enumeration value='lowerroman'/>
+  </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) -->
+  <attribute name='inheritnum' type='string'>
+    <enumeration value='inherit'/>
+    <enumeration value='ignore'/>
+  </attribute>
+
+  <!-- Continuation: Where list numbering begins afresh (Restarts,
+       the default) or continues that of the immediately preceding
+       list (Continues) -->
+  <attribute name='continuation' type='string'>
+    <enumeration value='continues'/>
+    <enumeration value='restarts'/>
+  </attribute>
+
+  <!-- Spacing: Whether the vertical space in the list should be
+       compressed -->
+  <attribute name='spacing' type='string'>
+    <enumeration value='normal'/>
+    <enumeration value='compact'/>
+  </attribute>
+</tag>
+
+<attPool role='listitem.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='listitem'>
+  <sequence>
+    <hedgeRef label='component.mix' occurs='+'/>
+  </sequence>
+  <!-- ((%component.mix;)+) -->
+</elementRule>
+
+<tag name='listitem'>
+  <ref role='common.attrib'/>
+  <ref role='listitem.role.attrib'/>
+  <!-- %local.listitem.attrib; -->
+
+  <!-- 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 -->
+  <attribute name='override' type='string'/>
+</tag>
+
+<!-- SegmentedList .................... -->
+<attPool role='segmentedlist.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='segmentedlist'>
+  <sequence>
+    <hedgeRef label='formalobject.title.content' occurs='?'/>
+    <ref label='segtitle'/>
+    <ref label='segtitle' occurs='*'/>
+    <ref label='seglistitem' occurs='+'/>
+  </sequence>
+  <!-- ((%formalobject.title.content;)?,
+                         segtitle, segtitle+,
+                         seglistitem+) -->
+</elementRule>
+
+<tag name='segmentedlist'>
+  <ref role='common.attrib'/>
+  <ref role='segmentedlist.role.attrib'/>
+  <!-- %local.segmentedlist.attrib; -->
+</tag>
+
+<attPool role='segtitle.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='segtitle'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='title.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%title.char.mix;)* -->
+</elementRule>
+
+<tag name='segtitle'>
+  <ref role='common.attrib'/>
+  <ref role='segtitle.role.attrib'/>
+  <!-- %local.segtitle.attrib; -->
+</tag>
+
+<attPool role='seglistitem.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='seglistitem'>
+  <sequence>
+    <ref label='seg'/>
+    <ref label='seg' occurs='*'/>
+  </sequence>
+  <!-- (seg, seg+) -->
+</elementRule>
+
+<tag name='seglistitem'>
+  <ref role='common.attrib'/>
+  <ref role='seglistitem.role.attrib'/>
+  <!-- %local.seglistitem.attrib; -->
+</tag>
+
+<attPool role='seg.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='seg'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='para.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%para.char.mix;)* -->
+</elementRule>
+
+<tag name='seg'>
+  <ref role='common.attrib'/>
+  <ref role='seg.role.attrib'/>
+  <!-- %local.seg.attrib; -->
+</tag>
+
+<!-- SimpleList ....................... -->
+
+<attPool role='simplelist.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='simplelist'>
+  <sequence>
+    <ref label='member' occurs='+'/>
+  </sequence>
+  <!-- (member+) -->
+</elementRule>
+
+<tag name='simplelist'>
+  <ref role='common.attrib'/>
+  <ref role='simplelist.role.attrib'/>
+  <!-- %local.simplelist.attrib; -->
+
+  <!-- Columns: The number of columns the array should contain -->
+  <attribute name='columns' type='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. -->
+  <attribute name='type' type='string'>
+    <enumeration value='inline'/>
+    <enumeration value='vert'/>
+    <enumeration value='horiz'/>
+  </attribute>
+</tag>
+
+<attPool role='member.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='member'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='para.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%para.char.mix;)* -->
+</elementRule>
+
+<tag name='member'>
+  <ref role='common.attrib'/>
+  <ref role='member.role.attrib'/>
+  <!-- %local.member.attrib; -->
+</tag>
+
+<!-- VariableList ..................... -->
+
+<attPool role='variablelist.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='variablelist'>
+  <sequence>
+    <hedgeRef label='formalobject.title.content' occurs='?'/>
+    <ref label='varlistentry'  occurs='+'/>
+  </sequence>
+  <!-- ((%formalobject.title.content;)?, varlistentry+) -->
+</elementRule>
+
+<tag name='variablelist'>
+  <ref role='common.attrib'/>
+  <ref role='variablelist.role.attrib'/>
+  <!-- %local.variablelist.attrib; -->
+
+  <!-- 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. -->
+  <attribute name='termlength' type='string'/>
+</tag>
+
+<attPool role='varlistentry.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='varlistentry'>
+  <sequence>
+    <ref label='term'  occurs='+'/>
+    <ref label='listitem'/>
+  </sequence>
+  <!-- (term+, listitem) -->
+</elementRule>
+
+<tag name='varlistentry'>
+  <ref role='common.attrib'/>
+  <ref role='varlistentry.role.attrib'/>
+  <!-- %local.varlistentry.attrib; -->
+</tag>
+
+<attPool role='term.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='term'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='para.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%para.char.mix;)* -->
+</elementRule>
+
+<tag name='term'>
+  <ref role='common.attrib'/>
+  <ref role='term.role.attrib'/>
+  <!-- %local.term.attrib; -->
+</tag>
+
+<!-- ListItem (defined above)-->
+
+<!-- CalloutList ...................... -->
+
+<attPool role='calloutlist.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='calloutlist'>
+  <sequence>
+    <hedgeRef label='formalobject.title.content' occurs='?'/>
+    <ref label='callout'  occurs='+'/>
+  </sequence>
+  <!-- ((%formalobject.title.content;)?, callout+) -->
+</elementRule>
+
+<tag name='calloutlist'>
+  <ref role='common.attrib'/>
+  <ref role='calloutlist.role.attrib'/>
+  <!-- %local.calloutlist.attrib; -->
+</tag>
+
+<attPool role='callout.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='callout'>
+  <sequence>
+    <hedgeRef label='component.mix' occurs='+'/>
+  </sequence>
+  <!-- ((%component.mix;)+) -->
+</elementRule>
+
+<tag name='callout'>
+  <ref role='common.attrib'/>
+  <ref role='callout.role.attrib'/>
+  <!-- %local.callout.attrib; -->
+
+  <!-- AreaRefs: IDs of one or more Areas or AreaSets described
+       by this Callout -->
+  <attribute name='arearefs' type='IDREFS'/>
+</tag>
+
+<!-- ...................................................................... -->
+<!-- Objects .............................................................. -->
+
+<!-- Examples etc. .................... -->
+
+<attPool role='example.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='example'>
+  <sequence>
+    <hedgeRef label='formalobject.title.content' occurs='?'/>
+    <hedgeRef label='example.mix'  occurs='+'/>
+  </sequence>
+  <!-- ((%formalobject.title.content;), (%example.mix;)+) -->
+</elementRule>
+
+<tag name='example'>
+  <ref role='label.attrib'/>
+  <ref role='width.attrib'/>
+  <ref role='common.attrib'/>
+  <ref role='example.role.attrib'/>
+  <!-- %local.example.attrib; -->
+</tag>
+
+<attPool role='informalexample.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='informalexample'>
+  <sequence>
+    <hedgeRef label='example.mix'  occurs='+'/>
+  </sequence>
+  <!-- ((%example.mix;)+) -->
+</elementRule>
+
+<tag name='informalexample'>
+  <ref role='width.attrib'/>
+  <ref role='common.attrib'/>
+  <ref role='informalexample.role.attrib'/>
+  <!-- %local.informalexample.attrib; -->
+</tag>
+
+<attPool role='programlistingco.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='programlistingco'>
+  <sequence>
+    <ref label='areaspec'/>
+    <ref label='programlisting'/>
+    <ref label='calloutlist' occurs='*'/>
+  </sequence>
+  <!-- (areaspec, programlisting, calloutlist*) -->
+</elementRule>
+
+<tag name='programlistingco'>
+  <ref role='common.attrib'/>
+  <ref role='programlistingco.role.attrib'/>
+  <!-- %local.programlistingco.attrib; -->
+</tag>
+<!-- CalloutList (defined above in Lists)-->
+
+<attPool role='areaspec.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='areaspec'>
+  <choice occurs='+'>
+    <ref label='area'/>
+    <ref label='areaset'/>
+  </choice>
+  <!-- ((area|areaset)+) -->
+</elementRule>
+
+<tag name='areaspec'>
+  <ref role='common.attrib'/>
+  <ref role='areaspec.role.attrib'/>
+  <!-- %local.areaspec.attrib; -->
+
+  <!-- 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) -->
+  <attribute name='units' type='string'>
+    <enumeration value='calspair'/>
+    <enumeration value='linecolumn'/>
+    <enumeration value='linerange'/>
+    <enumeration value='linecolumnpair'/>
+    <enumeration value='other'/>
+  </attribute>
+
+  <!-- OtherUnits: User-defined units -->
+  <attribute name='otherunits' type='NMTOKEN'/>
+</tag>
+
+<attPool role='area.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='area'>
+  <empty/>
+</elementRule>
+
+<tag name='area'>
+  <!-- bug number/symbol override or initialization -->
+  <!-- to any related information -->
+  <ref role='label.attrib'/>
+
+  <ref role='linkends.attrib'/>
+  <ref role='idreq.common.attrib'/>
+  <ref role='area.role.attrib'/>
+  <!-- %local.area.attrib; -->
+
+  <!-- Units: unit of measure in which coordinates in this
+       area are expressed; inherits from AreaSet and AreaSpec -->
+  <attribute name='units' type='string'>
+    <enumeration value='calspair'/>
+    <enumeration value='linecolumn'/>
+    <enumeration value='linerange'/>
+    <enumeration value='linecolumnpair'/>
+    <enumeration value='other'/>
+  </attribute>
+
+  <!-- OtherUnits: User-defined units -->
+  <attribute name='otherunits' type='NMTOKEN'/>
+
+  <attribute name='coords' type='string' required='true'/>
+</tag>
+
+<attPool role='areaset.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='areaset'>
+  <sequence>
+    <ref label='area' occurs='+'/>
+  </sequence>
+  <!-- (area+) -->
+</elementRule>
+
+<tag name='areaset'>
+  <!-- bug number/symbol override or initialization -->
+  <ref role='label.attrib'/>
+  <ref role='idreq.common.attrib'/>
+  <ref role='areaset.role.attrib'/>
+  <!-- %local.areaset.attrib; -->
+
+  <!-- Units: unit of measure in which coordinates in this
+       area are expressed; inherits from AreaSet and AreaSpec -->
+  <attribute name='units' type='string'>
+    <enumeration value='calspair'/>
+    <enumeration value='linecolumn'/>
+    <enumeration value='linerange'/>
+    <enumeration value='linecolumnpair'/>
+    <enumeration value='other'/>
+  </attribute>
+
+  <!-- OtherUnits: User-defined units -->
+  <attribute name='otherunits' type='NMTOKEN'/>
+
+  <attribute name='coords' type='string' required='true'/>
+</tag>
+
+<attPool role='programlisting.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='programlisting'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='para.char.mix'/>
+      <ref label='co'/>
+      <ref label='lineannotation'/>
+    </choice>
+  </mixed>
+  <!-- (%para.char.mix; | co | lineannotation)* -->
+</elementRule>
+
+<tag name='programlisting'>
+  <ref role='width.attrib'/>
+  <ref role='linespecific.attrib'/>
+  <ref role='common.attrib'/>
+  <ref role='programlisting.role.attrib'/>
+  <!-- %local.programlisting.attrib; -->
+</tag>
+
+<attPool role='literallayout.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='literallayout'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='para.char.mix'/>
+      <ref label='co'/>
+      <ref label='lineannotation'/>
+    </choice>
+  </mixed>
+</elementRule>
+
+<tag name='literallayout'>
+  <ref role='width.attrib'/>
+  <ref role='linespecific.attrib'/>
+  <ref role='common.attrib'/>
+  <ref role='literallayout.role.attrib'/>
+  <!-- %local.literallayout.attrib; -->
+
+  <!-- (%para.char.mix; | lineannotation | co)* -->
+  <attribute name='class' type='string'>
+    <enumeration value='monospaced'/>
+    <enumeration value='normal'/>
+  </attribute>
+</tag>
+
+<!-- LineAnnotation (defined in the Inlines section, below)-->
+
+<attPool role='screenco.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='screenco'>
+  <sequence>
+    <ref label='areaspec'/>
+    <ref label='screen'/>
+    <ref label='calloutlist' occurs='*'/>
+  </sequence>
+  <!-- (areaspec, screen, calloutlist*) -->
+</elementRule>
+
+<tag name='screenco'>
+  <ref role='common.attrib'/>
+  <ref role='screenco.role.attrib'/>
+  <!-- %local.screenco.attrib; -->
+</tag>
+
+<!-- AreaSpec (defined above)-->
+<!-- CalloutList (defined above in Lists)-->
+
+<attPool role='screen.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='screen'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='para.char.mix'/>
+      <ref label='co'/>
+      <ref label='lineannotation'/>
+    </choice>
+  </mixed>
+  <!-- (%para.char.mix; | co | lineannotation)* -->
+</elementRule>
+
+<tag name='screen'>
+  <ref role='width.attrib'/>
+  <ref role='linespecific.attrib'/>
+  <ref role='common.attrib'/>
+  <ref role='screen.role.attrib'/>
+  <!-- %local.screen.attrib; -->
+</tag>
+
+<attPool role='screenshot.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='screenshot'>
+  <sequence>
+    <ref label='screeninfo' occurs='?'/>
+    <choice>
+      <ref label='graphic'/>
+      <ref label='graphicco'/>
+      <ref label='mediaobject'/>
+      <ref label='mediaobjectco'/>
+    </choice>
+  </sequence>
+  <!-- (screeninfo?,
+                      (graphic|graphicco
+                      |mediaobject|mediaobjectco)) -->
+</elementRule>
+
+<tag name='screenshot'>
+  <ref role='common.attrib'/>
+  <ref role='screenshot.role.attrib'/>
+  <!-- %local.screenshot.attrib; -->
+</tag>
+
+<attPool role='screeninfo.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='screeninfo'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='para.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%para.char.mix;)* -->
+</elementRule>
+
+<tag name='screeninfo'>
+  <ref role='common.attrib'/>
+  <ref role='screeninfo.role.attrib'/>
+  <!-- %local.screeninfo.attrib; -->
+</tag>
+
+<!-- Figures etc. ..................... -->
+
+<attPool role='figure.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='figure'>
+  <sequence>
+    <hedgeRef label='formalobject.title.content' occurs='?'/>
+    <choice occurs='+'>
+      <hedgeRef label='figure.mix'/>
+      <hedgeRef label='link.char.class'/>
+    </choice>
+  </sequence>
+  <!-- ((%formalobject.title.content;), (%figure.mix; |
+               %link.char.class;)+) -->
+</elementRule>
+
+<tag name='figure'>
+  <ref role='label.attrib'/>
+  <ref role='common.attrib'/>
+  <ref role='figure.role.attrib'/>
+  <!-- %local.figure.attrib; -->
+
+  <!-- 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) -->
+  <attribute name='float' type='string'>
+    <enumeration value='0'/>
+    <enumeration value='1'/>
+  </attribute>
+  <attribute name='pgwide' type='string'>
+    <enumeration value='0'/>
+    <enumeration value='1'/>
+  </attribute>
+</tag>
+
+<attPool role='informalfigure.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='informalfigure'>
+  <choice occurs='+'>
+    <hedgeRef label='figure.mix'/>
+    <hedgeRef label='link.char.class'/>
+  </choice>
+  <!-- ((%figure.mix; | %link.char.class;)+) -->
+</elementRule>
+
+<tag name='informalfigure'>
+  <ref role='label.attrib'/>
+  <ref role='common.attrib'/>
+  <ref role='informalfigure.role.attrib'/>
+  <!-- %local.informalfigure.attrib; -->
+
+  <!-- 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) -->
+  <attribute name='float' type='string'>
+    <enumeration value='0'/>
+    <enumeration value='1'/>
+  </attribute>
+  <attribute name='pgwide' type='string'>
+    <enumeration value='0'/>
+    <enumeration value='1'/>
+  </attribute>
+</tag>
+
+<attPool role='graphicco.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='graphicco'>
+  <sequence>
+    <ref label='areaspec'/>
+    <ref label='graphic'/>
+    <ref label='calloutlist' occurs='*'/>
+  </sequence>
+  <!-- (areaspec, graphic, calloutlist*) -->
+</elementRule>
+
+<tag name='graphicco'>
+  <ref role='common.attrib'/>
+  <ref role='graphicco.role.attrib'/>
+  <!-- %local.graphicco.attrib; -->
+</tag>
+
+<!-- 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). -->
+
+<attPool role='graphic.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='graphic'>
+  <!-- EMPTY -->
+  <empty/>
+</elementRule>
+
+<tag name='graphic'>
+  <ref role='graphics.attrib'/>
+  <ref role='common.attrib'/>
+  <ref role='graphic.role.attrib'/>
+  <!-- %local.graphic.attrib; -->
+</tag>
+
+<attPool role='inlinegraphic.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='inlinegraphic'>
+  <!-- EMPTY -->
+  <empty/>
+</elementRule>
+
+<tag name='inlinegraphic'>
+  <ref role='graphics.attrib'/>
+  <ref role='common.attrib'/>
+  <ref role='inlinegraphic.role.attrib'/>
+  <!-- %local.inlinegraphic.attrib; -->
+</tag>
+
+<attPool role='mediaobject.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='mediaobject'>
+  <sequence>
+    <ref label='objectinfo' occurs='?'/>
+    <hedgeRef label='mediaobject.mix'/>
+    <choice occurs='*'>
+      <hedgeRef label='mediaobject.mix'/>
+      <ref label='textobject'/>
+    </choice>
+    <ref label='caption' occurs='?'/>
+  </sequence>
+  <!-- (objectinfo?,
+                           (%mediaobject.mix;),
+                          (%mediaobject.mix;|textobject)*,
+                          caption?) -->
+</elementRule>
+
+<tag name='mediaobject'>
+  <ref role='common.attrib'/>
+  <ref role='mediaobject.role.attrib'/>
+  <!-- %local.mediaobject.attrib; -->
+</tag>
+
+<attPool role='inlinemediaobject.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='inlinemediaobject'>
+  <sequence>
+    <ref label='objectinfo' occurs='?'/>
+    <hedgeRef label='mediaobject.mix'/>
+    <choice occurs='*'>
+      <hedgeRef label='mediaobject.mix'/>
+      <ref label='textobject'/>
+    </choice>
+  </sequence>
+  <!-- (objectinfo?,
+                                (%mediaobject.mix;),
+                                (%mediaobject.mix;|textobject)*) -->
+</elementRule>
+
+<tag name='inlinemediaobject'>
+  <ref role='common.attrib'/>
+  <ref role='inlinemediaobject.role.attrib'/>
+  <!-- %local.inlinemediaobject.attrib; -->
+</tag>
+
+<attPool role='videoobject.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='videoobject'>
+  <sequence>
+    <ref label='objectinfo' occurs='?'/>
+    <ref label='videodata'/>
+  </sequence>
+  <!-- (objectinfo?, videodata) -->
+</elementRule>
+
+<tag name='videoobject'>
+  <ref role='common.attrib'/>
+  <ref role='videoobject.role.attrib'/>
+  <!-- %local.videoobject.attrib; -->
+</tag>
+
+<attPool role='audioobject.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='audioobject'>
+  <sequence>
+    <ref label='objectinfo' occurs='?'/>
+    <ref label='audiodata'/>
+  </sequence>
+  <!-- (objectinfo?, audiodata) -->
+</elementRule>
+
+<tag name='audioobject'>
+  <ref role='common.attrib'/>
+  <ref role='audioobject.role.attrib'/>
+  <!-- %local.audioobject.attrib; -->
+</tag>
+
+<attPool role='imageobject.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='imageobject'>
+  <sequence>
+    <ref label='objectinfo' occurs='?'/>
+    <ref label='imagedata'/>
+  </sequence>
+  <!-- (objectinfo?, imagedata) -->
+</elementRule>
+
+<tag name='imageobject'>
+  <ref role='common.attrib'/>
+  <ref role='imageobject.role.attrib'/>
+  <!-- %local.imageobject.attrib; -->
+</tag>
+
+<attPool role='textobject.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='textobject'>
+  <sequence>
+    <ref label='objectinfo' occurs='?'/>
+    <choice>
+      <ref label='phrase'/>
+      <hedgeRef label='textobject.mix' occurs='+'/>
+    </choice>
+  </sequence>
+  <!-- (objectinfo?, (phrase|(%textobject.mix;)+)) -->
+</elementRule>
+
+<tag name='textobject'>
+  <ref role='common.attrib'/>
+  <ref role='textobject.role.attrib'/>
+  <!-- %local.textobject.attrib; -->
+</tag>
+
+<attPool role='objectinfo.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='objectinfo'>
+  <sequence>
+    <hedgeRef label='infoContentModel'/>
+  </sequence>
+</elementRule>
+
+<tag name='objectinfo'>
+  <ref role='common.attrib'/>
+  <ref role='objectinfo.role.attrib'/>
+  <!-- %local.objectinfo.attrib; -->
+</tag>
+
+<attPool role='objectdata.attrib'>
+  <!-- FIXME: -->
+  <!--EntityRef: Name of an external entity containing the content
+       of the object data-->
+  <!-- entityref       ENTITY          #IMPLIED -->
+  <!--FileRef: Filename, qualified by a pathname if desired,
+       designating the file containing the content of the object data-->
+  <attribute name='fileref' type='string'/>
+  <!--Format: Notation of the element content, if any-->
+  <attribute name='format' type='NMTOKEN'>
+    <enumeration value='BMP'/>
+    <enumeration value='CGM-CHAR'/>
+    <enumeration value='CGM-BINARY'/>
+    <enumeration value='CGM-CLEAR'/>
+    <enumeration value='DITROFF'/>
+    <enumeration value='DVI'/>
+    <enumeration value='EPS'/>
+    <enumeration value='EQN'/>
+    <enumeration value='FAX'/>
+    <enumeration value='GIF'/>
+    <enumeration value='GIF87a'/>
+    <enumeration value='GIF89a'/>
+    <enumeration value='JPG'/>
+    <enumeration value='JPEG'/>
+    <enumeration value='IGES'/>
+    <enumeration value='PCX'/>
+    <enumeration value='PIC'/>
+    <enumeration value='PNG'/>
+    <enumeration value='PS'/>
+    <enumeration value='SGML'/>
+    <enumeration value='TBL'/>
+    <enumeration value='TEX'/>
+    <enumeration value='TIFF'/>
+    <enumeration value='WMF'/>
+    <enumeration value='WPG'/>
+    <enumeration value='linespecific'/>
+  </attribute>
+  <!--SrcCredit: Information about the source of the image-->
+  <attribute name='srccredit' type='string'/>
+  <!-- %local.objectdata.attrib;-->
+</attPool>
+
+<attPool role='videodata.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='videodata'>
+  <!-- EMPTY -->
+  <empty/>
+</elementRule>
+
+<tag name='videodata'>
+  <ref role='common.attrib'/>
+  <ref role='objectdata.attrib'/>
+  <!-- %local.videodata.attrib; -->
+
+  <!--Width: Same as CALS reprowid (desired width)-->
+  <attribute name='width' type='string'/>
+
+  <!--Depth: Same as CALS reprodep (desired depth)-->
+  <attribute name='depth' type='string'/>
+
+  <!--Align: Same as CALS hplace with 'none' removed; #IMPLIED means
+      application-specific-->
+  <attribute name='align' type='NMTOKEN'>
+    <enumeration value='left'/>
+    <enumeration value='right'/>
+    <enumeration value='center'/>
+  </attribute>
+
+  <!--Scale: Conflation of CALS hscale and vscale-->
+  <attribute name='scale' type='string'/>
+
+  <!--Scalefit: Same as CALS scalefit-->
+  <attribute name='scalefit' type='string'>
+    <enumeration value='0'/>
+    <enumeration value='1'/>
+  </attribute>
+</tag>
+
+<attPool role='audiodata.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='audiodata'>
+  <!-- EMPTY -->
+  <empty/>
+</elementRule>
+
+<tag name='audiodata'>
+  <ref role='common.attrib'/>
+  <ref role='objectdata.attrib'/>
+  <!-- %local.audiodata.attrib; -->
+  <ref role='audiodata.role.attrib'/>
+</tag>
+
+<attPool role='imagedata.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='imagedata'>
+  <!-- EMPTY -->
+  <empty/>
+</elementRule>
+
+<tag name='imagedata'>
+  <ref role='common.attrib'/>
+  <ref role='objectdata.attrib'/>
+  <ref role='imagedata.role.attrib'/>
+  <!-- %local.videodata.attrib; -->
+
+  <!--Width: Same as CALS reprowid (desired width)-->
+  <attribute name='width' type='string'/>
+
+  <!--Depth: Same as CALS reprodep (desired depth)-->
+  <attribute name='depth' type='string'/>
+
+  <!--Align: Same as CALS hplace with 'none' removed; #IMPLIED means
+      application-specific-->
+  <attribute name='align' type='NMTOKEN'>
+    <enumeration value='left'/>
+    <enumeration value='right'/>
+    <enumeration value='center'/>
+  </attribute>
+
+  <!--Scale: Conflation of CALS hscale and vscale-->
+  <attribute name='scale' type='string'/>
+
+  <!--Scalefit: Same as CALS scalefit-->
+  <attribute name='scalefit' type='string'>
+    <enumeration value='0'/>
+    <enumeration value='1'/>
+  </attribute>
+</tag>
+
+<attPool role='caption.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='caption'>
+  <sequence>
+    <hedgeRef label='textobject.mix' occurs='*'/>
+  </sequence>
+</elementRule>
+
+<tag name='caption'>
+  <ref role='common.attrib'/>
+  <!-- %local.caption.attrib; -->
+  <ref role='caption.role.attrib'/>
+</tag>
+
+<attPool role='mediaobjectco.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='mediaobjectco'>
+  <sequence>
+    <ref label='objectinfo' occurs='?'/>
+    <ref label='imageobjectco'/>
+    <choice occurs='*'>
+      <ref label='imageobjectco'/>
+      <ref label='textobject'/>
+    </choice>
+  </sequence>
+  <!-- (objectinfo?, imageobjectco,
+                          (imageobjectco|textobject)*) -->
+</elementRule>
+
+<tag name='mediaobjectco'>
+  <ref role='common.attrib'/>
+  <ref role='mediaobjectco.role.attrib'/>
+  <!-- %local.mediaobjectco.attrib; -->
+</tag>
+
+<attPool role='imageobjectco.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='imageobjectco'>
+  <sequence>
+    <ref label='areaspec'/>
+    <ref label='imageobject'/>
+    <ref label='calloutlist' occurs='*'/>
+  </sequence>
+  <!-- (areaspec, imageobject, calloutlist*) -->
+</elementRule>
+
+<tag name='imageobjectco'>
+  <ref role='common.attrib'/>
+  <ref role='imageobjectco.role.attrib'/>
+  <!-- %local.imageobjectco.attrib; -->
+</tag>
+
+<!-- Equations ........................ -->
+
+<!-- This PE provides a mechanism for replacing equation content, -->
+<!-- perhaps adding a new or different model (e.g., MathML) -->
+
+<hedgeRule label='equation.content'>
+  <sequence>
+    <ref label='alt' occurs='?'/>
+    <choice>
+      <ref label='graphic' occurs='+'/>
+      <ref label='mediaobject' occurs='+'/>
+    </choice>
+  </sequence>
+  <!-- (alt?, (graphic+|mediaobject+)) -->
+</hedgeRule>
+
+<hedgeRule label='inlineequation.content'>
+  <sequence>
+    <ref label='alt' occurs='?'/>
+    <choice>
+      <ref label='graphic' occurs='+'/>
+      <ref label='inlinemediaobject' occurs='+'/>
+    </choice>
+  </sequence>
+  <!-- (alt?, (graphic+|inlinemediaobject+)) -->
+</hedgeRule>
+
+<attPool role='equation.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='equation'>
+  <sequence>
+    <hedgeRef label='formalobject.title.content' occurs='?'/>
+    <choice>
+      <ref label='informalequation'/>
+      <hedgeRef label='equation.content'/>
+    </choice>
+  </sequence>
+  <!-- ((%formalobject.title.content;)?, (informalequation |
+               %equation.content;)) -->
+</elementRule>
+
+<tag name='equation'>
+  <ref role='label.attrib'/>
+  <ref role='common.attrib'/>
+  <ref role='equation.role.attrib'/>
+  <!-- %local.equation.attrib; -->
+</tag>
+
+<attPool role='informalequation.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='informalequation'>
+  <sequence>
+    <hedgeRef label='equation.content'/>
+  </sequence>
+  <!-- (%equation.content;)  -->
+</elementRule>
+
+<tag name='informalequation'>
+  <ref role='common.attrib'/>
+  <ref role='informalequation.role.attrib'/>
+  <!-- %local.informalequation.attrib; -->
+</tag>
+
+<attPool role='inlineequation.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='inlineequation'>
+  <sequence>
+    <hedgeRef label='inlineequation.content'/>
+  </sequence>
+  <!-- (%inlineequation.content;) -->
+</elementRule>
+
+<tag name='inlineequation'>
+  <ref role='common.attrib'/>
+  <ref role='inlineequation.role.attrib'/>
+  <!-- %local.inlineequation.attrib; -->
+</tag>
+
+<attPool role='alt.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='alt'>
+  <!-- (#PCDATA) -->
+  <mixed>
+    <empty/>
+  </mixed>
+</elementRule>
+
+<tag name='alt'>
+  <ref role='common.attrib'/>
+  <ref role='alt.role.attrib'/>
+  <!-- %local.alt.attrib; -->
+</tag>
+
+<!-- ...................................................................... -->
+<!-- Synopses ............................................................. -->
+
+<!-- Synopsis ......................... -->
+
+<attPool role='synopsis.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='synopsis'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='para.char.mix'/>
+      <ref label='graphic'/>
+      <ref label='mediaobject'/>
+      <ref label='lineannotation'/>
+      <ref label='co'/>
+    </choice>
+  </mixed>
+  <!-- (%para.char.mix; | graphic | mediaobject | lineannotation | co)* -->
+</elementRule>
+
+<tag name='synopsis'>
+  <ref role='label.attrib'/>
+  <ref role='linespecific.attrib'/>
+  <ref role='common.attrib'/>
+  <ref role='synopsis.role.attrib'/>
+  <!-- %local.synopsis.attrib; -->
+</tag>
+
+<!-- LineAnnotation (defined in the Inlines section, below)-->
+
+<!-- CmdSynopsis ...................... -->
+
+<attPool role='cmdsynopsis.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='cmdsynopsis'>
+  <sequence>
+    <choice occurs='+'>
+      <ref label='command'/>
+      <ref label='arg'/>
+      <ref label='group'/>
+      <ref label='sbr'/>
+    </choice>
+    <ref label='synopfragment' occurs='*'/>
+  </sequence>
+  <!-- ((command | arg | group | sbr)+, synopfragment*) -->
+</elementRule>
+
+<tag name='cmdsynopsis'>
+  <ref role='label.attrib'/>
+  <ref role='common.attrib'/>
+  <ref role='cmdsynopsis.role.attrib'/>
+  <!-- %local.cmdsynopsis.attrib; -->
+
+  <!-- Sepchar: Character that should separate command and all
+       top-level arguments; alternate value might be e.g., &Delta; -->
+  <attribute name='sepchar' type='string'/>
+  <attribute name='cmdlength' type='integer'/>
+</tag>
+
+<attPool role='arg.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='arg'>
+  <mixed>
+    <choice occurs='*'>
+      <ref label='arg'/>
+      <ref label='group'/>
+      <ref label='option'/>
+      <ref label='synopfragmentref'/>
+      <ref label='replaceable'/>
+      <ref label='sbr'/>
+    </choice>
+  </mixed>
+  <!-- (#PCDATA
+               | arg
+               | group
+               | option
+               | synopfragmentref
+               | replaceable
+               | sbr)* -->
+</elementRule>
+
+<tag name='arg'>
+  <ref role='common.attrib'/>
+  <ref role='arg.role.attrib'/>
+  <!-- %local.arg.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) -->
+  <attribute name='choice' type='string'>
+    <enumeration value='opt'/>
+    <enumeration value='req'/>
+    <enumeration value='plain'/>
+  </attribute>
+
+  <!-- Rep: whether Arg is repeatable: Norepeat (e.g. arg without
+       ellipsis; the default), or Repeat (e.g. arg...) -->
+  <attribute name='rep' type='string'>
+    <enumeration value='norepeat'/>
+    <enumeration value='repeat'/>
+  </attribute>
+</tag>
+
+<attPool role='group.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='group'>
+  <choice occurs='+'>
+    <ref label='arg'/>
+    <ref label='group'/>
+    <ref label='option'/>
+    <ref label='synopfragmentref'/>
+    <ref label='replaceable'/>
+    <ref label='sbr'/>
+  </choice>
+  <!-- ((arg | group | option | synopfragmentref
+               | replaceable | sbr)+) -->
+</elementRule>
+
+<tag name='group'>
+  <ref role='common.attrib'/>
+  <ref role='group.role.attrib'/>
+  <!-- %local.group.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) -->
+  <attribute name='choice' type='string'>
+    <enumeration value='opt'/>
+    <enumeration value='req'/>
+    <enumeration value='plain'/>
+  </attribute>
+
+  <!-- Rep: whether Arg is repeatable: Norepeat (e.g. arg without
+       ellipsis; the default), or Repeat (e.g. arg...) -->
+  <attribute name='rep' type='string'>
+    <enumeration value='norepeat'/>
+    <enumeration value='repeat'/>
+  </attribute>
+</tag>
+
+<!-- Synopsis break -->
+<attPool role='sbr.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='sbr'>
+  <!-- EMPTY -->
+  <empty/>
+</elementRule>
+
+<tag name='sbr'>
+  <ref role='common.attrib'/>
+  <ref role='sbr.role.attrib'/>
+  <!-- %local.sbr.attrib; -->
+</tag>
+
+<attPool role='synopfragmentref.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='synopfragmentref'>
+  <!-- (#PCDATA) -->
+  <mixed>
+    <empty/>
+  </mixed>
+</elementRule>
+
+<tag name='synopfragmentref'>
+  <!-- to SynopFragment of complex synopsis
+       material for separate referencing -->
+  <ref role='linkendreq.attrib'/>
+  <ref role='common.attrib'/>
+  <ref role='synopfragmentref.role.attrib'/>
+  <!-- %local.synopfragmentref.attrib; -->
+</tag>
+
+<attPool role='synopfragment.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='synopfragment'>
+  <choice occurs='+'>
+    <ref label='arg'/>
+    <ref label='group'/>
+  </choice>
+  <!-- ((arg | group)+) -->
+</elementRule>
+
+<tag name='synopfragment'>
+  <ref role='idreq.common.attrib'/>
+  <ref role='synopfragment.role.attrib'/>
+  <!-- %local.synopfragment.attrib; -->
+</tag>
+
+<!-- Command (defined in the Inlines section, below)-->
+<!-- Option (defined in the Inlines section, below)-->
+<!-- Replaceable (defined in the Inlines section, below)-->
+
+<!-- FuncSynopsis ..................... -->
+
+<attPool role='funcsynopsis.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='funcsynopsis'>
+  <choice occurs='+'>
+    <ref label='funcsynopsisinfo'/>
+    <ref label='funcprototype'/>
+  </choice>
+  <!-- ((funcsynopsisinfo | funcprototype)+) -->
+</elementRule>
+
+<tag name='funcsynopsis'>
+  <ref role='label.attrib'/>
+  <ref role='common.attrib'/>
+  <ref role='funcsynopsis.role.attrib'/>
+  <!-- %local.funcsynopsis.attrib; -->
+</tag>
+
+<attPool role='funcsynopsisinfo.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='funcsynopsisinfo'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='cptr.char.mix'/>
+      <ref label='lineannotation'/>
+    </choice>
+  </mixed>
+  <!-- (%cptr.char.mix; | lineannotation)* -->
+</elementRule>
+
+<tag name='funcsynopsisinfo'>
+  <ref role='linespecific.attrib'/>
+  <ref role='common.attrib'/>
+  <ref role='funcsynopsisinfo.role.attrib'/>
+  <!-- %local.funcsynopsisinfo.attrib; -->
+</tag>
+
+<attPool role='funcprototype.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='funcprototype'>
+  <sequence>
+    <ref label='funcdef'/>
+    <choice occurs='+'>
+      <ref label='void'/>
+      <ref label='varargs'/>
+      <ref label='paramdef'/>
+    </choice>
+  </sequence>
+  <!-- (funcdef, (void | varargs | paramdef+)) -->
+</elementRule>
+
+<tag name='funcprototype'>
+  <ref role='common.attrib'/>
+  <ref role='funcprototype.role.attrib'/>
+  <!-- %local.funcprototype.attrib; -->
+</tag>
+
+<attPool role='funcdef.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='funcdef'>
+  <mixed>
+    <choice occurs='*'>
+      <ref label='replaceable'/>
+      <ref label='function'/>
+    </choice>
+  </mixed>
+  <!-- (#PCDATA
+               | replaceable
+               | function)* -->
+</elementRule>
+
+<tag name='funcdef'>
+  <ref role='common.attrib'/>
+  <ref role='funcdef.role.attrib'/>
+  <!-- %local.funcdef.attrib; -->
+</tag>
+
+<attPool role='void.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='void'>
+  <!-- EMPTY -->
+  <empty/>
+</elementRule>
+
+<tag name='void'>
+  <ref role='common.attrib'/>
+  <ref role='void.role.attrib'/>
+  <!-- %local.void.attrib; -->
+</tag>
+
+<attPool role='varargs.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='varargs'>
+  <!-- EMPTY -->
+  <empty/>
+</elementRule>
+
+<tag name='varargs'>
+  <ref role='common.attrib'/>
+  <ref role='varargs.role.attrib'/>
+  <!-- %local.varargs.attrib; -->
+</tag>
+
+<!-- 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. -->
+
+<attPool role='paramdef.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='paramdef'>
+  <mixed>
+    <choice occurs='*'>
+      <ref label='replaceable'/>
+      <ref label='parameter'/>
+      <ref label='funcparams'/>
+    </choice>
+  </mixed>
+  <!-- (#PCDATA
+               | replaceable
+               | parameter
+               | funcparams)* -->
+</elementRule>
+
+<tag name='paramdef'>
+  <ref role='common.attrib'/>
+  <ref role='paramdef.role.attrib'/>
+  <!-- %local.paramdef.attrib; -->
+</tag>
+
+<attPool role='funcparams.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='funcparams'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='cptr.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%cptr.char.mix;)* -->
+</elementRule>
+
+<tag name='funcparams'>
+  <ref role='common.attrib'/>
+  <ref role='funcparams.role.attrib'/>
+  <!-- %local.funcparams.attrib; -->
+</tag>
+
+<!-- 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 ..................... -->
+
+<attPool role='classsynopsis.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='classsynopsis'>
+  <sequence>
+    <choice occurs='+'>
+      <ref label='ooclass'/>
+      <ref label='oointerface'/>
+      <ref label='ooexception'/>
+    </choice>
+    <choice occurs='*'>
+      <ref label='classsynopsisinfo'/>
+      <ref label='fieldsynopsis'/>
+      <hedgeRef label='method.synop.class'/>
+    </choice>
+  </sequence>
+  <!-- ((ooclass|oointerface|ooexception)+,
+                         (classsynopsisinfo
+                          |fieldsynopsis|%method.synop.class;)*) -->
+</elementRule>
+
+<tag name='classsynopsis'>
+  <ref role='common.attrib'/>
+  <ref role='classsynopsis.role.attrib'/>
+  <!-- %local.classsynopsis.attrib; -->
+  <attribute name='language' type='string'/>
+  <attribute name='class' type='string'>
+    <enumeration value='class'/>
+    <enumeration value='interface'/>
+  </attribute>
+</tag>
+
+<attPool role='classsynopsisinfo.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='classsynopsisinfo'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='cptr.char.mix'/>
+      <ref label='lineannotation'/>
+    </choice>
+  </mixed>
+  <!-- (%cptr.char.mix; | lineannotation)* -->
+</elementRule>
+
+<tag name='classsynopsisinfo'>
+  <ref role='linespecific.attrib'/>
+  <ref role='common.attrib'/>
+  <ref role='classsynopsisinfo.role.attrib'/>
+  <!-- %local.classsynopsisinfo.attrib; -->
+</tag>
+
+<attPool role='ooclass.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='ooclass'>
+  <sequence>
+    <ref label='modifier' occurs='*'/>
+    <ref label='classname'/>
+  </sequence>
+  <!-- (modifier*, classname) -->
+</elementRule>
+
+<tag name='ooclass'>
+  <ref role='common.attrib'/>
+  <ref role='ooclass.role.attrib'/>
+  <!-- %local.ooclass.attrib; -->
+</tag>
+
+<attPool role='oointerface.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='oointerface'>
+  <sequence>
+    <ref label='modifier' occurs='*'/>
+    <ref label='interfacename'/>
+  </sequence>
+  <!-- (modifier*, interfacename) -->
+</elementRule>
+
+<tag name='oointerface'>
+  <ref role='common.attrib'/>
+  <ref role='oointerface.role.attrib'/>
+  <!-- %local.oointerface.attrib; -->
+</tag>
+
+<attPool role='ooexception.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='ooexception'>
+  <sequence>
+    <ref label='modifier' occurs='*'/>
+    <ref label='exceptionname'/>
+  </sequence>
+  <!-- (modifier*, exceptionname) -->
+</elementRule>
+
+<tag name='ooexception'>
+  <ref role='common.attrib'/>
+  <ref role='ooexception.role.attrib'/>
+  <!-- %local.ooexception.attrib; -->
+</tag>
+
+<attPool role='modifier.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='modifier'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='smallcptr.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%smallcptr.char.mix;)* -->
+</elementRule>
+
+<tag name='modifier'>
+  <ref role='common.attrib'/>
+  <ref role='modifier.role.attrib'/>
+  <!-- %local.modifier.attrib; -->
+</tag>
+
+<attPool role='interfacename.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='interfacename'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='smallcptr.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%smallcptr.char.mix;)* -->
+</elementRule>
+
+<tag name='interfacename'>
+  <ref role='common.attrib'/>
+  <ref role='interfacename.role.attrib'/>
+  <!-- %local.interfacename.attrib; -->
+</tag>
+
+<attPool role='exceptionname.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='exceptionname'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='smallcptr.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%smallcptr.char.mix;)* -->
+</elementRule>
+
+<tag name='exceptionname'>
+  <ref role='common.attrib'/>
+  <ref role='exceptionname.role.attrib'/>
+  <!-- %local.exceptionname.attrib; -->
+</tag>
+
+<attPool role='fieldsynopsis.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='fieldsynopsis'>
+  <sequence>
+    <ref label='modifier' occurs='*'/>
+    <ref label='type' occurs='?'/>
+    <ref label='varname'/>
+    <ref label='initializer' occurs='?'/>
+  </sequence>
+  <!-- (modifier*, type?, varname, initializer?) -->
+</elementRule>
+
+<tag name='fieldsynopsis'>
+  <ref role='common.attrib'/>
+  <ref role='fieldsynopsis.role.attrib'/>
+  <!-- %local.fieldsynopsis.attrib; -->
+</tag>
+
+<attPool role='initializer.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='initializer'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='smallcptr.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%smallcptr.char.mix;)* -->
+</elementRule>
+
+<tag name='initializer'>
+  <ref role='common.attrib'/>
+  <ref role='initializer.role.attrib'/>
+  <!-- %local.initializer.attrib; -->
+</tag>
+
+<attPool role='constructorsynopsis.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='constructorsynopsis'>
+  <sequence>
+    <ref label='modifier' occurs='*'/>
+    <ref label='methodname' occurs='?'/>
+    <choice>
+      <ref label='methodparam' occurs='+'/>
+      <ref label='void'/>
+    </choice>
+    <ref label='exceptionname' occurs='*'/>
+  </sequence>
+  <!-- (modifier*,
+                               methodname?,
+                               (methodparam+|void),
+                               exceptionname*) -->
+</elementRule>
+
+<tag name='constructorsynopsis'>
+  <ref role='common.attrib'/>
+  <ref role='constructorsynopsis.role.attrib'/>
+  <!-- %local.constructorsynopsis.attrib; -->
+</tag>
+
+<attPool role='destructorsynopsis.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='destructorsynopsis'>
+  <sequence>
+    <ref label='modifier' occurs='*'/>
+    <ref label='methodname' occurs='?'/>
+    <choice>
+      <ref label='methodparam' occurs='+'/>
+      <ref label='void'/>
+    </choice>
+    <ref label='exceptionname' occurs='*'/>
+  </sequence>
+  <!-- (modifier*,
+                              methodname?,
+                              (methodparam+|void),
+                              exceptionname*) -->
+</elementRule>
+
+<tag name='destructorsynopsis'>
+  <ref role='common.attrib'/>
+  <ref role='destructorsynopsis.role.attrib'/>
+  <!-- %local.destructorsynopsis.attrib; -->
+</tag>
+
+<attPool role='methodsynopsis.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='methodsynopsis'>
+  <sequence>
+    <ref label='modifier' occurs='*'/>
+    <choice occurs='?'>
+      <ref label='type'/>
+      <ref label='void'/>
+    </choice>
+    <ref label='methodname' occurs='?'/>
+    <choice>
+      <ref label='methodparam' occurs='+'/>
+      <ref label='void'/>
+    </choice>
+    <ref label='exceptionname' occurs='*'/>
+    <ref label='modifier' occurs='*'/>
+  </sequence>
+  <!-- (modifier*,
+                          (type|void)?,
+                          methodname,
+                          (methodparam+|void),
+                          exceptionname*,
+                          modifier*) -->
+</elementRule>
+
+<tag name='methodsynopsis'>
+  <ref role='common.attrib'/>
+  <ref role='methodsynopsis.role.attrib'/>
+  <!-- %local.methodsynopsis.attrib; -->
+</tag>
+
+<attPool role='methodname.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='methodname'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='smallcptr.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%smallcptr.char.mix;)* -->
+</elementRule>
+
+<tag name='methodname'>
+  <ref role='common.attrib'/>
+  <ref role='methodname.role.attrib'/>
+  <!-- %local.methodname.attrib; -->
+</tag>
+
+<attPool role='methodparam.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='methodparam'>
+  <sequence>
+    <element name='modifier' occurs='*'/>
+    <element name='type' occurs='?'/>
+    <choice>
+      <sequence>
+        <element name='parameter'/>
+        <element name='initializer' occurs='?'/>
+      </sequence>
+      <element name='funcparams'/>
+    </choice>
+    <element name='modifier' occurs='*'/>
+  </sequence>
+  <!-- (modifier*,
+                       type?,
+                       ((parameter,initializer?)|funcparams),
+                       modifier*) -->
+</elementRule>
+
+<tag name='methodparam'>
+  <ref role='common.attrib'/>
+  <ref role='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) -->
+  <attribute name='choice' type='string'>
+    <enumeration value='opt'/>
+    <enumeration value='req'/>
+    <enumeration value='plain'/>
+  </attribute>
+
+  <!-- Rep: whether Arg is repeatable: Norepeat (e.g. arg without
+       ellipsis; the default), or Repeat (e.g. arg...) -->
+  <attribute name='rep' type='string'>
+    <enumeration value='norepeat'/>
+    <enumeration value='repeat'/>
+  </attribute>
+</tag>
+
+<!-- ...................................................................... -->
+<!-- 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 ............................ -->
+
+<attPool role='ackno.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='ackno'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='docinfo.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%docinfo.char.mix;)* -->
+</elementRule>
+
+<tag name='ackno'>
+  <ref role='common.attrib'/>
+  <ref role='ackno.role.attrib'/>
+  <!-- %local.ackno.attrib; -->
+</tag>
+
+<!-- Address .......................... -->
+
+<attPool role='address.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='address'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='person.ident.mix'/>
+      <ref label='street'/>
+      <ref label='pob'/>
+      <ref label='postcode'/>
+      <ref label='city'/>
+      <ref label='state'/>
+      <ref label='country'/>
+      <ref label='phone'/>
+      <ref label='fax'/>
+      <ref label='email'/>
+      <ref label='otheraddr'/>
+    </choice>
+  </mixed>
+  <!-- (#PCDATA|%person.ident.mix;
+               |street|pob|postcode|city|state|country|phone
+               |fax|email|otheraddr)* -->
+</elementRule>
+
+<tag name='address'>
+  <ref role='linespecific.attrib'/>
+  <ref role='common.attrib'/>
+  <ref role='address.role.attrib'/>
+  <!-- %local.address.attrib; -->
+</tag>
+
+<attPool role='street.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='street'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='docinfo.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%docinfo.char.mix;)* -->
+</elementRule>
+
+<tag name='street'>
+  <ref role='common.attrib'/>
+  <ref role='street.role.attrib'/>
+  <!-- %local.street.attrib; -->
+</tag>
+
+<attPool role='pob.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='pob'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='docinfo.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%docinfo.char.mix;)* -->
+</elementRule>
+
+<tag name='pob'>
+  <ref role='common.attrib'/>
+  <ref role='pob.role.attrib'/>
+  <!-- %local.pob.attrib; -->
+</tag>
+
+<attPool role='postcode.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='postcode'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='docinfo.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%docinfo.char.mix;)* -->
+</elementRule>
+
+<tag name='postcode'>
+  <ref role='common.attrib'/>
+  <ref role='postcode.role.attrib'/>
+  <!-- %local.postcode.attrib; -->
+</tag>
+
+<attPool role='city.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='city'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='docinfo.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%docinfo.char.mix;)* -->
+</elementRule>
+
+<tag name='city'>
+  <ref role='common.attrib'/>
+  <ref role='city.role.attrib'/>
+  <!-- %local.city.attrib; -->
+</tag>
+
+<attPool role='state.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='state'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='docinfo.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%docinfo.char.mix;)* -->
+</elementRule>
+
+<tag name='state'>
+  <ref role='common.attrib'/>
+  <ref role='state.role.attrib'/>
+  <!-- %local.state.attrib; -->
+</tag>
+
+<attPool role='country.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='country'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='docinfo.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%docinfo.char.mix;)* -->
+</elementRule>
+
+<tag name='country'>
+  <ref role='common.attrib'/>
+  <ref role='country.role.attrib'/>
+  <!-- %local.country.attrib; -->
+</tag>
+
+<attPool role='phone.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='phone'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='docinfo.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%docinfo.char.mix;)* -->
+</elementRule>
+
+<tag name='phone'>
+  <ref role='common.attrib'/>
+  <ref role='phone.role.attrib'/>
+  <!-- %local.phone.attrib; -->
+</tag>
+
+<attPool role='fax.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='fax'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='docinfo.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%docinfo.char.mix;)* -->
+</elementRule>
+
+<tag name='fax'>
+  <ref role='common.attrib'/>
+  <ref role='fax.role.attrib'/>
+  <!-- %local.fax.attrib; -->
+</tag>
+
+<!-- Email (defined in the Inlines section, below)-->
+
+<attPool role='otheraddr.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='otheraddr'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='docinfo.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%docinfo.char.mix;)* -->
+</elementRule>
+
+<tag name='otheraddr'>
+  <ref role='common.attrib'/>
+  <ref role='otheraddr.role.attrib'/>
+  <!-- %local.otheraddr.attrib; -->
+</tag>
+
+<!-- Affiliation ...................... -->
+
+<attPool role='affiliation.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='affiliation'>
+  <sequence>
+    <ref label='shortaffil' occurs='?'/>
+    <ref label='jobtitle' occurs='*'/>
+    <ref label='orgname' occurs='?'/>
+    <ref label='orgdiv' occurs='*'/>
+    <ref label='address' occurs='*'/>
+  </sequence>
+  <!-- (shortaffil?, jobtitle*, orgname?, orgdiv*,
+               address*) -->
+</elementRule>
+
+<tag name='affiliation'>
+  <ref role='common.attrib'/>
+  <ref role='affiliation.role.attrib'/>
+  <!-- %local.affiliation.attrib; -->
+</tag>
+
+<attPool role='shortaffil.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='shortaffil'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='docinfo.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%docinfo.char.mix;)* -->
+</elementRule>
+
+<tag name='shortaffil'>
+  <ref role='common.attrib'/>
+  <ref role='shortaffil.role.attrib'/>
+  <!-- %local.shortaffil.attrib; -->
+</tag>
+
+<attPool role='jobtitle.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='jobtitle'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='docinfo.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%docinfo.char.mix;)* -->
+</elementRule>
+
+<tag name='jobtitle'>
+  <ref role='common.attrib'/>
+  <ref role='jobtitle.role.attrib'/>
+  <!-- %local.jobtitle.attrib; -->
+</tag>
+
+<!-- OrgName (defined elsewhere in this section)-->
+
+<attPool role='orgdiv.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='orgdiv'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='docinfo.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%docinfo.char.mix;)* -->
+</elementRule>
+
+<tag name='orgdiv'>
+  <ref role='common.attrib'/>
+  <ref role='orgdiv.role.attrib'/>
+  <!-- %local.orgdiv.attrib; -->
+</tag>
+
+<!-- Address (defined elsewhere in this section)-->
+
+<!-- ArtPageNums ...................... -->
+
+<attPool role='artpagenums.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='artpagenums'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='docinfo.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%docinfo.char.mix;)* -->
+</elementRule>
+
+<tag name='artpagenums'>
+  <ref role='common.attrib'/>
+  <ref role='artpagenums.role.attrib'/>
+  <!-- %local.artpagenums.attrib; -->
+</tag>
+
+<!-- Author ........................... -->
+
+<attPool role='author.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='author'>
+  <sequence occurs='+'>
+    <hedgeRef label='person.ident.mix'/>
+  </sequence>
+  <!-- ((%person.ident.mix;)+) -->
+</elementRule>
+
+<tag name='author'>
+  <ref role='common.attrib'/>
+  <ref role='author.role.attrib'/>
+  <!-- %local.author.attrib; -->
+</tag>
+
+<!--(see "Personal identity elements" for %person.ident.mix;)-->
+
+<!-- AuthorGroup ...................... -->
+
+<attPool role='authorgroup.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='authorgroup'>
+  <choice occurs='+'>
+    <ref label='author'/>
+    <ref label='editor'/>
+    <ref label='collab'/>
+    <ref label='corpauthor'/>
+    <ref label='othercredit'/>
+  </choice>
+  <!-- ((author|editor|collab|corpauthor|othercredit)+) -->
+</elementRule>
+
+<tag name='authorgroup'>
+  <ref role='common.attrib'/>
+  <ref role='authorgroup.role.attrib'/>
+  <!-- %local.authorgroup.attrib; -->
+</tag>
+
+<!-- Author (defined elsewhere in this section)-->
+<!-- Editor (defined elsewhere in this section)-->
+
+<attPool role='collab.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='collab'>
+  <sequence>
+    <ref label='collabname'/>
+    <ref label='affiliation' occurs='*'/>
+  </sequence>
+  <!-- (collabname, affiliation*) -->
+</elementRule>
+
+<tag name='collab'>
+  <ref role='common.attrib'/>
+  <ref role='collab.role.attrib'/>
+  <!-- %local.collab.attrib; -->
+</tag>
+
+<attPool role='collabname.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='collabname'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='docinfo.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%docinfo.char.mix;)* -->
+</elementRule>
+
+<tag name='collabname'>
+  <ref role='common.attrib'/>
+  <ref role='collabname.role.attrib'/>
+  <!-- %local.collabname.attrib; -->
+</tag>
+
+<!-- Affiliation (defined elsewhere in this section)-->
+
+<!-- CorpAuthor (defined elsewhere in this section)-->
+<!-- OtherCredit (defined elsewhere in this section)-->
+
+<!-- AuthorInitials ................... -->
+
+<attPool role='authorinitials.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='authorinitials'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='docinfo.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%docinfo.char.mix;)* -->
+</elementRule>
+
+<tag name='authorinitials'>
+  <ref role='common.attrib'/>
+  <ref role='authorinitials.role.attrib'/>
+  <!-- %local.authorinitials.attrib; -->
+</tag>
+
+<!-- ConfGroup ........................ -->
+
+<attPool role='confgroup.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='confgroup'>
+  <choice occurs='*'>
+    <ref label='confdates'/>
+    <ref label='conftitle'/>
+    <ref label='confnum'/>
+    <ref label='address'/>
+    <ref label='confsponsor'/>
+  </choice>
+  <!-- ((confdates|conftitle|confnum|address|confsponsor)*) -->
+</elementRule>
+
+<tag name='confgroup'>
+  <ref role='common.attrib'/>
+  <ref role='confgroup.role.attrib'/>
+  <!-- %local.confgroup.attrib; -->
+</tag>
+
+<attPool role='confdates.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='confdates'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='docinfo.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%docinfo.char.mix;)* -->
+</elementRule>
+
+<tag name='confdates'>
+  <ref role='common.attrib'/>
+  <ref role='confdates.role.attrib'/>
+  <!-- %local.confdates.attrib; -->
+</tag>
+
+<attPool role='conftitle.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='conftitle'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='docinfo.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%docinfo.char.mix;)* -->
+</elementRule>
+
+<tag name='conftitle'>
+  <ref role='common.attrib'/>
+  <ref role='conftitle.role.attrib'/>
+  <!-- %local.conftitle.attrib; -->
+</tag>
+
+<attPool role='confnum.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='confnum'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='docinfo.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%docinfo.char.mix;)* -->
+</elementRule>
+
+<tag name='confnum'>
+  <ref role='common.attrib'/>
+  <ref role='confnum.role.attrib'/>
+  <!-- %local.confnum.attrib; -->
+</tag>
+
+<!-- Address (defined elsewhere in this section)-->
+
+<attPool role='confsponsor.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='confsponsor'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='docinfo.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%docinfo.char.mix;)* -->
+</elementRule>
+
+<tag name='confsponsor'>
+  <ref role='common.attrib'/>
+  <ref role='confsponsor.role.attrib'/>
+  <!-- %local.confsponsor.attrib; -->
+</tag>
+
+<!-- ContractNum ...................... -->
+
+<attPool role='contractnum.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='contractnum'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='docinfo.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%docinfo.char.mix;)* -->
+</elementRule>
+
+<tag name='contractnum'>
+  <ref role='common.attrib'/>
+  <ref role='contractnum.role.attrib'/>
+  <!-- %local.contractnum.attrib; -->
+</tag>
+
+<!-- ContractSponsor .................. -->
+
+<attPool role='contractsponsor.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='contractsponsor'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='docinfo.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%docinfo.char.mix;)* -->
+</elementRule>
+
+<tag name='contractsponsor'>
+  <ref role='common.attrib'/>
+  <ref role='contractsponsor.role.attrib'/>
+  <!-- %local.contractsponsor.attrib; -->
+</tag>
+
+<!-- Copyright ........................ -->
+
+<attPool role='copyright.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='copyright'>
+  <sequence>
+    <ref label='year' occurs='+'/>
+    <ref label='holder' occurs='*'/>
+  </sequence>
+  <!-- (year+, holder*) -->
+</elementRule>
+
+<tag name='copyright'>
+  <ref role='common.attrib'/>
+  <ref role='copyright.role.attrib'/>
+  <!-- %local.copyright.attrib; -->
+</tag>
+
+<attPool role='year.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='year'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='docinfo.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%docinfo.char.mix;)* -->
+</elementRule>
+
+<tag name='year'>
+  <ref role='common.attrib'/>
+  <ref role='year.role.attrib'/>
+  <!-- %local.year.attrib; -->
+</tag>
+
+<attPool role='holder.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='holder'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='docinfo.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%docinfo.char.mix;)* -->
+</elementRule>
+
+<tag name='holder'>
+  <ref role='common.attrib'/>
+  <ref role='holder.role.attrib'/>
+  <!-- %local.holder.attrib; -->
+</tag>
+
+<!-- CorpAuthor ....................... -->
+
+<attPool role='corpauthor.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='corpauthor'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='docinfo.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%docinfo.char.mix;)* -->
+</elementRule>
+
+<tag name='corpauthor'>
+  <ref role='common.attrib'/>
+  <ref role='corpauthor.role.attrib'/>
+  <!-- %local.corpauthor.attrib; -->
+</tag>
+
+<!-- CorpName ......................... -->
+
+<attPool role='corpname.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='corpname'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='docinfo.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%docinfo.char.mix;)* -->
+</elementRule>
+
+<tag name='corpname'>
+  <ref role='common.attrib'/>
+  <ref role='corpname.role.attrib'/>
+  <!-- %local.corpname.attrib; -->
+</tag>
+
+<!-- Date ............................. -->
+
+<attPool role='date.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='date'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='docinfo.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%docinfo.char.mix;)* -->
+</elementRule>
+
+<tag name='date'>
+  <ref role='common.attrib'/>
+  <ref role='date.role.attrib'/>
+  <!-- %local.date.attrib; -->
+</tag>
+
+<!-- Edition .......................... -->
+
+<attPool role='edition.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='edition'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='docinfo.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%docinfo.char.mix;)* -->
+</elementRule>
+
+<tag name='edition'>
+  <ref role='common.attrib'/>
+  <ref role='edition.role.attrib'/>
+  <!-- %local.edition.attrib; -->
+</tag>
+
+<!-- Editor ........................... -->
+
+<attPool role='editor.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='editor'>
+  <sequence occurs='+'>
+    <hedgeRef label='person.ident.mix'/>
+  </sequence>
+  <!-- ((%person.ident.mix;)+) -->
+</elementRule>
+
+<tag name='editor'>
+  <ref role='common.attrib'/>
+  <ref role='editor.role.attrib'/>
+  <!-- %local.editor.attrib; -->
+</tag>
+
+<!--(see "Personal identity elements" for %person.ident.mix;)-->
+
+<!-- ISBN ............................. -->
+
+<attPool role='isbn.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='isbn'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='docinfo.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%docinfo.char.mix;)* -->
+</elementRule>
+
+<tag name='isbn'>
+  <ref role='common.attrib'/>
+  <ref role='isbn.role.attrib'/>
+  <!-- %local.isbn.attrib; -->
+</tag>
+
+<!-- ISSN ............................. -->
+
+<attPool role='issn.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='issn'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='docinfo.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%docinfo.char.mix;)* -->
+</elementRule>
+
+<tag name='issn'>
+  <ref role='common.attrib'/>
+  <ref role='issn.role.attrib'/>
+  <!-- %local.issn.attrib; -->
+</tag>
+
+<!-- InvPartNumber .................... -->
+
+<attPool role='invpartnumber.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='invpartnumber'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='docinfo.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%docinfo.char.mix;)* -->
+</elementRule>
+
+<tag name='invpartnumber'>
+  <ref role='common.attrib'/>
+  <ref role='invpartnumber.role.attrib'/>
+  <!-- %local.invpartnumber.attrib; -->
+</tag>
+
+<!-- IssueNum ......................... -->
+
+<attPool role='issuenum.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='issuenum'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='docinfo.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%docinfo.char.mix;)* -->
+</elementRule>
+
+<tag name='issuenum'>
+  <ref role='common.attrib'/>
+  <ref role='issuenum.role.attrib'/>
+  <!-- %local.issuenum.attrib; -->
+</tag>
+
+<!-- LegalNotice ...................... -->
+
+<attPool role='legalnotice.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='legalnotice'>
+  <sequence>
+    <ref label='title' occurs='?'/>
+    <hedgeRef label='legalnotice.mix' occurs='+'/>
+  </sequence>
+  <!-- (title?, (%legalnotice.mix;)+) -->
+</elementRule>
+
+<tag name='legalnotice'>
+  <ref role='common.attrib'/>
+  <ref role='legalnotice.role.attrib'/>
+  <!-- %local.legalnotice.attrib; -->
+</tag>
+
+<!-- ModeSpec ......................... -->
+
+<attPool role='modespec.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='modespec'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='docinfo.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%docinfo.char.mix;)* -->
+</elementRule>
+
+<tag name='modespec'>
+  <ref role='common.attrib'/>
+  <ref role='modespec.role.attrib'/>
+  <!-- %local.modespec.attrib; -->
+
+  <!-- Application: Type of action required for completion
+       of the links to which the ModeSpec is relevant (e.g.,
+       retrieval query) -->
+  <attribute name='application' type='NMTOKEN'>
+    <enumeration value='BMP'/>
+    <enumeration value='CGM-CHAR'/>
+    <enumeration value='CGM-BINARY'/>
+    <enumeration value='CGM-CLEAR'/>
+    <enumeration value='DITROFF'/>
+    <enumeration value='DVI'/>
+    <enumeration value='EPS'/>
+    <enumeration value='EQN'/>
+    <enumeration value='FAX'/>
+    <enumeration value='GIF'/>
+    <enumeration value='GIF87a'/>
+    <enumeration value='GIF89a'/>
+    <enumeration value='JPG'/>
+    <enumeration value='JPEG'/>
+    <enumeration value='IGES'/>
+    <enumeration value='PCX'/>
+    <enumeration value='PIC'/>
+    <enumeration value='PNG'/>
+    <enumeration value='PS'/>
+    <enumeration value='SGML'/>
+    <enumeration value='TBL'/>
+    <enumeration value='TEX'/>
+    <enumeration value='TIFF'/>
+    <enumeration value='WMF'/>
+    <enumeration value='WPG'/>
+    <enumeration value='linespecific'/>
+  </attribute>
+</tag>
+
+<!-- OrgName .......................... -->
+
+<attPool role='orgname.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='orgname'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='docinfo.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%docinfo.char.mix;)* -->
+</elementRule>
+
+<tag name='orgname'>
+  <ref role='common.attrib'/>
+  <ref role='orgname.role.attrib'/>
+  <!-- %local.orgname.attrib; -->
+</tag>
+
+<!-- OtherCredit ...................... -->
+
+<attPool role='othercredit.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='othercredit'>
+  <sequence occurs='+'>
+    <hedgeRef label='person.ident.mix'/>
+  </sequence>
+  <!-- ((%person.ident.mix;)+) -->
+</elementRule>
+
+<tag name='othercredit'>
+  <ref role='common.attrib'/>
+  <ref role='othercredit.role.attrib'/>
+  <!-- %local.othercredit.attrib; -->
+</tag>
+
+  <!--(see "Personal identity elements" for %person.ident.mix;)-->
+
+<!-- PageNums ......................... -->
+
+<attPool role='pagenums.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='pagenums'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='docinfo.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%docinfo.char.mix;)* -->
+</elementRule>
+
+<tag name='pagenums'>
+  <ref role='common.attrib'/>
+  <ref role='pagenums.role.attrib'/>
+  <!-- %local.pagenums.attrib; -->
+</tag>
+
+<!-- Personal identity elements ....... -->
+
+<!-- These elements are used only within Author, Editor, and
+     OtherCredit. -->
+
+<attPool role='contrib.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='contrib'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='docinfo.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%docinfo.char.mix;)* -->
+</elementRule>
+
+<tag name='contrib'>
+  <ref role='common.attrib'/>
+  <ref role='contrib.role.attrib'/>
+  <!-- %local.contrib.attrib; -->
+</tag>
+
+<attPool role='firstname.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='firstname'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='docinfo.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%docinfo.char.mix;)* -->
+</elementRule>
+
+<tag name='firstname'>
+  <ref role='common.attrib'/>
+  <ref role='firstname.role.attrib'/>
+  <!-- %local.firstname.attrib; -->
+</tag>
+
+<attPool role='honorific.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='honorific'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='docinfo.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%docinfo.char.mix;)* -->
+</elementRule>
+
+<tag name='honorific'>
+  <ref role='common.attrib'/>
+  <ref role='honorific.role.attrib'/>
+  <!-- %local.honorific.attrib; -->
+</tag>
+
+<attPool role='lineage.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='lineage'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='docinfo.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%docinfo.char.mix;)* -->
+</elementRule>
+
+<tag name='lineage'>
+  <ref role='common.attrib'/>
+  <ref role='lineage.role.attrib'/>
+  <!-- %local.lineage.attrib; -->
+</tag>
+
+<attPool role='othername.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='othername'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='docinfo.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%docinfo.char.mix;)* -->
+</elementRule>
+
+<tag name='othername'>
+  <ref role='common.attrib'/>
+  <ref role='othername.role.attrib'/>
+  <!-- %local.othername.attrib; -->
+</tag>
+
+<attPool role='surname.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='surname'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='docinfo.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%docinfo.char.mix;)* -->
+</elementRule>
+
+<tag name='surname'>
+  <ref role='common.attrib'/>
+  <ref role='surname.role.attrib'/>
+  <!-- %local.surname.attrib; -->
+</tag>
+
+<!-- PrintHistory ..................... -->
+
+<attPool role='printhistory.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='printhistory'>
+  <sequence occurs='+'>
+    <hedgeRef label='para.class'/>
+  </sequence>
+  <!-- ((%para.class;)+) -->
+</elementRule>
+
+<tag name='printhistory'>
+  <ref role='common.attrib'/>
+  <ref role='printhistory.role.attrib'/>
+  <!-- %local.printhistory.attrib; -->
+</tag>
+
+<!-- ProductName ...................... -->
+
+<attPool role='productname.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='productname'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='para.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%para.char.mix;)* -->
+</elementRule>
+
+<tag name='productname'>
+  <ref role='common.attrib'/>
+  <ref role='productname.role.attrib'/>
+  <!-- %local.productname.attrib; -->
+
+  <!-- Class: More precisely identifies the item the element names -->
+  <attribute name='class' type='string'>
+    <enumeration value='service'/>
+    <enumeration value='trade'/>
+    <enumeration value='registered'/>
+    <enumeration value='copyright'/>
+  </attribute>
+</tag>
+
+<!-- ProductNumber .................... -->
+
+<attPool role='productnumber.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='productnumber'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='docinfo.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%docinfo.char.mix;)* -->
+</elementRule>
+
+<tag name='productnumber'>
+  <ref role='common.attrib'/>
+  <ref role='productnumber.role.attrib'/>
+  <!-- %local.productnumber.attrib; -->
+</tag>
+
+<!-- PubDate .......................... -->
+
+<attPool role='pubdate.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='pubdate'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='docinfo.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%docinfo.char.mix;)* -->
+</elementRule>
+
+<tag name='pubdate'>
+  <ref role='common.attrib'/>
+  <ref role='pubdate.role.attrib'/>
+  <!-- %local.pubdate.attrib; -->
+</tag>
+
+<!-- Publisher ........................ -->
+
+<attPool role='publisher.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='publisher'>
+  <sequence>
+    <ref label='publishername'/>
+    <ref label='address' occurs='*'/>
+  </sequence>
+  <!-- (publishername, address*) -->
+</elementRule>
+
+<tag name='publisher'>
+  <ref role='common.attrib'/>
+  <ref role='publisher.role.attrib'/>
+  <!-- %local.publisher.attrib; -->
+</tag>
+
+<attPool role='publishername.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='publishername'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='docinfo.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%docinfo.char.mix;)* -->
+</elementRule>
+
+<tag name='publishername'>
+  <ref role='common.attrib'/>
+  <ref role='publishername.role.attrib'/>
+  <!-- %local.publishername.attrib; -->
+</tag>
+
+<!-- Address (defined elsewhere in this section)-->
+
+<!-- PubsNumber ....................... -->
+
+<attPool role='pubsnumber.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='pubsnumber'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='docinfo.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%docinfo.char.mix;)* -->
+</elementRule>
+
+<tag name='pubsnumber'>
+  <ref role='common.attrib'/>
+  <ref role='pubsnumber.role.attrib'/>
+  <!-- %local.pubsnumber.attrib; -->
+</tag>
+
+<!-- ReleaseInfo ...................... -->
+
+<attPool role='releaseinfo.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='releaseinfo'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='docinfo.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%docinfo.char.mix;)* -->
+</elementRule>
+
+<tag name='releaseinfo'>
+  <ref role='common.attrib'/>
+  <ref role='releaseinfo.role.attrib'/>
+  <!-- %local.releaseinfo.attrib; -->
+</tag>
+
+<!-- RevHistory ....................... -->
+
+<attPool role='revhistory.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='revhistory'>
+  <sequence>
+    <ref label='revision' occurs='+'/>
+  </sequence>
+  <!-- (revision+) -->
+</elementRule>
+
+<tag name='revhistory'>
+  <ref role='common.attrib'/>
+  <ref role='revhistory.role.attrib'/>
+  <!-- %local.revhistory.attrib; -->
+</tag>
+
+<attPool role='revision.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='revision'>
+  <sequence>
+    <ref label='revnumber'/>
+    <ref label='date'/>
+    <ref label='authorinitials' occurs='*'/>
+    <choice occurs='?'>
+      <ref label='revremark'/>
+      <ref label='revdescription'/>
+    </choice>
+  </sequence>
+  <!-- (revnumber, date, authorinitials*,
+                    (revremark|revdescription)?) -->
+</elementRule>
+
+<tag name='revision'>
+  <ref role='common.attrib'/>
+  <ref role='revision.role.attrib'/>
+  <!-- %local.revision.attrib; -->
+</tag>
+
+<attPool role='revnumber.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='revnumber'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='docinfo.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%docinfo.char.mix;)* -->
+</elementRule>
+
+<tag name='revnumber'>
+  <ref role='common.attrib'/>
+  <ref role='revnumber.role.attrib'/>
+  <!-- %local.revnumber.attrib; -->
+</tag>
+
+<!-- Date (defined elsewhere in this section)-->
+<!-- AuthorInitials (defined elsewhere in this section)-->
+
+<attPool role='revremark.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='revremark'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='docinfo.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%docinfo.char.mix;)* -->
+</elementRule>
+
+<tag name='revremark'>
+  <ref role='common.attrib'/>
+  <ref role='revremark.role.attrib'/>
+  <!-- %local.revremark.attrib; -->
+</tag>
+
+<attPool role='revdescription.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='revdescription'>
+  <sequence occurs='+'>
+    <hedgeRef label='revdescription.mix'/>
+  </sequence>
+  <!-- ((%revdescription.mix;)+) -->
+</elementRule>
+
+<tag name='revdescription'>
+  <ref role='common.attrib'/>
+  <ref role='revdescription.role.attrib'/>
+  <!-- %local.revdescription.attrib; -->
+</tag>
+
+<!-- SeriesVolNums .................... -->
+
+<attPool role='seriesvolnums.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='seriesvolnums'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='docinfo.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%docinfo.char.mix;)* -->
+</elementRule>
+
+<tag name='seriesvolnums'>
+  <ref role='common.attrib'/>
+  <ref role='seriesvolnums.role.attrib'/>
+  <!-- %local.seriesvolnums.attrib; -->
+</tag>
+
+<!-- VolumeNum ........................ -->
+
+<attPool role='volumenum.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='volumenum'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='docinfo.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%docinfo.char.mix;)* -->
+</elementRule>
+
+<tag name='volumenum'>
+  <ref role='common.attrib'/>
+  <ref role='volumenum.role.attrib'/>
+  <!-- %local.volumenum.attrib; -->
+</tag>
+
+<!-- .................................. -->
+
+<!-- ...................................................................... -->
+<!-- Inline, link, and ubiquitous elements ................................ -->
+
+<!-- Technical and computer terms ......................................... -->
+
+<attPool role='accel.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='accel'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='smallcptr.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%smallcptr.char.mix;)* -->
+</elementRule>
+
+<tag name='accel'>
+  <ref role='common.attrib'/>
+  <ref role='accel.role.attrib'/>
+  <!-- %local.accel.attrib; -->
+</tag>
+
+<attPool role='action.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='action'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='smallcptr.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%smallcptr.char.mix;)* -->
+</elementRule>
+
+<tag name='action'>
+  <ref role='moreinfo.attrib'/>
+  <ref role='common.attrib'/>
+  <ref role='action.role.attrib'/>
+  <!-- %local.action.attrib; -->
+</tag>
+
+<attPool role='application.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='application'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='para.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%para.char.mix;)* -->
+</elementRule>
+
+<tag name='application'>
+  <ref role='moreinfo.attrib'/>
+  <ref role='common.attrib'/>
+  <ref role='application.role.attrib'/>
+  <!-- %local.application.attrib; -->
+
+  <attribute name='class' type='string'>
+    <enumeration value='hardware'/>
+    <enumeration value='software'/>
+  </attribute>
+</tag>
+
+<attPool role='classname.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='classname'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='smallcptr.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%smallcptr.char.mix;)* -->
+</elementRule>
+
+<tag name='classname'>
+  <ref role='common.attrib'/>
+  <ref role='classname.role.attrib'/>
+  <!-- %local.classname.attrib; -->
+</tag>
+
+<!-- CO is a callout area of the LineColumn unit type (a single character
+     position); the position is directly indicated by the location of CO. -->
+<attPool role='co.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='co'>
+  <empty/>
+  <!-- EMPTY -->
+</elementRule>
+
+<tag name='co'>
+  <!-- bug number/symbol override or initialization -->
+  <!-- to any related information -->
+  <ref role='label.attrib'/>
+  <ref role='linkends.attrib'/>
+  <ref role='idreq.common.attrib'/>
+  <ref role='co.role.attrib'/>
+  <!-- %local.co.attrib; -->
+</tag>
+
+<attPool role='command.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='command'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='cptr.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%cptr.char.mix;)* -->
+</elementRule>
+
+<tag name='command'>
+  <ref role='moreinfo.attrib'/>
+  <ref role='common.attrib'/>
+  <ref role='command.role.attrib'/>
+  <!-- %local.command.attrib; -->
+</tag>
+
+<attPool role='computeroutput.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='computeroutput'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='cptr.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%cptr.char.mix;)* -->
+</elementRule>
+
+<tag name='computeroutput'>
+  <ref role='moreinfo.attrib'/>
+  <ref role='common.attrib'/>
+  <ref role='computeroutput.role.attrib'/>
+  <!-- %local.computeroutput.attrib; -->
+</tag>
+
+<attPool role='database.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='database'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='smallcptr.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%smallcptr.char.mix;)* -->
+</elementRule>
+
+<tag name='database'>
+  <ref role='common.attrib'/>
+  <ref role='database.role.attrib'/>
+  <!-- %local.database.attrib; -->
+  <ref role='moreinfo.attrib'/>
+  <!-- Class: Type of database the element names; no default -->
+  <attribute name='class' type='string'>
+    <enumeration value='name'/>
+    <enumeration value='table'/>
+    <enumeration value='field'/>
+    <enumeration value='key1'/>
+    <enumeration value='key2'/>
+    <enumeration value='record'/>
+  </attribute>
+</tag>
+
+<attPool role='email.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='email'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='docinfo.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%docinfo.char.mix;)* -->
+</elementRule>
+
+<tag name='email'>
+  <ref role='common.attrib'/>
+  <ref role='email.role.attrib'/>
+  <!-- %local.email.attrib; -->
+</tag>
+
+<attPool role='envar.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='envar'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='docinfo.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%smallcptr.char.mix;)* -->
+</elementRule>
+
+<tag name='envar'>
+  <ref role='common.attrib'/>
+  <ref role='envar.role.attrib'/>
+  <!-- %local.envar.attrib; -->
+</tag>
+
+<attPool role='errorcode.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='errorcode'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='smallcptr.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%smallcptr.char.mix;)* -->
+</elementRule>
+
+<tag name='errorcode'>
+  <ref role='moreinfo.attrib'/>
+  <ref role='common.attrib'/>
+  <ref role='errorcode.role.attrib'/>
+  <!-- %local.errorcode.attrib; -->
+</tag>
+
+<attPool role='errorname.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='errorname'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='smallcptr.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%smallcptr.char.mix;)* -->
+</elementRule>
+
+<tag name='errorname'>
+  <ref role='common.attrib'/>
+  <ref role='errorname.role.attrib'/>
+  <!-- %local.errorname.attrib; -->
+</tag>
+
+<attPool role='errortype.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='errortype'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='smallcptr.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%smallcptr.char.mix;)* -->
+</elementRule>
+
+<tag name='errortype'>
+  <ref role='common.attrib'/>
+  <ref role='errortype.role.attrib'/>
+  <!-- %local.errortype.attrib; -->
+</tag>
+
+<attPool role='filename.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='filename'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='smallcptr.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%smallcptr.char.mix;)* -->
+</elementRule>
+
+<tag name='filename'>
+  <ref role='moreinfo.attrib'/>
+  <ref role='common.attrib'/>
+  <ref role='filename.role.attrib'/>
+  <!-- %local.filename.attrib; -->
+
+  <!-- Class: Type of filename the element names; no default -->
+  <attribute name='class' type='string'>
+    <enumeration value='headerfile'/>
+    <enumeration value='devicefile'/>
+    <enumeration value='libraryfile'/>
+    <enumeration value='directory'/>
+    <enumeration value='symlink'/>
+  </attribute>
+
+  <!-- Path: Search path (possibly system-specific) in which
+       file can be found -->
+  <attribute name='path' type='string'/>
+</tag>
+
+<attPool role='function.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='function'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='cptr.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%cptr.char.mix;)* -->
+</elementRule>
+
+<tag name='function'>
+  <ref role='moreinfo.attrib'/>
+  <ref role='common.attrib'/>
+  <ref role='function.role.attrib'/>
+  <!-- %local.function.attrib; -->
+</tag>
+
+<attPool role='guibutton.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='guibutton'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='smallcptr.char.mix'/>
+      <ref label='accel'/>
+    </choice>
+  </mixed>
+  <!-- (%smallcptr.char.mix;|accel)* -->
+</elementRule>
+
+<tag name='guibutton'>
+  <ref role='moreinfo.attrib'/>
+  <ref role='common.attrib'/>
+  <ref role='guibutton.role.attrib'/>
+  <!-- %local.guibutton.attrib; -->
+</tag>
+
+<attPool role='guiicon.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='guiicon'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='smallcptr.char.mix'/>
+      <ref label='accel'/>
+    </choice>
+  </mixed>
+  <!-- (%smallcptr.char.mix;|accel)* -->
+</elementRule>
+
+<tag name='guiicon'>
+  <ref role='moreinfo.attrib'/>
+  <ref role='common.attrib'/>
+  <ref role='guiicon.role.attrib'/>
+  <!-- %local.guiicon.attrib; -->
+</tag>
+
+<attPool role='guilabel.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='guilabel'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='smallcptr.char.mix'/>
+      <ref label='accel'/>
+    </choice>
+  </mixed>
+  <!-- (%smallcptr.char.mix;|accel)* -->
+</elementRule>
+
+<tag name='guilabel'>
+  <ref role='moreinfo.attrib'/>
+  <ref role='common.attrib'/>
+  <ref role='guilabel.role.attrib'/>
+  <!-- %local.guilabel.attrib; -->
+</tag>
+
+<attPool role='guimenu.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='guimenu'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='smallcptr.char.mix'/>
+      <ref label='accel'/>
+    </choice>
+  </mixed>
+  <!-- (%smallcptr.char.mix;|accel)* -->
+</elementRule>
+
+<tag name='guimenu'>
+  <ref role='moreinfo.attrib'/>
+  <ref role='common.attrib'/>
+  <ref role='guimenu.role.attrib'/>
+  <!-- %local.guimenu.attrib; -->
+</tag>
+
+<attPool role='guimenuitem.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='guimenuitem'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='smallcptr.char.mix'/>
+      <ref label='accel'/>
+    </choice>
+  </mixed>
+  <!-- (%smallcptr.char.mix;|accel)* -->
+</elementRule>
+
+<tag name='guimenuitem'>
+  <ref role='moreinfo.attrib'/>
+  <ref role='common.attrib'/>
+  <ref role='guimenuitem.role.attrib'/>
+  <!-- %local.guimenuitem.attrib; -->
+</tag>
+
+<attPool role='guisubmenu.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='guisubmenu'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='smallcptr.char.mix'/>
+      <ref label='accel'/>
+    </choice>
+  </mixed>
+  <!-- (%smallcptr.char.mix;|accel)* -->
+</elementRule>
+
+<tag name='guisubmenu'>
+  <ref role='moreinfo.attrib'/>
+  <ref role='common.attrib'/>
+  <ref role='guisubmenu.role.attrib'/>
+  <!-- %local.guisubmenu.attrib; -->
+</tag>
+
+<attPool role='hardware.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='hardware'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='smallcptr.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%smallcptr.char.mix;)* -->
+</elementRule>
+
+<tag name='hardware'>
+  <ref role='moreinfo.attrib'/>
+  <ref role='common.attrib'/>
+  <ref role='hardware.role.attrib'/>
+  <!-- %local.hardware.attrib; -->
+</tag>
+
+<attPool role='interface.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='interface'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='smallcptr.char.mix'/>
+      <ref label='accel'/>
+    </choice>
+  </mixed>
+  <!-- (%smallcptr.char.mix;|accel)* -->
+</elementRule>
+
+<tag name='interface'>
+  <ref role='moreinfo.attrib'/>
+  <ref role='common.attrib'/>
+  <ref role='interface.role.attrib'/>
+  <!-- %local.interface.attrib; -->
+</tag>
+
+<attPool role='keycap.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='keycap'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='smallcptr.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%smallcptr.char.mix;)* -->
+</elementRule>
+
+<tag name='keycap'>
+  <ref role='moreinfo.attrib'/>
+  <ref role='common.attrib'/>
+  <ref role='keycap.role.attrib'/>
+  <!-- %local.keycap.attrib; -->
+</tag>
+
+<attPool role='keycode.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='keycode'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='smallcptr.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%smallcptr.char.mix;)* -->
+</elementRule>
+
+<tag name='keycode'>
+  <ref role='common.attrib'/>
+  <ref role='keycode.role.attrib'/>
+  <!-- %local.keycode.attrib; -->
+</tag>
+
+<attPool role='keycombo.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='keycombo'>
+  <choice occurs='+'>
+    <ref label='keycap'/>
+    <ref label='keycombo'/>
+    <ref label='keysym'/>
+    <ref label='mousebutton'/>
+  </choice>
+  <!-- ((keycap|keycombo|keysym|mousebutton)+) -->
+</elementRule>
+
+<tag name='keycombo'>
+  <ref role='keyaction.attrib'/>
+  <ref role='moreinfo.attrib'/>
+  <ref role='common.attrib'/>
+  <ref role='keycombo.role.attrib'/>
+  <!-- %local.keycombo.attrib; -->
+</tag>
+
+<attPool role='keysysm.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='keysym'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='smallcptr.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%smallcptr.char.mix;)* -->
+</elementRule>
+
+<tag name='keysym'>
+  <ref role='common.attrib'/>
+  <ref role='keysysm.role.attrib'/>
+  <!-- %local.keysym.attrib; -->
+</tag>
+
+<attPool role='lineannotation.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='lineannotation'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='para.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%para.char.mix;)* -->
+</elementRule>
+
+<tag name='lineannotation'>
+  <ref role='common.attrib'/>
+  <ref role='lineannotation.role.attrib'/>
+  <!-- %local.lineannotation.attrib; -->
+</tag>
+
+<attPool role='literal.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='literal'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='cptr.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%cptr.char.mix;)* -->
+</elementRule>
+
+<tag name='literal'>
+  <ref role='moreinfo.attrib'/>
+  <ref role='common.attrib'/>
+  <ref role='literal.role.attrib'/>
+  <!-- %local.literal.attrib; -->
+</tag>
+
+<attPool role='constant.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='constant'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='smallcptr.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%smallcptr.char.mix;)* -->
+</elementRule>
+
+<tag name='constant'>
+  <ref role='common.attrib'/>
+  <ref role='constant.role.attrib'/>
+  <attribute name='class' type='string'>
+    <enumeration value='limit'/>
+  </attribute>
+</tag>
+
+<attPool role='varname.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='varname'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='smallcptr.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%smallcptr.char.mix;)* -->
+</elementRule>
+
+<tag name='varname'>
+  <ref role='common.attrib'/>
+  <ref role='varname.role.attrib'/>
+  <!-- %local.varname.attrib; -->
+</tag>
+
+<attPool role='markup.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='markup'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='smallcptr.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%smallcptr.char.mix;)* -->
+</elementRule>
+
+<tag name='markup'>
+  <ref role='common.attrib'/>
+  <ref role='markup.role.attrib'/>
+  <!-- %local.markup.attrib; -->
+</tag>
+
+<attPool role='medialabel.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='medialabel'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='smallcptr.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%smallcptr.char.mix;)* -->
+</elementRule>
+
+<tag name='medialabel'>
+  <ref role='common.attrib'/>
+  <ref role='medialabel.role.attrib'/>
+  <!-- %local.medialabel.attrib; -->
+
+  <!-- Class: Type of medium named by the element; no default -->
+  <attribute name='class' type='string'>
+    <enumeration value='cartridge'/>
+    <enumeration value='cdrom'/>
+    <enumeration value='disk'/>
+    <enumeration value='tape'/>
+  </attribute>
+</tag>
+
+<attPool role='menuchoice.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='menuchoice'>
+  <sequence>
+    <ref label='shortcut' occurs='?'/>
+    <choice occurs='+'>
+      <ref label='guibutton'/>
+      <ref label='guiicon'/>
+      <ref label='guilabel'/>
+      <ref label='guimenu'/>
+      <ref label='guimenuitem'/>
+      <ref label='guisubmenu'/>
+      <ref label='interface'/>
+    </choice>
+  </sequence>
+  <!-- (shortcut?, (guibutton|guiicon|guilabel
+               |guimenu|guimenuitem|guisubmenu|interface)+) -->
+</elementRule>
+
+<tag name='menuchoice'>
+  <ref role='moreinfo.attrib'/>
+  <ref role='common.attrib'/>
+  <ref role='menuchoice.role.attrib'/>
+  <!-- %local.menuchoice.attrib; -->
+</tag>
+
+<!-- See also KeyCombo -->
+<attPool role='shortcut.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='shortcut'>
+  <choice occurs='+'>
+    <ref label='keycap'/>
+    <ref label='keycombo'/>
+    <ref label='keysym'/>
+    <ref label='mousebutton'/>
+  </choice>
+  <!-- ((keycap|keycombo|keysym|mousebutton)+) -->
+</elementRule>
+
+<tag name='shortcut'>
+  <ref role='keyaction.attrib'/>
+  <ref role='moreinfo.attrib'/>
+  <ref role='common.attrib'/>
+  <ref role='shortcut.role.attrib'/>
+  <!-- %local.shortcut.attrib; -->
+</tag>
+
+<attPool role='mousebutton.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='mousebutton'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='smallcptr.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%smallcptr.char.mix;)* -->
+</elementRule>
+
+<tag name='mousebutton'>
+  <ref role='moreinfo.attrib'/>
+  <ref role='common.attrib'/>
+  <ref role='mousebutton.role.attrib'/>
+  <!-- %local.mousebutton.attrib; -->
+</tag>
+
+<attPool role='msgtext.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='msgtext'>
+  <choice occurs='+'>
+    <hedgeRef label='component.mix'/>
+  </choice>
+  <!-- ((%component.mix;)+) -->
+</elementRule>
+
+<tag name='msgtext'>
+  <ref role='common.attrib'/>
+  <ref role='msgtext.role.attrib'/>
+  <!-- %local.msgtext.attrib; -->
+</tag>
+
+<attPool role='option.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='option'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='smallcptr.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%smallcptr.char.mix;)* -->
+</elementRule>
+
+<tag name='option'>
+  <ref role='common.attrib'/>
+  <ref role='option.role.attrib'/>
+  <!-- %local.option.attrib; -->
+</tag>
+
+<attPool role='optional.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='optional'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='cptr.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%cptr.char.mix;)* -->
+</elementRule>
+
+<tag name='optional'>
+  <ref role='common.attrib'/>
+  <ref role='optional.role.attrib'/>
+  <!-- %local.optional.attrib; -->
+</tag>
+
+<attPool role='parameter.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='parameter'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='smallcptr.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%smallcptr.char.mix;)* -->
+</elementRule>
+
+<tag name='parameter'>
+  <ref role='moreinfo.attrib'/>
+  <ref role='common.attrib'/>
+  <ref role='parameter.role.attrib'/>
+  <!-- %local.parameter.attrib; -->
+
+  <!-- Class: Type of the Parameter; no default -->
+  <attribute name='class' type='string'>
+    <enumeration value='command'/>
+    <enumeration value='function'/>
+    <enumeration value='option'/>
+  </attribute>
+</tag>
+
+<attPool role='prompt.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='prompt'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='smallcptr.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%smallcptr.char.mix;)* -->
+</elementRule>
+
+<tag name='prompt'>
+  <ref role='moreinfo.attrib'/>
+  <ref role='common.attrib'/>
+  <ref role='prompt.role.attrib'/>
+  <!-- %local.prompt.attrib; -->
+</tag>
+
+<attPool role='property.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='property'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='smallcptr.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%smallcptr.char.mix;)* -->
+</elementRule>
+
+<tag name='property'>
+  <ref role='moreinfo.attrib'/>
+  <ref role='common.attrib'/>
+  <ref role='property.role.attrib'/>
+  <!-- %local.property.attrib; -->
+</tag>
+
+<attPool role='replaceable.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='replaceable'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='link.char.class'/>
+      <ref label='optional'/>
+      <hedgeRef label='base.char.class'/>
+      <hedgeRef label='other.char.class'/>
+      <ref label='inlinegraphic'/>
+      <ref label='inlinemediaobject'/>
+    </choice>
+  </mixed>
+  <!-- (#PCDATA
+               | %link.char.class;
+               | optional
+               | %base.char.class;
+               | %other.char.class;
+               | inlinegraphic
+                | inlinemediaobject)* -->
+</elementRule>
+
+<tag name='replaceable'>
+  <ref role='common.attrib'/>
+  <ref role='replaceable.role.attrib'/>
+  <!-- %local.replaceable.attrib; -->
+
+  <!-- Class: Type of information the element represents; no
+       default -->
+  <attribute name='class' type='string'>
+    <enumeration value='command'/>
+    <enumeration value='function'/>
+    <enumeration value='option'/>
+    <enumeration value='parameter'/>
+  </attribute>
+</tag>
+
+<attPool role='returnvalue.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='returnvalue'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='smallcptr.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%smallcptr.char.mix;)* -->
+</elementRule>
+
+<tag name='returnvalue'>
+  <ref role='common.attrib'/>
+  <ref role='returnvalue.role.attrib'/>
+  <!-- %local.returnvalue.attrib; -->
+</tag>
+
+<attPool role='sgmltag.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='sgmltag'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='smallcptr.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%smallcptr.char.mix;)* -->
+</elementRule>
+
+<tag name='sgmltag'>
+  <ref role='common.attrib'/>
+  <ref role='sgmltag.role.attrib'/>
+  <!-- %local.sgmltag.attrib; -->
+
+  <!-- Class: Type of SGML construct the element names; no default -->
+  <attribute name='class' type='string'>
+    <enumeration value='attribute'/>
+    <enumeration value='attvalue'/>
+    <enumeration value='element'/>
+    <enumeration value='endtag'/>
+    <enumeration value='emptytag'/>
+    <enumeration value='genentity'/>
+    <enumeration value='numcharref'/>
+    <enumeration value='paramentity'/>
+    <enumeration value='pi'/>
+    <enumeration value='xmlpi'/>
+    <enumeration value='starttag'/>
+    <enumeration value='sgmlcomment'/>
+  </attribute>
+</tag>
+
+<attPool role='structfield.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='structfield'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='smallcptr.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%smallcptr.char.mix;)* -->
+</elementRule>
+
+<tag name='structfield'>
+  <ref role='common.attrib'/>
+  <ref role='structfield.role.attrib'/>
+  <!-- %local.structfield.attrib; -->
+</tag>
+
+<attPool role='structname.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='structname'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='smallcptr.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%smallcptr.char.mix;)* -->
+</elementRule>
+
+<tag name='structname'>
+  <ref role='common.attrib'/>
+  <ref role='structname.role.attrib'/>
+  <!-- %local.structname.attrib; -->
+</tag>
+
+<attPool role='symbol.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='symbol'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='smallcptr.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%smallcptr.char.mix;)* -->
+</elementRule>
+
+<tag name='symbol'>
+  <ref role='common.attrib'/>
+  <ref role='symbol.role.attrib'/>
+  <!-- %local.symbol.attrib; -->
+
+  <!-- Class: Type of symbol; no default -->
+  <attribute name='class' type='string'>
+    <enumeration value='limit'/>
+  </attribute>
+</tag>
+
+<attPool role='systemitem.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='systemitem'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='smallcptr.char.mix'/>
+      <ref label='acronym'/>
+    </choice>
+  </mixed>
+  <!-- (%smallcptr.char.mix; | acronym)* -->
+</elementRule>
+
+<tag name='systemitem'>
+  <ref role='moreinfo.attrib'/>
+  <ref role='common.attrib'/>
+  <ref role='systemitem.role.attrib'/>
+  <!-- %local.systemitem.attrib; -->
+
+  <!-- Class: Type of system item the element names; no default -->
+  <attribute name='class' type='string'>
+    <enumeration value='constant'/>
+    <enumeration value='groupname'/>
+    <enumeration value='library'/>
+    <enumeration value='macro'/>
+    <enumeration value='osname'/>
+    <enumeration value='resource'/>
+    <enumeration value='systemname'/>
+    <enumeration value='username'/>
+  </attribute>
+</tag>
+
+
+<attPool role='token.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='token'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='smallcptr.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%smallcptr.char.mix;)* -->
+</elementRule>
+
+<tag name='token'>
+  <ref role='common.attrib'/>
+  <ref role='token.role.attrib'/>
+  <!-- %local.token.attrib; -->
+</tag>
+
+<attPool role='type.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='type'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='smallcptr.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%smallcptr.char.mix;)* -->
+</elementRule>
+
+<tag name='type'>
+  <ref role='common.attrib'/>
+  <ref role='type.role.attrib'/>
+  <!-- %local.type.attrib; -->
+</tag>
+
+<attPool role='userinput.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='userinput'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='cptr.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%cptr.char.mix;)* -->
+</elementRule>
+
+<tag name='userinput'>
+  <ref role='moreinfo.attrib'/>
+  <ref role='common.attrib'/>
+  <ref role='userinput.role.attrib'/>
+  <!-- %local.userinput.attrib; -->
+</tag>
+
+<!-- General words and phrases ............................................ -->
+
+<attPool role='abbrev.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='abbrev'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='word.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%word.char.mix;)* -->
+</elementRule>
+
+<tag name='abbrev'>
+  <ref role='common.attrib'/>
+  <ref role='abbrev.role.attrib'/>
+  <!-- %local.abbrev.attrib; -->
+</tag>
+
+<attPool role='acronym.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='acronym'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='word.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%word.char.mix;)* -->
+</elementRule>
+
+<tag name='acronym'>
+  <ref role='common.attrib'/>
+  <ref role='acronym.role.attrib'/>
+  <!-- %local.acronym.attrib; -->
+</tag>
+
+<attPool role='citation.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='citation'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='para.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%para.char.mix;)* -->
+</elementRule>
+
+<tag name='citation'>
+  <ref role='common.attrib'/>
+  <ref role='citation.role.attrib'/>
+  <!-- %local.citation.attrib; -->
+</tag>
+
+<attPool role='citerefentry.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='citerefentry'>
+  <sequence>
+    <ref label='refentrytitle'/>
+    <ref label='manvolnum' occurs='?'/>
+  </sequence>
+  <!-- (refentrytitle, manvolnum?) -->
+</elementRule>
+
+<tag name='citerefentry'>
+  <ref role='common.attrib'/>
+  <ref role='citerefentry.role.attrib'/>
+  <!-- %local.citerefentry.attrib; -->
+</tag>
+
+<attPool role='refentrytitle.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='refentrytitle'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='para.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%para.char.mix;)* -->
+</elementRule>
+
+<tag name='refentrytitle'>
+  <ref role='common.attrib'/>
+  <ref role='refentrytitle.role.attrib'/>
+  <!-- %local.refentrytitle.attrib; -->
+</tag>
+
+<attPool role='namvolnum.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='manvolnum'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='word.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%word.char.mix;)* -->
+</elementRule>
+
+<tag name='manvolnum'>
+  <ref role='common.attrib'/>
+  <ref role='namvolnum.role.attrib'/>
+  <!-- %local.manvolnum.attrib; -->
+</tag>
+
+<attPool role='citetitle.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='citetitle'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='para.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%para.char.mix;)* -->
+</elementRule>
+
+<tag name='citetitle'>
+  <ref role='common.attrib'/>
+  <ref role='citetitle.role.attrib'/>
+  <!-- %local.citetitle.attrib; -->
+
+  <!-- Pubwork: Genre of published work cited; no default -->
+  <attribute name='pubwork' type='string'>
+    <enumeration value='article'/>
+    <enumeration value='book'/>
+    <enumeration value='chapter'/>
+    <enumeration value='part'/>
+    <enumeration value='refentry'/>
+    <enumeration value='section'/>
+    <enumeration value='journal'/>
+    <enumeration value='series'/>
+    <enumeration value='set'/>
+    <enumeration value='manuscript'/>
+  </attribute>
+</tag>
+
+<attPool role='emphasis.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='emphasis'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='para.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%para.char.mix;)* -->
+</elementRule>
+
+<tag name='emphasis'>
+  <ref role='common.attrib'/>
+  <ref role='emphasis.role.attrib'/>
+  <!-- %local.emphasis.attrib; -->
+</tag>
+
+<attPool role='firstterm.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='firstterm'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='word.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%word.char.mix;)* -->
+</elementRule>
+
+<tag name='firstterm'>
+  <ref role='common.attrib'/>
+  <ref role='firstterm.role.attrib'/>
+  <!-- %local.firstterm.attrib; -->
+  <!-- to GlossEntry or other explanation -->
+  <ref role='linkend.attrib'/>
+</tag>
+
+<attPool role='foreignphrase.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='foreignphrase'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='para.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%para.char.mix;)* -->
+</elementRule>
+
+<tag name='foreignphrase'>
+  <ref role='common.attrib'/>
+  <ref role='foreignphrase.role.attrib'/>
+  <!-- %local.foreignphrase.attrib; -->
+</tag>
+
+<attPool role='glossterm.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='glossterm'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='para.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%para.char.mix;)* -->
+</elementRule>
+
+<tag name='glossterm'>
+  <ref role='common.attrib'/>
+  <ref role='glossterm.role.attrib'/>
+  <!-- %local.glossterm.attrib; -->
+
+  <!-- to GlossEntry if Glossterm used in text -->
+  <ref role='linkend.attrib'/>
+
+  <!-- BaseForm: Provides the form of GlossTerm to be used
+       for indexing -->
+  <attribute name='baseform' type='string'/>
+</tag>
+
+<attPool role='phrase.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='phrase'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='para.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%para.char.mix;)* -->
+</elementRule>
+
+<tag name='phrase'>
+  <ref role='common.attrib'/>
+  <ref role='phrase.role.attrib'/>
+  <!-- %local.phrase.attrib; -->
+</tag>
+
+<attPool role='quote.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='quote'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='para.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%para.char.mix;)* -->
+</elementRule>
+
+<tag name='quote'>
+  <ref role='common.attrib'/>
+  <ref role='quote.role.attrib'/>
+  <!-- %local.quote.attrib; -->
+</tag>
+
+<attPool role='ssscript.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<hedgeRule label='subscriptContentModel'>
+  <choice occurs='*'>
+    <hedgeRef label='link.char.class'/>
+    <ref label='emphasis'/>
+    <ref label='replaceable'/>
+    <ref label='symbol'/>
+    <ref label='inlinegraphic'/>
+    <ref label='inlinemediaobject'/>
+    <hedgeRef label='base.char.class'/>
+    <hedgeRef label='other.char.class'/>
+  </choice>
+  <!-- (#PCDATA
+               | %link.char.class;
+               | emphasis
+               | replaceable
+               | symbol
+               | inlinegraphic
+                | inlinemediaobject
+               | %base.char.class;
+               | %other.char.class;)* -->
+
+</hedgeRule>
+
+<elementRule role='subscript'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='subscriptContentModel'/>
+    </choice>
+  </mixed>
+</elementRule>
+
+<tag name='subscript'>
+  <ref role='common.attrib'/>
+  <ref role='ssscript.role.attrib'/>
+  <!-- %local.ssscript.attrib; -->
+</tag>
+
+<elementRule role='superscript'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='subscriptContentModel'/>
+    </choice>
+  </mixed>
+</elementRule>
+
+<tag name='superscript'>
+  <ref role='common.attrib'/>
+  <ref role='ssscript.role.attrib'/>
+  <!-- %local.ssscript.attrib; -->
+</tag>
+
+<attPool role='trademark.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='trademark'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='link.char.class'/>
+      <hedgeRef label='tech.char.class'/>
+      <hedgeRef label='base.char.class'/>
+      <hedgeRef label='other.char.class'/>
+      <ref label='inlinegraphic'/>
+      <ref label='inlinemediaobject'/>
+      <ref label='emphasis'/>
+    </choice>
+  </mixed>
+  <!-- (#PCDATA
+               | %link.char.class;
+               | %tech.char.class;
+               | %base.char.class;
+               | %other.char.class;
+               | inlinegraphic
+                | inlinemediaobject
+               | emphasis)* -->
+</elementRule>
+
+<tag name='trademark'>
+  <ref role='common.attrib'/>
+  <ref role='trademark.role.attrib'/>
+  <!-- %local.trademark.attrib; -->
+
+  <!-- Class: More precisely identifies the item the element names -->
+  <attribute name='class' type='string'>
+    <enumeration value='service'/>
+    <enumeration value='trade'/>
+    <enumeration value='registered'/>
+    <enumeration value='copyright'/>
+  </attribute>
+</tag>
+
+<attPool role='wordasword.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='wordasword'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='word.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%word.char.mix;)* -->
+</elementRule>
+
+<tag name='wordasword'>
+  <ref role='common.attrib'/>
+  <ref role='wordasword.role.attrib'/>
+  <!-- %local.wordasword.attrib; -->
+</tag>
+
+<!-- Links and cross-references ........................................... -->
+
+<attPool role='link.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='link'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='para.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%para.char.mix;)* -->
+</elementRule>
+
+<tag name='link'>
+  <!-- to linked-to object -->
+  <ref role='linkendreq.attrib'/>
+
+  <ref role='common.attrib'/>
+  <ref role='link.role.attrib'/>
+  <!-- %local.link.attrib; -->
+
+  <!-- Endterm: ID of element containing text that is to be
+       fetched from elsewhere in the document to appear as
+       the content of this element -->
+  <attribute name='endterm' type='IDREF'/>
+
+  <!-- Type: Freely assignable parameter -->
+  <attribute name='type' type='string'/>
+</tag>
+
+<attPool role='olink.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='olink'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='para.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%para.char.mix;)* -->
+</elementRule>
+
+<tag name='olink'>
+  <ref role='common.attrib'/>
+  <ref role='olink.role.attrib'/>
+  <!-- %local.olink.attrib; -->
+
+  <!-- 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 -->
+  <attribute name='linkmode' type='IDREF'/>
+
+  <!-- LocalInfo: Information that may be passed to ModeSpec -->
+  <attribute name='localinfo' type='string'/>
+
+  <!-- Type: Freely assignable parameter -->
+  <attribute name='type' type='string'/>
+</tag>
+
+<attPool role='ulink.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='ulink'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='para.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%para.char.mix;)* -->
+</elementRule>
+
+<tag name='ulink'>
+  <ref role='common.attrib'/>
+  <ref role='ulink.role.attrib'/>
+  <!-- %local.ulink.attrib; -->
+
+  <!-- URL: uniform resource locator; the target of the ULink -->
+  <attribute name='url' type='string' required='true'/>
+
+  <!-- Type: Freely assignable parameter -->
+  <attribute name='type' type='string'/>
+</tag>
+
+<attPool role='footnoteref.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='footnoteref'>
+  <empty/>
+  <!-- EMPTY -->
+</elementRule>
+
+<tag name='footnoteref'>
+  <!-- to footnote content supplied elsewhere -->
+  <!-- FIXME: constrain -->
+  <ref role='linkendreq.attrib'/>
+
+  <ref role='label.attrib'/>
+  <ref role='common.attrib'/>
+  <ref role='footnoteref.role.attrib'/>
+  <!-- %local.footnoteref.attrib; -->
+</tag>
+
+<attPool role='xref.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='xref'>
+  <empty/>
+  <!-- EMPTY -->
+</elementRule>
+
+<tag name='xref'>
+  <!-- to linked-to object -->
+  <ref role='linkendreq.attrib'/>
+  <ref role='common.attrib'/>
+  <ref role='xref.role.attrib'/>
+  <!-- %local.xref.attrib; -->
+
+  <!-- Endterm: ID of element containing text that is to be
+       fetched from elsewhere in the document to appear as
+       the content of this element -->
+  <attribute name='endterm' type='IDREF'/>
+</tag>
+
+<!-- Ubiquitous elements .................................................. -->
+
+<attPool role='anchor.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='anchor'>
+  <empty/>
+  <!-- EMPTY -->
+</elementRule>
+
+<tag name='anchor'>
+  <ref role='idreq.attrib'/>
+  <ref role='pagenum.attrib'/>
+  <ref role='remap.attrib'/>
+  <ref role='xreflabel.attrib'/>
+  <ref role='revisionflag.attrib'/>
+  <ref role='effectivity.attrib'/>
+  <ref role='anchor.role.attrib'/>
+  <!-- %local.anchor.attrib; -->
+</tag>
+
+<attPool role='beginpage.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='beginpage'>
+  <empty/>
+  <!-- EMPTY -->
+</elementRule>
+
+<tag name='beginpage'>
+    <!-- PageNum: Number of page that begins at this point -->
+    <ref role='pagenum.attrib'/>
+    <ref role='common.attrib'/>
+    <ref role='beginpage.role.attrib'/>
+    <!-- %local.beginpage.attrib; -->
+</tag>
+
+<!-- IndexTerms appear in the text flow for generating or linking an
+     index. -->
+
+<attPool role='indexterm.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='indexterm'>
+  <sequence>
+    <ref label='primary' occurs='?'/>
+    <choice occurs='?'>
+      <sequence>
+        <ref label='secondary'/>
+        <choice occurs='?'>
+          <sequence>
+            <ref label='tertiary'/>
+            <choice occurs='?'>
+              <ref label='see'/>
+              <ref label='seealso' occurs='+'/>
+            </choice>
+          </sequence>
+          <ref label='see'/>
+          <ref label='seealso' occurs='+'/>
+        </choice>
+      </sequence>
+      <ref label='see'/>
+      <ref label='seealso' occurs='+'/>
+    </choice>
+  </sequence>
+  <!-- (primary?, ((secondary, ((tertiary, (see|seealso+)?)
+               | see | seealso+)?) | see | seealso+)?) -->
+</elementRule>
+
+<tag name='indexterm'>
+  <ref role='common.attrib'/>
+  <ref role='indexterm.role.attrib'/>
+  <ref role='pagenum.attrib'/>
+  <!-- %local.indexterm.attrib; -->
+
+  <!-- Scope: Indicates which generated indices the IndexTerm
+       should appear in: Global (whole document set), Local (this
+       document only), or All (both) -->
+  <attribute name='scope' type='string'>
+    <enumeration value='all'/>
+    <enumeration value='global'/>
+    <enumeration value='local'/>
+  </attribute>
+
+  <!-- Significance: Whether this IndexTerm is the most pertinent
+       of its series (Preferred) or not (Normal, the default) -->
+  <attribute name='significance' type='string'>
+    <enumeration value='preferred'/>
+    <enumeration value='normal'/>
+  </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 -->
+  <attribute name='class' type='string'>
+    <enumeration value='singular'/>
+    <enumeration value='startofrange'/>
+    <enumeration value='endofrange'/>
+  </attribute>
+
+  <!-- StartRef: ID of the IndexTerm that starts the indexing
+       range ended by this IndexTerm -->
+  <!-- FIXME: constrain -->
+  <attribute name='startref' type='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 -->
+  <attribute name='zone' type='IDREFS'/>
+</tag>
+
+<attPool role='primsecter.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='primary'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='ndxterm.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%ndxterm.char.mix;)* -->
+</elementRule>
+
+<tag name='primary'>
+  <ref role='common.attrib'/>
+  <ref role='primsecter.role.attrib'/>
+  <!-- %local.primsecter.attrib; -->
+
+  <!-- SortAs: Alternate sort string for index sorting, e.g.,
+       "fourteen" for an element containing "14" -->
+  <attribute name='sortas' type='string'/>
+</tag>
+
+<elementRule role='secondary'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='ndxterm.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%ndxterm.char.mix;)* -->
+</elementRule>
+
+<tag name='secondary'>
+  <ref role='common.attrib'/>
+  <ref role='primsecter.role.attrib'/>
+  <!-- %local.primsecter.attrib; -->
+
+  <!-- SortAs: Alternate sort string for index sorting, e.g.,
+       "fourteen" for an element containing "14" -->
+  <attribute name='sortas' type='string'/>
+</tag>
+
+<elementRule role='tertiary'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='ndxterm.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%ndxterm.char.mix;)* -->
+</elementRule>
+
+<tag name='tertiary'>
+  <ref role='common.attrib'/>
+  <ref role='primsecter.role.attrib'/>
+  <!-- %local.primsecter.attrib; -->
+
+  <!-- SortAs: Alternate sort string for index sorting, e.g.,
+       "fourteen" for an element containing "14" -->
+  <attribute name='sortas' type='string'/>
+</tag>
+
+<attPool role='seeseealso.role.attrib'>
+  <ref role='role.attrib'/>
+</attPool>
+
+<elementRule role='see'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='ndxterm.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%ndxterm.char.mix;)* -->
+</elementRule>
+
+<tag name='see'>
+  <ref role='common.attrib'/>
+  <ref role='seeseealso.role.attrib'/>
+  <!-- %local.seeseealso.attrib; -->
+</tag>
+
+<elementRule role='seealso'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='ndxterm.char.mix'/>
+    </choice>
+  </mixed>
+  <!-- (%ndxterm.char.mix;)* -->
+</elementRule>
+
+<tag name='seealso'>
+  <ref role='common.attrib'/>
+  <ref role='seeseealso.role.attrib'/>
+  <!-- %local.seeseealso.attrib; -->
+</tag>
+
+</module>
\ No newline at end of file
diff --git a/schema/relax/dbtables.rlx b/schema/relax/dbtables.rlx
new file mode 100644 (file)
index 0000000..0c624d9
--- /dev/null
@@ -0,0 +1,227 @@
+<?xml version="1.0" encoding="UTF-8"?> <!-- -*- XML -*- -->
+
+<module moduleVersion="1.2"
+       relaxCoreVersion="1.0"
+       xmlns="http://www.xml.gr.jp/xmlns/relaxCore">
+
+  <interface/>
+
+<attPool role='table.att'/>
+<attPool role='tgroup.att'/>
+<attPool role='colspec.att'/>
+<attPool role='thead.att'/>
+<attPool role='tbody.att'/>
+<attPool role='row.att'/>
+<attPool role='entry.att'/>
+
+<!-- Tables ........................... -->
+
+<elementRule role='table'>
+  <sequence>
+    <hedgeRef label='formalobject.title.content'/>
+    <hedgeRef label='ndxterm.class' occurs='?'/>
+    <choice>
+      <ref label='graphic' occurs='+'/>
+      <ref label='mediaobject' occurs='+'/>
+      <ref label='tgroup' occurs='+'/>
+    </choice>
+  </sequence>
+  <!-- % tbl.table.mdl
+         "((%formalobject.title.content;),
+          (%ndxterm.class;)*,
+          (graphic+|tgroup+))"-->
+</elementRule>
+
+<tag name='table'>
+  <ref role='table.att'/>
+  <attribute name='frame' type='NMTOKEN'>
+    <enumeration value='top'/>
+    <enumeration value='bottom'/>
+    <enumeration value='topbot'/>
+    <enumeration value='all'/>
+    <enumeration value='sides'/>
+    <enumeration value='none'/>
+  </attribute>
+  <attribute name='colsep' type='string'>
+    <enumeration value='0'/>
+    <enumeration value='1'/>
+  </attribute>
+  <attribute name='rowsep' type='string'>
+    <enumeration value='0'/>
+    <enumeration value='1'/>
+  </attribute>
+</tag>
+
+<elementRule role='informaltable'>
+  <choice>
+    <ref label='graphic' occurs='+'/>
+    <ref label='mediaobject' occurs='+'/>
+    <ref label='tgroup' occurs='+'/>
+  </choice>
+</elementRule>
+
+<tag name='informaltable'>
+  <ref role='table.att'/>
+  <attribute name='frame' type='NMTOKEN'>
+    <enumeration value='top'/>
+    <enumeration value='bottom'/>
+    <enumeration value='topbot'/>
+    <enumeration value='all'/>
+    <enumeration value='sides'/>
+    <enumeration value='none'/>
+  </attribute>
+  <attribute name='colsep' type='string'>
+    <enumeration value='0'/>
+    <enumeration value='1'/>
+  </attribute>
+  <attribute name='rowsep' type='string'>
+    <enumeration value='0'/>
+    <enumeration value='1'/>
+  </attribute>
+</tag>
+
+<elementRule role='tgroup'>
+  <sequence>
+    <ref label='colspec' occurs='*'/>
+    <ref label='thead' occurs='?'/>
+    <ref label='tbody'/>
+  </sequence>
+</elementRule>
+
+<tag name='tgroup'>
+  <ref role='tgroup.att'/>
+  <attribute name='cols' type='integer' required='true'/>
+  <attribute name='colsep' type='string'>
+    <enumeration value='0'/>
+    <enumeration value='1'/>
+  </attribute>
+  <attribute name='rowsep' type='string'>
+    <enumeration value='0'/>
+    <enumeration value='1'/>
+  </attribute>
+  <attribute name='align' type='NMTOKEN'>
+    <enumeration value='left'/>
+    <enumeration value='right'/>
+    <enumeration value='center'/>
+    <enumeration value='justify'/>
+  </attribute>
+</tag>
+
+<elementRule role='colspec'>
+  <empty/>
+  <!-- EMPTY -->
+</elementRule>
+
+<tag name='colspec'>
+  <ref role='colspec.att'/>
+  <attribute name='colnum' type='integer'/>
+  <attribute name='colname' type='NMTOKEN'/>
+  <attribute name='colwidth' type='string'/>
+  <attribute name='colsep' type='string'>
+    <enumeration value='0'/>
+    <enumeration value='1'/>
+  </attribute>
+  <attribute name='rowsep' type='string'>
+    <enumeration value='0'/>
+    <enumeration value='1'/>
+  </attribute>
+  <attribute name='align' type='NMTOKEN'>
+    <enumeration value='left'/>
+    <enumeration value='right'/>
+    <enumeration value='center'/>
+    <enumeration value='justify'/>
+    <enumeration value='char'/>
+  </attribute>
+  <attribute name='char' type='string'/>
+  <attribute name='charoff' type='NMTOKEN'/>
+</tag>
+
+<elementRule role='thead'>
+  <choice>
+    <ref label='row' occurs='+'/>
+  </choice>
+</elementRule>
+
+<tag name='thead'>
+  <ref role='thead.att'/>
+  <attribute name='valign' type='NMTOKEN'>
+    <enumeration value='top'/>
+    <enumeration value='middle'/>
+    <enumeration value='bottom'/>
+  </attribute>
+</tag>
+
+<elementRule role='tbody'>
+  <choice>
+    <ref label='row' occurs='+'/>
+  </choice>
+</elementRule>
+
+<tag name='tbody'>
+  <ref role='tbody.att'/>
+  <attribute name='valign' type='NMTOKEN'>
+    <enumeration value='top'/>
+    <enumeration value='middle'/>
+    <enumeration value='bottom'/>
+  </attribute>
+</tag>
+
+<elementRule role='row'>
+  <choice>
+    <ref label='entry' occurs='+'/>
+  </choice>
+</elementRule>
+
+<tag name='row'>
+  <ref role='row.att'/>
+  <attribute name='rowsep' type='string'>
+    <enumeration value='0'/>
+    <enumeration value='1'/>
+  </attribute>
+  <attribute name='valign' type='NMTOKEN'>
+    <enumeration value='top'/>
+    <enumeration value='middle'/>
+    <enumeration value='bottom'/>
+  </attribute>
+</tag>
+
+<elementRule role='entry'>
+  <mixed>
+    <choice occurs='*'>
+      <hedgeRef label='para.char.mix'/>
+      <hedgeRef label='tabentry.mix'/>
+    </choice>
+  </mixed>
+</elementRule>
+
+<tag name='entry'>
+  <ref role='entry.att'/>
+  <attribute name='colname' type='NMTOKEN'/>
+  <attribute name='namest' type='NMTOKEN'/>
+  <attribute name='nameend' type='NMTOKEN'/>
+  <attribute name='morerows' type='integer'/>
+  <attribute name='colsep' type='string'>
+    <enumeration value='0'/>
+    <enumeration value='1'/>
+  </attribute>
+  <attribute name='rowsep' type='string'>
+    <enumeration value='0'/>
+    <enumeration value='1'/>
+  </attribute>
+  <attribute name='align' type='NMTOKEN'>
+    <enumeration value='left'/>
+    <enumeration value='right'/>
+    <enumeration value='center'/>
+    <enumeration value='justify'/>
+    <enumeration value='char'/>
+  </attribute>
+  <attribute name='char' type='string'/>
+  <attribute name='charoff' type='NMTOKEN'/>
+  <attribute name='valign' type='NMTOKEN'>
+    <enumeration value='top'/>
+    <enumeration value='middle'/>
+    <enumeration value='bottom'/>
+  </attribute>
+</tag>
+
+</module>
\ No newline at end of file
diff --git a/schema/relax/docbook.rlx b/schema/relax/docbook.rlx
new file mode 100644 (file)
index 0000000..e449cea
--- /dev/null
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?> <!-- -*- XML -*- -->
+
+<module moduleVersion="1.2"
+       relaxCoreVersion="1.0"
+       targetNamespace=""
+       xmlns="http://www.xml.gr.jp/xmlns/relaxCore">
+
+  <interface>
+    <export label='set'/>
+    <export label='book'/>
+    <export label='chapter'/>
+    <export label='appendix'/>
+    <export label='article'/>
+    <export label='part'/>
+    <export label='reference'/>
+    <export label='refentry'/>
+    <export label='section'/>
+    <export label='sect1'/>
+    <export label='sect2'/>
+    <export label='sect3'/>
+    <export label='sect4'/>
+    <export label='sect5'/>
+    <export label="para"/>
+  </interface>
+
+  <include moduleLocation="dbpool.rlx"/>
+  <include moduleLocation="dbhier.rlx"/>
+  <include moduleLocation="dbtables.rlx"/>
+</module>
\ No newline at end of file
diff --git a/schema/relax/test.xml b/schema/relax/test.xml
new file mode 100644 (file)
index 0000000..fe5fd41
--- /dev/null
@@ -0,0 +1,6 @@
+<chapter xmlns="http://www.oasis-open.org/docbook/xmlschema/4.1.2">
+<title>foo</title>
+<para>
+some text
+</para>
+</chapter>
diff --git a/schema/trex/dbhier.trex b/schema/trex/dbhier.trex
new file mode 100644 (file)
index 0000000..9e9aa68
--- /dev/null
@@ -0,0 +1,2469 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<grammar xmlns="http://www.thaiopensource.com/trex"
+         xmlns:xsd="http://www.w3.org/2000/10/XMLSchema"
+         ns="http://www.oasis-open.org/docbook/xmlschema/4.1.2">
+
+   <define name="appendix.class.label">
+      <choice>
+         <ref name="appendix.label"/>
+      </choice>
+   </define>
+   <define name="article.class.label">
+      <choice>
+         <ref name="article.label"/>
+      </choice>
+   </define>
+   <define name="book.class.label">
+      <choice>
+         <ref name="book.label"/>
+      </choice>
+   </define>
+   <define name="chapter.class.label">
+      <choice>
+         <ref name="chapter.label"/>
+      </choice>
+   </define>
+   <define name="index.class.label">
+      <choice>
+         <ref name="index.label"/>
+         <ref name="setindex.label"/>
+      </choice>
+   </define>
+   <define name="refentry.class.label">
+      <choice>
+         <ref name="refentry.label"/>
+      </choice>
+   </define>
+   <define name="nav.class.label">
+      <choice>
+         <ref name="toc.label"/>
+         <ref name="lot.label"/>
+         <ref name="index.label"/>
+         <ref name="glossary.label"/>
+         <ref name="bibliography.label"/>
+      </choice>
+   </define>
+   <define name="divcomponent.mix.label">
+      <choice>
+         <ref name="list.class.label"/>
+         <ref name="admon.class.label"/>
+         <ref name="linespecific.class.label"/>
+         <ref name="synop.class.label"/>
+         <ref name="para.class.label"/>
+         <ref name="informal.class.label"/>
+         <ref name="formal.class.label"/>
+         <ref name="compound.class.label"/>
+         <ref name="genobj.class.label"/>
+         <ref name="descobj.class.label"/>
+         <ref name="ndxterm.class.label"/>
+         <ref name="beginpage.label"/>
+      </choice>
+   </define>
+   <define name="refcomponent.mix.label">
+      <choice>
+         <ref name="list.class.label"/>
+         <ref name="admon.class.label"/>
+         <ref name="linespecific.class.label"/>
+         <ref name="synop.class.label"/>
+         <ref name="para.class.label"/>
+         <ref name="informal.class.label"/>
+         <ref name="formal.class.label"/>
+         <ref name="compound.class.label"/>
+         <ref name="genobj.class.label"/>
+         <ref name="descobj.class.label"/>
+         <ref name="ndxterm.class.label"/>
+         <ref name="beginpage.label"/>
+      </choice>
+   </define>
+   <define name="indexdivcomponent.mix.label">
+      <choice>
+         <ref name="itemizedlist.label"/>
+         <ref name="orderedlist.label"/>
+         <ref name="variablelist.label"/>
+         <ref name="simplelist.label"/>
+         <ref name="linespecific.class.label"/>
+         <ref name="synop.class.label"/>
+         <ref name="para.class.label"/>
+         <ref name="informal.class.label"/>
+         <ref name="anchor.label"/>
+         <ref name="remark.label"/>
+         <ref name="link.char.class.label"/>
+         <ref name="beginpage.label"/>
+      </choice>
+   </define>
+   <define name="refname.char.mix.label">
+      <choice>
+         <ref name="tech.char.class.label"/>
+      </choice>
+   </define>
+   <define name="partcontent.mix.label">
+      <choice>
+         <ref name="appendix.class.label"/>
+         <ref name="chapter.class.label"/>
+         <ref name="nav.class.label"/>
+         <ref name="article.class.label"/>
+         <ref name="preface.label"/>
+         <ref name="refentry.class.label"/>
+         <ref name="reference.label"/>
+      </choice>
+   </define>
+   <define name="refinline.char.mix.label">
+      <choice>
+         <ref name="xref.char.class.label"/>
+         <ref name="gen.char.class.label"/>
+         <ref name="link.char.class.label"/>
+         <ref name="tech.char.class.label"/>
+         <ref name="base.char.class.label"/>
+         <ref name="docinfo.char.class.label"/>
+         <ref name="other.char.class.label"/>
+         <ref name="ndxterm.class.label"/>
+         <ref name="beginpage.label"/>
+      </choice>
+   </define>
+   <define name="refclass.char.mix.label">
+      <choice>
+         <ref name="application.label"/>
+      </choice>
+   </define>
+   <define name="div.title.content.label">
+      <choice>
+         <group>
+            <ref name="title.label"/>
+            <optional>
+               <ref name="subtitle.label"/>
+            </optional>
+            <optional>
+               <ref name="titleabbrev.label"/>
+            </optional>
+         </group>
+      </choice>
+   </define>
+   <define name="bookcomponent.title.content.label">
+      <choice>
+         <group>
+            <ref name="title.label"/>
+            <optional>
+               <ref name="subtitle.label"/>
+            </optional>
+            <optional>
+               <ref name="titleabbrev.label"/>
+            </optional>
+         </group>
+      </choice>
+   </define>
+   <define name="sect.title.content.label">
+      <choice>
+         <group>
+            <ref name="title.label"/>
+            <optional>
+               <ref name="subtitle.label"/>
+            </optional>
+            <optional>
+               <ref name="titleabbrev.label"/>
+            </optional>
+         </group>
+      </choice>
+   </define>
+   <define name="refsect.title.content.label">
+      <choice>
+         <group>
+            <ref name="title.label"/>
+            <optional>
+               <ref name="subtitle.label"/>
+            </optional>
+            <optional>
+               <ref name="titleabbrev.label"/>
+            </optional>
+         </group>
+      </choice>
+   </define>
+   <define name="bookcomponent.content.label">
+      <choice>
+         <choice>
+            <group>
+               <oneOrMore>
+                  <choice>
+                     <ref name="divcomponent.mix.label"/>
+                  </choice>
+               </oneOrMore>
+               <choice>
+                  <zeroOrMore>
+                     <ref name="sect1.label"/>
+                  </zeroOrMore>
+                  <zeroOrMore>
+                     <ref name="refentry.class.label"/>
+                  </zeroOrMore>
+                  <zeroOrMore>
+                     <ref name="simplesect.label"/>
+                  </zeroOrMore>
+                  <zeroOrMore>
+                     <ref name="section.label"/>
+                  </zeroOrMore>
+               </choice>
+            </group>
+            <choice>
+               <oneOrMore>
+                  <ref name="sect1.label"/>
+               </oneOrMore>
+               <oneOrMore>
+                  <ref name="refentry.class.label"/>
+               </oneOrMore>
+               <oneOrMore>
+                  <ref name="simplesect.label"/>
+               </oneOrMore>
+               <oneOrMore>
+                  <ref name="section.label"/>
+               </oneOrMore>
+            </choice>
+         </choice>
+      </choice>
+   </define>
+   <define name="set.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="set.label">
+      <choice>
+         <element name="set">
+            <ref name="set.role"/>
+            <group>
+               <optional>
+                  <ref name="div.title.content.label"/>
+               </optional>
+               <optional>
+                  <ref name="setinfo.label"/>
+               </optional>
+               <optional>
+                  <ref name="toc.label"/>
+               </optional>
+               <oneOrMore>
+                  <ref name="book.class.label"/>
+               </oneOrMore>
+               <optional>
+                  <ref name="setindex.label"/>
+               </optional>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="set.role">
+      <empty/>
+      <ref name="status.attrib.role"/>
+      <ref name="common.attrib.role"/>
+      <ref name="set.role.attrib.role"/>
+      <optional>
+         <attribute name="fpi">
+            <anyString/>
+         </attribute>
+      </optional>
+   </define>
+   <define name="setinfo.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="setinfo.label">
+      <choice>
+         <element name="setinfo">
+            <ref name="setinfo.role"/>
+            <group>
+               <ref name="infoContentModel.label"/>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="setinfo.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="setinfo.role.attrib.role"/>
+      <optional>
+         <attribute name="contents">
+            <data type="xsd:IDREFS"/>
+         </attribute>
+      </optional>
+   </define>
+   <define name="book.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="book.label">
+      <choice>
+         <element name="book">
+            <ref name="book.role"/>
+            <group>
+               <optional>
+                  <ref name="div.title.content.label"/>
+               </optional>
+               <optional>
+                  <ref name="bookinfo.label"/>
+               </optional>
+               <zeroOrMore>
+                  <ref name="dedication.label"/>
+                  <ref name="toc.label"/>
+                  <ref name="lot.label"/>
+                  <ref name="glossary.label"/>
+                  <ref name="bibliography.label"/>
+                  <ref name="preface.label"/>
+                  <ref name="chapter.class.label"/>
+                  <ref name="reference.label"/>
+                  <ref name="part.label"/>
+                  <ref name="article.class.label"/>
+                  <ref name="appendix.class.label"/>
+                  <ref name="index.class.label"/>
+                  <ref name="colophon.label"/>
+               </zeroOrMore>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="book.role">
+      <empty/>
+      <ref name="label.attrib.role"/>
+      <ref name="status.attrib.role"/>
+      <ref name="common.attrib.role"/>
+      <ref name="book.role.attrib.role"/>
+      <optional>
+         <attribute name="fpi">
+            <anyString/>
+         </attribute>
+      </optional>
+   </define>
+   <define name="bookinfo.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="bookinfo.label">
+      <choice>
+         <element name="bookinfo">
+            <ref name="bookinfo.role"/>
+            <group>
+               <ref name="infoContentModel.label"/>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="bookinfo.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="bookinfo.role.attrib.role"/>
+      <optional>
+         <attribute name="contents">
+            <data type="xsd:IDREFS"/>
+         </attribute>
+      </optional>
+   </define>
+   <define name="dedication.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="dedication.label">
+      <choice>
+         <element name="dedication">
+            <ref name="dedication.role"/>
+            <group>
+               <optional>
+                  <ref name="sect.title.content.label"/>
+               </optional>
+               <oneOrMore>
+                  <ref name="legalnotice.mix.label"/>
+               </oneOrMore>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="dedication.role">
+      <empty/>
+      <ref name="status.attrib.role"/>
+      <ref name="common.attrib.role"/>
+      <ref name="dedication.role.attrib.role"/>
+   </define>
+   <define name="colophon.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="colophon.label">
+      <choice>
+         <element name="colophon">
+            <ref name="colophon.role"/>
+            <group>
+               <optional>
+                  <ref name="sect.title.content.label"/>
+               </optional>
+               <oneOrMore>
+                  <ref name="textobject.mix.label"/>
+               </oneOrMore>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="colophon.role">
+      <empty/>
+      <ref name="status.attrib.role"/>
+      <ref name="common.attrib.role"/>
+      <ref name="colophon.role.attrib.role"/>
+   </define>
+   <define name="toc.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="toc.label">
+      <choice>
+         <element name="toc">
+            <ref name="toc.role"/>
+            <group>
+               <optional>
+                  <ref name="bookcomponent.title.content.label"/>
+               </optional>
+               <zeroOrMore>
+                  <ref name="tocfront.label"/>
+               </zeroOrMore>
+               <zeroOrMore>
+                  <ref name="tocpart.label"/>
+                  <ref name="tocchap.label"/>
+               </zeroOrMore>
+               <zeroOrMore>
+                  <ref name="tocback.label"/>
+               </zeroOrMore>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="toc.role">
+      <empty/>
+      <ref name="pagenum.attrib.role"/>
+      <ref name="common.attrib.role"/>
+      <ref name="toc.role.attrib.role"/>
+   </define>
+   <define name="tocfront.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="tocfront.label">
+      <choice>
+         <element name="tocfront">
+            <ref name="tocfront.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="para.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="tocfront.role">
+      <empty/>
+      <ref name="label.attrib.role"/>
+      <ref name="linkend.attrib.role"/>
+      <ref name="pagenum.attrib.role"/>
+      <ref name="common.attrib.role"/>
+      <ref name="tocfront.role.attrib.role"/>
+   </define>
+   <define name="tocentry.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="tocentry.label">
+      <choice>
+         <element name="tocentry">
+            <ref name="tocentry.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="para.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="tocentry.role">
+      <empty/>
+      <ref name="linkend.attrib.role"/>
+      <ref name="pagenum.attrib.role"/>
+      <ref name="common.attrib.role"/>
+      <ref name="tocentry.role.attrib.role"/>
+   </define>
+   <define name="tocpart.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="tocpart.label">
+      <choice>
+         <element name="tocpart">
+            <ref name="tocpart.role"/>
+            <group>
+               <oneOrMore>
+                  <ref name="tocentry.label"/>
+               </oneOrMore>
+               <zeroOrMore>
+                  <ref name="tocchap.label"/>
+               </zeroOrMore>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="tocpart.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="tocpart.role.attrib.role"/>
+   </define>
+   <define name="tocchap.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="tocchap.label">
+      <choice>
+         <element name="tocchap">
+            <ref name="tocchap.role"/>
+            <group>
+               <oneOrMore>
+                  <ref name="tocentry.label"/>
+               </oneOrMore>
+               <zeroOrMore>
+                  <ref name="toclevel1.label"/>
+               </zeroOrMore>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="tocchap.role">
+      <empty/>
+      <ref name="label.attrib.role"/>
+      <ref name="common.attrib.role"/>
+      <ref name="tocchap.role.attrib.role"/>
+   </define>
+   <define name="toclevel1.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="toclevel1.label">
+      <choice>
+         <element name="toclevel1">
+            <ref name="toclevel1.role"/>
+            <group>
+               <oneOrMore>
+                  <ref name="tocentry.label"/>
+               </oneOrMore>
+               <zeroOrMore>
+                  <ref name="toclevel2.label"/>
+               </zeroOrMore>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="toclevel1.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="toclevel1.role.attrib.role"/>
+   </define>
+   <define name="toclevel2.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="toclevel2.label">
+      <choice>
+         <element name="toclevel2">
+            <ref name="toclevel2.role"/>
+            <group>
+               <oneOrMore>
+                  <ref name="tocentry.label"/>
+               </oneOrMore>
+               <zeroOrMore>
+                  <ref name="toclevel3.label"/>
+               </zeroOrMore>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="toclevel2.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="toclevel2.role.attrib.role"/>
+   </define>
+   <define name="toclevel3.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="toclevel3.label">
+      <choice>
+         <element name="toclevel3">
+            <ref name="toclevel3.role"/>
+            <group>
+               <oneOrMore>
+                  <ref name="tocentry.label"/>
+               </oneOrMore>
+               <zeroOrMore>
+                  <ref name="toclevel4.label"/>
+               </zeroOrMore>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="toclevel3.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="toclevel3.role.attrib.role"/>
+   </define>
+   <define name="toclevel4.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="toclevel4.label">
+      <choice>
+         <element name="toclevel4">
+            <ref name="toclevel4.role"/>
+            <group>
+               <oneOrMore>
+                  <ref name="tocentry.label"/>
+               </oneOrMore>
+               <zeroOrMore>
+                  <ref name="toclevel5.label"/>
+               </zeroOrMore>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="toclevel4.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="toclevel4.role.attrib.role"/>
+   </define>
+   <define name="toclevel5.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="toclevel5.label">
+      <choice>
+         <element name="toclevel5">
+            <ref name="toclevel5.role"/>
+            <group>
+               <oneOrMore>
+                  <ref name="tocentry.label"/>
+               </oneOrMore>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="toclevel5.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="toclevel5.role.attrib.role"/>
+   </define>
+   <define name="tocback.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="tocback.label">
+      <choice>
+         <element name="tocback">
+            <ref name="tocback.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="para.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="tocback.role">
+      <empty/>
+      <ref name="label.attrib.role"/>
+      <ref name="linkend.attrib.role"/>
+      <ref name="pagenum.attrib.role"/>
+      <ref name="common.attrib.role"/>
+      <ref name="tocback.role.attrib.role"/>
+   </define>
+   <define name="lot.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="lot.label">
+      <choice>
+         <element name="lot">
+            <ref name="lot.role"/>
+            <group>
+               <optional>
+                  <ref name="bookcomponent.title.content.label"/>
+               </optional>
+               <zeroOrMore>
+                  <ref name="lotentry.label"/>
+               </zeroOrMore>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="lot.role">
+      <empty/>
+      <ref name="label.attrib.role"/>
+      <ref name="common.attrib.role"/>
+      <ref name="lot.role.attrib.role"/>
+   </define>
+   <define name="lotentry.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="lotentry.label">
+      <choice>
+         <element name="lotentry">
+            <ref name="lotentry.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="para.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="lotentry.role">
+      <empty/>
+      <ref name="pagenum.attrib.role"/>
+      <ref name="common.attrib.role"/>
+      <ref name="linkend.attrib.role"/>
+      <ref name="lotentry.role.attrib.role"/>
+      <optional>
+         <attribute name="srccredit">
+            <anyString/>
+         </attribute>
+      </optional>
+   </define>
+   <define name="appendix.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="appendix.label">
+      <choice>
+         <element name="appendix">
+            <ref name="appendix.role"/>
+            <group>
+               <optional>
+                  <ref name="appendixinfo.label"/>
+               </optional>
+               <ref name="bookcomponent.title.content.label"/>
+               <zeroOrMore>
+                  <ref name="nav.class.label"/>
+               </zeroOrMore>
+               <optional>
+                  <ref name="tocchap.label"/>
+               </optional>
+               <ref name="bookcomponent.content.label"/>
+               <zeroOrMore>
+                  <ref name="nav.class.label"/>
+               </zeroOrMore>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="appendix.role">
+      <empty/>
+      <ref name="label.attrib.role"/>
+      <ref name="status.attrib.role"/>
+      <ref name="common.attrib.role"/>
+      <ref name="appendix.role.attrib.role"/>
+   </define>
+   <define name="chapter.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="chapter.label">
+      <choice>
+         <element name="chapter">
+            <ref name="chapter.role"/>
+            <group>
+               <optional>
+                  <ref name="chapterinfo.label"/>
+               </optional>
+               <ref name="bookcomponent.title.content.label"/>
+               <zeroOrMore>
+                  <ref name="nav.class.label"/>
+               </zeroOrMore>
+               <optional>
+                  <ref name="tocchap.label"/>
+               </optional>
+               <ref name="bookcomponent.content.label"/>
+               <zeroOrMore>
+                  <ref name="nav.class.label"/>
+               </zeroOrMore>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="chapter.role">
+      <empty/>
+      <ref name="label.attrib.role"/>
+      <ref name="status.attrib.role"/>
+      <ref name="common.attrib.role"/>
+      <ref name="chapter.role.attrib.role"/>
+   </define>
+   <define name="part.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="part.label">
+      <choice>
+         <element name="part">
+            <ref name="part.role"/>
+            <group>
+               <optional>
+                  <ref name="partinfo.label"/>
+               </optional>
+               <ref name="bookcomponent.title.content.label"/>
+               <optional>
+                  <ref name="partintro.label"/>
+               </optional>
+               <oneOrMore>
+                  <ref name="partcontent.mix.label"/>
+               </oneOrMore>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="part.role">
+      <empty/>
+      <ref name="label.attrib.role"/>
+      <ref name="status.attrib.role"/>
+      <ref name="common.attrib.role"/>
+      <ref name="part.role.attrib.role"/>
+   </define>
+   <define name="preface.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="preface.label">
+      <choice>
+         <element name="preface">
+            <ref name="preface.role"/>
+            <group>
+               <optional>
+                  <ref name="prefaceinfo.label"/>
+               </optional>
+               <ref name="bookcomponent.title.content.label"/>
+               <zeroOrMore>
+                  <ref name="nav.class.label"/>
+               </zeroOrMore>
+               <optional>
+                  <ref name="tocchap.label"/>
+               </optional>
+               <ref name="bookcomponent.content.label"/>
+               <zeroOrMore>
+                  <ref name="nav.class.label"/>
+               </zeroOrMore>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="preface.role">
+      <empty/>
+      <ref name="status.attrib.role"/>
+      <ref name="common.attrib.role"/>
+      <ref name="preface.role.attrib.role"/>
+   </define>
+   <define name="reference.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="reference.label">
+      <choice>
+         <element name="reference">
+            <ref name="reference.role"/>
+            <group>
+               <optional>
+                  <ref name="referenceinfo.label"/>
+               </optional>
+               <ref name="bookcomponent.title.content.label"/>
+               <optional>
+                  <ref name="partintro.label"/>
+               </optional>
+               <oneOrMore>
+                  <ref name="refentry.class.label"/>
+               </oneOrMore>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="reference.role">
+      <empty/>
+      <ref name="label.attrib.role"/>
+      <ref name="status.attrib.role"/>
+      <ref name="common.attrib.role"/>
+      <ref name="reference.role.attrib.role"/>
+   </define>
+   <define name="partintro.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="partintro.label">
+      <choice>
+         <element name="partintro">
+            <ref name="partintro.role"/>
+            <group>
+               <optional>
+                  <ref name="div.title.content.label"/>
+               </optional>
+               <ref name="bookcomponent.content.label"/>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="partintro.role">
+      <empty/>
+      <ref name="label.attrib.role"/>
+      <ref name="common.attrib.role"/>
+      <ref name="partintro.role.attrib.role"/>
+   </define>
+   <define name="appendixinfo.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="appendixinfo.label">
+      <choice>
+         <element name="appendixinfo">
+            <ref name="appendixinfo.role"/>
+            <group>
+               <ref name="infoContentModel.label"/>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="appendixinfo.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="appendixinfo.role.attrib.role"/>
+   </define>
+   <define name="bibliographyinfo.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="bibliographyinfo.label">
+      <choice>
+         <element name="bibliographyinfo">
+            <ref name="bibliographyinfo.role"/>
+            <group>
+               <ref name="infoContentModel.label"/>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="bibliographyinfo.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="bibliographyinfo.role.attrib.role"/>
+   </define>
+   <define name="chapterinfo.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="chapterinfo.label">
+      <choice>
+         <element name="chapterinfo">
+            <ref name="chapterinfo.role"/>
+            <group>
+               <ref name="infoContentModel.label"/>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="chapterinfo.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="chapterinfo.role.attrib.role"/>
+   </define>
+   <define name="glossaryinfo.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="glossaryinfo.label">
+      <choice>
+         <element name="glossaryinfo">
+            <ref name="glossaryinfo.role"/>
+            <group>
+               <ref name="infoContentModel.label"/>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="glossaryinfo.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="glossaryinfo.role.attrib.role"/>
+   </define>
+   <define name="indexinfo.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="indexinfo.label">
+      <choice>
+         <element name="indexinfo">
+            <ref name="indexinfo.role"/>
+            <group>
+               <ref name="infoContentModel.label"/>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="indexinfo.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="indexinfo.role.attrib.role"/>
+   </define>
+   <define name="setindexinfo.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="setindexinfo.label">
+      <choice>
+         <element name="setindexinfo">
+            <ref name="setindexinfo.role"/>
+            <group>
+               <ref name="infoContentModel.label"/>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="setindexinfo.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="setindexinfo.role.attrib.role"/>
+   </define>
+   <define name="partinfo.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="partinfo.label">
+      <choice>
+         <element name="partinfo">
+            <ref name="partinfo.role"/>
+            <group>
+               <ref name="infoContentModel.label"/>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="partinfo.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="partinfo.role.attrib.role"/>
+   </define>
+   <define name="prefaceinfo.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="prefaceinfo.label">
+      <choice>
+         <element name="prefaceinfo">
+            <ref name="prefaceinfo.role"/>
+            <group>
+               <ref name="infoContentModel.label"/>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="prefaceinfo.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="prefaceinfo.role.attrib.role"/>
+   </define>
+   <define name="refentryinfo.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="refentryinfo.label">
+      <choice>
+         <element name="refentryinfo">
+            <ref name="refentryinfo.role"/>
+            <group>
+               <ref name="infoContentModel.label"/>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="refentryinfo.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="refentryinfo.role.attrib.role"/>
+   </define>
+   <define name="refsect1info.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="refsect1info.label">
+      <choice>
+         <element name="refsect1info">
+            <ref name="refsect1info.role"/>
+            <group>
+               <ref name="infoContentModel.label"/>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="refsect1info.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="refsect1info.role.attrib.role"/>
+   </define>
+   <define name="refsect2info.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="refsect2info.label">
+      <choice>
+         <element name="refsect2info">
+            <ref name="refsect2info.role"/>
+            <group>
+               <ref name="infoContentModel.label"/>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="refsect2info.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="refsect2info.role.attrib.role"/>
+   </define>
+   <define name="refsect3info.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="refsect3info.label">
+      <choice>
+         <element name="refsect3info">
+            <ref name="refsect3info.role"/>
+            <group>
+               <ref name="infoContentModel.label"/>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="refsect3info.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="refsect3info.role.attrib.role"/>
+   </define>
+   <define name="refsynopsisdivinfo.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="refsynopsisdivinfo.label">
+      <choice>
+         <element name="refsynopsisdivinfo">
+            <ref name="refsynopsisdivinfo.role"/>
+            <group>
+               <ref name="infoContentModel.label"/>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="refsynopsisdivinfo.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="refsynopsisdivinfo.role.attrib.role"/>
+   </define>
+   <define name="referenceinfo.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="referenceinfo.label">
+      <choice>
+         <element name="referenceinfo">
+            <ref name="referenceinfo.role"/>
+            <group>
+               <ref name="infoContentModel.label"/>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="referenceinfo.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="referenceinfo.role.attrib.role"/>
+   </define>
+   <define name="sect1info.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="sect1info.label">
+      <choice>
+         <element name="sect1info">
+            <ref name="sect1info.role"/>
+            <group>
+               <ref name="infoContentModel.label"/>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="sect1info.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="sect1info.role.attrib.role"/>
+   </define>
+   <define name="sect2info.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="sect2info.label">
+      <choice>
+         <element name="sect2info">
+            <ref name="sect2info.role"/>
+            <group>
+               <ref name="infoContentModel.label"/>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="sect2info.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="sect2info.role.attrib.role"/>
+   </define>
+   <define name="sect3info.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="sect3info.label">
+      <choice>
+         <element name="sect3info">
+            <ref name="sect3info.role"/>
+            <group>
+               <ref name="infoContentModel.label"/>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="sect3info.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="sect3info.role.attrib.role"/>
+   </define>
+   <define name="sect4info.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="sect4info.label">
+      <choice>
+         <element name="sect4info">
+            <ref name="sect4info.role"/>
+            <group>
+               <ref name="infoContentModel.label"/>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="sect4info.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="sect4info.role.attrib.role"/>
+   </define>
+   <define name="sect5info.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="sect5info.label">
+      <choice>
+         <element name="sect5info">
+            <ref name="sect5info.role"/>
+            <group>
+               <ref name="infoContentModel.label"/>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="sect5info.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="sect5info.role.attrib.role"/>
+   </define>
+   <define name="section.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="section.label">
+      <choice>
+         <element name="section">
+            <ref name="section.role"/>
+            <group>
+               <optional>
+                  <ref name="sectioninfo.label"/>
+               </optional>
+               <ref name="sect.title.content.label"/>
+               <zeroOrMore>
+                  <ref name="nav.class.label"/>
+               </zeroOrMore>
+               <choice>
+                  <group>
+                     <oneOrMore>
+                        <ref name="divcomponent.mix.label"/>
+                     </oneOrMore>
+                     <choice>
+                        <zeroOrMore>
+                           <ref name="refentry.class.label"/>
+                        </zeroOrMore>
+                        <zeroOrMore>
+                           <ref name="section.label"/>
+                        </zeroOrMore>
+                     </choice>
+                  </group>
+                  <choice>
+                     <oneOrMore>
+                        <ref name="refentry.class.label"/>
+                     </oneOrMore>
+                     <oneOrMore>
+                        <ref name="section.label"/>
+                     </oneOrMore>
+                  </choice>
+               </choice>
+               <zeroOrMore>
+                  <ref name="nav.class.label"/>
+               </zeroOrMore>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="section.role">
+      <empty/>
+      <ref name="label.attrib.role"/>
+      <ref name="status.attrib.role"/>
+      <ref name="common.attrib.role"/>
+      <ref name="section.role.attrib.role"/>
+   </define>
+   <define name="sectioninfo.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="sectioninfo.label">
+      <choice>
+         <element name="sectioninfo">
+            <ref name="sectioninfo.role"/>
+            <group>
+               <ref name="infoContentModel.label"/>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="sectioninfo.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="sectioninfo.role.attrib.role"/>
+   </define>
+   <define name="sect1.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="sect1.label">
+      <choice>
+         <element name="sect1">
+            <ref name="sect1.role"/>
+            <group>
+               <optional>
+                  <ref name="sect1info.label"/>
+               </optional>
+               <ref name="sect.title.content.label"/>
+               <zeroOrMore>
+                  <ref name="nav.class.label"/>
+               </zeroOrMore>
+               <choice>
+                  <group>
+                     <oneOrMore>
+                        <ref name="divcomponent.mix.label"/>
+                     </oneOrMore>
+                     <choice>
+                        <zeroOrMore>
+                           <ref name="refentry.class.label"/>
+                        </zeroOrMore>
+                        <zeroOrMore>
+                           <ref name="sect2.label"/>
+                        </zeroOrMore>
+                        <zeroOrMore>
+                           <ref name="simplesect.label"/>
+                        </zeroOrMore>
+                     </choice>
+                  </group>
+                  <choice>
+                     <oneOrMore>
+                        <ref name="refentry.class.label"/>
+                     </oneOrMore>
+                     <oneOrMore>
+                        <ref name="sect2.label"/>
+                     </oneOrMore>
+                     <oneOrMore>
+                        <ref name="simplesect.label"/>
+                     </oneOrMore>
+                  </choice>
+               </choice>
+               <zeroOrMore>
+                  <ref name="nav.class.label"/>
+               </zeroOrMore>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="sect1.role">
+      <empty/>
+      <ref name="label.attrib.role"/>
+      <ref name="status.attrib.role"/>
+      <ref name="common.attrib.role"/>
+      <ref name="sect1.role.attrib.role"/>
+      <optional>
+         <attribute name="renderas">
+            <choice>
+               <string>sect2</string>
+               <string>sect3</string>
+               <string>sect4</string>
+               <string>sect5</string>
+            </choice>
+         </attribute>
+      </optional>
+   </define>
+   <define name="sect2.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="sect2.label">
+      <choice>
+         <element name="sect2">
+            <ref name="sect2.role"/>
+            <group>
+               <optional>
+                  <ref name="sect2info.label"/>
+               </optional>
+               <ref name="sect.title.content.label"/>
+               <zeroOrMore>
+                  <ref name="nav.class.label"/>
+               </zeroOrMore>
+               <choice>
+                  <group>
+                     <oneOrMore>
+                        <ref name="divcomponent.mix.label"/>
+                     </oneOrMore>
+                     <choice>
+                        <zeroOrMore>
+                           <ref name="refentry.class.label"/>
+                        </zeroOrMore>
+                        <zeroOrMore>
+                           <ref name="sect3.label"/>
+                        </zeroOrMore>
+                        <zeroOrMore>
+                           <ref name="simplesect.label"/>
+                        </zeroOrMore>
+                     </choice>
+                  </group>
+                  <choice>
+                     <oneOrMore>
+                        <ref name="refentry.class.label"/>
+                     </oneOrMore>
+                     <oneOrMore>
+                        <ref name="sect3.label"/>
+                     </oneOrMore>
+                     <oneOrMore>
+                        <ref name="simplesect.label"/>
+                     </oneOrMore>
+                  </choice>
+               </choice>
+               <zeroOrMore>
+                  <ref name="nav.class.label"/>
+               </zeroOrMore>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="sect2.role">
+      <empty/>
+      <ref name="label.attrib.role"/>
+      <ref name="status.attrib.role"/>
+      <ref name="common.attrib.role"/>
+      <ref name="sect2.role.attrib.role"/>
+      <optional>
+         <attribute name="renderas">
+            <choice>
+               <string>sect1</string>
+               <string>sect3</string>
+               <string>sect4</string>
+               <string>sect5</string>
+            </choice>
+         </attribute>
+      </optional>
+   </define>
+   <define name="sect3.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="sect3.label">
+      <choice>
+         <element name="sect3">
+            <ref name="sect3.role"/>
+            <group>
+               <optional>
+                  <ref name="sect3info.label"/>
+               </optional>
+               <ref name="sect.title.content.label"/>
+               <zeroOrMore>
+                  <ref name="nav.class.label"/>
+               </zeroOrMore>
+               <choice>
+                  <group>
+                     <oneOrMore>
+                        <ref name="divcomponent.mix.label"/>
+                     </oneOrMore>
+                     <choice>
+                        <zeroOrMore>
+                           <ref name="refentry.class.label"/>
+                        </zeroOrMore>
+                        <zeroOrMore>
+                           <ref name="sect4.label"/>
+                        </zeroOrMore>
+                        <zeroOrMore>
+                           <ref name="simplesect.label"/>
+                        </zeroOrMore>
+                     </choice>
+                  </group>
+                  <choice>
+                     <oneOrMore>
+                        <ref name="refentry.class.label"/>
+                     </oneOrMore>
+                     <oneOrMore>
+                        <ref name="sect4.label"/>
+                     </oneOrMore>
+                     <oneOrMore>
+                        <ref name="simplesect.label"/>
+                     </oneOrMore>
+                  </choice>
+               </choice>
+               <zeroOrMore>
+                  <ref name="nav.class.label"/>
+               </zeroOrMore>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="sect3.role">
+      <empty/>
+      <ref name="label.attrib.role"/>
+      <ref name="status.attrib.role"/>
+      <ref name="common.attrib.role"/>
+      <ref name="sect3.role.attrib.role"/>
+      <optional>
+         <attribute name="renderas">
+            <choice>
+               <string>sect1</string>
+               <string>sect2</string>
+               <string>sect4</string>
+               <string>sect5</string>
+            </choice>
+         </attribute>
+      </optional>
+   </define>
+   <define name="sect4.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="sect4.label">
+      <choice>
+         <element name="sect4">
+            <ref name="sect4.role"/>
+            <group>
+               <optional>
+                  <ref name="sect4info.label"/>
+               </optional>
+               <ref name="sect.title.content.label"/>
+               <zeroOrMore>
+                  <ref name="nav.class.label"/>
+               </zeroOrMore>
+               <choice>
+                  <group>
+                     <oneOrMore>
+                        <ref name="divcomponent.mix.label"/>
+                     </oneOrMore>
+                     <choice>
+                        <zeroOrMore>
+                           <ref name="refentry.class.label"/>
+                        </zeroOrMore>
+                        <zeroOrMore>
+                           <ref name="sect5.label"/>
+                        </zeroOrMore>
+                        <zeroOrMore>
+                           <ref name="simplesect.label"/>
+                        </zeroOrMore>
+                     </choice>
+                  </group>
+                  <choice>
+                     <oneOrMore>
+                        <ref name="refentry.class.label"/>
+                     </oneOrMore>
+                     <oneOrMore>
+                        <ref name="sect5.label"/>
+                     </oneOrMore>
+                     <oneOrMore>
+                        <ref name="simplesect.label"/>
+                     </oneOrMore>
+                  </choice>
+               </choice>
+               <zeroOrMore>
+                  <ref name="nav.class.label"/>
+               </zeroOrMore>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="sect4.role">
+      <empty/>
+      <ref name="label.attrib.role"/>
+      <ref name="status.attrib.role"/>
+      <ref name="common.attrib.role"/>
+      <ref name="sect4.role.attrib.role"/>
+      <optional>
+         <attribute name="renderas">
+            <choice>
+               <string>sect1</string>
+               <string>sect2</string>
+               <string>sect3</string>
+               <string>sect5</string>
+            </choice>
+         </attribute>
+      </optional>
+   </define>
+   <define name="sect5.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="sect5.label">
+      <choice>
+         <element name="sect5">
+            <ref name="sect5.role"/>
+            <group>
+               <optional>
+                  <ref name="sect5info.label"/>
+               </optional>
+               <ref name="sect.title.content.label"/>
+               <zeroOrMore>
+                  <ref name="nav.class.label"/>
+               </zeroOrMore>
+               <choice>
+                  <group>
+                     <oneOrMore>
+                        <ref name="divcomponent.mix.label"/>
+                     </oneOrMore>
+                     <choice>
+                        <zeroOrMore>
+                           <ref name="refentry.class.label"/>
+                        </zeroOrMore>
+                        <zeroOrMore>
+                           <ref name="simplesect.label"/>
+                        </zeroOrMore>
+                     </choice>
+                  </group>
+                  <choice>
+                     <oneOrMore>
+                        <ref name="refentry.class.label"/>
+                     </oneOrMore>
+                     <oneOrMore>
+                        <ref name="simplesect.label"/>
+                     </oneOrMore>
+                  </choice>
+               </choice>
+               <zeroOrMore>
+                  <ref name="nav.class.label"/>
+               </zeroOrMore>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="sect5.role">
+      <empty/>
+      <ref name="label.attrib.role"/>
+      <ref name="status.attrib.role"/>
+      <ref name="common.attrib.role"/>
+      <ref name="sect5.role.attrib.role"/>
+      <optional>
+         <attribute name="renderas">
+            <choice>
+               <string>sect1</string>
+               <string>sect2</string>
+               <string>sect3</string>
+               <string>sect4</string>
+            </choice>
+         </attribute>
+      </optional>
+   </define>
+   <define name="simplesect.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="simplesect.label">
+      <choice>
+         <element name="simplesect">
+            <ref name="simplesect.role"/>
+            <group>
+               <ref name="sect.title.content.label"/>
+               <oneOrMore>
+                  <ref name="divcomponent.mix.label"/>
+               </oneOrMore>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="simplesect.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="simplesect.role.attrib.role"/>
+   </define>
+   <define name="bibliography.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="bibliography.label">
+      <choice>
+         <element name="bibliography">
+            <ref name="bibliography.role"/>
+            <group>
+               <zeroOrMore>
+                  <ref name="bibliographyinfo.label"/>
+               </zeroOrMore>
+               <optional>
+                  <ref name="bookcomponent.title.content.label"/>
+               </optional>
+               <zeroOrMore>
+                  <ref name="component.mix.label"/>
+               </zeroOrMore>
+               <choice>
+                  <oneOrMore>
+                     <ref name="bibliodiv.label"/>
+                  </oneOrMore>
+                  <oneOrMore>
+                     <choice>
+                        <ref name="biblioentry.label"/>
+                        <ref name="bibliomixed.label"/>
+                     </choice>
+                  </oneOrMore>
+               </choice>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="bibliography.role">
+      <empty/>
+      <ref name="status.attrib.role"/>
+      <ref name="common.attrib.role"/>
+      <ref name="bibliography.role.attrib.role"/>
+   </define>
+   <define name="bibliodiv.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="bibliodiv.label">
+      <choice>
+         <element name="bibliodiv">
+            <ref name="bibliodiv.role"/>
+            <group>
+               <optional>
+                  <ref name="sect.title.content.label"/>
+               </optional>
+               <zeroOrMore>
+                  <ref name="component.mix.label"/>
+               </zeroOrMore>
+               <oneOrMore>
+                  <choice>
+                     <ref name="biblioentry.label"/>
+                     <ref name="bibliomixed.label"/>
+                  </choice>
+               </oneOrMore>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="bibliodiv.role">
+      <empty/>
+      <ref name="status.attrib.role"/>
+      <ref name="common.attrib.role"/>
+      <ref name="bibliodiv.role.attrib.role"/>
+   </define>
+   <define name="glossary.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="glossary.label">
+      <choice>
+         <element name="glossary">
+            <ref name="glossary.role"/>
+            <group>
+               <zeroOrMore>
+                  <ref name="glossaryinfo.label"/>
+               </zeroOrMore>
+               <optional>
+                  <ref name="bookcomponent.title.content.label"/>
+               </optional>
+               <zeroOrMore>
+                  <ref name="component.mix.label"/>
+               </zeroOrMore>
+               <choice>
+                  <oneOrMore>
+                     <ref name="glossdiv.label"/>
+                  </oneOrMore>
+                  <oneOrMore>
+                     <ref name="glossentry.label"/>
+                  </oneOrMore>
+               </choice>
+               <optional>
+                  <ref name="bibliography.label"/>
+               </optional>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="glossary.role">
+      <empty/>
+      <ref name="status.attrib.role"/>
+      <ref name="common.attrib.role"/>
+      <ref name="glossary.role.attrib.role"/>
+   </define>
+   <define name="glossdiv.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="glossdiv.label">
+      <choice>
+         <element name="glossdiv">
+            <ref name="glossdiv.role"/>
+            <group>
+               <optional>
+                  <ref name="sect.title.content.label"/>
+               </optional>
+               <zeroOrMore>
+                  <ref name="component.mix.label"/>
+               </zeroOrMore>
+               <oneOrMore>
+                  <ref name="glossentry.label"/>
+               </oneOrMore>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="glossdiv.role">
+      <empty/>
+      <ref name="status.attrib.role"/>
+      <ref name="common.attrib.role"/>
+      <ref name="glossdiv.role.attrib.role"/>
+   </define>
+   <define name="indexes.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="index.label">
+      <choice>
+         <element name="index">
+            <ref name="index.role"/>
+            <group>
+               <zeroOrMore>
+                  <ref name="indexinfo.label"/>
+               </zeroOrMore>
+               <optional>
+                  <ref name="bookcomponent.title.content.label"/>
+               </optional>
+               <zeroOrMore>
+                  <ref name="component.mix.label"/>
+               </zeroOrMore>
+               <choice>
+                  <oneOrMore>
+                     <ref name="indexdiv.label"/>
+                  </oneOrMore>
+                  <oneOrMore>
+                     <ref name="indexentry.label"/>
+                  </oneOrMore>
+               </choice>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="index.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="indexes.role.attrib.role"/>
+   </define>
+   <define name="setindex.label">
+      <choice>
+         <element name="setindex">
+            <ref name="setindex.role"/>
+            <group>
+               <zeroOrMore>
+                  <ref name="setindexinfo.label"/>
+               </zeroOrMore>
+               <optional>
+                  <ref name="bookcomponent.title.content.label"/>
+               </optional>
+               <zeroOrMore>
+                  <ref name="component.mix.label"/>
+               </zeroOrMore>
+               <choice>
+                  <oneOrMore>
+                     <ref name="indexdiv.label"/>
+                  </oneOrMore>
+                  <oneOrMore>
+                     <ref name="indexentry.label"/>
+                  </oneOrMore>
+               </choice>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="setindex.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="indexes.role.attrib.role"/>
+   </define>
+   <define name="indexdiv.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="indexdiv.label">
+      <choice>
+         <element name="indexdiv">
+            <ref name="indexdiv.role"/>
+            <group>
+               <optional>
+                  <ref name="sect.title.content.label"/>
+               </optional>
+               <group>
+                  <zeroOrMore>
+                     <ref name="indexdivcomponent.mix.label"/>
+                  </zeroOrMore>
+                  <zeroOrMore>
+                     <ref name="indexentry.label"/>
+                  </zeroOrMore>
+                  <ref name="segmentedlist.label"/>
+               </group>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="indexdiv.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="indexdiv.role.attrib.role"/>
+   </define>
+   <define name="indexentry.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="indexentry.label">
+      <choice>
+         <element name="indexentry">
+            <ref name="indexentry.role"/>
+            <group>
+               <ref name="primaryie.label"/>
+               <zeroOrMore>
+                  <ref name="seeie.label"/>
+                  <ref name="seealsoie.label"/>
+               </zeroOrMore>
+               <zeroOrMore>
+                  <group>
+                     <ref name="secondaryie.label"/>
+                     <zeroOrMore>
+                        <ref name="seeie.label"/>
+                        <ref name="seealsoie.label"/>
+                        <ref name="tertiaryie.label"/>
+                     </zeroOrMore>
+                  </group>
+               </zeroOrMore>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="indexentry.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="indexentry.role.attrib.role"/>
+   </define>
+   <define name="primsecterie.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="primaryie.label">
+      <choice>
+         <element name="primaryie">
+            <ref name="primaryie.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="ndxterm.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="primaryie.role">
+      <empty/>
+      <ref name="linkends.attrib.role"/>
+      <ref name="common.attrib.role"/>
+      <ref name="primsecterie.role.attrib.role"/>
+   </define>
+   <define name="secondaryie.label">
+      <choice>
+         <element name="secondaryie">
+            <ref name="secondaryie.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="ndxterm.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="secondaryie.role">
+      <empty/>
+      <ref name="linkends.attrib.role"/>
+      <ref name="common.attrib.role"/>
+      <ref name="primsecterie.role.attrib.role"/>
+   </define>
+   <define name="tertiaryie.label">
+      <choice>
+         <element name="tertiaryie">
+            <ref name="tertiaryie.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="ndxterm.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="tertiaryie.role">
+      <empty/>
+      <ref name="linkends.attrib.role"/>
+      <ref name="common.attrib.role"/>
+      <ref name="primsecterie.role.attrib.role"/>
+   </define>
+   <define name="seeie.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="seeie.label">
+      <choice>
+         <element name="seeie">
+            <ref name="seeie.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="ndxterm.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="seeie.role">
+      <empty/>
+      <ref name="linkend.attrib.role"/>
+      <ref name="common.attrib.role"/>
+      <ref name="seeie.role.attrib.role"/>
+   </define>
+   <define name="seealsoie.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="seealsoie.label">
+      <choice>
+         <element name="seealsoie">
+            <ref name="seealsoie.role"/>
+            <zeroOrMore>
+               <ref name="ndxterm.char.mix.label"/>
+            </zeroOrMore>
+         </element>
+      </choice>
+   </define>
+   <define name="seealsoie.role">
+      <empty/>
+      <ref name="linkends.attrib.role"/>
+      <ref name="common.attrib.role"/>
+      <ref name="seealsoie.role.attrib.role"/>
+   </define>
+   <define name="refentry.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="refentry.label">
+      <choice>
+         <element name="refentry">
+            <ref name="refentry.role"/>
+            <group>
+               <zeroOrMore>
+                  <ref name="ndxterm.class.label"/>
+               </zeroOrMore>
+               <optional>
+                  <ref name="refentryinfo.label"/>
+               </optional>
+               <optional>
+                  <ref name="refmeta.label"/>
+               </optional>
+               <zeroOrMore>
+                  <ref name="remark.label"/>
+                  <ref name="link.char.class.label"/>
+               </zeroOrMore>
+               <ref name="refnamediv.label"/>
+               <optional>
+                  <ref name="refsynopsisdiv.label"/>
+               </optional>
+               <oneOrMore>
+                  <ref name="refsect1.label"/>
+               </oneOrMore>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="refentry.role">
+      <empty/>
+      <ref name="status.attrib.role"/>
+      <ref name="common.attrib.role"/>
+      <ref name="refentry.role.attrib.role"/>
+   </define>
+   <define name="refmeta.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="refmeta.label">
+      <choice>
+         <element name="refmeta">
+            <ref name="refmeta.role"/>
+            <group>
+               <zeroOrMore>
+                  <ref name="ndxterm.class.label"/>
+               </zeroOrMore>
+               <ref name="refentrytitle.label"/>
+               <optional>
+                  <ref name="manvolnum.label"/>
+               </optional>
+               <zeroOrMore>
+                  <ref name="refmiscinfo.label"/>
+               </zeroOrMore>
+               <zeroOrMore>
+                  <ref name="ndxterm.class.label"/>
+               </zeroOrMore>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="refmeta.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="refmeta.role.attrib.role"/>
+   </define>
+   <define name="refmiscinfo.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="refmiscinfo.label">
+      <choice>
+         <element name="refmiscinfo">
+            <ref name="refmiscinfo.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="docinfo.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="refmiscinfo.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="refmiscinfo.role.attrib.role"/>
+      <optional>
+         <attribute name="class">
+            <anyString/>
+         </attribute>
+      </optional>
+   </define>
+   <define name="refnamediv.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="refnamediv.label">
+      <choice>
+         <element name="refnamediv">
+            <ref name="refnamediv.role"/>
+            <group>
+               <optional>
+                  <ref name="refdescriptor.label"/>
+               </optional>
+               <oneOrMore>
+                  <ref name="refname.label"/>
+               </oneOrMore>
+               <ref name="refpurpose.label"/>
+               <zeroOrMore>
+                  <ref name="remark.label"/>
+                  <ref name="link.char.class.label"/>
+               </zeroOrMore>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="refnamediv.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="refnamediv.role.attrib.role"/>
+   </define>
+   <define name="refdescriptor.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="refdescriptor.label">
+      <choice>
+         <element name="refdescriptor">
+            <ref name="refdescriptor.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="refname.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="refdescriptor.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="refdescriptor.role.attrib.role"/>
+   </define>
+   <define name="refname.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="refname.label">
+      <choice>
+         <element name="refname">
+            <ref name="refname.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="refname.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="refname.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="refname.role.attrib.role"/>
+   </define>
+   <define name="refpurpose.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="refpurpose.label">
+      <choice>
+         <element name="refpurpose">
+            <ref name="refpurpose.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="refinline.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="refpurpose.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="refpurpose.role.attrib.role"/>
+   </define>
+   <define name="refclass.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="refclass.label">
+      <choice>
+         <element name="refclass">
+            <ref name="refclass.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="refclass.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="refclass.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="refclass.role.attrib.role"/>
+   </define>
+   <define name="refsynopsisdiv.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="refsynopsisdiv.label">
+      <choice>
+         <element name="refsynopsisdiv">
+            <ref name="refsynopsisdiv.role"/>
+            <group>
+               <optional>
+                  <ref name="refsynopsisdivinfo.label"/>
+               </optional>
+               <optional>
+                  <ref name="refsect.title.content.label"/>
+               </optional>
+               <choice>
+                  <group>
+                     <oneOrMore>
+                        <ref name="refcomponent.mix.label"/>
+                     </oneOrMore>
+                     <zeroOrMore>
+                        <ref name="refsect2.label"/>
+                     </zeroOrMore>
+                  </group>
+                  <oneOrMore>
+                     <ref name="refsect2.label"/>
+                  </oneOrMore>
+               </choice>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="refsynopsisdiv.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="refsynopsisdiv.role.attrib.role"/>
+   </define>
+   <define name="refsect1.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="refsect1.label">
+      <choice>
+         <element name="refsect1">
+            <ref name="refsect1.role"/>
+            <group>
+               <optional>
+                  <ref name="refsect1info.label"/>
+               </optional>
+               <ref name="refsect.title.content.label"/>
+               <choice>
+                  <group>
+                     <oneOrMore>
+                        <ref name="refcomponent.mix.label"/>
+                     </oneOrMore>
+                     <zeroOrMore>
+                        <ref name="refsect2.label"/>
+                     </zeroOrMore>
+                  </group>
+                  <oneOrMore>
+                     <ref name="refsect2.label"/>
+                  </oneOrMore>
+               </choice>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="refsect1.role">
+      <empty/>
+      <ref name="status.attrib.role"/>
+      <ref name="common.attrib.role"/>
+      <ref name="refsect1.role.attrib.role"/>
+   </define>
+   <define name="refsect2.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="refsect2.label">
+      <choice>
+         <element name="refsect2">
+            <ref name="refsect2.role"/>
+            <group>
+               <optional>
+                  <ref name="refsect2info.label"/>
+               </optional>
+               <ref name="refsect.title.content.label"/>
+               <choice>
+                  <group>
+                     <oneOrMore>
+                        <ref name="refcomponent.mix.label"/>
+                     </oneOrMore>
+                     <zeroOrMore>
+                        <ref name="refsect3.label"/>
+                     </zeroOrMore>
+                  </group>
+                  <oneOrMore>
+                     <ref name="refsect3.label"/>
+                  </oneOrMore>
+               </choice>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="refsect2.role">
+      <empty/>
+      <ref name="status.attrib.role"/>
+      <ref name="common.attrib.role"/>
+      <ref name="refsect2.role.attrib.role"/>
+   </define>
+   <define name="refsect3.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="refsect3.label">
+      <choice>
+         <element name="refsect3">
+            <ref name="refsect3.role"/>
+            <group>
+               <optional>
+                  <ref name="refsect3info.label"/>
+               </optional>
+               <ref name="refsect.title.content.label"/>
+               <oneOrMore>
+                  <ref name="refcomponent.mix.label"/>
+               </oneOrMore>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="refsect3.role">
+      <empty/>
+      <ref name="status.attrib.role"/>
+      <ref name="common.attrib.role"/>
+      <ref name="refsect3.role.attrib.role"/>
+   </define>
+   <define name="article.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="article.label">
+      <choice>
+         <element name="article">
+            <ref name="article.role"/>
+            <group>
+               <optional>
+                  <ref name="div.title.content.label"/>
+               </optional>
+               <optional>
+                  <ref name="articleinfo.label"/>
+               </optional>
+               <optional>
+                  <ref name="tocchap.label"/>
+               </optional>
+               <zeroOrMore>
+                  <ref name="lot.label"/>
+               </zeroOrMore>
+               <ref name="bookcomponent.content.label"/>
+               <zeroOrMore>
+                  <ref name="nav.class.label"/>
+                  <ref name="appendix.class.label"/>
+                  <ref name="ackno.label"/>
+               </zeroOrMore>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="article.role">
+      <empty/>
+      <ref name="status.attrib.role"/>
+      <ref name="common.attrib.role"/>
+      <ref name="article.role.attrib.role"/>
+      <optional>
+         <attribute name="class">
+            <choice>
+               <string>journalarticle</string>
+               <string>productsheet</string>
+               <string>whitepaper</string>
+               <string>techreport</string>
+               <string>specification</string>
+               <string>faq</string>
+            </choice>
+         </attribute>
+      </optional>
+      <optional>
+         <attribute name="parentbook">
+            <data type="xsd:IDREF"/>
+         </attribute>
+      </optional>
+   </define>
+
+</grammar>
diff --git a/schema/trex/dbpool.trex b/schema/trex/dbpool.trex
new file mode 100644 (file)
index 0000000..c315689
--- /dev/null
@@ -0,0 +1,8105 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<grammar xmlns="http://www.thaiopensource.com/trex"
+         xmlns:xsd="http://www.w3.org/2000/10/XMLSchema"
+         ns="http://www.oasis-open.org/docbook/xmlschema/4.1.2">
+
+   <define name="ndxterm.class.label">
+      <choice>
+         <ref name="indexterm.label"/>
+      </choice>
+   </define>
+   <define name="list.class.label">
+      <choice>
+         <ref name="calloutlist.label"/>
+         <ref name="glosslist.label"/>
+         <ref name="itemizedlist.label"/>
+         <ref name="orderedlist.label"/>
+         <ref name="segmentedlist.label"/>
+         <ref name="simplelist.label"/>
+         <ref name="variablelist.label"/>
+      </choice>
+   </define>
+   <define name="admon.class.label">
+      <choice>
+         <ref name="caution.label"/>
+         <ref name="important.label"/>
+         <ref name="note.label"/>
+         <ref name="tip.label"/>
+         <ref name="warning.label"/>
+      </choice>
+   </define>
+   <define name="linespecific.class.label">
+      <choice>
+         <ref name="literallayout.label"/>
+         <ref name="programlisting.label"/>
+         <ref name="programlistingco.label"/>
+         <ref name="screen.label"/>
+         <ref name="screenco.label"/>
+         <ref name="screenshot.label"/>
+      </choice>
+   </define>
+   <define name="method.synop.class.label">
+      <choice>
+         <ref name="constructorsynopsis.label"/>
+         <ref name="destructorsynopsis.label"/>
+         <ref name="methodsynopsis.label"/>
+      </choice>
+   </define>
+   <define name="synop.class.label">
+      <choice>
+         <ref name="synopsis.label"/>
+         <ref name="cmdsynopsis.label"/>
+         <ref name="funcsynopsis.label"/>
+         <ref name="classsynopsis.label"/>
+         <ref name="fieldsynopsis.label"/>
+      </choice>
+   </define>
+   <define name="para.class.label">
+      <choice>
+         <ref name="formalpara.label"/>
+         <ref name="para.label"/>
+         <ref name="simpara.label"/>
+      </choice>
+   </define>
+   <define name="informal.class.label">
+      <choice>
+         <ref name="address.label"/>
+         <ref name="blockquote.label"/>
+         <ref name="graphic.label"/>
+         <ref name="graphicco.label"/>
+         <ref name="mediaobject.label"/>
+         <ref name="mediaobjectco.label"/>
+         <ref name="informalequation.label"/>
+         <ref name="informalexample.label"/>
+         <ref name="informalfigure.label"/>
+         <ref name="informaltable.label"/>
+      </choice>
+   </define>
+   <define name="formal.class.label">
+      <choice>
+         <ref name="equation.label"/>
+         <ref name="example.label"/>
+         <ref name="figure.label"/>
+         <ref name="table.label"/>
+      </choice>
+   </define>
+   <define name="compound.class.label">
+      <choice>
+         <ref name="msgset.label"/>
+         <ref name="procedure.label"/>
+         <ref name="sidebar.label"/>
+         <ref name="qandaset.label"/>
+      </choice>
+   </define>
+   <define name="genobj.class.label">
+      <choice>
+         <ref name="anchor.label"/>
+         <ref name="bridgehead.label"/>
+         <ref name="remark.label"/>
+         <ref name="highlights.label"/>
+      </choice>
+   </define>
+   <define name="descobj.class.label">
+      <choice>
+         <ref name="abstract.label"/>
+         <ref name="authorblurb.label"/>
+         <ref name="epigraph.label"/>
+      </choice>
+   </define>
+   <define name="xref.char.class.label">
+      <choice>
+         <ref name="footnoteref.label"/>
+         <ref name="xref.label"/>
+      </choice>
+   </define>
+   <define name="gen.char.class.label">
+      <choice>
+         <ref name="abbrev.label"/>
+         <ref name="acronym.label"/>
+         <ref name="citation.label"/>
+         <ref name="citerefentry.label"/>
+         <ref name="citetitle.label"/>
+         <ref name="emphasis.label"/>
+         <ref name="firstterm.label"/>
+         <ref name="foreignphrase.label"/>
+         <ref name="glossterm.label"/>
+         <ref name="footnote.label"/>
+         <ref name="phrase.label"/>
+         <ref name="quote.label"/>
+         <ref name="trademark.label"/>
+         <ref name="wordasword.label"/>
+      </choice>
+   </define>
+   <define name="link.char.class.label">
+      <choice>
+         <ref name="link.label"/>
+         <ref name="olink.label"/>
+         <ref name="ulink.label"/>
+      </choice>
+   </define>
+   <define name="tech.char.class.label">
+      <choice>
+         <ref name="action.label"/>
+         <ref name="application.label"/>
+         <ref name="classname.label"/>
+         <ref name="methodname.label"/>
+         <ref name="interfacename.label"/>
+         <ref name="exceptionname.label"/>
+         <ref name="ooclass.label"/>
+         <ref name="oointerface.label"/>
+         <ref name="ooexception.label"/>
+         <ref name="command.label"/>
+         <ref name="computeroutput.label"/>
+         <ref name="database.label"/>
+         <ref name="email.label"/>
+         <ref name="envar.label"/>
+         <ref name="errorcode.label"/>
+         <ref name="errorname.label"/>
+         <ref name="errortype.label"/>
+         <ref name="filename.label"/>
+         <ref name="function.label"/>
+         <ref name="guibutton.label"/>
+         <ref name="guiicon.label"/>
+         <ref name="guilabel.label"/>
+         <ref name="guimenu.label"/>
+         <ref name="guimenuitem.label"/>
+         <ref name="guisubmenu.label"/>
+         <ref name="hardware.label"/>
+         <ref name="interface.label"/>
+         <ref name="keycap.label"/>
+         <ref name="keycode.label"/>
+         <ref name="keycombo.label"/>
+         <ref name="keysym.label"/>
+         <ref name="literal.label"/>
+         <ref name="constant.label"/>
+         <ref name="markup.label"/>
+         <ref name="medialabel.label"/>
+         <ref name="menuchoice.label"/>
+         <ref name="mousebutton.label"/>
+         <ref name="option.label"/>
+         <ref name="optional.label"/>
+         <ref name="parameter.label"/>
+         <ref name="prompt.label"/>
+         <ref name="property.label"/>
+         <ref name="replaceable.label"/>
+         <ref name="returnvalue.label"/>
+         <ref name="sgmltag.label"/>
+         <ref name="structfield.label"/>
+         <ref name="structname.label"/>
+         <ref name="symbol.label"/>
+         <ref name="systemitem.label"/>
+         <ref name="token.label"/>
+         <ref name="type.label"/>
+         <ref name="userinput.label"/>
+         <ref name="varname.label"/>
+      </choice>
+   </define>
+   <define name="base.char.class.label">
+      <choice>
+         <ref name="anchor.label"/>
+      </choice>
+   </define>
+   <define name="docinfo.char.class.label">
+      <choice>
+         <ref name="author.label"/>
+         <ref name="authorinitials.label"/>
+         <ref name="corpauthor.label"/>
+         <ref name="modespec.label"/>
+         <ref name="othercredit.label"/>
+         <ref name="productname.label"/>
+         <ref name="productnumber.label"/>
+         <ref name="revhistory.label"/>
+      </choice>
+   </define>
+   <define name="other.char.class.label">
+      <choice>
+         <ref name="remark.label"/>
+         <ref name="subscript.label"/>
+         <ref name="superscript.label"/>
+      </choice>
+   </define>
+   <define name="inlineobj.char.class.label">
+      <choice>
+         <ref name="inlinegraphic.label"/>
+         <ref name="inlinemediaobject.label"/>
+         <ref name="inlineequation.label"/>
+      </choice>
+   </define>
+   <define name="component.mix.label">
+      <choice>
+         <ref name="list.class.label"/>
+         <ref name="admon.class.label"/>
+         <ref name="linespecific.class.label"/>
+         <ref name="synop.class.label"/>
+         <ref name="para.class.label"/>
+         <ref name="informal.class.label"/>
+         <ref name="formal.class.label"/>
+         <ref name="compound.class.label"/>
+         <ref name="genobj.class.label"/>
+         <ref name="descobj.class.label"/>
+         <ref name="ndxterm.class.label"/>
+         <ref name="beginpage.label"/>
+      </choice>
+   </define>
+   <define name="sidebar.mix.label">
+      <choice>
+         <ref name="list.class.label"/>
+         <ref name="admon.class.label"/>
+         <ref name="linespecific.class.label"/>
+         <ref name="synop.class.label"/>
+         <ref name="para.class.label"/>
+         <ref name="informal.class.label"/>
+         <ref name="formal.class.label"/>
+         <ref name="procedure.label"/>
+         <ref name="genobj.class.label"/>
+         <ref name="ndxterm.class.label"/>
+         <ref name="beginpage.label"/>
+      </choice>
+   </define>
+   <define name="qandaset.mix.label">
+      <choice>
+         <ref name="list.class.label"/>
+         <ref name="admon.class.label"/>
+         <ref name="linespecific.class.label"/>
+         <ref name="synop.class.label"/>
+         <ref name="para.class.label"/>
+         <ref name="informal.class.label"/>
+         <ref name="formal.class.label"/>
+         <ref name="procedure.label"/>
+         <ref name="genobj.class.label"/>
+         <ref name="ndxterm.class.label"/>
+      </choice>
+   </define>
+   <define name="revdescription.mix.label">
+      <choice>
+         <ref name="list.class.label"/>
+         <ref name="admon.class.label"/>
+         <ref name="linespecific.class.label"/>
+         <ref name="synop.class.label"/>
+         <ref name="para.class.label"/>
+         <ref name="informal.class.label"/>
+         <ref name="formal.class.label"/>
+         <ref name="procedure.label"/>
+         <ref name="genobj.class.label"/>
+         <ref name="ndxterm.class.label"/>
+      </choice>
+   </define>
+   <define name="footnote.mix.label">
+      <choice>
+         <ref name="list.class.label"/>
+         <ref name="linespecific.class.label"/>
+         <ref name="synop.class.label"/>
+         <ref name="para.class.label"/>
+         <ref name="informal.class.label"/>
+      </choice>
+   </define>
+   <define name="example.mix.label">
+      <choice>
+         <ref name="list.class.label"/>
+         <ref name="linespecific.class.label"/>
+         <ref name="synop.class.label"/>
+         <ref name="para.class.label"/>
+         <ref name="informal.class.label"/>
+         <ref name="ndxterm.class.label"/>
+         <ref name="beginpage.label"/>
+      </choice>
+   </define>
+   <define name="highlights.mix.label">
+      <choice>
+         <ref name="list.class.label"/>
+         <ref name="admon.class.label"/>
+         <ref name="para.class.label"/>
+         <ref name="ndxterm.class.label"/>
+      </choice>
+   </define>
+   <define name="para.mix.label">
+      <choice>
+         <ref name="list.class.label"/>
+         <ref name="admon.class.label"/>
+         <ref name="linespecific.class.label"/>
+         <ref name="informal.class.label"/>
+         <ref name="formal.class.label"/>
+      </choice>
+   </define>
+   <define name="admon.mix.label">
+      <choice>
+         <ref name="list.class.label"/>
+         <ref name="linespecific.class.label"/>
+         <ref name="synop.class.label"/>
+         <ref name="para.class.label"/>
+         <ref name="informal.class.label"/>
+         <ref name="formal.class.label"/>
+         <ref name="procedure.label"/>
+         <ref name="sidebar.label"/>
+         <ref name="anchor.label"/>
+         <ref name="bridgehead.label"/>
+         <ref name="remark.label"/>
+         <ref name="ndxterm.class.label"/>
+         <ref name="beginpage.label"/>
+      </choice>
+   </define>
+   <define name="figure.mix.label">
+      <choice>
+         <ref name="linespecific.class.label"/>
+         <ref name="synop.class.label"/>
+         <ref name="informal.class.label"/>
+         <ref name="ndxterm.class.label"/>
+         <ref name="beginpage.label"/>
+      </choice>
+   </define>
+   <define name="tabentry.mix.label">
+      <choice>
+         <ref name="list.class.label"/>
+         <ref name="admon.class.label"/>
+         <ref name="linespecific.class.label"/>
+         <ref name="para.class.label"/>
+         <ref name="graphic.label"/>
+         <ref name="mediaobject.label"/>
+      </choice>
+   </define>
+   <define name="glossdef.mix.label">
+      <choice>
+         <ref name="list.class.label"/>
+         <ref name="linespecific.class.label"/>
+         <ref name="synop.class.label"/>
+         <ref name="para.class.label"/>
+         <ref name="informal.class.label"/>
+         <ref name="formal.class.label"/>
+         <ref name="remark.label"/>
+         <ref name="ndxterm.class.label"/>
+         <ref name="beginpage.label"/>
+      </choice>
+   </define>
+   <define name="legalnotice.mix.label">
+      <choice>
+         <ref name="list.class.label"/>
+         <ref name="admon.class.label"/>
+         <ref name="linespecific.class.label"/>
+         <ref name="para.class.label"/>
+         <ref name="blockquote.label"/>
+         <ref name="ndxterm.class.label"/>
+         <ref name="beginpage.label"/>
+      </choice>
+   </define>
+   <define name="textobject.mix.label">
+      <choice>
+         <ref name="list.class.label"/>
+         <ref name="admon.class.label"/>
+         <ref name="linespecific.class.label"/>
+         <ref name="para.class.label"/>
+         <ref name="blockquote.label"/>
+      </choice>
+   </define>
+   <define name="mediaobject.mix.label">
+      <choice>
+         <ref name="videoobject.label"/>
+         <ref name="audioobject.label"/>
+         <ref name="imageobject.label"/>
+      </choice>
+   </define>
+   <define name="para.char.mix.label">
+      <choice>
+         <ref name="xref.char.class.label"/>
+         <ref name="gen.char.class.label"/>
+         <ref name="link.char.class.label"/>
+         <ref name="tech.char.class.label"/>
+         <ref name="base.char.class.label"/>
+         <ref name="docinfo.char.class.label"/>
+         <ref name="other.char.class.label"/>
+         <ref name="inlineobj.char.class.label"/>
+         <ref name="synop.class.label"/>
+         <ref name="ndxterm.class.label"/>
+         <ref name="beginpage.label"/>
+      </choice>
+   </define>
+   <define name="title.char.mix.label">
+      <choice>
+         <ref name="xref.char.class.label"/>
+         <ref name="gen.char.class.label"/>
+         <ref name="link.char.class.label"/>
+         <ref name="tech.char.class.label"/>
+         <ref name="base.char.class.label"/>
+         <ref name="docinfo.char.class.label"/>
+         <ref name="other.char.class.label"/>
+         <ref name="inlineobj.char.class.label"/>
+         <ref name="ndxterm.class.label"/>
+      </choice>
+   </define>
+   <define name="ndxterm.char.mix.label">
+      <choice>
+         <ref name="xref.char.class.label"/>
+         <ref name="gen.char.class.label"/>
+         <ref name="link.char.class.label"/>
+         <ref name="tech.char.class.label"/>
+         <ref name="base.char.class.label"/>
+         <ref name="docinfo.char.class.label"/>
+         <ref name="other.char.class.label"/>
+         <ref name="inlinegraphic.label"/>
+         <ref name="inlinemediaobject.label"/>
+      </choice>
+   </define>
+   <define name="cptr.char.mix.label">
+      <choice>
+         <ref name="link.char.class.label"/>
+         <ref name="tech.char.class.label"/>
+         <ref name="base.char.class.label"/>
+         <ref name="other.char.class.label"/>
+         <ref name="inlinegraphic.label"/>
+         <ref name="inlinemediaobject.label"/>
+         <ref name="ndxterm.class.label"/>
+         <ref name="beginpage.label"/>
+      </choice>
+   </define>
+   <define name="smallcptr.char.mix.label">
+      <choice>
+         <ref name="replaceable.label"/>
+         <ref name="inlinegraphic.label"/>
+         <ref name="inlinemediaobject.label"/>
+         <ref name="ndxterm.class.label"/>
+         <ref name="beginpage.label"/>
+      </choice>
+   </define>
+   <define name="word.char.mix.label">
+      <choice>
+         <ref name="acronym.label"/>
+         <ref name="emphasis.label"/>
+         <ref name="trademark.label"/>
+         <ref name="link.char.class.label"/>
+         <ref name="base.char.class.label"/>
+         <ref name="other.char.class.label"/>
+         <ref name="inlinegraphic.label"/>
+         <ref name="inlinemediaobject.label"/>
+         <ref name="ndxterm.class.label"/>
+         <ref name="beginpage.label"/>
+      </choice>
+   </define>
+   <define name="docinfo.char.mix.label">
+      <choice>
+         <ref name="link.char.class.label"/>
+         <ref name="emphasis.label"/>
+         <ref name="trademark.label"/>
+         <ref name="replaceable.label"/>
+         <ref name="other.char.class.label"/>
+         <ref name="inlinegraphic.label"/>
+         <ref name="inlinemediaobject.label"/>
+         <ref name="ndxterm.class.label"/>
+      </choice>
+   </define>
+   <define name="formalobject.title.content.label">
+      <choice>
+         <group>
+            <ref name="title.label"/>
+            <optional>
+               <ref name="titleabbrev.label"/>
+            </optional>
+         </group>
+      </choice>
+   </define>
+   <define name="arch.attrib.role">
+      <empty/>
+      <optional>
+         <attribute name="arch">
+            <anyString/>
+         </attribute>
+      </optional>
+   </define>
+   <define name="condition.attrib.role">
+      <empty/>
+      <optional>
+         <attribute name="condition">
+            <anyString/>
+         </attribute>
+      </optional>
+   </define>
+   <define name="conformance.attrib.role">
+      <empty/>
+      <optional>
+         <attribute name="conformance">
+            <data type="xsd:NMTOKEN"/>
+         </attribute>
+      </optional>
+   </define>
+   <define name="os.attrib.role">
+      <empty/>
+      <optional>
+         <attribute name="os">
+            <anyString/>
+         </attribute>
+      </optional>
+   </define>
+   <define name="revision.attrib.role">
+      <empty/>
+      <optional>
+         <attribute name="revision">
+            <anyString/>
+         </attribute>
+      </optional>
+   </define>
+   <define name="security.attrib.role">
+      <empty/>
+      <optional>
+         <attribute name="security">
+            <anyString/>
+         </attribute>
+      </optional>
+   </define>
+   <define name="userlevel.attrib.role">
+      <empty/>
+      <optional>
+         <attribute name="userlevel">
+            <anyString/>
+         </attribute>
+      </optional>
+   </define>
+   <define name="vendor.attrib.role">
+      <empty/>
+      <optional>
+         <attribute name="vendor">
+            <anyString/>
+         </attribute>
+      </optional>
+   </define>
+   <define name="effectivity.attrib.role">
+      <empty/>
+      <ref name="arch.attrib.role"/>
+      <ref name="condition.attrib.role"/>
+      <ref name="conformance.attrib.role"/>
+      <ref name="os.attrib.role"/>
+      <ref name="revision.attrib.role"/>
+      <ref name="security.attrib.role"/>
+      <ref name="userlevel.attrib.role"/>
+      <ref name="vendor.attrib.role"/>
+   </define>
+   <define name="id.attrib.role">
+      <empty/>
+      <optional>
+         <attribute name="id">
+            <data type="xsd:ID"/>
+         </attribute>
+      </optional>
+   </define>
+   <define name="idreq.attrib.role">
+      <empty/>
+      <attribute name="id">
+         <data type="xsd:ID"/>
+      </attribute>
+   </define>
+   <define name="lang.attrib.role">
+      <empty/>
+      <optional>
+         <attribute name="lang">
+            <anyString/>
+         </attribute>
+      </optional>
+   </define>
+   <define name="remap.attrib.role">
+      <empty/>
+      <optional>
+         <attribute name="remap">
+            <anyString/>
+         </attribute>
+      </optional>
+   </define>
+   <define name="role.attrib.role">
+      <empty/>
+      <optional>
+         <attribute name="role">
+            <anyString/>
+         </attribute>
+      </optional>
+   </define>
+   <define name="xreflabel.attrib.role">
+      <empty/>
+      <optional>
+         <attribute name="xreflabel">
+            <anyString/>
+         </attribute>
+      </optional>
+   </define>
+   <define name="revisionflag.attrib.role">
+      <empty/>
+      <optional>
+         <attribute name="revisionflag">
+            <choice>
+               <string>changed</string>
+               <string>added</string>
+               <string>deleted</string>
+               <string>off</string>
+            </choice>
+         </attribute>
+      </optional>
+   </define>
+   <define name="common.attrib.role">
+      <empty/>
+      <ref name="id.attrib.role"/>
+      <ref name="lang.attrib.role"/>
+      <ref name="remap.attrib.role"/>
+      <ref name="xreflabel.attrib.role"/>
+      <ref name="revisionflag.attrib.role"/>
+      <ref name="effectivity.attrib.role"/>
+   </define>
+   <define name="idreq.common.attrib.role">
+      <empty/>
+      <ref name="idreq.attrib.role"/>
+      <ref name="lang.attrib.role"/>
+      <ref name="remap.attrib.role"/>
+      <ref name="xreflabel.attrib.role"/>
+      <ref name="revisionflag.attrib.role"/>
+      <ref name="effectivity.attrib.role"/>
+   </define>
+   <define name="graphics.attrib.role">
+      <empty/>
+      <optional>
+         <attribute name="fileref">
+            <anyString/>
+         </attribute>
+      </optional>
+      <optional>
+         <attribute name="format">
+            <choice>
+               <string>BMP</string>
+               <string>CGM-CHAR</string>
+               <string>CGM-BINARY</string>
+               <string>CGM-CLEAR</string>
+               <string>DITROFF</string>
+               <string>DVI</string>
+               <string>EPS</string>
+               <string>EQN</string>
+               <string>FAX</string>
+               <string>GIF</string>
+               <string>GIF87a</string>
+               <string>GIF89a</string>
+               <string>JPG</string>
+               <string>JPEG</string>
+               <string>IGES</string>
+               <string>PCX</string>
+               <string>PIC</string>
+               <string>PNG</string>
+               <string>PS</string>
+               <string>SGML</string>
+               <string>TBL</string>
+               <string>TEX</string>
+               <string>TIFF</string>
+               <string>WMF</string>
+               <string>WPG</string>
+               <string>linespecific</string>
+            </choice>
+         </attribute>
+      </optional>
+      <optional>
+         <attribute name="srccredit">
+            <anyString/>
+         </attribute>
+      </optional>
+      <optional>
+         <attribute name="width">
+            <anyString/>
+         </attribute>
+      </optional>
+      <optional>
+         <attribute name="depth">
+            <anyString/>
+         </attribute>
+      </optional>
+      <optional>
+         <attribute name="align">
+            <choice>
+               <string>left</string>
+               <string>right</string>
+               <string>center</string>
+            </choice>
+         </attribute>
+      </optional>
+      <optional>
+         <attribute name="scale">
+            <anyString/>
+         </attribute>
+      </optional>
+      <optional>
+         <attribute name="scalefit">
+            <choice>
+               <string>0</string>
+               <string>1</string>
+            </choice>
+         </attribute>
+      </optional>
+   </define>
+   <define name="keyaction.attrib.role">
+      <empty/>
+      <optional>
+         <attribute name="action">
+            <choice>
+               <string>click</string>
+               <string>double-click</string>
+               <string>press</string>
+               <string>seq</string>
+               <string>simul</string>
+               <string>other</string>
+            </choice>
+         </attribute>
+      </optional>
+      <optional>
+         <attribute name="otheraction">
+            <anyString/>
+         </attribute>
+      </optional>
+   </define>
+   <define name="label.attrib.role">
+      <empty/>
+      <optional>
+         <attribute name="label">
+            <anyString/>
+         </attribute>
+      </optional>
+   </define>
+   <define name="linespecific.attrib.role">
+      <empty/>
+      <optional>
+         <attribute name="format">
+            <choice>
+               <string>linespecific</string>
+            </choice>
+         </attribute>
+      </optional>
+      <optional>
+         <attribute name="linenumbering">
+            <choice>
+               <string>numbered</string>
+               <string>unnumbered</string>
+            </choice>
+         </attribute>
+      </optional>
+   </define>
+   <define name="linkend.attrib.role">
+      <empty/>
+      <optional>
+         <attribute name="linkend">
+            <data type="xsd:IDREF"/>
+         </attribute>
+      </optional>
+   </define>
+   <define name="linkendreq.attrib.role">
+      <empty/>
+      <attribute name="linkend">
+         <data type="xsd:IDREF"/>
+      </attribute>
+   </define>
+   <define name="linkends.attrib.role">
+      <empty/>
+      <optional>
+         <attribute name="linkends">
+            <data type="xsd:IDREFS"/>
+         </attribute>
+      </optional>
+   </define>
+   <define name="mark.attrib.role">
+      <empty/>
+      <optional>
+         <attribute name="mark">
+            <anyString/>
+         </attribute>
+      </optional>
+   </define>
+   <define name="moreinfo.attrib.role">
+      <empty/>
+      <optional>
+         <attribute name="moreinfo">
+            <choice>
+               <string>refentry</string>
+               <string>none</string>
+            </choice>
+         </attribute>
+      </optional>
+   </define>
+   <define name="pagenum.attrib.role">
+      <empty/>
+      <optional>
+         <attribute name="pagenum">
+            <anyString/>
+         </attribute>
+      </optional>
+   </define>
+   <define name="status.attrib.role">
+      <empty/>
+      <optional>
+         <attribute name="status">
+            <anyString/>
+         </attribute>
+      </optional>
+   </define>
+   <define name="width.attrib.role">
+      <empty/>
+      <optional>
+         <attribute name="width">
+            <anyString/>
+         </attribute>
+      </optional>
+   </define>
+   <define name="title.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="title.label">
+      <choice>
+         <element name="title">
+            <ref name="title.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="title.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="title.role">
+      <empty/>
+      <ref name="pagenum.attrib.role"/>
+      <ref name="common.attrib.role"/>
+      <ref name="title.role.attrib.role"/>
+   </define>
+   <define name="titleabbrev.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="titleabbrev.label">
+      <choice>
+         <element name="titleabbrev">
+            <ref name="titleabbrev.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="title.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="titleabbrev.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="titleabbrev.role.attrib.role"/>
+   </define>
+   <define name="subtitle.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="subtitle.label">
+      <choice>
+         <element name="subtitle">
+            <ref name="subtitle.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="title.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="subtitle.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="subtitle.role.attrib.role"/>
+   </define>
+   <define name="person.ident.mix.label">
+      <choice>
+         <ref name="honorific.label"/>
+         <ref name="firstname.label"/>
+         <ref name="surname.label"/>
+         <ref name="lineage.label"/>
+         <ref name="othername.label"/>
+         <ref name="affiliation.label"/>
+         <ref name="authorblurb.label"/>
+         <ref name="contrib.label"/>
+      </choice>
+   </define>
+   <define name="bibliocomponent.mix.label">
+      <choice>
+         <ref name="abbrev.label"/>
+         <ref name="abstract.label"/>
+         <ref name="address.label"/>
+         <ref name="artpagenums.label"/>
+         <ref name="author.label"/>
+         <ref name="authorgroup.label"/>
+         <ref name="authorinitials.label"/>
+         <ref name="bibliomisc.label"/>
+         <ref name="biblioset.label"/>
+         <ref name="collab.label"/>
+         <ref name="confgroup.label"/>
+         <ref name="contractnum.label"/>
+         <ref name="contractsponsor.label"/>
+         <ref name="copyright.label"/>
+         <ref name="corpauthor.label"/>
+         <ref name="corpname.label"/>
+         <ref name="date.label"/>
+         <ref name="edition.label"/>
+         <ref name="editor.label"/>
+         <ref name="invpartnumber.label"/>
+         <ref name="isbn.label"/>
+         <ref name="issn.label"/>
+         <ref name="issuenum.label"/>
+         <ref name="orgname.label"/>
+         <ref name="othercredit.label"/>
+         <ref name="pagenums.label"/>
+         <ref name="printhistory.label"/>
+         <ref name="productname.label"/>
+         <ref name="productnumber.label"/>
+         <ref name="pubdate.label"/>
+         <ref name="publisher.label"/>
+         <ref name="publishername.label"/>
+         <ref name="pubsnumber.label"/>
+         <ref name="releaseinfo.label"/>
+         <ref name="revhistory.label"/>
+         <ref name="seriesvolnums.label"/>
+         <ref name="subtitle.label"/>
+         <ref name="title.label"/>
+         <ref name="titleabbrev.label"/>
+         <ref name="volumenum.label"/>
+         <ref name="citetitle.label"/>
+         <ref name="person.ident.mix.label"/>
+         <ref name="ndxterm.class.label"/>
+      </choice>
+   </define>
+   <define name="biblioentry.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="biblioentry.label">
+      <choice>
+         <element name="biblioentry">
+            <ref name="biblioentry.role"/>
+            <oneOrMore>
+               <choice>
+                  <ref name="articleinfo.label"/>
+                  <ref name="bibliocomponent.mix.label"/>
+               </choice>
+            </oneOrMore>
+         </element>
+      </choice>
+   </define>
+   <define name="biblioentry.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="biblioentry.role.attrib.role"/>
+   </define>
+   <define name="bibliomixed.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="bibliomixed.label">
+      <choice>
+         <element name="bibliomixed">
+            <ref name="bibliomixed.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="bibliocomponent.mix.label"/>
+                  <ref name="bibliomset.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="bibliomixed.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="bibliomixed.role.attrib.role"/>
+   </define>
+   <define name="articleinfo.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="infoContentModel.label">
+      <choice>
+         <oneOrMore>
+            <choice>
+               <ref name="graphic.label"/>
+               <ref name="mediaobject.label"/>
+               <ref name="legalnotice.label"/>
+               <ref name="modespec.label"/>
+               <ref name="subjectset.label"/>
+               <ref name="keywordset.label"/>
+               <ref name="itermset.label"/>
+               <ref name="bibliocomponent.mix.label"/>
+            </choice>
+         </oneOrMore>
+      </choice>
+   </define>
+   <define name="articleinfo.label">
+      <choice>
+         <element name="articleinfo">
+            <ref name="articleinfo.role"/>
+            <group>
+               <ref name="infoContentModel.label"/>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="articleinfo.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="articleinfo.role.attrib.role"/>
+   </define>
+   <define name="biblioset.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="biblioset.label">
+      <choice>
+         <element name="biblioset">
+            <ref name="biblioset.role"/>
+            <oneOrMore>
+               <choice>
+                  <ref name="bibliocomponent.mix.label"/>
+               </choice>
+            </oneOrMore>
+         </element>
+      </choice>
+   </define>
+   <define name="biblioset.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="biblioset.role.attrib.role"/>
+      <optional>
+         <attribute name="relation">
+            <anyString/>
+         </attribute>
+      </optional>
+   </define>
+   <define name="bibliomset.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="bibliomset.label">
+      <choice>
+         <element name="bibliomset">
+            <ref name="bibliomset.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="bibliocomponent.mix.label"/>
+                  <ref name="bibliomset.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="bibliomset.role">
+      <empty/>
+      <ref name="bibliomset.role.attrib.role"/>
+      <ref name="common.attrib.role"/>
+      <optional>
+         <attribute name="relation">
+            <anyString/>
+         </attribute>
+      </optional>
+   </define>
+   <define name="bibliomisc.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="bibliomisc.label">
+      <choice>
+         <element name="bibliomisc">
+            <ref name="bibliomisc.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="para.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="bibliomisc.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="bibliomisc.role.attrib.role"/>
+   </define>
+   <define name="subjectset.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="subjectset.label">
+      <choice>
+         <element name="subjectset">
+            <ref name="subjectset.role"/>
+            <oneOrMore>
+               <group>
+                  <ref name="subject.label"/>
+               </group>
+            </oneOrMore>
+         </element>
+      </choice>
+   </define>
+   <define name="subjectset.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="subjectset.role.attrib.role"/>
+      <optional>
+         <attribute name="scheme">
+            <data type="xsd:NMTOKEN"/>
+         </attribute>
+      </optional>
+   </define>
+   <define name="subject.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="subject.label">
+      <choice>
+         <element name="subject">
+            <ref name="subject.role"/>
+            <oneOrMore>
+               <group>
+                  <ref name="subjectterm.label"/>
+               </group>
+            </oneOrMore>
+         </element>
+      </choice>
+   </define>
+   <define name="subject.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="subject.role.attrib.role"/>
+      <optional>
+         <attribute name="weight">
+            <anyString/>
+         </attribute>
+      </optional>
+   </define>
+   <define name="subjectterm.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="subjectterm.label">
+      <choice>
+         <element name="subjectterm">
+            <ref name="subjectterm.role"/>
+            <mixed>
+               <empty/>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="subjectterm.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="subjectterm.role.attrib.role"/>
+   </define>
+   <define name="keywordset.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="keywordset.label">
+      <choice>
+         <element name="keywordset">
+            <ref name="keywordset.role"/>
+            <oneOrMore>
+               <group>
+                  <ref name="keyword.label"/>
+               </group>
+            </oneOrMore>
+         </element>
+      </choice>
+   </define>
+   <define name="keywordset.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="keywordset.role.attrib.role"/>
+   </define>
+   <define name="keyword.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="keyword.label">
+      <choice>
+         <element name="keyword">
+            <ref name="keyword.role"/>
+            <mixed>
+               <empty/>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="keyword.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="keyword.role.attrib.role"/>
+   </define>
+   <define name="itermset.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="itermset.label">
+      <choice>
+         <element name="itermset">
+            <ref name="itermset.role"/>
+            <oneOrMore>
+               <group>
+                  <ref name="indexterm.label"/>
+               </group>
+            </oneOrMore>
+         </element>
+      </choice>
+   </define>
+   <define name="itermset.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="itermset.role.attrib.role"/>
+   </define>
+   <define name="msgset.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="msgset.label">
+      <choice>
+         <element name="msgset">
+            <ref name="msgset.role"/>
+            <group>
+               <optional>
+                  <ref name="formalobject.title.content.label"/>
+               </optional>
+               <choice>
+                  <oneOrMore>
+                     <ref name="msgentry.label"/>
+                  </oneOrMore>
+                  <oneOrMore>
+                     <ref name="simplemsgentry.label"/>
+                  </oneOrMore>
+               </choice>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="msgset.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="msgset.role.attrib.role"/>
+   </define>
+   <define name="msgentry.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="msgentry.label">
+      <choice>
+         <element name="msgentry">
+            <ref name="msgentry.role"/>
+            <group>
+               <oneOrMore>
+                  <ref name="msg.label"/>
+               </oneOrMore>
+               <optional>
+                  <ref name="msginfo.label"/>
+               </optional>
+               <zeroOrMore>
+                  <ref name="msgexplan.label"/>
+               </zeroOrMore>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="msgentry.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="msgentry.role.attrib.role"/>
+   </define>
+   <define name="simplemsgentry.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="simplemsgentry.label">
+      <choice>
+         <element name="simplemsgentry">
+            <ref name="simplemsgentry.role"/>
+            <group>
+               <ref name="msgtext.label"/>
+               <ref name="msgexplan.label"/>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="simplemsgentry.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="simplemsgentry.role.attrib.role"/>
+      <optional>
+         <attribute name="audience">
+            <anyString/>
+         </attribute>
+      </optional>
+      <optional>
+         <attribute name="level">
+            <anyString/>
+         </attribute>
+      </optional>
+      <optional>
+         <attribute name="origin">
+            <anyString/>
+         </attribute>
+      </optional>
+   </define>
+   <define name="msg.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="msg.label">
+      <choice>
+         <element name="msg">
+            <ref name="msg.role"/>
+            <group>
+               <optional>
+                  <ref name="title.label"/>
+               </optional>
+               <ref name="msgmain.label"/>
+               <zeroOrMore>
+                  <ref name="msgsub.label"/>
+                  <ref name="msgrel.label"/>
+               </zeroOrMore>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="msg.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="msg.role.attrib.role"/>
+   </define>
+   <define name="msgmain.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="msgmain.label">
+      <choice>
+         <element name="msgmain">
+            <ref name="msgmain.role"/>
+            <group>
+               <optional>
+                  <ref name="title.label"/>
+               </optional>
+               <ref name="msgtext.label"/>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="msgmain.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="msgmain.role.attrib.role"/>
+   </define>
+   <define name="msgsub.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="msgsub.label">
+      <choice>
+         <element name="msgsub">
+            <ref name="msgsub.role"/>
+            <group>
+               <optional>
+                  <ref name="title.label"/>
+               </optional>
+               <ref name="msgtext.label"/>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="msgsub.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="msgsub.role.attrib.role"/>
+   </define>
+   <define name="msgrel.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="msgrel.label">
+      <choice>
+         <element name="msgrel">
+            <ref name="msgrel.role"/>
+            <group>
+               <optional>
+                  <ref name="title.label"/>
+               </optional>
+               <ref name="msgtext.label"/>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="msgrel.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="msgrel.role.attrib.role"/>
+   </define>
+   <define name="msginfo.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="msginfo.label">
+      <choice>
+         <element name="msginfo">
+            <ref name="msginfo.role"/>
+            <zeroOrMore>
+               <ref name="msglevel.label"/>
+               <ref name="msgorig.label"/>
+               <ref name="msgaud.label"/>
+            </zeroOrMore>
+         </element>
+      </choice>
+   </define>
+   <define name="msginfo.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="msginfo.role.attrib.role"/>
+   </define>
+   <define name="msglevel.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="msglevel.label">
+      <choice>
+         <element name="msglevel">
+            <ref name="msglevel.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="smallcptr.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="msglevel.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="msglevel.role.attrib.role"/>
+   </define>
+   <define name="msgorig.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="msgorig.label">
+      <choice>
+         <element name="msgorig">
+            <ref name="msgorig.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="smallcptr.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="msgorig.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="msgorig.role.attrib.role"/>
+   </define>
+   <define name="msgaud.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="msgaud.label">
+      <choice>
+         <element name="msgaud">
+            <ref name="msgaud.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="para.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="msgaud.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="msgaud.role.attrib.role"/>
+   </define>
+   <define name="msgexplan.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="msgexplan.label">
+      <choice>
+         <element name="msgexplan">
+            <ref name="msgexplan.role"/>
+            <group>
+               <optional>
+                  <ref name="title.label"/>
+               </optional>
+               <zeroOrMore>
+                  <ref name="component.mix.label"/>
+               </zeroOrMore>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="msgexplan.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="msgexplan.role.attrib.role"/>
+   </define>
+   <define name="qandset.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="qandaset.label">
+      <choice>
+         <element name="qandaset">
+            <ref name="qandaset.role"/>
+            <group>
+               <optional>
+                  <ref name="formalobject.title.content.label"/>
+               </optional>
+               <zeroOrMore>
+                  <ref name="qandaset.mix.label"/>
+               </zeroOrMore>
+               <choice>
+                  <oneOrMore>
+                     <ref name="qandadiv.label"/>
+                  </oneOrMore>
+                  <oneOrMore>
+                     <ref name="qandaentry.label"/>
+                  </oneOrMore>
+               </choice>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="qandaset.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="qandset.role.attrib.role"/>
+      <optional>
+         <attribute name="defaultlabel">
+            <choice>
+               <string>qanda</string>
+               <string>number</string>
+               <string>none</string>
+            </choice>
+         </attribute>
+      </optional>
+   </define>
+   <define name="qandadiv.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="qandadiv.label">
+      <choice>
+         <element name="qandadiv">
+            <ref name="qandadiv.role"/>
+            <group>
+               <optional>
+                  <ref name="formalobject.title.content.label"/>
+               </optional>
+               <zeroOrMore>
+                  <ref name="qandaset.mix.label"/>
+               </zeroOrMore>
+               <choice>
+                  <oneOrMore>
+                     <ref name="qandadiv.label"/>
+                  </oneOrMore>
+                  <oneOrMore>
+                     <ref name="qandaentry.label"/>
+                  </oneOrMore>
+               </choice>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="qandadiv.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="qandadiv.role.attrib.role"/>
+   </define>
+   <define name="qandaentry.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="qandaentry.label">
+      <choice>
+         <element name="qandaentry">
+            <ref name="qandaentry.role"/>
+            <group>
+               <optional>
+                  <ref name="revhistory.label"/>
+               </optional>
+               <ref name="question.label"/>
+               <zeroOrMore>
+                  <ref name="answer.label"/>
+               </zeroOrMore>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="qandaentry.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="qandaentry.role.attrib.role"/>
+   </define>
+   <define name="question.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="question.label">
+      <choice>
+         <element name="question">
+            <ref name="question.role"/>
+            <group>
+               <optional>
+                  <ref name="label.label"/>
+               </optional>
+               <oneOrMore>
+                  <ref name="qandaset.mix.label"/>
+               </oneOrMore>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="question.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="question.role.attrib.role"/>
+   </define>
+   <define name="answer.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="answer.label">
+      <choice>
+         <element name="answer">
+            <ref name="answer.role"/>
+            <group>
+               <optional>
+                  <ref name="label.label"/>
+               </optional>
+               <zeroOrMore>
+                  <ref name="qandaset.mix.label"/>
+               </zeroOrMore>
+               <zeroOrMore>
+                  <ref name="qandaentry.label"/>
+               </zeroOrMore>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="answer.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="answer.role.attrib.role"/>
+   </define>
+   <define name="label.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="label.label">
+      <choice>
+         <element name="label">
+            <ref name="label.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="word.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="label.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="label.role.attrib.role"/>
+   </define>
+   <define name="procedure.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="procedure.label">
+      <choice>
+         <element name="procedure">
+            <ref name="procedure.role"/>
+            <group>
+               <optional>
+                  <ref name="formalobject.title.content.label"/>
+               </optional>
+               <zeroOrMore>
+                  <ref name="component.mix.label"/>
+               </zeroOrMore>
+               <oneOrMore>
+                  <ref name="step.label"/>
+               </oneOrMore>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="procedure.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="procedure.role.attrib.role"/>
+   </define>
+   <define name="step.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="step.label">
+      <choice>
+         <element name="step">
+            <ref name="step.role"/>
+            <group>
+               <optional>
+                  <ref name="title.label"/>
+               </optional>
+               <choice>
+                  <group>
+                     <oneOrMore>
+                        <ref name="component.mix.label"/>
+                     </oneOrMore>
+                     <optional>
+                        <group>
+                           <ref name="substeps.label"/>
+                           <zeroOrMore>
+                              <ref name="component.mix.label"/>
+                           </zeroOrMore>
+                        </group>
+                     </optional>
+                  </group>
+                  <group>
+                     <ref name="substeps.label"/>
+                     <zeroOrMore>
+                        <ref name="component.mix.label"/>
+                     </zeroOrMore>
+                  </group>
+               </choice>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="step.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="step.role.attrib.role"/>
+      <optional>
+         <attribute name="performance">
+            <choice>
+               <string>optional</string>
+               <string>required</string>
+            </choice>
+         </attribute>
+      </optional>
+   </define>
+   <define name="substeps.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="substeps.label">
+      <choice>
+         <element name="substeps">
+            <ref name="substeps.role"/>
+            <group>
+               <oneOrMore>
+                  <ref name="step.label"/>
+               </oneOrMore>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="substeps.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="substeps.role.attrib.role"/>
+      <optional>
+         <attribute name="performance">
+            <choice>
+               <string>optional</string>
+               <string>required</string>
+            </choice>
+         </attribute>
+      </optional>
+   </define>
+   <define name="sidebarinfo.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="sidebarinfo.label">
+      <choice>
+         <element name="sidebarinfo">
+            <ref name="sidebarinfo.role"/>
+            <mixed>
+               <empty/>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="sidebarinfo.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="sidebarinfo.role.attrib.role"/>
+   </define>
+   <define name="sidebar.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="sidebar.label">
+      <choice>
+         <element name="sidebar">
+            <ref name="sidebar.role"/>
+            <group>
+               <optional>
+                  <ref name="sidebarinfo.label"/>
+               </optional>
+               <optional>
+                  <ref name="formalobject.title.content.label"/>
+               </optional>
+               <oneOrMore>
+                  <ref name="sidebar.mix.label"/>
+               </oneOrMore>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="sidebar.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="sidebar.role.attrib.role"/>
+   </define>
+   <define name="abstract.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="abstract.label">
+      <choice>
+         <element name="abstract">
+            <ref name="abstract.role"/>
+            <group>
+               <optional>
+                  <ref name="title.label"/>
+               </optional>
+               <oneOrMore>
+                  <ref name="para.class.label"/>
+               </oneOrMore>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="abstract.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="abstract.role.attrib.role"/>
+   </define>
+   <define name="authorblurb.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="authorblurb.label">
+      <choice>
+         <element name="authorblurb">
+            <ref name="authorblurb.role"/>
+            <group>
+               <optional>
+                  <ref name="title.label"/>
+               </optional>
+               <oneOrMore>
+                  <ref name="para.class.label"/>
+               </oneOrMore>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="authorblurb.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="authorblurb.role.attrib.role"/>
+   </define>
+   <define name="blockquote.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="blockquote.label">
+      <choice>
+         <element name="blockquote">
+            <ref name="blockquote.role"/>
+            <group>
+               <optional>
+                  <ref name="title.label"/>
+               </optional>
+               <optional>
+                  <ref name="attribution.label"/>
+               </optional>
+               <oneOrMore>
+                  <ref name="component.mix.label"/>
+               </oneOrMore>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="blockquote.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="blockquote.role.attrib.role"/>
+   </define>
+   <define name="attribution.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="attribution.label">
+      <choice>
+         <element name="attribution">
+            <ref name="attribution.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="para.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="attribution.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="attribution.role.attrib.role"/>
+   </define>
+   <define name="bridgehead.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="bridgehead.label">
+      <choice>
+         <element name="bridgehead">
+            <ref name="bridgehead.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="title.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="bridgehead.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="bridgehead.role.attrib.role"/>
+      <optional>
+         <attribute name="renderas">
+            <choice>
+               <string>other</string>
+               <string>sect1</string>
+               <string>sect2</string>
+               <string>sect3</string>
+               <string>sect4</string>
+               <string>sect5</string>
+            </choice>
+         </attribute>
+      </optional>
+   </define>
+   <define name="remark.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="remark.label">
+      <choice>
+         <element name="remark">
+            <ref name="remark.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="para.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="remark.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="remark.role.attrib.role"/>
+   </define>
+   <define name="epigraph.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="epigraph.label">
+      <choice>
+         <element name="epigraph">
+            <ref name="epigraph.role"/>
+            <group>
+               <optional>
+                  <ref name="attribution.label"/>
+               </optional>
+               <oneOrMore>
+                  <ref name="para.class.label"/>
+               </oneOrMore>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="epigraph.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="epigraph.role.attrib.role"/>
+   </define>
+   <define name="footnote.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="footnote.label">
+      <choice>
+         <element name="footnote">
+            <ref name="footnote.role"/>
+            <group>
+               <oneOrMore>
+                  <ref name="footnote.mix.label"/>
+               </oneOrMore>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="footnote.role">
+      <empty/>
+      <ref name="label.attrib.role"/>
+      <ref name="common.attrib.role"/>
+      <ref name="footnote.role.attrib.role"/>
+   </define>
+   <define name="highlights.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="highlights.label">
+      <choice>
+         <element name="highlights">
+            <ref name="highlights.role"/>
+            <group>
+               <oneOrMore>
+                  <ref name="highlights.mix.label"/>
+               </oneOrMore>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="highlights.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="highlights.role.attrib.role"/>
+   </define>
+   <define name="formalpara.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="formalpara.label">
+      <choice>
+         <element name="formalpara">
+            <ref name="formalpara.role"/>
+            <group>
+               <ref name="title.label"/>
+               <zeroOrMore>
+                  <ref name="ndxterm.class.label"/>
+               </zeroOrMore>
+               <ref name="para.label"/>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="formalpara.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="formalpara.role.attrib.role"/>
+   </define>
+   <define name="para.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="para.label">
+      <choice>
+         <element name="para">
+            <ref name="para.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="para.char.mix.label"/>
+                  <ref name="para.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="para.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="para.role.attrib.role"/>
+   </define>
+   <define name="simpara.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="simpara.label">
+      <choice>
+         <element name="simpara">
+            <ref name="simpara.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="para.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="simpara.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="simpara.role.attrib.role"/>
+   </define>
+   <define name="admon.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="admonitionType.label">
+      <choice>
+         <group>
+            <ref name="title.label"/>
+            <oneOrMore>
+               <ref name="admon.mix.label"/>
+            </oneOrMore>
+         </group>
+      </choice>
+   </define>
+   <define name="important.label">
+      <choice>
+         <element name="important">
+            <ref name="important.role"/>
+            <group>
+               <ref name="admonitionType.label"/>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="important.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="admon.role.attrib.role"/>
+   </define>
+   <define name="warning.label">
+      <choice>
+         <element name="warning">
+            <ref name="warning.role"/>
+            <group>
+               <ref name="admonitionType.label"/>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="warning.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="admon.role.attrib.role"/>
+   </define>
+   <define name="caution.label">
+      <choice>
+         <element name="caution">
+            <ref name="caution.role"/>
+            <group>
+               <ref name="admonitionType.label"/>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="caution.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="admon.role.attrib.role"/>
+   </define>
+   <define name="note.label">
+      <choice>
+         <element name="note">
+            <ref name="note.role"/>
+            <group>
+               <ref name="admonitionType.label"/>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="note.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="admon.role.attrib.role"/>
+   </define>
+   <define name="tip.label">
+      <choice>
+         <element name="tip">
+            <ref name="tip.role"/>
+            <group>
+               <ref name="admonitionType.label"/>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="tip.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="admon.role.attrib.role"/>
+   </define>
+   <define name="glosslist.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="glosslist.label">
+      <choice>
+         <element name="glosslist">
+            <ref name="glosslist.role"/>
+            <group>
+               <oneOrMore>
+                  <ref name="glossentry.label"/>
+               </oneOrMore>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="glosslist.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="glosslist.role.attrib.role"/>
+   </define>
+   <define name="glossentry.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="glossentry.label">
+      <choice>
+         <element name="glossentry">
+            <ref name="glossentry.role"/>
+            <group>
+               <ref name="glossterm.label"/>
+               <optional>
+                  <ref name="acronym.label"/>
+               </optional>
+               <optional>
+                  <ref name="abbrev.label"/>
+               </optional>
+               <zeroOrMore>
+                  <ref name="ndxterm.class.label"/>
+               </zeroOrMore>
+               <optional>
+                  <ref name="revhistory.label"/>
+               </optional>
+               <choice>
+                  <ref name="glosssee.label"/>
+                  <oneOrMore>
+                     <ref name="glossdef.label"/>
+                  </oneOrMore>
+               </choice>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="glossentry.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="glossentry.role.attrib.role"/>
+      <optional>
+         <attribute name="sortas">
+            <anyString/>
+         </attribute>
+      </optional>
+   </define>
+   <define name="glossdef.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="glossdef.label">
+      <choice>
+         <element name="glossdef">
+            <ref name="glossdef.role"/>
+            <group>
+               <oneOrMore>
+                  <ref name="glossdef.mix.label"/>
+               </oneOrMore>
+               <oneOrMore>
+                  <ref name="glossseealso.label"/>
+               </oneOrMore>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="glossdef.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="glossdef.role.attrib.role"/>
+      <optional>
+         <attribute name="subject">
+            <anyString/>
+         </attribute>
+      </optional>
+   </define>
+   <define name="glosssee.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="glosssee.label">
+      <choice>
+         <element name="glosssee">
+            <ref name="glosssee.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="para.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="glosssee.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="glosssee.role.attrib.role"/>
+      <optional>
+         <attribute name="otherterm">
+            <data type="xsd:IDREF"/>
+         </attribute>
+      </optional>
+   </define>
+   <define name="glossseealso.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="glossseealso.label">
+      <choice>
+         <element name="glossseealso">
+            <ref name="glossseealso.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="para.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="glossseealso.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="glossseealso.role.attrib.role"/>
+      <optional>
+         <attribute name="otherterm">
+            <data type="xsd:IDREF"/>
+         </attribute>
+      </optional>
+   </define>
+   <define name="itemizedlist.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="itemizedlist.label">
+      <choice>
+         <element name="itemizedlist">
+            <ref name="itemizedlist.role"/>
+            <group>
+               <optional>
+                  <ref name="formalobject.title.content.label"/>
+               </optional>
+               <oneOrMore>
+                  <ref name="listitem.label"/>
+               </oneOrMore>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="itemizedlist.role">
+      <empty/>
+      <ref name="mark.attrib.role"/>
+      <ref name="common.attrib.role"/>
+      <ref name="itemizedlist.role.attrib.role"/>
+      <optional>
+         <attribute name="spacing">
+            <choice>
+               <string>normal</string>
+               <string>compact</string>
+            </choice>
+         </attribute>
+      </optional>
+   </define>
+   <define name="orderedlist.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="orderedlist.label">
+      <choice>
+         <element name="orderedlist">
+            <ref name="orderedlist.role"/>
+            <group>
+               <optional>
+                  <ref name="formalobject.title.content.label"/>
+               </optional>
+               <oneOrMore>
+                  <ref name="listitem.label"/>
+               </oneOrMore>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="orderedlist.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="orderedlist.role.attrib.role"/>
+      <optional>
+         <attribute name="numeration">
+            <choice>
+               <string>arabic</string>
+               <string>upperalpha</string>
+               <string>loweralpha</string>
+               <string>upperroman</string>
+               <string>lowerroman</string>
+            </choice>
+         </attribute>
+      </optional>
+      <optional>
+         <attribute name="inheritnum">
+            <choice>
+               <string>inherit</string>
+               <string>ignore</string>
+            </choice>
+         </attribute>
+      </optional>
+      <optional>
+         <attribute name="continuation">
+            <choice>
+               <string>continues</string>
+               <string>restarts</string>
+            </choice>
+         </attribute>
+      </optional>
+      <optional>
+         <attribute name="spacing">
+            <choice>
+               <string>normal</string>
+               <string>compact</string>
+            </choice>
+         </attribute>
+      </optional>
+   </define>
+   <define name="listitem.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="listitem.label">
+      <choice>
+         <element name="listitem">
+            <ref name="listitem.role"/>
+            <group>
+               <oneOrMore>
+                  <ref name="component.mix.label"/>
+               </oneOrMore>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="listitem.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="listitem.role.attrib.role"/>
+      <optional>
+         <attribute name="override">
+            <anyString/>
+         </attribute>
+      </optional>
+   </define>
+   <define name="segmentedlist.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="segmentedlist.label">
+      <choice>
+         <element name="segmentedlist">
+            <ref name="segmentedlist.role"/>
+            <group>
+               <optional>
+                  <ref name="formalobject.title.content.label"/>
+               </optional>
+               <ref name="segtitle.label"/>
+               <zeroOrMore>
+                  <ref name="segtitle.label"/>
+               </zeroOrMore>
+               <oneOrMore>
+                  <ref name="seglistitem.label"/>
+               </oneOrMore>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="segmentedlist.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="segmentedlist.role.attrib.role"/>
+   </define>
+   <define name="segtitle.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="segtitle.label">
+      <choice>
+         <element name="segtitle">
+            <ref name="segtitle.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="title.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="segtitle.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="segtitle.role.attrib.role"/>
+   </define>
+   <define name="seglistitem.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="seglistitem.label">
+      <choice>
+         <element name="seglistitem">
+            <ref name="seglistitem.role"/>
+            <group>
+               <ref name="seg.label"/>
+               <zeroOrMore>
+                  <ref name="seg.label"/>
+               </zeroOrMore>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="seglistitem.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="seglistitem.role.attrib.role"/>
+   </define>
+   <define name="seg.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="seg.label">
+      <choice>
+         <element name="seg">
+            <ref name="seg.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="para.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="seg.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="seg.role.attrib.role"/>
+   </define>
+   <define name="simplelist.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="simplelist.label">
+      <choice>
+         <element name="simplelist">
+            <ref name="simplelist.role"/>
+            <group>
+               <oneOrMore>
+                  <ref name="member.label"/>
+               </oneOrMore>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="simplelist.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="simplelist.role.attrib.role"/>
+      <optional>
+         <attribute name="columns">
+            <data type="xsd:integer"/>
+         </attribute>
+      </optional>
+      <optional>
+         <attribute name="type">
+            <choice>
+               <string>inline</string>
+               <string>vert</string>
+               <string>horiz</string>
+            </choice>
+         </attribute>
+      </optional>
+   </define>
+   <define name="member.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="member.label">
+      <choice>
+         <element name="member">
+            <ref name="member.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="para.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="member.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="member.role.attrib.role"/>
+   </define>
+   <define name="variablelist.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="variablelist.label">
+      <choice>
+         <element name="variablelist">
+            <ref name="variablelist.role"/>
+            <group>
+               <optional>
+                  <ref name="formalobject.title.content.label"/>
+               </optional>
+               <oneOrMore>
+                  <ref name="varlistentry.label"/>
+               </oneOrMore>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="variablelist.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="variablelist.role.attrib.role"/>
+      <optional>
+         <attribute name="termlength">
+            <anyString/>
+         </attribute>
+      </optional>
+   </define>
+   <define name="varlistentry.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="varlistentry.label">
+      <choice>
+         <element name="varlistentry">
+            <ref name="varlistentry.role"/>
+            <group>
+               <oneOrMore>
+                  <ref name="term.label"/>
+               </oneOrMore>
+               <ref name="listitem.label"/>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="varlistentry.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="varlistentry.role.attrib.role"/>
+   </define>
+   <define name="term.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="term.label">
+      <choice>
+         <element name="term">
+            <ref name="term.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="para.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="term.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="term.role.attrib.role"/>
+   </define>
+   <define name="calloutlist.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="calloutlist.label">
+      <choice>
+         <element name="calloutlist">
+            <ref name="calloutlist.role"/>
+            <group>
+               <optional>
+                  <ref name="formalobject.title.content.label"/>
+               </optional>
+               <oneOrMore>
+                  <ref name="callout.label"/>
+               </oneOrMore>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="calloutlist.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="calloutlist.role.attrib.role"/>
+   </define>
+   <define name="callout.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="callout.label">
+      <choice>
+         <element name="callout">
+            <ref name="callout.role"/>
+            <group>
+               <oneOrMore>
+                  <ref name="component.mix.label"/>
+               </oneOrMore>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="callout.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="callout.role.attrib.role"/>
+      <optional>
+         <attribute name="arearefs">
+            <data type="xsd:IDREFS"/>
+         </attribute>
+      </optional>
+   </define>
+   <define name="example.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="example.label">
+      <choice>
+         <element name="example">
+            <ref name="example.role"/>
+            <group>
+               <optional>
+                  <ref name="formalobject.title.content.label"/>
+               </optional>
+               <oneOrMore>
+                  <ref name="example.mix.label"/>
+               </oneOrMore>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="example.role">
+      <empty/>
+      <ref name="label.attrib.role"/>
+      <ref name="width.attrib.role"/>
+      <ref name="common.attrib.role"/>
+      <ref name="example.role.attrib.role"/>
+   </define>
+   <define name="informalexample.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="informalexample.label">
+      <choice>
+         <element name="informalexample">
+            <ref name="informalexample.role"/>
+            <group>
+               <oneOrMore>
+                  <ref name="example.mix.label"/>
+               </oneOrMore>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="informalexample.role">
+      <empty/>
+      <ref name="width.attrib.role"/>
+      <ref name="common.attrib.role"/>
+      <ref name="informalexample.role.attrib.role"/>
+   </define>
+   <define name="programlistingco.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="programlistingco.label">
+      <choice>
+         <element name="programlistingco">
+            <ref name="programlistingco.role"/>
+            <group>
+               <ref name="areaspec.label"/>
+               <ref name="programlisting.label"/>
+               <zeroOrMore>
+                  <ref name="calloutlist.label"/>
+               </zeroOrMore>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="programlistingco.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="programlistingco.role.attrib.role"/>
+   </define>
+   <define name="areaspec.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="areaspec.label">
+      <choice>
+         <element name="areaspec">
+            <ref name="areaspec.role"/>
+            <oneOrMore>
+               <choice>
+                  <ref name="area.label"/>
+                  <ref name="areaset.label"/>
+               </choice>
+            </oneOrMore>
+         </element>
+      </choice>
+   </define>
+   <define name="areaspec.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="areaspec.role.attrib.role"/>
+      <optional>
+         <attribute name="units">
+            <choice>
+               <string>calspair</string>
+               <string>linecolumn</string>
+               <string>linerange</string>
+               <string>linecolumnpair</string>
+               <string>other</string>
+            </choice>
+         </attribute>
+      </optional>
+      <optional>
+         <attribute name="otherunits">
+            <data type="xsd:NMTOKEN"/>
+         </attribute>
+      </optional>
+   </define>
+   <define name="area.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="area.label">
+      <choice>
+         <element name="area">
+            <ref name="area.role"/>
+            <empty/>
+         </element>
+      </choice>
+   </define>
+   <define name="area.role">
+      <empty/>
+      <ref name="label.attrib.role"/>
+      <ref name="linkends.attrib.role"/>
+      <ref name="idreq.common.attrib.role"/>
+      <ref name="area.role.attrib.role"/>
+      <optional>
+         <attribute name="units">
+            <choice>
+               <string>calspair</string>
+               <string>linecolumn</string>
+               <string>linerange</string>
+               <string>linecolumnpair</string>
+               <string>other</string>
+            </choice>
+         </attribute>
+      </optional>
+      <optional>
+         <attribute name="otherunits">
+            <data type="xsd:NMTOKEN"/>
+         </attribute>
+      </optional>
+      <attribute name="coords">
+         <anyString/>
+      </attribute>
+   </define>
+   <define name="areaset.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="areaset.label">
+      <choice>
+         <element name="areaset">
+            <ref name="areaset.role"/>
+            <group>
+               <oneOrMore>
+                  <ref name="area.label"/>
+               </oneOrMore>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="areaset.role">
+      <empty/>
+      <ref name="label.attrib.role"/>
+      <ref name="idreq.common.attrib.role"/>
+      <ref name="areaset.role.attrib.role"/>
+      <optional>
+         <attribute name="units">
+            <choice>
+               <string>calspair</string>
+               <string>linecolumn</string>
+               <string>linerange</string>
+               <string>linecolumnpair</string>
+               <string>other</string>
+            </choice>
+         </attribute>
+      </optional>
+      <optional>
+         <attribute name="otherunits">
+            <data type="xsd:NMTOKEN"/>
+         </attribute>
+      </optional>
+      <attribute name="coords">
+         <anyString/>
+      </attribute>
+   </define>
+   <define name="programlisting.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="programlisting.label">
+      <choice>
+         <element name="programlisting">
+            <ref name="programlisting.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="para.char.mix.label"/>
+                  <ref name="co.label"/>
+                  <ref name="lineannotation.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="programlisting.role">
+      <empty/>
+      <ref name="width.attrib.role"/>
+      <ref name="linespecific.attrib.role"/>
+      <ref name="common.attrib.role"/>
+      <ref name="programlisting.role.attrib.role"/>
+   </define>
+   <define name="literallayout.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="literallayout.label">
+      <choice>
+         <element name="literallayout">
+            <ref name="literallayout.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="para.char.mix.label"/>
+                  <ref name="co.label"/>
+                  <ref name="lineannotation.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="literallayout.role">
+      <empty/>
+      <ref name="width.attrib.role"/>
+      <ref name="linespecific.attrib.role"/>
+      <ref name="common.attrib.role"/>
+      <ref name="literallayout.role.attrib.role"/>
+      <optional>
+         <attribute name="class">
+            <choice>
+               <string>monospaced</string>
+               <string>normal</string>
+            </choice>
+         </attribute>
+      </optional>
+   </define>
+   <define name="screenco.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="screenco.label">
+      <choice>
+         <element name="screenco">
+            <ref name="screenco.role"/>
+            <group>
+               <ref name="areaspec.label"/>
+               <ref name="screen.label"/>
+               <zeroOrMore>
+                  <ref name="calloutlist.label"/>
+               </zeroOrMore>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="screenco.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="screenco.role.attrib.role"/>
+   </define>
+   <define name="screen.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="screen.label">
+      <choice>
+         <element name="screen">
+            <ref name="screen.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="para.char.mix.label"/>
+                  <ref name="co.label"/>
+                  <ref name="lineannotation.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="screen.role">
+      <empty/>
+      <ref name="width.attrib.role"/>
+      <ref name="linespecific.attrib.role"/>
+      <ref name="common.attrib.role"/>
+      <ref name="screen.role.attrib.role"/>
+   </define>
+   <define name="screenshot.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="screenshot.label">
+      <choice>
+         <element name="screenshot">
+            <ref name="screenshot.role"/>
+            <group>
+               <optional>
+                  <ref name="screeninfo.label"/>
+               </optional>
+               <choice>
+                  <ref name="graphic.label"/>
+                  <ref name="graphicco.label"/>
+                  <ref name="mediaobject.label"/>
+                  <ref name="mediaobjectco.label"/>
+               </choice>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="screenshot.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="screenshot.role.attrib.role"/>
+   </define>
+   <define name="screeninfo.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="screeninfo.label">
+      <choice>
+         <element name="screeninfo">
+            <ref name="screeninfo.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="para.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="screeninfo.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="screeninfo.role.attrib.role"/>
+   </define>
+   <define name="figure.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="figure.label">
+      <choice>
+         <element name="figure">
+            <ref name="figure.role"/>
+            <group>
+               <optional>
+                  <ref name="formalobject.title.content.label"/>
+               </optional>
+               <oneOrMore>
+                  <choice>
+                     <ref name="figure.mix.label"/>
+                     <ref name="link.char.class.label"/>
+                  </choice>
+               </oneOrMore>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="figure.role">
+      <empty/>
+      <ref name="label.attrib.role"/>
+      <ref name="common.attrib.role"/>
+      <ref name="figure.role.attrib.role"/>
+      <optional>
+         <attribute name="float">
+            <choice>
+               <string>0</string>
+               <string>1</string>
+            </choice>
+         </attribute>
+      </optional>
+      <optional>
+         <attribute name="pgwide">
+            <choice>
+               <string>0</string>
+               <string>1</string>
+            </choice>
+         </attribute>
+      </optional>
+   </define>
+   <define name="informalfigure.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="informalfigure.label">
+      <choice>
+         <element name="informalfigure">
+            <ref name="informalfigure.role"/>
+            <oneOrMore>
+               <choice>
+                  <ref name="figure.mix.label"/>
+                  <ref name="link.char.class.label"/>
+               </choice>
+            </oneOrMore>
+         </element>
+      </choice>
+   </define>
+   <define name="informalfigure.role">
+      <empty/>
+      <ref name="label.attrib.role"/>
+      <ref name="common.attrib.role"/>
+      <ref name="informalfigure.role.attrib.role"/>
+      <optional>
+         <attribute name="float">
+            <choice>
+               <string>0</string>
+               <string>1</string>
+            </choice>
+         </attribute>
+      </optional>
+      <optional>
+         <attribute name="pgwide">
+            <choice>
+               <string>0</string>
+               <string>1</string>
+            </choice>
+         </attribute>
+      </optional>
+   </define>
+   <define name="graphicco.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="graphicco.label">
+      <choice>
+         <element name="graphicco">
+            <ref name="graphicco.role"/>
+            <group>
+               <ref name="areaspec.label"/>
+               <ref name="graphic.label"/>
+               <zeroOrMore>
+                  <ref name="calloutlist.label"/>
+               </zeroOrMore>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="graphicco.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="graphicco.role.attrib.role"/>
+   </define>
+   <define name="graphic.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="graphic.label">
+      <choice>
+         <element name="graphic">
+            <ref name="graphic.role"/>
+            <empty/>
+         </element>
+      </choice>
+   </define>
+   <define name="graphic.role">
+      <empty/>
+      <ref name="graphics.attrib.role"/>
+      <ref name="common.attrib.role"/>
+      <ref name="graphic.role.attrib.role"/>
+   </define>
+   <define name="inlinegraphic.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="inlinegraphic.label">
+      <choice>
+         <element name="inlinegraphic">
+            <ref name="inlinegraphic.role"/>
+            <empty/>
+         </element>
+      </choice>
+   </define>
+   <define name="inlinegraphic.role">
+      <empty/>
+      <ref name="graphics.attrib.role"/>
+      <ref name="common.attrib.role"/>
+      <ref name="inlinegraphic.role.attrib.role"/>
+   </define>
+   <define name="mediaobject.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="mediaobject.label">
+      <choice>
+         <element name="mediaobject">
+            <ref name="mediaobject.role"/>
+            <group>
+               <optional>
+                  <ref name="objectinfo.label"/>
+               </optional>
+               <ref name="mediaobject.mix.label"/>
+               <zeroOrMore>
+                  <ref name="mediaobject.mix.label"/>
+                  <ref name="textobject.label"/>
+               </zeroOrMore>
+               <optional>
+                  <ref name="caption.label"/>
+               </optional>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="mediaobject.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="mediaobject.role.attrib.role"/>
+   </define>
+   <define name="inlinemediaobject.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="inlinemediaobject.label">
+      <choice>
+         <element name="inlinemediaobject">
+            <ref name="inlinemediaobject.role"/>
+            <group>
+               <optional>
+                  <ref name="objectinfo.label"/>
+               </optional>
+               <ref name="mediaobject.mix.label"/>
+               <zeroOrMore>
+                  <ref name="mediaobject.mix.label"/>
+                  <ref name="textobject.label"/>
+               </zeroOrMore>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="inlinemediaobject.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="inlinemediaobject.role.attrib.role"/>
+   </define>
+   <define name="videoobject.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="videoobject.label">
+      <choice>
+         <element name="videoobject">
+            <ref name="videoobject.role"/>
+            <group>
+               <optional>
+                  <ref name="objectinfo.label"/>
+               </optional>
+               <ref name="videodata.label"/>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="videoobject.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="videoobject.role.attrib.role"/>
+   </define>
+   <define name="audioobject.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="audioobject.label">
+      <choice>
+         <element name="audioobject">
+            <ref name="audioobject.role"/>
+            <group>
+               <optional>
+                  <ref name="objectinfo.label"/>
+               </optional>
+               <ref name="audiodata.label"/>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="audioobject.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="audioobject.role.attrib.role"/>
+   </define>
+   <define name="imageobject.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="imageobject.label">
+      <choice>
+         <element name="imageobject">
+            <ref name="imageobject.role"/>
+            <group>
+               <optional>
+                  <ref name="objectinfo.label"/>
+               </optional>
+               <ref name="imagedata.label"/>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="imageobject.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="imageobject.role.attrib.role"/>
+   </define>
+   <define name="textobject.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="textobject.label">
+      <choice>
+         <element name="textobject">
+            <ref name="textobject.role"/>
+            <group>
+               <optional>
+                  <ref name="objectinfo.label"/>
+               </optional>
+               <choice>
+                  <ref name="phrase.label"/>
+                  <oneOrMore>
+                     <ref name="textobject.mix.label"/>
+                  </oneOrMore>
+               </choice>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="textobject.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="textobject.role.attrib.role"/>
+   </define>
+   <define name="objectinfo.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="objectinfo.label">
+      <choice>
+         <element name="objectinfo">
+            <ref name="objectinfo.role"/>
+            <group>
+               <ref name="infoContentModel.label"/>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="objectinfo.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="objectinfo.role.attrib.role"/>
+   </define>
+   <define name="objectdata.attrib.role">
+      <empty/>
+      <optional>
+         <attribute name="fileref">
+            <anyString/>
+         </attribute>
+      </optional>
+      <optional>
+         <attribute name="format">
+            <choice>
+               <string>BMP</string>
+               <string>CGM-CHAR</string>
+               <string>CGM-BINARY</string>
+               <string>CGM-CLEAR</string>
+               <string>DITROFF</string>
+               <string>DVI</string>
+               <string>EPS</string>
+               <string>EQN</string>
+               <string>FAX</string>
+               <string>GIF</string>
+               <string>GIF87a</string>
+               <string>GIF89a</string>
+               <string>JPG</string>
+               <string>JPEG</string>
+               <string>IGES</string>
+               <string>PCX</string>
+               <string>PIC</string>
+               <string>PNG</string>
+               <string>PS</string>
+               <string>SGML</string>
+               <string>TBL</string>
+               <string>TEX</string>
+               <string>TIFF</string>
+               <string>WMF</string>
+               <string>WPG</string>
+               <string>linespecific</string>
+            </choice>
+         </attribute>
+      </optional>
+      <optional>
+         <attribute name="srccredit">
+            <anyString/>
+         </attribute>
+      </optional>
+   </define>
+   <define name="videodata.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="videodata.label">
+      <choice>
+         <element name="videodata">
+            <ref name="videodata.role"/>
+            <empty/>
+         </element>
+      </choice>
+   </define>
+   <define name="videodata.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="objectdata.attrib.role"/>
+      <optional>
+         <attribute name="width">
+            <anyString/>
+         </attribute>
+      </optional>
+      <optional>
+         <attribute name="depth">
+            <anyString/>
+         </attribute>
+      </optional>
+      <optional>
+         <attribute name="align">
+            <choice>
+               <string>left</string>
+               <string>right</string>
+               <string>center</string>
+            </choice>
+         </attribute>
+      </optional>
+      <optional>
+         <attribute name="scale">
+            <anyString/>
+         </attribute>
+      </optional>
+      <optional>
+         <attribute name="scalefit">
+            <choice>
+               <string>0</string>
+               <string>1</string>
+            </choice>
+         </attribute>
+      </optional>
+   </define>
+   <define name="audiodata.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="audiodata.label">
+      <choice>
+         <element name="audiodata">
+            <ref name="audiodata.role"/>
+            <empty/>
+         </element>
+      </choice>
+   </define>
+   <define name="audiodata.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="objectdata.attrib.role"/>
+      <ref name="audiodata.role.attrib.role"/>
+   </define>
+   <define name="imagedata.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="imagedata.label">
+      <choice>
+         <element name="imagedata">
+            <ref name="imagedata.role"/>
+            <empty/>
+         </element>
+      </choice>
+   </define>
+   <define name="imagedata.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="objectdata.attrib.role"/>
+      <ref name="imagedata.role.attrib.role"/>
+      <optional>
+         <attribute name="width">
+            <anyString/>
+         </attribute>
+      </optional>
+      <optional>
+         <attribute name="depth">
+            <anyString/>
+         </attribute>
+      </optional>
+      <optional>
+         <attribute name="align">
+            <choice>
+               <string>left</string>
+               <string>right</string>
+               <string>center</string>
+            </choice>
+         </attribute>
+      </optional>
+      <optional>
+         <attribute name="scale">
+            <anyString/>
+         </attribute>
+      </optional>
+      <optional>
+         <attribute name="scalefit">
+            <choice>
+               <string>0</string>
+               <string>1</string>
+            </choice>
+         </attribute>
+      </optional>
+   </define>
+   <define name="caption.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="caption.label">
+      <choice>
+         <element name="caption">
+            <ref name="caption.role"/>
+            <group>
+               <zeroOrMore>
+                  <ref name="textobject.mix.label"/>
+               </zeroOrMore>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="caption.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="caption.role.attrib.role"/>
+   </define>
+   <define name="mediaobjectco.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="mediaobjectco.label">
+      <choice>
+         <element name="mediaobjectco">
+            <ref name="mediaobjectco.role"/>
+            <group>
+               <optional>
+                  <ref name="objectinfo.label"/>
+               </optional>
+               <ref name="imageobjectco.label"/>
+               <zeroOrMore>
+                  <ref name="imageobjectco.label"/>
+                  <ref name="textobject.label"/>
+               </zeroOrMore>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="mediaobjectco.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="mediaobjectco.role.attrib.role"/>
+   </define>
+   <define name="imageobjectco.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="imageobjectco.label">
+      <choice>
+         <element name="imageobjectco">
+            <ref name="imageobjectco.role"/>
+            <group>
+               <ref name="areaspec.label"/>
+               <ref name="imageobject.label"/>
+               <zeroOrMore>
+                  <ref name="calloutlist.label"/>
+               </zeroOrMore>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="imageobjectco.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="imageobjectco.role.attrib.role"/>
+   </define>
+   <define name="equation.content.label">
+     <group>
+        <optional>
+           <ref name="alt.label"/>
+        </optional>
+        <choice>
+           <oneOrMore>
+              <ref name="graphic.label"/>
+           </oneOrMore>
+           <oneOrMore>
+              <ref name="mediaobject.label"/>
+           </oneOrMore>
+        </choice>
+   </group>
+   </define>
+   <define name="equation.content.role">
+      <empty/>
+   </define>
+   <define name="inlineequation.content.label">
+     <group>
+        <optional>
+           <ref name="alt.label"/>
+        </optional>
+        <choice>
+           <oneOrMore>
+              <ref name="graphic.label"/>
+           </oneOrMore>
+           <oneOrMore>
+              <ref name="inlinemediaobject.label"/>
+           </oneOrMore>
+        </choice>
+     </group>
+   </define>
+   <define name="inlineequation.content.role">
+      <empty/>
+   </define>
+   <define name="equation.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="equation.label">
+      <choice>
+         <element name="equation">
+            <ref name="equation.role"/>
+            <group>
+               <optional>
+                  <ref name="formalobject.title.content.label"/>
+               </optional>
+               <choice>
+                  <ref name="informalequation.label"/>
+                  <ref name="equation.content.label"/>
+               </choice>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="equation.role">
+      <empty/>
+      <ref name="label.attrib.role"/>
+      <ref name="common.attrib.role"/>
+      <ref name="equation.role.attrib.role"/>
+   </define>
+   <define name="informalequation.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="informalequation.label">
+      <choice>
+         <element name="informalequation">
+            <ref name="informalequation.role"/>
+            <group>
+               <ref name="equation.content.label"/>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="informalequation.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="informalequation.role.attrib.role"/>
+   </define>
+   <define name="inlineequation.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="inlineequation.label">
+      <choice>
+         <element name="inlineequation">
+            <ref name="inlineequation.role"/>
+            <group>
+               <ref name="inlineequation.content.label"/>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="inlineequation.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="inlineequation.role.attrib.role"/>
+   </define>
+   <define name="alt.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="alt.label">
+      <choice>
+         <element name="alt">
+            <ref name="alt.role"/>
+            <mixed>
+               <empty/>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="alt.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="alt.role.attrib.role"/>
+   </define>
+   <define name="synopsis.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="synopsis.label">
+      <choice>
+         <element name="synopsis">
+            <ref name="synopsis.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="para.char.mix.label"/>
+                  <ref name="graphic.label"/>
+                  <ref name="mediaobject.label"/>
+                  <ref name="lineannotation.label"/>
+                  <ref name="co.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="synopsis.role">
+      <empty/>
+      <ref name="label.attrib.role"/>
+      <ref name="linespecific.attrib.role"/>
+      <ref name="common.attrib.role"/>
+      <ref name="synopsis.role.attrib.role"/>
+   </define>
+   <define name="cmdsynopsis.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="cmdsynopsis.label">
+      <choice>
+         <element name="cmdsynopsis">
+            <ref name="cmdsynopsis.role"/>
+            <group>
+               <oneOrMore>
+                  <choice>
+                     <ref name="command.label"/>
+                     <ref name="arg.label"/>
+                     <ref name="group.label"/>
+                     <ref name="sbr.label"/>
+                  </choice>
+               </oneOrMore>
+               <zeroOrMore>
+                  <ref name="synopfragment.label"/>
+               </zeroOrMore>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="cmdsynopsis.role">
+      <empty/>
+      <ref name="label.attrib.role"/>
+      <ref name="common.attrib.role"/>
+      <ref name="cmdsynopsis.role.attrib.role"/>
+      <optional>
+         <attribute name="sepchar">
+            <anyString/>
+         </attribute>
+      </optional>
+      <optional>
+         <attribute name="cmdlength">
+            <data type="xsd:integer"/>
+         </attribute>
+      </optional>
+   </define>
+   <define name="arg.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="arg.label">
+      <choice>
+         <element name="arg">
+            <ref name="arg.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="arg.label"/>
+                  <ref name="group.label"/>
+                  <ref name="option.label"/>
+                  <ref name="synopfragmentref.label"/>
+                  <ref name="replaceable.label"/>
+                  <ref name="sbr.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="arg.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="arg.role.attrib.role"/>
+      <optional>
+         <attribute name="choice">
+            <choice>
+               <string>opt</string>
+               <string>req</string>
+               <string>plain</string>
+            </choice>
+         </attribute>
+      </optional>
+      <optional>
+         <attribute name="rep">
+            <choice>
+               <string>norepeat</string>
+               <string>repeat</string>
+            </choice>
+         </attribute>
+      </optional>
+   </define>
+   <define name="group.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="group.label">
+      <choice>
+         <element name="group">
+            <ref name="group.role"/>
+            <oneOrMore>
+               <choice>
+                  <ref name="arg.label"/>
+                  <ref name="group.label"/>
+                  <ref name="option.label"/>
+                  <ref name="synopfragmentref.label"/>
+                  <ref name="replaceable.label"/>
+                  <ref name="sbr.label"/>
+               </choice>
+            </oneOrMore>
+         </element>
+      </choice>
+   </define>
+   <define name="group.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="group.role.attrib.role"/>
+      <optional>
+         <attribute name="choice">
+            <choice>
+               <string>opt</string>
+               <string>req</string>
+               <string>plain</string>
+            </choice>
+         </attribute>
+      </optional>
+      <optional>
+         <attribute name="rep">
+            <choice>
+               <string>norepeat</string>
+               <string>repeat</string>
+            </choice>
+         </attribute>
+      </optional>
+   </define>
+   <define name="sbr.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="sbr.label">
+      <choice>
+         <element name="sbr">
+            <ref name="sbr.role"/>
+            <empty/>
+         </element>
+      </choice>
+   </define>
+   <define name="sbr.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="sbr.role.attrib.role"/>
+   </define>
+   <define name="synopfragmentref.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="synopfragmentref.label">
+      <choice>
+         <element name="synopfragmentref">
+            <ref name="synopfragmentref.role"/>
+            <mixed>
+               <empty/>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="synopfragmentref.role">
+      <empty/>
+      <ref name="linkendreq.attrib.role"/>
+      <ref name="common.attrib.role"/>
+      <ref name="synopfragmentref.role.attrib.role"/>
+   </define>
+   <define name="synopfragment.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="synopfragment.label">
+      <choice>
+         <element name="synopfragment">
+            <ref name="synopfragment.role"/>
+            <oneOrMore>
+               <choice>
+                  <ref name="arg.label"/>
+                  <ref name="group.label"/>
+               </choice>
+            </oneOrMore>
+         </element>
+      </choice>
+   </define>
+   <define name="synopfragment.role">
+      <empty/>
+      <ref name="idreq.common.attrib.role"/>
+      <ref name="synopfragment.role.attrib.role"/>
+   </define>
+   <define name="funcsynopsis.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="funcsynopsis.label">
+      <choice>
+         <element name="funcsynopsis">
+            <ref name="funcsynopsis.role"/>
+            <oneOrMore>
+               <choice>
+                  <ref name="funcsynopsisinfo.label"/>
+                  <ref name="funcprototype.label"/>
+               </choice>
+            </oneOrMore>
+         </element>
+      </choice>
+   </define>
+   <define name="funcsynopsis.role">
+      <empty/>
+      <ref name="label.attrib.role"/>
+      <ref name="common.attrib.role"/>
+      <ref name="funcsynopsis.role.attrib.role"/>
+   </define>
+   <define name="funcsynopsisinfo.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="funcsynopsisinfo.label">
+      <choice>
+         <element name="funcsynopsisinfo">
+            <ref name="funcsynopsisinfo.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="cptr.char.mix.label"/>
+                  <ref name="lineannotation.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="funcsynopsisinfo.role">
+      <empty/>
+      <ref name="linespecific.attrib.role"/>
+      <ref name="common.attrib.role"/>
+      <ref name="funcsynopsisinfo.role.attrib.role"/>
+   </define>
+   <define name="funcprototype.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="funcprototype.label">
+      <choice>
+         <element name="funcprototype">
+            <ref name="funcprototype.role"/>
+            <group>
+               <ref name="funcdef.label"/>
+               <oneOrMore>
+                  <choice>
+                     <ref name="void.label"/>
+                     <ref name="varargs.label"/>
+                     <ref name="paramdef.label"/>
+                  </choice>
+               </oneOrMore>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="funcprototype.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="funcprototype.role.attrib.role"/>
+   </define>
+   <define name="funcdef.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="funcdef.label">
+      <choice>
+         <element name="funcdef">
+            <ref name="funcdef.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="replaceable.label"/>
+                  <ref name="function.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="funcdef.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="funcdef.role.attrib.role"/>
+   </define>
+   <define name="void.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="void.label">
+      <choice>
+         <element name="void">
+            <ref name="void.role"/>
+            <empty/>
+         </element>
+      </choice>
+   </define>
+   <define name="void.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="void.role.attrib.role"/>
+   </define>
+   <define name="varargs.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="varargs.label">
+      <choice>
+         <element name="varargs">
+            <ref name="varargs.role"/>
+            <empty/>
+         </element>
+      </choice>
+   </define>
+   <define name="varargs.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="varargs.role.attrib.role"/>
+   </define>
+   <define name="paramdef.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="paramdef.label">
+      <choice>
+         <element name="paramdef">
+            <ref name="paramdef.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="replaceable.label"/>
+                  <ref name="parameter.label"/>
+                  <ref name="funcparams.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="paramdef.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="paramdef.role.attrib.role"/>
+   </define>
+   <define name="funcparams.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="funcparams.label">
+      <choice>
+         <element name="funcparams">
+            <ref name="funcparams.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="cptr.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="funcparams.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="funcparams.role.attrib.role"/>
+   </define>
+   <define name="classsynopsis.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="classsynopsis.label">
+      <choice>
+         <element name="classsynopsis">
+            <ref name="classsynopsis.role"/>
+            <group>
+               <oneOrMore>
+                  <choice>
+                     <ref name="ooclass.label"/>
+                     <ref name="oointerface.label"/>
+                     <ref name="ooexception.label"/>
+                  </choice>
+               </oneOrMore>
+               <zeroOrMore>
+                  <ref name="classsynopsisinfo.label"/>
+                  <ref name="fieldsynopsis.label"/>
+                  <ref name="method.synop.class.label"/>
+               </zeroOrMore>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="classsynopsis.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="classsynopsis.role.attrib.role"/>
+      <optional>
+         <attribute name="language">
+            <anyString/>
+         </attribute>
+      </optional>
+      <optional>
+         <attribute name="class">
+            <choice>
+               <string>class</string>
+               <string>interface</string>
+            </choice>
+         </attribute>
+      </optional>
+   </define>
+   <define name="classsynopsisinfo.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="classsynopsisinfo.label">
+      <choice>
+         <element name="classsynopsisinfo">
+            <ref name="classsynopsisinfo.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="cptr.char.mix.label"/>
+                  <ref name="lineannotation.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="classsynopsisinfo.role">
+      <empty/>
+      <ref name="linespecific.attrib.role"/>
+      <ref name="common.attrib.role"/>
+      <ref name="classsynopsisinfo.role.attrib.role"/>
+   </define>
+   <define name="ooclass.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="ooclass.label">
+      <choice>
+         <element name="ooclass">
+            <ref name="ooclass.role"/>
+            <group>
+               <zeroOrMore>
+                  <ref name="modifier.label"/>
+               </zeroOrMore>
+               <ref name="classname.label"/>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="ooclass.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="ooclass.role.attrib.role"/>
+   </define>
+   <define name="oointerface.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="oointerface.label">
+      <choice>
+         <element name="oointerface">
+            <ref name="oointerface.role"/>
+            <group>
+               <zeroOrMore>
+                  <ref name="modifier.label"/>
+               </zeroOrMore>
+               <ref name="interfacename.label"/>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="oointerface.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="oointerface.role.attrib.role"/>
+   </define>
+   <define name="ooexception.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="ooexception.label">
+      <choice>
+         <element name="ooexception">
+            <ref name="ooexception.role"/>
+            <group>
+               <zeroOrMore>
+                  <ref name="modifier.label"/>
+               </zeroOrMore>
+               <ref name="exceptionname.label"/>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="ooexception.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="ooexception.role.attrib.role"/>
+   </define>
+   <define name="modifier.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="modifier.label">
+      <choice>
+         <element name="modifier">
+            <ref name="modifier.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="smallcptr.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="modifier.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="modifier.role.attrib.role"/>
+   </define>
+   <define name="interfacename.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="interfacename.label">
+      <choice>
+         <element name="interfacename">
+            <ref name="interfacename.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="smallcptr.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="interfacename.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="interfacename.role.attrib.role"/>
+   </define>
+   <define name="exceptionname.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="exceptionname.label">
+      <choice>
+         <element name="exceptionname">
+            <ref name="exceptionname.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="smallcptr.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="exceptionname.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="exceptionname.role.attrib.role"/>
+   </define>
+   <define name="fieldsynopsis.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="fieldsynopsis.label">
+      <choice>
+         <element name="fieldsynopsis">
+            <ref name="fieldsynopsis.role"/>
+            <group>
+               <zeroOrMore>
+                  <ref name="modifier.label"/>
+               </zeroOrMore>
+               <optional>
+                  <ref name="type.label"/>
+               </optional>
+               <ref name="varname.label"/>
+               <optional>
+                  <ref name="initializer.label"/>
+               </optional>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="fieldsynopsis.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="fieldsynopsis.role.attrib.role"/>
+   </define>
+   <define name="initializer.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="initializer.label">
+      <choice>
+         <element name="initializer">
+            <ref name="initializer.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="smallcptr.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="initializer.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="initializer.role.attrib.role"/>
+   </define>
+   <define name="constructorsynopsis.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="constructorsynopsis.label">
+      <choice>
+         <element name="constructorsynopsis">
+            <ref name="constructorsynopsis.role"/>
+            <group>
+               <zeroOrMore>
+                  <ref name="modifier.label"/>
+               </zeroOrMore>
+               <optional>
+                  <ref name="methodname.label"/>
+               </optional>
+               <choice>
+                  <oneOrMore>
+                     <ref name="methodparam.label"/>
+                  </oneOrMore>
+                  <ref name="void.label"/>
+               </choice>
+               <zeroOrMore>
+                  <ref name="exceptionname.label"/>
+               </zeroOrMore>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="constructorsynopsis.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="constructorsynopsis.role.attrib.role"/>
+   </define>
+   <define name="destructorsynopsis.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="destructorsynopsis.label">
+      <choice>
+         <element name="destructorsynopsis">
+            <ref name="destructorsynopsis.role"/>
+            <group>
+               <zeroOrMore>
+                  <ref name="modifier.label"/>
+               </zeroOrMore>
+               <optional>
+                  <ref name="methodname.label"/>
+               </optional>
+               <choice>
+                  <oneOrMore>
+                     <ref name="methodparam.label"/>
+                  </oneOrMore>
+                  <ref name="void.label"/>
+               </choice>
+               <zeroOrMore>
+                  <ref name="exceptionname.label"/>
+               </zeroOrMore>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="destructorsynopsis.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="destructorsynopsis.role.attrib.role"/>
+   </define>
+   <define name="methodsynopsis.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="methodsynopsis.label">
+      <choice>
+         <element name="methodsynopsis">
+            <ref name="methodsynopsis.role"/>
+            <group>
+               <zeroOrMore>
+                  <ref name="modifier.label"/>
+               </zeroOrMore>
+               <optional>
+                  <choice>
+                     <ref name="type.label"/>
+                     <ref name="void.label"/>
+                  </choice>
+               </optional>
+               <optional>
+                  <ref name="methodname.label"/>
+               </optional>
+               <choice>
+                  <oneOrMore>
+                     <ref name="methodparam.label"/>
+                  </oneOrMore>
+                  <ref name="void.label"/>
+               </choice>
+               <zeroOrMore>
+                  <ref name="exceptionname.label"/>
+               </zeroOrMore>
+               <zeroOrMore>
+                  <ref name="modifier.label"/>
+               </zeroOrMore>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="methodsynopsis.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="methodsynopsis.role.attrib.role"/>
+   </define>
+   <define name="methodname.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="methodname.label">
+      <choice>
+         <element name="methodname">
+            <ref name="methodname.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="smallcptr.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="methodname.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="methodname.role.attrib.role"/>
+   </define>
+   <define name="methodparam.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="methodparam.label">
+      <choice>
+         <element name="methodparam">
+            <ref name="methodparam.role"/>
+            <group>
+               <zeroOrMore>
+                  <element name="modifier">
+                     <anyString/>
+                  </element>
+               </zeroOrMore>
+               <optional>
+                  <element name="type">
+                     <anyString/>
+                  </element>
+               </optional>
+               <choice>
+                  <group>
+                     <element name="parameter">
+                        <anyString/>
+                     </element>
+                     <optional>
+                        <element name="initializer">
+                           <anyString/>
+                        </element>
+                     </optional>
+                  </group>
+                  <element name="funcparams">
+                     <anyString/>
+                  </element>
+               </choice>
+               <zeroOrMore>
+                  <element name="modifier">
+                     <anyString/>
+                  </element>
+               </zeroOrMore>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="methodparam.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="methodparam.role.attrib.role"/>
+      <optional>
+         <attribute name="choice">
+            <choice>
+               <string>opt</string>
+               <string>req</string>
+               <string>plain</string>
+            </choice>
+         </attribute>
+      </optional>
+      <optional>
+         <attribute name="rep">
+            <choice>
+               <string>norepeat</string>
+               <string>repeat</string>
+            </choice>
+         </attribute>
+      </optional>
+   </define>
+   <define name="ackno.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="ackno.label">
+      <choice>
+         <element name="ackno">
+            <ref name="ackno.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="docinfo.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="ackno.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="ackno.role.attrib.role"/>
+   </define>
+   <define name="address.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="address.label">
+      <choice>
+         <element name="address">
+            <ref name="address.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="person.ident.mix.label"/>
+                  <ref name="street.label"/>
+                  <ref name="pob.label"/>
+                  <ref name="postcode.label"/>
+                  <ref name="city.label"/>
+                  <ref name="state.label"/>
+                  <ref name="country.label"/>
+                  <ref name="phone.label"/>
+                  <ref name="fax.label"/>
+                  <ref name="email.label"/>
+                  <ref name="otheraddr.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="address.role">
+      <empty/>
+      <ref name="linespecific.attrib.role"/>
+      <ref name="common.attrib.role"/>
+      <ref name="address.role.attrib.role"/>
+   </define>
+   <define name="street.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="street.label">
+      <choice>
+         <element name="street">
+            <ref name="street.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="docinfo.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="street.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="street.role.attrib.role"/>
+   </define>
+   <define name="pob.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="pob.label">
+      <choice>
+         <element name="pob">
+            <ref name="pob.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="docinfo.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="pob.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="pob.role.attrib.role"/>
+   </define>
+   <define name="postcode.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="postcode.label">
+      <choice>
+         <element name="postcode">
+            <ref name="postcode.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="docinfo.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="postcode.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="postcode.role.attrib.role"/>
+   </define>
+   <define name="city.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="city.label">
+      <choice>
+         <element name="city">
+            <ref name="city.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="docinfo.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="city.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="city.role.attrib.role"/>
+   </define>
+   <define name="state.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="state.label">
+      <choice>
+         <element name="state">
+            <ref name="state.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="docinfo.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="state.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="state.role.attrib.role"/>
+   </define>
+   <define name="country.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="country.label">
+      <choice>
+         <element name="country">
+            <ref name="country.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="docinfo.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="country.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="country.role.attrib.role"/>
+   </define>
+   <define name="phone.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="phone.label">
+      <choice>
+         <element name="phone">
+            <ref name="phone.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="docinfo.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="phone.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="phone.role.attrib.role"/>
+   </define>
+   <define name="fax.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="fax.label">
+      <choice>
+         <element name="fax">
+            <ref name="fax.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="docinfo.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="fax.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="fax.role.attrib.role"/>
+   </define>
+   <define name="otheraddr.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="otheraddr.label">
+      <choice>
+         <element name="otheraddr">
+            <ref name="otheraddr.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="docinfo.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="otheraddr.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="otheraddr.role.attrib.role"/>
+   </define>
+   <define name="affiliation.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="affiliation.label">
+      <choice>
+         <element name="affiliation">
+            <ref name="affiliation.role"/>
+            <group>
+               <optional>
+                  <ref name="shortaffil.label"/>
+               </optional>
+               <zeroOrMore>
+                  <ref name="jobtitle.label"/>
+               </zeroOrMore>
+               <optional>
+                  <ref name="orgname.label"/>
+               </optional>
+               <zeroOrMore>
+                  <ref name="orgdiv.label"/>
+               </zeroOrMore>
+               <zeroOrMore>
+                  <ref name="address.label"/>
+               </zeroOrMore>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="affiliation.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="affiliation.role.attrib.role"/>
+   </define>
+   <define name="shortaffil.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="shortaffil.label">
+      <choice>
+         <element name="shortaffil">
+            <ref name="shortaffil.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="docinfo.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="shortaffil.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="shortaffil.role.attrib.role"/>
+   </define>
+   <define name="jobtitle.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="jobtitle.label">
+      <choice>
+         <element name="jobtitle">
+            <ref name="jobtitle.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="docinfo.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="jobtitle.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="jobtitle.role.attrib.role"/>
+   </define>
+   <define name="orgdiv.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="orgdiv.label">
+      <choice>
+         <element name="orgdiv">
+            <ref name="orgdiv.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="docinfo.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="orgdiv.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="orgdiv.role.attrib.role"/>
+   </define>
+   <define name="artpagenums.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="artpagenums.label">
+      <choice>
+         <element name="artpagenums">
+            <ref name="artpagenums.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="docinfo.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="artpagenums.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="artpagenums.role.attrib.role"/>
+   </define>
+   <define name="author.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="author.label">
+      <choice>
+         <element name="author">
+            <ref name="author.role"/>
+            <oneOrMore>
+               <group>
+                  <ref name="person.ident.mix.label"/>
+               </group>
+            </oneOrMore>
+         </element>
+      </choice>
+   </define>
+   <define name="author.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="author.role.attrib.role"/>
+   </define>
+   <define name="authorgroup.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="authorgroup.label">
+      <choice>
+         <element name="authorgroup">
+            <ref name="authorgroup.role"/>
+            <oneOrMore>
+               <choice>
+                  <ref name="author.label"/>
+                  <ref name="editor.label"/>
+                  <ref name="collab.label"/>
+                  <ref name="corpauthor.label"/>
+                  <ref name="othercredit.label"/>
+               </choice>
+            </oneOrMore>
+         </element>
+      </choice>
+   </define>
+   <define name="authorgroup.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="authorgroup.role.attrib.role"/>
+   </define>
+   <define name="collab.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="collab.label">
+      <choice>
+         <element name="collab">
+            <ref name="collab.role"/>
+            <group>
+               <ref name="collabname.label"/>
+               <zeroOrMore>
+                  <ref name="affiliation.label"/>
+               </zeroOrMore>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="collab.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="collab.role.attrib.role"/>
+   </define>
+   <define name="collabname.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="collabname.label">
+      <choice>
+         <element name="collabname">
+            <ref name="collabname.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="docinfo.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="collabname.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="collabname.role.attrib.role"/>
+   </define>
+   <define name="authorinitials.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="authorinitials.label">
+      <choice>
+         <element name="authorinitials">
+            <ref name="authorinitials.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="docinfo.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="authorinitials.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="authorinitials.role.attrib.role"/>
+   </define>
+   <define name="confgroup.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="confgroup.label">
+      <choice>
+         <element name="confgroup">
+            <ref name="confgroup.role"/>
+            <zeroOrMore>
+               <ref name="confdates.label"/>
+               <ref name="conftitle.label"/>
+               <ref name="confnum.label"/>
+               <ref name="address.label"/>
+               <ref name="confsponsor.label"/>
+            </zeroOrMore>
+         </element>
+      </choice>
+   </define>
+   <define name="confgroup.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="confgroup.role.attrib.role"/>
+   </define>
+   <define name="confdates.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="confdates.label">
+      <choice>
+         <element name="confdates">
+            <ref name="confdates.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="docinfo.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="confdates.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="confdates.role.attrib.role"/>
+   </define>
+   <define name="conftitle.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="conftitle.label">
+      <choice>
+         <element name="conftitle">
+            <ref name="conftitle.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="docinfo.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="conftitle.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="conftitle.role.attrib.role"/>
+   </define>
+   <define name="confnum.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="confnum.label">
+      <choice>
+         <element name="confnum">
+            <ref name="confnum.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="docinfo.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="confnum.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="confnum.role.attrib.role"/>
+   </define>
+   <define name="confsponsor.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="confsponsor.label">
+      <choice>
+         <element name="confsponsor">
+            <ref name="confsponsor.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="docinfo.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="confsponsor.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="confsponsor.role.attrib.role"/>
+   </define>
+   <define name="contractnum.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="contractnum.label">
+      <choice>
+         <element name="contractnum">
+            <ref name="contractnum.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="docinfo.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="contractnum.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="contractnum.role.attrib.role"/>
+   </define>
+   <define name="contractsponsor.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="contractsponsor.label">
+      <choice>
+         <element name="contractsponsor">
+            <ref name="contractsponsor.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="docinfo.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="contractsponsor.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="contractsponsor.role.attrib.role"/>
+   </define>
+   <define name="copyright.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="copyright.label">
+      <choice>
+         <element name="copyright">
+            <ref name="copyright.role"/>
+            <group>
+               <oneOrMore>
+                  <ref name="year.label"/>
+               </oneOrMore>
+               <zeroOrMore>
+                  <ref name="holder.label"/>
+               </zeroOrMore>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="copyright.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="copyright.role.attrib.role"/>
+   </define>
+   <define name="year.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="year.label">
+      <choice>
+         <element name="year">
+            <ref name="year.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="docinfo.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="year.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="year.role.attrib.role"/>
+   </define>
+   <define name="holder.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="holder.label">
+      <choice>
+         <element name="holder">
+            <ref name="holder.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="docinfo.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="holder.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="holder.role.attrib.role"/>
+   </define>
+   <define name="corpauthor.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="corpauthor.label">
+      <choice>
+         <element name="corpauthor">
+            <ref name="corpauthor.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="docinfo.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="corpauthor.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="corpauthor.role.attrib.role"/>
+   </define>
+   <define name="corpname.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="corpname.label">
+      <choice>
+         <element name="corpname">
+            <ref name="corpname.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="docinfo.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="corpname.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="corpname.role.attrib.role"/>
+   </define>
+   <define name="date.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="date.label">
+      <choice>
+         <element name="date">
+            <ref name="date.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="docinfo.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="date.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="date.role.attrib.role"/>
+   </define>
+   <define name="edition.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="edition.label">
+      <choice>
+         <element name="edition">
+            <ref name="edition.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="docinfo.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="edition.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="edition.role.attrib.role"/>
+   </define>
+   <define name="editor.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="editor.label">
+      <choice>
+         <element name="editor">
+            <ref name="editor.role"/>
+            <oneOrMore>
+               <group>
+                  <ref name="person.ident.mix.label"/>
+               </group>
+            </oneOrMore>
+         </element>
+      </choice>
+   </define>
+   <define name="editor.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="editor.role.attrib.role"/>
+   </define>
+   <define name="isbn.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="isbn.label">
+      <choice>
+         <element name="isbn">
+            <ref name="isbn.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="docinfo.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="isbn.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="isbn.role.attrib.role"/>
+   </define>
+   <define name="issn.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="issn.label">
+      <choice>
+         <element name="issn">
+            <ref name="issn.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="docinfo.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="issn.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="issn.role.attrib.role"/>
+   </define>
+   <define name="invpartnumber.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="invpartnumber.label">
+      <choice>
+         <element name="invpartnumber">
+            <ref name="invpartnumber.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="docinfo.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="invpartnumber.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="invpartnumber.role.attrib.role"/>
+   </define>
+   <define name="issuenum.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="issuenum.label">
+      <choice>
+         <element name="issuenum">
+            <ref name="issuenum.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="docinfo.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="issuenum.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="issuenum.role.attrib.role"/>
+   </define>
+   <define name="legalnotice.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="legalnotice.label">
+      <choice>
+         <element name="legalnotice">
+            <ref name="legalnotice.role"/>
+            <group>
+               <optional>
+                  <ref name="title.label"/>
+               </optional>
+               <oneOrMore>
+                  <ref name="legalnotice.mix.label"/>
+               </oneOrMore>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="legalnotice.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="legalnotice.role.attrib.role"/>
+   </define>
+   <define name="modespec.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="modespec.label">
+      <choice>
+         <element name="modespec">
+            <ref name="modespec.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="docinfo.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="modespec.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="modespec.role.attrib.role"/>
+      <optional>
+         <attribute name="application">
+            <choice>
+               <string>BMP</string>
+               <string>CGM-CHAR</string>
+               <string>CGM-BINARY</string>
+               <string>CGM-CLEAR</string>
+               <string>DITROFF</string>
+               <string>DVI</string>
+               <string>EPS</string>
+               <string>EQN</string>
+               <string>FAX</string>
+               <string>GIF</string>
+               <string>GIF87a</string>
+               <string>GIF89a</string>
+               <string>JPG</string>
+               <string>JPEG</string>
+               <string>IGES</string>
+               <string>PCX</string>
+               <string>PIC</string>
+               <string>PNG</string>
+               <string>PS</string>
+               <string>SGML</string>
+               <string>TBL</string>
+               <string>TEX</string>
+               <string>TIFF</string>
+               <string>WMF</string>
+               <string>WPG</string>
+               <string>linespecific</string>
+            </choice>
+         </attribute>
+      </optional>
+   </define>
+   <define name="orgname.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="orgname.label">
+      <choice>
+         <element name="orgname">
+            <ref name="orgname.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="docinfo.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="orgname.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="orgname.role.attrib.role"/>
+   </define>
+   <define name="othercredit.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="othercredit.label">
+      <choice>
+         <element name="othercredit">
+            <ref name="othercredit.role"/>
+            <oneOrMore>
+               <group>
+                  <ref name="person.ident.mix.label"/>
+               </group>
+            </oneOrMore>
+         </element>
+      </choice>
+   </define>
+   <define name="othercredit.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="othercredit.role.attrib.role"/>
+   </define>
+   <define name="pagenums.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="pagenums.label">
+      <choice>
+         <element name="pagenums">
+            <ref name="pagenums.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="docinfo.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="pagenums.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="pagenums.role.attrib.role"/>
+   </define>
+   <define name="contrib.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="contrib.label">
+      <choice>
+         <element name="contrib">
+            <ref name="contrib.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="docinfo.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="contrib.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="contrib.role.attrib.role"/>
+   </define>
+   <define name="firstname.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="firstname.label">
+      <choice>
+         <element name="firstname">
+            <ref name="firstname.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="docinfo.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="firstname.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="firstname.role.attrib.role"/>
+   </define>
+   <define name="honorific.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="honorific.label">
+      <choice>
+         <element name="honorific">
+            <ref name="honorific.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="docinfo.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="honorific.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="honorific.role.attrib.role"/>
+   </define>
+   <define name="lineage.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="lineage.label">
+      <choice>
+         <element name="lineage">
+            <ref name="lineage.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="docinfo.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="lineage.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="lineage.role.attrib.role"/>
+   </define>
+   <define name="othername.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="othername.label">
+      <choice>
+         <element name="othername">
+            <ref name="othername.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="docinfo.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="othername.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="othername.role.attrib.role"/>
+   </define>
+   <define name="surname.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="surname.label">
+      <choice>
+         <element name="surname">
+            <ref name="surname.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="docinfo.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="surname.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="surname.role.attrib.role"/>
+   </define>
+   <define name="printhistory.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="printhistory.label">
+      <choice>
+         <element name="printhistory">
+            <ref name="printhistory.role"/>
+            <oneOrMore>
+               <group>
+                  <ref name="para.class.label"/>
+               </group>
+            </oneOrMore>
+         </element>
+      </choice>
+   </define>
+   <define name="printhistory.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="printhistory.role.attrib.role"/>
+   </define>
+   <define name="productname.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="productname.label">
+      <choice>
+         <element name="productname">
+            <ref name="productname.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="para.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="productname.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="productname.role.attrib.role"/>
+      <optional>
+         <attribute name="class">
+            <choice>
+               <string>service</string>
+               <string>trade</string>
+               <string>registered</string>
+               <string>copyright</string>
+            </choice>
+         </attribute>
+      </optional>
+   </define>
+   <define name="productnumber.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="productnumber.label">
+      <choice>
+         <element name="productnumber">
+            <ref name="productnumber.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="docinfo.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="productnumber.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="productnumber.role.attrib.role"/>
+   </define>
+   <define name="pubdate.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="pubdate.label">
+      <choice>
+         <element name="pubdate">
+            <ref name="pubdate.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="docinfo.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="pubdate.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="pubdate.role.attrib.role"/>
+   </define>
+   <define name="publisher.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="publisher.label">
+      <choice>
+         <element name="publisher">
+            <ref name="publisher.role"/>
+            <group>
+               <ref name="publishername.label"/>
+               <zeroOrMore>
+                  <ref name="address.label"/>
+               </zeroOrMore>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="publisher.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="publisher.role.attrib.role"/>
+   </define>
+   <define name="publishername.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="publishername.label">
+      <choice>
+         <element name="publishername">
+            <ref name="publishername.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="docinfo.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="publishername.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="publishername.role.attrib.role"/>
+   </define>
+   <define name="pubsnumber.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="pubsnumber.label">
+      <choice>
+         <element name="pubsnumber">
+            <ref name="pubsnumber.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="docinfo.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="pubsnumber.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="pubsnumber.role.attrib.role"/>
+   </define>
+   <define name="releaseinfo.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="releaseinfo.label">
+      <choice>
+         <element name="releaseinfo">
+            <ref name="releaseinfo.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="docinfo.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="releaseinfo.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="releaseinfo.role.attrib.role"/>
+   </define>
+   <define name="revhistory.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="revhistory.label">
+      <choice>
+         <element name="revhistory">
+            <ref name="revhistory.role"/>
+            <group>
+               <oneOrMore>
+                  <ref name="revision.label"/>
+               </oneOrMore>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="revhistory.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="revhistory.role.attrib.role"/>
+   </define>
+   <define name="revision.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="revision.label">
+      <choice>
+         <element name="revision">
+            <ref name="revision.role"/>
+            <group>
+               <ref name="revnumber.label"/>
+               <ref name="date.label"/>
+               <zeroOrMore>
+                  <ref name="authorinitials.label"/>
+               </zeroOrMore>
+               <optional>
+                  <choice>
+                     <ref name="revremark.label"/>
+                     <ref name="revdescription.label"/>
+                  </choice>
+               </optional>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="revision.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="revision.role.attrib.role"/>
+   </define>
+   <define name="revnumber.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="revnumber.label">
+      <choice>
+         <element name="revnumber">
+            <ref name="revnumber.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="docinfo.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="revnumber.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="revnumber.role.attrib.role"/>
+   </define>
+   <define name="revremark.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="revremark.label">
+      <choice>
+         <element name="revremark">
+            <ref name="revremark.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="docinfo.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="revremark.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="revremark.role.attrib.role"/>
+   </define>
+   <define name="revdescription.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="revdescription.label">
+      <choice>
+         <element name="revdescription">
+            <ref name="revdescription.role"/>
+            <oneOrMore>
+               <group>
+                  <ref name="revdescription.mix.label"/>
+               </group>
+            </oneOrMore>
+         </element>
+      </choice>
+   </define>
+   <define name="revdescription.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="revdescription.role.attrib.role"/>
+   </define>
+   <define name="seriesvolnums.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="seriesvolnums.label">
+      <choice>
+         <element name="seriesvolnums">
+            <ref name="seriesvolnums.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="docinfo.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="seriesvolnums.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="seriesvolnums.role.attrib.role"/>
+   </define>
+   <define name="volumenum.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="volumenum.label">
+      <choice>
+         <element name="volumenum">
+            <ref name="volumenum.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="docinfo.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="volumenum.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="volumenum.role.attrib.role"/>
+   </define>
+   <define name="accel.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="accel.label">
+      <choice>
+         <element name="accel">
+            <ref name="accel.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="smallcptr.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="accel.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="accel.role.attrib.role"/>
+   </define>
+   <define name="action.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="action.label">
+      <choice>
+         <element name="action">
+            <ref name="action.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="smallcptr.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="action.role">
+      <empty/>
+      <ref name="moreinfo.attrib.role"/>
+      <ref name="common.attrib.role"/>
+      <ref name="action.role.attrib.role"/>
+   </define>
+   <define name="application.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="application.label">
+      <choice>
+         <element name="application">
+            <ref name="application.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="para.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="application.role">
+      <empty/>
+      <ref name="moreinfo.attrib.role"/>
+      <ref name="common.attrib.role"/>
+      <ref name="application.role.attrib.role"/>
+      <optional>
+         <attribute name="class">
+            <choice>
+               <string>hardware</string>
+               <string>software</string>
+            </choice>
+         </attribute>
+      </optional>
+   </define>
+   <define name="classname.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="classname.label">
+      <choice>
+         <element name="classname">
+            <ref name="classname.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="smallcptr.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="classname.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="classname.role.attrib.role"/>
+   </define>
+   <define name="co.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="co.label">
+      <choice>
+         <element name="co">
+            <ref name="co.role"/>
+            <empty/>
+         </element>
+      </choice>
+   </define>
+   <define name="co.role">
+      <empty/>
+      <ref name="label.attrib.role"/>
+      <ref name="linkends.attrib.role"/>
+      <ref name="idreq.common.attrib.role"/>
+      <ref name="co.role.attrib.role"/>
+   </define>
+   <define name="command.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="command.label">
+      <choice>
+         <element name="command">
+            <ref name="command.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="cptr.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="command.role">
+      <empty/>
+      <ref name="moreinfo.attrib.role"/>
+      <ref name="common.attrib.role"/>
+      <ref name="command.role.attrib.role"/>
+   </define>
+   <define name="computeroutput.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="computeroutput.label">
+      <choice>
+         <element name="computeroutput">
+            <ref name="computeroutput.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="cptr.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="computeroutput.role">
+      <empty/>
+      <ref name="moreinfo.attrib.role"/>
+      <ref name="common.attrib.role"/>
+      <ref name="computeroutput.role.attrib.role"/>
+   </define>
+   <define name="database.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="database.label">
+      <choice>
+         <element name="database">
+            <ref name="database.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="smallcptr.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="database.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="database.role.attrib.role"/>
+      <ref name="moreinfo.attrib.role"/>
+      <optional>
+         <attribute name="class">
+            <choice>
+               <string>name</string>
+               <string>table</string>
+               <string>field</string>
+               <string>key1</string>
+               <string>key2</string>
+               <string>record</string>
+            </choice>
+         </attribute>
+      </optional>
+   </define>
+   <define name="email.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="email.label">
+      <choice>
+         <element name="email">
+            <ref name="email.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="docinfo.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="email.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="email.role.attrib.role"/>
+   </define>
+   <define name="envar.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="envar.label">
+      <choice>
+         <element name="envar">
+            <ref name="envar.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="docinfo.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="envar.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="envar.role.attrib.role"/>
+   </define>
+   <define name="errorcode.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="errorcode.label">
+      <choice>
+         <element name="errorcode">
+            <ref name="errorcode.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="smallcptr.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="errorcode.role">
+      <empty/>
+      <ref name="moreinfo.attrib.role"/>
+      <ref name="common.attrib.role"/>
+      <ref name="errorcode.role.attrib.role"/>
+   </define>
+   <define name="errorname.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="errorname.label">
+      <choice>
+         <element name="errorname">
+            <ref name="errorname.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="smallcptr.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="errorname.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="errorname.role.attrib.role"/>
+   </define>
+   <define name="errortype.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="errortype.label">
+      <choice>
+         <element name="errortype">
+            <ref name="errortype.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="smallcptr.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="errortype.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="errortype.role.attrib.role"/>
+   </define>
+   <define name="filename.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="filename.label">
+      <choice>
+         <element name="filename">
+            <ref name="filename.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="smallcptr.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="filename.role">
+      <empty/>
+      <ref name="moreinfo.attrib.role"/>
+      <ref name="common.attrib.role"/>
+      <ref name="filename.role.attrib.role"/>
+      <optional>
+         <attribute name="class">
+            <choice>
+               <string>headerfile</string>
+               <string>devicefile</string>
+               <string>libraryfile</string>
+               <string>directory</string>
+               <string>symlink</string>
+            </choice>
+         </attribute>
+      </optional>
+      <optional>
+         <attribute name="path">
+            <anyString/>
+         </attribute>
+      </optional>
+   </define>
+   <define name="function.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="function.label">
+      <choice>
+         <element name="function">
+            <ref name="function.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="cptr.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="function.role">
+      <empty/>
+      <ref name="moreinfo.attrib.role"/>
+      <ref name="common.attrib.role"/>
+      <ref name="function.role.attrib.role"/>
+   </define>
+   <define name="guibutton.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="guibutton.label">
+      <choice>
+         <element name="guibutton">
+            <ref name="guibutton.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="smallcptr.char.mix.label"/>
+                  <ref name="accel.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="guibutton.role">
+      <empty/>
+      <ref name="moreinfo.attrib.role"/>
+      <ref name="common.attrib.role"/>
+      <ref name="guibutton.role.attrib.role"/>
+   </define>
+   <define name="guiicon.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="guiicon.label">
+      <choice>
+         <element name="guiicon">
+            <ref name="guiicon.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="smallcptr.char.mix.label"/>
+                  <ref name="accel.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="guiicon.role">
+      <empty/>
+      <ref name="moreinfo.attrib.role"/>
+      <ref name="common.attrib.role"/>
+      <ref name="guiicon.role.attrib.role"/>
+   </define>
+   <define name="guilabel.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="guilabel.label">
+      <choice>
+         <element name="guilabel">
+            <ref name="guilabel.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="smallcptr.char.mix.label"/>
+                  <ref name="accel.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="guilabel.role">
+      <empty/>
+      <ref name="moreinfo.attrib.role"/>
+      <ref name="common.attrib.role"/>
+      <ref name="guilabel.role.attrib.role"/>
+   </define>
+   <define name="guimenu.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="guimenu.label">
+      <choice>
+         <element name="guimenu">
+            <ref name="guimenu.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="smallcptr.char.mix.label"/>
+                  <ref name="accel.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="guimenu.role">
+      <empty/>
+      <ref name="moreinfo.attrib.role"/>
+      <ref name="common.attrib.role"/>
+      <ref name="guimenu.role.attrib.role"/>
+   </define>
+   <define name="guimenuitem.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="guimenuitem.label">
+      <choice>
+         <element name="guimenuitem">
+            <ref name="guimenuitem.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="smallcptr.char.mix.label"/>
+                  <ref name="accel.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="guimenuitem.role">
+      <empty/>
+      <ref name="moreinfo.attrib.role"/>
+      <ref name="common.attrib.role"/>
+      <ref name="guimenuitem.role.attrib.role"/>
+   </define>
+   <define name="guisubmenu.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="guisubmenu.label">
+      <choice>
+         <element name="guisubmenu">
+            <ref name="guisubmenu.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="smallcptr.char.mix.label"/>
+                  <ref name="accel.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="guisubmenu.role">
+      <empty/>
+      <ref name="moreinfo.attrib.role"/>
+      <ref name="common.attrib.role"/>
+      <ref name="guisubmenu.role.attrib.role"/>
+   </define>
+   <define name="hardware.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="hardware.label">
+      <choice>
+         <element name="hardware">
+            <ref name="hardware.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="smallcptr.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="hardware.role">
+      <empty/>
+      <ref name="moreinfo.attrib.role"/>
+      <ref name="common.attrib.role"/>
+      <ref name="hardware.role.attrib.role"/>
+   </define>
+   <define name="interface.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="interface.label">
+      <choice>
+         <element name="interface">
+            <ref name="interface.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="smallcptr.char.mix.label"/>
+                  <ref name="accel.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="interface.role">
+      <empty/>
+      <ref name="moreinfo.attrib.role"/>
+      <ref name="common.attrib.role"/>
+      <ref name="interface.role.attrib.role"/>
+   </define>
+   <define name="keycap.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="keycap.label">
+      <choice>
+         <element name="keycap">
+            <ref name="keycap.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="smallcptr.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="keycap.role">
+      <empty/>
+      <ref name="moreinfo.attrib.role"/>
+      <ref name="common.attrib.role"/>
+      <ref name="keycap.role.attrib.role"/>
+   </define>
+   <define name="keycode.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="keycode.label">
+      <choice>
+         <element name="keycode">
+            <ref name="keycode.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="smallcptr.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="keycode.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="keycode.role.attrib.role"/>
+   </define>
+   <define name="keycombo.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="keycombo.label">
+      <choice>
+         <element name="keycombo">
+            <ref name="keycombo.role"/>
+            <oneOrMore>
+               <choice>
+                  <ref name="keycap.label"/>
+                  <ref name="keycombo.label"/>
+                  <ref name="keysym.label"/>
+                  <ref name="mousebutton.label"/>
+               </choice>
+            </oneOrMore>
+         </element>
+      </choice>
+   </define>
+   <define name="keycombo.role">
+      <empty/>
+      <ref name="keyaction.attrib.role"/>
+      <ref name="moreinfo.attrib.role"/>
+      <ref name="common.attrib.role"/>
+      <ref name="keycombo.role.attrib.role"/>
+   </define>
+   <define name="keysysm.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="keysym.label">
+      <choice>
+         <element name="keysym">
+            <ref name="keysym.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="smallcptr.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="keysym.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="keysysm.role.attrib.role"/>
+   </define>
+   <define name="lineannotation.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="lineannotation.label">
+      <choice>
+         <element name="lineannotation">
+            <ref name="lineannotation.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="para.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="lineannotation.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="lineannotation.role.attrib.role"/>
+   </define>
+   <define name="literal.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="literal.label">
+      <choice>
+         <element name="literal">
+            <ref name="literal.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="cptr.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="literal.role">
+      <empty/>
+      <ref name="moreinfo.attrib.role"/>
+      <ref name="common.attrib.role"/>
+      <ref name="literal.role.attrib.role"/>
+   </define>
+   <define name="constant.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="constant.label">
+      <choice>
+         <element name="constant">
+            <ref name="constant.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="smallcptr.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="constant.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="constant.role.attrib.role"/>
+      <optional>
+         <attribute name="class">
+            <choice>
+               <string>limit</string>
+            </choice>
+         </attribute>
+      </optional>
+   </define>
+   <define name="varname.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="varname.label">
+      <choice>
+         <element name="varname">
+            <ref name="varname.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="smallcptr.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="varname.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="varname.role.attrib.role"/>
+   </define>
+   <define name="markup.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="markup.label">
+      <choice>
+         <element name="markup">
+            <ref name="markup.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="smallcptr.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="markup.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="markup.role.attrib.role"/>
+   </define>
+   <define name="medialabel.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="medialabel.label">
+      <choice>
+         <element name="medialabel">
+            <ref name="medialabel.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="smallcptr.char.mix.label"/>
+               </zeroOrMore>
+           </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="medialabel.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="medialabel.role.attrib.role"/>
+      <optional>
+         <attribute name="class">
+            <choice>
+               <string>cartridge</string>
+               <string>cdrom</string>
+               <string>disk</string>
+               <string>tape</string>
+            </choice>
+         </attribute>
+      </optional>
+   </define>
+   <define name="menuchoice.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="menuchoice.label">
+      <choice>
+         <element name="menuchoice">
+            <ref name="menuchoice.role"/>
+            <group>
+               <optional>
+                  <ref name="shortcut.label"/>
+               </optional>
+               <oneOrMore>
+                  <choice>
+                     <ref name="guibutton.label"/>
+                     <ref name="guiicon.label"/>
+                     <ref name="guilabel.label"/>
+                     <ref name="guimenu.label"/>
+                     <ref name="guimenuitem.label"/>
+                     <ref name="guisubmenu.label"/>
+                     <ref name="interface.label"/>
+                  </choice>
+               </oneOrMore>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="menuchoice.role">
+      <empty/>
+      <ref name="moreinfo.attrib.role"/>
+      <ref name="common.attrib.role"/>
+      <ref name="menuchoice.role.attrib.role"/>
+   </define>
+   <define name="shortcut.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="shortcut.label">
+      <choice>
+         <element name="shortcut">
+            <ref name="shortcut.role"/>
+            <oneOrMore>
+               <choice>
+                  <ref name="keycap.label"/>
+                  <ref name="keycombo.label"/>
+                  <ref name="keysym.label"/>
+                  <ref name="mousebutton.label"/>
+               </choice>
+            </oneOrMore>
+         </element>
+      </choice>
+   </define>
+   <define name="shortcut.role">
+      <empty/>
+      <ref name="keyaction.attrib.role"/>
+      <ref name="moreinfo.attrib.role"/>
+      <ref name="common.attrib.role"/>
+      <ref name="shortcut.role.attrib.role"/>
+   </define>
+   <define name="mousebutton.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="mousebutton.label">
+      <choice>
+         <element name="mousebutton">
+            <ref name="mousebutton.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="smallcptr.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="mousebutton.role">
+      <empty/>
+      <ref name="moreinfo.attrib.role"/>
+      <ref name="common.attrib.role"/>
+      <ref name="mousebutton.role.attrib.role"/>
+   </define>
+   <define name="msgtext.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="msgtext.label">
+      <choice>
+         <element name="msgtext">
+            <ref name="msgtext.role"/>
+            <oneOrMore>
+               <choice>
+                  <ref name="component.mix.label"/>
+               </choice>
+            </oneOrMore>
+         </element>
+      </choice>
+   </define>
+   <define name="msgtext.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="msgtext.role.attrib.role"/>
+   </define>
+   <define name="option.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="option.label">
+      <choice>
+         <element name="option">
+            <ref name="option.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="smallcptr.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="option.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="option.role.attrib.role"/>
+   </define>
+   <define name="optional.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="optional.label">
+      <choice>
+         <element name="optional">
+            <ref name="optional.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="cptr.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="optional.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="optional.role.attrib.role"/>
+   </define>
+   <define name="parameter.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="parameter.label">
+      <choice>
+         <element name="parameter">
+            <ref name="parameter.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="smallcptr.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="parameter.role">
+      <empty/>
+      <ref name="moreinfo.attrib.role"/>
+      <ref name="common.attrib.role"/>
+      <ref name="parameter.role.attrib.role"/>
+      <optional>
+         <attribute name="class">
+            <choice>
+               <string>command</string>
+               <string>function</string>
+               <string>option</string>
+            </choice>
+         </attribute>
+      </optional>
+   </define>
+   <define name="prompt.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="prompt.label">
+      <choice>
+         <element name="prompt">
+            <ref name="prompt.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="smallcptr.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="prompt.role">
+      <empty/>
+      <ref name="moreinfo.attrib.role"/>
+      <ref name="common.attrib.role"/>
+      <ref name="prompt.role.attrib.role"/>
+   </define>
+   <define name="property.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="property.label">
+      <choice>
+         <element name="property">
+            <ref name="property.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="smallcptr.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="property.role">
+      <empty/>
+      <ref name="moreinfo.attrib.role"/>
+      <ref name="common.attrib.role"/>
+      <ref name="property.role.attrib.role"/>
+   </define>
+   <define name="replaceable.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="replaceable.label">
+      <choice>
+         <element name="replaceable">
+            <ref name="replaceable.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="link.char.class.label"/>
+                  <ref name="optional.label"/>
+                  <ref name="base.char.class.label"/>
+                  <ref name="other.char.class.label"/>
+                  <ref name="inlinegraphic.label"/>
+                  <ref name="inlinemediaobject.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="replaceable.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="replaceable.role.attrib.role"/>
+      <optional>
+         <attribute name="class">
+            <choice>
+               <string>command</string>
+               <string>function</string>
+               <string>option</string>
+               <string>parameter</string>
+            </choice>
+         </attribute>
+      </optional>
+   </define>
+   <define name="returnvalue.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="returnvalue.label">
+      <choice>
+         <element name="returnvalue">
+            <ref name="returnvalue.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="smallcptr.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="returnvalue.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="returnvalue.role.attrib.role"/>
+   </define>
+   <define name="sgmltag.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="sgmltag.label">
+      <choice>
+         <element name="sgmltag">
+            <ref name="sgmltag.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="smallcptr.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="sgmltag.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="sgmltag.role.attrib.role"/>
+      <optional>
+         <attribute name="class">
+            <choice>
+               <string>attribute</string>
+               <string>attvalue</string>
+               <string>element</string>
+               <string>endtag</string>
+               <string>emptytag</string>
+               <string>genentity</string>
+               <string>numcharref</string>
+               <string>paramentity</string>
+               <string>pi</string>
+               <string>xmlpi</string>
+               <string>starttag</string>
+               <string>sgmlcomment</string>
+            </choice>
+         </attribute>
+      </optional>
+   </define>
+   <define name="structfield.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="structfield.label">
+      <choice>
+         <element name="structfield">
+            <ref name="structfield.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="smallcptr.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="structfield.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="structfield.role.attrib.role"/>
+   </define>
+   <define name="structname.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="structname.label">
+      <choice>
+         <element name="structname">
+            <ref name="structname.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="smallcptr.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="structname.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="structname.role.attrib.role"/>
+   </define>
+   <define name="symbol.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="symbol.label">
+      <choice>
+         <element name="symbol">
+            <ref name="symbol.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="smallcptr.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="symbol.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="symbol.role.attrib.role"/>
+      <optional>
+         <attribute name="class">
+            <choice>
+               <string>limit</string>
+            </choice>
+         </attribute>
+      </optional>
+   </define>
+   <define name="systemitem.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="systemitem.label">
+      <choice>
+         <element name="systemitem">
+            <ref name="systemitem.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="smallcptr.char.mix.label"/>
+                  <ref name="acronym.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="systemitem.role">
+      <empty/>
+      <ref name="moreinfo.attrib.role"/>
+      <ref name="common.attrib.role"/>
+      <ref name="systemitem.role.attrib.role"/>
+      <optional>
+         <attribute name="class">
+            <choice>
+               <string>constant</string>
+               <string>groupname</string>
+               <string>library</string>
+               <string>macro</string>
+               <string>osname</string>
+               <string>resource</string>
+               <string>systemname</string>
+               <string>username</string>
+            </choice>
+         </attribute>
+      </optional>
+   </define>
+   <define name="token.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="token.label">
+      <choice>
+         <element name="token">
+            <ref name="token.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="smallcptr.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="token.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="token.role.attrib.role"/>
+   </define>
+   <define name="type.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="type.label">
+      <choice>
+         <element name="type">
+            <ref name="type.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="smallcptr.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="type.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="type.role.attrib.role"/>
+   </define>
+   <define name="userinput.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="userinput.label">
+      <choice>
+         <element name="userinput">
+            <ref name="userinput.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="cptr.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="userinput.role">
+      <empty/>
+      <ref name="moreinfo.attrib.role"/>
+      <ref name="common.attrib.role"/>
+      <ref name="userinput.role.attrib.role"/>
+   </define>
+   <define name="abbrev.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="abbrev.label">
+      <choice>
+         <element name="abbrev">
+            <ref name="abbrev.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="word.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="abbrev.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="abbrev.role.attrib.role"/>
+   </define>
+   <define name="acronym.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="acronym.label">
+      <choice>
+         <element name="acronym">
+            <ref name="acronym.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="word.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="acronym.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="acronym.role.attrib.role"/>
+   </define>
+   <define name="citation.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="citation.label">
+      <choice>
+         <element name="citation">
+            <ref name="citation.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="para.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="citation.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="citation.role.attrib.role"/>
+   </define>
+   <define name="citerefentry.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="citerefentry.label">
+      <choice>
+         <element name="citerefentry">
+            <ref name="citerefentry.role"/>
+            <group>
+               <ref name="refentrytitle.label"/>
+               <optional>
+                  <ref name="manvolnum.label"/>
+               </optional>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="citerefentry.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="citerefentry.role.attrib.role"/>
+   </define>
+   <define name="refentrytitle.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="refentrytitle.label">
+      <choice>
+         <element name="refentrytitle">
+            <ref name="refentrytitle.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="para.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="refentrytitle.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="refentrytitle.role.attrib.role"/>
+   </define>
+   <define name="namvolnum.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="manvolnum.label">
+      <choice>
+         <element name="manvolnum">
+            <ref name="manvolnum.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="word.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="manvolnum.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="namvolnum.role.attrib.role"/>
+   </define>
+   <define name="citetitle.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="citetitle.label">
+      <choice>
+         <element name="citetitle">
+            <ref name="citetitle.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="para.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="citetitle.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="citetitle.role.attrib.role"/>
+      <optional>
+         <attribute name="pubwork">
+            <choice>
+               <string>article</string>
+               <string>book</string>
+               <string>chapter</string>
+               <string>part</string>
+               <string>refentry</string>
+               <string>section</string>
+               <string>journal</string>
+               <string>series</string>
+               <string>set</string>
+               <string>manuscript</string>
+            </choice>
+         </attribute>
+      </optional>
+   </define>
+   <define name="emphasis.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="emphasis.label">
+      <choice>
+         <element name="emphasis">
+            <ref name="emphasis.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="para.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="emphasis.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="emphasis.role.attrib.role"/>
+   </define>
+   <define name="firstterm.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="firstterm.label">
+      <choice>
+         <element name="firstterm">
+            <ref name="firstterm.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="word.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="firstterm.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="firstterm.role.attrib.role"/>
+      <ref name="linkend.attrib.role"/>
+   </define>
+   <define name="foreignphrase.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="foreignphrase.label">
+      <choice>
+         <element name="foreignphrase">
+            <ref name="foreignphrase.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="para.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="foreignphrase.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="foreignphrase.role.attrib.role"/>
+   </define>
+   <define name="glossterm.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="glossterm.label">
+      <choice>
+         <element name="glossterm">
+            <ref name="glossterm.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="para.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="glossterm.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="glossterm.role.attrib.role"/>
+      <ref name="linkend.attrib.role"/>
+      <optional>
+         <attribute name="baseform">
+            <anyString/>
+         </attribute>
+      </optional>
+   </define>
+   <define name="phrase.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="phrase.label">
+      <choice>
+         <element name="phrase">
+            <ref name="phrase.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="para.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="phrase.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="phrase.role.attrib.role"/>
+   </define>
+   <define name="quote.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="quote.label">
+      <choice>
+         <element name="quote">
+            <ref name="quote.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="para.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="quote.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="quote.role.attrib.role"/>
+   </define>
+   <define name="ssscript.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="subscriptContentModel.label">
+      <choice>
+         <zeroOrMore>
+            <ref name="link.char.class.label"/>
+            <ref name="emphasis.label"/>
+            <ref name="replaceable.label"/>
+            <ref name="symbol.label"/>
+            <ref name="inlinegraphic.label"/>
+            <ref name="inlinemediaobject.label"/>
+            <ref name="base.char.class.label"/>
+            <ref name="other.char.class.label"/>
+         </zeroOrMore>
+      </choice>
+   </define>
+   <define name="subscript.label">
+      <choice>
+         <element name="subscript">
+            <ref name="subscript.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="subscriptContentModel.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="subscript.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="ssscript.role.attrib.role"/>
+   </define>
+   <define name="superscript.label">
+      <choice>
+         <element name="superscript">
+            <ref name="superscript.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="subscriptContentModel.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="superscript.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="ssscript.role.attrib.role"/>
+   </define>
+   <define name="trademark.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="trademark.label">
+      <choice>
+         <element name="trademark">
+            <ref name="trademark.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="link.char.class.label"/>
+                  <ref name="tech.char.class.label"/>
+                  <ref name="base.char.class.label"/>
+                  <ref name="other.char.class.label"/>
+                  <ref name="inlinegraphic.label"/>
+                  <ref name="inlinemediaobject.label"/>
+                  <ref name="emphasis.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="trademark.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="trademark.role.attrib.role"/>
+      <optional>
+         <attribute name="class">
+            <choice>
+               <string>service</string>
+               <string>trade</string>
+               <string>registered</string>
+               <string>copyright</string>
+            </choice>
+         </attribute>
+      </optional>
+   </define>
+   <define name="wordasword.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="wordasword.label">
+      <choice>
+         <element name="wordasword">
+            <ref name="wordasword.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="word.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="wordasword.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="wordasword.role.attrib.role"/>
+   </define>
+   <define name="link.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="link.label">
+      <choice>
+         <element name="link">
+            <ref name="link.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="para.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="link.role">
+      <empty/>
+      <ref name="linkendreq.attrib.role"/>
+      <ref name="common.attrib.role"/>
+      <ref name="link.role.attrib.role"/>
+      <optional>
+         <attribute name="endterm">
+            <data type="xsd:IDREF"/>
+         </attribute>
+      </optional>
+      <optional>
+         <attribute name="type">
+            <anyString/>
+         </attribute>
+      </optional>
+   </define>
+   <define name="olink.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="olink.label">
+      <choice>
+         <element name="olink">
+            <ref name="olink.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="para.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="olink.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="olink.role.attrib.role"/>
+      <optional>
+         <attribute name="linkmode">
+            <data type="xsd:IDREF"/>
+         </attribute>
+      </optional>
+      <optional>
+         <attribute name="localinfo">
+            <anyString/>
+         </attribute>
+      </optional>
+      <optional>
+         <attribute name="type">
+            <anyString/>
+         </attribute>
+      </optional>
+   </define>
+   <define name="ulink.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="ulink.label">
+      <choice>
+         <element name="ulink">
+            <ref name="ulink.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="para.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="ulink.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="ulink.role.attrib.role"/>
+      <attribute name="url">
+         <anyString/>
+      </attribute>
+      <optional>
+         <attribute name="type">
+            <anyString/>
+         </attribute>
+      </optional>
+   </define>
+   <define name="footnoteref.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="footnoteref.label">
+      <choice>
+         <element name="footnoteref">
+            <ref name="footnoteref.role"/>
+            <empty/>
+         </element>
+      </choice>
+   </define>
+   <define name="footnoteref.role">
+      <empty/>
+      <ref name="linkendreq.attrib.role"/>
+      <ref name="label.attrib.role"/>
+      <ref name="common.attrib.role"/>
+      <ref name="footnoteref.role.attrib.role"/>
+   </define>
+   <define name="xref.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="xref.label">
+      <choice>
+         <element name="xref">
+            <ref name="xref.role"/>
+            <empty/>
+         </element>
+      </choice>
+   </define>
+   <define name="xref.role">
+      <empty/>
+      <ref name="linkendreq.attrib.role"/>
+      <ref name="common.attrib.role"/>
+      <ref name="xref.role.attrib.role"/>
+      <optional>
+         <attribute name="endterm">
+            <data type="xsd:IDREF"/>
+         </attribute>
+      </optional>
+   </define>
+   <define name="anchor.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="anchor.label">
+      <choice>
+         <element name="anchor">
+            <ref name="anchor.role"/>
+            <empty/>
+         </element>
+      </choice>
+   </define>
+   <define name="anchor.role">
+      <empty/>
+      <ref name="idreq.attrib.role"/>
+      <ref name="pagenum.attrib.role"/>
+      <ref name="remap.attrib.role"/>
+      <ref name="xreflabel.attrib.role"/>
+      <ref name="revisionflag.attrib.role"/>
+      <ref name="effectivity.attrib.role"/>
+      <ref name="anchor.role.attrib.role"/>
+   </define>
+   <define name="beginpage.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="beginpage.label">
+      <choice>
+         <element name="beginpage">
+            <ref name="beginpage.role"/>
+            <empty/>
+         </element>
+      </choice>
+   </define>
+   <define name="beginpage.role">
+      <empty/>
+      <ref name="pagenum.attrib.role"/>
+      <ref name="common.attrib.role"/>
+      <ref name="beginpage.role.attrib.role"/>
+   </define>
+   <define name="indexterm.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="indexterm.label">
+      <choice>
+         <element name="indexterm">
+            <ref name="indexterm.role"/>
+            <group>
+               <ref name="primary.label"/>
+               <optional>
+                  <choice>
+                     <group>
+                        <ref name="secondary.label"/>
+                        <optional>
+                           <choice>
+                              <group>
+                                 <ref name="tertiary.label"/>
+                                 <optional>
+                                    <choice>
+                                       <ref name="see.label"/>
+                                       <oneOrMore>
+                                          <ref name="seealso.label"/>
+                                       </oneOrMore>
+                                    </choice>
+                                 </optional>
+                              </group>
+                              <ref name="see.label"/>
+                              <oneOrMore>
+                                 <ref name="seealso.label"/>
+                              </oneOrMore>
+                           </choice>
+                        </optional>
+                        <ref name="see.label"/>
+                        <oneOrMore>
+                           <ref name="seealso.label"/>
+                        </oneOrMore>
+                     </group>
+                     <ref name="see.label"/>
+                     <oneOrMore>
+                        <ref name="seealso.label"/>
+                     </oneOrMore>
+                  </choice>
+               </optional>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="indexterm.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="indexterm.role.attrib.role"/>
+      <ref name="pagenum.attrib.role"/>
+      <optional>
+         <attribute name="scope">
+            <choice>
+               <string>all</string>
+               <string>global</string>
+               <string>local</string>
+            </choice>
+         </attribute>
+      </optional>
+      <optional>
+         <attribute name="significance">
+            <choice>
+               <string>preferred</string>
+               <string>normal</string>
+            </choice>
+         </attribute>
+      </optional>
+      <optional>
+         <attribute name="class">
+            <choice>
+               <string>singular</string>
+               <string>startofrange</string>
+               <string>endofrange</string>
+            </choice>
+         </attribute>
+      </optional>
+      <optional>
+         <attribute name="startref">
+            <data type="xsd:IDREF"/>
+         </attribute>
+      </optional>
+      <optional>
+         <attribute name="zone">
+            <data type="xsd:IDREFS"/>
+         </attribute>
+      </optional>
+   </define>
+   <define name="primsecter.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="primary.label">
+      <choice>
+         <element name="primary">
+            <ref name="primary.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="ndxterm.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="primary.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="primsecter.role.attrib.role"/>
+      <optional>
+         <attribute name="sortas">
+            <anyString/>
+         </attribute>
+      </optional>
+   </define>
+   <define name="secondary.label">
+      <choice>
+         <element name="secondary">
+            <ref name="secondary.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="ndxterm.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="secondary.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="primsecter.role.attrib.role"/>
+      <optional>
+         <attribute name="sortas">
+            <anyString/>
+         </attribute>
+      </optional>
+   </define>
+   <define name="tertiary.label">
+      <choice>
+         <element name="tertiary">
+            <ref name="tertiary.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="ndxterm.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="tertiary.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="primsecter.role.attrib.role"/>
+      <optional>
+         <attribute name="sortas">
+            <anyString/>
+         </attribute>
+      </optional>
+   </define>
+   <define name="seeseealso.role.attrib.role">
+      <empty/>
+      <ref name="role.attrib.role"/>
+   </define>
+   <define name="see.label">
+      <choice>
+         <element name="see">
+            <ref name="see.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="ndxterm.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="see.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="seeseealso.role.attrib.role"/>
+   </define>
+   <define name="seealso.label">
+      <choice>
+         <element name="seealso">
+            <ref name="seealso.role"/>
+            <mixed>
+               <zeroOrMore>
+                  <ref name="ndxterm.char.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="seealso.role">
+      <empty/>
+      <ref name="common.attrib.role"/>
+      <ref name="seeseealso.role.attrib.role"/>
+   </define>
+
+</grammar>
diff --git a/schema/trex/dbtables.trex b/schema/trex/dbtables.trex
new file mode 100644 (file)
index 0000000..0d60ed7
--- /dev/null
@@ -0,0 +1,412 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<grammar xmlns="http://www.thaiopensource.com/trex"
+         xmlns:xsd="http://www.w3.org/2000/10/XMLSchema"
+         ns="http://www.oasis-open.org/docbook/xmlschema/4.1.2">
+
+   <define name="table.att.role">
+      <empty/>
+   </define>
+   <define name="tgroup.att.role">
+      <empty/>
+   </define>
+   <define name="colspec.att.role">
+      <empty/>
+   </define>
+   <define name="thead.att.role">
+      <empty/>
+   </define>
+   <define name="tbody.att.role">
+      <empty/>
+   </define>
+   <define name="row.att.role">
+      <empty/>
+   </define>
+   <define name="entry.att.role">
+      <empty/>
+   </define>
+   <define name="table.label">
+      <choice>
+         <element name="table">
+            <ref name="table.role"/>
+            <group>
+               <ref name="formalobject.title.content.label"/>
+               <optional>
+                  <ref name="ndxterm.class.label"/>
+               </optional>
+               <choice>
+                  <oneOrMore>
+                     <ref name="graphic.label"/>
+                  </oneOrMore>
+                  <oneOrMore>
+                     <ref name="mediaobject.label"/>
+                  </oneOrMore>
+                  <oneOrMore>
+                     <ref name="tgroup.label"/>
+                  </oneOrMore>
+               </choice>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="table.role">
+      <empty/>
+      <ref name="table.att.role"/>
+      <optional>
+         <attribute name="frame">
+            <choice>
+               <string>top</string>
+               <string>bottom</string>
+               <string>topbot</string>
+               <string>all</string>
+               <string>sides</string>
+               <string>none</string>
+            </choice>
+         </attribute>
+      </optional>
+      <optional>
+         <attribute name="colsep">
+            <choice>
+               <string>0</string>
+               <string>1</string>
+            </choice>
+         </attribute>
+      </optional>
+      <optional>
+         <attribute name="rowsep">
+            <choice>
+               <string>0</string>
+               <string>1</string>
+            </choice>
+         </attribute>
+      </optional>
+   </define>
+   <define name="informaltable.label">
+      <choice>
+         <element name="informaltable">
+            <ref name="informaltable.role"/>
+            <choice>
+               <oneOrMore>
+                  <ref name="graphic.label"/>
+               </oneOrMore>
+               <oneOrMore>
+                  <ref name="mediaobject.label"/>
+               </oneOrMore>
+               <oneOrMore>
+                  <ref name="tgroup.label"/>
+               </oneOrMore>
+            </choice>
+         </element>
+      </choice>
+   </define>
+   <define name="informaltable.role">
+      <empty/>
+      <ref name="table.att.role"/>
+      <optional>
+         <attribute name="frame">
+            <choice>
+               <string>top</string>
+               <string>bottom</string>
+               <string>topbot</string>
+               <string>all</string>
+               <string>sides</string>
+               <string>none</string>
+            </choice>
+         </attribute>
+      </optional>
+      <optional>
+         <attribute name="colsep">
+            <choice>
+               <string>0</string>
+               <string>1</string>
+            </choice>
+         </attribute>
+      </optional>
+      <optional>
+         <attribute name="rowsep">
+            <choice>
+               <string>0</string>
+               <string>1</string>
+            </choice>
+         </attribute>
+      </optional>
+   </define>
+   <define name="tgroup.label">
+      <choice>
+         <element name="tgroup">
+            <ref name="tgroup.role"/>
+            <group>
+               <zeroOrMore>
+                  <ref name="colspec.label"/>
+               </zeroOrMore>
+               <optional>
+                  <ref name="thead.label"/>
+               </optional>
+               <ref name="tbody.label"/>
+            </group>
+         </element>
+      </choice>
+   </define>
+   <define name="tgroup.role">
+      <empty/>
+      <ref name="tgroup.att.role"/>
+      <attribute name="cols">
+         <data type="xsd:integer"/>
+      </attribute>
+      <optional>
+         <attribute name="colsep">
+            <choice>
+               <string>0</string>
+               <string>1</string>
+            </choice>
+         </attribute>
+      </optional>
+      <optional>
+         <attribute name="rowsep">
+            <choice>
+               <string>0</string>
+               <string>1</string>
+            </choice>
+         </attribute>
+      </optional>
+      <optional>
+         <attribute name="align">
+            <choice>
+               <string>left</string>
+               <string>right</string>
+               <string>center</string>
+               <string>justify</string>
+            </choice>
+         </attribute>
+      </optional>
+   </define>
+   <define name="colspec.label">
+      <choice>
+         <element name="colspec">
+            <ref name="colspec.role"/>
+            <empty/>
+         </element>
+      </choice>
+   </define>
+   <define name="colspec.role">
+      <empty/>
+      <ref name="colspec.att.role"/>
+      <optional>
+         <attribute name="colnum">
+            <data type="xsd:integer"/>
+         </attribute>
+      </optional>
+      <optional>
+         <attribute name="colname">
+            <data type="xsd:NMTOKEN"/>
+         </attribute>
+      </optional>
+      <optional>
+         <attribute name="colwidth">
+            <anyString/>
+         </attribute>
+      </optional>
+      <optional>
+         <attribute name="colsep">
+            <choice>
+               <string>0</string>
+               <string>1</string>
+            </choice>
+         </attribute>
+      </optional>
+      <optional>
+         <attribute name="rowsep">
+            <choice>
+               <string>0</string>
+               <string>1</string>
+            </choice>
+         </attribute>
+      </optional>
+      <optional>
+         <attribute name="align">
+            <choice>
+               <string>left</string>
+               <string>right</string>
+               <string>center</string>
+               <string>justify</string>
+               <string>char</string>
+            </choice>
+         </attribute>
+      </optional>
+      <optional>
+         <attribute name="char">
+            <anyString/>
+         </attribute>
+      </optional>
+      <optional>
+         <attribute name="charoff">
+            <data type="xsd:NMTOKEN"/>
+         </attribute>
+      </optional>
+   </define>
+   <define name="thead.label">
+      <choice>
+         <element name="thead">
+            <ref name="thead.role"/>
+            <choice>
+               <oneOrMore>
+                  <ref name="row.label"/>
+               </oneOrMore>
+            </choice>
+         </element>
+      </choice>
+   </define>
+   <define name="thead.role">
+      <empty/>
+      <ref name="thead.att.role"/>
+      <optional>
+         <attribute name="valign">
+            <choice>
+               <string>top</string>
+               <string>middle</string>
+               <string>bottom</string>
+            </choice>
+         </attribute>
+      </optional>
+   </define>
+   <define name="tbody.label">
+      <choice>
+         <element name="tbody">
+            <ref name="tbody.role"/>
+            <choice>
+               <oneOrMore>
+                  <ref name="row.label"/>
+               </oneOrMore>
+            </choice>
+         </element>
+      </choice>
+   </define>
+   <define name="tbody.role">
+      <empty/>
+      <ref name="tbody.att.role"/>
+      <optional>
+         <attribute name="valign">
+            <choice>
+               <string>top</string>
+               <string>middle</string>
+               <string>bottom</string>
+            </choice>
+         </attribute>
+      </optional>
+   </define>
+   <define name="row.label">
+      <choice>
+         <element name="row">
+            <ref name="row.role"/>
+            <choice>
+               <oneOrMore>
+                  <ref name="entry.label"/>
+               </oneOrMore>
+            </choice>
+         </element>
+      </choice>
+   </define>
+   <define name="row.role">
+      <empty/>
+      <ref name="row.att.role"/>
+      <optional>
+         <attribute name="rowsep">
+            <choice>
+               <string>0</string>
+               <string>1</string>
+            </choice>
+         </attribute>
+      </optional>
+      <optional>
+         <attribute name="valign">
+            <choice>
+               <string>top</string>
+               <string>middle</string>
+               <string>bottom</string>
+            </choice>
+         </attribute>
+      </optional>
+   </define>
+   <define name="entry.label">
+      <choice>
+         <element name="entry">
+            <ref name="entry.role"/>
+            <mixed>
+               <zeroOrMore>
+                 <ref name="para.char.mix.label"/>
+                 <ref name="tabentry.mix.label"/>
+               </zeroOrMore>
+            </mixed>
+         </element>
+      </choice>
+   </define>
+   <define name="entry.role">
+      <empty/>
+      <ref name="entry.att.role"/>
+      <optional>
+         <attribute name="colname">
+            <data type="xsd:NMTOKEN"/>
+         </attribute>
+      </optional>
+      <optional>
+         <attribute name="namest">
+            <data type="xsd:NMTOKEN"/>
+         </attribute>
+      </optional>
+      <optional>
+         <attribute name="nameend">
+            <data type="xsd:NMTOKEN"/>
+         </attribute>
+      </optional>
+      <optional>
+         <attribute name="morerows">
+            <data type="xsd:integer"/>
+         </attribute>
+      </optional>
+      <optional>
+         <attribute name="colsep">
+            <choice>
+               <string>0</string>
+               <string>1</string>
+            </choice>
+         </attribute>
+      </optional>
+      <optional>
+         <attribute name="rowsep">
+            <choice>
+               <string>0</string>
+               <string>1</string>
+            </choice>
+         </attribute>
+      </optional>
+      <optional>
+         <attribute name="align">
+            <choice>
+               <string>left</string>
+               <string>right</string>
+               <string>center</string>
+               <string>justify</string>
+               <string>char</string>
+            </choice>
+         </attribute>
+      </optional>
+      <optional>
+         <attribute name="char">
+            <anyString/>
+         </attribute>
+      </optional>
+      <optional>
+         <attribute name="charoff">
+            <data type="xsd:NMTOKEN"/>
+         </attribute>
+      </optional>
+      <optional>
+         <attribute name="valign">
+            <choice>
+               <string>top</string>
+               <string>middle</string>
+               <string>bottom</string>
+            </choice>
+         </attribute>
+      </optional>
+   </define>
+</grammar>
diff --git a/schema/trex/docbook.trex b/schema/trex/docbook.trex
new file mode 100644 (file)
index 0000000..d49ca67
--- /dev/null
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<grammar xmlns="http://www.thaiopensource.com/trex"
+         xmlns:xsd="http://www.w3.org/2000/10/XMLSchema"
+         ns="http://www.oasis-open.org/docbook/xmlschema/4.1.2">
+
+   <start>
+      <choice>
+         <ref name="set.label"/>
+         <ref name="book.label"/>
+         <ref name="chapter.label"/>
+         <ref name="appendix.label"/>
+         <ref name="article.label"/>
+         <ref name="part.label"/>
+         <ref name="reference.label"/>
+         <ref name="refentry.label"/>
+         <ref name="section.label"/>
+         <ref name="sect1.label"/>
+         <ref name="sect2.label"/>
+         <ref name="sect3.label"/>
+         <ref name="sect4.label"/>
+         <ref name="sect5.label"/>
+         <ref name="para.label"/>
+      </choice>
+   </start>
+
+   <include href="dbpool.trex"/>
+   <include href="dbhier.trex"/>
+   <include href="dbtables.trex"/>
+
+</grammar>
diff --git a/schema/trex/test.xml b/schema/trex/test.xml
new file mode 100644 (file)
index 0000000..fe5fd41
--- /dev/null
@@ -0,0 +1,6 @@
+<chapter xmlns="http://www.oasis-open.org/docbook/xmlschema/4.1.2">
+<title>foo</title>
+<para>
+some text
+</para>
+</chapter>
diff --git a/schema/xmlschema/.cvsignore b/schema/xmlschema/.cvsignore
new file mode 100644 (file)
index 0000000..daa30a3
--- /dev/null
@@ -0,0 +1 @@
+README.html
diff --git a/schema/xmlschema/Makefile b/schema/xmlschema/Makefile
new file mode 100644 (file)
index 0000000..441b1df
--- /dev/null
@@ -0,0 +1,11 @@
+include ../../cvstools/Makefile.incl
+
+DRAFT=yes
+STYLESHEET=../../xsl/html/docbook.xsl
+
+all: README.html
+
+README.html: README.xml
+       $(XJPARSE) $<
+       $(XSLT) $< $(STYLESHEET) $@ nochunks=1 draft=$(DRAFT)
+
diff --git a/schema/xmlschema/README.xml b/schema/xmlschema/README.xml
new file mode 100644 (file)
index 0000000..295db70
--- /dev/null
@@ -0,0 +1,94 @@
+<!DOCTYPE article
+  PUBLIC "-//Norman Walsh//DTD Simplified DocBook XML V4.1.2.4//EN"
+  "http://nwalsh.com/docbook/simple/4.1.2.4/sdocbook.dtd" [
+<!ENTITY version "V4.1.2.3">
+]>
+<article>
+<articleinfo>
+<title>DocBook XML Schema</title>
+<pubdate>12 Jan 2001</pubdate>
+<releaseinfo role="meta">
+$Id$
+</releaseinfo>
+
+<revhistory>
+<revision>
+<revnumber>4.1.2.3</revnumber>
+<date>12 Jan 2001</date>
+<authorinitials>ndw</authorinitials>
+<revremark>Updated experimental release.</revremark>
+</revision>
+<revision>
+<revnumber>4.1.2.2</revnumber>
+<date>10 Jan 2001</date>
+<authorinitials>ndw</authorinitials>
+<revremark>Updated experimental release.</revremark>
+</revision>
+<revision>
+<revnumber>4.1.2.1</revnumber>
+<date>16 Oct 2000</date>
+<authorinitials>ndw</authorinitials>
+<revremark>Initial experimental release.</revremark>
+</revision>
+</revhistory>
+
+<author><firstname>Norman</firstname><surname>Walsh</surname>
+</author>
+</articleinfo>
+
+<para>This is the README for the
+<ulink role="linktable" url="http://www.oasis-open.org/docbook/">DocBook</ulink>
+<ulink role="linktable" url="http://www.w3.org/XML/Schema">XML Schema</ulink>.
+</para>
+
+<para>
+The <ulink role="linktable" url="dbxs4121.zip">DocBook
+XML Schema &version;</ulink> attempts to be an accurate translation of the
+<ulink url="http://www.oasis-open.org/docbook/xml">DocBook
+XML V4.1.2 DTD</ulink>.</para>
+
+<para>In this version, the parameterization of the schema is roughly
+identical to the parameterization of the DTD. This may change as I
+begin to experiment with the construction of derivative schemas.</para>
+
+<note><title>Alpha Release</title>
+<para>DocBook XML Schema &version; is an experimental release.
+It validates with
+<ulink role="linktable" url="http://www.w3.org/2000/06/webdata/xsv">XSV</ulink>
+version SV 1.173.2.10/1.82 of 2000/10/31 16:30:47 on my system.</para>
+<para>I welcome reports of success or failure with other XML Schema
+validation tools.</para>
+</note>
+
+<para>
+The namespace names (URIs) used in this schema are purely
+imaginary. They have no official status, nor do they foreshadow the
+future existence of any similar official URIs. I had to use something.
+</para>
+
+<para>The DocBook XML Schema is known to differ from the DocBook
+DTD in the following ways:</para>
+
+<itemizedlist>
+<listitem><para>There are no named character entities. You can't
+define those in XML Schema.</para></listitem>
+
+<listitem><para>The table model is the OASIS Exchange Table Model,
+not the CALS Table Model. This table model is less rich than the 
+CALS model, lacking <literal>spanspec</literal>, <literal>tfoot</literal>,
+and a few other things.
+</para></listitem>
+
+<listitem><para>Inside the table model, the <literal>tgroup</literal>
+element and all of its descendants are in a different namespace.
+</para></listitem>
+
+<listitem><para>There are bugs, perhaps dozens, possibly hundreds.
+</para></listitem>
+</itemizedlist>
+
+<para>With the exception of tables, which will definitely require some
+markup changes in the instances, documents that are valid against the
+DTD should be valid against this schema.</para>
+
+</article>
diff --git a/schema/xmlschema/dbhier.xsd b/schema/xmlschema/dbhier.xsd
new file mode 100644 (file)
index 0000000..cfa68c4
--- /dev/null
@@ -0,0 +1,2078 @@
+<!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'
+  elementFormDefault='qualified'>
+
+<!-- ...................................................................... -->
+<!-- DocBook XML Schema V4.1.2.3........................................... -->
+<!-- ...................................................................... -->
+<!-- Copyright 2000, Norman Walsh, Sun Microsystems.  Schema
+     derived from DocBook DTD Copyright 1992-2000 HaL Computer....  -->
+<!-- ...................................................................... -->
+<!-- Entities for module inclusions ....................................... -->
+
+<!--ENTITY % dbhier.redecl.module              "IGNORE"-->
+<!--ENTITY % dbhier.redecl2.module     "IGNORE"-->
+
+<!-- ...................................................................... -->
+<!-- Entities for element classes ......................................... -->
+
+<!--ENTITY % local.appendix.class ""-->
+<xsd:group name='appendix.class'>
+  <xsd:choice>
+    <xsd:element ref='db:appendix'/>
+    <!-- %local.appendix.class; -->
+  </xsd:choice>
+</xsd:group>
+
+
+<!--ENTITY % local.article.class ""-->
+<xsd:group name='article.class'>
+  <xsd:choice>
+    <xsd:element ref='db:article'/>
+    <!-- %local.article.class; -->
+  </xsd:choice>
+</xsd:group>
+
+
+<!--ENTITY % local.book.class ""-->
+<xsd:group name='book.class'>
+  <xsd:choice>
+    <xsd:element ref='db:book'/>
+    <!-- %local.book.class; -->
+  </xsd:choice>
+</xsd:group>
+
+
+<!--ENTITY % local.chapter.class ""-->
+<xsd:group name='chapter.class'>
+  <xsd:choice>
+    <xsd:element ref='db:chapter'/>
+    <!-- %local.chapter.class; -->
+  </xsd:choice>
+</xsd:group>
+
+<!--ENTITY % local.index.class ""-->
+<xsd:group name='index.class'>
+  <xsd:choice>
+    <xsd:element ref='db:index'/>
+    <xsd:element ref='db:setindex'/>
+    <!-- %local.index.class; -->
+  </xsd:choice>
+</xsd:group>
+
+
+<!--ENTITY % local.refentry.class ""-->
+<xsd:group name='refentry.class'>
+  <xsd:choice>
+    <xsd:element ref='db:refentry'/>
+    <!-- %local.refentry.class; -->
+  </xsd:choice>
+</xsd:group>
+
+
+<!--ENTITY % local.nav.class ""-->
+<xsd:group name='nav.class'>
+  <xsd:choice>
+    <xsd:element ref='db:toc'/>
+    <xsd:element ref='db:lot'/>
+    <xsd:element ref='db:index'/>
+    <xsd:element ref='db:glossary'/>
+    <xsd:element ref='db:bibliography'/>
+    <!-- %local.nav.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 -->
+
+<!-- Defining rdbhier here makes some buggy XML parsers happy. -->
+<!--ENTITY % rdbhier ""-->
+<!--%rdbhier;-->
+
+<!-- ...................................................................... -->
+<!-- Entities for element mixtures ........................................ -->
+
+<!-- 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 % forms.hook ""-->
+
+<!--ENTITY % local.divcomponent.mix ""-->
+<xsd:group name='divcomponent.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.divcomponent.mix; -->
+  </xsd:choice>
+</xsd:group>
+
+
+<!--ENTITY % local.refcomponent.mix ""-->
+<xsd:group name='refcomponent.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.refcomponent.mix; -->
+  </xsd:choice>
+</xsd:group>
+
+
+<!--ENTITY % local.indexdivcomponent.mix ""-->
+<xsd:group name='indexdivcomponent.mix'>
+  <xsd:choice>
+    <xsd:element ref='db:itemizedlist'/>
+    <xsd:element ref='db:orderedlist'/>
+    <xsd:element ref='db:variablelist'/>
+    <xsd:element ref='db:simplelist'/>
+    <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:element ref='db:anchor'/>
+    <xsd:element ref='db:remark'/>
+    <xsd:group ref='db:link.char.class'/>
+    <xsd:element ref='db:beginpage'/>
+    <!-- %local.indexdivcomponent.mix; -->
+  </xsd:choice>
+</xsd:group>
+
+
+<!--ENTITY % local.refname.char.mix ""-->
+<xsd:group name='refname.char.mix'>
+  <xsd:choice>
+    <!-- #PCDATA -->
+    <xsd:group ref='db:tech.char.class'/>
+    <!-- %local.refname.char.mix; -->
+  </xsd:choice>
+</xsd:group>
+
+
+<!--ENTITY % local.partcontent.mix ""-->
+<xsd:group name='partcontent.mix'>
+  <xsd:choice>
+    <xsd:group ref='db:appendix.class'/>
+    <xsd:group ref='db:chapter.class'/>
+    <xsd:group ref='db:nav.class'/>
+    <xsd:group ref='db:article.class'/>
+    <xsd:element ref='db:preface'/>
+    <xsd:group ref='db:refentry.class'/>
+    <xsd:element ref='db:reference'/>
+    <!-- %local.partcontent.mix; -->
+  </xsd:choice>
+</xsd:group>
+
+
+<!--ENTITY % local.refinline.char.mix ""-->
+<xsd:group name='refinline.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:ndxterm.class'/>
+    <xsd:element ref='db:beginpage'/>
+    <!-- %local.refinline.char.mix; -->
+  </xsd:choice>
+</xsd:group>
+
+
+<!--ENTITY % local.refclass.char.mix ""-->
+<xsd:group name='refclass.char.mix'>
+  <xsd:choice>
+    <!-- #PCDATA -->
+    <xsd:element ref='db:application'/>
+    <!-- %local.refclass.char.mix; -->
+  </xsd:choice>
+</xsd:group>
+
+
+<!-- Redeclaration placeholder 2 .......................................... -->
+
+<!-- For redeclaring entities that are declared after this point while
+     retaining their references to the entities that are declared before
+     this point -->
+
+<!-- Defining rdbhier2 here makes some buggy XML parsers happy. -->
+<!--ENTITY % rdbhier2 ""-->
+<!--%rdbhier2;-->
+
+<!-- ...................................................................... -->
+<!-- Entities for content models .......................................... -->
+
+<xsd:group name='div.title.content'>
+  <xsd:sequence>
+    <xsd:element ref='db:title'/>
+    <xsd:element ref='db:subtitle' minOccurs='0' maxOccurs='1'/>
+    <xsd:element ref='db:titleabbrev' minOccurs='0' maxOccurs='1'/>
+  </xsd:sequence>
+</xsd:group>
+
+<xsd:group name='bookcomponent.title.content'>
+  <xsd:sequence>
+    <xsd:element ref='db:title'/>
+    <xsd:element ref='db:subtitle' minOccurs='0' maxOccurs='1'/>
+    <xsd:element ref='db:titleabbrev' minOccurs='0' maxOccurs='1'/>
+  </xsd:sequence>
+</xsd:group>
+
+<xsd:group name='sect.title.content'>
+  <xsd:sequence>
+    <xsd:element ref='db:title'/>
+    <xsd:element ref='db:subtitle' minOccurs='0' maxOccurs='1'/>
+    <xsd:element ref='db:titleabbrev' minOccurs='0' maxOccurs='1'/>
+  </xsd:sequence>
+</xsd:group>
+
+<xsd:group name='refsect.title.content'>
+  <xsd:sequence>
+    <xsd:element ref='db:title'/>
+    <xsd:element ref='db:subtitle' minOccurs='0' maxOccurs='1'/>
+    <xsd:element ref='db:titleabbrev' minOccurs='0' maxOccurs='1'/>
+  </xsd:sequence>
+</xsd:group>
+
+<xsd:group name='bookcomponent.content'>
+  <xsd:choice>
+    <xsd:sequence>
+      <xsd:choice minOccurs='1' maxOccurs='unbounded'>
+        <xsd:group ref='db:divcomponent.mix'/>
+      </xsd:choice>
+      <xsd:choice>
+        <xsd:element ref='db:sect1' minOccurs='0' maxOccurs='unbounded'/>
+        <xsd:group ref='db:refentry.class' minOccurs='0' maxOccurs='unbounded'/>
+        <xsd:element ref='db:simplesect' minOccurs='0' maxOccurs='unbounded'/>
+        <xsd:element ref='db:section' minOccurs='0' maxOccurs='unbounded'/>
+      </xsd:choice>
+    </xsd:sequence>
+    <xsd:choice>
+      <xsd:element ref='db:sect1' minOccurs='1' maxOccurs='unbounded'/>
+      <xsd:group ref='db:refentry.class' minOccurs='1' maxOccurs='unbounded'/>
+      <xsd:element ref='db:simplesect' minOccurs='1' maxOccurs='unbounded'/>
+      <xsd:element ref='db:section' minOccurs='1' maxOccurs='unbounded'/>
+    </xsd:choice>
+  </xsd:choice>
+  <!-- "((%divcomponent.mix;)+,
+         (sect1*|(%refentry.class;)*|simplesect*|section*))
+        | (sect1+|(%refentry.class;)+|simplesect+|section+)" -->
+</xsd:group>
+
+<!-- ...................................................................... -->
+<!-- Set and SetInfo ...................................................... -->
+
+<xsd:attributeGroup name='set.role.attrib'>
+  <xsd:attributeGroup ref='db:role.attrib'/>
+</xsd:attributeGroup>
+
+<xsd:complexType name='set'>
+  <xsd:sequence>
+    <xsd:group ref='db:div.title.content' minOccurs='0' maxOccurs='1'/>
+    <xsd:element ref='db:setinfo' minOccurs='0' maxOccurs='1'/>
+    <xsd:element ref='db:toc' minOccurs='0' maxOccurs='1'/>
+    <xsd:group ref='db:book.class' minOccurs='1' maxOccurs='unbounded'/>
+    <xsd:element ref='db:setindex' minOccurs='0' maxOccurs='1'/>
+  </xsd:sequence>
+  <!-- ((%div.title.content;)?, setinfo?, toc?, (%book.class;)+,
+               setindex?) -->
+
+  <!-- FPI: SGML formal public identifier -->
+  <xsd:attribute name='fpi' type='xsd:string'/>
+
+  <xsd:attributeGroup ref='db:status.attrib'/>
+  <xsd:attributeGroup ref='db:common.attrib'/>
+  <xsd:attributeGroup ref='db:set.role.attrib'/>
+  <!-- %local.set.attrib; -->
+</xsd:complexType>
+
+<xsd:attributeGroup name='setinfo.role.attrib'>
+  <xsd:attributeGroup ref='db:role.attrib'/>
+</xsd:attributeGroup>
+
+<xsd:complexType name='setinfo'>
+  <xsd:complexContent>
+    <xsd:extension base='db:infoContentModel'>
+      <!-- Contents: IDs of the ToC, Books, and SetIndex that comprise
+           the set, in the order of their appearance -->
+      <xsd:attribute name='contents' type='xsd:IDREFS'/>
+      <xsd:attributeGroup ref='db:common.attrib'/>
+      <xsd:attributeGroup ref='db:setinfo.role.attrib'/>
+      <!-- %local.setinfo.attrib; -->
+    </xsd:extension>
+  </xsd:complexContent>
+</xsd:complexType>
+
+<!-- ...................................................................... -->
+<!-- Book and BookInfo .................................................... -->
+
+<xsd:attributeGroup name='book.role.attrib'>
+  <xsd:attributeGroup ref='db:role.attrib'/>
+</xsd:attributeGroup>
+
+<xsd:complexType name='book'>
+  <xsd:sequence>
+    <xsd:group ref='db:div.title.content' minOccurs='0' maxOccurs='1'/>
+    <xsd:element ref='db:bookinfo' minOccurs='0' maxOccurs='1'/>
+    <xsd:choice minOccurs='0' maxOccurs='unbounded'>
+      <xsd:element ref='db:dedication'/>
+      <xsd:element ref='db:toc'/>
+      <xsd:element ref='db:lot'/>
+      <xsd:element ref='db:glossary'/>
+      <xsd:element ref='db:bibliography'/>
+      <xsd:element ref='db:preface'/>
+      <xsd:group ref='db:chapter.class'/>
+      <xsd:element ref='db:reference'/>
+      <xsd:element ref='db:part'/>
+      <xsd:group ref='db:article.class'/>
+      <xsd:group ref='db:appendix.class'/>
+      <xsd:group ref='db:index.class'/>
+      <xsd:element ref='db:colophon'/>
+    </xsd:choice>
+  </xsd:sequence>
+  <!-- ((%div.title.content;)?, bookinfo?,
+               (dedication | toc | lot
+               | glossary | bibliography | preface
+               | %chapter.class; | reference | part
+               | %article.class;
+               | %appendix.class;
+               | %index.class;
+               | colophon)*) -->
+
+  <!-- FPI: SGML formal public identifier -->
+  <xsd:attribute name='fpi' type='xsd:string'/>
+
+  <xsd:attributeGroup ref='db:label.attrib'/>
+  <xsd:attributeGroup ref='db:status.attrib'/>
+  <xsd:attributeGroup ref='db:common.attrib'/>
+  <xsd:attributeGroup ref='db:book.role.attrib'/>
+  <!-- %local.book.attrib; -->
+</xsd:complexType>
+
+<xsd:attributeGroup name='bookinfo.role.attrib'>
+  <xsd:attributeGroup ref='db:role.attrib'/>
+</xsd:attributeGroup>
+
+<xsd:complexType name='bookinfo'>
+  <xsd:complexContent>
+    <xsd:extension base='db:infoContentModel'>
+      <!-- Contents: IDs of the ToC, Books, and SetIndex that comprise
+           the set, in the order of their appearance -->
+      <xsd:attribute name='contents' type='xsd:IDREFS'/>
+      <xsd:attributeGroup ref='db:common.attrib'/>
+      <xsd:attributeGroup ref='db:bookinfo.role.attrib'/>
+      <!-- %local.bookinfo.attrib; -->
+    </xsd:extension>
+  </xsd:complexContent>
+</xsd:complexType>
+
+<!-- ...................................................................... -->
+<!-- Dedication, ToC, and LoT ............................................. -->
+
+<xsd:attributeGroup name='dedication.role.attrib'>
+  <xsd:attributeGroup ref='db:role.attrib'/>
+</xsd:attributeGroup>
+
+<xsd:complexType name='dedication'>
+  <xsd:sequence>
+    <xsd:group ref='db:sect.title.content' minOccurs='0' maxOccurs='1'/>
+    <xsd:group ref='db:legalnotice.mix' minOccurs='1' maxOccurs='unbounded'/>
+  </xsd:sequence>
+  <!-- ((%sect.title.content;)?, (%legalnotice.mix;)+) -->
+
+  <xsd:attributeGroup ref='db:status.attrib'/>
+  <xsd:attributeGroup ref='db:common.attrib'/>
+  <xsd:attributeGroup ref='db:dedication.role.attrib'/>
+  <!-- %local.dedication.attrib -->
+</xsd:complexType>
+
+<xsd:attributeGroup name='colophon.role.attrib'>
+  <xsd:attributeGroup ref='db:role.attrib'/>
+</xsd:attributeGroup>
+
+<xsd:complexType name='colophon'>
+  <xsd:sequence>
+    <xsd:group ref='db:sect.title.content' minOccurs='0' maxOccurs='1'/>
+    <xsd:group ref='db:textobject.mix' minOccurs='1' maxOccurs='unbounded'/>
+  </xsd:sequence>
+  <!-- ((%sect.title.content;)?, (%textobject.mix;)+) -->
+
+  <xsd:attributeGroup ref='db:status.attrib'/>
+  <xsd:attributeGroup ref='db:common.attrib'/>
+  <xsd:attributeGroup ref='db:colophon.role.attrib'/>
+  <!-- %local.colophon.attrib; -->
+</xsd:complexType>
+
+<xsd:attributeGroup name='toc.role.attrib'>
+  <xsd:attributeGroup ref='db:role.attrib'/>
+</xsd:attributeGroup>
+
+<xsd:complexType name='toc'>
+  <xsd:sequence>
+    <xsd:group ref='db:bookcomponent.title.content' minOccurs='0' maxOccurs='1'/>
+    <xsd:element ref='db:tocfront' minOccurs='0' maxOccurs='unbounded'/>
+    <xsd:choice minOccurs='0' maxOccurs='unbounded'>
+      <xsd:element ref='db:tocpart'/>
+      <xsd:element ref='db:tocchap'/>
+    </xsd:choice>
+    <xsd:element ref='db:tocback' minOccurs='0' maxOccurs='unbounded'/>
+  </xsd:sequence>
+  <!-- ((%bookcomponent.title.content;)?, tocfront*,
+               (tocpart | tocchap)*, tocback*) -->
+
+  <xsd:attributeGroup ref='db:pagenum.attrib'/>
+  <xsd:attributeGroup ref='db:common.attrib'/>
+  <xsd:attributeGroup ref='db:toc.role.attrib'/>
+  <!-- %local.toc.attrib -->
+</xsd:complexType>
+
+<xsd:attributeGroup name='tocfront.role.attrib'>
+  <xsd:attributeGroup ref='db:role.attrib'/>
+</xsd:attributeGroup>
+
+<xsd:complexType name='tocfront' mixed='true'>
+  <xsd:choice minOccurs='0' maxOccurs='unbounded'>
+    <xsd:group ref='db:para.char.mix'/>
+  </xsd:choice>
+  <!-- (%para.char.mix;)* -->
+
+  <xsd:attributeGroup ref='db:label.attrib'/>
+  <xsd:attributeGroup ref='db:linkend.attrib'/>
+  <xsd:attributeGroup ref='db:pagenum.attrib'/>
+  <xsd:attributeGroup ref='db:common.attrib'/>
+  <xsd:attributeGroup ref='db:tocfront.role.attrib'/>
+  <!-- %local.tocfront.attrib; -->
+</xsd:complexType>
+
+<xsd:attributeGroup name='tocentry.role.attrib'>
+  <xsd:attributeGroup ref='db:role.attrib'/>
+</xsd:attributeGroup>
+
+<xsd:complexType name='tocentry' mixed='true'>
+  <xsd:choice minOccurs='0' maxOccurs='unbounded'>
+    <xsd:group ref='db:para.char.mix'/>
+  </xsd:choice>
+  <!-- (%para.char.mix;)* -->
+
+  <xsd:attributeGroup ref='db:linkend.attrib'/>
+  <xsd:attributeGroup ref='db:pagenum.attrib'/>
+  <xsd:attributeGroup ref='db:common.attrib'/>
+  <xsd:attributeGroup ref='db:tocentry.role.attrib'/>
+  <!-- %local.tocentry.attrib; -->
+</xsd:complexType>
+
+<xsd:attributeGroup name='tocpart.role.attrib'>
+  <xsd:attributeGroup ref='db:role.attrib'/>
+</xsd:attributeGroup>
+
+<xsd:complexType name='tocpart'>
+  <xsd:sequence>
+    <xsd:element ref='db:tocentry' minOccurs='1' maxOccurs='unbounded'/>
+    <xsd:element ref='db:tocchap' minOccurs='0' maxOccurs='unbounded'/>
+  </xsd:sequence>
+  <!-- (tocentry+, tocchap*) -->
+
+  <xsd:attributeGroup ref='db:common.attrib'/>
+  <xsd:attributeGroup ref='db:tocpart.role.attrib'/>
+  <!-- %local.tocpart.attrib; -->
+</xsd:complexType>
+
+<xsd:attributeGroup name='tocchap.role.attrib'>
+  <xsd:attributeGroup ref='db:role.attrib'/>
+</xsd:attributeGroup>
+
+<xsd:complexType name='tocchap'>
+  <xsd:sequence>
+    <xsd:element ref='db:tocentry' minOccurs='1' maxOccurs='unbounded'/>
+    <xsd:element ref='db:toclevel1' minOccurs='0' maxOccurs='unbounded'/>
+  </xsd:sequence>
+  <!-- (tocentry+, toclevel1*) -->
+
+  <xsd:attributeGroup ref='db:label.attrib'/>
+  <xsd:attributeGroup ref='db:common.attrib'/>
+  <xsd:attributeGroup ref='db:tocchap.role.attrib'/>
+  <!-- %local.tocchap.attrib; -->
+</xsd:complexType>
+
+<xsd:attributeGroup name='toclevel1.role.attrib'>
+  <xsd:attributeGroup ref='db:role.attrib'/>
+</xsd:attributeGroup>
+
+<xsd:complexType name='toclevel1'>
+  <xsd:sequence>
+    <xsd:element ref='db:tocentry' minOccurs='1' maxOccurs='unbounded'/>
+    <xsd:element ref='db:toclevel2' minOccurs='0' maxOccurs='unbounded'/>
+  </xsd:sequence>
+  <!-- (tocentry+, toclevel2*) -->
+
+  <xsd:attributeGroup ref='db:common.attrib'/>
+  <xsd:attributeGroup ref='db:toclevel1.role.attrib'/>
+  <!-- %local.toclevel1.attrib; -->
+</xsd:complexType>
+
+<xsd:attributeGroup name='toclevel2.role.attrib'>
+  <xsd:attributeGroup ref='db:role.attrib'/>
+</xsd:attributeGroup>
+
+<xsd:complexType name='toclevel2'>
+  <xsd:sequence>
+    <xsd:element ref='db:tocentry' minOccurs='1' maxOccurs='unbounded'/>
+    <xsd:element ref='db:toclevel3' minOccurs='0' maxOccurs='unbounded'/>
+  </xsd:sequence>
+  <!-- (tocentry+, toclevel3*) -->
+
+  <xsd:attributeGroup ref='db:common.attrib'/>
+  <xsd:attributeGroup ref='db:toclevel2.role.attrib'/>
+  <!-- %local.toclevel2.attrib; -->
+</xsd:complexType>
+
+<xsd:attributeGroup name='toclevel3.role.attrib'>
+  <xsd:attributeGroup ref='db:role.attrib'/>
+</xsd:attributeGroup>
+
+<xsd:complexType name='toclevel3'>
+  <xsd:sequence>
+    <xsd:element ref='db:tocentry' minOccurs='1' maxOccurs='unbounded'/>
+    <xsd:element ref='db:toclevel4' minOccurs='0' maxOccurs='unbounded'/>
+  </xsd:sequence>
+  <!-- (tocentry+, toclevel4*) -->
+
+  <xsd:attributeGroup ref='db:common.attrib'/>
+  <xsd:attributeGroup ref='db:toclevel3.role.attrib'/>
+  <!-- %local.toclevel3.attrib; -->
+</xsd:complexType>
+
+<xsd:attributeGroup name='toclevel4.role.attrib'>
+  <xsd:attributeGroup ref='db:role.attrib'/>
+</xsd:attributeGroup>
+
+<xsd:complexType name='toclevel4'>
+  <xsd:sequence>
+    <xsd:element ref='db:tocentry' minOccurs='1' maxOccurs='unbounded'/>
+    <xsd:element ref='db:toclevel5' minOccurs='0' maxOccurs='unbounded'/>
+  </xsd:sequence>
+  <!-- (tocentry+, toclevel5*) -->
+
+  <xsd:attributeGroup ref='db:common.attrib'/>
+  <xsd:attributeGroup ref='db:toclevel4.role.attrib'/>
+  <!-- %local.toclevel4.attrib; -->
+</xsd:complexType>
+
+<xsd:attributeGroup name='toclevel5.role.attrib'>
+  <xsd:attributeGroup ref='db:role.attrib'/>
+</xsd:attributeGroup>
+
+<xsd:complexType name='toclevel5'>
+  <xsd:sequence>
+    <xsd:element ref='db:tocentry' minOccurs='1' maxOccurs='unbounded'/>
+  </xsd:sequence>
+  <!-- (tocentry+) -->
+
+  <xsd:attributeGroup ref='db:common.attrib'/>
+  <xsd:attributeGroup ref='db:toclevel5.role.attrib'/>
+  <!-- %local.toclevel5.attrib; -->
+</xsd:complexType>
+
+<xsd:attributeGroup name='tocback.role.attrib'>
+  <xsd:attributeGroup ref='db:role.attrib'/>
+</xsd:attributeGroup>
+
+<xsd:complexType name='tocback' mixed='true'>
+  <xsd:choice minOccurs='0' maxOccurs='unbounded'>
+    <xsd:group ref='db:para.char.mix'/>
+  </xsd:choice>
+  <!-- (%para.char.mix;)* -->
+
+  <xsd:attributeGroup ref='db:label.attrib'/>
+  <xsd:attributeGroup ref='db:linkend.attrib'/>
+  <xsd:attributeGroup ref='db:pagenum.attrib'/>
+  <xsd:attributeGroup ref='db:common.attrib'/>
+  <xsd:attributeGroup ref='db:tocback.role.attrib'/>
+  <!-- %local.tocback.attrib; -->
+</xsd:complexType>
+
+<xsd:attributeGroup name='lot.role.attrib'>
+  <xsd:attributeGroup ref='db:role.attrib'/>
+</xsd:attributeGroup>
+
+<xsd:complexType name='lot'>
+  <xsd:sequence>
+    <xsd:group ref='db:bookcomponent.title.content' minOccurs='0' maxOccurs='1'/>
+    <xsd:element ref='db:lotentry' minOccurs='0' maxOccurs='unbounded'/>
+  </xsd:sequence>
+  <!-- ((%bookcomponent.title.content;)?, lotentry*) -->
+
+  <xsd:attributeGroup ref='db:label.attrib'/>
+  <xsd:attributeGroup ref='db:common.attrib'/>
+  <xsd:attributeGroup ref='db:lot.role.attrib'/>
+  <!-- %local.lot.attrib; -->
+</xsd:complexType>
+
+<xsd:attributeGroup name='lotentry.role.attrib'>
+  <xsd:attributeGroup ref='db:role.attrib'/>
+</xsd:attributeGroup>
+
+<xsd:complexType name='lotentry' mixed='true'>
+  <xsd:choice minOccurs='0' maxOccurs='unbounded'>
+    <xsd:group ref='db:para.char.mix'/>
+  </xsd:choice>
+  <!-- (%para.char.mix;)* -->
+
+  <!-- SrcCredit: Information about the source of the entry,
+       as for a list of illustrations -->
+  <xsd:attribute name='srccredit' type='xsd:string'/>
+  <xsd:attributeGroup ref='db:pagenum.attrib'/>
+  <xsd:attributeGroup ref='db:common.attrib'/>
+  <xsd:attributeGroup ref='db:linkend.attrib'/>
+  <xsd:attributeGroup ref='db:lotentry.role.attrib'/>
+  <!-- %local.lotentry.attrib; -->
+</xsd:complexType>
+
+<!-- ...................................................................... -->
+<!-- Appendix, Chapter, Part, Preface, Reference, PartIntro ............... -->
+
+<xsd:attributeGroup name='appendix.role.attrib'>
+  <xsd:attributeGroup ref='db:role.attrib'/>
+</xsd:attributeGroup>
+
+<xsd:complexType name='appendix'>
+  <xsd:sequence>
+    <xsd:element ref='db:appendixinfo' minOccurs='0' maxOccurs='1'/>
+    <xsd:group ref='db:bookcomponent.title.content'/>
+    <xsd:group ref='db:nav.class' minOccurs='0' maxOccurs='unbounded'/>
+    <xsd:element ref='db:tocchap' minOccurs='0' maxOccurs='1'/>
+    <xsd:group ref='db:bookcomponent.content'/>
+    <xsd:group ref='db:nav.class' minOccurs='0' maxOccurs='unbounded'/>
+  </xsd:sequence>
+  <!-- (appendixinfo?,
+                     (%bookcomponent.title.content;),
+                     (%nav.class;)*,
+                     tocchap?,
+                     (%bookcomponent.content;),
+                     (%nav.class;)*) -->
+
+  <xsd:attributeGroup ref='db:label.attrib'/>
+  <xsd:attributeGroup ref='db:status.attrib'/>
+  <xsd:attributeGroup ref='db:common.attrib'/>
+  <xsd:attributeGroup ref='db:appendix.role.attrib'/>
+  <!-- %local.appendix.attrib; -->
+</xsd:complexType>
+
+<xsd:attributeGroup name='chapter.role.attrib'>
+  <xsd:attributeGroup ref='db:role.attrib'/>
+</xsd:attributeGroup>
+
+<xsd:complexType name='chapter'>
+  <xsd:sequence>
+    <xsd:element ref='db:chapterinfo' minOccurs='0' maxOccurs='1'/>
+    <xsd:group ref='db:bookcomponent.title.content'/>
+    <xsd:group ref='db:nav.class' minOccurs='0' maxOccurs='unbounded'/>
+    <xsd:element ref='db:tocchap' minOccurs='0' maxOccurs='1'/>
+    <xsd:group ref='db:bookcomponent.content'/>
+    <xsd:group ref='db:nav.class' minOccurs='0' maxOccurs='unbounded'/>
+  </xsd:sequence>
+  <!-- (chapterinfo?,
+                    (%bookcomponent.title.content;),
+                    (%nav.class;)*,
+                    tocchap?,
+                    (%bookcomponent.content;),
+                    (%nav.class;)*) -->
+
+  <xsd:attributeGroup ref='db:label.attrib'/>
+  <xsd:attributeGroup ref='db:status.attrib'/>
+  <xsd:attributeGroup ref='db:common.attrib'/>
+  <xsd:attributeGroup ref='db:chapter.role.attrib'/>
+  <!-- %local.chapter.attrib; -->
+</xsd:complexType>
+
+<!-- Note that Part was to have its content model reduced in V4.1.2.  This
+change will not be made after all. -->
+
+<xsd:attributeGroup name='part.role.attrib'>
+  <xsd:attributeGroup ref='db:role.attrib'/>
+</xsd:attributeGroup>
+
+<xsd:complexType name='part'>
+  <xsd:sequence>
+    <xsd:element ref='db:partinfo' minOccurs='0' maxOccurs='1'/>
+    <xsd:group ref='db:bookcomponent.title.content'/>
+    <xsd:element ref='db:partintro' minOccurs='0' maxOccurs='1'/>
+    <xsd:group ref='db:partcontent.mix' minOccurs='1' maxOccurs='unbounded'/>
+  </xsd:sequence>
+  <!-- (partinfo?, (%bookcomponent.title.content;), partintro?,
+               (%partcontent.mix;)+) -->
+
+  <xsd:attributeGroup ref='db:label.attrib'/>
+  <xsd:attributeGroup ref='db:status.attrib'/>
+  <xsd:attributeGroup ref='db:common.attrib'/>
+  <xsd:attributeGroup ref='db:part.role.attrib'/>
+  <!-- %local.part.attrib; -->
+</xsd:complexType>
+
+<!--ELEMENT PartIntro (defined below)-->
+
+<xsd:attributeGroup name='preface.role.attrib'>
+  <xsd:attributeGroup ref='db:role.attrib'/>
+</xsd:attributeGroup>
+
+<xsd:complexType name='preface'>
+  <xsd:sequence>
+    <xsd:element ref='db:prefaceinfo' minOccurs='0' maxOccurs='1'/>
+    <xsd:group ref='db:bookcomponent.title.content'/>
+    <xsd:group ref='db:nav.class' minOccurs='0' maxOccurs='unbounded'/>
+    <xsd:element ref='db:tocchap' minOccurs='0' maxOccurs='1'/>
+    <xsd:group ref='db:bookcomponent.content'/>
+    <xsd:group ref='db:nav.class' minOccurs='0' maxOccurs='unbounded'/>
+  </xsd:sequence>
+  <!-- (prefaceinfo?,
+                    (%bookcomponent.title.content;),
+                    (%nav.class;)*,
+                    tocchap?,
+                    (%bookcomponent.content;),
+                    (%nav.class;)*) -->
+
+  <xsd:attributeGroup ref='db:status.attrib'/>
+  <xsd:attributeGroup ref='db:common.attrib'/>
+  <xsd:attributeGroup ref='db:preface.role.attrib'/>
+  <!-- %local.preface.attrib; -->
+</xsd:complexType>
+
+<xsd:attributeGroup name='reference.role.attrib'>
+  <xsd:attributeGroup ref='db:role.attrib'/>
+</xsd:attributeGroup>
+
+<xsd:complexType name='reference'>
+  <xsd:sequence>
+    <xsd:element ref='db:referenceinfo' minOccurs='0' maxOccurs='1'/>
+    <xsd:group ref='db:bookcomponent.title.content'/>
+    <xsd:element ref='db:partintro' minOccurs='0' maxOccurs='1'/>
+    <xsd:group ref='db:refentry.class' minOccurs='1' maxOccurs='unbounded'/>
+  </xsd:sequence>
+  <!-- (referenceinfo?,
+                     (%bookcomponent.title.content;), partintro?,
+                     (%refentry.class;)+) -->
+
+  <xsd:attributeGroup ref='db:label.attrib'/>
+  <xsd:attributeGroup ref='db:status.attrib'/>
+  <xsd:attributeGroup ref='db:common.attrib'/>
+  <xsd:attributeGroup ref='db:reference.role.attrib'/>
+  <!-- %local.reference.attrib; -->
+</xsd:complexType>
+<!--ELEMENT PartIntro (defined below)-->
+
+<xsd:attributeGroup name='partintro.role.attrib'>
+  <xsd:attributeGroup ref='db:role.attrib'/>
+</xsd:attributeGroup>
+
+<xsd:complexType name='partintro'>
+  <xsd:sequence>
+    <xsd:group ref='db:div.title.content' minOccurs='0' maxOccurs='1'/>
+    <xsd:group ref='db:bookcomponent.content'/>
+  </xsd:sequence>
+  <!-- ((%div.title.content;)?, (%bookcomponent.content;)) -->
+
+  <xsd:attributeGroup ref='db:label.attrib'/>
+  <xsd:attributeGroup ref='db:common.attrib'/>
+  <!-- %local.partintro.attrib; -->
+  <xsd:attributeGroup ref='db:partintro.role.attrib'/>
+</xsd:complexType>
+
+<!-- ...................................................................... -->
+<!-- Other Info elements .................................................. -->
+
+<xsd:attributeGroup name='appendixinfo.role.attrib'>
+  <xsd:attributeGroup ref='db:role.attrib'/>
+</xsd:attributeGroup>
+
+<xsd:complexType name='appendixinfo'>
+  <xsd:complexContent>
+    <xsd:extension base='db:infoContentModel'>
+      <xsd:attributeGroup ref='db:common.attrib'/>
+      <xsd:attributeGroup ref='db:appendixinfo.role.attrib'/>
+      <!-- %local.appendixinfo.attrib; -->
+    </xsd:extension>
+  </xsd:complexContent>
+</xsd:complexType>
+
+<xsd:attributeGroup name='bibliographyinfo.role.attrib'>
+  <xsd:attributeGroup ref='db:role.attrib'/>
+</xsd:attributeGroup>
+
+<xsd:complexType name='bibliographyinfo'>
+  <xsd:complexContent>
+    <xsd:extension base='db:infoContentModel'>
+      <xsd:attributeGroup ref='db:common.attrib'/>
+      <xsd:attributeGroup ref='db:bibliographyinfo.role.attrib'/>
+      <!-- %local.bibliographyinfo.attrib; -->
+    </xsd:extension>
+  </xsd:complexContent>
+</xsd:complexType>
+
+<xsd:attributeGroup name='chapterinfo.role.attrib'>
+  <xsd:attributeGroup ref='db:role.attrib'/>
+</xsd:attributeGroup>
+
+<xsd:complexType name='chapterinfo'>
+  <xsd:complexContent>
+    <xsd:extension base='db:infoContentModel'>
+      <xsd:attributeGroup ref='db:common.attrib'/>
+      <xsd:attributeGroup ref='db:chapterinfo.role.attrib'/>
+      <!-- %local.chapterinfo.attrib; -->
+    </xsd:extension>
+  </xsd:complexContent>
+</xsd:complexType>
+
+<xsd:attributeGroup name='glossaryinfo.role.attrib'>
+  <xsd:attributeGroup ref='db:role.attrib'/>
+</xsd:attributeGroup>
+
+<xsd:complexType name='glossaryinfo'>
+  <xsd:complexContent>
+    <xsd:extension base='db:infoContentModel'>
+      <xsd:attributeGroup ref='db:common.attrib'/>
+      <xsd:attributeGroup ref='db:glossaryinfo.role.attrib'/>
+      <!-- %local.chapterinfo.attrib; -->
+    </xsd:extension>
+  </xsd:complexContent>
+</xsd:complexType>
+
+<xsd:attributeGroup name='indexinfo.role.attrib'>
+  <xsd:attributeGroup ref='db:role.attrib'/>
+</xsd:attributeGroup>
+
+<xsd:complexType name='indexinfo'>
+  <xsd:complexContent>
+    <xsd:extension base='db:infoContentModel'>
+      <xsd:attributeGroup ref='db:common.attrib'/>
+      <xsd:attributeGroup ref='db:indexinfo.role.attrib'/>
+      <!-- %local.chapterinfo.attrib; -->
+    </xsd:extension>
+  </xsd:complexContent>
+</xsd:complexType>
+
+<xsd:attributeGroup name='setindexinfo.role.attrib'>
+  <xsd:attributeGroup ref='db:role.attrib'/>
+</xsd:attributeGroup>
+
+<xsd:complexType name='setindexinfo'>
+  <xsd:complexContent>
+    <xsd:extension base='db:infoContentModel'>
+      <xsd:attributeGroup ref='db:common.attrib'/>
+      <xsd:attributeGroup ref='db:setindexinfo.role.attrib'/>
+      <!-- %local.chapterinfo.attrib; -->
+    </xsd:extension>
+  </xsd:complexContent>
+</xsd:complexType>
+
+<xsd:attributeGroup name='partinfo.role.attrib'>
+  <xsd:attributeGroup ref='db:role.attrib'/>
+</xsd:attributeGroup>
+
+<xsd:complexType name='partinfo'>
+  <xsd:complexContent>
+    <xsd:extension base='db:infoContentModel'>
+      <xsd:attributeGroup ref='db:common.attrib'/>
+      <xsd:attributeGroup ref='db:partinfo.role.attrib'/>
+      <!-- %local.chapterinfo.attrib; -->
+    </xsd:extension>
+  </xsd:complexContent>
+</xsd:complexType>
+
+<xsd:attributeGroup name='prefaceinfo.role.attrib'>
+  <xsd:attributeGroup ref='db:role.attrib'/>
+</xsd:attributeGroup>
+
+<xsd:complexType name='prefaceinfo'>
+  <xsd:complexContent>
+    <xsd:extension base='db:infoContentModel'>
+      <xsd:attributeGroup ref='db:common.attrib'/>
+      <xsd:attributeGroup ref='db:prefaceinfo.role.attrib'/>
+      <!-- %local.chapterinfo.attrib; -->
+    </xsd:extension>
+  </xsd:complexContent>
+</xsd:complexType>
+
+<xsd:attributeGroup name='refentryinfo.role.attrib'>
+  <xsd:attributeGroup ref='db:role.attrib'/>
+</xsd:attributeGroup>
+
+<xsd:complexType name='refentryinfo'>
+  <xsd:complexContent>
+    <xsd:extension base='db:infoContentModel'>
+      <xsd:attributeGroup ref='db:common.attrib'/>
+      <xsd:attributeGroup ref='db:refentryinfo.role.attrib'/>
+      <!-- %local.chapterinfo.attrib; -->
+    </xsd:extension>
+  </xsd:complexContent>
+</xsd:complexType>
+
+<xsd:attributeGroup name='refsect1info.role.attrib'>
+  <xsd:attributeGroup ref='db:role.attrib'/>
+</xsd:attributeGroup>
+
+<xsd:complexType name='refsect1info'>
+  <xsd:complexContent>
+    <xsd:extension base='db:infoContentModel'>
+      <xsd:attributeGroup ref='db:common.attrib'/>
+      <xsd:attributeGroup ref='db:refsect1info.role.attrib'/>
+      <!-- %local.chapterinfo.attrib; -->
+    </xsd:extension>
+  </xsd:complexContent>
+</xsd:complexType>
+
+<xsd:attributeGroup name='refsect2info.role.attrib'>
+  <xsd:attributeGroup ref='db:role.attrib'/>
+</xsd:attributeGroup>
+
+<xsd:complexType name='refsect2info'>
+  <xsd:complexContent>
+    <xsd:extension base='db:infoContentModel'>
+      <xsd:attributeGroup ref='db:common.attrib'/>
+      <xsd:attributeGroup ref='db:refsect2info.role.attrib'/>
+      <!-- %local.chapterinfo.attrib; -->
+    </xsd:extension>
+  </xsd:complexContent>
+</xsd:complexType>
+
+<xsd:attributeGroup name='refsect3info.role.attrib'>
+  <xsd:attributeGroup ref='db:role.attrib'/>
+</xsd:attributeGroup>
+
+<xsd:complexType name='refsect3info'>
+  <xsd:complexContent>
+    <xsd:extension base='db:infoContentModel'>
+      <xsd:attributeGroup ref='db:common.attrib'/>
+      <xsd:attributeGroup ref='db:refsect3info.role.attrib'/>
+      <!-- %local.chapterinfo.attrib; -->
+    </xsd:extension>
+  </xsd:complexContent>
+</xsd:complexType>
+
+<xsd:attributeGroup name='refsynopsisdivinfo.role.attrib'>
+  <xsd:attributeGroup ref='db:role.attrib'/>
+</xsd:attributeGroup>
+
+<xsd:complexType name='refsynopsisdivinfo'>
+  <xsd:complexContent>
+    <xsd:extension base='db:infoContentModel'>
+      <xsd:attributeGroup ref='db:common.attrib'/>
+      <xsd:attributeGroup ref='db:refsynopsisdivinfo.role.attrib'/>
+      <!-- %local.chapterinfo.attrib; -->
+    </xsd:extension>
+  </xsd:complexContent>
+</xsd:complexType>
+
+<xsd:attributeGroup name='referenceinfo.role.attrib'>
+  <xsd:attributeGroup ref='db:role.attrib'/>
+</xsd:attributeGroup>
+
+<xsd:complexType name='referenceinfo'>
+  <xsd:complexContent>
+    <xsd:extension base='db:infoContentModel'>
+      <xsd:attributeGroup ref='db:common.attrib'/>
+      <xsd:attributeGroup ref='db:referenceinfo.role.attrib'/>
+      <!-- %local.chapterinfo.attrib; -->
+    </xsd:extension>
+  </xsd:complexContent>
+</xsd:complexType>
+
+<xsd:attributeGroup name='sect1info.role.attrib'>
+  <xsd:attributeGroup ref='db:role.attrib'/>
+</xsd:attributeGroup>
+
+<xsd:complexType name='sect1info'>
+  <xsd:complexContent>
+    <xsd:extension base='db:infoContentModel'>
+      <xsd:attributeGroup ref='db:common.attrib'/>
+      <xsd:attributeGroup ref='db:sect1info.role.attrib'/>
+      <!-- %local.chapterinfo.attrib; -->
+    </xsd:extension>
+  </xsd:complexContent>
+</xsd:complexType>
+
+<xsd:attributeGroup name='sect2info.role.attrib'>
+  <xsd:attributeGroup ref='db:role.attrib'/>
+</xsd:attributeGroup>
+
+<xsd:complexType name='sect2info'>
+  <xsd:complexContent>
+    <xsd:extension base='db:infoContentModel'>
+      <xsd:attributeGroup ref='db:common.attrib'/>
+      <xsd:attributeGroup ref='db:sect2info.role.attrib'/>
+      <!-- %local.chapterinfo.attrib; -->
+    </xsd:extension>
+  </xsd:complexContent>
+</xsd:complexType>
+
+<xsd:attributeGroup name='sect3info.role.attrib'>
+  <xsd:attributeGroup ref='db:role.attrib'/>
+</xsd:attributeGroup>
+
+<xsd:complexType name='sect3info'>
+  <xsd:complexContent>
+    <xsd:extension base='db:infoContentModel'>
+      <xsd:attributeGroup ref='db:common.attrib'/>
+      <xsd:attributeGroup ref='db:sect3info.role.attrib'/>
+      <!-- %local.chapterinfo.attrib; -->
+    </xsd:extension>
+  </xsd:complexContent>
+</xsd:complexType>
+
+<xsd:attributeGroup name='sect4info.role.attrib'>
+  <xsd:attributeGroup ref='db:role.attrib'/>
+</xsd:attributeGroup>
+
+<xsd:complexType name='sect4info'>
+  <xsd:complexContent>
+    <xsd:extension base='db:infoContentModel'>
+      <xsd:attributeGroup ref='db:common.attrib'/>
+      <xsd:attributeGroup ref='db:sect4info.role.attrib'/>
+      <!-- %local.chapterinfo.attrib; -->
+    </xsd:extension>
+  </xsd:complexContent>
+</xsd:complexType>
+
+<xsd:attributeGroup name='sect5info.role.attrib'>
+  <xsd:attributeGroup ref='db:role.attrib'/>
+</xsd:attributeGroup>
+
+<xsd:complexType name='sect5info'>
+  <xsd:complexContent>
+    <xsd:extension base='db:infoContentModel'>
+      <xsd:attributeGroup ref='db:common.attrib'/>
+      <xsd:attributeGroup ref='db:sect5info.role.attrib'/>
+      <!-- %local.chapterinfo.attrib; -->
+    </xsd:extension>
+  </xsd:complexContent>
+</xsd:complexType>
+
+<!-- ...................................................................... -->
+<!-- Section (parallel to Sect*) ......................................... -->
+
+<xsd:attributeGroup name='section.role.attrib'>
+  <xsd:attributeGroup ref='db:role.attrib'/>
+</xsd:attributeGroup>
+
+<xsd:complexType name='section'>
+  <xsd:sequence>
+    <xsd:element ref='db:sectioninfo' minOccurs='0' maxOccurs='1'/>
+    <xsd:group ref='db:sect.title.content'/>
+    <xsd:group ref='db:nav.class' minOccurs='0' maxOccurs='unbounded'/>
+    <xsd:choice>
+      <xsd:sequence>
+        <xsd:group ref='db:divcomponent.mix' minOccurs='1' maxOccurs='unbounded'/>
+        <xsd:choice>
+          <xsd:group ref='db:refentry.class' minOccurs='0' maxOccurs='unbounded'/>
+          <xsd:element ref='db:section' minOccurs='0' maxOccurs='unbounded'/>
+        </xsd:choice>
+      </xsd:sequence>
+      <xsd:choice>
+        <xsd:group ref='db:refentry.class' minOccurs='1' maxOccurs='unbounded'/>
+        <xsd:element ref='db:section' minOccurs='1' maxOccurs='unbounded'/>
+      </xsd:choice>
+    </xsd:choice>
+    <xsd:group ref='db:nav.class' minOccurs='0' maxOccurs='unbounded'/>
+  </xsd:sequence>
+  <!-- (sectioninfo?,
+                       (%sect.title.content;),
+                       (%nav.class;)*,
+                       (((%divcomponent.mix;)+,
+                         ((%refentry.class;)*|section*))
+                        | (%refentry.class;)+|section+),
+                       (%nav.class;)*) -->
+
+  <xsd:attributeGroup ref='db:label.attrib'/>
+  <xsd:attributeGroup ref='db:status.attrib'/>
+  <xsd:attributeGroup ref='db:common.attrib'/>
+  <xsd:attributeGroup ref='db:section.role.attrib'/>
+  <!-- %local.section.attrib; -->
+</xsd:complexType>
+
+<xsd:attributeGroup name='sectioninfo.role.attrib'>
+  <xsd:attributeGroup ref='db:role.attrib'/>
+</xsd:attributeGroup>
+
+<xsd:complexType name='sectioninfo'>
+  <xsd:complexContent>
+    <xsd:extension base='db:infoContentModel'>
+      <xsd:attributeGroup ref='db:common.attrib'/>
+      <xsd:attributeGroup ref='db:sectioninfo.role.attrib'/>
+      <!-- %local.chapterinfo.attrib; -->
+    </xsd:extension>
+  </xsd:complexContent>
+</xsd:complexType>
+
+<!-- ...................................................................... -->
+<!-- Sect1, Sect2, Sect3, Sect4, Sect5 .................................... -->
+
+<xsd:attributeGroup name='sect1.role.attrib'>
+  <xsd:attributeGroup ref='db:role.attrib'/>
+</xsd:attributeGroup>
+
+<xsd:complexType name='sect1'>
+  <xsd:sequence>
+    <xsd:element ref='db:sect1info' minOccurs='0' maxOccurs='1'/>
+    <xsd:group ref='db:sect.title.content'/>
+    <xsd:group ref='db:nav.class' minOccurs='0' maxOccurs='unbounded'/>
+    <xsd:choice>
+      <xsd:sequence>
+        <xsd:group ref='db:divcomponent.mix' minOccurs='1' maxOccurs='unbounded'/>
+        <xsd:choice>
+          <xsd:group ref='db:refentry.class' minOccurs='0' maxOccurs='unbounded'/>
+          <xsd:element ref='db:sect2' minOccurs='0' maxOccurs='unbounded'/>
+          <xsd:element ref='db:simplesect' minOccurs='0' maxOccurs='unbounded'/>
+        </xsd:choice>
+      </xsd:sequence>
+      <xsd:choice>
+        <xsd:group ref='db:refentry.class' minOccurs='1' maxOccurs='unbounded'/>
+        <xsd:element ref='db:sect2' minOccurs='1' maxOccurs='unbounded'/>
+        <xsd:element ref='db:simplesect' minOccurs='1' maxOccurs='unbounded'/>
+      </xsd:choice>
+    </xsd:choice>
+    <xsd:group ref='db:nav.class' minOccurs='0' maxOccurs='unbounded'/>
+  </xsd:sequence>
+  <!-- (sect1info?, (%sect.title.content;), (%nav.class;)*,
+               (((%divcomponent.mix;)+,
+               ((%refentry.class;)* | sect2* | simplesect*))
+               | (%refentry.class;)+ | sect2+ | simplesect+), (%nav.class;)*)
+   -->
+
+  <!-- Renderas: Indicates the format in which the heading should
+       appear -->
+  <xsd:attribute name='renderas'>
+    <xsd:simpleType>
+      <xsd:restriction base='xsd:string'>
+        <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:label.attrib'/>
+  <xsd:attributeGroup ref='db:status.attrib'/>
+  <xsd:attributeGroup ref='db:common.attrib'/>
+  <xsd:attributeGroup ref='db:sect1.role.attrib'/>
+  <!-- %local.sect1.attrib; -->
+</xsd:complexType>
+
+<xsd:attributeGroup name='sect2.role.attrib'>
+  <xsd:attributeGroup ref='db:role.attrib'/>
+</xsd:attributeGroup>
+
+<xsd:complexType name='sect2'>
+  <xsd:sequence>
+    <xsd:element ref='db:sect2info' minOccurs='0' maxOccurs='1'/>
+    <xsd:group ref='db:sect.title.content'/>
+    <xsd:group ref='db:nav.class' minOccurs='0' maxOccurs='unbounded'/>
+    <xsd:choice>
+      <xsd:sequence>
+        <xsd:group ref='db:divcomponent.mix' minOccurs='1' maxOccurs='unbounded'/>
+        <xsd:choice>
+          <xsd:group ref='db:refentry.class' minOccurs='0' maxOccurs='unbounded'/>
+          <xsd:element ref='db:sect3' minOccurs='0' maxOccurs='unbounded'/>
+          <xsd:element ref='db:simplesect' minOccurs='0' maxOccurs='unbounded'/>
+        </xsd:choice>
+      </xsd:sequence>
+      <xsd:choice>
+        <xsd:group ref='db:refentry.class' minOccurs='1' maxOccurs='unbounded'/>
+        <xsd:element ref='db:sect3' minOccurs='1' maxOccurs='unbounded'/>
+        <xsd:element ref='db:simplesect' minOccurs='1' maxOccurs='unbounded'/>
+      </xsd:choice>
+    </xsd:choice>
+    <xsd:group ref='db:nav.class' minOccurs='0' maxOccurs='unbounded'/>
+  </xsd:sequence>
+  <!-- (sect2info?, (%sect.title.content;), (%nav.class;)*,
+               (((%divcomponent.mix;)+,
+               ((%refentry.class;)* | sect3* | simplesect*))
+               | (%refentry.class;)+ | sect3+ | simplesect+), (%nav.class;)*)
+   -->
+
+  <!-- Renderas: Indicates the format in which the heading should
+       appear -->
+  <xsd:attribute name='renderas'>
+    <xsd:simpleType>
+      <xsd:restriction base='xsd:string'>
+        <xsd:enumeration value='sect1'/>
+        <xsd:enumeration value='sect3'/>
+        <xsd:enumeration value='sect4'/>
+        <xsd:enumeration value='sect5'/>
+      </xsd:restriction>
+    </xsd:simpleType>
+  </xsd:attribute>
+
+  <xsd:attributeGroup ref='db:label.attrib'/>
+  <xsd:attributeGroup ref='db:status.attrib'/>
+  <xsd:attributeGroup ref='db:common.attrib'/>
+  <xsd:attributeGroup ref='db:sect2.role.attrib'/>
+  <!-- %local.sect2.attrib; -->
+</xsd:complexType>
+
+<xsd:attributeGroup name='sect3.role.attrib'>
+  <xsd:attributeGroup ref='db:role.attrib'/>
+</xsd:attributeGroup>
+
+<xsd:complexType name='sect3'>
+  <xsd:sequence>
+    <xsd:element ref='db:sect3info' minOccurs='0' maxOccurs='1'/>
+    <xsd:group ref='db:sect.title.content'/>
+    <xsd:group ref='db:nav.class' minOccurs='0' maxOccurs='unbounded'/>
+    <xsd:choice>
+      <xsd:sequence>
+        <xsd:group ref='db:divcomponent.mix' minOccurs='1' maxOccurs='unbounded'/>
+        <xsd:choice>
+          <xsd:group ref='db:refentry.class' minOccurs='0' maxOccurs='unbounded'/>
+          <xsd:element ref='db:sect4' minOccurs='0' maxOccurs='unbounded'/>
+          <xsd:element ref='db:simplesect' minOccurs='0' maxOccurs='unbounded'/>
+        </xsd:choice>
+      </xsd:sequence>
+      <xsd:choice>
+        <xsd:group ref='db:refentry.class' minOccurs='1' maxOccurs='unbounded'/>
+        <xsd:element ref='db:sect4' minOccurs='1' maxOccurs='unbounded'/>
+        <xsd:element ref='db:simplesect' minOccurs='1' maxOccurs='unbounded'/>
+      </xsd:choice>
+    </xsd:choice>
+    <xsd:group ref='db:nav.class' minOccurs='0' maxOccurs='unbounded'/>
+  </xsd:sequence>
+  <!-- (sect3info?, (%sect.title.content;), (%nav.class;)*,
+               (((%divcomponent.mix;)+,
+               ((%refentry.class;)* | sect4* | simplesect*))
+               | (%refentry.class;)+ | sect4+ | simplesect+), (%nav.class;)*) -->
+
+  <!-- Renderas: Indicates the format in which the heading should
+       appear -->
+  <xsd:attribute name='renderas'>
+    <xsd:simpleType>
+      <xsd:restriction base='xsd:string'>
+        <xsd:enumeration value='sect1'/>
+        <xsd:enumeration value='sect2'/>
+        <xsd:enumeration value='sect4'/>
+        <xsd:enumeration value='sect5'/>
+      </xsd:restriction>
+    </xsd:simpleType>
+  </xsd:attribute>
+
+  <xsd:attributeGroup ref='db:label.attrib'/>
+  <xsd:attributeGroup ref='db:status.attrib'/>
+  <xsd:attributeGroup ref='db:common.attrib'/>
+  <xsd:attributeGroup ref='db:sect3.role.attrib'/>
+  <!-- %local.sect3.attrib; -->
+</xsd:complexType>
+
+<xsd:attributeGroup name='sect4.role.attrib'>
+  <xsd:attributeGroup ref='db:role.attrib'/>
+</xsd:attributeGroup>
+
+<xsd:complexType name='sect4'>
+  <xsd:sequence>
+    <xsd:element ref='db:sect4info' minOccurs='0' maxOccurs='1'/>
+    <xsd:group ref='db:sect.title.content'/>
+    <xsd:group ref='db:nav.class' minOccurs='0' maxOccurs='unbounded'/>
+    <xsd:choice>
+      <xsd:sequence>
+        <xsd:group ref='db:divcomponent.mix' minOccurs='1' maxOccurs='unbounded'/>
+        <xsd:choice>
+          <xsd:group ref='db:refentry.class' minOccurs='0' maxOccurs='unbounded'/>
+          <xsd:element ref='db:sect5' minOccurs='0' maxOccurs='unbounded'/>
+          <xsd:element ref='db:simplesect' minOccurs='0' maxOccurs='unbounded'/>
+        </xsd:choice>
+      </xsd:sequence>
+      <xsd:choice>
+        <xsd:group ref='db:refentry.class' minOccurs='1' maxOccurs='unbounded'/>
+        <xsd:element ref='db:sect5' minOccurs='1' maxOccurs='unbounded'/>
+        <xsd:element ref='db:simplesect' minOccurs='1' maxOccurs='unbounded'/>
+      </xsd:choice>
+    </xsd:choice>
+    <xsd:group ref='db:nav.class' minOccurs='0' maxOccurs='unbounded'/>
+  </xsd:sequence>
+  <!-- (sect4info?, (%sect.title.content;), (%nav.class;)*,
+               (((%divcomponent.mix;)+,
+               ((%refentry.class;)* | sect5* | simplesect*))
+               | (%refentry.class;)+ | sect5+ | simplesect+), (%nav.class;)*) -->
+
+  <!-- Renderas: Indicates the format in which the heading should
+       appear -->
+  <xsd:attribute name='renderas'>
+    <xsd:simpleType>
+      <xsd:restriction base='xsd:string'>
+        <xsd:enumeration value='sect1'/>
+        <xsd:enumeration value='sect2'/>
+        <xsd:enumeration value='sect3'/>
+        <xsd:enumeration value='sect5'/>
+      </xsd:restriction>
+    </xsd:simpleType>
+  </xsd:attribute>
+
+  <xsd:attributeGroup ref='db:label.attrib'/>
+  <xsd:attributeGroup ref='db:status.attrib'/>
+  <xsd:attributeGroup ref='db:common.attrib'/>
+  <xsd:attributeGroup ref='db:sect4.role.attrib'/>
+  <!-- %local.sect4.attrib; -->
+</xsd:complexType>
+
+<xsd:attributeGroup name='sect5.role.attrib'>
+  <xsd:attributeGroup ref='db:role.attrib'/>
+</xsd:attributeGroup>
+
+<xsd:complexType name='sect5'>
+  <xsd:sequence>
+    <xsd:element ref='db:sect5info' minOccurs='0' maxOccurs='1'/>
+    <xsd:group ref='db:sect.title.content'/>
+    <xsd:group ref='db:nav.class' minOccurs='0' maxOccurs='unbounded'/>
+    <xsd:choice>
+      <xsd:sequence>
+        <xsd:group ref='db:divcomponent.mix' minOccurs='1' maxOccurs='unbounded'/>
+        <xsd:choice>
+          <xsd:group ref='db:refentry.class' minOccurs='0' maxOccurs='unbounded'/>
+          <xsd:element ref='db:simplesect' minOccurs='0' maxOccurs='unbounded'/>
+        </xsd:choice>
+      </xsd:sequence>
+      <xsd:choice>
+        <xsd:group ref='db:refentry.class' minOccurs='1' maxOccurs='unbounded'/>
+        <xsd:element ref='db:simplesect' minOccurs='1' maxOccurs='unbounded'/>
+      </xsd:choice>
+    </xsd:choice>
+    <xsd:group ref='db:nav.class' minOccurs='0' maxOccurs='unbounded'/>
+  </xsd:sequence>
+  <!-- (sect5info?, (%sect.title.content;), (%nav.class;)*,
+               (((%divcomponent.mix;)+, ((%refentry.class;)* | simplesect*))
+               | (%refentry.class;)+ | simplesect+), (%nav.class;)*) -->
+
+  <!-- Renderas: Indicates the format in which the heading should
+       appear -->
+  <xsd:attribute name='renderas'>
+    <xsd:simpleType>
+      <xsd:restriction base='xsd:string'>
+        <xsd:enumeration value='sect1'/>
+        <xsd:enumeration value='sect2'/>
+        <xsd:enumeration value='sect3'/>
+        <xsd:enumeration value='sect4'/>
+      </xsd:restriction>
+    </xsd:simpleType>
+  </xsd:attribute>
+
+  <xsd:attributeGroup ref='db:label.attrib'/>
+  <xsd:attributeGroup ref='db:status.attrib'/>
+  <xsd:attributeGroup ref='db:common.attrib'/>
+  <xsd:attributeGroup ref='db:sect5.role.attrib'/>
+  <!-- %local.sect5.attrib; -->
+</xsd:complexType>
+
+<xsd:attributeGroup name='simplesect.role.attrib'>
+  <xsd:attributeGroup ref='db:role.attrib'/>
+</xsd:attributeGroup>
+
+<xsd:complexType name='simplesect'>
+  <xsd:sequence>
+    <xsd:group ref='db:sect.title.content'/>
+    <xsd:group ref='db:divcomponent.mix' minOccurs='1' maxOccurs='unbounded'/>
+  </xsd:sequence>
+  <!-- ((%sect.title.content;), (%divcomponent.mix;)+) -->
+
+  <xsd:attributeGroup ref='db:common.attrib'/>
+  <xsd:attributeGroup ref='db:simplesect.role.attrib'/>
+  <!-- %local.simplesect.attrib; -->
+</xsd:complexType>
+
+<!-- ...................................................................... -->
+<!-- Bibliography ......................................................... -->
+
+<xsd:attributeGroup name='bibliography.role.attrib'>
+  <xsd:attributeGroup ref='db:role.attrib'/>
+</xsd:attributeGroup>
+
+<xsd:complexType name='bibliography'>
+  <xsd:sequence>
+    <xsd:element ref='db:bibliographyinfo' minOccurs='0' maxOccurs='unbounded'/>
+    <xsd:group ref='db:bookcomponent.title.content' minOccurs='0' maxOccurs='1'/>
+    <xsd:group ref='db:component.mix' minOccurs='0' maxOccurs='unbounded'/>
+    <xsd:choice>
+      <xsd:element ref='db:bibliodiv' minOccurs='1' maxOccurs='unbounded'/>
+      <xsd:choice minOccurs='1' maxOccurs='unbounded'>
+        <xsd:element ref='db:biblioentry'/>
+        <xsd:element ref='db:bibliomixed'/>
+      </xsd:choice>
+    </xsd:choice>
+  </xsd:sequence>
+  <!-- (bibliographyinfo?,
+                        (%bookcomponent.title.content;)?,
+                        (%component.mix;)*,
+                        (bibliodiv+ | (biblioentry|bibliomixed)+)) -->
+
+  <xsd:attributeGroup ref='db:status.attrib'/>
+  <xsd:attributeGroup ref='db:common.attrib'/>
+  <xsd:attributeGroup ref='db:bibliography.role.attrib'/>
+  <!-- %local.bibliography.attrib; -->
+</xsd:complexType>
+
+<xsd:attributeGroup name='bibliodiv.role.attrib'>
+  <xsd:attributeGroup ref='db:role.attrib'/>
+</xsd:attributeGroup>
+
+<xsd:complexType name='bibliodiv'>
+  <xsd:sequence>
+    <xsd:group ref='db:sect.title.content' minOccurs='0' maxOccurs='1'/>
+    <xsd:group ref='db:component.mix' minOccurs='0' maxOccurs='unbounded'/>
+    <xsd:choice minOccurs='1' maxOccurs='unbounded'>
+      <xsd:element ref='db:biblioentry'/>
+      <xsd:element ref='db:bibliomixed'/>
+    </xsd:choice>
+  </xsd:sequence>
+  <!-- ((%sect.title.content;)?, (%component.mix;)*,
+               (biblioentry|bibliomixed)+) -->
+
+  <xsd:attributeGroup ref='db:status.attrib'/>
+  <xsd:attributeGroup ref='db:common.attrib'/>
+  <xsd:attributeGroup ref='db:bibliodiv.role.attrib'/>
+  <!-- %local.bibliodiv.attrib; -->
+</xsd:complexType>
+
+<!-- ...................................................................... -->
+<!-- Glossary ............................................................. -->
+
+<xsd:attributeGroup name='glossary.role.attrib'>
+  <xsd:attributeGroup ref='db:role.attrib'/>
+</xsd:attributeGroup>
+
+<xsd:complexType name='glossary'>
+  <xsd:sequence>
+    <xsd:element ref='db:glossaryinfo' minOccurs='0' maxOccurs='unbounded'/>
+    <xsd:group ref='db:bookcomponent.title.content' minOccurs='0' maxOccurs='1'/>
+    <xsd:group ref='db:component.mix' minOccurs='0' maxOccurs='unbounded'/>
+    <xsd:choice>
+      <xsd:element ref='db:glossdiv' minOccurs='1' maxOccurs='unbounded'/>
+      <xsd:element ref='db:glossentry' minOccurs='1' maxOccurs='unbounded'/>
+    </xsd:choice>
+    <xsd:element ref='db:bibliography' minOccurs='0' maxOccurs='1'/>
+  </xsd:sequence>
+  <!-- (glossaryinfo?,
+                    (%bookcomponent.title.content;)?,
+                    (%component.mix;)*,
+                    (glossdiv+ | glossentry+), bibliography?) -->
+
+  <xsd:attributeGroup ref='db:status.attrib'/>
+  <xsd:attributeGroup ref='db:common.attrib'/>
+  <xsd:attributeGroup ref='db:glossary.role.attrib'/>
+  <!-- %local.glossary.attrib; -->
+</xsd:complexType>
+
+<xsd:attributeGroup name='glossdiv.role.attrib'>
+  <xsd:attributeGroup ref='db:role.attrib'/>
+</xsd:attributeGroup>
+
+<xsd:complexType name='glossdiv'>
+  <xsd:sequence>
+    <xsd:group ref='db:sect.title.content' minOccurs='0' maxOccurs='1'/>
+    <xsd:group ref='db:component.mix' minOccurs='0' maxOccurs='unbounded'/>
+    <xsd:element ref='db:glossentry' minOccurs='1' maxOccurs='unbounded'/>
+  </xsd:sequence>
+  <!-- ((%sect.title.content;), (%component.mix;)*,
+               glossentry+) -->
+
+  <xsd:attributeGroup ref='db:status.attrib'/>
+  <xsd:attributeGroup ref='db:common.attrib'/>
+  <xsd:attributeGroup ref='db:glossdiv.role.attrib'/>
+  <!-- %local.glossdiv.attrib; -->
+</xsd:complexType>
+
+<!-- ...................................................................... -->
+<!-- Index and SetIndex ................................................... -->
+
+<xsd:attributeGroup name='indexes.role.attrib'>
+  <xsd:attributeGroup ref='db:role.attrib'/>
+</xsd:attributeGroup>
+
+<xsd:complexType name='index'>
+  <xsd:sequence>
+    <xsd:element ref='db:indexinfo' minOccurs='0' maxOccurs='unbounded'/>
+    <xsd:group ref='db:bookcomponent.title.content' minOccurs='0' maxOccurs='1'/>
+    <xsd:group ref='db:component.mix' minOccurs='0' maxOccurs='unbounded'/>
+    <xsd:choice>
+      <xsd:element ref='db:indexdiv' minOccurs='1' maxOccurs='unbounded'/>
+      <xsd:element ref='db:indexentry' minOccurs='1' maxOccurs='unbounded'/>
+    </xsd:choice>
+  </xsd:sequence>
+  <!-- (indexinfo?,
+                 (%bookcomponent.title.content;)?,
+                 (%component.mix;)*,
+                 (indexdiv* | indexentry*)) -->
+  <xsd:attributeGroup ref='db:common.attrib'/>
+  <xsd:attributeGroup ref='db:indexes.role.attrib'/>
+  <!-- %local.indexes.attrib; -->
+</xsd:complexType>
+
+<xsd:complexType name='setindex'>
+  <xsd:sequence>
+    <xsd:element ref='db:setindexinfo' minOccurs='0' maxOccurs='unbounded'/>
+    <xsd:group ref='db:bookcomponent.title.content' minOccurs='0' maxOccurs='1'/>
+    <xsd:group ref='db:component.mix' minOccurs='0' maxOccurs='unbounded'/>
+    <xsd:choice>
+      <xsd:element ref='db:indexdiv' minOccurs='1' maxOccurs='unbounded'/>
+      <xsd:element ref='db:indexentry' minOccurs='1' maxOccurs='unbounded'/>
+    </xsd:choice>
+  </xsd:sequence>
+  <!-- (setindexinfo?,
+                    (%bookcomponent.title.content;)?,
+                    (%component.mix;)*, (indexdiv* | indexentry*)) -->
+
+  <xsd:attributeGroup ref='db:common.attrib'/>
+  <xsd:attributeGroup ref='db:indexes.role.attrib'/>
+  <!-- %local.indexes.attrib; -->
+</xsd:complexType>
+
+<!-- SegmentedList in this content is useful for marking up permuted
+     indices. -->
+
+<xsd:attributeGroup name='indexdiv.role.attrib'>
+  <xsd:attributeGroup ref='db:role.attrib'/>
+</xsd:attributeGroup>
+
+<xsd:complexType name='indexdiv'>
+  <xsd:sequence>
+    <xsd:group ref='db:sect.title.content' minOccurs='0' maxOccurs='1'/>
+    <xsd:sequence>
+      <xsd:group ref='db:indexdivcomponent.mix' minOccurs='0' maxOccurs='unbounded'/>
+      <xsd:element ref='db:indexentry' minOccurs='0' maxOccurs='unbounded'/>
+      <xsd:element ref='db:segmentedlist'/>
+    </xsd:sequence>
+  </xsd:sequence>
+  <!-- ((%sect.title.content;)?, ((%indexdivcomponent.mix;)*,
+               (indexentry+ | segmentedlist))) -->
+
+  <xsd:attributeGroup ref='db:common.attrib'/>
+  <xsd:attributeGroup ref='db:indexdiv.role.attrib'/>
+  <!-- %local.indexdiv.attrib; -->
+</xsd:complexType>
+
+<!-- Index entries appear in the index, not the text. -->
+
+<xsd:attributeGroup name='indexentry.role.attrib'>
+  <xsd:attributeGroup ref='db:role.attrib'/>
+</xsd:attributeGroup>
+
+<xsd:complexType name='indexentry'>
+  <xsd:sequence>
+    <xsd:element ref='db:primaryie'/>
+    <xsd:choice minOccurs='0' maxOccurs='unbounded'>
+      <xsd:element ref='db:seeie'/>
+      <xsd:element ref='db:seealsoie'/>
+    </xsd:choice>
+    <xsd:sequence minOccurs='0' maxOccurs='unbounded'>
+      <xsd:element ref='db:secondaryie'/>
+      <xsd:choice minOccurs='0' maxOccurs='unbounded'>
+        <xsd:element ref='db:seeie'/>
+        <xsd:element ref='db:seealsoie'/>
+        <xsd:element ref='db:tertiaryie'/>
+      </xsd:choice>
+    </xsd:sequence>
+  </xsd:sequence>
+  <!-- (primaryie, (seeie|seealsoie)*,
+               (secondaryie, (seeie|seealsoie|tertiaryie)*)*) -->
+
+  <xsd:attributeGroup ref='db:common.attrib'/>
+  <xsd:attributeGroup ref='db:indexentry.role.attrib'/>
+  <!-- %local.indexentry.attrib; -->
+</xsd:complexType>
+
+<xsd:attributeGroup name='primsecterie.role.attrib'>
+  <xsd:attributeGroup ref='db:role.attrib'/>
+</xsd:attributeGroup>
+
+<xsd:complexType name='primaryie' mixed='true'>
+  <xsd:choice minOccurs='0' maxOccurs='unbounded'>
+    <xsd:group ref='db:ndxterm.char.mix'/>
+  </xsd:choice>
+  <!-- (%ndxterm.char.mix;)* -->
+
+  <!-- to IndexTerms that these entries represent -->
+  <!-- FIXME: constrain -->
+
+  <xsd:attributeGroup ref='db:linkends.attrib'/>
+  <xsd:attributeGroup ref='db:common.attrib'/>
+  <xsd:attributeGroup ref='db:primsecterie.role.attrib'/>
+  <!-- %local.primsecterie.attrib; -->
+</xsd:complexType>
+
+<xsd:complexType name='secondaryie' mixed='true'>
+  <xsd:choice minOccurs='0' maxOccurs='unbounded'>
+    <xsd:group ref='db:ndxterm.char.mix'/>
+  </xsd:choice>
+  <!-- (%ndxterm.char.mix;)* -->
+
+  <!-- to IndexTerms that these entries represent -->
+  <!-- FIXME: constrain -->
+
+  <xsd:attributeGroup ref='db:linkends.attrib'/>
+  <xsd:attributeGroup ref='db:common.attrib'/>
+  <xsd:attributeGroup ref='db:primsecterie.role.attrib'/>
+  <!-- %local.primsecterie.attrib; -->
+</xsd:complexType>
+
+<xsd:complexType name='tertiaryie' mixed='true'>
+  <xsd:choice minOccurs='0' maxOccurs='unbounded'>
+    <xsd:group ref='db:ndxterm.char.mix'/>
+  </xsd:choice>
+  <!-- (%ndxterm.char.mix;)* -->
+
+  <!-- to IndexTerms that these entries represent -->
+  <!-- FIXME: constrain -->
+
+  <xsd:attributeGroup ref='db:linkends.attrib'/>
+  <xsd:attributeGroup ref='db:common.attrib'/>
+  <xsd:attributeGroup ref='db:primsecterie.role.attrib'/>
+  <!-- %local.primsecterie.attrib; -->
+</xsd:complexType>
+
+<xsd:attributeGroup name='seeie.role.attrib'>
+  <xsd:attributeGroup ref='db:role.attrib'/>
+</xsd:attributeGroup>
+
+<xsd:complexType name='seeie' mixed='true'>
+  <xsd:choice minOccurs='0' maxOccurs='unbounded'>
+    <xsd:group ref='db:ndxterm.char.mix'/>
+  </xsd:choice>
+  <!-- (%ndxterm.char.mix;)* -->
+
+  <!-- to IndexEntry to look up -->
+  <!-- FIXME: constrain -->
+
+  <xsd:attributeGroup ref='db:linkend.attrib'/>
+  <xsd:attributeGroup ref='db:common.attrib'/>
+  <xsd:attributeGroup ref='db:seeie.role.attrib'/>
+  <!-- %local.seeie.attrib; -->
+</xsd:complexType>
+
+<xsd:attributeGroup name='seealsoie.role.attrib'>
+  <xsd:attributeGroup ref='db:role.attrib'/>
+</xsd:attributeGroup>
+
+<xsd:complexType name='seealsoie'>
+  <xsd:choice minOccurs='0' maxOccurs='unbounded'>
+    <xsd:group ref='db:ndxterm.char.mix'/>
+  </xsd:choice>
+  <!-- (%ndxterm.char.mix;)* -->
+
+  <!-- to related IndexEntries -->
+  <!-- FIXME: constrain -->
+
+  <xsd:attributeGroup ref='db:linkends.attrib'/>
+  <xsd:attributeGroup ref='db:common.attrib'/>
+  <xsd:attributeGroup ref='db:seealsoie.role.attrib'/>
+  <!-- %local.seealsoie.attrib; -->
+</xsd:complexType>
+
+<!-- ...................................................................... -->
+<!-- RefEntry ............................................................. -->
+
+<xsd:attributeGroup name='refentry.role.attrib'>
+  <xsd:attributeGroup ref='db:role.attrib'/>
+</xsd:attributeGroup>
+
+<xsd:complexType name='refentry'>
+  <xsd:sequence>
+    <xsd:group ref='db:ndxterm.class' minOccurs='0' maxOccurs='unbounded'/>
+    <xsd:element ref='db:refentryinfo' minOccurs='0' maxOccurs='1'/>
+    <xsd:element ref='db:refmeta' minOccurs='0' maxOccurs='1'/>
+    <xsd:choice minOccurs='0' maxOccurs='unbounded'>
+      <xsd:element ref='db:remark'/>
+      <xsd:group ref='db:link.char.class'/>
+    </xsd:choice>
+    <xsd:element ref='db:refnamediv'/>
+    <xsd:element ref='db:refsynopsisdiv' minOccurs='0' maxOccurs='1'/>
+    <xsd:element ref='db:refsect1' minOccurs='1' maxOccurs='unbounded'/>
+  </xsd:sequence>
+  <!-- ((%ndxterm.class;)*,
+                    refentryinfo?, refmeta?, (remark|%link.char.class;)*,
+                    refnamediv, refsynopsisdiv?, refsect1+) -->
+
+  <xsd:attributeGroup ref='db:status.attrib'/>
+  <xsd:attributeGroup ref='db:common.attrib'/>
+  <xsd:attributeGroup ref='db:refentry.role.attrib'/>
+  <!-- %local.refentry.attrib; -->
+</xsd:complexType>
+
+<xsd:attributeGroup name='refmeta.role.attrib'>
+  <xsd:attributeGroup ref='db:role.attrib'/>
+</xsd:attributeGroup>
+
+<xsd:complexType name='refmeta'>
+  <xsd:sequence>
+    <xsd:group ref='db:ndxterm.class' minOccurs='0' maxOccurs='unbounded'/>
+    <xsd:element ref='db:refentrytitle'/>
+    <xsd:element ref='db:manvolnum' minOccurs='0' maxOccurs='1'/>
+    <xsd:element ref='db:refmiscinfo' minOccurs='0' maxOccurs='unbounded'/>
+    <xsd:group ref='db:ndxterm.class' minOccurs='0' maxOccurs='unbounded'/>
+  </xsd:sequence>
+  <!-- ((%ndxterm.class;)*,
+                   refentrytitle, manvolnum?, refmiscinfo*,
+                   (%ndxterm.class;)*) -->
+
+  <xsd:attributeGroup ref='db:common.attrib'/>
+  <xsd:attributeGroup ref='db:refmeta.role.attrib'/>
+  <!-- %local.refmeta.attrib; -->
+</xsd:complexType>
+
+<xsd:attributeGroup name='refmiscinfo.role.attrib'>
+  <xsd:attributeGroup ref='db:role.attrib'/>
+</xsd:attributeGroup>
+
+<xsd:complexType name='refmiscinfo' mixed='true'>
+  <xsd:sequence minOccurs='0' maxOccurs='unbounded'>
+    <xsd:group ref='db:docinfo.char.mix'/>
+  </xsd:sequence>
+  <!-- (%docinfo.char.mix;)* -->
+
+  <!-- Class: Freely assignable parameter; no default -->
+  <xsd:attribute name='class' type='xsd:string'/>
+
+  <xsd:attributeGroup ref='db:common.attrib'/>
+  <xsd:attributeGroup ref='db:refmiscinfo.role.attrib'/>
+  <!-- %local.refmiscinfo.attrib; -->
+</xsd:complexType>
+
+<xsd:attributeGroup name='refnamediv.role.attrib'>
+  <xsd:attributeGroup ref='db:role.attrib'/>
+</xsd:attributeGroup>
+
+<xsd:complexType name='refnamediv'>
+  <xsd:sequence>
+    <xsd:element ref='db:refdescriptor' minOccurs='0' maxOccurs='1'/>
+    <xsd:element ref='db:refname' minOccurs='1' maxOccurs='unbounded'/>
+    <xsd:element ref='db:refpurpose'/>
+    <xsd:choice minOccurs='0' maxOccurs='unbounded'>
+      <xsd:element ref='db:remark'/>
+      <xsd:group ref='db:link.char.class'/>
+    </xsd:choice>
+  </xsd:sequence>
+  <!-- (refdescriptor?, refname+, refpurpose, refclass*,
+               (remark|%link.char.class;)*) -->
+
+  <xsd:attributeGroup ref='db:common.attrib'/>
+  <xsd:attributeGroup ref='db:refnamediv.role.attrib'/>
+  <!-- %local.refnamediv.attrib; -->
+</xsd:complexType>
+
+<xsd:attributeGroup name='refdescriptor.role.attrib'>
+  <xsd:attributeGroup ref='db:role.attrib'/>
+</xsd:attributeGroup>
+
+<xsd:complexType name='refdescriptor' mixed='true'>
+  <xsd:sequence minOccurs='0' maxOccurs='unbounded'>
+    <xsd:group ref='db:refname.char.mix'/>
+  </xsd:sequence>
+  <!-- (%refname.char.mix;)* -->
+
+  <xsd:attributeGroup ref='db:common.attrib'/>
+  <xsd:attributeGroup ref='db:refdescriptor.role.attrib'/>
+  <!-- %local.refdescriptor.attrib; -->
+</xsd:complexType>
+
+<xsd:attributeGroup name='refname.role.attrib'>
+  <xsd:attributeGroup ref='db:role.attrib'/>
+</xsd:attributeGroup>
+
+<xsd:complexType name='refname' mixed='true'>
+  <xsd:sequence minOccurs='0' maxOccurs='unbounded'>
+    <xsd:group ref='db:refname.char.mix'/>
+  </xsd:sequence>
+  <!-- (%refname.char.mix;)* -->
+
+  <xsd:attributeGroup ref='db:common.attrib'/>
+  <xsd:attributeGroup ref='db:refname.role.attrib'/>
+  <!-- %local.refname.attrib; -->
+</xsd:complexType>
+
+<xsd:attributeGroup name='refpurpose.role.attrib'>
+  <xsd:attributeGroup ref='db:role.attrib'/>
+</xsd:attributeGroup>
+
+<xsd:complexType name='refpurpose' mixed='true'>
+  <xsd:sequence minOccurs='0' maxOccurs='unbounded'>
+    <xsd:group ref='db:refinline.char.mix'/>
+  </xsd:sequence>
+  <!-- (%refinline.char.mix;)* -->
+
+  <xsd:attributeGroup ref='db:common.attrib'/>
+  <xsd:attributeGroup ref='db:refpurpose.role.attrib'/>
+  <!-- %local.refpurpose.attrib; -->
+</xsd:complexType>
+
+<xsd:attributeGroup name='refclass.role.attrib'>
+  <xsd:attributeGroup ref='db:role.attrib'/>
+</xsd:attributeGroup>
+
+<xsd:complexType name='refclass' mixed='true'>
+  <xsd:sequence minOccurs='0' maxOccurs='unbounded'>
+    <xsd:group ref='db:refclass.char.mix'/>
+  </xsd:sequence>
+  <!-- (%refclass.char.mix;)* -->
+
+  <xsd:attributeGroup ref='db:common.attrib'/>
+  <xsd:attributeGroup ref='db:refclass.role.attrib'/>
+  <!-- %local.refclass.attrib; -->
+</xsd:complexType>
+
+<xsd:attributeGroup name='refsynopsisdiv.role.attrib'>
+  <xsd:attributeGroup ref='db:role.attrib'/>
+</xsd:attributeGroup>
+
+<xsd:complexType name='refsynopsisdiv'>
+  <xsd:sequence>
+    <xsd:element ref='db:refsynopsisdivinfo' minOccurs='0' maxOccurs='1'/>
+    <xsd:group ref='db:refsect.title.content' minOccurs='0' maxOccurs='1'/>
+    <xsd:choice>
+      <xsd:sequence>
+        <xsd:group ref='db:refcomponent.mix' minOccurs='1' maxOccurs='unbounded'/>
+        <xsd:element ref='db:refsect2' minOccurs='0' maxOccurs='unbounded'/>
+      </xsd:sequence>
+      <xsd:element ref='db:refsect2' minOccurs='1' maxOccurs='unbounded'/>
+    </xsd:choice>
+  </xsd:sequence>
+  <!-- (refsynopsisdivinfo?, (%refsect.title.content;)?,
+               (((%refcomponent.mix;)+, refsect2*) | (refsect2+))) -->
+
+  <xsd:attributeGroup ref='db:common.attrib'/>
+  <xsd:attributeGroup ref='db:refsynopsisdiv.role.attrib'/>
+  <!-- %local.refsynopsisdiv.attrib; -->
+</xsd:complexType>
+
+<xsd:attributeGroup name='refsect1.role.attrib'>
+  <xsd:attributeGroup ref='db:role.attrib'/>
+</xsd:attributeGroup>
+
+<xsd:complexType name='refsect1'>
+  <xsd:sequence>
+    <xsd:element ref='db:refsect1info' minOccurs='0' maxOccurs='1'/>
+    <xsd:group ref='db:refsect.title.content'/>
+    <xsd:choice>
+      <xsd:sequence>
+        <xsd:group ref='db:refcomponent.mix' minOccurs='1' maxOccurs='unbounded'/>
+        <xsd:element ref='db:refsect2' minOccurs='0' maxOccurs='unbounded'/>
+      </xsd:sequence>
+      <xsd:element ref='db:refsect2' minOccurs='1' maxOccurs='unbounded'/>
+    </xsd:choice>
+  </xsd:sequence>
+  <!-- (refsect1info?, (%refsect.title.content;),
+               (((%refcomponent.mix;)+, refsect2*) | refsect2+)) -->
+
+  <xsd:attributeGroup ref='db:status.attrib'/>
+  <xsd:attributeGroup ref='db:common.attrib'/>
+  <xsd:attributeGroup ref='db:refsect1.role.attrib'/>
+  <!-- %local.refsect1.attrib; -->
+</xsd:complexType>
+
+<xsd:attributeGroup name='refsect2.role.attrib'>
+  <xsd:attributeGroup ref='db:role.attrib'/>
+</xsd:attributeGroup>
+
+<xsd:complexType name='refsect2'>
+  <xsd:sequence>
+    <xsd:element ref='db:refsect2info' minOccurs='0' maxOccurs='1'/>
+    <xsd:group ref='db:refsect.title.content'/>
+    <xsd:choice>
+      <xsd:sequence>
+        <xsd:group ref='db:refcomponent.mix' minOccurs='1' maxOccurs='unbounded'/>
+        <xsd:element ref='db:refsect3' minOccurs='0' maxOccurs='unbounded'/>
+      </xsd:sequence>
+      <xsd:element ref='db:refsect3' minOccurs='1' maxOccurs='unbounded'/>
+    </xsd:choice>
+  </xsd:sequence>
+  <!-- (refsect2info?, (%refsect.title.content;),
+       (((%refcomponent.mix;)+, refsect3*) | refsect3+)) -->
+
+  <xsd:attributeGroup ref='db:status.attrib'/>
+  <xsd:attributeGroup ref='db:common.attrib'/>
+  <xsd:attributeGroup ref='db:refsect2.role.attrib'/>
+  <!-- %local.refsect2.attrib; -->
+</xsd:complexType>
+
+<xsd:attributeGroup name='refsect3.role.attrib'>
+  <xsd:attributeGroup ref='db:role.attrib'/>
+</xsd:attributeGroup>
+
+<xsd:complexType name='refsect3'>
+  <xsd:sequence>
+    <xsd:element ref='db:refsect3info' minOccurs='0' maxOccurs='1'/>
+    <xsd:group ref='db:refsect.title.content'/>
+    <xsd:group ref='db:refcomponent.mix' minOccurs='1' maxOccurs='unbounded'/>
+  </xsd:sequence>
+  <!-- (refsect3info?, (%refsect.title.content;),
+       (%refcomponent.mix;)+) -->
+
+  <xsd:attributeGroup ref='db:status.attrib'/>
+  <xsd:attributeGroup ref='db:common.attrib'/>
+  <xsd:attributeGroup ref='db:refsect3.role.attrib'/>
+  <!-- %local.refsect3.attrib; -->
+</xsd:complexType>
+
+<!-- ...................................................................... -->
+<!-- Article .............................................................. -->
+
+<!-- An Article is a chapter-level, stand-alone document that is often,
+     but need not be, collected into a Book. -->
+
+<xsd:attributeGroup name='article.role.attrib'>
+  <xsd:attributeGroup ref='db:role.attrib'/>
+</xsd:attributeGroup>
+
+<xsd:complexType name='article'>
+  <xsd:sequence>
+    <xsd:group ref='db:div.title.content' minOccurs='0' maxOccurs='1'/>
+    <xsd:element ref='db:articleinfo' minOccurs='0' maxOccurs='1'/>
+    <xsd:element ref='db:tocchap' minOccurs='0' maxOccurs='1'/>
+    <xsd:element ref='db:lot' minOccurs='0' maxOccurs='unbounded'/>
+    <xsd:group ref='db:bookcomponent.content'/>
+    <xsd:choice minOccurs='0' maxOccurs='unbounded'>
+      <xsd:group ref='db:nav.class'/>
+      <xsd:group ref='db:appendix.class'/>
+      <xsd:element ref='db:ackno'/>
+    </xsd:choice>
+  </xsd:sequence>
+  <!-- ((%div.title.content;)?, articleinfo?, tocchap?, lot*,
+                       (%bookcomponent.content;),
+                       ((%nav.class;) | (%appendix.class;) | ackno)*) -->
+
+  <!-- Class: Indicates the type of a particular article;
+       all articles have the same structure and general purpose.
+       No default. -->
+  <xsd:attribute name='class'>
+    <xsd:simpleType>
+      <xsd:restriction base='xsd:string'>
+        <xsd:enumeration value='journalarticle'/>
+        <xsd:enumeration value='productsheet'/>
+        <xsd:enumeration value='whitepaper'/>
+        <xsd:enumeration value='techreport'/>
+        <xsd:enumeration value='specification'/>
+        <xsd:enumeration value='faq'/>
+      </xsd:restriction>
+    </xsd:simpleType>
+  </xsd:attribute>
+
+  <!-- ParentBook: ID of the enclosing Book -->
+  <xsd:attribute name='parentbook' type='xsd:IDREF'/>
+
+  <xsd:attributeGroup ref='db:status.attrib'/>
+  <xsd:attributeGroup ref='db:common.attrib'/>
+  <xsd:attributeGroup ref='db:article.role.attrib'/>
+  <!-- %local.article.attrib; -->
+</xsd:complexType>
+
+<xsd:element name='appendix' type='db:appendix'/>
+<xsd:element name='appendixinfo' type='db:appendixinfo'/>
+<xsd:element name='article' type='db:article'/>
+<xsd:element name='bibliodiv' type='db:bibliodiv'/>
+<xsd:element name='bibliography' type='db:bibliography'/>
+<xsd:element name='bibliographyinfo' type='db:bibliographyinfo'/>
+<xsd:element name='book' type='db:book'/>
+<xsd:element name='bookinfo' type='db:bookinfo'/>
+<xsd:element name='chapter' type='db:chapter'/>
+<xsd:element name='chapterinfo' type='db:chapterinfo'/>
+<xsd:element name='colophon' type='db:colophon'/>
+<xsd:element name='dedication' type='db:dedication'/>
+<xsd:element name='glossary' type='db:glossary'/>
+<xsd:element name='glossaryinfo' type='db:glossaryinfo'/>
+<xsd:element name='glossdiv' type='db:glossdiv'/>
+<xsd:element name='index' type='db:index'/>
+<xsd:element name='indexdiv' type='db:indexdiv'/>
+<xsd:element name='indexentry' type='db:indexentry'/>
+<xsd:element name='indexinfo' type='db:indexinfo'/>
+<xsd:element name='lot' type='db:lot'/>
+<xsd:element name='lotentry' type='db:lotentry'/>
+<xsd:element name='part' type='db:part'/>
+<xsd:element name='partinfo' type='db:partinfo'/>
+<xsd:element name='partintro' type='db:partintro'/>
+<xsd:element name='preface' type='db:preface'/>
+<xsd:element name='prefaceinfo' type='db:prefaceinfo'/>
+<xsd:element name='primaryie' type='db:primaryie'/>
+<xsd:element name='refclass' type='db:refclass'/>
+<xsd:element name='refdescriptor' type='db:refdescriptor'/>
+<xsd:element name='refentry' type='db:refentry'/>
+<xsd:element name='refentryinfo' type='db:refentryinfo'/>
+<xsd:element name='reference' type='db:reference'/>
+<xsd:element name='referenceinfo' type='db:referenceinfo'/>
+<xsd:element name='refmeta' type='db:refmeta'/>
+<xsd:element name='refmiscinfo' type='db:refmiscinfo'/>
+<xsd:element name='refname' type='db:refname'/>
+<xsd:element name='refnamediv' type='db:refnamediv'/>
+<xsd:element name='refpurpose' type='db:refpurpose'/>
+<xsd:element name='refsect1' type='db:refsect1'/>
+<xsd:element name='refsect1info' type='db:refsect1info'/>
+<xsd:element name='refsect2' type='db:refsect2'/>
+<xsd:element name='refsect2info' type='db:refsect2info'/>
+<xsd:element name='refsect3' type='db:refsect3'/>
+<xsd:element name='refsect3info' type='db:refsect3info'/>
+<xsd:element name='refsynopsisdiv' type='db:refsynopsisdiv'/>
+<xsd:element name='refsynopsisdivinfo' type='db:refsynopsisdivinfo'/>
+<xsd:element name='secondaryie' type='db:secondaryie'/>
+<xsd:element name='sect1' type='db:sect1'/>
+<xsd:element name='sect1info' type='db:sect1info'/>
+<xsd:element name='sect2' type='db:sect2'/>
+<xsd:element name='sect2info' type='db:sect2info'/>
+<xsd:element name='sect3' type='db:sect3'/>
+<xsd:element name='sect3info' type='db:sect3info'/>
+<xsd:element name='sect4' type='db:sect4'/>
+<xsd:element name='sect4info' type='db:sect4info'/>
+<xsd:element name='sect5' type='db:sect5'/>
+<xsd:element name='sect5info' type='db:sect5info'/>
+<xsd:element name='section' type='db:section'/>
+<xsd:element name='sectioninfo' type='db:sectioninfo'/>
+<xsd:element name='seealsoie' type='db:seealsoie'/>
+<xsd:element name='seeie' type='db:seeie'/>
+<xsd:element name='set' type='db:set'/>
+<xsd:element name='setindex' type='db:setindex'/>
+<xsd:element name='setindexinfo' type='db:setindexinfo'/>
+<xsd:element name='setinfo' type='db:setinfo'/>
+<xsd:element name='simplesect' type='db:simplesect'/>
+<xsd:element name='tertiaryie' type='db:tertiaryie'/>
+<xsd:element name='toc' type='db:toc'/>
+<xsd:element name='tocback' type='db:tocback'/>
+<xsd:element name='tocchap' type='db:tocchap'/>
+<xsd:element name='tocentry' type='db:tocentry'/>
+<xsd:element name='tocfront' type='db:tocfront'/>
+<xsd:element name='toclevel1' type='db:toclevel1'/>
+<xsd:element name='toclevel2' type='db:toclevel2'/>
+<xsd:element name='toclevel3' type='db:toclevel3'/>
+<xsd:element name='toclevel4' type='db:toclevel4'/>
+<xsd:element name='toclevel5' type='db:toclevel5'/>
+<xsd:element name='tocpart' type='db:tocpart'/>
+
+</xsd:schema>
diff --git a/schema/xmlschema/dbnotn.xsd b/schema/xmlschema/dbnotn.xsd
new file mode 100644 (file)
index 0000000..a0ab9bf
--- /dev/null
@@ -0,0 +1,118 @@
+<!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'
+  elementFormDefault='qualified'>
+
+<!-- ...................................................................... -->
+<!-- DocBook XML Schema V4.1.2.3........................................... -->
+<!-- ...................................................................... -->
+<!-- Copyright 2000, Norman Walsh, Sun Microsystems.  Schema
+     derived from DocBook DTD Copyright 1992-2000 HaL Computer....  -->
+
+<!-- FIXME: why is public required in XML Schema!? -->
+
+<xsd:notation name='BMP'
+          public="+//ISBN 0-7923-9432-1::Graphic Notation//NOTATION Microsoft Windows bitmap//EN"/>
+
+<xsd:notation name='CGM-CHAR'
+          public="ISO 8632/2//NOTATION Character encoding//EN"/>
+
+<xsd:notation name='CGM-BINARY'
+          public="ISO 8632/3//NOTATION Binary encoding//EN"/>
+
+<xsd:notation name='CGM-CLEAR'
+          public="ISO 8632/4//NOTATION Clear text encoding//EN"/>
+
+<xsd:notation name='DITROFF'
+          public="DITROFF"
+          system="DITROFF"/>
+
+<xsd:notation name='DVI'
+          public="DVI"
+          system="DVI"/>
+
+<xsd:notation name='EPS'
+          public="+//ISBN 0-201-18127-4::Adobe//NOTATION PostScript Language Ref. Manual//EN"/>
+
+<xsd:notation name='EQN'
+          public="EQN"
+          system="EQN"/>
+
+<xsd:notation name='FAX'
+          public="-//USA-DOD//NOTATION CCITT Group 4 Facsimile Type 1 Untiled Raster//EN"/>
+
+<xsd:notation name='GIF'
+          public="GIF"
+          system="GIF"/>
+
+<xsd:notation name='GIF87a'
+          public="-//CompuServe//NOTATION Graphics Interchange Format 87a//EN"/>
+
+<xsd:notation name='GIF89a'
+          public="-//CompuServe//NOTATION Graphics Interchange Format 89a//EN"/>
+
+<xsd:notation name='JPG'
+          public="JPG"
+          system="JPG"/>
+
+<xsd:notation name='JPEG'
+          public="JPG"
+          system="JPG"/>
+
+<xsd:notation name='IGES'
+          public="-//USA-DOD//NOTATION (ASME/ANSI Y14.26M-1987) Initial Graphics Exchange Specification//EN"/>
+
+<xsd:notation name='PCX'
+          public="+//ISBN 0-7923-9432-1::Graphic Notation//NOTATION ZSoft PCX bitmap//EN"/>
+
+<xsd:notation name='PIC'
+          public="PIC"
+          system="PIC"/>
+
+<xsd:notation name='PNG'
+          public="PNG"
+          system="http://www.w3.org/TR/REC-png"/>
+
+<xsd:notation name='PS'
+          public="PS"
+          system="PS"/>
+
+<xsd:notation name='SGML'
+          public="ISO 8879:1986//NOTATION Standard Generalized Markup Language//EN"/>
+
+<xsd:notation name='TBL'
+          public="TBL"
+          system="TBL"/>
+
+<xsd:notation name='TEX'
+          public="+//ISBN 0-201-13448-9::Knuth//NOTATION The TeXbook//EN"/>
+
+<xsd:notation name='TIFF'
+          public="TIFF"
+          system="TIFF"/>
+
+<xsd:notation name='WMF'
+          public="+//ISBN 0-7923-9432-1::Graphic Notation//NOTATION Microsoft Windows Metafile//EN"/>
+
+<xsd:notation name='WPG'
+          public="WPG"
+          system="WPG"/> <!--WordPerfect Graphic format-->
+
+<xsd:notation name='linespecific'
+          public="linespecific"
+          system='http://www.oasis-open.org/docbook/notation/linespecific'/>
+
+</xsd:schema>
diff --git a/schema/xmlschema/dbpool.xsd b/schema/xmlschema/dbpool.xsd
new file mode 100644 (file)
index 0000000..9dee7ae
--- /dev/null
@@ -0,0 +1,7129 @@
+<!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>
diff --git a/schema/xmlschema/dbtables.xsd b/schema/xmlschema/dbtables.xsd
new file mode 100644 (file)
index 0000000..3683e3f
--- /dev/null
@@ -0,0 +1,57 @@
+<!DOCTYPE xsd:schema SYSTEM
+  "http://www.w3.org/2000/10/XMLSchema.dtd" [
+
+<!ENTITY % p 'xsd:'>
+<!ENTITY % s ':xsd'>
+<!ENTITY % schemaAttrs "
+       xmlns:xsd       CDATA   #IMPLIED
+       xmlns:tbl       CDATA   #IMPLIED
+       xmlns:db        CDATA   #IMPLIED
+">
+]>
+<!-- Copyright 2000, Norman Walsh, Sun Microsystems.  Schema
+     derived from DocBook DTD Copyright 1992-2000 HaL Computer....  -->
+
+<xsd:schema xmlns:xsd='http://www.w3.org/2000/10/XMLSchema'
+  xmlns:tbl='http://www.oasis-open.org/tables/exchange/1.0'
+  targetNamespace='http://www.oasis-open.org/tables/exchange/1.0'
+  xmlns:db='http://www.oasis-open.org/docbook/xmlschema/4.1.2'
+  elementFormDefault='qualified'>
+
+  <xsd:import namespace='http://www.oasis-open.org/docbook/xmlschema/4.1.2'/>
+
+<!-- ...................................................................... -->
+<!-- DocBook XML Schema V4.1.2.3........................................... -->
+<!-- ...................................................................... -->
+<!-- Copyright 2000, Norman Walsh, Sun Microsystems.  Schema
+     derived from DocBook DTD Copyright 1992-2000 HaL Computer....  -->
+
+<!-- ...................................................................... -->
+<!-- The Table Model ...................................................... -->
+
+<xsd:redefine schemaLocation='soextblx.xsd'>
+  <!-- declare some extension attributes; these are referenced in -->
+  <!-- soextblx.xsd, but locally defined as empty -->
+  <!-- this doesn't work in xsv ... -->
+  <!--
+  <xsd:attributeGroup name='tbl.entry.att'>
+      <xsd:attribute ref='tbl.entry.att'/>
+    <xsd:attribute name='role' type='xsd:string'/>
+  </xsd:attributeGroup>
+  -->
+
+  <!-- re-declare the entryType type as an extension of the original -->
+  <!-- entryType declared in soextblx.xsd -->
+  <xsd:complexType name='entryType' mixed='true'>
+    <xsd:complexContent>
+      <xsd:extension base='tbl:entryType'>
+        <xsd:choice minOccurs='0' maxOccurs='unbounded'>
+          <xsd:group ref='db:para.char.mix'/>
+          <xsd:group ref='db:tabentry.mix'/>
+        </xsd:choice>
+      </xsd:extension>
+    </xsd:complexContent>
+  </xsd:complexType>
+</xsd:redefine>
+
+</xsd:schema>
diff --git a/schema/xmlschema/docbook.xsd b/schema/xmlschema/docbook.xsd
new file mode 100644 (file)
index 0000000..7613fa5
--- /dev/null
@@ -0,0 +1,35 @@
+<!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
+">
+]>
+<!-- ...................................................................... -->
+<!-- DocBook XML Schema V4.1.2.3........................................... -->
+<!-- ...................................................................... -->
+
+<!-- Copyright 2000 HaL Computer Systems, Inc.,
+     O'Reilly & Associates, Inc., ArborText, Inc., Fujitsu Software
+     Corporation, Sun Microsystems, Inc, and the Organization for the
+     Advancement of Structured Information Standards (OASIS).
+
+     $Id$
+-->
+
+<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:tbl='http://www.oasis-open.org/tables/exchange/1.0'
+            xmlns:xml='http://www.w3.org/XML/1998/namespace'
+            elementFormDefault='qualified'>
+
+<xsd:include schemaLocation="dbnotn.xsd"/>
+<xsd:include schemaLocation="dbpool.xsd"/>
+<xsd:include schemaLocation="dbhier.xsd"/>
+
+</xsd:schema>
diff --git a/schema/xmlschema/soextblx.xsd b/schema/xmlschema/soextblx.xsd
new file mode 100644 (file)
index 0000000..c0d58ec
--- /dev/null
@@ -0,0 +1,226 @@
+<!DOCTYPE xsd:schema SYSTEM
+  "http://www.w3.org/2000/10/XMLSchema.dtd" [
+
+<!ENTITY % p 'xsd:'>
+<!ENTITY % s ':xsd'>
+<!ENTITY % schemaAttrs "
+       xmlns:tbl       CDATA   #IMPLIED
+">
+]>
+<!-- Copyright 2000, Norman Walsh, Sun Microsystems.  Schema
+     derived from DocBook DTD Copyright 1992-2000 HaL Computer....  -->
+
+<xsd:schema xmlns:xsd='http://www.w3.org/2000/10/XMLSchema'
+  targetNamespace='http://www.oasis-open.org/tables/exchange/1.0'
+  xmlns:tbl='http://www.oasis-open.org/tables/exchange/1.0'
+  elementFormDefault='qualified'>
+
+<xsd:simpleType name='yesorno'>
+  <xsd:restriction base='xsd:string'>
+    <xsd:enumeration value='0'/>
+    <xsd:enumeration value='1'/>
+  </xsd:restriction>
+</xsd:simpleType>
+
+<xsd:attributeGroup name='table.att'/>
+<xsd:attributeGroup name='tgroup.att'/>
+<xsd:attributeGroup name='colspec.att'/>
+<xsd:attributeGroup name='thead.att'/>
+<xsd:attributeGroup name='tbody.att'/>
+<xsd:attributeGroup name='row.att'/>
+<xsd:attributeGroup name='entry.att'/>
+
+<xsd:complexType name="tableType">
+  <xsd:attribute name='frame'>
+    <xsd:simpleType>
+      <xsd:restriction base='xsd:string'>
+        <xsd:enumeration value='top'/>
+        <xsd:enumeration value='bottom'/>
+        <xsd:enumeration value='topbot'/>
+        <xsd:enumeration value='all'/>
+        <xsd:enumeration value='sides'/>
+        <xsd:enumeration value='none'/>
+      </xsd:restriction>
+    </xsd:simpleType>
+  </xsd:attribute>
+  <xsd:attribute name='colsep' type='tbl:yesorno'/>
+  <xsd:attribute name='rowsep' type='tbl:yesorno'/>
+  <xsd:attributeGroup ref='tbl:table.att'/>
+</xsd:complexType>
+
+<xsd:complexType name='tgroup'>
+  <xsd:sequence>
+    <xsd:element ref='tbl:colspec' minOccurs='0' maxOccurs='unbounded'/>
+    <xsd:element ref='tbl:thead' minOccurs='0' maxOccurs='1'/>
+    <xsd:element ref='tbl:tbody'/>
+  </xsd:sequence>
+  <xsd:attribute name='cols' type='xsd:integer' use='required'/>
+  <xsd:attribute name='colsep' type='tbl:yesorno'/>
+  <xsd:attribute name='rowsep' type='tbl:yesorno'/>
+  <xsd:attribute name='align'>
+    <xsd:simpleType>
+      <xsd:restriction base='xsd:string'>
+        <xsd:enumeration value='left'/>
+        <xsd:enumeration value='right'/>
+        <xsd:enumeration value='center'/>
+        <xsd:enumeration value='justify'/>
+      </xsd:restriction>
+    </xsd:simpleType>
+  </xsd:attribute>
+  <xsd:attributeGroup ref='tbl:tgroup.att'/>
+</xsd:complexType>
+
+<xsd:complexType name='colspec'>
+  <!-- EMPTY -->
+  <xsd:complexContent>
+    <xsd:restriction base='xsd:anyType'>
+      <xsd:attribute name='colnum' type='xsd:integer'/>
+      <xsd:attribute name='colname' type='xsd:NMTOKEN'/>
+      <xsd:attribute name='colwidth' type='xsd:string'/>
+      <xsd:attribute name='colsep' type='tbl:yesorno'/>
+      <xsd:attribute name='rowsep' type='tbl:yesorno'/>
+      <xsd:attribute name='align'>
+        <xsd:simpleType>
+          <xsd:restriction base='xsd:string'>
+            <xsd:enumeration value='left'/>
+            <xsd:enumeration value='right'/>
+            <xsd:enumeration value='center'/>
+            <xsd:enumeration value='justify'/>
+            <xsd:enumeration value='char'/>
+          </xsd:restriction>
+        </xsd:simpleType>
+      </xsd:attribute>
+      <xsd:attribute name='char' type='xsd:string'/>
+      <xsd:attribute name='charoff' type='xsd:NMTOKEN'/>
+      <xsd:attributeGroup ref='tbl:colspec.att'/>
+    </xsd:restriction>
+  </xsd:complexContent>
+</xsd:complexType>
+
+<xsd:complexType name='thead'>
+  <xsd:choice>
+    <xsd:element ref='tbl:row' minOccurs='1' maxOccurs='unbounded'/>
+  </xsd:choice>
+  <xsd:attribute name='valign'>
+    <xsd:simpleType>
+      <xsd:restriction base='xsd:string'>
+        <xsd:enumeration value='top'/>
+        <xsd:enumeration value='middle'/>
+        <xsd:enumeration value='bottom'/>
+      </xsd:restriction>
+    </xsd:simpleType>
+  </xsd:attribute>
+  <xsd:attributeGroup ref='tbl:thead.att'/>
+</xsd:complexType>
+
+<xsd:complexType name='tbody'>
+  <xsd:choice>
+    <xsd:element ref='tbl:row' minOccurs='1' maxOccurs='unbounded'/>
+  </xsd:choice>
+  <xsd:attribute name='valign'>
+    <xsd:simpleType>
+      <xsd:restriction base='xsd:string'>
+        <xsd:enumeration value='top'/>
+        <xsd:enumeration value='middle'/>
+        <xsd:enumeration value='bottom'/>
+      </xsd:restriction>
+    </xsd:simpleType>
+  </xsd:attribute>
+  <xsd:attributeGroup ref='tbl:tbody.att'/>
+</xsd:complexType>
+
+<xsd:complexType name='row'>
+  <xsd:choice>
+    <xsd:element ref='tbl:entry' minOccurs='1' maxOccurs='unbounded'/>
+  </xsd:choice>
+  <xsd:attribute name='rowsep' type='tbl:yesorno'/>
+  <xsd:attribute name='valign'>
+    <xsd:simpleType>
+      <xsd:restriction base='xsd:string'>
+        <xsd:enumeration value='top'/>
+        <xsd:enumeration value='middle'/>
+        <xsd:enumeration value='bottom'/>
+      </xsd:restriction>
+    </xsd:simpleType>
+  </xsd:attribute>
+  <xsd:attributeGroup ref='tbl:row.att'/>
+</xsd:complexType>
+
+<xsd:complexType name="entryType">
+  <xsd:attribute name='colname' type='xsd:NMTOKEN'/>
+  <xsd:attribute name='namest' type='xsd:NMTOKEN'/>
+  <xsd:attribute name='nameend' type='xsd:NMTOKEN'/>
+  <xsd:attribute name='morerows' type='xsd:integer'/>
+  <xsd:attribute name='colsep' type='tbl:yesorno'/>
+  <xsd:attribute name='rowsep' type='tbl:yesorno'/>
+  <xsd:attribute name='align'>
+    <xsd:simpleType>
+      <xsd:restriction base='xsd:string'>
+        <xsd:enumeration value='left'/>
+        <xsd:enumeration value='right'/>
+        <xsd:enumeration value='center'/>
+        <xsd:enumeration value='justify'/>
+        <xsd:enumeration value='char'/>
+      </xsd:restriction>
+    </xsd:simpleType>
+  </xsd:attribute>
+  <xsd:attribute name='char' type='xsd:string'/>
+  <xsd:attribute name='charoff' type='xsd:NMTOKEN'/>
+  <xsd:attribute name='valign'>
+    <xsd:simpleType>
+      <xsd:restriction base='xsd:string'>
+        <xsd:enumeration value='top'/>
+        <xsd:enumeration value='middle'/>
+        <xsd:enumeration value='bottom'/>
+      </xsd:restriction>
+    </xsd:simpleType>
+  </xsd:attribute>
+  <xsd:attributeGroup ref='tbl:entry.att'/>
+</xsd:complexType>
+
+<!--
+<xsd:complexType name='entry' mixed='true'>
+  <xsd:choice>
+    <xsd:any namespace='##other' minOccurs='0' maxOccurs='unbounded'/>
+  </xsd:choice>
+
+  <xsd:attribute name='colname' type='xsd:NMTOKEN'/>
+  <xsd:attribute name='namest' type='xsd:NMTOKEN'/>
+  <xsd:attribute name='nameend' type='xsd:NMTOKEN'/>
+  <xsd:attribute name='morerows' type='xsd:integer'/>
+  <xsd:attribute name='colsep' type='tbl:yesorno'/>
+  <xsd:attribute name='rowsep' type='tbl:yesorno'/>
+  <xsd:attribute name='align'>
+    <xsd:simpleType>
+      <xsd:restriction base='xsd:string'>
+        <xsd:enumeration value='left'/>
+        <xsd:enumeration value='right'/>
+        <xsd:enumeration value='center'/>
+        <xsd:enumeration value='justify'/>
+        <xsd:enumeration value='char'/>
+      </xsd:restriction>
+    </xsd:simpleType>
+  </xsd:attribute>
+  <xsd:attribute name='char' type='xsd:string'/>
+  <xsd:attribute name='charoff' type='xsd:NMTOKEN'/>
+  <xsd:attribute name='valign'>
+    <xsd:simpleType>
+      <xsd:restriction base='xsd:string'>
+        <xsd:enumeration value='top'/>
+        <xsd:enumeration value='middle'/>
+        <xsd:enumeration value='bottom'/>
+      </xsd:restriction>
+    </xsd:simpleType>
+  </xsd:attribute>
+  <xsd:attributeGroup ref='tbl:entry.att'/>
+</xsd:complexType>
+-->
+
+<xsd:element name='tgroup' type='tbl:tgroup'/>
+<xsd:element name='colspec' type='tbl:colspec'/>
+<xsd:element name='thead' type='tbl:thead'/>
+<xsd:element name='tbody' type='tbl:tbody'/>
+<xsd:element name='row' type='tbl:row'/>
+<xsd:element name='entry' type='tbl:entryType'/>
+
+</xsd:schema>
diff --git a/schema/xmlschema/test.xml b/schema/xmlschema/test.xml
new file mode 100644 (file)
index 0000000..7a98bc0
--- /dev/null
@@ -0,0 +1,1084 @@
+<!DOCTYPE article
+  PUBLIC "-//Norman Walsh//DTD Simplified DocBook XML V4.1.2.4//EN"
+         "http://www.nwalsh.com/docbook/simple/4.1.2.4/sdocbook.dtd" [
+<!ENTITY % local.article.attrib
+"xmlns CDATA #IMPLIED
+xmlns:xsi CDATA #IMPLIED
+xmlns:tbl CDATA #IMPLIED
+xsi:schemaLocation CDATA #IMPLIED
+">
+<!ENTITY conduitzip "xmlconduit11.zip">
+<!ENTITY trade "(TM)">
+]>
+<article xmlns='http://www.oasis-open.org/docbook/xmlschema/4.1.2'
+        xmlns:xsi='http://www.w3.org/2000/10/XMLSchema-instance'
+        xmlns:tbl='http://www.oasis-open.org/tables/exchange/1.0'
+        xsi:schemaLocation='
+            http://www.oasis-open.org/docbook/xmlschema/4.1.2
+             docbook.xsd'>
+
+<!-- This article is included as a test case for the XML Schema -->
+
+<articleinfo>
+<title>XML From Your Palm</title>
+<pubdate>11 Oct 2000</pubdate>
+<releaseinfo role="meta">
+$Id$
+</releaseinfo>
+
+<revhistory>
+<revision>
+<revnumber>1.2</revnumber>
+<date>11 Oct 2000</date>
+<authorinitials>ndw</authorinitials>
+<revremark>Documented significant changes to the conduits.</revremark>
+</revision>
+<revision>
+<revnumber>1.1</revnumber>
+<date>15 Aug 2000</date>
+<authorinitials>ndw</authorinitials>
+<revremark>Fixed broken internal links.</revremark>
+</revision>
+<revision>
+<revnumber>1.0</revnumber>
+<date>15 Aug 2000</date>
+<authorinitials>ndw</authorinitials>
+<revremark>First public release.</revremark>
+</revision>
+<revision>
+<revnumber>0.4</revnumber>
+<date>15 Aug 2000</date>
+<authorinitials>ndw</authorinitials>
+<revremark>Added SyncXmlTD and SyncXmlMB</revremark>
+</revision>
+<revision>
+<revnumber>0.3</revnumber>
+<date>14 Aug 2000</date>
+<authorinitials>ndw</authorinitials>
+<revremark>Added link table</revremark>
+</revision>
+<revision>
+<revnumber>0.2</revnumber>
+<date>14 Aug 2000</date>
+<authorinitials>ndw</authorinitials>
+<revremark>A few revisions; spellcheck</revremark>
+</revision>
+<revision>
+<revnumber>0.1</revnumber>
+<date>08 Aug 2000</date>
+<authorinitials>ndw</authorinitials>
+<revremark>Initial draft</revremark>
+</revision>
+</revhistory>
+
+<author><firstname>Norman</firstname><surname>Walsh</surname>
+<affiliation>
+<jobtitle>Staff Engineer</jobtitle>
+<orgname>Sun Microsystems, XML Technology Center</orgname>
+</affiliation>
+<authorblurb>
+<para>Norman Walsh, a Staff Engineer in Sun's XML Technology Center,
+is chair of the OASIS DocBook Technical Committee and serves on a number
+of W3C Working Groups, including the XML Core, XSL, and XML Schema WGs.</para>
+</authorblurb>
+</author>
+
+<copyright>
+  <year>2000</year>
+  <holder>Sun Microsystems, Inc.</holder>
+</copyright>
+</articleinfo>
+
+<para>This article was updated on 11 Oct 2000 to reflect changes made
+in the version 1.1 conduits. For a quick summary of the changes in version
+1.1, see <xref linkend="app11"/>; for upgrading instructions see
+<xref linkend="upg11"/>.</para>
+
+<para>If you're like me, you rely on your Palm&trade; organizer to
+keep a semblance of order in your life. Without it, I wouldn't get to
+meetings on time, or remember to participate in telephone conference
+calls<footnote><para>Ok, it's definitely a mixed blessing, I see that,
+but... :-)</para></footnote>, or know how to reach my colleagues when
+I'm on the road.</para>
+
+<para>Unfortunately, for all its benefits, I still have some troubles
+with my Palm. Among them, the fact that I can't sync my Palm address
+book with other information management tools that are important to
+me (e.g., my
+<ulink role="linktable" url="http://bbdb.sourceforge.net/">BBDB</ulink><footnote><para>I have since been informed of
+<ulink url="http://home.rochester.rr.com/tsdeweese/SyncBBDB.html">SyncBBDB</ulink>,
+but I'm still working on other XML-based information management tools.</para>
+</footnote>
+in Emacs) or publish the calendar on the web so that I can share
+my calendar with my manager and colleagues.</para>
+
+<para>Now, I'm sure I could have gone out and found solutions for some
+of these problems, for example, one of the web calendar syncing tools,
+but when I hear a problem described that involves open-format information
+exchange and multiple output formats, one answer springs immediately to
+mind: XML.</para>
+
+<para>So, what I wanted was some way to sync my Palm to my desktop
+machine using XML so that I could transform the XML into other formats
+and sync it with other formats.</para>
+
+<section><title>Initial Forays</title>
+
+<para>This was very much a personal project, so the amount of time and
+energy that I had to spend on it was directly influenced by the number
+and priority of other projects that I had going on.</para>
+
+<para>Initially I looked into the possibility of reverse engineering
+the PDB file formats that the Palm Desktop application created when syncing
+my Palm. It didn't take me long to abandon that course. I'm sure it
+could be done, but how tedious!</para>
+
+<para>Using the gcc-based conduit tools, or buying one of the commercial
+conduit toolkits, crossed my mind. But that looked like a pretty steep
+learning curve, too.</para>
+
+<para>Next, I found the
+<ulink role="linktable" url="http://sourceforge.net/projects/pilot-link">pilot-link</ulink>
+package. This package included
+<command>pilot-file</command>, which produced a much more readable dump
+of a Palm database. Armed with this dump, I was able to reverse
+engineer the Datebook format well enough to produce an XML
+version. But that only solved half the problem because I couldn't see
+any way to rebuild the file header information that would be necessary
+to sync the database back into my Palm. Besides, when I looked at the
+<command>pilot-file</command> dump of the Addressbook, I was reminded
+of just how tedious it had been to reverse engineer the
+Datebook.</para>
+
+<para>Looking at the source for <command>pilot-xfer</command>
+convinced me that everything I needed was in there. The next logical
+step was to hack pilot-xfer so that it read/wrote XML instead of
+PDBs.</para>
+
+<para>That was back sometime in January or February. Before I got around
+to hacking on <command>pilot-xfer</command>, I started running Linux
+on my desktop and discovered
+<ulink role="linktable" url="http://www.moshpit.org/pilotmgr/">PilotManager</ulink>.
+<ulink url="http://www.moshpit.org/pilotmgr/">PilotManager</ulink> is
+essentially a Perl/TK interface wrapped around the
+<ulink url="http://sourceforge.net/projects/pilot-link">pilot-link</ulink>
+tools that provides a complete Palm syncing tool for Unix. More importantly,
+it provides an extensible framework for writing conduits of your own.
+</para>
+</section>
+
+<section><title>PilotManager</title>
+
+<para><xref linkend="pmfig"/> shows the PilotManager application after
+a sync operation. As you can see, I made a couple of changes to the
+Addressbook on the desktop (specifically by editing
+<filename>.xmlAddr</filename>) and updated my schedule on the Pilot.
+These changes were synced appropriately.</para>
+
+<figure id="pmfig"><title>The PilotManager Interface</title>
+<mediaobject>
+<imageobject>
+<imagedata fileref="images/pilot-manager.png"/>
+</imageobject>
+</mediaobject>
+</figure>
+
+<para>I should note at this point that the PilotManager application
+runs on Linux, Solaris, and presumably other Unixes, but does not
+run on Windows, as far as I know. The code that underlies PilotManager:
+Perl, Perl/Tk, and pilot-link have all been ported, so it's theoretically
+a simple matter of porting, but I haven't tried it.</para>
+
+</section>
+
+<section><title>PilotManager Conduits</title>
+
+<para>The PilotManager application includes several conduits. I
+modeled the SyncXml
+Conduits off the standard <filename>SyncAB</filename> conduit.</para>
+
+<para>In simplest terms, the PilotManager conduit interface is a set
+of hashes. A sync operation reads information from the Palm and returns
+each record as a hash. Appropriately constructed hashes can be passed
+back to update the Palm.</para>
+
+<para>If the conduit can provide enough information about each record
+(its fields and what fields constitute a match, etc.), as the
+Addressbook and Datebook conduits can, PilotManager takes care of most
+of the bookkeeping for us.</para>
+
+<section id="upg11"><title>Upgrading the Conduits</title>
+
+<para>If you have been using the version 1.0
+SyncXML Conduits, you are <emphasis>strongly
+encouraged</emphasis> to upgrade. In addition to a few new features,
+the version 1.1 conduits contain several bug fixes. Note, in
+particular, that the version 1.0 <filename>SyncXmlTB</filename>
+conduit is fundamentally broken; it does not preserve the due date of
+Todo items across a sync!</para>
+
+<para>Before you upgrade the conduits, make sure that you make a
+complete backup of your Palm using the <filename>Backup</filename>
+conduit or whatever method you normally use for full backups. This
+will allow you to recover in case of catastrophic error.</para>
+
+<para>Perform a sync operation using the version 1.0
+SyncXml Conduits.</para>
+
+<para>Examine the configuration of each conduit and record the
+location of the XML databases. Generally, these will be in
+<filename>~/.xmlAddr</filename>, <filename>~/.xmlDate</filename>,
+etc., but the conduits may have been configured differently.</para>
+
+<para>Download the
+<ulink url="&conduitzip;">SyncXml Conduits 1.1</ulink> package
+and unpack it somewhere.</para>
+
+<para>Install the version 1.1 conduits:</para>
+
+<itemizedlist>
+<listitem><para>Replace the version 1.0
+<filename>SyncXml{AB,DB,MB,TB}.pm</filename> files on your system with
+the version 1.1 files of the same name
+</para></listitem>
+<listitem><para>Install the <emphasis>new file</emphasis>
+<filename>SyncXml.pm</filename> in the same location.
+</para></listitem>
+<listitem><para>Install the new DTDs as well.
+</para></listitem>
+</itemizedlist>
+
+<para>Now <emphasis>delete the XML databases</emphasis>. In order to do this
+successfully, you must delete both the XML files (stored at the locations you
+recorded a moment ago) and the PilotManager binary
+databases. The binary databases are usually
+<filename>~/.pilotmgr/SyncXmlAB/addr.db</filename>,
+<filename>~/.pilotmgr/SyncXmlDB/date.db</filename>,
+<filename>~/.pilotmgr/SyncXmlMB/memo.db</filename>, and
+<filename>~/.pilotmgr/SyncXmlTB/todo.db</filename>. Naturally, if you
+configured PilotManager to use another directory, they will be elsewhere.
+Make sure you delete both the XML files and the binary files before you
+continue.</para>
+
+<para>Do not delete the <filename>SyncXml{AB,DB,MB,TB}</filename>
+directories. As near as I can tell, PilotManager only creates them
+when a new conduit is added.</para>
+
+<para>Now restart PilotManager and re-sync using the
+SyncXML Conduits. Because the local databases do
+not exist, the conduits will copy all of the data off your Palm and
+rebuild the local databases.</para>
+
+<para>The version 1.1 conduits have several new configuration options; you
+may want to examine the configuration of each new conduit.</para>
+
+<section><title>Installing the Conduits</title>
+
+<para>Before you begin, make sure that you make a complete backup of
+your Palm using whatever method you normally use for full
+backups. This will allow you to recover in case of catastrophic
+error.</para>
+
+<para>If you have not already done so, install
+<ulink url="http://www.moshpit.org/pilotmgr/">PilotManager</ulink> and make
+sure that it's working. This will guarantee that you have appropriate
+versions of Perl and other supporting tools in place.</para>
+
+<para>Get the Perl <literal>XML::Parser</literal> and
+<literal>XML::DOM</literal> modules from
+<ulink url="http://cpan.perl.com/">CPAN</ulink> and install them, if you do
+not already have them installed.</para>
+
+<para>Download the
+<ulink role="linktable" url="&conduitzip;">SyncXml Conduits</ulink> package
+and unpack it somewhere.</para>
+
+<para>Install the conduits by placing the
+<filename>SyncXml.pm</filename> and
+<filename>SyncXml{AB,DB,MB,TB}.pm</filename> files
+where PilotManager will find them. Exactly where that is depends on how
+you've installed PilotManager. On my system, that would be in
+<filename>/usr/lib/perl5/PilotMgr</filename> or in
+<filename>~/.pilotmgr</filename>.</para>
+
+<para>Install the DTDs by placing them where the SyncXml conduits will
+find them. I recommend that you install them in
+<filename>lib/schema</filename> under wherever you installed the
+conduits, but you can also put them directly in the conduits directory or in
+<filename>~/.pilotmgr/SyncXml{AB,DB,MB,TB}</filename>.
+</para>
+
+<para>When all the installation is complete, run
+<command>pilot-manager</command>. It will announce the discovery of the
+new conduits. Under the <literal>File/Properties...</literal> menu, add
+the new conduits to the list of active conduits and they'll get used the
+next time you sync.</para>
+</section>
+
+</section>
+
+<section><title>SyncXmlAB</title>
+
+<para>The SyncXmlAB conduit syncs your Palm AddressBook with your
+desktop.</para>
+
+<section><title>Customizing SyncXmlAB</title>
+
+<para>Configuring <literal>SyncXmlAB</literal> reveals the panel
+shown in <xref linkend="config-ab"/>:</para>
+
+<figure id="config-ab"><title>The SyncXmlAB Configuration Panel</title>
+<mediaobject>
+<imageobject>
+<imagedata fileref="images/config-ab.png"/>
+</imageobject>
+</mediaobject>
+</figure>
+
+<variablelist>
+<varlistentry><term>Enable user fields</term>
+<listitem><para>If this option is enabled, the <literal>Notes</literal>
+field of each Addressbook record is treated as structured text
+according to the conventions discussed in <xref linkend="userfields"/>.
+</para></listitem>
+</varlistentry>
+<varlistentry><term>XML file:</term>
+<listitem><para>Identifies the location where the XML Addressbook file
+is to be stored. This file is used to sync with the Palm. Changes to
+this file will be reflected in the Palm at the next sync, and changes
+in the Palm will be written back to this file.  </para></listitem>
+</varlistentry>
+<varlistentry><term>Validate:</term>
+<listitem><para>Identifies the location of the DTD to which the XML
+Addressbook file will refer. During first-time initialization, the
+conduit attempts to locate the DTD. If you subsequently move the DTD,
+or if you have installed it somewhere that the conduit does not look,
+you will have to update this value; otherwise, it's unlikely that
+you'll ever need to change this.</para></listitem>
+</varlistentry>
+</variablelist>
+
+</section>
+
+<section><title>Understanding the XML Address Book</title>
+
+<para>Syncing your Palm with the <literal>SyncXmlAB</literal> conduit,
+produces a single XML file, by default <filename>~/.xmlAddr</filename>.
+This file contains the complete Addressbook database. The PilotManager
+also keeps a binary representation of the database in
+<filename>~/.pilotmgr/SyncXmlAB/addr.db</filename>. If you want to delete
+the XML address book and resync from the Palm, delete both files.
+</para>
+
+<section><title>addressbook</title>
+
+<para>The root element of an Addressbook is <literal>addressbook</literal>.
+It identifies the version number of the XML file format and the name
+of the user. Attempts to sync the wrong user will generate a warning.
+If a future version of the conduit uses a different version number, the
+sync will abort so that you don't wind up with a horribly corrupted
+database.
+</para>
+</section>
+
+<section><title>categories, fields, and phones</title>
+
+<para>The Palm stores categories, field names, and phone number labels
+only once in the database, essentially as arrays. Each record in the
+database refers to the field name by offset into the appropriate array.
+</para>
+
+<para>Each of these label arrays is stored at the top of the XML file.
+If you change these labels, the effects will be global within the
+addressbook.</para>
+
+<para>Modify these fields with some caution because the conduit makes
+no effort to assure that the changes you've made are reasonable.</para>
+
+</section>
+
+<section><title>address</title>
+
+<para>Following the categories and other fields, each record appears
+in an <literal>&lt;address&gt;</literal> element. Each address is a fairly
+straightforward duplicate of the record from the Addressbook database.
+There are only a few issues to consider.
+</para>
+
+<section><title>Address IDs</title>
+
+<para>Internally, the Palm maintains a unique ID value for each
+record.  The Palm IDs are not stored in the XML file because there
+would be no way to generate a new one on the desktop in order to add a
+record to the XML address book. Instead, a mapping is maintained
+between the XML ID values and the Palm unique IDs.</para>
+
+<para>To add a new address to the XML file, simply construct a new XML
+ID value that is unique within the XML address book. You do not need
+to consider the Palm unique IDs.</para>
+</section>
+
+<section><title>Phone labels</title>
+
+<para>The label value on each phone number is expected to match one of
+the labels in the top-level <literal>&lt;phones&gt;</literal> list.
+The sync will fail if it does not.</para>
+
+<para>The phone number identified as <quote>primary</quote> will be the one
+displayed on the address book summary screen.</para>
+
+</section>
+
+<section><title>Custom labels</title>
+
+<para>Labels on the custom fields are just a convenience for stylesheets
+and other processing tools. The fields are actually inserted into each
+record in the order presented, without regard to the labels.</para>
+
+</section>
+
+<section><title>Category</title>
+
+<para>The category value  is expected to match one of
+the labels in the top-level <literal>&lt;categories&gt;</literal> list.
+The sync will fail if it does not.</para>
+
+</section>
+</section>
+</section>
+</section>
+
+<section><title>SyncXmlDB</title>
+
+<para>The SyncXmlDB conduit syncs your Palm DateBook with your
+desktop.</para>
+
+<section><title>Customizing SyncXmlDB</title>
+
+<para>Configuring <literal>SyncXmlDB</literal> reveals the panel
+shown in <xref linkend="config-db"/>:</para>
+
+<figure id="config-db"><title>The SyncXmlDB Configuration Panel</title>
+<mediaobject>
+<imageobject>
+<imagedata fileref="images/config-db.png"/>
+</imageobject>
+</mediaobject>
+</figure>
+
+<variablelist>
+<varlistentry><term>Enable user fields</term>
+<listitem><para>If this option is enabled, the <literal>Notes</literal>
+field of each Addressbook record is treated as structured text
+according to the conventions discussed in <xref linkend="userfields"/>.
+</para></listitem>
+</varlistentry>
+<varlistentry><term>Write Calendar</term>
+<listitem><para>If this option is enabled, the <literal>Calendar</literal>
+file will be written. The Calendar file is a write-only, linear representation
+of the Palm Datebook.
+</para></listitem>
+</varlistentry>
+<varlistentry><term>Enable DateBk4 extensions</term>
+<listitem><para>If this option is enabled, the conduit will attempt to
+decode the additional information stored in each appointment by
+the DateBk4 application. See <xref linkend="datebook-db4ext"/>.</para>
+</listitem>
+</varlistentry>
+<varlistentry><term>XML file:</term>
+<listitem><para>Identifies the location where the XML Datebook file
+is to be stored. This file is used to sync with the Palm. Changes to
+this file will be reflected in the Palm at the next sync, and changes
+in the Palm will be written back to this file.  </para></listitem>
+</varlistentry>
+<varlistentry><term>Val. XML:</term>
+<listitem><para>Identifies the location of the DTD to which the XML
+Datebook file will refer. During first-time initialization, the
+conduit attempts to locate the DTD. If you subsequently move the DTD,
+or if you have installed it somewhere that the conduit does not look,
+you will have to update this value; otherwise, it's unlikely that
+you'll ever need to change this.</para></listitem>
+</varlistentry>
+<varlistentry><term>Calendar:</term>
+<listitem><para>Identifies the location where the Calendar will be written,
+if the <quote>Write Calendar</quote> option is enabled. This file is
+write-only, it is updated by a sync operation, but is not consulted. Any
+local changes made to this file will be lost at each sync.</para></listitem>
+</varlistentry>
+<varlistentry><term>Val. Cal.:</term>
+<listitem><para>Identifies the location of the DTD to which the XML
+Calendar file will refer. During first-time initialization, the
+conduit attempts to locate the DTD. If you subsequently move the DTD,
+or if you have installed it somewhere that the conduit does not look,
+you will have to update this value; otherwise, it's unlikely that
+you'll ever need to change this.</para></listitem>
+</varlistentry>
+<varlistentry><term>Cal Weeks:</term>
+<listitem><para>Identifies the number of weeks (starting with the
+first week of the current month) that should be copied to the
+Calendar file.</para></listitem>
+</varlistentry>
+<varlistentry><term>Use dummy days</term>
+<listitem><para>If this option is enabled, each week in the Calendar
+file will contain exactly seven days. So, for example, if the first of
+the month occurs on a Wednesday, "dummy days" will be inserted before
+the first to pad the week to seven days. Similarly, the last week in
+each month may be padded.</para>
+<para>Dummy days are only inserted in the Calendar file (not the Datebook
+XML file). They may simplify the task of writing stylesheets and other
+software designed to display the calendar.</para>
+</listitem>
+</varlistentry>
+</variablelist>
+</section>
+
+<section id="unddb"><title>Understanding the XML Date Book</title>
+
+<para>Syncing your Palm with the <literal>SyncXmlDB</literal> conduit,
+produces one or two XML files. It always produces an XML version of
+the date book, by default <filename>~/.xmlDate</filename>. It may also
+produce a calendar, by default <filename>~/.xmlCalendar</filename>.
+</para>
+
+<para>The XML version of the date book contains the complete Datebook
+database. The PilotManager
+also keeps a binary representation of the database in
+<filename>~/.pilotmgr/SyncXmlDB/date.db</filename>. If you want to delete
+the XML date book and resync from the Palm, delete both files.
+</para>
+
+<para>The date book is a compact representation of your schedule.
+Each entry in your schedule appears once in the date book, with start
+and end dates, repeating information, and exceptions all represented
+compactly as properties of the event. The events do not even appear in
+chronological order, necessarily, with in the date book.</para>
+
+<para>While this compact representation is useful for syncing, it is
+difficult to produce your typical <quote>month at a glance</quote> or
+other traditional calendar view from it. Events must be sorted into
+proper chronological order, repeating events must be generated (with
+exceptions), etc.</para>
+
+<para>In order to make the problem of constructing a calendar view more
+tractable for stylesheets, the conduit can also produce a calendar file.
+In this file, every month, week, and day is represented in chronological
+order. The XSL stylesheet, <filename>calendar.xsl</filename>, distributed
+with the conduits demonstrates how this file may be transformed.</para>
+
+<section><title>datebook</title>
+
+<para>The root element of a Datebook is <literal>datebook</literal>.
+It identifies the version number of the XML file format, the name
+of the user, the day of the week that the user identifies as the
+start of the week, and the date that that the file was produced.</para>
+
+<para>Attempts to sync the wrong user will generate a warning.
+If a future version of the conduit uses a different version number, the
+sync will abort so that you don't wind up with a horribly corrupted
+database.
+</para>
+</section>
+
+<section><title>appointment</title>
+
+<para>Each record appears
+in an <literal>&lt;appointment&gt;</literal> element. Each appointment
+is a fairly
+straightforward duplicate of the record from the Addressbook database.
+There are only a few issues to consider.
+</para>
+
+<section><title>Appointment IDs</title>
+
+<para>Internally, the Palm maintains a unique ID value for each
+record.  The Palm IDs are not stored in the XML file because there
+would be no way to generate a new one on the desktop in order to add a
+record to the XML date book. Instead, a mapping is maintained
+between the XML ID values and the Palm unique IDs.</para>
+
+<para>To add a new appointment to the XML file, simply construct a new XML
+ID value that is unique within the XML date book. You do not need
+to consider the Palm unique IDs.</para>
+</section>
+
+<section><title>Category</title>
+
+<para>The builtin date book on the Palm (or at least, on some of the
+Palm devices) does not support categories on appointments. But in fact the
+database does contain them. Some applications allow you to edit the
+category values on the Palm. This is reflected in a category on each
+appointment.</para>
+
+<para>The category value is expected to match one of
+the labels in the top-level <literal>&lt;categories&gt;</literal> list.
+The sync will fail if it does not.</para>
+
+</section>
+
+<section id="datebook-db4ext"><title>DateBk4 Extensions</title>
+
+<para>The DateBk4 application from
+<ulink url="http://www.pimlicosoftware.com/">Pimlico Software</ulink> adds
+several useful features to the Palm datebook. In order to maintain
+complete compatibility with the built-in datebook database, these
+additional features are encoded in the Note field of each appointment.
+</para>
+
+<para>If you enable DateBk4 extensions, this information is decoded
+in the XML Datebook and Calendar files. This allows you to observe the
+icons, time zones, and other DateBk4 extensions. Note, however, that these
+are "read only" values in the XML file; if you change them, the changes
+will not be synced to the Palm.</para>
+</section>
+
+</section>
+</section>
+</section>
+
+<section><title>SyncXmlMB</title>
+
+<para>The SyncXmlMB conduit syncs your Palm Memos with your
+desktop.</para>
+
+<section><title>Customizing SyncXmlMB</title>
+
+<para>Configuring <literal>SyncXmlMB</literal> reveals the panel
+shown in <xref linkend="config-mb"/>:</para>
+
+<figure id="config-mb"><title>The SyncXmlMB Configuration Panel</title>
+<mediaobject>
+<imageobject>
+<imagedata fileref="images/config-mb.png"/>
+</imageobject>
+</mediaobject>
+</figure>
+
+<variablelist>
+<varlistentry><term>XML file:</term>
+<listitem><para>Identifies the location where the XML Memo file
+is to be stored. This file is used to sync with the Palm. Changes to
+this file will be reflected in the Palm at the next sync, and changes
+in the Palm will be written back to this file.</para></listitem>
+</varlistentry>
+<varlistentry><term>Validate:</term>
+<listitem><para>Identifies the location of the DTD to which the XML
+Memo file will refer. During first-time initialization, the
+conduit attempts to locate the DTD. If you subsequently move the DTD,
+or if you have installed it somewhere that the conduit does not look,
+you will have to update this value; otherwise, it's unlikely that
+you'll ever need to change this.</para></listitem>
+</varlistentry>
+</variablelist>
+</section>
+
+<section><title>Understanding the XML Memo List</title>
+
+<para>Syncing your Palm with the <literal>SyncXmlMB</literal> conduit,
+produces a single XML file, by default <filename>~/.xmlMemo</filename>.
+This file contains the complete Memo database. The PilotManager
+also keeps a binary representation of the database in
+<filename>~/.pilotmgr/SyncXmlMB/memo.db</filename>. If you want to delete
+the XML Memo list and resync from the Palm, delete both files.
+</para>
+
+<section><title>memobook</title>
+
+<para>The root element of an Memo list is <literal>memobook</literal>.
+It identifies the version number of the XML file format and the name
+of the user. Attempts to sync the wrong user will generate a warning.
+If a future version of the conduit uses a different version number, the
+sync will abort so that you don't wind up with a horribly corrupted
+database.
+</para>
+</section>
+
+<section><title>categories</title>
+
+<para>The Palm stores categories
+only once in the database, essentially as an array. Each record in the
+database refers to the category name by offset into this single array.
+</para>
+
+<para>The category label array is stored at the top of the XML file.
+If you change these labels, the effects will be global within the
+Memo list.</para>
+
+<para>Modify these fields with some caution because the conduit makes
+no effort to assure that the changes you've made are reasonable.</para>
+
+</section>
+
+<section><title>memo</title>
+
+<para>Following the categories, each record appears
+in a <literal>&lt;memo&gt;</literal> element. Each memo is a fairly
+straightforward duplicate of the record from the Memo database.
+There are only a few issues to consider.
+</para>
+
+<section><title>Memo IDs</title>
+
+<para>Internally, the Palm maintains a unique ID value for each
+record.  The Palm IDs are not stored in the XML file because there
+would be no way to generate a new one on the desktop in order to add a
+record to the XML memo list. Instead, a mapping is maintained
+between the XML ID values and the Palm unique IDs.</para>
+
+<para>To add a new memo to the XML file, simply construct a new XML
+ID value that is unique within the XML memobook. You do not need
+to consider the Palm unique IDs.</para>
+</section>
+
+<section><title>Category</title>
+
+<para>The category value is expected to match one of
+the labels in the top-level <literal>&lt;categories&gt;</literal> list.
+The sync will fail if it does not.</para>
+
+</section>
+</section>
+</section>
+</section>
+
+<section><title>SyncXmlTB</title>
+
+<para>The SyncXmlTB conduit syncs your Palm Todo list with your
+desktop.</para>
+
+<section><title>Customizing SyncXmlTB</title>
+
+<para>Configuring <literal>SyncXmlTB</literal> reveals the panel
+shown in <xref linkend="config-tb"/>:</para>
+
+<figure id="config-tb"><title>The SyncXmlTB Configuration Panel</title>
+<mediaobject>
+<imageobject>
+<imagedata fileref="images/config-tb.png"/>
+</imageobject>
+</mediaobject>
+</figure>
+
+<variablelist>
+<varlistentry><term>Enable user fields</term>
+<listitem><para>If this option is enabled, the <literal>Notes</literal>
+field of each Todo record is treated as structured text
+according to the conventions discussed in <xref linkend="userfields"/>.
+</para></listitem>
+</varlistentry>
+<varlistentry><term>Enable DateBk4 extensions</term>
+<listitem><para>If this option is enabled, the conduit will attempt to
+decode the additional information stored in each appointment by
+the DateBk4 application. See <xref linkend="todo-db4ext"/>.</para>
+</listitem>
+</varlistentry>
+<varlistentry><term>XML file:</term>
+<listitem><para>Identifies the location where the XML Memo file
+is to be stored. This file is used to sync with the Palm. Changes to
+this file will be reflected in the Palm at the next sync, and changes
+in the Palm will be written back to this file.</para></listitem>
+</varlistentry>
+<varlistentry><term>Validate:</term>
+<listitem><para>Identifies the location of the DTD to which the XML
+Todo file will refer. During first-time initialization, the
+conduit attempts to locate the DTD. If you subsequently move the DTD,
+or if you have installed it somewhere that the conduit does not look,
+you will have to update this value; otherwise, it's unlikely that
+you'll ever need to change this.</para></listitem>
+</varlistentry>
+</variablelist>
+</section>
+
+<section><title>Understanding the XML Todo List</title>
+
+<para>Syncing your Palm with the <literal>SyncXmlTB</literal> conduit,
+produces a single XML file, by default <filename>~/.xmlTodo</filename>.
+This file contains the complete Todo database. The PilotManager
+also keeps a binary representation of the database in
+<filename>~/.pilotmgr/SyncXmlTB/todo.db</filename>. If you want to delete
+the XML Todo list and resync from the Palm, delete both files.
+</para>
+
+<section><title>todobook</title>
+
+<para>The root element of an Todo list is <literal>todobook</literal>.
+It identifies the version number of the XML file format and the name
+of the user. Attempts to sync the wrong user will generate a warning.
+If a future version of the conduit uses a different version number, the
+sync will abort so that you don't wind up with a horribly corrupted
+database.
+</para>
+</section>
+
+<section><title>categories</title>
+
+<para>The Palm stores categories
+only once in the database, essentially as an array. Each record in the
+database refers to the category name by offset into this single array.
+</para>
+
+<para>The category label array is stored at the top of the XML file.
+If you change these labels, the effects will be global within the
+Todo list.</para>
+
+<para>Modify these fields with some caution because the conduit makes
+no effort to assure that the changes you've made are reasonable.</para>
+
+</section>
+
+<section><title>todo</title>
+
+<para>Following the categories, each record appears
+in a <literal>&lt;todo&gt;</literal> element. Each memo is a fairly
+straightforward duplicate of the record from the Memo database.
+There are only a few issues to consider.
+</para>
+
+<section><title>Todo IDs</title>
+
+<para>Internally, the Palm maintains a unique ID value for each
+record.  The Palm IDs are not stored in the XML file because there
+would be no way to generate a new one on the desktop in order to add a
+record to the XML todo list. Instead, a mapping is maintained
+between the XML ID values and the Palm unique IDs.</para>
+
+<para>To add a new todo to the XML file, simply construct a new XML
+ID value that is unique within the XML todobook. You do not need
+to consider the Palm unique IDs.</para>
+</section>
+
+<section><title>Category</title>
+
+<para>The category value is expected to match one of
+the labels in the top-level <literal>&lt;categories&gt;</literal> list.
+The sync will fail if it does not.</para>
+
+</section>
+
+<section id="todo-db4ext"><title>DateBk4 Extensions</title>
+
+<para>The DateBk4 application from
+<ulink url="http://www.pimlicosoftware.com/">Pimlico Software</ulink> adds
+several useful features to the Palm todo list. In order to maintain
+complete compatibility with the built-in todo database, these
+additional features are encoded in the Note field of each todo entry.
+</para>
+
+<para>If you enable DateBk4 extensions, this information is decoded
+in the XML Todo file. This allows you to observe the
+icons, alarm times, and other DateBk4 extensions. Note, however, that these
+are "read only" values in the XML file; if you change them, the changes
+will not be synced to the Palm.</para>
+</section>
+
+</section>
+</section>
+</section>
+
+<section id="userfields"><title>User Fields</title>
+
+<para>In order to store additional information in my Palm in a
+quasi-structured fashion, I've adopted a convention for the 'Note'
+field.</para>
+
+<para>If the <quote>Note</quote> field contains the line
+<quote>user-fields:</quote>, then all of the following lines that
+begin <quote>field-name:</quote> are <quote>user fields</quote>.  If
+you enable user fields, these are parsed into the XML.  For example, a
+DateBook entry with the following Note:</para>
+
+<programlisting>
+  user-fields:
+  loc: Bay Area
+  url: http://.../
+  type: business
+
+  other notes
+</programlisting>
+
+<para>will be parsed into the XML as:</para>
+
+<programlisting>
+<![CDATA[
+  <user-field name="loc">Bay Area</user-field>
+  <user-field name="url">http://.../</user-field>
+  <user-field name="type">business</user-field>
+  <note>user-fields:
+  loc: Bay Area
+  url: http://.../
+  type: business
+
+  other notes
+]]></programlisting>
+
+<para>Note that the user-fields are <quote>write-only</quote> in the
+database. If you want to change them on the desktop side, edit the value
+of the <quote>Note</quote> field directly.</para>
+
+<para>This is necessary because some applications, such as the <ulink
+role="linktable" url="http://www.pimlicosoftware.com/">Pimlico Software</ulink> DateBk*
+applications, also use the notes field in semantically important
+ways. Leading and trailing whitespace associated with removing the
+user-fields from the <quote>Note</quote>, often resulted in apparent
+changes that caused the Palm to appear out-of-sync in ways that made
+the syncing unreliable.</para>
+
+<section><title>Speaking of Pimlico...</title>
+
+<para>The enhanced DateBook application included in the HandSpring
+Visor&trade; is actually a licensed subset of Pimlico's DateBk3 application.
+This application, and its successor DateBk4, use structured values at
+the very beginning of the <quote>Note</quote>s field to hold information
+about semantics not included in the database proper (floating events, time
+zones, etc.).</para>
+
+<para>On the Palm, these values are invisible, but if you look in the
+XML database, you'll see them at the beginning of the <quote>Note</quote>
+of each augmented appointment.</para>
+
+<para>In order to preserve these characteristics, it is vital that you
+do not edit or delete these values, or insert notes before them.</para>
+</section>
+
+</section>
+
+<section><title>Making An HTML Calendar</title>
+
+<para>One of the benefits I touted at the beginning of this article
+was multiple output formats, for example the ability to publish my
+schedule for others to
+see. Included in the <ulink url="&conduitzip;">SyncXml Conduits</ulink> package
+is an XSL stylesheet that produces an HTML calendar from the
+<filename>.xmlCalendar</filename> file.</para>
+
+<para>After syncing, I run:</para>
+
+<programlisting>
+xt .xmlCalendar /projects/pilot/conduits/calendar.xsl sched.html
+</programlisting>
+
+<para>This produces a calendar like the one shown in
+<xref linkend="netscape"/>.</para>
+
+<figure id="netscape"><title>An HTML Schedule</title>
+<mediaobject>
+<imageobject>
+<imagedata fileref="images/netscape.png"/>
+</imageobject>
+</mediaobject>
+</figure>
+
+<section><title>User Fields and HTML</title>
+
+<para>The <filename>calendar.xsl</filename> stylesheet supports
+several user fields:</para>
+
+<itemizedlist>
+<listitem><para>The <literal>class</literal> and <literal>type</literal>
+user fields determine foreground and background colors on the month-view
+of the calendar.
+(Specifically, appointments with an <quote>undecided</quote> class are
+highlighted and appointments with <literal>type</literal>s of 
+<quote>business</quote>, <quote>personal</quote>, and
+<quote>holiday</quote> are colored differently.</para></listitem>
+<listitem><para>If the user field <literal>url</literal> is set, then the
+appointment will include a link to that URL.</para></listitem>
+<listitem><para>If the user field <literal>loc</literal> is set, then the
+location will appear parenthetically after the description.</para></listitem>
+<listitem><para>If the user field <literal>locurl</literal> is set, then
+the location will be a hypertext link to that URL.</para></listitem>
+</itemizedlist>
+
+<para>In addition, a few user fields are usually ignored. You can
+make them significant by setting the stylesheet parameter
+<literal>ignoreuserfields</literal> to 0. With these additional
+fields:</para>
+
+<itemizedlist>
+<listitem><para>Weekly appointments with the user field <literal>type</literal>
+set to <quote>personal</quote> are not displayed. (This prevents my weekly
+reminder to take out the garbage on Monday mornings from appearing on my
+web calendar!)</para></listitem>
+<listitem><para>Appointments that <emphasis>do not</emphasis> have a 
+user field of <literal>type</literal> are suppressed. This effectively
+makes untyped appointments <quote>personal</quote> by default.</para>
+</listitem>
+</itemizedlist>
+
+</section>
+</section>
+
+<section><title>Conclusion</title>
+
+<para>I'm by no means done hacking my XML address book and schedule.
+I still have to write the XML BBDB/Palm merging tool and I may decided
+to write a stylesheet for putting my address book online.</para>
+
+<para>I hope some of you find the SyncXml Conduits useful and feel
+inspired to introduce XML into your applications. Let me know!</para>
+
+</section>
+</section>
+
+<appendix id="app11"><title>What's New in Version 1.1</title>
+
+<para>The following significant changes were introduced in
+<ulink url="&conduitzip;">version 1.1</ulink>
+of the SyncXml conduits:</para>
+
+<itemizedlist>
+<listitem><para>Fixed a <emphasis>significant</emphasis> bug in
+<filename>SyncXmlTB</filename>. The version 1.0 conduit does not properly
+sync dated Todo items. The due date is lost!
+</para></listitem>
+
+<listitem><para>Fixed a significant bug in
+<filename>SyncXmlDB</filename>. The version 1.0 conduit does not properly
+sync items that repeat <literal>MonthlyByDay</literal> or
+<literal>MonthlyByDate</literal>.
+</para></listitem>
+
+<listitem><para>Fixed a significant bug in
+<filename>SyncXmlAB</filename>. The version 1.0 conduit sometimes syncs
+the "show in list" phone number incorrectly.
+</para></listitem>
+
+<listitem><para>Improved the encoding of international and XML markup
+characters. There were a few places in the version 1.0 conduits where
+markup characters were not escaped, leading to XML files that could not
+be loaded.
+</para>
+</listitem>
+
+<listitem><para>Added support for DateBk4 extensions to the Datebook and
+Todo databases.
+</para></listitem>
+
+<listitem><para>Provided user-interface configuration for previously
+"hidden" preferences.
+</para></listitem>
+
+<listitem><para>Added support for categories in the Datebook.
+</para></listitem>
+
+<listitem><para>Added <literal>sortByCompany</literal> and
+<literal>country</literal> attributes to the Addressbook.
+</para></listitem>
+
+<listitem><para>Added <literal>sortByAlpha</literal>
+attribute to the Memo file.
+</para></listitem>
+
+<listitem><para>Added <literal>sortByPriority</literal>
+attribute to the Todo file.
+</para></listitem>
+
+<listitem><para>Added support for DateBk4 icons to the Calendar
+stylesheet. The distribution also includes a simple-minded Perl
+script that can construct XPM icon files from the DateBk4 icon
+memo.
+</para></listitem>
+
+</itemizedlist>
+</appendix>
+
+</article>