]> granicus.if.org Git - docbook-dsssl/commitdiff
Check in sample assembly files.
authorBob Stayton <bobs@sagehill.net>
Fri, 25 Nov 2011 18:00:21 +0000 (18:00 +0000)
committerBob Stayton <bobs@sagehill.net>
Fri, 25 Nov 2011 18:00:21 +0000 (18:00 +0000)
26 files changed:
contrib/samples/assembly/README [new file with mode: 0644]
contrib/samples/assembly/assemble.xsl [new file with mode: 0644]
contrib/samples/assembly/cooked-sample/Makefile [new file with mode: 0644]
contrib/samples/assembly/cooked-sample/myassembly.xml [new file with mode: 0755]
contrib/samples/assembly/cooked-sample/originalbook.xml [new file with mode: 0755]
contrib/samples/assembly/cooked-sample/reassembled.xml [new file with mode: 0755]
contrib/samples/assembly/cooked-sample/topics/Audience.xml [new file with mode: 0755]
contrib/samples/assembly/cooked-sample/topics/FOprocessors.xml [new file with mode: 0755]
contrib/samples/assembly/cooked-sample/topics/HowOrganized.xml [new file with mode: 0755]
contrib/samples/assembly/cooked-sample/topics/OnlineResources.xml [new file with mode: 0755]
contrib/samples/assembly/cooked-sample/topics/Portability.xml [new file with mode: 0755]
contrib/samples/assembly/cooked-sample/topics/ToolsPart.xml [new file with mode: 0755]
contrib/samples/assembly/cooked-sample/topics/WhatIsDocbook.xml [new file with mode: 0755]
contrib/samples/assembly/cooked-sample/topics/XSLTprocessors.xml [new file with mode: 0755]
contrib/samples/assembly/cooked-sample/topics/XSLprocessors.xml [new file with mode: 0755]
contrib/samples/assembly/cooked-sample/topics/frontmatter.xml [new file with mode: 0755]
contrib/samples/assembly/cooked-sample/topics/introchapter.xml [new file with mode: 0755]
contrib/samples/assembly/cooked-sample/topics/preface.xml [new file with mode: 0755]
contrib/samples/assembly/docbook51/assembly.dtd [new file with mode: 0755]
contrib/samples/assembly/docbook51/assembly.rnc [new file with mode: 0755]
contrib/samples/assembly/docbook51/docbook.dtd [new file with mode: 0755]
contrib/samples/assembly/docbook51/docbook.rnc [new file with mode: 0755]
contrib/samples/assembly/sample/Makefile [new file with mode: 0644]
contrib/samples/assembly/sample/originalbook.xml [new file with mode: 0755]
contrib/samples/assembly/topic-maker-chunk.xsl [new file with mode: 0644]
contrib/samples/assembly/topic-maker.xsl [new file with mode: 0644]

diff --git a/contrib/samples/assembly/README b/contrib/samples/assembly/README
new file mode 100644 (file)
index 0000000..148293a
--- /dev/null
@@ -0,0 +1,244 @@
+DocBook Assembly Toolkit
+==============================
+21 August 2011
+Bob Stayton
+Sagehill Enterprises
+bobs@sagehill.net
+
+
+This in a demonstration toolkit for test-driving the
+new DocBook modular documentation elements and features.
+It is intended to enable working with <topic> and
+<assembly> elements, as currently defined.  Because these
+new elements are not finalized, consider these elements
+and this toolkit to be experimental and subject to
+significant future changes.  
+
+This kit currently supports only the basic features of
+an assembly.  See the "Unsupported Features" section
+below for details.  These more advanced features will be
+supported as it is further developed.
+
+
+Content of this kit:
+--------------------------
+topic-maker-chunk.xsl        - stylesheet to modularize an existing document.
+topic-maker.xsl              - imported by topic-maker-chunk.xsl.
+assemble.xsl                 - stylesheet to process an <assembly> element into a book.
+doccbook51/                  - DocBook 5.1 beta 4 schemas 
+sample/originalbook.xml      - sample book document before disassembly. 
+sample/Makefile              - contains commands to round trip assembly.
+cooked-sample/myassembly.xml - The assembly element generated by topic-maker.
+cooked-sample/topics         - The modular topic chunks from topic-maker.
+cooked-sample/reassembled.xml- The sample document after roundtrip processing.
+
+
+The toolkit consists of an assemble.xsl XSL stylesheet
+to process a DocBook <assembly> element to convert it
+to an assembled DocBook document ready to be formatted.
+This stylesheet will enable users to gain experience with
+using <assembly> to structure a book from modular files.
+
+To make it easy to create a modular book, this kit also
+includes a topic-maker-chunk.xsl XSL stylesheet to break
+apart an existing DocBook 5.0 book into modular files,
+and also create the associated <assembly> document.
+Then you can run the assemble.xsl stylesheet to put it back
+together as a single DocBook document.
+
+
+To run the demo
+====================
+Prerequisites:
+
+a.  The docbook-xsl-ns-1.76.1 namespaced stylesheets installed.
+
+b.  xsltproc in your path.
+
+c.  A make utility, or the ability to read a simple Makefile to
+execute the commands manually.
+
+Steps:
+
+1.  Edit topic-maker.xsl and topic-maker-chunk.xsl to change
+the path of the import and include statements for the
+docbook-xsl-1.75.2 stylesheets.
+
+2. cd to the sample directory.
+
+3. Type:
+          make disassemble
+
+That will process the originalbook.xml file to
+generate a "myassembly.xml" file, as well as
+a set of topic XML modules in the "topics" subdirectory.
+
+4. Type:
+         make assemble
+
+That will process the myassembly.xml file back into a book
+file named reassembled.xml.
+
+You can compare your results to the files included in
+"cooked-sample" directory.
+
+
+
+To process an <assembly>
+=============================
+To convert an <assembly> and its associated modular
+files into a single DocBook document, process
+your assembly document with the assemble.xsl stylesheet.
+You should then be able to process the resulting
+document with a DocBook XSL formatting stylesheet.
+
+
+To create an assembly from an existing document
+===================================================
+The topic-maker-chunk.xsl is a customization of the
+DocBook XHTML chunking stylesheet.  
+
+  NOTE: before using the stylesheet, edit topic-maker.xsl and
+  topic-maker-chunk.xsl to change the paths to the imported
+  DocBook NS stylesheet files.  
+
+
+Chunking parameters
+-------------------------
+Because topic-maker-chunk is a customization of the XHTML
+chunking stylesheet, you can use all the features,
+parameters, and options of the chunking stylesheets to
+control how the content is converted to modular files.
+But instead of converting the content to XHTML, the content
+is for the most part just copied through to DocBook XML
+modular files.
+
+For example, these chunking stylesheet params are useful:
+
+  <xsl:param name="chunk.section.depth" select="3"/>
+  <xsl:param name="chunk.first.sections" select="1"/>
+  <xsl:param name="use.id.as.filename" select="1"/>
+  <xsl:param name="base.dir">topics/</xsl:param>
+  <xsl:param name="root.filename">index</xsl:param>
+
+
+Using base.dir
+------------------------
+When an existing DocBook 5.0 document is processed,
+it will generate the modular DocBook files in the directory
+named in the 'base.dir' param (as with chunking, be
+sure to include the trailing slash).  
+
+
+The assembly document
+---------------------------
+The topic-maker-chunk.xsl stylesheet will also generate an
+assembly document.  There will be a <resource> element
+for each chunk, and a <module> element that references
+each chunk.  The <module> elements are nested to
+preserve the document structure.
+
+The assembly file is named via this stylesheet parameter:
+
+  <xsl:param name="assembly.filename">myassembly.xml</xsl:param>
+
+By default the assembly element is *not* put into base.dir,
+and the paths to the modular files include base.dir.
+If you set the stylesheet param 'manifest.in.base.dir' to 1,
+then the assembly file is created in the base.dir directory
+and the paths to the modular files do not include base.dir
+(since they are together in the same directory).
+
+
+Converting elements to topics
+------------------------------
+The stylesheet can also convert selected elements to <topic>
+elements.  The stylesheet param 'topic.elements' lets you
+specify a whitespace separated list of element names.
+For example the default is:
+
+  <xsl:param name="topic.elements">preface section</xsl:param>
+
+This setting will convert each <preface> and <section> element to
+<topic> in its respective modular file. Note that for preface,
+only the top of the file, before the first section, is included
+in the preface topic.  
+
+The stylesheet will also add to the <assembly> an <output>
+element with a renderas attribute to indicate the original
+element name for reassembly.
+
+So if you were to add "chapter" to the list, then the top
+of each chapter (before the first section) is converted
+to a topic element in its modular file.
+
+
+The root element as 'contentonly'
+--------------------------------------
+The root element of the original document is handled as a 
+special case.  The root element is indicated in the <assembly>
+document as the <structure> element, with @type="book".
+Any content in the root element prior to the first
+modular chunk is made into the root modular file
+(default filename frontmatter.xml).  That file contains,
+for example:
+
+<book>
+  <info>
+    ...
+  </info>
+</book>
+
+The generated <structure> element has a <module> for this
+content, but with the attribute contentonly="true".  When
+the book is reassembled, the <structure> element creates
+the <book> element, and the content of the frontmatter.xml module
+is brought in without its <book> wrapper, because of 
+the contentonly="true" setting.
+
+In general, if you have content that does not have its own
+container element, you can put the content into a suitable
+container element and then deselect the container element
+upon assembly.
+
+Useful params in assemble.xsl
+-----------------------------
+The $root.default.renderas param sets the name of the
+root element of the assembled document, if it is not
+otherwise specified with @renderas.  Its default value
+is 'book'.
+
+The $topic.default.renderas param sets the name of the
+output element for any topic element included in the
+assembly, if it is not otherwise specified with
+@renderas.  It's default value is 'section'.
+
+The $structure.id param lets you specify at runtime
+the id value of the structure you want to reassemble.
+This is only necessary if you have more than one
+structure element in your assembly.
+
+The $output.type param also lets you specify at runtime
+which structure element to process.  In this case,
+the value should match on an @type attribute on
+the structure element.
+
+The $output.format param lets you specify at runtime
+which of several possible output formats are being generated.
+The param value is compared to the @format
+attribute on <output> elements to select specific properties
+for a module.
+
+
+
+Unsupported Features
+-----------------------
+
+The transforms and transform elements are currently ignored
+by the assembly stylesheet.
+
+The relationships and relationships elements are currently
+ignored by the assembly stylesheet.
+
+The filterin and filterout elements are not currently
+supported.
diff --git a/contrib/samples/assembly/assemble.xsl b/contrib/samples/assembly/assemble.xsl
new file mode 100644 (file)
index 0000000..c2e6b5d
--- /dev/null
@@ -0,0 +1,528 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xsl:stylesheet 
+  xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
+  xmlns:exsl="http://exslt.org/common"
+  xmlns:d="http://docbook.org/ns/docbook"
+  xmlns="http://docbook.org/ns/docbook"
+  exclude-result-prefixes="exsl d"
+  version="1.0">
+
+<!-- $Id: assemble.xsl,v 1.8 2011-08-22 04:09:42 bobs Exp $ -->
+
+<xsl:preserve-space elements="*"/>
+<xsl:strip-space elements="d:assembly d:structure d:module d:resources d:resource"/>
+
+<xsl:key name="id" match="*" use="@id|@xml:id"/>
+
+
+<xsl:param name="docbook.version">5.0</xsl:param>
+<xsl:param name="root.default.renderas">book</xsl:param>
+<xsl:param name="topic.default.renderas">section</xsl:param>
+
+<xsl:param name="output.type" select="''"/>
+<xsl:param name="output.format" select="''"/>
+<!-- May be used to select one structure among several to  process -->
+<xsl:param name="structure.id" select="''"/>
+
+
+<!-- default mode is to copy all content nodes -->
+<xsl:template match="node()|@*" priority="-5" mode="copycontent">
+  <xsl:param name="omittitles"/>
+    <xsl:copy>
+      <xsl:apply-templates select="@*" mode="copycontent"/>
+      <xsl:apply-templates mode="copycontent">
+        <xsl:with-param name="omittitles" select="$omittitles"/>
+      </xsl:apply-templates>
+   </xsl:copy>
+</xsl:template>
+
+<xsl:template match="processing-instruction('oxygen')"/>
+
+<!-- skip assembly info elements -->
+<xsl:template match="d:info"/>
+
+<!-- including for structure info element -->
+<xsl:template match="d:structure/d:info"/>
+
+<!-- handle omittitles, but only top level title of resource -->
+<xsl:template match="/*/d:title 
+                   | /*/d:info/d:title 
+                   | /*/d:subtitle  
+                   | /*/d:info/d:subtitle
+                   | /*/d:titleabbrev  
+                   | /*/d:info/d:titleabbrev"
+              mode="copycontent">
+  <xsl:param name="omittitles"/>
+
+  <xsl:choose>
+    <xsl:when test="$omittitles = 'yes' or $omittitles = 'true' or $omittitles = '1'">
+      <!-- omit it -->
+    </xsl:when>
+    <xsl:otherwise>
+      <xsl:copy>
+        <xsl:apply-templates select="@*" mode="copycontent"/>
+        <xsl:apply-templates mode="copycontent"/>
+      </xsl:copy>
+    </xsl:otherwise>
+  </xsl:choose>
+</xsl:template>
+
+<!-- handled in a mode -->
+<xsl:template match="d:resources"/>
+<xsl:template match="d:output|d:filterin|d:filterout|d:override|d:revhistory"/>
+<xsl:template match="d:output|d:filterin|d:filterout|d:override|d:revhistory"
+              mode="copycontent"/>
+
+<xsl:template match="d:assembly">
+  <xsl:choose>
+    <xsl:when test="$structure.id != ''">
+      <xsl:variable name="id.structure" select="key('id', $structure.id)"/>
+      <xsl:choose>
+        <xsl:when test="count($id.structure) = 0">
+          <xsl:message terminate="yes">
+            <xsl:text>ERROR: structure.id param set to '</xsl:text>
+            <xsl:value-of select="$structure.id"/>
+            <xsl:text>' but no element with that xml:id exists in assembly.</xsl:text>
+          </xsl:message>
+        </xsl:when>
+        <xsl:when test="local-name($id.structure) != 'structure'">
+          <xsl:message terminate="yes">
+            <xsl:text>ERROR: structure.id param set to '</xsl:text>
+            <xsl:value-of select="$structure.id"/>
+            <xsl:text>' but no structure with that xml:id exists in assembly.</xsl:text>
+          </xsl:message>
+        </xsl:when>
+        <xsl:otherwise>
+          <xsl:apply-templates select="key('id', $structure.id)"/>
+        </xsl:otherwise>
+      </xsl:choose>
+    </xsl:when>
+    <xsl:when test="$output.type != '' and not(d:structure[@type = $output.type])">
+      <xsl:message terminate="yes">
+        <xsl:text>ERROR: output.type param set to '</xsl:text>
+        <xsl:value-of select="$output.type"/>
+        <xsl:text> but no structure element has that type attribute. Exiting.</xsl:text>
+      </xsl:message>
+    </xsl:when>
+    <xsl:when test="$output.type != '' and d:structure[@type = $output.type]">
+      <xsl:apply-templates select="d:structure[@type = $output.type][1]"/>
+    </xsl:when>
+    <xsl:otherwise>
+      <!-- otherwise process the first structure -->
+      <xsl:apply-templates select="d:structure[1]"/>
+    </xsl:otherwise>
+  </xsl:choose>
+</xsl:template>
+
+<xsl:template match="d:structure">
+
+  <xsl:variable name="output.root.element">
+    <xsl:apply-templates select="." mode="compute.element.name"/>
+  </xsl:variable>
+
+  <xsl:element name="{$output.root.element}" >
+    <xsl:attribute name="version">
+      <xsl:value-of select="$docbook.version"/>
+    </xsl:attribute>
+    <xsl:copy-of select="@xml:id"/>
+
+    <xsl:apply-templates> 
+      <xsl:with-param name="parent" select="$output.root.element"/>
+    </xsl:apply-templates>
+
+  </xsl:element>
+</xsl:template>
+
+<xsl:template match="d:glossary|d:bibliography|d:index|d:toc">
+   <xsl:param name="parent" select="''"/>
+  <xsl:apply-templates select="." mode="copycontent"/>
+</xsl:template>
+
+<xsl:template match="d:title|d:titleabbrev|d:subtitle">
+   <xsl:param name="parent" select="''"/>
+  <xsl:apply-templates select="." mode="copycontent"/>
+</xsl:template>
+
+<!-- module without a resourceref creates an element -->
+<xsl:template match="d:module[not(@resourceref)]">
+  <xsl:param name="parent" select="''"/>
+
+  <xsl:variable name="element.name">
+    <xsl:apply-templates select="." mode="compute.element.name"/>
+  </xsl:variable>
+
+  <xsl:element name="{$element.name}">
+    <xsl:choose>
+      <!-- Use the module's xml:id if it has one -->
+      <xsl:when test="@xml:id">
+        <xsl:attribute name="xml:id">
+          <xsl:value-of select="@xml:id"/>
+        </xsl:attribute>
+      </xsl:when>
+    </xsl:choose>
+
+    <xsl:apply-templates>
+      <xsl:with-param name="parent" select="$element.name"/>
+    </xsl:apply-templates>
+
+  </xsl:element>
+</xsl:template>
+
+<xsl:template name="compute.renderas">
+  <xsl:variable name="output.value">
+    <xsl:call-template name="compute.output.value">
+      <xsl:with-param name="property">renderas</xsl:with-param>
+    </xsl:call-template>
+  </xsl:variable>
+
+  <xsl:value-of select="$output.value"/>
+
+</xsl:template>
+
+<!-- This utility template is passed a value for output format
+     and the name of a property and computes the value
+     of the property from output children of context element -->
+<xsl:template name="compute.output.value">
+  <xsl:param name="property" select="''"/>
+  
+  <xsl:variable name="default.format"
+                select="ancestor::d:structure/@defaultformat"/>
+
+  <xsl:variable name="property.value">
+    <xsl:choose>
+      <!-- if a child output element has a format that matches the param value 
+           and it has that property -->
+      <!-- The format attribute can be multivalued -->
+      <xsl:when test="$output.format != '' and 
+                      d:output[contains(concat(' ', normalize-space(@format), ' '),  
+                                 $output.format)]
+                        [@*[local-name() = $property]]">
+        <xsl:value-of 
+           select="d:output[contains(concat(' ', normalize-space(@format), ' '), 
+                              $output.format)]
+                           [@*[local-name() = $property]][1]
+                           /@*[local-name() = $property]"/>
+      </xsl:when>
+      <!-- try with the structure's @defaultformat -->
+      <xsl:when test="$default.format != '' and 
+                      d:output[contains(concat(' ', normalize-space(@format), ' '),  
+                                 $default.format)]
+                        [@*[local-name() = $property]]">
+        <xsl:value-of 
+           select="d:output[contains(concat(' ', normalize-space(@format), ' '), 
+                              $default.format)]
+                           [@*[local-name() = $property]][1]
+                           /@*[local-name() = $property]"/>
+      </xsl:when>
+      <!-- try the first output with the property-->
+      <xsl:when test="d:output[@*[local-name() = $property]]">
+        <xsl:value-of 
+           select="d:output[@*[local-name() = $property]][1]
+                           /@*[local-name() = $property]"/>
+      </xsl:when>
+      <!-- and try the module element itself -->
+      <xsl:when test="@*[local-name() = $property]">
+        <xsl:value-of 
+           select="@*[local-name() = $property]"/>
+      </xsl:when>
+    </xsl:choose>
+  </xsl:variable>
+
+  <xsl:value-of select="$property.value"/>
+</xsl:template>
+
+<xsl:template match="d:module[not(@resourceref)]" mode="compute.element.name">
+
+  <xsl:variable name="renderas">
+    <xsl:call-template name="compute.renderas"/>
+  </xsl:variable>
+
+  <xsl:choose>
+    <xsl:when test="string-length($renderas) != 0">
+      <xsl:value-of select="$renderas"/>
+    </xsl:when>
+    <xsl:otherwise>
+      <xsl:message terminate="yes">
+        <xsl:text>ERROR: cannot determine output element name for </xsl:text>
+        <xsl:text>module with no @resourceref and no @renderas. Exiting.</xsl:text>
+      </xsl:message>
+    </xsl:otherwise>
+  </xsl:choose>
+</xsl:template>
+
+<xsl:template match="d:module[@resourceref]" mode="compute.element.name">
+  <xsl:param name="ref.name" select="''"/>
+
+  <xsl:variable name="renderas">
+    <xsl:call-template name="compute.renderas"/>
+  </xsl:variable>
+
+  <xsl:choose>
+    <xsl:when test="string-length($renderas) != 0">
+      <xsl:value-of select="$renderas"/>
+    </xsl:when>
+    <xsl:when test="$ref.name = 'topic' and 
+                    string-length($topic.default.renderas) != 0"> 
+      <xsl:value-of select="$topic.default.renderas"/>
+    </xsl:when>
+    <xsl:when test="string-length($ref.name) != 0">
+      <xsl:value-of select="$ref.name"/> 
+    </xsl:when>
+    <xsl:otherwise>
+      <xsl:message terminate="yes">
+        <xsl:text>ERROR: cannot determine output element name for </xsl:text>
+        <xsl:text>@resourceref="</xsl:text>
+        <xsl:value-of select="@resourceref"/>
+        <xsl:text>". Exiting.</xsl:text>
+      </xsl:message>
+    </xsl:otherwise>
+  </xsl:choose>
+</xsl:template>
+
+<xsl:template match="d:structure" mode="compute.element.name">
+
+  <xsl:variable name="renderas">
+    <xsl:call-template name="compute.renderas"/>
+  </xsl:variable>
+
+  <xsl:choose>
+    <xsl:when test="string-length($renderas) != 0">
+      <xsl:value-of select="$renderas"/>
+    </xsl:when>
+    <xsl:when test="string-length($root.default.renderas) != 0">
+      <xsl:value-of select="$root.default.renderas"/>
+    </xsl:when>
+    <xsl:otherwise>
+      <xsl:message terminate="yes">
+        <xsl:text>ERROR: cannot determine output element name for </xsl:text>
+        <xsl:text>structure with no @renderas and no $root.default.renderas. </xsl:text>
+        <xsl:text>Exiting.</xsl:text>
+      </xsl:message>
+    </xsl:otherwise>
+  </xsl:choose>
+</xsl:template>
+
+<xsl:template match="d:module[@resourceref]">
+  <xsl:param name="parent" select="''"/>
+
+  <xsl:variable name="resourceref" select="@resourceref"/>
+  <xsl:variable name="resource" select="key('id', $resourceref)"/>
+
+  <xsl:choose>
+    <xsl:when test="not($resource)">
+      <xsl:message terminate="yes">
+        <xsl:text>ERROR: no xml:id matches @resourceref = '</xsl:text>
+        <xsl:value-of select="$resourceref"/>
+        <xsl:text>'.</xsl:text>
+      </xsl:message>
+    </xsl:when>
+    <xsl:when test="not($resource/self::d:resource)">
+      <xsl:message terminate="yes">
+        <xsl:text>ERROR: xml:id matching @resourceref = '</xsl:text>
+        <xsl:value-of select="$resourceref"/>
+        <xsl:text> is not a resource element'.</xsl:text>
+      </xsl:message>
+    </xsl:when>
+  </xsl:choose>
+
+  <xsl:variable name="fileref.att" select="$resource/@fileref"/>
+  <xsl:variable name="fileref">
+    <xsl:choose>
+      <xsl:when test="$resource/ancestor::d:resources/@xml:base">
+        <xsl:value-of 
+            select="concat($resource/ancestor::d:resources[@xml:base][1]/@xml:base,
+                                 '/', $fileref.att)"/>
+      </xsl:when>
+      <xsl:otherwise>
+        <xsl:value-of select="$fileref.att"/>
+      </xsl:otherwise>
+    </xsl:choose>
+  </xsl:variable>
+
+  <xsl:choose>
+    <xsl:when test="string-length($fileref) = 0">
+      <!-- A resource without @fileref gets its content copied -->
+      <xsl:apply-templates select="$resource/node()" mode="copycontent"/>
+    </xsl:when>
+    <xsl:otherwise>
+
+      <xsl:variable name="ref.content" select="document($fileref,/)"/>
+    
+      <xsl:if test="count($ref.content/*) = 0">
+        <xsl:message terminate="yes">
+          <xsl:text>ERROR: @fileref = '</xsl:text>
+          <xsl:value-of select="$fileref"/>
+          <xsl:text>' has no content or is unresolved.</xsl:text>
+        </xsl:message>
+      </xsl:if>
+    
+      <xsl:variable name="element.name">
+        <xsl:apply-templates select="." mode="compute.element.name">
+          <xsl:with-param name="ref.name" select="local-name($ref.content/*[1])"/>
+        </xsl:apply-templates>
+      </xsl:variable>
+
+      <xsl:variable name="omittitles.property">
+        <xsl:call-template name="compute.output.value">
+          <xsl:with-param name="property">omittitles</xsl:with-param>
+        </xsl:call-template>
+      </xsl:variable>
+    
+      <xsl:variable name="contentonly.property">
+        <xsl:call-template name="compute.output.value">
+          <xsl:with-param name="property">contentonly</xsl:with-param>
+        </xsl:call-template>
+      </xsl:variable>
+    
+      <xsl:choose>
+        <xsl:when test="$contentonly.property = 'true' or 
+                        $contentonly.property = 'yes' or
+                        $contentonly.property = '1'">
+          <xsl:apply-templates select="$ref.content/*[1]/node()" mode="copycontent">
+            <xsl:with-param name="omittitles" select="$omittitles.property"/>
+          </xsl:apply-templates>
+        </xsl:when>
+        <xsl:otherwise>
+          <xsl:element name="{$element.name}" namespace="http://docbook.org/ns/docbook">
+            <xsl:copy-of select="$ref.content/*[1]/@*[not(name = 'xml:id')]"/>
+            <xsl:choose>
+              <!-- Use the module's xml:id if it has one -->
+              <xsl:when test="@xml:id">
+                <xsl:attribute name="xml:id">
+                  <xsl:value-of select="@xml:id"/>
+                </xsl:attribute>
+              </xsl:when>
+              <!-- otherwise use the resource's id -->
+              <xsl:when test="$ref.content/*[1]/@xml:id">
+                <xsl:attribute name="xml:id">
+                  <xsl:value-of select="$ref.content/*[1]/@xml:id"/>
+                </xsl:attribute>
+              </xsl:when>
+            </xsl:choose>
+        
+            <xsl:call-template name="merge.info">
+              <xsl:with-param name="override.info" select="d:override"/>
+              <xsl:with-param name="ref.content" select="$ref.content"/>
+              <xsl:with-param name="omittitles" select="$omittitles.property"/>
+            </xsl:call-template>
+    
+            <!-- copy through all but titles, which moved to info -->
+            <xsl:apply-templates select="$ref.content/*[1]/node()
+                     [not(local-name() = 'title') and
+                      not(local-name() = 'subtitle') and
+                      not(local-name() = 'titleabbrev')]" mode="copycontent"/>
+        
+            <xsl:apply-templates> 
+              <xsl:with-param name="parent" select="$element.name"/>
+            </xsl:apply-templates>
+          </xsl:element>
+        </xsl:otherwise>
+      </xsl:choose>
+    </xsl:otherwise>
+  </xsl:choose>
+</xsl:template>
+
+<xsl:template name="merge.info">
+  <xsl:param name="override.info" select="NOTANODE"/>
+  <xsl:param name="ref.content" select="NOTANODE"/>
+  <xsl:param name="omittitles"/> 
+
+  <xsl:variable name="omittitles.boolean">
+    <xsl:choose>
+      <xsl:when test="$omittitles = 'yes' or $omittitles = 'true' or omittitles = '1'">
+        <xsl:value-of select="1"/>
+      </xsl:when>
+      <xsl:otherwise>
+        <xsl:value-of select="0"/>
+      </xsl:otherwise>
+    </xsl:choose>
+  </xsl:variable>
+  <!-- output info if there is any -->
+  <xsl:if test="$override.info/node() or 
+                $ref.content/*/d:info/node() or
+                $ref.content/*/d:title[$omittitles.boolean = 0] or
+                $ref.content/*/d:subtitle[$omittitles.boolean = 0] or
+                $ref.content/*/d:titleabbrev[$omittitles.boolean = 0]">
+
+    <xsl:variable name="ref.info" select="$ref.content/*/d:info"/>
+    <xsl:variable name="ref.title" select="$ref.content/*/d:title"/>
+    <xsl:variable name="ref.subtitle" select="$ref.content/*/d:subtitle"/>
+    <xsl:variable name="ref.titleabbrev" select="$ref.content/*/d:titleabbrev"/>
+    <xsl:variable name="ref.info.title" select="$ref.content/*/d:info/d:title"/>
+    <xsl:variable name="ref.info.subtitle" select="$ref.content/*/d:info/d:subtitle"/>
+    <xsl:variable name="ref.info.titleabbrev" select="$ref.content/*/d:info/d:titleabbrev"/>
+
+    <info>
+      <!-- First copy through any override attributes and elements and comments -->
+      <xsl:copy-of select="$override.info/@*"/>
+
+      <!-- And copy any resource info attributes not in override-->
+      <xsl:for-each select="$ref.info/@*">
+        <xsl:variable name="resource.att" select="local-name(.)"/>
+        <xsl:choose>
+          <xsl:when test="$override.info/@*[local-name(.) = $resource.att]">
+            <!-- do nothing because overridden -->
+          </xsl:when>
+          <xsl:otherwise>
+            <!-- copy through if not overridden -->
+            <xsl:copy-of select="."/>
+          </xsl:otherwise>
+        </xsl:choose>
+      </xsl:for-each>
+
+      <!-- Now copy through the override elements and comments -->
+      <xsl:copy-of select="$override.info/node()"/>
+
+      <!-- And copy any resource info node not in override-->
+      <xsl:for-each select="$ref.info/node() | 
+                            $ref.title[$omittitles.boolean = 0] |
+                            $ref.subtitle[$omittitles.boolean = 0] |
+                            $ref.titleabbrev[$omittitles.boolean = 0] |
+                            $ref.info.title[$omittitles.boolean = 0] |
+                            $ref.info.subtitle[$omittitles.boolean = 0] |
+                            $ref.info.titleabbrev[$omittitles.boolean = 0]">
+        <xsl:variable name="resource.node" select="local-name(.)"/>
+        <xsl:choose>
+          <xsl:when test="$override.info/node()[local-name(.) = $resource.node]">
+            <!-- do nothing because overridden -->
+          </xsl:when>
+          <xsl:otherwise>
+            <!-- copy through if not overridden -->
+            <xsl:copy-of select="."/>
+          </xsl:otherwise>
+        </xsl:choose>
+      </xsl:for-each>
+
+    </info>
+  </xsl:if>
+</xsl:template>
+
+<xsl:template match="d:relationships">
+  <xsl:message>
+    <xsl:text>WARNING: the &lt;relationships&gt; element is not currently </xsl:text>
+    <xsl:text>supported by this stylesheet.</xsl:text>
+  </xsl:message>
+</xsl:template>
+
+<xsl:template match="d:transforms">
+  <xsl:message>
+    <xsl:text>WARNING: the &lt;transforms&gt; element is not currently </xsl:text>
+    <xsl:text>supported by this stylesheet.</xsl:text>
+  </xsl:message>
+</xsl:template>
+
+<xsl:template match="d:filterin">
+  <xsl:message>
+    <xsl:text>WARNING: the &lt;filterin&gt; element is not currently </xsl:text>
+    <xsl:text>supported by this stylesheet.</xsl:text>
+  </xsl:message>
+</xsl:template>
+
+<xsl:template match="d:filterout">
+  <xsl:message>
+    <xsl:text>WARNING: the &lt;filterin&gt; element is not currently </xsl:text>
+    <xsl:text>supported by this stylesheet.</xsl:text>
+  </xsl:message>
+</xsl:template>
+
+</xsl:stylesheet>
diff --git a/contrib/samples/assembly/cooked-sample/Makefile b/contrib/samples/assembly/cooked-sample/Makefile
new file mode 100644 (file)
index 0000000..ebafae9
--- /dev/null
@@ -0,0 +1,20 @@
+# Makefile to demonstrate how to disassemble an existing
+# DocBook 5 book into an assembly with topics,
+# and then reassemble that into a book.
+
+disassemble:
+       -mkdir topics
+       xsltproc \
+       -o myassembly.xml \
+       --stringparam base.dir topics/ \
+       ../topic-maker-chunk.xsl \
+       originalbook.xml
+
+
+assemble:
+       xsltproc \
+       -o reassembled.xml \
+       ../assemble.xsl \
+       myassembly.xml
+
+
diff --git a/contrib/samples/assembly/cooked-sample/myassembly.xml b/contrib/samples/assembly/cooked-sample/myassembly.xml
new file mode 100755 (executable)
index 0000000..51c6a73
--- /dev/null
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<assembly xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://docbook.org/ns/docbook">
+  <resources xml:base="topics">
+    <resource fileref="frontmatter.xml" xml:id="user.guide-info"/>
+    <resource fileref="preface.xml" xml:id="preface">
+      <description>Preface</description>
+    </resource>
+    <resource fileref="WhatIsDocbook.xml" xml:id="WhatIsDocbook">
+      <description>What is DocBook?</description>
+    </resource>
+    <resource fileref="Audience.xml" xml:id="Audience">
+      <description>Audience</description>
+    </resource>
+    <resource fileref="ToolsPart.xml" xml:id="ToolsPart">
+      <description>Setting up the tools</description>
+    </resource>
+    <resource fileref="introchapter.xml" xml:id="introchapter">
+      <description>Introduction</description>
+    </resource>
+    <resource fileref="HowOrganized.xml" xml:id="HowOrganized">
+      <description>How this book is organized</description>
+    </resource>
+    <resource fileref="OnlineResources.xml" xml:id="OnlineResources">
+      <description>Online resources for finding solutions to problems</description>
+    </resource>
+    <resource fileref="XSLprocessors.xml" xml:id="XSLprocessors">
+      <description>XSL processors</description>
+    </resource>
+    <resource fileref="XSLTprocessors.xml" xml:id="XSLTprocessors">
+      <description>XSLT processors</description>
+    </resource>
+    <resource fileref="FOprocessors.xml" xml:id="FOprocessors">
+      <description>XSL-FO processors</description>
+    </resource>
+    <resource fileref="Portability.xml" xml:id="Portability">
+      <description>Portability considerations</description>
+    </resource>
+  </resources>
+  <structure type="book" xml:id="user.guide">
+    <title>DocBook XSL: The Incomplete Sample</title>
+    <module resourceref="user.guide-info" contentonly="true"/>
+    <module resourceref="preface">
+      <output renderas="preface"/>
+      <module resourceref="WhatIsDocbook">
+        <output renderas="section"/>
+      </module>
+      <module resourceref="Audience">
+        <output renderas="section"/>
+      </module>
+    </module>
+    <module resourceref="ToolsPart">
+      <module resourceref="introchapter">
+        <output renderas="chapter"/>
+        <module resourceref="HowOrganized">
+          <output renderas="section"/>
+        </module>
+        <module resourceref="OnlineResources">
+          <output renderas="section"/>
+        </module>
+      </module>
+      <module resourceref="XSLprocessors">
+        <output renderas="chapter"/>
+        <module resourceref="XSLTprocessors">
+          <output renderas="section"/>
+        </module>
+        <module resourceref="FOprocessors">
+          <output renderas="section"/>
+        </module>
+        <module resourceref="Portability">
+          <output renderas="section"/>
+        </module>
+      </module>
+    </module>
+  </structure>
+</assembly>
diff --git a/contrib/samples/assembly/cooked-sample/originalbook.xml b/contrib/samples/assembly/cooked-sample/originalbook.xml
new file mode 100755 (executable)
index 0000000..0a62110
--- /dev/null
@@ -0,0 +1,649 @@
+<?xml version="1.0"?>
+<book xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0"
+    xml:id="user.guide">
+    <info>
+        <title>DocBook XSL: The Incomplete Sample</title>
+        <author>
+            <personname>
+                <firstname>Bob</firstname>
+                <surname>Stayton</surname>
+            </personname>
+        </author>
+        <publishername>Sagehill Enterprises</publishername>
+        <copyright>
+            <year>2002</year>
+            <year>2003</year>
+            <year>2004</year>
+            <year>2005</year>
+            <year>2006</year>
+            <year>2007</year>
+            <holder>Sagehill
+Enterprises</holder>
+        </copyright>
+        <biblioid class="isbn">ISBN: 978-0-9741521-3-4</biblioid>
+        <edition>Fourth</edition>
+        <pubdate>September, 2007</pubdate>
+        <releaseinfo>A PDF version of this document is available for purchase
+from <link
+            xlink:href="http://www.sagehill.net">Sagehill Enterprises</link>.
+</releaseinfo>
+        <legalnotice>
+            <para>All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording, or by any information storage and retrieval system, without written permission from the publisher, except for the inclusion of brief quotations in a review.</para>
+        </legalnotice>
+        <legalnotice>
+            <title>Warning and Disclaimer</title>
+            <para>Every effort has been made to make this book as complete and accurate as possible, but Sagehill Enterprises makes no warranties, either express or implied, regarding the content or its fitness for any particular purpose.  The information is provided on an as-is basis. The author and Sagehill Enterprises shall have neither liability nor responsibility to any person or entity with respect to any loss or damages arising from the information contained in this book.</para>
+            <para>This guide contains links to third-party Web sites that are not under the control of Sagehill Enterprises, and Sagehill Enterprises and the author are not responsible for the content of any linked site. If you access a third-party website mentioned in this guide, then you do so at your own risk. Sagehill Enterprises provides these links only as a convenience, and the inclusion of the link does not imply that Sagehill Enterprises or the author endorses or accepts any responsibility for the content of those third-party sites.</para>
+        </legalnotice>
+        <legalnotice>
+            <title>Trademarks</title>
+            <para>All terms mentioned in this book that are known to be trademarks or service marks have been appropriately capitalized. Use of a term in this book should not be regarded as affecting the validity of any trademark or service mark.</para>
+        </legalnotice>
+        <publisher>
+            <publishername>Sagehill
+Enterprises</publishername>
+            <address><street>PO Box 2911</street>
+<city>Santa Cruz</city> <state>CA</state>
+<postcode>95063-2911</postcode>
+<otheraddr>Website: 
+<link xlink:href="http://www.sagehill.net"/></otheraddr>
+<email>info@sagehill.net</email></address>
+        </publisher>
+
+
+    </info>
+    <preface xml:id="preface">
+        <title>Preface</title>
+        <para>The nature of publishing has changed so much over the last twenty years that anybody
+    can be a publisher these days. Now you can reach a world-wide audience by putting a few
+    HTML pages up on your website. Or you can use desktop publishing software to produce
+    beautifully typeset material that can be printed on demand or downloaded to a printer
+    anywhere in the world. With DocBook, you can publish both ways from the same source
+    material.</para>
+        <section xml:id="WhatIsDocbook">
+            <title>What is DocBook?</title>
+            <para>DocBook is a collection of standards and tools for technical publishing. DocBook
+        was originally created by a consortium of software companies as a standard for
+        computer documentation. But the basic <quote>book</quote> features of DocBook can be
+        used for other kinds of content, so it has been adapted to many purposes.</para>
+            <para>The core DocBook standard is the <glossterm>DocBook Document Type Definition
+            (DTD)</glossterm> maintained by the DocBook Technical Committee in <indexterm>
+                <primary>OASIS</primary> </indexterm><link
+                xmlns:xlink="http://www.w3.org/1999/xlink"
+                xlink:href="http://www.oasis-open.org/docbook"
+                >OASIS</link>. The DTD
+        defines the vocabulary of content elements that an author can use and how they
+        relate to each other. For example, a <literal>book</literal> element can contain a
+            <literal>title</literal> element, any number of <literal>para</literal> elements
+        for paragraphs, and any number of <literal>chapter</literal> elements. Using the DTD
+        and XML syntax, authors mark up their text content with tag names enclosed in angle
+        brackets like <literal>&lt;chapter&gt;</literal>. The markup is similar to
+        HTML, but with more tags and tighter rules.</para>
+            <para>Text that is marked up in this standard way can be processed by any number of
+        software tools. A major advantage of DocBook is the availability of DocBook tools
+        from many sources, not just from a single vendor of a proprietary file format. You
+        can mix and match components for editing, typesetting, version control, and HTML
+        conversion. You can assemble a custom system that is well suited to your needs, and
+        many of the components are available for free.</para>
+            <para>The other major advantage of DocBook is the set of free stylesheets that are
+        available for it. Written by Norman Walsh in the Extensible Stylesheet Language
+        (XSL), these stylesheets enable anyone to publish their DocBook content in print and
+        HTML. The stylesheets are now developed and maintained as an open-source project on
+        <link
+                xmlns:xlink="http://www.w3.org/1999/xlink"
+                xlink:href="http://sourceforge.net/projects/docbook">SourceForge</link><indexterm>
+                <primary>SourceForge</primary>
+                </indexterm>. An active community of users and contributors keeps up the development
+        of the stylesheets and answers questions.</para>
+            <para>As a publishing system, DocBook is best suited for any of these situations:</para>
+            <itemizedlist>
+                <listitem>
+                    <para>Large quantities of content.</para>
+                </listitem>
+                <listitem>
+                    <para>Highly structured content.</para>
+                </listitem>
+                <listitem>
+                    <para>Content that needs to be interchanged among otherwise incompatible
+                systems.</para>
+                </listitem>
+                <listitem>
+                    <para>Content that needs automated batch processing.</para>
+                </listitem>
+                <listitem>
+                    <para>Content to be rendered in multiple output forms and versions.</para>
+                </listitem>
+            </itemizedlist>
+            <para>DocBook is not a WYSIWYG word processor (although graphical editors are available
+        for DocBook). DocBook is hardly worth the trouble for short or one-off documents.
+        And since the formatting is strictly by batch process with stylesheets, DocBook is
+        not well matched to highly designed layout-driven content like magazines.</para>
+            <para>DocBook is well suited to any collection of technical documentation that is
+        regularly maintained and published. Because you are not locked into a single vendor,
+        you have flexibility in your choice of processes and tools, both now and in the
+        future. Multiple authors can contribute, and their content can easily be merged
+        because all the authors are using a standard markup language. The files are plain
+        text, not binary, so they also work well with most version control systems.</para>
+            <para>Setting up a DocBook system will take some time and effort. But the payoff will be
+        an efficient, flexible, and inexpensive publishing system that can grow with your
+        needs.</para>
+        </section>
+        <section xml:id="Audience">
+            <title>Audience</title>
+            <para>This book is for people who want to publish DocBook XML files using the DocBook
+        XSL stylesheets. It is a "how to" guide that gets you up and running quickly, and
+        then provides the details you need to gain access to the full power of DocBook. The
+        book covers:</para>
+            <itemizedlist>
+                <listitem>
+                    <para>Obtaining and setting up XSL tools and the DocBook XSL stylesheets.</para>
+                </listitem>
+                <listitem>
+                    <para>Using the built-in options to control the XSL stylesheets.</para>
+                </listitem>
+                <listitem>
+                    <para>Customizing the XSL stylesheets to match your design needs.</para>
+                </listitem>
+            </itemizedlist>
+            <para>(This book does not cover the SGML version of DocBook, nor the DocBook DSSSL
+        stylesheets.) </para>
+            <para>You do not need to be an XML expert to use DocBook XSL. You will need to know
+        about XML elements and attributes, since you will be working with DocBook XML files.
+        And you will need to know how to execute commands by typing them on a command line
+        rather than through a point-and-click interface. If you know nothing about XSL, you
+        can still use the stylesheets to generate high-quality output. You can also
+        customize to a degree using the built-in stylesheet parameters. Learning some XSL
+        will enable you to more fully customize the output. This book can teach you basic
+        XSL, and provides dozens of examples that you can use and learn from.</para>
+            <para>This book will not show you how to write DocBook documents. The best reference for
+        writing in DocBook is <citetitle>DocBook: The Definitive Guide</citetitle> by Norman
+        Walsh. That book has been made available by O'Reilly Books for reading from the web
+        at <link
+                xmlns:xlink="http://www.w3.org/1999/xlink"
+                xlink:href="http://docbook.org/tdg/en/html/docbook.html"
+                />. Keep that link
+        bookmarked for future reference. A printed and bound version of the book is also
+        available from O'Reilly Books, but it is a bit out of date now. The online book
+        documents the most recent version of the DTD.</para>
+        </section>
+    </preface>
+    <part xml:id="ToolsPart">
+        <title>Setting up the tools</title>
+        <chapter xml:id="introchapter">
+            <title>Introduction</title>
+            <para>The <link xmlns:xlink="http://www.w3.org/1999/xlink"
+                xlink:href="http://www.w3.org/Style/XSL/">
+                <citetitle>Extensible Stylesheet Language (XSL)</citetitle>
+                </link> is a formal Recommendation put forward by the <link
+                xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.w3.org"
+                >World Wide Web Consortium (W3C)</link> as a language
+        for expressing stylesheets. It complements the <link
+                xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.w3.org/XML/">
+                <citetitle>Extensible Markup Language (XML)</citetitle>
+                </link> by providing the methods for formatting content written in XML. One of the
+        major goals of XML was keeping content and its semantic markup separate from its
+        formatting, so that formatting could be applied independently. An XSL stylesheet
+        describes the formatting that can be applied to XML files using an XSL processor.
+        The XSL standard and XSL processors are described more fully in <xref
+                linkend="XSLprocessors"/>.</para>
+            <para>The DocBook XSL stylesheets were written by Norman Walsh to help people publish
+        their DocBook content with XSL. The stylesheets are now an open-source project
+        maintained on <link
+                xmlns:xlink="http://www.w3.org/1999/xlink"
+                xlink:href="http://sourceforge.net/projects/docbook/"
+                >SourceForge</link>. The stylesheet distribution consists of a collection of
+        modular XSL files that are assembled into several complete XSL stylesheets. There is
+        a stylesheet for generating a single HTML file, and one for generating multiple
+        smaller HTML files from a single DocBook document. There are stylesheets for print
+        output, XHTML output, HTML Help output, and JavaHelp output. The stylesheet
+        collection is freely available for download. Since there are XSL processors for all
+        major computer types, you can use DocBook on Unix, Linux, Windows, and Macintosh
+        computers.</para>
+            <para>This book shows you how to use and customize the DocBook XSL stylesheets. It
+        unlocks the power of these stylesheets by documenting all of their features and
+        making them easy to use.</para>
+            <section xml:id="HowOrganized">
+                <title>How this book is organized</title>
+                <para>Applying an XSL stylesheet to an XML file is a very straightforward process,
+        once you get the tools working. <emphasis
+                    role="bold"
+                    >Part I</emphasis> of this
+        book tells you how to obtain and set up the XSL tools. It covers several XSL
+        processors, and provides essential details for each one. It also covers XML
+        Catalogs, which are used to map file references to actual directory locations on
+        your system. XML Catalogs make the tools more versatile and portable.</para>
+                <para> Once you have the tools working, you can generate formatted print and HTML
+        output from your DocBook XML documents. As you use the stylesheets, you will
+        probably want to change certain aspects about the format or processing. The
+        DocBook stylesheets provide a large number of options. The options are in the
+        form of stylesheet parameters, which let you assign a value to a named variable
+        that is used in the stylesheet. You can do quite a bit of customization of your
+        output using just the parameters. <emphasis
+                    role="bold"
+                    >Part II</emphasis> of
+        this book describes the various stylesheet parameters and how to use them. </para>
+                <para>You will turn to <emphasis role="bold"
+                    >Part III</emphasis> when you want to
+        change something but you cannot find a parameter to do it. At that point you
+        will need to do some stylesheet customization, which is done using the XSL
+        language. You'll need to learn the syntax and methods of XSL, so that you can
+        write a customization file with it. The chapters in Part III describe the
+        methods of customization, as well as many applications for HTML and print
+        output. You can use the appendix introducing XSL  to get started with XSL, but it
+        is beyond the scope of this book to teach you all about XSL. You will need a
+        good XSL reference book to create extensive customization. You can also use
+            the appendix on debugging XSL  for help with debugging your
+        customizations.</para>
+                <para><emphasis role="bold"
+                    >Part IV</emphasis> of this book covers all of the
+        special features of DocBook that require extra attention. That part is an
+        encyclopedia of special topics, from bibliographies to websites. Use it as a
+        reference when you need to process a certain feature, or browse it for new
+        possibilities that you did not know DocBook could do.</para>
+                <note>
+                    <title>Note on examples</title>
+                    <para><indexterm> <primary>backslash</primary>
+                        <secondary>in examples</secondary>
+                        </indexterm>Some examples of commands and code in this book are too long to
+            fit on one line. Where a long line is broken to fit, the line will end with
+            a backslash character "\". If you are using Microsoft Windows, you should
+            omit the backslash character and join such a line to the following line. If
+            you are using a Unix shell, you can use the example "as is".</para>
+                </note>
+            </section>
+            <section xml:id="OnlineResources">
+                <title>Online resources for finding solutions to problems</title>
+                <para><indexterm> <primary>online resources</primary>
+                    </indexterm>If you run into problems with the DocBook XSL stylesheets that are
+            not addressed anywhere in this guide, you can use a number of online resources
+            to find solutions. <itemizedlist>
+                    <listitem> <para><indexterm> <primary>mailing lists</primary>
+                    </indexterm><indexterm> <primary>docbook-apps mailing list</primary>
+                    </indexterm>First try searching the archives of the <systemitem
+                    role="mailinglist"
+                    >docbook-apps</systemitem> mailing list for
+                        keywords related to the problem. There is a good chance that someone
+                        else has run into something similar. Archives of the list are
+                        available at two different sites: an <link
+                    xmlns:xlink="http://www.w3.org/1999/xlink"
+                    xlink:href="http://lists.oasis-open.org/archives/docbook-apps/"
+                    >archive
+                            at OASIS</link> (which also hosts the actual mailing list) and
+                        an <link
+                    xmlns:xlink="http://www.w3.org/1999/xlink"
+                    xlink:href="http://sources.redhat.com/ml/docbook-apps/"
+                    >archive
+                            at Red Hat</link>.</para>
+                    <para>If, for example, you are seeing a specific error message, trying
+                        cutting and pasting the error message (or some part of it) into the
+                        search form for the mailing list archives.</para>
+                    </listitem> <listitem> <para><indexterm> <primary>chat channel</primary>
+                    </indexterm><indexterm> <primary>IRC channel</primary>
+                    </indexterm>You can get help in real time on the <systemitem role="channel"
+                    >#docbook</systemitem> channel on <systemitem class="fqdomainname"
+                    >irc.openprojects.net</systemitem>. If your
+                        browser supports IRC URLs (or, like Mozilla, has a built-in IRC
+                        client), you can access the channel by entering the following URL in
+                        your browser: <blockquote>
+                    <simpara> <link xmlns:xlink="http://www.w3.org/1999/xlink"
+                    xlink:href="irc://irc.openprojects.net#docbook"/> </simpara> </blockquote>
+                    </para> </listitem> <listitem>
+                    <para>If you cannot find a solution in the <systemitem role="mailinglist"
+                    >docbook-apps</systemitem> or on the
+                            <systemitem
+                    role="channel"
+                    >#docbook</systemitem>, you should try
+                        posting a question to <systemitem
+                    role="mailinglist"
+                    >docbook-apps</systemitem>. To subscribe to the list, send a
+                        message from your email account to: <blockquote>
+                    <simpara> <email>docbook-apps-subscribe@lists.oasis-open.org</email> </simpara>
+                    </blockquote> To post a message to the list, send it to: <blockquote> <simpara>
+                    <email>docbook-apps@lists.oasis-open.org</email> </simpara> </blockquote>
+                    </para> <para>Please read the <link xmlns:xlink="http://www.w3.org/1999/xlink"
+                    xlink:href="http://www.oasis-open.org/docbook/mailinglist/guidelines.html"
+                    >list guidelines</link> first, and to include examples of your
+                        DocBook source document and your output (for example, HTML or FO
+                        output) along with details about the tools you're using (including
+                        version numbers of the tools). <note>
+                    <simpara>Do not include attachments when you post to <systemitem
+                    role="mailinglist"
+                    >docbook-apps</systemitem>—the mailing
+                                list management software automatically strips out
+                                attachments. If you have a long example or an output format
+                                that you cannot paste into your message, post it to a Web
+                                site, and then include the URL in your message to the
+                                list.</simpara>
+                    </note> </para> </listitem> <listitem> <para>The <link
+                    xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://wiki.docbook.org"
+                    >DocBook Wiki</link>
+                        website collects contributions from DocBook users and makes them
+                        available to the world.</para>
+                    </listitem> <listitem> <para><indexterm> <primary>SourceForge</primary>
+                    </indexterm><indexterm> <primary>DocBook</primary>
+                    <secondary>SourceForge</secondary>
+                    </indexterm>If you find something that seems to be a legitimate bug
+                        in the DocBook XSL stylesheets, you can file a bug report from the
+                            <link
+                    xmlns:xlink="http://www.w3.org/1999/xlink"
+                    xlink:href="http://sourceforge.net/tracker/?group_id=21935"
+                    >Tracker page</link> at the <link xmlns:xlink="http://www.w3.org/1999/xlink"
+                    xlink:href="https://sourceforge.net/projects/docbook/"
+                    >DocBook Open
+                            Repository</link> site at SourceForge. If instead you want to
+                        request an enhancement to the stylesheets, file a <emphasis>feature
+                            request</emphasis> from the same Tracker page at the SourceForge
+                        site. <note>
+                    <simpara>You will need to have a SourceForge user account to
+                                file a bug report or feature request. This requirement makes
+                                it easier follow up on bug reports. If the DocBook XSL
+                                stylesheet developers need to get more details about a
+                                specific bug report, it's difficult to follow up on it if it
+                                was submitted anonymously.</simpara>
+                    <simpara>You can <link xmlns:xlink="http://www.w3.org/1999/xlink"
+                    xlink:href="https://sourceforge.net/account/registration"
+                    >register for an account</link> at the SourceForge
+                                site.</simpara>
+                    </note> </para> </listitem> </itemizedlist> </para>
+            </section>
+        </chapter>
+        <chapter xml:id="XSLprocessors">
+            <title>XSL processors</title>
+            <para><indexterm> <primary>XSL</primary> <secondary>processors</secondary>
+                </indexterm>An <emphasis>XSL processor</emphasis> is the software that transforms an
+        XML file into formatted output. There is a growing list of XSL processors to choose
+        from. Each tool implements parts or all of the XSL standard, which actually has
+        several components: <variablelist>
+                <title>The XSL Standards</title> <varlistentry>
+                <term>Extensible Stylesheet Language (XSL)</term> <listitem>
+                <para>A language for expressing stylesheets written in XML. It includes
+                        the XSL formatting objects (XSL-FO) language, but refers to separate
+                        documents for the transformation language and the path
+                        language.</para>
+                </listitem> </varlistentry> <varlistentry> <term>XSL Transformation (XSLT)</term>
+                <listitem>
+                <para>The part of XSL for transforming XML documents into other XML
+                        documents, HTML, or text. It can be used to rearrange the content
+                        and generate new content.</para>
+                </listitem> </varlistentry> <varlistentry> <term>XML Path Language (XPath)</term>
+                <listitem>
+                <para>A language for addressing parts of an XML document. It is used to
+                        find the parts of your document to apply different styles to. All
+                        XSL processors use this component.</para>
+                </listitem> </varlistentry> </variablelist></para>
+            <para>To publish HTML from your XML documents, you just need an XSLT processor. It will include the XPath
+        language since that is used extensively in XSLT. To get to print, you need an XSLT
+        processor to produce an intermediate formatting objects (FO) file, and then you need
+        an XSL-FO processor to produce
+        PostScript or PDF output from the FO file. A diagram of the <link
+                xmlns:xlink="http://www.w3.org/1999/xlink"
+                xlink:href="http://nwalsh.com/docbook/procdiagram/index.html"
+                >DocBook Publishing
+            Model</link> <indexterm>
+                <primary>publishing model</primary>
+                </indexterm>is available if you want to see how all the components flow
+        together.</para>
+            <section xml:id="XSLTprocessors">
+                <title>XSLT processors</title>
+                <para><indexterm> <primary>XSLT processor</primary>
+                    </indexterm>Currently there are three processors that are widely used for XSLT
+        processing because they most closely conform to the XSLT specification: <variablelist>
+                    <varlistentry> <term>Saxon</term> <listitem> <para><indexterm>
+                    <primary>Saxon</primary> </indexterm>Saxon (<link
+                    xmlns:xlink="http://www.w3.org/1999/xlink"
+                    xlink:href="http://saxon.sourceforge.net/"
+                    />)
+                        was written by Michael Kay, the author of <citetitle>XSLT
+                            Reference</citetitle>, one of the best books on XSLT. Saxon
+                        is a free processor written in Java, so it can be run on any
+                        operating system with a modern Java interpreter. Saxon now comes
+                        in two flavors: Saxon 6 which handles the XSLT 1.0 standard, and
+                        Saxon 8 which handles the newly emerging XSLT 2.0 and other new
+                        XML standards.</para>
+                    </listitem> </varlistentry> <varlistentry> <term>Xalan</term> <listitem>
+                    <para><indexterm> <primary>Xalan</primary> </indexterm>Xalan (<link
+                    xmlns:xlink="http://www.w3.org/1999/xlink"
+                    xlink:href="http://xml.apache.org/xalan-j/index.html"
+                    />) is part of
+                        the Apache XML Project. It has versions written in both Java and
+                        C++, both of them free. The Java version is described in this
+                        book because it is highly portable and easier to set up.
+                        Generally Xalan is used with the Xerces XML parser, also
+                        available from the Apache XML Project.</para>
+                    </listitem> </varlistentry> <varlistentry> <term>xsltproc</term> <listitem>
+                    <indexterm> <primary>xsltproc</primary> </indexterm> <para>The xsltproc (<link
+                    xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://xmlsoft.org/XSLT/"
+                    />)
+                        processor is written in C by Daniel Veillard. It is free, as
+                        part of the open source libxml2 library from the Gnome
+                        development project. It is considered the fastest of the
+                        processors, and is highly conformant to the specification. It is
+                        much faster than either of the Java processors. It also
+                        processes XIncludes.</para>
+                    </listitem> </varlistentry> </variablelist></para>
+                <para>There are a few other XSLT processors that should also be mentioned: <variablelist>
+                    <varlistentry> <term>XT</term> <listitem> <para>James Clark's XT (<link
+                    xmlns:xlink="http://www.w3.org/1999/xlink"
+                    xlink:href="http://www.blnz.com/xt/index.html"
+                    />) was the first
+                        useful XSLT engine, and it is still in use. It is written in
+                        Java, so it runs on many platforms, and it is free. XT comes
+                        with James Clark's nonvalidating parser XP, but you can
+                        substitute a different Java parser.</para>
+                    </listitem> </varlistentry> <varlistentry> <term>MSXML</term> <listitem>
+                    <para>Microsoft's MSXML (<link xmlns:xlink="http://www.w3.org/1999/xlink"
+                    xlink:href="http://msdn.microsoft.com/xml/"
+                    />) engine includes an XSLT processor. It is reported to be
+                        fast, but only runs on Windows.</para>
+                    </listitem> </varlistentry> <varlistentry> <term>Sablotron</term> <listitem>
+                    <para>Sablotron (<link xmlns:xlink="http://www.w3.org/1999/xlink"
+                    xlink:href="http://www.gingerall.com/charlie/ga/xml/p_sab.xml"
+                    />),
+                        written in C++, from Ginger Alliance.</para>
+                    </listitem> </varlistentry> <varlistentry> <term>4XSLT</term> <listitem>
+                    <para>4XSLT (<link xmlns:xlink="http://www.w3.org/1999/xlink"
+                    xlink:href="http://sourceforge.net/projects/foursuite/"
+                    />), written in Python, now an open project on
+                        SourceForge.</para>
+                    </listitem> </varlistentry> </variablelist></para>
+            </section>
+            <section xml:id="FOprocessors">
+                <title>XSL-FO processors</title>
+                <para><indexterm> <primary>XSL-FO processor</primary>
+                    </indexterm>XSL-FO processors are really typesetting engines. An XSL-FO file is
+        a mixture of text from your XML source document and XSL-FO tags that suggest how
+        the text should be formatted. It is the XSL-FO processor that actually creates
+        the typeset lines of text and lays them out on pages. An XSL-FO processor
+        typically generates a PDF or PostScript file which can be fed to a printer to
+        produce hardcopy output.</para>
+                <para>Currently there are many XSL-FO processors, but few of them have completely
+        implemented the standard. There are at least three reasons for this: <itemizedlist>
+                    <listitem>
+                    <para>The XSL-FO standard was finalized almost two years after the XSLT
+                    standard.</para>
+                    </listitem> <listitem> <para>The XSL-FO standard is big and complicated.</para>
+                    </listitem> <listitem> <para>Typesetting is hard.</para> </listitem>
+                    </itemizedlist></para>
+                <para>The authors of the XSL-FO standard recognized how difficult it would be to
+        implement, and so divided it into three levels of conformance: basic, extended,
+        and complete. That way a processor can claim conformance to the lower
+        conformance levels and produce useful output, while still be under development
+        for the higher conformance levels.</para>
+                <para>Here are some of the currently available XSL-FO processors, listed in
+        alphabetical order. FOP, PassiveTeX, and xmlroff are the free processors, but
+        the commercial products implement more of the XSL-FO standard.</para>
+                <variablelist>
+                    <varlistentry>
+                        <term>E3</term>
+                        <listitem>
+                            <para><indexterm> <primary>E3 FO processor</primary>
+                                </indexterm><indexterm> <primary>Arbortext</primary>
+                                </indexterm>High end publishing server from Arbortext, Inc. (<link
+                                xmlns:xlink="http://www.w3.org/1999/xlink"
+                                xlink:href="http://www.arbortext.com"
+                                />). It runs on Windows and
+                    Unix.</para>
+                        </listitem>
+                    </varlistentry>
+                    <varlistentry>
+                        <term>FOP</term>
+                        <listitem>
+                            <para><indexterm> <primary>FOP</primary>
+                                </indexterm>FOP is a Java-based processor available free from the
+                    Apache XML Project (<link
+                                xmlns:xlink="http://www.w3.org/1999/xlink"
+                                xlink:href="http://xml.apache.org/fop/"
+                                />). FOP
+                    can produce usable output, but it is still under development and has
+                    some limitations. </para>
+                        </listitem>
+                    </varlistentry>
+                    <varlistentry>
+                        <term>PassiveTeX</term>
+                        <listitem>
+                            <para><indexterm> <primary>PassiveTeX</primary>
+                                </indexterm>PassiveTeX from Sebastian Rahtz (<link
+                                xmlns:xlink="http://www.w3.org/1999/xlink"
+                                xlink:href="http://www.tei-c.org.uk/Software/passivetex/"
+                                />) is a free
+                    XSL-FO processor based on TeX. It has fallen behind in its
+                    implementation of the XSL-FO specification, and many features of
+                    DocBook XSL do not work in PassiveTeX. Not recommended.</para>
+                        </listitem>
+                    </varlistentry>
+                    <varlistentry>
+                        <term>Unicorn Formatting Objects</term>
+                        <listitem>
+                            <para><indexterm> <primary>Unicorn Formatting Objects</primary>
+                                </indexterm>A commercial product from Unicorn Enterprises SA (<link
+                                xmlns:xlink="http://www.w3.org/1999/xlink"
+                                xlink:href="http://www.unicorn-enterprises.com"
+                                />). Implements only a
+                    subset of the XSL-FO standard. For Windows only.</para>
+                        </listitem>
+                    </varlistentry>
+                    <varlistentry>
+                        <term>XEP</term>
+                        <listitem>
+                            <para><indexterm> <primary>XEP</primary>
+                                </indexterm>A commercial product from RenderX <indexterm>
+                                <primary>RenderX</primary> </indexterm>(<link
+                                xmlns:xlink="http://www.w3.org/1999/xlink"
+                                xlink:href="http://www.renderx.com"
+                                />). It is a
+                    Java-based product that runs on most platforms.</para>
+                        </listitem>
+                    </varlistentry>
+                    <varlistentry>
+                        <term>Xinc</term>
+                        <listitem>
+                            <para><indexterm> <primary>Xinc FO processor</primary>
+                                </indexterm>A commercial product from Lunasil LTD (<link
+                                xmlns:xlink="http://www.w3.org/1999/xlink"
+                                xlink:href="http://www.lunasil.com/"
+                                />). It is a Java-based product
+                    that runs on Linux and Windows. </para>
+                        </listitem>
+                    </varlistentry>
+                    <varlistentry>
+                        <term>XML2PDF</term>
+                        <listitem>
+                            <para><indexterm> <primary>XML2PDF</primary>
+                                </indexterm>A commercial product from Altsoft (<link
+                                xmlns:xlink="http://www.w3.org/1999/xlink"
+                                xlink:href="http://www.alt-soft.com/"/>). For Windows only.</para>
+                        </listitem>
+                    </varlistentry>
+                    <varlistentry>
+                        <term> XML Professional Publisher (XPP)</term>
+                        <listitem>
+                            <para><indexterm> <primary>XPP FO processor</primary>
+                                </indexterm>A high-end XML publishing environment from XyEnterprise
+                        (<link
+                                xmlns:xlink="http://www.w3.org/1999/xlink"
+                                xlink:href="http://www.xyenterprise.com/"
+                                />). It runs on
+                    Windows and Unix.</para>
+                        </listitem>
+                    </varlistentry>
+                    <varlistentry>
+                        <term>xmlroff</term>
+                        <listitem>
+                            <para><indexterm> <primary>xmlroff</primary> </indexterm>xmlroff (<link
+                                xmlns:xlink="http://www.w3.org/1999/xlink"
+                                xlink:href="http://xmlroff.sourceforge.net/"
+                                />)
+                    is a free open source project based on libxml2 and other GNOME
+                    libraries. It is written in C.</para>
+                        </listitem>
+                    </varlistentry>
+                    <varlistentry>
+                        <term>XSL Formatter</term>
+                        <listitem>
+                            <para><indexterm> <primary>XSL Formatter</primary>
+                                <see>Antenna House</see> </indexterm><indexterm>
+                                <primary>Antenna House</primary>
+                                </indexterm>A commercial product from Antenna House (<link
+                                xmlns:xlink="http://www.w3.org/1999/xlink"
+                                xlink:href="http://www.antennahouse.com"
+                                />). It runs on Windows, Unix,
+                    and Linux.</para>
+                        </listitem>
+                    </varlistentry>
+                    <varlistentry>
+                        <term>other</term>
+                        <listitem>
+                            <para>Other XSL-FO processors are listed on the <link
+                                xmlns:xlink="http://www.w3.org/1999/xlink"
+                                xlink:href="http://www.w3.org/Style/XSL/"
+                                >W3C's XSL information
+                        page</link>. </para>
+                        </listitem>
+                    </varlistentry>
+                </variablelist>
+                <para>A useful method for evaluating an XSL-FO processor is to review its compliance
+        to the XSL-FO standard. Most processor vendors can provide a summary of which
+        XSL-FO elements and properties their processor supports. Scan the list for
+        features you need to see if they are supported. Such summaries are also useful
+        in comparing different processors.</para>
+            </section>
+            <section xml:id="Portability">
+                <title>Portability considerations</title>
+                <para><indexterm> <primary>portability</primary>
+                    </indexterm>If you need to be able to process XML files on more than one
+            operating system, you need to consider how portable the XSL processors
+            are.</para>
+                <itemizedlist>
+                    <listitem>
+                        <para>Java-based processors are highly portable, as long as each platform
+                    has a modern Java interpreter. (How modern depends on the individual
+                    processor and version. Check the processor's requirements list.) With
+                    Saxon, Xalan-Java, FOP, and other Java-based processors, you can install
+                    a few Java archives without any compiling and produce identical results
+                    on Linux, Unix, Windows, and Macintosh.</para>
+                    </listitem>
+                    <listitem>
+                        <para>Processors written in C such as xsltproc and Sablotron are less
+                    portable. You need a version compiled for each platform you want to run
+                    it on. Many are available in precompiled packages, such as RPMs for
+                    Linux or Zip files for Windows. But the packaged versions can lag behind
+                    the latest version, so you may need to compile it yourself for a given
+                    platform. The C code is written to be portable, but there are always
+                    issues that come up when you have to compile.</para>
+                    </listitem>
+                    <listitem>
+                        <para>The PassiveTeX FO processor is unique in that it is written in TeX, a
+                    typesetting language. TeX is also very portable, but it is currently
+                    difficult to get PassiveTeX to work properly with the DocBook XSL
+                    stylesheets</para>
+                    </listitem>
+                </itemizedlist>
+                <para>Another portability consideration is file permissions. Some packages may try
+            to install files into areas of a filesystem controlled by a system
+            administrator. If you do not have the necessary permissions, you may not be able
+            to install a given package. All of the processors can be installed elsewhere,
+            but you may need to spend time figuring out how to do so.</para>
+            </section>
+        </chapter>
+    </part>
+</book>
diff --git a/contrib/samples/assembly/cooked-sample/reassembled.xml b/contrib/samples/assembly/cooked-sample/reassembled.xml
new file mode 100755 (executable)
index 0000000..3d13c19
--- /dev/null
@@ -0,0 +1,254 @@
+<?xml version="1.0"?>
+<book xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="user.guide"><title>DocBook XSL: The Incomplete Sample</title><info><title>DocBook XSL: The Incomplete Sample</title><author><personname>
+                <firstname>Bob</firstname>
+                <surname>Stayton</surname>
+            </personname></author><publishername>Sagehill Enterprises</publishername><copyright><year>2002</year><year>2003</year><year>2004</year><year>2005</year><year>2006</year><year>2007</year><holder>Sagehill
+Enterprises</holder></copyright><biblioid class="isbn">ISBN: 978-0-9741521-3-4</biblioid><edition>Fourth</edition><pubdate>September, 2007</pubdate><releaseinfo>A PDF version of this document is available for purchase
+from <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.sagehill.net">Sagehill Enterprises</link>.
+</releaseinfo><legalnotice><para>All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording, or by any information storage and retrieval system, without written permission from the publisher, except for the inclusion of brief quotations in a review.</para></legalnotice><legalnotice><title>Warning and Disclaimer</title><para>Every effort has been made to make this book as complete and accurate as possible, but Sagehill Enterprises makes no warranties, either express or implied, regarding the content or its fitness for any particular purpose.  The information is provided on an as-is basis. The author and Sagehill Enterprises shall have neither liability nor responsibility to any person or entity with respect to any loss or damages arising from the information contained in this book.</para><para>This guide contains links to third-party Web sites that are not under the control of Sagehill Enterprises, and Sagehill Enterprises and the author are not responsible for the content of any linked site. If you access a third-party website mentioned in this guide, then you do so at your own risk. Sagehill Enterprises provides these links only as a convenience, and the inclusion of the link does not imply that Sagehill Enterprises or the author endorses or accepts any responsibility for the content of those third-party sites.</para></legalnotice><legalnotice><title>Trademarks</title><para>All terms mentioned in this book that are known to be trademarks or service marks have been appropriately capitalized. Use of a term in this book should not be regarded as affecting the validity of any trademark or service mark.</para></legalnotice><publisher><publishername>Sagehill
+Enterprises</publishername><address><street>PO Box 2911</street>
+<city>Santa Cruz</city> <state>CA</state>
+<postcode>95063-2911</postcode>
+<otheraddr>Website: 
+<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.sagehill.net"/></otheraddr>
+<email>info@sagehill.net</email></address></publisher></info><preface xml:id="preface"><info><title>Preface</title></info><para>The nature of publishing has changed so much over the last twenty years that anybody
+    can be a publisher these days. Now you can reach a world-wide audience by putting a few
+    HTML pages up on your website. Or you can use desktop publishing software to produce
+    beautifully typeset material that can be printed on demand or downloaded to a printer
+    anywhere in the world. With DocBook, you can publish both ways from the same source
+    material.</para><section xml:id="WhatIsDocbook"><info><title>What is DocBook?</title></info><para>DocBook is a collection of standards and tools for technical publishing. DocBook
+        was originally created by a consortium of software companies as a standard for
+        computer documentation. But the basic <quote>book</quote> features of DocBook can be
+        used for other kinds of content, so it has been adapted to many purposes.</para><para>The core DocBook standard is the <glossterm>DocBook Document Type Definition
+            (DTD)</glossterm> maintained by the DocBook Technical Committee in <indexterm><primary>OASIS</primary></indexterm><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.oasis-open.org/docbook">OASIS</link>. The DTD
+        defines the vocabulary of content elements that an author can use and how they
+        relate to each other. For example, a <literal>book</literal> element can contain a
+            <literal>title</literal> element, any number of <literal>para</literal> elements
+        for paragraphs, and any number of <literal>chapter</literal> elements. Using the DTD
+        and XML syntax, authors mark up their text content with tag names enclosed in angle
+        brackets like <literal>&lt;chapter&gt;</literal>. The markup is similar to
+        HTML, but with more tags and tighter rules.</para><para>Text that is marked up in this standard way can be processed by any number of
+        software tools. A major advantage of DocBook is the availability of DocBook tools
+        from many sources, not just from a single vendor of a proprietary file format. You
+        can mix and match components for editing, typesetting, version control, and HTML
+        conversion. You can assemble a custom system that is well suited to your needs, and
+        many of the components are available for free.</para><para>The other major advantage of DocBook is the set of free stylesheets that are
+        available for it. Written by Norman Walsh in the Extensible Stylesheet Language
+        (XSL), these stylesheets enable anyone to publish their DocBook content in print and
+        HTML. The stylesheets are now developed and maintained as an open-source project on
+        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://sourceforge.net/projects/docbook">SourceForge</link><indexterm><primary>SourceForge</primary></indexterm>. An active community of users and contributors keeps up the development
+        of the stylesheets and answers questions.</para><para>As a publishing system, DocBook is best suited for any of these situations:</para><itemizedlist><listitem><para>Large quantities of content.</para></listitem><listitem><para>Highly structured content.</para></listitem><listitem><para>Content that needs to be interchanged among otherwise incompatible
+                systems.</para></listitem><listitem><para>Content that needs automated batch processing.</para></listitem><listitem><para>Content to be rendered in multiple output forms and versions.</para></listitem></itemizedlist><para>DocBook is not a WYSIWYG word processor (although graphical editors are available
+        for DocBook). DocBook is hardly worth the trouble for short or one-off documents.
+        And since the formatting is strictly by batch process with stylesheets, DocBook is
+        not well matched to highly designed layout-driven content like magazines.</para><para>DocBook is well suited to any collection of technical documentation that is
+        regularly maintained and published. Because you are not locked into a single vendor,
+        you have flexibility in your choice of processes and tools, both now and in the
+        future. Multiple authors can contribute, and their content can easily be merged
+        because all the authors are using a standard markup language. The files are plain
+        text, not binary, so they also work well with most version control systems.</para><para>Setting up a DocBook system will take some time and effort. But the payoff will be
+        an efficient, flexible, and inexpensive publishing system that can grow with your
+        needs.</para></section><section xml:id="Audience"><info><title>Audience</title></info><para>This book is for people who want to publish DocBook XML files using the DocBook
+        XSL stylesheets. It is a "how to" guide that gets you up and running quickly, and
+        then provides the details you need to gain access to the full power of DocBook. The
+        book covers:</para><itemizedlist><listitem><para>Obtaining and setting up XSL tools and the DocBook XSL stylesheets.</para></listitem><listitem><para>Using the built-in options to control the XSL stylesheets.</para></listitem><listitem><para>Customizing the XSL stylesheets to match your design needs.</para></listitem></itemizedlist><para>(This book does not cover the SGML version of DocBook, nor the DocBook DSSSL
+        stylesheets.) </para><para>You do not need to be an XML expert to use DocBook XSL. You will need to know
+        about XML elements and attributes, since you will be working with DocBook XML files.
+        And you will need to know how to execute commands by typing them on a command line
+        rather than through a point-and-click interface. If you know nothing about XSL, you
+        can still use the stylesheets to generate high-quality output. You can also
+        customize to a degree using the built-in stylesheet parameters. Learning some XSL
+        will enable you to more fully customize the output. This book can teach you basic
+        XSL, and provides dozens of examples that you can use and learn from.</para><para>This book will not show you how to write DocBook documents. The best reference for
+        writing in DocBook is <citetitle>DocBook: The Definitive Guide</citetitle> by Norman
+        Walsh. That book has been made available by O'Reilly Books for reading from the web
+        at <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://docbook.org/tdg/en/html/docbook.html"/>. Keep that link
+        bookmarked for future reference. A printed and bound version of the book is also
+        available from O'Reilly Books, but it is a bit out of date now. The online book
+        documents the most recent version of the DTD.</para></section></preface><part xml:id="ToolsPart"><info><title>Setting up the tools</title></info><chapter xml:id="introchapter"><info><title>Introduction</title></info><para>The <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.w3.org/Style/XSL/">
+                <citetitle>Extensible Stylesheet Language (XSL)</citetitle>
+                </link> is a formal Recommendation put forward by the <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.w3.org">World Wide Web Consortium (W3C)</link> as a language
+        for expressing stylesheets. It complements the <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.w3.org/XML/">
+                <citetitle>Extensible Markup Language (XML)</citetitle>
+                </link> by providing the methods for formatting content written in XML. One of the
+        major goals of XML was keeping content and its semantic markup separate from its
+        formatting, so that formatting could be applied independently. An XSL stylesheet
+        describes the formatting that can be applied to XML files using an XSL processor.
+        The XSL standard and XSL processors are described more fully in <xref linkend="XSLprocessors"/>.</para><para>The DocBook XSL stylesheets were written by Norman Walsh to help people publish
+        their DocBook content with XSL. The stylesheets are now an open-source project
+        maintained on <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://sourceforge.net/projects/docbook/">SourceForge</link>. The stylesheet distribution consists of a collection of
+        modular XSL files that are assembled into several complete XSL stylesheets. There is
+        a stylesheet for generating a single HTML file, and one for generating multiple
+        smaller HTML files from a single DocBook document. There are stylesheets for print
+        output, XHTML output, HTML Help output, and JavaHelp output. The stylesheet
+        collection is freely available for download. Since there are XSL processors for all
+        major computer types, you can use DocBook on Unix, Linux, Windows, and Macintosh
+        computers.</para><para>This book shows you how to use and customize the DocBook XSL stylesheets. It
+        unlocks the power of these stylesheets by documenting all of their features and
+        making them easy to use.</para><section xml:id="HowOrganized"><info><title>How this book is organized</title></info><para>Applying an XSL stylesheet to an XML file is a very straightforward process,
+        once you get the tools working. <emphasis role="bold">Part I</emphasis> of this
+        book tells you how to obtain and set up the XSL tools. It covers several XSL
+        processors, and provides essential details for each one. It also covers XML
+        Catalogs, which are used to map file references to actual directory locations on
+        your system. XML Catalogs make the tools more versatile and portable.</para><para> Once you have the tools working, you can generate formatted print and HTML
+        output from your DocBook XML documents. As you use the stylesheets, you will
+        probably want to change certain aspects about the format or processing. The
+        DocBook stylesheets provide a large number of options. The options are in the
+        form of stylesheet parameters, which let you assign a value to a named variable
+        that is used in the stylesheet. You can do quite a bit of customization of your
+        output using just the parameters. <emphasis role="bold">Part II</emphasis> of
+        this book describes the various stylesheet parameters and how to use them. </para><para>You will turn to <emphasis role="bold">Part III</emphasis> when you want to
+        change something but you cannot find a parameter to do it. At that point you
+        will need to do some stylesheet customization, which is done using the XSL
+        language. You'll need to learn the syntax and methods of XSL, so that you can
+        write a customization file with it. The chapters in Part III describe the
+        methods of customization, as well as many applications for HTML and print
+        output. You can use the appendix introducing XSL  to get started with XSL, but it
+        is beyond the scope of this book to teach you all about XSL. You will need a
+        good XSL reference book to create extensive customization. You can also use
+            the appendix on debugging XSL  for help with debugging your
+        customizations.</para><para><emphasis role="bold">Part IV</emphasis> of this book covers all of the
+        special features of DocBook that require extra attention. That part is an
+        encyclopedia of special topics, from bibliographies to websites. Use it as a
+        reference when you need to process a certain feature, or browse it for new
+        possibilities that you did not know DocBook could do.</para><note><title>Note on examples</title><para><indexterm><primary>backslash</primary><secondary>in examples</secondary></indexterm>Some examples of commands and code in this book are too long to
+            fit on one line. Where a long line is broken to fit, the line will end with
+            a backslash character "\". If you are using Microsoft Windows, you should
+            omit the backslash character and join such a line to the following line. If
+            you are using a Unix shell, you can use the example "as is".</para></note></section><section xml:id="OnlineResources"><info><title>Online resources for finding solutions to problems</title></info><para><indexterm><primary>online resources</primary></indexterm>If you run into problems with the DocBook XSL stylesheets that are
+            not addressed anywhere in this guide, you can use a number of online resources
+            to find solutions. <itemizedlist><listitem><para><indexterm><primary>mailing lists</primary></indexterm><indexterm><primary>docbook-apps mailing list</primary></indexterm>First try searching the archives of the <systemitem role="mailinglist">docbook-apps</systemitem> mailing list for
+                        keywords related to the problem. There is a good chance that someone
+                        else has run into something similar. Archives of the list are
+                        available at two different sites: an <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://lists.oasis-open.org/archives/docbook-apps/">archive
+                            at OASIS</link> (which also hosts the actual mailing list) and
+                        an <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://sources.redhat.com/ml/docbook-apps/">archive
+                            at Red Hat</link>.</para><para>If, for example, you are seeing a specific error message, trying
+                        cutting and pasting the error message (or some part of it) into the
+                        search form for the mailing list archives.</para></listitem><listitem><para><indexterm><primary>chat channel</primary></indexterm><indexterm><primary>IRC channel</primary></indexterm>You can get help in real time on the <systemitem role="channel">#docbook</systemitem> channel on <systemitem class="fqdomainname">irc.openprojects.net</systemitem>. If your
+                        browser supports IRC URLs (or, like Mozilla, has a built-in IRC
+                        client), you can access the channel by entering the following URL in
+                        your browser: <blockquote><simpara> <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="irc://irc.openprojects.net#docbook"/> </simpara></blockquote>
+                    </para></listitem><listitem><para>If you cannot find a solution in the <systemitem role="mailinglist">docbook-apps</systemitem> or on the
+                            <systemitem role="channel">#docbook</systemitem>, you should try
+                        posting a question to <systemitem role="mailinglist">docbook-apps</systemitem>. To subscribe to the list, send a
+                        message from your email account to: <blockquote><simpara> <email>docbook-apps-subscribe@lists.oasis-open.org</email> </simpara></blockquote> To post a message to the list, send it to: <blockquote><simpara>
+                    <email>docbook-apps@lists.oasis-open.org</email> </simpara></blockquote>
+                    </para><para>Please read the <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.oasis-open.org/docbook/mailinglist/guidelines.html">list guidelines</link> first, and to include examples of your
+                        DocBook source document and your output (for example, HTML or FO
+                        output) along with details about the tools you're using (including
+                        version numbers of the tools). <note><simpara>Do not include attachments when you post to <systemitem role="mailinglist">docbook-apps</systemitem>—the mailing
+                                list management software automatically strips out
+                                attachments. If you have a long example or an output format
+                                that you cannot paste into your message, post it to a Web
+                                site, and then include the URL in your message to the
+                                list.</simpara></note> </para></listitem><listitem><para>The <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://wiki.docbook.org">DocBook Wiki</link>
+                        website collects contributions from DocBook users and makes them
+                        available to the world.</para></listitem><listitem><para><indexterm><primary>SourceForge</primary></indexterm><indexterm><primary>DocBook</primary><secondary>SourceForge</secondary></indexterm>If you find something that seems to be a legitimate bug
+                        in the DocBook XSL stylesheets, you can file a bug report from the
+                            <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://sourceforge.net/tracker/?group_id=21935">Tracker page</link> at the <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://sourceforge.net/projects/docbook/">DocBook Open
+                            Repository</link> site at SourceForge. If instead you want to
+                        request an enhancement to the stylesheets, file a <emphasis>feature
+                            request</emphasis> from the same Tracker page at the SourceForge
+                        site. <note><simpara>You will need to have a SourceForge user account to
+                                file a bug report or feature request. This requirement makes
+                                it easier follow up on bug reports. If the DocBook XSL
+                                stylesheet developers need to get more details about a
+                                specific bug report, it's difficult to follow up on it if it
+                                was submitted anonymously.</simpara><simpara>You can <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://sourceforge.net/account/registration">register for an account</link> at the SourceForge
+                                site.</simpara></note> </para></listitem></itemizedlist> </para></section></chapter><chapter xml:id="XSLprocessors"><info><title>XSL processors</title></info><para><indexterm><primary>XSL</primary><secondary>processors</secondary></indexterm>An <emphasis>XSL processor</emphasis> is the software that transforms an
+        XML file into formatted output. There is a growing list of XSL processors to choose
+        from. Each tool implements parts or all of the XSL standard, which actually has
+        several components: <variablelist><title>The XSL Standards</title><varlistentry><term>Extensible Stylesheet Language (XSL)</term><listitem><para>A language for expressing stylesheets written in XML. It includes
+                        the XSL formatting objects (XSL-FO) language, but refers to separate
+                        documents for the transformation language and the path
+                        language.</para></listitem></varlistentry><varlistentry><term>XSL Transformation (XSLT)</term><listitem><para>The part of XSL for transforming XML documents into other XML
+                        documents, HTML, or text. It can be used to rearrange the content
+                        and generate new content.</para></listitem></varlistentry><varlistentry><term>XML Path Language (XPath)</term><listitem><para>A language for addressing parts of an XML document. It is used to
+                        find the parts of your document to apply different styles to. All
+                        XSL processors use this component.</para></listitem></varlistentry></variablelist></para><para>To publish HTML from your XML documents, you just need an XSLT processor. It will include the XPath
+        language since that is used extensively in XSLT. To get to print, you need an XSLT
+        processor to produce an intermediate formatting objects (FO) file, and then you need
+        an XSL-FO processor to produce
+        PostScript or PDF output from the FO file. A diagram of the <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://nwalsh.com/docbook/procdiagram/index.html">DocBook Publishing
+            Model</link> <indexterm><primary>publishing model</primary></indexterm>is available if you want to see how all the components flow
+        together.</para><section xml:id="XSLTprocessors"><info><title>XSLT processors</title></info><para><indexterm><primary>XSLT processor</primary></indexterm>Currently there are three processors that are widely used for XSLT
+        processing because they most closely conform to the XSLT specification: <variablelist><varlistentry><term>Saxon</term><listitem><para><indexterm><primary>Saxon</primary></indexterm>Saxon (<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://saxon.sourceforge.net/"/>)
+                        was written by Michael Kay, the author of <citetitle>XSLT
+                            Reference</citetitle>, one of the best books on XSLT. Saxon
+                        is a free processor written in Java, so it can be run on any
+                        operating system with a modern Java interpreter. Saxon now comes
+                        in two flavors: Saxon 6 which handles the XSLT 1.0 standard, and
+                        Saxon 8 which handles the newly emerging XSLT 2.0 and other new
+                        XML standards.</para></listitem></varlistentry><varlistentry><term>Xalan</term><listitem><para><indexterm><primary>Xalan</primary></indexterm>Xalan (<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://xml.apache.org/xalan-j/index.html"/>) is part of
+                        the Apache XML Project. It has versions written in both Java and
+                        C++, both of them free. The Java version is described in this
+                        book because it is highly portable and easier to set up.
+                        Generally Xalan is used with the Xerces XML parser, also
+                        available from the Apache XML Project.</para></listitem></varlistentry><varlistentry><term>xsltproc</term><listitem><indexterm><primary>xsltproc</primary></indexterm><para>The xsltproc (<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://xmlsoft.org/XSLT/"/>)
+                        processor is written in C by Daniel Veillard. It is free, as
+                        part of the open source libxml2 library from the Gnome
+                        development project. It is considered the fastest of the
+                        processors, and is highly conformant to the specification. It is
+                        much faster than either of the Java processors. It also
+                        processes XIncludes.</para></listitem></varlistentry></variablelist></para><para>There are a few other XSLT processors that should also be mentioned: <variablelist><varlistentry><term>XT</term><listitem><para>James Clark's XT (<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.blnz.com/xt/index.html"/>) was the first
+                        useful XSLT engine, and it is still in use. It is written in
+                        Java, so it runs on many platforms, and it is free. XT comes
+                        with James Clark's nonvalidating parser XP, but you can
+                        substitute a different Java parser.</para></listitem></varlistentry><varlistentry><term>MSXML</term><listitem><para>Microsoft's MSXML (<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://msdn.microsoft.com/xml/"/>) engine includes an XSLT processor. It is reported to be
+                        fast, but only runs on Windows.</para></listitem></varlistentry><varlistentry><term>Sablotron</term><listitem><para>Sablotron (<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.gingerall.com/charlie/ga/xml/p_sab.xml"/>),
+                        written in C++, from Ginger Alliance.</para></listitem></varlistentry><varlistentry><term>4XSLT</term><listitem><para>4XSLT (<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://sourceforge.net/projects/foursuite/"/>), written in Python, now an open project on
+                        SourceForge.</para></listitem></varlistentry></variablelist></para></section><section xml:id="FOprocessors"><info><title>XSL-FO processors</title></info><para><indexterm><primary>XSL-FO processor</primary></indexterm>XSL-FO processors are really typesetting engines. An XSL-FO file is
+        a mixture of text from your XML source document and XSL-FO tags that suggest how
+        the text should be formatted. It is the XSL-FO processor that actually creates
+        the typeset lines of text and lays them out on pages. An XSL-FO processor
+        typically generates a PDF or PostScript file which can be fed to a printer to
+        produce hardcopy output.</para><para>Currently there are many XSL-FO processors, but few of them have completely
+        implemented the standard. There are at least three reasons for this: <itemizedlist><listitem><para>The XSL-FO standard was finalized almost two years after the XSLT
+                    standard.</para></listitem><listitem><para>The XSL-FO standard is big and complicated.</para></listitem><listitem><para>Typesetting is hard.</para></listitem></itemizedlist></para><para>The authors of the XSL-FO standard recognized how difficult it would be to
+        implement, and so divided it into three levels of conformance: basic, extended,
+        and complete. That way a processor can claim conformance to the lower
+        conformance levels and produce useful output, while still be under development
+        for the higher conformance levels.</para><para>Here are some of the currently available XSL-FO processors, listed in
+        alphabetical order. FOP, PassiveTeX, and xmlroff are the free processors, but
+        the commercial products implement more of the XSL-FO standard.</para><variablelist><varlistentry><term>E3</term><listitem><para><indexterm><primary>E3 FO processor</primary></indexterm><indexterm><primary>Arbortext</primary></indexterm>High end publishing server from Arbortext, Inc. (<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.arbortext.com"/>). It runs on Windows and
+                    Unix.</para></listitem></varlistentry><varlistentry><term>FOP</term><listitem><para><indexterm><primary>FOP</primary></indexterm>FOP is a Java-based processor available free from the
+                    Apache XML Project (<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://xml.apache.org/fop/"/>). FOP
+                    can produce usable output, but it is still under development and has
+                    some limitations. </para></listitem></varlistentry><varlistentry><term>PassiveTeX</term><listitem><para><indexterm><primary>PassiveTeX</primary></indexterm>PassiveTeX from Sebastian Rahtz (<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.tei-c.org.uk/Software/passivetex/"/>) is a free
+                    XSL-FO processor based on TeX. It has fallen behind in its
+                    implementation of the XSL-FO specification, and many features of
+                    DocBook XSL do not work in PassiveTeX. Not recommended.</para></listitem></varlistentry><varlistentry><term>Unicorn Formatting Objects</term><listitem><para><indexterm><primary>Unicorn Formatting Objects</primary></indexterm>A commercial product from Unicorn Enterprises SA (<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.unicorn-enterprises.com"/>). Implements only a
+                    subset of the XSL-FO standard. For Windows only.</para></listitem></varlistentry><varlistentry><term>XEP</term><listitem><para><indexterm><primary>XEP</primary></indexterm>A commercial product from RenderX <indexterm><primary>RenderX</primary></indexterm>(<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.renderx.com"/>). It is a
+                    Java-based product that runs on most platforms.</para></listitem></varlistentry><varlistentry><term>Xinc</term><listitem><para><indexterm><primary>Xinc FO processor</primary></indexterm>A commercial product from Lunasil LTD (<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.lunasil.com/"/>). It is a Java-based product
+                    that runs on Linux and Windows. </para></listitem></varlistentry><varlistentry><term>XML2PDF</term><listitem><para><indexterm><primary>XML2PDF</primary></indexterm>A commercial product from Altsoft (<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.alt-soft.com/"/>). For Windows only.</para></listitem></varlistentry><varlistentry><term> XML Professional Publisher (XPP)</term><listitem><para><indexterm><primary>XPP FO processor</primary></indexterm>A high-end XML publishing environment from XyEnterprise
+                        (<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.xyenterprise.com/"/>). It runs on
+                    Windows and Unix.</para></listitem></varlistentry><varlistentry><term>xmlroff</term><listitem><para><indexterm><primary>xmlroff</primary></indexterm>xmlroff (<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://xmlroff.sourceforge.net/"/>)
+                    is a free open source project based on libxml2 and other GNOME
+                    libraries. It is written in C.</para></listitem></varlistentry><varlistentry><term>XSL Formatter</term><listitem><para><indexterm><primary>XSL Formatter</primary><see>Antenna House</see></indexterm><indexterm><primary>Antenna House</primary></indexterm>A commercial product from Antenna House (<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.antennahouse.com"/>). It runs on Windows, Unix,
+                    and Linux.</para></listitem></varlistentry><varlistentry><term>other</term><listitem><para>Other XSL-FO processors are listed on the <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.w3.org/Style/XSL/">W3C's XSL information
+                        page</link>. </para></listitem></varlistentry></variablelist><para>A useful method for evaluating an XSL-FO processor is to review its compliance
+        to the XSL-FO standard. Most processor vendors can provide a summary of which
+        XSL-FO elements and properties their processor supports. Scan the list for
+        features you need to see if they are supported. Such summaries are also useful
+        in comparing different processors.</para></section><section xml:id="Portability"><info><title>Portability considerations</title></info><para><indexterm><primary>portability</primary></indexterm>If you need to be able to process XML files on more than one
+            operating system, you need to consider how portable the XSL processors
+            are.</para><itemizedlist><listitem><para>Java-based processors are highly portable, as long as each platform
+                    has a modern Java interpreter. (How modern depends on the individual
+                    processor and version. Check the processor's requirements list.) With
+                    Saxon, Xalan-Java, FOP, and other Java-based processors, you can install
+                    a few Java archives without any compiling and produce identical results
+                    on Linux, Unix, Windows, and Macintosh.</para></listitem><listitem><para>Processors written in C such as xsltproc and Sablotron are less
+                    portable. You need a version compiled for each platform you want to run
+                    it on. Many are available in precompiled packages, such as RPMs for
+                    Linux or Zip files for Windows. But the packaged versions can lag behind
+                    the latest version, so you may need to compile it yourself for a given
+                    platform. The C code is written to be portable, but there are always
+                    issues that come up when you have to compile.</para></listitem><listitem><para>The PassiveTeX FO processor is unique in that it is written in TeX, a
+                    typesetting language. TeX is also very portable, but it is currently
+                    difficult to get PassiveTeX to work properly with the DocBook XSL
+                    stylesheets</para></listitem></itemizedlist><para>Another portability consideration is file permissions. Some packages may try
+            to install files into areas of a filesystem controlled by a system
+            administrator. If you do not have the necessary permissions, you may not be able
+            to install a given package. All of the processors can be installed elsewhere,
+            but you may need to spend time figuring out how to do so.</para></section></chapter></part></book>
diff --git a/contrib/samples/assembly/cooked-sample/topics/Audience.xml b/contrib/samples/assembly/cooked-sample/topics/Audience.xml
new file mode 100755 (executable)
index 0000000..43fddf4
--- /dev/null
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<topic xmlns="http://docbook.org/ns/docbook" xml:id="Audience"><title>Audience</title><para>This book is for people who want to publish DocBook XML files using the DocBook
+        XSL stylesheets. It is a "how to" guide that gets you up and running quickly, and
+        then provides the details you need to gain access to the full power of DocBook. The
+        book covers:</para><itemizedlist><listitem><para>Obtaining and setting up XSL tools and the DocBook XSL stylesheets.</para></listitem><listitem><para>Using the built-in options to control the XSL stylesheets.</para></listitem><listitem><para>Customizing the XSL stylesheets to match your design needs.</para></listitem></itemizedlist><para>(This book does not cover the SGML version of DocBook, nor the DocBook DSSSL
+        stylesheets.) </para><para>You do not need to be an XML expert to use DocBook XSL. You will need to know
+        about XML elements and attributes, since you will be working with DocBook XML files.
+        And you will need to know how to execute commands by typing them on a command line
+        rather than through a point-and-click interface. If you know nothing about XSL, you
+        can still use the stylesheets to generate high-quality output. You can also
+        customize to a degree using the built-in stylesheet parameters. Learning some XSL
+        will enable you to more fully customize the output. This book can teach you basic
+        XSL, and provides dozens of examples that you can use and learn from.</para><para>This book will not show you how to write DocBook documents. The best reference for
+        writing in DocBook is <citetitle>DocBook: The Definitive Guide</citetitle> by Norman
+        Walsh. That book has been made available by O'Reilly Books for reading from the web
+        at <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://docbook.org/tdg/en/html/docbook.html"/>. Keep that link
+        bookmarked for future reference. A printed and bound version of the book is also
+        available from O'Reilly Books, but it is a bit out of date now. The online book
+        documents the most recent version of the DTD.</para></topic>
diff --git a/contrib/samples/assembly/cooked-sample/topics/FOprocessors.xml b/contrib/samples/assembly/cooked-sample/topics/FOprocessors.xml
new file mode 100755 (executable)
index 0000000..2aa08bb
--- /dev/null
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<topic xmlns="http://docbook.org/ns/docbook" xml:id="FOprocessors"><title>XSL-FO processors</title><para><indexterm><primary>XSL-FO processor</primary></indexterm>XSL-FO processors are really typesetting engines. An XSL-FO file is
+        a mixture of text from your XML source document and XSL-FO tags that suggest how
+        the text should be formatted. It is the XSL-FO processor that actually creates
+        the typeset lines of text and lays them out on pages. An XSL-FO processor
+        typically generates a PDF or PostScript file which can be fed to a printer to
+        produce hardcopy output.</para><para>Currently there are many XSL-FO processors, but few of them have completely
+        implemented the standard. There are at least three reasons for this: <itemizedlist><listitem><para>The XSL-FO standard was finalized almost two years after the XSLT
+                    standard.</para></listitem><listitem><para>The XSL-FO standard is big and complicated.</para></listitem><listitem><para>Typesetting is hard.</para></listitem></itemizedlist></para><para>The authors of the XSL-FO standard recognized how difficult it would be to
+        implement, and so divided it into three levels of conformance: basic, extended,
+        and complete. That way a processor can claim conformance to the lower
+        conformance levels and produce useful output, while still be under development
+        for the higher conformance levels.</para><para>Here are some of the currently available XSL-FO processors, listed in
+        alphabetical order. FOP, PassiveTeX, and xmlroff are the free processors, but
+        the commercial products implement more of the XSL-FO standard.</para><variablelist><varlistentry><term>E3</term><listitem><para><indexterm><primary>E3 FO processor</primary></indexterm><indexterm><primary>Arbortext</primary></indexterm>High end publishing server from Arbortext, Inc. (<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.arbortext.com"/>). It runs on Windows and
+                    Unix.</para></listitem></varlistentry><varlistentry><term>FOP</term><listitem><para><indexterm><primary>FOP</primary></indexterm>FOP is a Java-based processor available free from the
+                    Apache XML Project (<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://xml.apache.org/fop/"/>). FOP
+                    can produce usable output, but it is still under development and has
+                    some limitations. </para></listitem></varlistentry><varlistentry><term>PassiveTeX</term><listitem><para><indexterm><primary>PassiveTeX</primary></indexterm>PassiveTeX from Sebastian Rahtz (<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.tei-c.org.uk/Software/passivetex/"/>) is a free
+                    XSL-FO processor based on TeX. It has fallen behind in its
+                    implementation of the XSL-FO specification, and many features of
+                    DocBook XSL do not work in PassiveTeX. Not recommended.</para></listitem></varlistentry><varlistentry><term>Unicorn Formatting Objects</term><listitem><para><indexterm><primary>Unicorn Formatting Objects</primary></indexterm>A commercial product from Unicorn Enterprises SA (<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.unicorn-enterprises.com"/>). Implements only a
+                    subset of the XSL-FO standard. For Windows only.</para></listitem></varlistentry><varlistentry><term>XEP</term><listitem><para><indexterm><primary>XEP</primary></indexterm>A commercial product from RenderX <indexterm><primary>RenderX</primary></indexterm>(<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.renderx.com"/>). It is a
+                    Java-based product that runs on most platforms.</para></listitem></varlistentry><varlistentry><term>Xinc</term><listitem><para><indexterm><primary>Xinc FO processor</primary></indexterm>A commercial product from Lunasil LTD (<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.lunasil.com/"/>). It is a Java-based product
+                    that runs on Linux and Windows. </para></listitem></varlistentry><varlistentry><term>XML2PDF</term><listitem><para><indexterm><primary>XML2PDF</primary></indexterm>A commercial product from Altsoft (<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.alt-soft.com/"/>). For Windows only.</para></listitem></varlistentry><varlistentry><term> XML Professional Publisher (XPP)</term><listitem><para><indexterm><primary>XPP FO processor</primary></indexterm>A high-end XML publishing environment from XyEnterprise
+                        (<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.xyenterprise.com/"/>). It runs on
+                    Windows and Unix.</para></listitem></varlistentry><varlistentry><term>xmlroff</term><listitem><para><indexterm><primary>xmlroff</primary></indexterm>xmlroff (<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://xmlroff.sourceforge.net/"/>)
+                    is a free open source project based on libxml2 and other GNOME
+                    libraries. It is written in C.</para></listitem></varlistentry><varlistentry><term>XSL Formatter</term><listitem><para><indexterm><primary>XSL Formatter</primary><see>Antenna House</see></indexterm><indexterm><primary>Antenna House</primary></indexterm>A commercial product from Antenna House (<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.antennahouse.com"/>). It runs on Windows, Unix,
+                    and Linux.</para></listitem></varlistentry><varlistentry><term>other</term><listitem><para>Other XSL-FO processors are listed on the <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.w3.org/Style/XSL/">W3C's XSL information
+                        page</link>. </para></listitem></varlistentry></variablelist><para>A useful method for evaluating an XSL-FO processor is to review its compliance
+        to the XSL-FO standard. Most processor vendors can provide a summary of which
+        XSL-FO elements and properties their processor supports. Scan the list for
+        features you need to see if they are supported. Such summaries are also useful
+        in comparing different processors.</para></topic>
diff --git a/contrib/samples/assembly/cooked-sample/topics/HowOrganized.xml b/contrib/samples/assembly/cooked-sample/topics/HowOrganized.xml
new file mode 100755 (executable)
index 0000000..8e66d83
--- /dev/null
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<topic xmlns="http://docbook.org/ns/docbook" xml:id="HowOrganized"><title>How this book is organized</title><para>Applying an XSL stylesheet to an XML file is a very straightforward process,
+        once you get the tools working. <emphasis role="bold">Part I</emphasis> of this
+        book tells you how to obtain and set up the XSL tools. It covers several XSL
+        processors, and provides essential details for each one. It also covers XML
+        Catalogs, which are used to map file references to actual directory locations on
+        your system. XML Catalogs make the tools more versatile and portable.</para><para> Once you have the tools working, you can generate formatted print and HTML
+        output from your DocBook XML documents. As you use the stylesheets, you will
+        probably want to change certain aspects about the format or processing. The
+        DocBook stylesheets provide a large number of options. The options are in the
+        form of stylesheet parameters, which let you assign a value to a named variable
+        that is used in the stylesheet. You can do quite a bit of customization of your
+        output using just the parameters. <emphasis role="bold">Part II</emphasis> of
+        this book describes the various stylesheet parameters and how to use them. </para><para>You will turn to <emphasis role="bold">Part III</emphasis> when you want to
+        change something but you cannot find a parameter to do it. At that point you
+        will need to do some stylesheet customization, which is done using the XSL
+        language. You'll need to learn the syntax and methods of XSL, so that you can
+        write a customization file with it. The chapters in Part III describe the
+        methods of customization, as well as many applications for HTML and print
+        output. You can use the appendix introducing XSL  to get started with XSL, but it
+        is beyond the scope of this book to teach you all about XSL. You will need a
+        good XSL reference book to create extensive customization. You can also use
+            the appendix on debugging XSL  for help with debugging your
+        customizations.</para><para><emphasis role="bold">Part IV</emphasis> of this book covers all of the
+        special features of DocBook that require extra attention. That part is an
+        encyclopedia of special topics, from bibliographies to websites. Use it as a
+        reference when you need to process a certain feature, or browse it for new
+        possibilities that you did not know DocBook could do.</para><note><title>Note on examples</title><para><indexterm><primary>backslash</primary><secondary>in examples</secondary></indexterm>Some examples of commands and code in this book are too long to
+            fit on one line. Where a long line is broken to fit, the line will end with
+            a backslash character "\". If you are using Microsoft Windows, you should
+            omit the backslash character and join such a line to the following line. If
+            you are using a Unix shell, you can use the example "as is".</para></note></topic>
diff --git a/contrib/samples/assembly/cooked-sample/topics/OnlineResources.xml b/contrib/samples/assembly/cooked-sample/topics/OnlineResources.xml
new file mode 100755 (executable)
index 0000000..23fac18
--- /dev/null
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<topic xmlns="http://docbook.org/ns/docbook" xml:id="OnlineResources"><title>Online resources for finding solutions to problems</title><para><indexterm><primary>online resources</primary></indexterm>If you run into problems with the DocBook XSL stylesheets that are
+            not addressed anywhere in this guide, you can use a number of online resources
+            to find solutions. <itemizedlist><listitem><para><indexterm><primary>mailing lists</primary></indexterm><indexterm><primary>docbook-apps mailing list</primary></indexterm>First try searching the archives of the <systemitem role="mailinglist">docbook-apps</systemitem> mailing list for
+                        keywords related to the problem. There is a good chance that someone
+                        else has run into something similar. Archives of the list are
+                        available at two different sites: an <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://lists.oasis-open.org/archives/docbook-apps/">archive
+                            at OASIS</link> (which also hosts the actual mailing list) and
+                        an <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://sources.redhat.com/ml/docbook-apps/">archive
+                            at Red Hat</link>.</para><para>If, for example, you are seeing a specific error message, trying
+                        cutting and pasting the error message (or some part of it) into the
+                        search form for the mailing list archives.</para></listitem><listitem><para><indexterm><primary>chat channel</primary></indexterm><indexterm><primary>IRC channel</primary></indexterm>You can get help in real time on the <systemitem role="channel">#docbook</systemitem> channel on <systemitem class="fqdomainname">irc.openprojects.net</systemitem>. If your
+                        browser supports IRC URLs (or, like Mozilla, has a built-in IRC
+                        client), you can access the channel by entering the following URL in
+                        your browser: <blockquote><simpara> <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="irc://irc.openprojects.net#docbook"/> </simpara></blockquote>
+                    </para></listitem><listitem><para>If you cannot find a solution in the <systemitem role="mailinglist">docbook-apps</systemitem> or on the
+                            <systemitem role="channel">#docbook</systemitem>, you should try
+                        posting a question to <systemitem role="mailinglist">docbook-apps</systemitem>. To subscribe to the list, send a
+                        message from your email account to: <blockquote><simpara> <email>docbook-apps-subscribe@lists.oasis-open.org</email> </simpara></blockquote> To post a message to the list, send it to: <blockquote><simpara>
+                    <email>docbook-apps@lists.oasis-open.org</email> </simpara></blockquote>
+                    </para><para>Please read the <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.oasis-open.org/docbook/mailinglist/guidelines.html">list guidelines</link> first, and to include examples of your
+                        DocBook source document and your output (for example, HTML or FO
+                        output) along with details about the tools you're using (including
+                        version numbers of the tools). <note><simpara>Do not include attachments when you post to <systemitem role="mailinglist">docbook-apps</systemitem>—the mailing
+                                list management software automatically strips out
+                                attachments. If you have a long example or an output format
+                                that you cannot paste into your message, post it to a Web
+                                site, and then include the URL in your message to the
+                                list.</simpara></note> </para></listitem><listitem><para>The <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://wiki.docbook.org">DocBook Wiki</link>
+                        website collects contributions from DocBook users and makes them
+                        available to the world.</para></listitem><listitem><para><indexterm><primary>SourceForge</primary></indexterm><indexterm><primary>DocBook</primary><secondary>SourceForge</secondary></indexterm>If you find something that seems to be a legitimate bug
+                        in the DocBook XSL stylesheets, you can file a bug report from the
+                            <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://sourceforge.net/tracker/?group_id=21935">Tracker page</link> at the <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://sourceforge.net/projects/docbook/">DocBook Open
+                            Repository</link> site at SourceForge. If instead you want to
+                        request an enhancement to the stylesheets, file a <emphasis>feature
+                            request</emphasis> from the same Tracker page at the SourceForge
+                        site. <note><simpara>You will need to have a SourceForge user account to
+                                file a bug report or feature request. This requirement makes
+                                it easier follow up on bug reports. If the DocBook XSL
+                                stylesheet developers need to get more details about a
+                                specific bug report, it's difficult to follow up on it if it
+                                was submitted anonymously.</simpara><simpara>You can <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://sourceforge.net/account/registration">register for an account</link> at the SourceForge
+                                site.</simpara></note> </para></listitem></itemizedlist> </para></topic>
diff --git a/contrib/samples/assembly/cooked-sample/topics/Portability.xml b/contrib/samples/assembly/cooked-sample/topics/Portability.xml
new file mode 100755 (executable)
index 0000000..60fa7a8
--- /dev/null
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<topic xmlns="http://docbook.org/ns/docbook" xml:id="Portability"><title>Portability considerations</title><para><indexterm><primary>portability</primary></indexterm>If you need to be able to process XML files on more than one
+            operating system, you need to consider how portable the XSL processors
+            are.</para><itemizedlist><listitem><para>Java-based processors are highly portable, as long as each platform
+                    has a modern Java interpreter. (How modern depends on the individual
+                    processor and version. Check the processor's requirements list.) With
+                    Saxon, Xalan-Java, FOP, and other Java-based processors, you can install
+                    a few Java archives without any compiling and produce identical results
+                    on Linux, Unix, Windows, and Macintosh.</para></listitem><listitem><para>Processors written in C such as xsltproc and Sablotron are less
+                    portable. You need a version compiled for each platform you want to run
+                    it on. Many are available in precompiled packages, such as RPMs for
+                    Linux or Zip files for Windows. But the packaged versions can lag behind
+                    the latest version, so you may need to compile it yourself for a given
+                    platform. The C code is written to be portable, but there are always
+                    issues that come up when you have to compile.</para></listitem><listitem><para>The PassiveTeX FO processor is unique in that it is written in TeX, a
+                    typesetting language. TeX is also very portable, but it is currently
+                    difficult to get PassiveTeX to work properly with the DocBook XSL
+                    stylesheets</para></listitem></itemizedlist><para>Another portability consideration is file permissions. Some packages may try
+            to install files into areas of a filesystem controlled by a system
+            administrator. If you do not have the necessary permissions, you may not be able
+            to install a given package. All of the processors can be installed elsewhere,
+            but you may need to spend time figuring out how to do so.</para></topic>
diff --git a/contrib/samples/assembly/cooked-sample/topics/ToolsPart.xml b/contrib/samples/assembly/cooked-sample/topics/ToolsPart.xml
new file mode 100755 (executable)
index 0000000..2f207cf
--- /dev/null
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<part xmlns="http://docbook.org/ns/docbook" xml:id="ToolsPart"><title>Setting up the tools</title></part>
diff --git a/contrib/samples/assembly/cooked-sample/topics/WhatIsDocbook.xml b/contrib/samples/assembly/cooked-sample/topics/WhatIsDocbook.xml
new file mode 100755 (executable)
index 0000000..76cc6c2
--- /dev/null
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<topic xmlns="http://docbook.org/ns/docbook" xml:id="WhatIsDocbook"><title>What is DocBook?</title><para>DocBook is a collection of standards and tools for technical publishing. DocBook
+        was originally created by a consortium of software companies as a standard for
+        computer documentation. But the basic <quote>book</quote> features of DocBook can be
+        used for other kinds of content, so it has been adapted to many purposes.</para><para>The core DocBook standard is the <glossterm>DocBook Document Type Definition
+            (DTD)</glossterm> maintained by the DocBook Technical Committee in <indexterm><primary>OASIS</primary></indexterm><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.oasis-open.org/docbook">OASIS</link>. The DTD
+        defines the vocabulary of content elements that an author can use and how they
+        relate to each other. For example, a <literal>book</literal> element can contain a
+            <literal>title</literal> element, any number of <literal>para</literal> elements
+        for paragraphs, and any number of <literal>chapter</literal> elements. Using the DTD
+        and XML syntax, authors mark up their text content with tag names enclosed in angle
+        brackets like <literal>&lt;chapter&gt;</literal>. The markup is similar to
+        HTML, but with more tags and tighter rules.</para><para>Text that is marked up in this standard way can be processed by any number of
+        software tools. A major advantage of DocBook is the availability of DocBook tools
+        from many sources, not just from a single vendor of a proprietary file format. You
+        can mix and match components for editing, typesetting, version control, and HTML
+        conversion. You can assemble a custom system that is well suited to your needs, and
+        many of the components are available for free.</para><para>The other major advantage of DocBook is the set of free stylesheets that are
+        available for it. Written by Norman Walsh in the Extensible Stylesheet Language
+        (XSL), these stylesheets enable anyone to publish their DocBook content in print and
+        HTML. The stylesheets are now developed and maintained as an open-source project on
+        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://sourceforge.net/projects/docbook">SourceForge</link><indexterm><primary>SourceForge</primary></indexterm>. An active community of users and contributors keeps up the development
+        of the stylesheets and answers questions.</para><para>As a publishing system, DocBook is best suited for any of these situations:</para><itemizedlist><listitem><para>Large quantities of content.</para></listitem><listitem><para>Highly structured content.</para></listitem><listitem><para>Content that needs to be interchanged among otherwise incompatible
+                systems.</para></listitem><listitem><para>Content that needs automated batch processing.</para></listitem><listitem><para>Content to be rendered in multiple output forms and versions.</para></listitem></itemizedlist><para>DocBook is not a WYSIWYG word processor (although graphical editors are available
+        for DocBook). DocBook is hardly worth the trouble for short or one-off documents.
+        And since the formatting is strictly by batch process with stylesheets, DocBook is
+        not well matched to highly designed layout-driven content like magazines.</para><para>DocBook is well suited to any collection of technical documentation that is
+        regularly maintained and published. Because you are not locked into a single vendor,
+        you have flexibility in your choice of processes and tools, both now and in the
+        future. Multiple authors can contribute, and their content can easily be merged
+        because all the authors are using a standard markup language. The files are plain
+        text, not binary, so they also work well with most version control systems.</para><para>Setting up a DocBook system will take some time and effort. But the payoff will be
+        an efficient, flexible, and inexpensive publishing system that can grow with your
+        needs.</para></topic>
diff --git a/contrib/samples/assembly/cooked-sample/topics/XSLTprocessors.xml b/contrib/samples/assembly/cooked-sample/topics/XSLTprocessors.xml
new file mode 100755 (executable)
index 0000000..e4e251f
--- /dev/null
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<topic xmlns="http://docbook.org/ns/docbook" xml:id="XSLTprocessors"><title>XSLT processors</title><para><indexterm><primary>XSLT processor</primary></indexterm>Currently there are three processors that are widely used for XSLT
+        processing because they most closely conform to the XSLT specification: <variablelist><varlistentry><term>Saxon</term><listitem><para><indexterm><primary>Saxon</primary></indexterm>Saxon (<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://saxon.sourceforge.net/"/>)
+                        was written by Michael Kay, the author of <citetitle>XSLT
+                            Reference</citetitle>, one of the best books on XSLT. Saxon
+                        is a free processor written in Java, so it can be run on any
+                        operating system with a modern Java interpreter. Saxon now comes
+                        in two flavors: Saxon 6 which handles the XSLT 1.0 standard, and
+                        Saxon 8 which handles the newly emerging XSLT 2.0 and other new
+                        XML standards.</para></listitem></varlistentry><varlistentry><term>Xalan</term><listitem><para><indexterm><primary>Xalan</primary></indexterm>Xalan (<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://xml.apache.org/xalan-j/index.html"/>) is part of
+                        the Apache XML Project. It has versions written in both Java and
+                        C++, both of them free. The Java version is described in this
+                        book because it is highly portable and easier to set up.
+                        Generally Xalan is used with the Xerces XML parser, also
+                        available from the Apache XML Project.</para></listitem></varlistentry><varlistentry><term>xsltproc</term><listitem><indexterm><primary>xsltproc</primary></indexterm><para>The xsltproc (<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://xmlsoft.org/XSLT/"/>)
+                        processor is written in C by Daniel Veillard. It is free, as
+                        part of the open source libxml2 library from the Gnome
+                        development project. It is considered the fastest of the
+                        processors, and is highly conformant to the specification. It is
+                        much faster than either of the Java processors. It also
+                        processes XIncludes.</para></listitem></varlistentry></variablelist></para><para>There are a few other XSLT processors that should also be mentioned: <variablelist><varlistentry><term>XT</term><listitem><para>James Clark's XT (<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.blnz.com/xt/index.html"/>) was the first
+                        useful XSLT engine, and it is still in use. It is written in
+                        Java, so it runs on many platforms, and it is free. XT comes
+                        with James Clark's nonvalidating parser XP, but you can
+                        substitute a different Java parser.</para></listitem></varlistentry><varlistentry><term>MSXML</term><listitem><para>Microsoft's MSXML (<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://msdn.microsoft.com/xml/"/>) engine includes an XSLT processor. It is reported to be
+                        fast, but only runs on Windows.</para></listitem></varlistentry><varlistentry><term>Sablotron</term><listitem><para>Sablotron (<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.gingerall.com/charlie/ga/xml/p_sab.xml"/>),
+                        written in C++, from Ginger Alliance.</para></listitem></varlistentry><varlistentry><term>4XSLT</term><listitem><para>4XSLT (<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://sourceforge.net/projects/foursuite/"/>), written in Python, now an open project on
+                        SourceForge.</para></listitem></varlistentry></variablelist></para></topic>
diff --git a/contrib/samples/assembly/cooked-sample/topics/XSLprocessors.xml b/contrib/samples/assembly/cooked-sample/topics/XSLprocessors.xml
new file mode 100755 (executable)
index 0000000..f0db310
--- /dev/null
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<topic xmlns="http://docbook.org/ns/docbook" xml:id="XSLprocessors"><title>XSL processors</title><para><indexterm><primary>XSL</primary><secondary>processors</secondary></indexterm>An <emphasis>XSL processor</emphasis> is the software that transforms an
+        XML file into formatted output. There is a growing list of XSL processors to choose
+        from. Each tool implements parts or all of the XSL standard, which actually has
+        several components: <variablelist><title>The XSL Standards</title><varlistentry><term>Extensible Stylesheet Language (XSL)</term><listitem><para>A language for expressing stylesheets written in XML. It includes
+                        the XSL formatting objects (XSL-FO) language, but refers to separate
+                        documents for the transformation language and the path
+                        language.</para></listitem></varlistentry><varlistentry><term>XSL Transformation (XSLT)</term><listitem><para>The part of XSL for transforming XML documents into other XML
+                        documents, HTML, or text. It can be used to rearrange the content
+                        and generate new content.</para></listitem></varlistentry><varlistentry><term>XML Path Language (XPath)</term><listitem><para>A language for addressing parts of an XML document. It is used to
+                        find the parts of your document to apply different styles to. All
+                        XSL processors use this component.</para></listitem></varlistentry></variablelist></para><para>To publish HTML from your XML documents, you just need an XSLT processor. It will include the XPath
+        language since that is used extensively in XSLT. To get to print, you need an XSLT
+        processor to produce an intermediate formatting objects (FO) file, and then you need
+        an XSL-FO processor to produce
+        PostScript or PDF output from the FO file. A diagram of the <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://nwalsh.com/docbook/procdiagram/index.html">DocBook Publishing
+            Model</link> <indexterm><primary>publishing model</primary></indexterm>is available if you want to see how all the components flow
+        together.</para></topic>
diff --git a/contrib/samples/assembly/cooked-sample/topics/frontmatter.xml b/contrib/samples/assembly/cooked-sample/topics/frontmatter.xml
new file mode 100755 (executable)
index 0000000..6c2e4bb
--- /dev/null
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<book xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:id="user.guide"><info><title>DocBook XSL: The Incomplete Sample</title><author><personname>
+                <firstname>Bob</firstname>
+                <surname>Stayton</surname>
+            </personname></author><publishername>Sagehill Enterprises</publishername><copyright><year>2002</year><year>2003</year><year>2004</year><year>2005</year><year>2006</year><year>2007</year><holder>Sagehill
+Enterprises</holder></copyright><biblioid class="isbn">ISBN: 978-0-9741521-3-4</biblioid><edition>Fourth</edition><pubdate>September, 2007</pubdate><releaseinfo>A PDF version of this document is available for purchase
+from <link xlink:href="http://www.sagehill.net">Sagehill Enterprises</link>.
+</releaseinfo><legalnotice><para>All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording, or by any information storage and retrieval system, without written permission from the publisher, except for the inclusion of brief quotations in a review.</para></legalnotice><legalnotice><title>Warning and Disclaimer</title><para>Every effort has been made to make this book as complete and accurate as possible, but Sagehill Enterprises makes no warranties, either express or implied, regarding the content or its fitness for any particular purpose.  The information is provided on an as-is basis. The author and Sagehill Enterprises shall have neither liability nor responsibility to any person or entity with respect to any loss or damages arising from the information contained in this book.</para><para>This guide contains links to third-party Web sites that are not under the control of Sagehill Enterprises, and Sagehill Enterprises and the author are not responsible for the content of any linked site. If you access a third-party website mentioned in this guide, then you do so at your own risk. Sagehill Enterprises provides these links only as a convenience, and the inclusion of the link does not imply that Sagehill Enterprises or the author endorses or accepts any responsibility for the content of those third-party sites.</para></legalnotice><legalnotice><title>Trademarks</title><para>All terms mentioned in this book that are known to be trademarks or service marks have been appropriately capitalized. Use of a term in this book should not be regarded as affecting the validity of any trademark or service mark.</para></legalnotice><publisher><publishername>Sagehill
+Enterprises</publishername><address><street>PO Box 2911</street>
+<city>Santa Cruz</city> <state>CA</state>
+<postcode>95063-2911</postcode>
+<otheraddr>Website: 
+<link xlink:href="http://www.sagehill.net"/></otheraddr>
+<email>info@sagehill.net</email></address></publisher></info></book>
diff --git a/contrib/samples/assembly/cooked-sample/topics/introchapter.xml b/contrib/samples/assembly/cooked-sample/topics/introchapter.xml
new file mode 100755 (executable)
index 0000000..295b317
--- /dev/null
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<topic xmlns="http://docbook.org/ns/docbook" xml:id="introchapter"><title>Introduction</title><para>The <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.w3.org/Style/XSL/">
+                <citetitle>Extensible Stylesheet Language (XSL)</citetitle>
+                </link> is a formal Recommendation put forward by the <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.w3.org">World Wide Web Consortium (W3C)</link> as a language
+        for expressing stylesheets. It complements the <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.w3.org/XML/">
+                <citetitle>Extensible Markup Language (XML)</citetitle>
+                </link> by providing the methods for formatting content written in XML. One of the
+        major goals of XML was keeping content and its semantic markup separate from its
+        formatting, so that formatting could be applied independently. An XSL stylesheet
+        describes the formatting that can be applied to XML files using an XSL processor.
+        The XSL standard and XSL processors are described more fully in <xref linkend="XSLprocessors"/>.</para><para>The DocBook XSL stylesheets were written by Norman Walsh to help people publish
+        their DocBook content with XSL. The stylesheets are now an open-source project
+        maintained on <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://sourceforge.net/projects/docbook/">SourceForge</link>. The stylesheet distribution consists of a collection of
+        modular XSL files that are assembled into several complete XSL stylesheets. There is
+        a stylesheet for generating a single HTML file, and one for generating multiple
+        smaller HTML files from a single DocBook document. There are stylesheets for print
+        output, XHTML output, HTML Help output, and JavaHelp output. The stylesheet
+        collection is freely available for download. Since there are XSL processors for all
+        major computer types, you can use DocBook on Unix, Linux, Windows, and Macintosh
+        computers.</para><para>This book shows you how to use and customize the DocBook XSL stylesheets. It
+        unlocks the power of these stylesheets by documenting all of their features and
+        making them easy to use.</para></topic>
diff --git a/contrib/samples/assembly/cooked-sample/topics/preface.xml b/contrib/samples/assembly/cooked-sample/topics/preface.xml
new file mode 100755 (executable)
index 0000000..09e46b6
--- /dev/null
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<topic xmlns="http://docbook.org/ns/docbook" xml:id="preface"><title>Preface</title><para>The nature of publishing has changed so much over the last twenty years that anybody
+    can be a publisher these days. Now you can reach a world-wide audience by putting a few
+    HTML pages up on your website. Or you can use desktop publishing software to produce
+    beautifully typeset material that can be printed on demand or downloaded to a printer
+    anywhere in the world. With DocBook, you can publish both ways from the same source
+    material.</para></topic>
diff --git a/contrib/samples/assembly/docbook51/assembly.dtd b/contrib/samples/assembly/docbook51/assembly.dtd
new file mode 100755 (executable)
index 0000000..ddff9f1
--- /dev/null
@@ -0,0 +1,11186 @@
+<!ENTITY % db.xmlns.attrib
+       "xmlns  CDATA   #FIXED 'http://docbook.org/ns/docbook'"
+>
+<!ENTITY % xlink.xmlns.attrib
+       "xmlns:xlink    CDATA   #FIXED 'http://www.w3.org/1999/xlink'"
+>
+  <!ENTITY % db.arch.attribute
+       "arch   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.audience.attribute
+       "audience       CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.condition.attribute
+       "condition      CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.conformance.attribute
+       "conformance    CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.os.attribute
+       "os     CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.revision.attribute
+       "revision       CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.security.attribute
+       "security       CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.userlevel.attribute
+       "userlevel      CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.vendor.attribute
+       "vendor CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.wordsize.attribute
+       "wordsize       CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.endterm.attribute
+       "endterm        IDREF           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.linkend.attribute.REQ
+       "linkend        IDREF           #REQUIRED
+       "
+>
+
+  <!ENTITY % db.linkend.attribute
+       "linkend        IDREF           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.linkends.attribute
+       "linkends       IDREFS          #IMPLIED
+       "
+>
+
+  <!ENTITY % db.xlink.href.attribute
+       "xlink:href     CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.xlink.type.attribute
+       "xlink:type     (simple)                #IMPLIED
+       "
+>
+
+  <!ENTITY % db.xlink.role.attribute
+       "xlink:role     CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.xlink.arcrole.attribute
+       "xlink:arcrole  CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.xlink.title.attribute
+       "xlink:title    CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.xlink.show.enumeration
+       "(new | replace | embed | other | none)"
+>
+
+  <!ENTITY % db.xlink.actuate.enumeration
+       "(onLoad | onRequest | other | none)"
+>
+
+  <!ENTITY % db.xml.id.attribute.REQ
+       "xml:id ID              #REQUIRED
+       "
+>
+
+  <!ENTITY % db.xml.id.attribute
+       "xml:id ID              #IMPLIED
+       "
+>
+
+  <!ENTITY % db.version.attribute
+       "version        CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.xml.lang.attribute
+       "xml:lang       CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.xml.base.attribute
+       "xml:base       CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.remap.attribute
+       "remap  CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.xreflabel.attribute
+       "xreflabel      CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.xrefstyle.attribute
+       "xrefstyle      CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.revisionflag.enumeration
+       "(changed | added | deleted | off)"
+>
+
+  <!ENTITY % db.dir.enumeration
+       "(ltr | rtl | lro | rlo)"
+>
+
+  <!ENTITY % db.common.data.attributes
+       "format CDATA           #IMPLIED
+       fileref CDATA           #REQUIRED
+       entityref       ENTITY          #REQUIRED
+       "
+>
+
+  <!ENTITY % db.verbatim.continuation.enumeration
+       "(continues | restarts)"
+>
+
+  <!ENTITY % db.verbatim.linenumbering.enumeration
+       "(numbered | unnumbered)"
+>
+
+  <!ENTITY % db.verbatim.startinglinenumber.attribute
+       "startinglinenumber     CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.verbatim.language.attribute
+       "language       CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.verbatim.xml.space.attribute
+       "xml:space      (preserve)              #IMPLIED
+       "
+>
+
+  <!ENTITY % db.label.attribute
+       "label  CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.width.characters.attribute
+       "width  CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.spacing.enumeration
+       "(compact | normal)"
+>
+
+  <!ENTITY % db.pgwide.enumeration
+       "(0 | 1)"
+>
+
+  <!ENTITY % db.language.attribute
+       "language       CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.performance.enumeration
+       "(optional | required)"
+>
+
+  <!ENTITY % db.floatstyle.attribute
+       "floatstyle     CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.width.attribute
+       "width  CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.depth.attribute
+       "depth  CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.contentwidth.attribute
+       "contentwidth   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.contentdepth.attribute
+       "contentdepth   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.scalefit.enumeration
+       "(0 | 1)"
+>
+
+  <!ENTITY % db.scale.attribute
+       "scale  CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.halign.enumeration
+       "(center | char | justify | left | right)"
+>
+
+  <!ENTITY % db.valign.enumeration
+       "(bottom | middle | top)"
+>
+
+  <!ENTITY % db._title
+       "(title? | titleabbrev? | subtitle?)"
+>
+
+  <!ENTITY % db._title.req
+       "(title | titleabbrev? | subtitle?)"
+>
+
+  <!ENTITY % db._title.only
+       "(title? | titleabbrev?)"
+>
+
+  <!ENTITY % db._title.onlyreq
+       "(title | titleabbrev?)"
+>
+
+  <!ENTITY % db._info.title.forbidden
+       "info?"
+>
+
+  <!ENTITY % db.technical.inlines
+       "(replaceable | package | parameter | termdef | nonterminal | systemitem | option | optional | property)"
+>
+
+  <!ENTITY % db.product.inlines
+       "(trademark | productnumber | productname | database | application | hardware)"
+>
+
+  <!ENTITY % db.bibliography.inlines
+       "(citation | citerefentry | citetitle | citebiblioid | author | person | personname | org | orgname | editor | jobtitle)"
+>
+
+  <!ENTITY % db.graphic.inlines
+       "inlinemediaobject"
+>
+
+  <!ENTITY % db.indexing.inlines
+       "(indexterm)"
+>
+
+  <!ENTITY % db.link.inlines
+       "(xref | link | olink | anchor | biblioref)"
+>
+
+  <!ENTITY % db.para.blocks
+       "(anchor | para | formalpara | simpara)"
+>
+
+  <!ENTITY % db.formal.blocks
+       "(example | figure | table | equation)"
+>
+
+  <!ENTITY % db.informal.blocks
+       "(informalexample | informalfigure | informaltable | informalequation)"
+>
+
+  <!ENTITY % db.publishing.blocks
+       "(sidebar | blockquote | address | epigraph)"
+>
+
+  <!ENTITY % db.graphic.blocks
+       "(mediaobject | screenshot)"
+>
+
+  <!ENTITY % db.technical.blocks
+       "(task)"
+>
+
+  <!ENTITY % db.list.blocks
+       "(itemizedlist | orderedlist | procedure | simplelist | variablelist | segmentedlist | glosslist | bibliolist | calloutlist | qandaset)"
+>
+
+  <!ENTITY % db.verbatim.blocks
+       "(screen | literallayout | programlistingco | screenco | programlisting | synopsis)"
+>
+
+  <!ENTITY % db.info.elements
+       "(abstract | address | artpagenums | author | authorgroup | authorinitials | bibliocoverage | biblioid | bibliosource | collab | confgroup | contractsponsor | contractnum | copyright | cover | date | edition | editor | issuenum | keywordset | legalnotice | mediaobject | org | orgname | othercredit | pagenums | printhistory | pubdate | publisher | publishername | releaseinfo | revhistory | seriesvolnums | subjectset | volumenum | annotation | extendedlink | bibliomisc | bibliomset | bibliorelation | biblioset | itermset | productname | productnumber)"
+>
+
+  <!ENTITY % db.title.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.titleabbrev.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.subtitle.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.info.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.subjectset.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.subjectset.scheme.attribute
+       "scheme NMTOKEN         #IMPLIED
+       "
+>
+
+  <!ENTITY % db.subject.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.subject.weight.attribute
+       "weight CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.subjectterm.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.keywordset.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.keyword.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.procedure.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.step.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.stepalternatives.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.substeps.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.sidebar.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.abstract.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.personblurb.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.blockquote.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.attribution.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.bridgehead.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.remark.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.epigraph.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.footnote.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.footnote.label.attribute
+       "label  NMTOKEN         #IMPLIED
+       "
+>
+
+  <!ENTITY % db.formalpara.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.para.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.simpara.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.itemizedlist.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.itemizedlist.mark.attribute
+       "mark   NMTOKEN         #IMPLIED
+       "
+>
+
+  <!ENTITY % db.orderedlist.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.orderedlist.continuation.enumeration
+       "(continues | restarts)"
+>
+
+  <!ENTITY % db.orderedlist.startingnumber.attribute
+       "startingnumber CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.orderedlist.inheritnum.enumeration
+       "(ignore | inherit)"
+>
+
+  <!ENTITY % db.orderedlist.numeration.enumeration
+       "(arabic | upperalpha | loweralpha | upperroman | lowerroman)"
+>
+
+  <!ENTITY % db.listitem.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.listitem.override.attribute
+       "override       NMTOKEN         #IMPLIED
+       "
+>
+
+  <!ENTITY % db.segmentedlist.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.segtitle.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.seglistitem.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.seg.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.simplelist.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.simplelist.type.enumeration
+       "(horiz | vert | inline)"
+>
+
+  <!ENTITY % db.simplelist.columns.attribute
+       "columns        CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.member.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.variablelist.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.variablelist.termlength.attribute
+       "termlength     CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.varlistentry.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.term.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.example.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.informalexample.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.literallayout.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.literallayout.class.enumeration
+       "(monospaced | normal)"
+>
+
+  <!ENTITY % db.screen.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.screenshot.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.figure.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.informalfigure.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.mediaobject.content
+       "(videoobject | audioobject | imageobject | textobject | imageobjectco)"
+>
+
+  <!ENTITY % db.mediaobject.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.inlinemediaobject.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.videoobject.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.audioobject.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.imageobject.content
+       "(imagedata | imagedata | imagedata)"
+>
+
+  <!ENTITY % db.imageobject.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.textobject.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.videodata.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.audiodata.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.imagedata.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.textdata.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.textdata.encoding.attribute
+       "encoding       CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.caption.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.address.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.street.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.pob.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.postcode.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.city.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.state.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.country.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.phone.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.fax.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.otheraddr.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.affiliation.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.shortaffil.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.jobtitle.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.orgname.class.enumeration
+       "(consortium | corporation | informal | nonprofit | other)"
+>
+
+  <!ENTITY % db.orgname.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.orgdiv.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.artpagenums.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.personname.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.person.author.contentmodel
+       "(personname, ((personblurb | affiliation | email | uri | address | contrib))*)"
+>
+
+  <!ENTITY % db.org.author.contentmodel
+       "(orgname, ((orgdiv | affiliation | email | uri | address | contrib))*)"
+>
+
+  <!ENTITY % db.author.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.authorgroup.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.collab.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.authorinitials.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.person.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.org.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.confgroup.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.confdates.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.conftitle.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.confnum.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.confsponsor.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.contractnum.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.contractsponsor.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.copyright.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.year.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.holder.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.cover.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.date.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.edition.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.editor.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.biblioid.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.citebiblioid.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.bibliosource.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.bibliorelation.type.enumeration
+       "(hasformat | haspart | hasversion | isformatof | ispartof | isreferencedby | isreplacedby | isrequiredby | isversionof | references | replaces | requires | other)"
+>
+
+  <!ENTITY % db.bibliorelation.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.bibliocoverage.spacial.enumeration
+       "(dcmipoint | iso3166 | dcmibox | tgn | other)"
+>
+
+  <!ENTITY % db.bibliocoverage.temporal.enumeration
+       "(dcmiperiod | w3c-dtf | other)"
+>
+
+  <!ENTITY % db.bibliocoverage.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.legalnotice.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.othercredit.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.pagenums.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.contrib.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.honorific.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.firstname.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.givenname.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.surname.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.lineage.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.othername.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.printhistory.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.pubdate.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.publisher.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.publishername.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.releaseinfo.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.revhistory.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.revision.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.revnumber.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.revremark.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.revdescription.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.seriesvolnums.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.volumenum.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.issuenum.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.package.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.email.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.lineannotation.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.parameter.class.enumeration
+       "(command | function | option)"
+>
+
+  <!ENTITY % db.parameter.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.replaceable.class.enumeration
+       "(command | function | option | parameter)"
+>
+
+  <!ENTITY % db.replaceable.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.uri.type.attribute
+       "type   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.uri.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.abbrev.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.acronym.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.citation.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.citerefentry.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.refentrytitle.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.manvolnum.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.citetitle.pubwork.enumeration
+       "(article | bbs | book | cdrom | chapter | dvd | emailmessage | gopher | journal | manuscript | newsposting | part | refentry | section | series | set | webpage | wiki)"
+>
+
+  <!ENTITY % db.citetitle.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.emphasis.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.foreignphrase.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.phrase.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.quote.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.subscript.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.superscript.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.trademark.class.enumeration
+       "(copyright | registered | service | trade)"
+>
+
+  <!ENTITY % db.trademark.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.wordasword.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.footnoteref.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.xref.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.link.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.olink.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.olink.localinfo.attribute
+       "localinfo      CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.olink.targetdoc.attribute
+       "targetdoc      CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.olink.targetptr.attribute
+       "targetptr      CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.olink.type.attribute
+       "type   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.anchor.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.alt.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.status.attribute
+       "status CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.toplevel.sections
+       "(((section)+, (simplesect)*) | (simplesect)+ | ((sect1)+, (simplesect)*) | (refentry)+)"
+>
+
+  <!ENTITY % db.recursive.sections
+       "(((section)+, (simplesect)*) | (simplesect)+ | (refentry)+)"
+>
+
+  <!ENTITY % db.divisions
+       "(part | reference)"
+>
+
+  <!ENTITY % db.components
+       "(dedication | acknowledgements | preface | chapter | appendix | article | colophon)"
+>
+
+  <!ENTITY % db.navigation.components
+       "(glossary | bibliography | index | toc)"
+>
+
+  <!ENTITY % db.setindex.components
+       "(setindex)"
+>
+
+  <!ENTITY % db.toc.components
+       "(toc)"
+>
+
+  <!ENTITY % db.set.components
+       "(set | book)"
+>
+
+  <!ENTITY % db.set.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.book.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.dedication.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.acknowledgements.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.colophon.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.appendix.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.chapter.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.part.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.preface.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.partintro.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.section.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.simplesect.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.article.class.enumeration
+       "(faq | journalarticle | productsheet | specification | techreport | whitepaper)"
+>
+
+  <!ENTITY % db.article.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.annotations.attribute
+       "annotations    CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.annotation.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.annotation.annotates.attribute
+       "annotates      CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.xlink.from.attribute
+       "xlink:from     NMTOKEN         #IMPLIED
+       "
+>
+
+  <!ENTITY % db.xlink.label.attribute
+       "xlink:label    NMTOKEN         #IMPLIED
+       "
+>
+
+  <!ENTITY % db.xlink.to.attribute
+       "xlink:to       NMTOKEN         #IMPLIED
+       "
+>
+
+  <!ENTITY % db.extendedlink.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.locator.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.arc.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.sect1.sections
+       "(((sect2)+, (simplesect)*) | (simplesect)+)"
+>
+
+  <!ENTITY % db.sect1.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.sect2.sections
+       "(((sect3)+, (simplesect)*) | (simplesect)+)"
+>
+
+  <!ENTITY % db.sect2.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.sect3.sections
+       "(((sect4)+, (simplesect)*) | (simplesect)+)"
+>
+
+  <!ENTITY % db.sect3.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.sect4.sections
+       "(((sect5)+, (simplesect)*) | (simplesect)+)"
+>
+
+  <!ENTITY % db.sect4.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.sect5.sections
+       "(simplesect)+"
+>
+
+  <!ENTITY % db.sect5.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.toplevel.refsection
+       "((refsection)+ | (refsect1)+)"
+>
+
+  <!ENTITY % db.secondlevel.refsection
+       "((refsection)+ | (refsect2)+)"
+>
+
+  <!ENTITY % db.reference.components
+       "refentry"
+>
+
+  <!ENTITY % db.reference.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.refentry.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.refmeta.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.refmiscinfo.class.enumeration
+       "(source | version | manual | sectdesc | software)"
+>
+
+  <!ENTITY % db.refmiscinfo.class-other.attribute
+       "otherclass     CDATA           #REQUIRED
+       "
+>
+
+  <!ENTITY % db.refmiscinfo.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.refnamediv.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.refdescriptor.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.refname.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.refpurpose.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.refclass.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.refsynopsisdiv.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.refsection.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.refsect1.sections
+       "(refsect2)+"
+>
+
+  <!ENTITY % db.refsect1.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.refsect2.sections
+       "(refsect3)+"
+>
+
+  <!ENTITY % db.refsect2.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.refsect3.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.glossary.inlines
+       "(firstterm | glossterm | firstterm | glossterm)"
+>
+
+  <!ENTITY % db.baseform.attribute
+       "baseform       CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.glosslist.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.glossentry.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.glossentry.sortas.attribute
+       "sortas CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.glossdef.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.glossdef.subject.attribute
+       "subject        CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.glosssee.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.glosssee.otherterm.attribute
+       "otherterm      IDREF           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.glossseealso.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.glossseealso.otherterm.attribute
+       "otherterm      IDREF           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.firstterm.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.glossterm.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.glossary.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.glossdiv.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.termdef.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.relation.attribute
+       "relation       CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.biblioentry.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.bibliomixed.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.biblioset.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.bibliomset.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.bibliomisc.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.bibliography.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.bibliodiv.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.bibliolist.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.biblioref.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.biblioref.units.attribute
+       "units  CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.biblioref.begin.attribute
+       "begin  CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.biblioref.end.attribute
+       "end    CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.significance.enumeration
+       "(normal | preferred)"
+>
+
+  <!ENTITY % db.zone.attribute
+       "zone   IDREFS          #IMPLIED
+       "
+>
+
+  <!ENTITY % db.indexterm.pagenum.attribute
+       "pagenum        CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.scope.enumeration
+       "(all | global | local)"
+>
+
+  <!ENTITY % db.sortas.attribute
+       "sortas CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.index.type.attribute
+       "type   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.itermset.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.indexterm.contentmodel
+       "(primary?, ((secondary, ((tertiary, (see | (seealso)+)?) | see | (seealso)+)?) | see | (seealso)+)?)"
+>
+
+  <!ENTITY % db.primary.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.secondary.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.tertiary.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.see.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.seealso.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.index.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.setindex.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.indexdiv.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.indexentry.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.primaryie.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.secondaryie.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.tertiaryie.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.seeie.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.seealsoie.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.toc.pagenum.attribute
+       "pagenum        CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.toc.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.tocdiv.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.tocentry.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.task.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.tasksummary.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.taskprerequisites.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.taskrelated.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.area.units.enumeration
+       "(calspair | linecolumn | linecolumnpair | linerange | other)"
+>
+
+  <!ENTITY % db.calloutlist.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.callout.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.callout.arearefs.attribute
+       "arearefs       IDREFS          #REQUIRED
+       "
+>
+
+  <!ENTITY % db.programlistingco.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.areaspec.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.area.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.area.linkends.attribute
+       "linkends       IDREFS          #IMPLIED
+       "
+>
+
+  <!ENTITY % db.area.label.attribute
+       "label  CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.area.coords.attribute
+       "coords CDATA           #REQUIRED
+       "
+>
+
+  <!ENTITY % db.areaset.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.screenco.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.imageobjectco.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.co.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.coref.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.productionset.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.production.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.lhs.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.rhs.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.nonterminal.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.nonterminal.def.attribute
+       "def    CDATA           #REQUIRED
+       "
+>
+
+  <!ENTITY % db.constraint.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.productionrecap.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.constraintdef.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.char.attribute
+       "char   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.charoff.attribute
+       "charoff        CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.colsep.attribute
+       "colsep CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.rowsep.attribute
+       "rowsep CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.orient.attribute
+       "orient CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.tabstyle.attribute
+       "tabstyle       CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.rowheader.attribute
+       "rowheader      CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.align.attribute
+       "align  CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.valign.attribute
+       "valign CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.specify-col-by-colname.attributes
+       "colname        CDATA           #REQUIRED
+       "
+>
+
+  <!ENTITY % db.specify-col-by-namest.attributes
+       "namest CDATA           #REQUIRED
+       "
+>
+
+  <!ENTITY % db.specify-span-by-spanspec.attributes
+       "spanname       CDATA           #REQUIRED
+       "
+>
+
+  <!ENTITY % db.specify-span-directly.attributes
+       "nameend        CDATA           #REQUIRED
+       "
+>
+
+  <!ENTITY % db.colname.attribute
+       "colname        CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.spanname.attribute
+       "spanname       CDATA           #REQUIRED
+       "
+>
+
+  <!ENTITY % db.tgroup.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.tgroup.tgroupstyle.attribute
+       "tgroupstyle    CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.tgroup.cols.attribute
+       "cols   CDATA           #REQUIRED
+       "
+>
+
+  <!ENTITY % db.colspec.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.colspec.colnum.attribute
+       "colnum CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.colspec.colwidth.attribute
+       "colwidth       CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.spanspec.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.spanspec.namest.attribute
+       "namest CDATA           #REQUIRED
+       "
+>
+
+  <!ENTITY % db.spanspec.nameend.attribute
+       "nameend        CDATA           #REQUIRED
+       "
+>
+
+  <!ENTITY % db.row.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.entry.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.entry.morerows.attribute
+       "morerows       CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.entry.rotate.attribute
+       "rotate CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.entrytbl.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.entrytbl.tgroupstyle.attribute
+       "tgroupstyle    CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.entrytbl.cols.attribute
+       "cols   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.html.coreattrs
+       "class  CDATA           #IMPLIED
+       style   CDATA           #IMPLIED
+       title   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.html.i18n
+       "lang   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.html.events
+       "onclick        CDATA           #IMPLIED
+       ondblclick      CDATA           #IMPLIED
+       onmousedown     CDATA           #IMPLIED
+       onmouseup       CDATA           #IMPLIED
+       onmouseover     CDATA           #IMPLIED
+       onmousemove     CDATA           #IMPLIED
+       onmouseout      CDATA           #IMPLIED
+       onkeypress      CDATA           #IMPLIED
+       onkeydown       CDATA           #IMPLIED
+       onkeyup CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.html.cellhalign
+       "align  CDATA           #IMPLIED
+       char    CDATA           #IMPLIED
+       charoff CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.html.cellvalign
+       "valign CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.html.table.attributes
+       "summary        CDATA           #IMPLIED
+       width   CDATA           #IMPLIED
+       border  CDATA           #IMPLIED
+       frame   CDATA           #IMPLIED
+       rules   CDATA           #IMPLIED
+       cellspacing     CDATA           #IMPLIED
+       cellpadding     CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.html.tablecell.attributes
+       "abbr   CDATA           #IMPLIED
+       axis    CDATA           #IMPLIED
+       headers CDATA           #IMPLIED
+       scope   CDATA           #IMPLIED
+       rowspan CDATA           #IMPLIED
+       colspan CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.msgset.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.msgentry.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.simplemsgentry.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.simplemsgentry.msgaud.attribute
+       "msgaud CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.simplemsgentry.msgorig.attribute
+       "msgorig        CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.simplemsgentry.msglevel.attribute
+       "msglevel       CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.msg.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.msgmain.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.msgsub.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.msgrel.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.msgtext.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.msginfo.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.msglevel.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.msgorig.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.msgaud.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.msgexplan.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.qandaset.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.qandaset.defaultlabel.enumeration
+       "(none | number | qanda)"
+>
+
+  <!ENTITY % db.qandadiv.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.qandaentry.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.question.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.answer.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.label.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.math.inlines
+       "inlineequation"
+>
+
+  <!ENTITY % db.equation.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.informalequation.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.inlineequation.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.mathphrase.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.markup.inlines
+       "(tag | markup | token | symbol | literal | code | constant | email | uri)"
+>
+
+  <!ENTITY % db.markup.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.tag.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.tag.class.enumeration
+       "(attribute | attvalue | element | emptytag | endtag | genentity | localname | namespace | numcharref | paramentity | pi | prefix | comment | starttag | xmlpi)"
+>
+
+  <!ENTITY % db.tag.namespace.attribute
+       "namespace      CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.symbol.class.attribute
+       "class  (limit)         #IMPLIED
+       "
+>
+
+  <!ENTITY % db.symbol.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.token.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.literal.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % code.language.attribute
+       "language       CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.code.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.constant.class.attribute
+       "class  (limit)         #IMPLIED
+       "
+>
+
+  <!ENTITY % db.constant.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.productname.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.productname.class.enumeration
+       "(copyright | registered | service | trade)"
+>
+
+  <!ENTITY % db.productnumber.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.database.class.enumeration
+       "(altkey | constraint | datatype | field | foreignkey | group | index | key1 | key2 | name | primarykey | procedure | record | rule | secondarykey | table | user | view)"
+>
+
+  <!ENTITY % db.database.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.application.class.enumeration
+       "(hardware | software)"
+>
+
+  <!ENTITY % db.application.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.hardware.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.gui.inlines
+       "(guiicon | guibutton | guimenuitem | guimenu | guisubmenu | guilabel | menuchoice | mousebutton)"
+>
+
+  <!ENTITY % db.guibutton.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.guiicon.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.guilabel.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.guimenu.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.guimenuitem.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.guisubmenu.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.menuchoice.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.mousebutton.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.keyboard.inlines
+       "(keycombo | keycap | keycode | keysym | shortcut | accel)"
+>
+
+  <!ENTITY % db.keycap.function.enumeration
+       "(alt | backspace | command | control | delete | down | end | enter | escape | home | insert | left | meta | option | pagedown | pageup | right | shift | space | tab | up | other)"
+>
+
+  <!ENTITY % db.keycap.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.keycode.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.keycombination.contentmodel
+       "(keycap | keycombo | keysym | mousebutton)"
+>
+
+  <!ENTITY % db.keycombo.action.enumeration
+       "(click | double-click | press | seq | simul | other)"
+>
+
+  <!ENTITY % db.keycombo.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.keysym.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.accel.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.shortcut.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.os.inlines
+       "(prompt | envar | filename | command | computeroutput | userinput)"
+>
+
+  <!ENTITY % db.prompt.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.envar.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.filename.class.enumeration
+       "(devicefile | directory | extension | headerfile | libraryfile | partition | symlink)"
+>
+
+  <!ENTITY % db.filename.path.attribute
+       "path   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.filename.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.command.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.computeroutput.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.userinput.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.cmdsynopsis.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.cmdsynopsis.sepchar.attribute
+       "sepchar        CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.cmdsynopsis.cmdlength.attribute
+       "cmdlength      CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.rep.enumeration
+       "(norepeat | repeat)"
+>
+
+  <!ENTITY % db.choice.enumeration
+       "(opt | plain | req)"
+>
+
+  <!ENTITY % db.arg.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.sbr.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.synopfragment.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.synopfragmentref.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.oo.inlines
+       "(ooclass | ooexception | oointerface)"
+>
+
+  <!ENTITY % db.synopsis.blocks
+       "(funcsynopsis | classsynopsis | methodsynopsis | constructorsynopsis | destructorsynopsis | fieldsynopsis | cmdsynopsis)"
+>
+
+  <!ENTITY % db.synopsis.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.funcsynopsis.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.funcsynopsisinfo.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.funcprototype.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.funcdef.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.function.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.void.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.varargs.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.paramdef.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.paramdef.choice.enumeration
+       "(opt | req)"
+>
+
+  <!ENTITY % db.funcparams.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.classsynopsis.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.classsynopsis.class.enumeration
+       "(class | interface)"
+>
+
+  <!ENTITY % db.classsynopsisinfo.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.ooclass.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.oointerface.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.ooexception.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.modifier.xml.space.attribute
+       "xml:space      (preserve)              #IMPLIED
+       "
+>
+
+  <!ENTITY % db.modifier.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.interfacename.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.exceptionname.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.fieldsynopsis.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.initializer.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.constructorsynopsis.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.destructorsynopsis.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.methodsynopsis.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.methodname.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.methodparam.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.varname.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.returnvalue.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.type.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.classname.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.programlisting.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.admonition.blocks
+       "(caution | important | note | tip | warning)"
+>
+
+  <!ENTITY % db.caution.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.important.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.note.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.tip.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.warning.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.error.inlines
+       "(errorcode | errortext | errorname | errortype)"
+>
+
+  <!ENTITY % db.errorcode.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.errorname.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.errortext.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.errortype.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.systemitem.class.enumeration
+       "(daemon | domainname | etheraddress | event | eventhandler | filesystem | fqdomainname | groupname | ipaddress | library | macro | netmask | newsgroup | osname | process | protocol | resource | securitycontext | server | service | systemname | username)"
+>
+
+  <!ENTITY % db.systemitem.class-other.attribute
+       "otherclass     NMTOKEN         #REQUIRED
+       "
+>
+
+  <!ENTITY % db.systemitem.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.option.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.optional.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.property.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.topic.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.topic.type.attribute
+       "type   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.grammar.attribute.REQ
+       "grammar        CDATA           #REQUIRED
+       "
+>
+
+  <!ENTITY % db.grammar.attribute
+       "grammar        CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.assembly.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.resources.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.resource.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.resource.fileref.attribute
+       "fileref        CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.structure.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.structure.type.attribute
+       "type   NMTOKEN         #IMPLIED
+       "
+>
+
+  <!ENTITY % db.structure.defaultformat.attribute
+       "defaultformat  NMTOKEN         #IMPLIED
+       "
+>
+
+  <!ENTITY % db.structure.renderas.attribute
+       "renderas       CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.output.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.output.format.attribute
+       "format NMTOKENS                #IMPLIED
+       "
+>
+
+  <!ENTITY % db.output.file.attribute
+       "file   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.output.renderas.attribute
+       "renderas       CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.output.transform.attribute
+       "transform      NMTOKEN         #IMPLIED
+       "
+>
+
+  <!ENTITY % db.output.suppress.attribute
+       "suppress       CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.override.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.module.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.module.chunk.enumeration
+       "(true | false | auto)"
+>
+
+  <!ENTITY % db.module.resourceref.attribute
+       "resourceref    IDREF           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.module.omittitles.attribute
+       "omittitles     CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.module.contentonly.attribute
+       "contentonly    CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.module.renderas.attribute
+       "renderas       CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.filterout.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.filterin.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.relationships.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.relationships.type.attribute
+       "type   NMTOKENS                #IMPLIED
+       "
+>
+
+  <!ENTITY % db.relationship.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.relationship.type.attribute
+       "type   NMTOKEN         #IMPLIED
+       "
+>
+
+  <!ENTITY % db.association.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.instance.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.instance.linking.attribute
+       "linking        NMTOKENS                #IMPLIED
+       "
+>
+
+  <!ENTITY % db.transforms.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.transform.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.transform.fileref.attribute
+       "fileref        CDATA           #REQUIRED
+       "
+>
+
+  <!ENTITY % db.transform.name.attribute
+       "name   NMTOKEN         #REQUIRED
+       "
+>
+
+  <!ENTITY % db.description.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.biblio.class.enumeration
+       "(doi | isbn | isrn | issn | libraryofcongress | pubsnumber | uri | other)"
+>
+
+  <!ENTITY % db.bridgehead.renderas.enumeration
+       "(sect1 | sect2 | sect3 | sect4 | sect5 | other)"
+>
+
+  <!ENTITY % db.othercredit.class.enumeration
+       "(copyeditor | graphicdesigner | productioneditor | technicaleditor | translator | indexer | proofreader | coverdesigner | interiordesigner | illustrator | reviewer | typesetter | conversion | other)"
+>
+
+  <!ENTITY % db.indexterm.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.indexterm.class.attribute
+       "class  CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.group.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.thead.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.tfoot.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.tbody.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.table.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.informaltable.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.equation.content
+       "((mediaobject)+ | (mathphrase)+)"
+>
+
+  <!ENTITY % db.inlineequation.content
+       "((inlinemediaobject)+ | (mathphrase)+)"
+>
+
+  <!ENTITY % db.date.contentmodel
+       "#PCDATA"
+>
+
+  <!ENTITY % db.effectivity.attributes
+       "%db.arch.attribute;
+       %db.audience.attribute;
+       %db.condition.attribute;
+       %db.conformance.attribute;
+       %db.os.attribute;
+       %db.revision.attribute;
+       %db.security.attribute;
+       %db.userlevel.attribute;
+       %db.vendor.attribute;
+       %db.wordsize.attribute;
+       "
+>
+
+  <!ENTITY % db.xlink.show.attribute
+       "xlink:show     %db.xlink.show.enumeration;             #IMPLIED
+       "
+>
+
+  <!ENTITY % db.xlink.actuate.attribute
+       "xlink:actuate  %db.xlink.actuate.enumeration;          #IMPLIED
+       "
+>
+
+  <!ENTITY % db.revisionflag.attribute
+       "revisionflag   %db.revisionflag.enumeration;           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.dir.attribute
+       "dir    %db.dir.enumeration;            #IMPLIED
+       "
+>
+
+  <!ENTITY % db.verbatim.continuation.attribute
+       "continuation   %db.verbatim.continuation.enumeration;          #IMPLIED
+       "
+>
+
+  <!ENTITY % db.verbatim.linenumbering.attribute
+       "linenumbering  %db.verbatim.linenumbering.enumeration;         #IMPLIED
+       "
+>
+
+  <!ENTITY % db.spacing.attribute
+       "spacing        %db.spacing.enumeration;                #IMPLIED
+       "
+>
+
+  <!ENTITY % db.pgwide.attribute
+       "pgwide %db.pgwide.enumeration;         #IMPLIED
+       "
+>
+
+  <!ENTITY % db.performance.attribute
+       "performance    %db.performance.enumeration;            #IMPLIED
+       "
+>
+
+  <!ENTITY % db.ubiq.inlines
+       "(inlinemediaobject | remark | %db.link.inlines; | alt | trademark | abbrev | acronym | date | emphasis | footnote | footnoteref | foreignphrase | phrase | quote | subscript | superscript | wordasword | annotation | firstterm | glossterm | indexterm | coref)"
+>
+
+  <!ENTITY % db._info
+       "((%db._title;), (info?))"
+>
+
+  <!ENTITY % db._info.title.req
+       "(%db._title.req;, (info?))"
+>
+
+  <!ENTITY % db._info.title.only
+       "(%db._title.only;, (info?))"
+>
+
+  <!ENTITY % db._info.title.onlyreq
+       "(%db._title.onlyreq;, (info?))"
+>
+
+  <!ENTITY % db.publishing.inlines
+       "(abbrev | acronym | date | emphasis | footnote | footnoteref | foreignphrase | phrase | quote | subscript | superscript | wordasword | %db.glossary.inlines; | coref)"
+>
+
+  <!ENTITY % db.nopara.blocks
+       "(%db.list.blocks; | %db.formal.blocks; | %db.informal.blocks; | %db.publishing.blocks; | %db.graphic.blocks; | %db.technical.blocks; | %db.verbatim.blocks; | bridgehead | remark | revhistory | indexterm | %db.synopsis.blocks; | %db.admonition.blocks;)"
+>
+
+  <!ENTITY % db.stepalternatives.info
+       "%db._info.title.forbidden;"
+>
+
+  <!ENTITY % db.epigraph.info
+       "%db._info.title.forbidden;"
+>
+
+  <!ENTITY % db.para.info
+       "%db._info.title.forbidden;"
+>
+
+  <!ENTITY % db.simpara.info
+       "%db._info.title.forbidden;"
+>
+
+  <!ENTITY % db.orderedlist.continuation.attribute
+       "continuation   %db.orderedlist.continuation.enumeration;               #IMPLIED
+       "
+>
+
+  <!ENTITY % db.orderedlist.inheritnum.attribute
+       "inheritnum     %db.orderedlist.inheritnum.enumeration;         #IMPLIED
+       "
+>
+
+  <!ENTITY % db.orderedlist.numeration.attribute
+       "numeration     %db.orderedlist.numeration.enumeration;         #IMPLIED
+       "
+>
+
+  <!ENTITY % db.simplelist.type.attribute
+       "type   %db.simplelist.type.enumeration;                #IMPLIED
+       "
+>
+
+  <!ENTITY % db.informalexample.info
+       "%db._info.title.forbidden;"
+>
+
+  <!ENTITY % db.literallayout.class.attribute
+       "class  %db.literallayout.class.enumeration;            #IMPLIED
+       "
+>
+
+  <!ENTITY % db.informalfigure.info
+       "%db._info.title.forbidden;"
+>
+
+  <!ENTITY % db.mediaobject.info
+       "%db._info.title.forbidden;"
+>
+
+  <!ENTITY % db.inlinemediaobject.info
+       "%db._info.title.forbidden;"
+>
+
+  <!ENTITY % db.videoobject.info
+       "%db._info.title.forbidden;"
+>
+
+  <!ENTITY % db.audioobject.info
+       "%db._info.title.forbidden;"
+>
+
+  <!ENTITY % db.imageobject.info
+       "%db._info.title.forbidden;"
+>
+
+  <!ENTITY % db.textobject.info
+       "%db._info.title.forbidden;"
+>
+
+  <!ENTITY % db.videodata.align.enumeration
+       "%db.halign.enumeration;"
+>
+
+  <!ENTITY % db.videodata.valign.enumeration
+       "%db.valign.enumeration;"
+>
+
+  <!ENTITY % db.videodata.scalefit.enumeration
+       "%db.scalefit.enumeration;"
+>
+
+  <!ENTITY % db.videodata.info
+       "%db._info.title.forbidden;"
+>
+
+  <!ENTITY % db.audiodata.info
+       "%db._info.title.forbidden;"
+>
+
+  <!ENTITY % db.imagedata.align.enumeration
+       "%db.halign.enumeration;"
+>
+
+  <!ENTITY % db.imagedata.valign.enumeration
+       "%db.valign.enumeration;"
+>
+
+  <!ENTITY % db.imagedata.scalefit.enumeration
+       "%db.scalefit.enumeration;"
+>
+
+  <!ENTITY % db.imagedata.info
+       "%db._info.title.forbidden;"
+>
+
+  <!ENTITY % db.textdata.info
+       "%db._info.title.forbidden;"
+>
+
+  <!ENTITY % db.caption.info
+       "%db._info.title.forbidden;"
+>
+
+  <!ENTITY % db.orgname.class.attribute
+       "class  %db.orgname.class.enumeration;          #IMPLIED
+       "
+>
+
+  <!ENTITY % db.credit.contentmodel
+       "(%db.person.author.contentmodel; | %db.org.author.contentmodel;)"
+>
+
+  <!ENTITY % db.cover.contentmodel
+       "(%db.para.blocks; | %db.list.blocks; | %db.informal.blocks; | %db.publishing.blocks; | %db.graphic.blocks; | %db.technical.blocks; | %db.verbatim.blocks; | bridgehead | remark | revhistory | %db.synopsis.blocks;)"
+>
+
+  <!ENTITY % db.bibliorelation.type.attribute
+       "type   %db.bibliorelation.type.enumeration;            #REQUIRED
+       "
+>
+
+  <!ENTITY % db.bibliocoverage.spatial.attribute
+       "spatial        %db.bibliocoverage.spacial.enumeration;         #REQUIRED
+       "
+>
+
+  <!ENTITY % db.bibliocoverage.temporal.attribute
+       "temporal       %db.bibliocoverage.temporal.enumeration;                #REQUIRED
+       "
+>
+
+  <!ENTITY % db.parameter.class.attribute
+       "class  %db.parameter.class.enumeration;                #IMPLIED
+       "
+>
+
+  <!ENTITY % db.replaceable.class.attribute
+       "class  %db.replaceable.class.enumeration;              #IMPLIED
+       "
+>
+
+  <!ENTITY % db.citetitle.pubwork.attribute
+       "pubwork        %db.citetitle.pubwork.enumeration;              #IMPLIED
+       "
+>
+
+  <!ENTITY % db.trademark.class.attribute
+       "class  %db.trademark.class.enumeration;                #IMPLIED
+       "
+>
+
+  <!ENTITY % db.book.components
+       "(((%db.navigation.components; | %db.components; | %db.divisions;))* | (topic)*)"
+>
+
+  <!ENTITY % db.part.components
+       "(%db.navigation.components; | %db.components; | refentry | reference)"
+>
+
+  <!ENTITY % db.article.components
+       "%db.toplevel.sections;"
+>
+
+  <!ENTITY % db.article.navcomponents
+       "(%db.navigation.components; | acknowledgements | dedication | appendix | colophon)"
+>
+
+  <!ENTITY % db.article.class.attribute
+       "class  %db.article.class.enumeration;          #IMPLIED
+       "
+>
+
+  <!ENTITY % db.refentry.info
+       "%db._info.title.forbidden;"
+>
+
+  <!ENTITY % db.refmiscinfo.class-enum.attribute
+       "class  %db.refmiscinfo.class.enumeration;              #IMPLIED
+       "
+>
+
+  <!ENTITY % db.significance.attribute
+       "significance   %db.significance.enumeration;           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.scope.attribute
+       "scope  %db.scope.enumeration;          #IMPLIED
+       "
+>
+
+  <!ENTITY % db.area.units.attribute
+       "class  %db.area.units.enumeration;             #REQUIRED
+       "
+>
+
+  <!ENTITY % db.programlistingco.info
+       "%db._info.title.forbidden;"
+>
+
+  <!ENTITY % db.screenco.info
+       "%db._info.title.forbidden;"
+>
+
+  <!ENTITY % db.imageobjectco.info
+       "%db._info.title.forbidden;"
+>
+
+  <!ENTITY % db.column-spec.attributes
+       "%db.specify-col-by-colname.attributes;
+       %db.specify-col-by-namest.attributes;
+       %db.specify-span-by-spanspec.attributes;
+       %db.specify-span-directly.attributes;
+       "
+>
+
+  <!ENTITY % db.cals.informaltable.info
+       "%db._info.title.forbidden;"
+>
+
+  <!ENTITY % db.html.table.info
+       "%db._info.title.forbidden;"
+>
+
+  <!ENTITY % db.html.informaltable.info
+       "%db._info.title.forbidden;"
+>
+
+  <!ENTITY % db.qandaset.defaultlabel.attribute
+       "defaultlabel   %db.qandaset.defaultlabel.enumeration;          #IMPLIED
+       "
+>
+
+  <!ENTITY % db.informalequation.info
+       "%db._info.title.forbidden;"
+>
+
+  <!ENTITY % db.tag.class.attribute
+       "class  %db.tag.class.enumeration;              #IMPLIED
+       "
+>
+
+  <!ENTITY % db.productname.class.attribute
+       "class  %db.productname.class.enumeration;              #IMPLIED
+       "
+>
+
+  <!ENTITY % db.database.class.attribute
+       "class  %db.database.class.enumeration;         #IMPLIED
+       "
+>
+
+  <!ENTITY % db.application.class.attribute
+       "class  %db.application.class.enumeration;              #IMPLIED
+       "
+>
+
+  <!ENTITY % db.keycap.function.attrib
+       "function       %db.keycap.function.enumeration;                #IMPLIED
+       "
+>
+
+  <!ENTITY % db.keycombo.action.attrib
+       "action %db.keycombo.action.enumeration;                #IMPLIED
+       "
+>
+
+  <!ENTITY % db.filename.class.attribute
+       "class  %db.filename.class.enumeration;         #IMPLIED
+       "
+>
+
+  <!ENTITY % db.cmdsynopsis.info
+       "%db._info.title.forbidden;"
+>
+
+  <!ENTITY % db.rep.attribute
+       "rep    %db.rep.enumeration;            #IMPLIED
+       "
+>
+
+  <!ENTITY % db.choice.opt.attribute
+       "choice %db.choice.enumeration;         #IMPLIED
+       "
+>
+
+  <!ENTITY % db.choice.req.attribute
+       "choice %db.choice.enumeration;         #IMPLIED
+       "
+>
+
+  <!ENTITY % db.programming.inlines
+       "(function | parameter | varname | returnvalue | type | classname | exceptionname | interfacename | methodname | modifier | initializer | %db.oo.inlines;)"
+>
+
+  <!ENTITY % db.funcsynopsis.info
+       "%db._info.title.forbidden;"
+>
+
+  <!ENTITY % db.paramdef.choice.attribute
+       "choice %db.paramdef.choice.enumeration;                #IMPLIED
+       "
+>
+
+  <!ENTITY % db.classsynopsis.class.attribute
+       "class  %db.classsynopsis.class.enumeration;            #IMPLIED
+       "
+>
+
+  <!ENTITY % db.systemitem.class-enum.attribute
+       "class  %db.systemitem.class.enumeration;               #IMPLIED
+       "
+>
+
+  <!ENTITY % db.resources.info
+       "%db._info.title.forbidden;"
+>
+
+  <!ENTITY % db.output.chunk.attribute
+       "chunk  %db.module.chunk.enumeration;           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.module.chunk.attribute
+       "chunk  %db.module.chunk.enumeration;           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.biblio.class.attribute
+       "class  %db.biblio.class.enumeration;           #REQUIRED
+       "
+>
+
+  <!ENTITY % db.bridgehead.renderas.attribute
+       "class  %db.bridgehead.renderas.enumeration;            #IMPLIED
+       "
+>
+
+  <!ENTITY % db.othercredit.class.attribute
+       "class  %db.othercredit.class.enumeration;              #REQUIRED
+       "
+>
+
+  <!ENTITY % db.href.attributes
+       "%db.xlink.href.attribute;
+       %db.xlink.type.attribute;
+       %db.xlink.role.attribute;
+       %db.xlink.arcrole.attribute;
+       %db.xlink.title.attribute;
+       %db.xlink.show.attribute;
+       %db.xlink.actuate.attribute;
+       "
+>
+
+  <!ENTITY % db.common.base.attributes
+       "%db.version.attribute;
+       %db.xml.lang.attribute;
+       %db.xml.base.attribute;
+       %db.remap.attribute;
+       %db.xreflabel.attribute;
+       %db.revisionflag.attribute;
+       %db.dir.attribute;
+       %db.effectivity.attributes;
+       "
+>
+
+  <!ENTITY % db.verbatim.common.attributes
+       "%db.verbatim.continuation.attribute;
+       %db.verbatim.linenumbering.attribute;
+       %db.verbatim.startinglinenumber.attribute;
+       %db.verbatim.xml.space.attribute;
+       "
+>
+
+  <!ENTITY % db._text
+       "((#PCDATA | %db.ubiq.inlines; | phrase | replaceable))*"
+>
+
+  <!ENTITY % db.general.inlines
+       "(%db.publishing.inlines; | %db.product.inlines; | %db.bibliography.inlines; | %db.graphic.inlines; | %db.indexing.inlines; | %db.link.inlines;)"
+>
+
+  <!ENTITY % db.domain.inlines
+       "(%db.technical.inlines; | %db.math.inlines; | %db.markup.inlines; | %db.gui.inlines; | %db.keyboard.inlines; | %db.os.inlines; | %db.programming.inlines; | %db.error.inlines;)"
+>
+
+  <!ENTITY % db.all.blocks
+       "(%db.nopara.blocks; | %db.para.blocks; | annotation)"
+>
+
+  <!ENTITY % db.bibliographic.elements
+       "(%db.info.elements; | %db.publishing.inlines; | citerefentry | citetitle | citebiblioid | person | personblurb | personname | subtitle | title | titleabbrev)"
+>
+
+  <!ENTITY % db.procedure.info
+       "%db._info.title.only;"
+>
+
+  <!ENTITY % db.step.info
+       "%db._info.title.only;"
+>
+
+  <!ENTITY % db.sidebar.info
+       "%db._info;"
+>
+
+  <!ENTITY % db.abstract.info
+       "%db._info.title.only;"
+>
+
+  <!ENTITY % db.personblurb.info
+       "%db._info.title.only;"
+>
+
+  <!ENTITY % db.blockquote.info
+       "%db._info.title.only;"
+>
+
+  <!ENTITY % db.formalpara.info
+       "%db._info.title.onlyreq;"
+>
+
+  <!ENTITY % db.itemizedlist.info
+       "%db._info.title.only;"
+>
+
+  <!ENTITY % db.orderedlist.info
+       "%db._info.title.only;"
+>
+
+  <!ENTITY % db.segmentedlist.info
+       "%db._info.title.only;"
+>
+
+  <!ENTITY % db.variablelist.info
+       "%db._info.title.only;"
+>
+
+  <!ENTITY % db.example.info
+       "%db._info.title.onlyreq;"
+>
+
+  <!ENTITY % db.screenshot.info
+       "%db._info;"
+>
+
+  <!ENTITY % db.figure.info
+       "%db._info.title.onlyreq;"
+>
+
+  <!ENTITY % db.videodata.align.attribute
+       "align  %db.videodata.align.enumeration;                #IMPLIED
+       "
+>
+
+  <!ENTITY % db.videodata.valign.attribute
+       "valign %db.videodata.valign.enumeration;               #IMPLIED
+       "
+>
+
+  <!ENTITY % db.videodata.scalefit.attribute
+       "scalefit       %db.videodata.scalefit.enumeration;             #IMPLIED
+       "
+>
+
+  <!ENTITY % db.imagedata.align.attribute
+       "align  %db.imagedata.align.enumeration;                #IMPLIED
+       "
+>
+
+  <!ENTITY % db.imagedata.valign.attribute
+       "valign %db.imagedata.valign.enumeration;               #IMPLIED
+       "
+>
+
+  <!ENTITY % db.imagedata.scalefit.attribute
+       "scalefit       %db.imagedata.scalefit.enumeration;             #IMPLIED
+       "
+>
+
+  <!ENTITY % db.bibliocoverage.coverage.attrib
+       "%db.bibliocoverage.spatial.attribute;
+       %db.bibliocoverage.temporal.attribute;
+       "
+>
+
+  <!ENTITY % db.legalnotice.info
+       "%db._info.title.only;"
+>
+
+  <!ENTITY % db.revhistory.info
+       "%db._info.title.only;"
+>
+
+  <!ENTITY % db.replaceable.inlines
+       "(((#PCDATA | %db.ubiq.inlines; | phrase | replaceable))* | co)"
+>
+
+  <!ENTITY % db.set.info
+       "%db._info.title.req;"
+>
+
+  <!ENTITY % db.book.info
+       "%db._info;"
+>
+
+  <!ENTITY % db.dedication.info
+       "%db._info;"
+>
+
+  <!ENTITY % db.acknowledgements.info
+       "%db._info;"
+>
+
+  <!ENTITY % db.colophon.info
+       "%db._info;"
+>
+
+  <!ENTITY % db.appendix.info
+       "%db._info.title.req;"
+>
+
+  <!ENTITY % db.chapter.info
+       "%db._info.title.req;"
+>
+
+  <!ENTITY % db.part.contentmodel
+       "((%db.part.components;)+ | (topic)+)"
+>
+
+  <!ENTITY % db.part.info
+       "%db._info.title.req;"
+>
+
+  <!ENTITY % db.preface.info
+       "%db._info.title.req;"
+>
+
+  <!ENTITY % db.partintro.info
+       "%db._info;"
+>
+
+  <!ENTITY % db.section.info
+       "%db._info.title.req;"
+>
+
+  <!ENTITY % db.simplesect.info
+       "%db._info.title.req;"
+>
+
+  <!ENTITY % db.article.info
+       "%db._info.title.req;"
+>
+
+  <!ENTITY % db.annotation.info
+       "%db._info.title.only;"
+>
+
+  <!ENTITY % db.sect1.info
+       "%db._info.title.req;"
+>
+
+  <!ENTITY % db.sect2.info
+       "%db._info.title.req;"
+>
+
+  <!ENTITY % db.sect3.info
+       "%db._info.title.req;"
+>
+
+  <!ENTITY % db.sect4.info
+       "%db._info.title.req;"
+>
+
+  <!ENTITY % db.sect5.info
+       "%db._info.title.req;"
+>
+
+  <!ENTITY % db.reference.info
+       "%db._info.title.req;"
+>
+
+  <!ENTITY % db.refmiscinfo.class.attribute
+       "%db.refmiscinfo.class-enum.attribute;
+       %db.refmiscinfo.class-other.attribute;
+       "
+>
+
+  <!ENTITY % db.refsynopsisdiv.info
+       "%db._info;"
+>
+
+  <!ENTITY % db.refsection.info
+       "%db._info.title.req;"
+>
+
+  <!ENTITY % db.refsect1.info
+       "%db._info.title.req;"
+>
+
+  <!ENTITY % db.refsect2.info
+       "%db._info.title.req;"
+>
+
+  <!ENTITY % db.refsect3.info
+       "%db._info.title.req;"
+>
+
+  <!ENTITY % db.glosslist.info
+       "%db._info.title.only;"
+>
+
+  <!ENTITY % db.glossary.info
+       "%db._info;"
+>
+
+  <!ENTITY % db.glossdiv.info
+       "%db._info.title.req;"
+>
+
+  <!ENTITY % db.bibliography.info
+       "%db._info;"
+>
+
+  <!ENTITY % db.bibliodiv.info
+       "%db._info.title.req;"
+>
+
+  <!ENTITY % db.bibliolist.info
+       "%db._info.title.only;"
+>
+
+  <!ENTITY % db.index.info
+       "%db._info;"
+>
+
+  <!ENTITY % db.setindex.info
+       "%db._info;"
+>
+
+  <!ENTITY % db.indexdiv.info
+       "%db._info.title.req;"
+>
+
+  <!ENTITY % db.toc.info
+       "%db._info.title.only;"
+>
+
+  <!ENTITY % db.tocdiv.info
+       "%db._info;"
+>
+
+  <!ENTITY % db.task.info
+       "%db._info.title.req;"
+>
+
+  <!ENTITY % db.tasksummary.info
+       "%db._info.title.only;"
+>
+
+  <!ENTITY % db.taskprerequisites.info
+       "%db._info.title.only;"
+>
+
+  <!ENTITY % db.taskrelated.info
+       "%db._info.title.only;"
+>
+
+  <!ENTITY % db.calloutlist.info
+       "%db._info.title.only;"
+>
+
+  <!ENTITY % db.productionset.info
+       "%db._info.title.only;"
+>
+
+  <!ENTITY % db.constraintdef.info
+       "%db._info.title.only;"
+>
+
+  <!ENTITY % db.cals.table.info
+       "%db._info.title.onlyreq;"
+>
+
+  <!ENTITY % db.html.table.model
+       "((%db.html.table.info;)?, caption, ((col)* | (colgroup)*), thead?, tfoot?, ((tbody)+ | (tr)+))"
+>
+
+  <!ENTITY % db.html.informaltable.model
+       "((%db.html.informaltable.info;)?, ((col)* | (colgroup)*), thead?, tfoot?, ((tbody)+ | (tr)+))"
+>
+
+  <!ENTITY % db.msgset.info
+       "%db._info.title.only;"
+>
+
+  <!ENTITY % db.msg.info
+       "%db._info.title.only;"
+>
+
+  <!ENTITY % db.msgmain.info
+       "%db._info.title.only;"
+>
+
+  <!ENTITY % db.msgsub.info
+       "%db._info.title.only;"
+>
+
+  <!ENTITY % db.msgrel.info
+       "%db._info.title.only;"
+>
+
+  <!ENTITY % db.msgexplan.info
+       "%db._info.title.only;"
+>
+
+  <!ENTITY % db.qandaset.info
+       "%db._info.title.only;"
+>
+
+  <!ENTITY % db.qandadiv.info
+       "%db._info.title.only;"
+>
+
+  <!ENTITY % db.qandaentry.info
+       "%db._info.title.only;"
+>
+
+  <!ENTITY % db.equation.info
+       "%db._info.title.only;"
+>
+
+  <!ENTITY % db.computeroutput.inlines
+       "(#PCDATA | %db.ubiq.inlines; | %db.os.inlines; | %db.technical.inlines; | co | %db.markup.inlines;)"
+>
+
+  <!ENTITY % db.userinput.inlines
+       "(#PCDATA | %db.ubiq.inlines; | %db.os.inlines; | %db.technical.inlines; | co | %db.markup.inlines; | %db.gui.inlines; | %db.keyboard.inlines;)"
+>
+
+  <!ENTITY % db.prompt.inlines
+       "(((#PCDATA | %db.ubiq.inlines; | phrase | replaceable))* | co)"
+>
+
+  <!ENTITY % db.initializer.inlines
+       "(((#PCDATA | %db.ubiq.inlines; | phrase | replaceable))* | mathphrase | %db.markup.inlines;)"
+>
+
+  <!ENTITY % db.systemitem.inlines
+       "(((#PCDATA | %db.ubiq.inlines; | phrase | replaceable))* | co)"
+>
+
+  <!ENTITY % db.systemitem.class.attribute
+       "%db.systemitem.class-enum.attribute;
+       %db.systemitem.class-other.attribute;
+       "
+>
+
+  <!ENTITY % db.topic.info
+       "%db._info.title.req;"
+>
+
+  <!ENTITY % db.assembly.info
+       "%db._info;"
+>
+
+  <!ENTITY % db.structure.info
+       "%db._info.title.req;"
+>
+
+  <!ENTITY % db.module.info
+       "%db._info;"
+>
+
+  <!ENTITY % db.relationships.info
+       "%db._info;"
+>
+
+  <!ENTITY % db.transforms.info
+       "%db._info;"
+>
+
+  <!ENTITY % db.common.attributes
+       "%db.xml.id.attribute;
+       %db.common.base.attributes;
+       %db.annotations.attribute;
+       "
+>
+
+  <!ENTITY % db.common.idreq.attributes
+       "%db.xml.id.attribute.REQ;
+       %db.common.base.attributes;
+       %db.annotations.attribute;
+       "
+>
+
+  <!ENTITY % db.common.linking.attributes
+       "%db.linkend.attribute;
+       %db.href.attributes;
+       "
+>
+
+  <!ENTITY % db.common.req.linking.attributes
+       "%db.linkend.attribute.REQ;
+       %db.href.attributes;
+       "
+>
+
+  <!ENTITY % db.verbatim.attributes
+       "%db.verbatim.common.attributes;
+       %db.verbatim.language.attribute;
+       "
+>
+
+  <!ENTITY % db.all.inlines
+       "(#PCDATA | %db.ubiq.inlines; | %db.general.inlines; | %db.domain.inlines;)"
+>
+
+  <!ENTITY % db.verbatim.inlines
+       "((#PCDATA | %db.ubiq.inlines; | %db.general.inlines; | %db.domain.inlines;) | lineannotation | co)"
+>
+
+  <!ENTITY % db.verbatim.contentmodel
+       "(%db._info.title.forbidden;, (textobject | (((#PCDATA | %db.ubiq.inlines; | %db.general.inlines; | %db.domain.inlines;) | lineannotation | co))*))"
+>
+
+  <!ENTITY % db.toplevel.blocks.or.sections
+       "(((%db.all.blocks;)+, (%db.toplevel.sections;)?) | %db.toplevel.sections;)"
+>
+
+  <!ENTITY % db.recursive.blocks.or.sections
+       "(((%db.all.blocks;)+, (%db.recursive.sections;)?) | %db.recursive.sections;)"
+>
+
+  <!ENTITY % db.admonition.contentmodel
+       "(%db._info.title.only;, (%db.all.blocks;)+)"
+>
+
+  <!ENTITY % db.title.attlist
+       "%db.title.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.titleabbrev.attlist
+       "%db.titleabbrev.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.subtitle.attlist
+       "%db.subtitle.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.info.attlist
+       "%db.info.role.attribute;
+       %db.common.attributes;
+       "
+>
+
+  <!ENTITY % db.subjectset.attlist
+       "%db.subjectset.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.subjectset.scheme.attribute;
+       "
+>
+
+  <!ENTITY % db.subject.attlist
+       "%db.subject.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.subject.weight.attribute;
+       "
+>
+
+  <!ENTITY % db.subjectterm.attlist
+       "%db.subjectterm.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.keywordset.attlist
+       "%db.keywordset.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.keyword.attlist
+       "%db.keyword.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.procedure.attlist
+       "%db.procedure.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.step.attlist
+       "%db.step.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.performance.attribute;
+       "
+>
+
+  <!ENTITY % db.stepalternatives.attlist
+       "%db.stepalternatives.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.performance.attribute;
+       "
+>
+
+  <!ENTITY % db.substeps.attlist
+       "%db.substeps.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.performance.attribute;
+       "
+>
+
+  <!ENTITY % db.sidebar.attlist
+       "%db.sidebar.role.attribute;
+       %db.floatstyle.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.abstract.attlist
+       "%db.abstract.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.personblurb.attlist
+       "%db.personblurb.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.blockquote.attlist
+       "%db.blockquote.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.attribution.attlist
+       "%db.attribution.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.bridgehead.attlist
+       "%db.bridgehead.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.bridgehead.renderas.attribute;
+       "
+>
+
+  <!ENTITY % db.remark.attlist
+       "%db.remark.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.epigraph.attlist
+       "%db.epigraph.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.footnote.attlist
+       "%db.footnote.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.footnote.label.attribute;
+       "
+>
+
+  <!ENTITY % db.formalpara.attlist
+       "%db.formalpara.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.para.attlist
+       "%db.para.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.simpara.attlist
+       "%db.simpara.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.itemizedlist.attlist
+       "%db.itemizedlist.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.spacing.attribute;
+       %db.itemizedlist.mark.attribute;
+       "
+>
+
+  <!ENTITY % db.orderedlist.attlist
+       "%db.orderedlist.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.spacing.attribute;
+       %db.orderedlist.continuation.attribute;
+       %db.orderedlist.startingnumber.attribute;
+       %db.orderedlist.inheritnum.attribute;
+       %db.orderedlist.numeration.attribute;
+       "
+>
+
+  <!ENTITY % db.listitem.attlist
+       "%db.listitem.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.listitem.override.attribute;
+       "
+>
+
+  <!ENTITY % db.segmentedlist.attlist
+       "%db.segmentedlist.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.segtitle.attlist
+       "%db.segtitle.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.seglistitem.attlist
+       "%db.seglistitem.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.seg.attlist
+       "%db.seg.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.simplelist.attlist
+       "%db.simplelist.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.simplelist.type.attribute;
+       %db.simplelist.columns.attribute;
+       "
+>
+
+  <!ENTITY % db.member.attlist
+       "%db.member.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.variablelist.attlist
+       "%db.variablelist.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.spacing.attribute;
+       %db.variablelist.termlength.attribute;
+       "
+>
+
+  <!ENTITY % db.varlistentry.attlist
+       "%db.varlistentry.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.term.attlist
+       "%db.term.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.example.attlist
+       "%db.example.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.label.attribute;
+       %db.floatstyle.attribute;
+       %db.width.characters.attribute;
+       %db.pgwide.attribute;
+       "
+>
+
+  <!ENTITY % db.informalexample.attlist
+       "%db.informalexample.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.floatstyle.attribute;
+       %db.width.characters.attribute;
+       "
+>
+
+  <!ENTITY % db.literallayout.attlist
+       "%db.literallayout.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.verbatim.attributes;
+       %db.literallayout.class.attribute;
+       "
+>
+
+  <!ENTITY % db.screen.attlist
+       "%db.screen.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.verbatim.attributes;
+       %db.width.characters.attribute;
+       "
+>
+
+  <!ENTITY % db.screenshot.attlist
+       "%db.screenshot.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.figure.attlist
+       "%db.figure.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.label.attribute;
+       %db.pgwide.attribute;
+       %db.floatstyle.attribute;
+       "
+>
+
+  <!ENTITY % db.informalfigure.attlist
+       "%db.informalfigure.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.label.attribute;
+       %db.pgwide.attribute;
+       %db.floatstyle.attribute;
+       "
+>
+
+  <!ENTITY % db.mediaobject.attlist
+       "%db.mediaobject.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.inlinemediaobject.attlist
+       "%db.inlinemediaobject.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.videoobject.attlist
+       "%db.videoobject.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.audioobject.attlist
+       "%db.audioobject.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.imageobject.attlist
+       "%db.imageobject.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.textobject.attlist
+       "%db.textobject.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.videodata.attlist
+       "%db.videodata.role.attribute;
+       %db.common.attributes;
+       %db.common.data.attributes;
+       %db.videodata.align.attribute;
+       %db.videodata.valign.attribute;
+       %db.width.attribute;
+       %db.contentwidth.attribute;
+       %db.videodata.scalefit.attribute;
+       %db.scale.attribute;
+       %db.depth.attribute;
+       %db.contentdepth.attribute;
+       "
+>
+
+  <!ENTITY % db.audiodata.attlist
+       "%db.audiodata.role.attribute;
+       %db.common.attributes;
+       %db.common.data.attributes;
+       "
+>
+
+  <!ENTITY % db.imagedata.attlist
+       "%db.imagedata.role.attribute;
+       %db.common.attributes;
+       %db.common.data.attributes;
+       %db.imagedata.align.attribute;
+       %db.imagedata.valign.attribute;
+       %db.width.attribute;
+       %db.contentwidth.attribute;
+       %db.imagedata.scalefit.attribute;
+       %db.scale.attribute;
+       %db.depth.attribute;
+       %db.contentdepth.attribute;
+       "
+>
+
+  <!ENTITY % db.textdata.attlist
+       "%db.textdata.role.attribute;
+       %db.common.attributes;
+       %db.common.data.attributes;
+       %db.textdata.encoding.attribute;
+       "
+>
+
+  <!ENTITY % db.caption.attlist
+       "%db.caption.role.attribute;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.address.attlist
+       "%db.address.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.verbatim.attributes;
+       "
+>
+
+  <!ENTITY % db.street.attlist
+       "%db.street.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.pob.attlist
+       "%db.pob.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.postcode.attlist
+       "%db.postcode.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.city.attlist
+       "%db.city.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.state.attlist
+       "%db.state.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.country.attlist
+       "%db.country.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.phone.attlist
+       "%db.phone.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.fax.attlist
+       "%db.fax.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.otheraddr.attlist
+       "%db.otheraddr.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.affiliation.attlist
+       "%db.affiliation.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.shortaffil.attlist
+       "%db.shortaffil.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.jobtitle.attlist
+       "%db.jobtitle.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.orgname.attlist
+       "%db.orgname.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.orgname.class.attribute;
+       "
+>
+
+  <!ENTITY % db.orgdiv.attlist
+       "%db.orgdiv.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.artpagenums.attlist
+       "%db.artpagenums.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.personname.attlist
+       "%db.personname.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.author.attlist
+       "%db.author.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.authorgroup.attlist
+       "%db.authorgroup.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.collab.attlist
+       "%db.collab.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.authorinitials.attlist
+       "%db.authorinitials.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.person.attlist
+       "%db.person.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.org.attlist
+       "%db.org.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.confgroup.attlist
+       "%db.confgroup.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.confdates.attlist
+       "%db.confdates.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.conftitle.attlist
+       "%db.conftitle.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.confnum.attlist
+       "%db.confnum.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.confsponsor.attlist
+       "%db.confsponsor.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.contractnum.attlist
+       "%db.contractnum.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.contractsponsor.attlist
+       "%db.contractsponsor.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.copyright.attlist
+       "%db.copyright.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.year.attlist
+       "%db.year.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.holder.attlist
+       "%db.holder.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.cover.attlist
+       "%db.cover.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.date.attlist
+       "%db.date.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.edition.attlist
+       "%db.edition.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.editor.attlist
+       "%db.editor.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.biblioid.attlist
+       "%db.biblioid.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.biblio.class.attribute;
+       "
+>
+
+  <!ENTITY % db.citebiblioid.attlist
+       "%db.citebiblioid.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.biblio.class.attribute;
+       "
+>
+
+  <!ENTITY % db.bibliosource.attlist
+       "%db.bibliosource.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.biblio.class.attribute;
+       "
+>
+
+  <!ENTITY % db.bibliorelation.attlist
+       "%db.bibliorelation.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.biblio.class.attribute;
+       %db.bibliorelation.type.attribute;
+       "
+>
+
+  <!ENTITY % db.bibliocoverage.attlist
+       "%db.bibliocoverage.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.bibliocoverage.coverage.attrib;
+       "
+>
+
+  <!ENTITY % db.legalnotice.attlist
+       "%db.legalnotice.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.othercredit.attlist
+       "%db.othercredit.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.othercredit.class.attribute;
+       "
+>
+
+  <!ENTITY % db.pagenums.attlist
+       "%db.pagenums.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.contrib.attlist
+       "%db.contrib.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.honorific.attlist
+       "%db.honorific.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.firstname.attlist
+       "%db.firstname.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.givenname.attlist
+       "%db.givenname.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.surname.attlist
+       "%db.surname.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.lineage.attlist
+       "%db.lineage.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.othername.attlist
+       "%db.othername.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.printhistory.attlist
+       "%db.printhistory.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.pubdate.attlist
+       "%db.pubdate.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.publisher.attlist
+       "%db.publisher.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.publishername.attlist
+       "%db.publishername.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.releaseinfo.attlist
+       "%db.releaseinfo.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.revhistory.attlist
+       "%db.revhistory.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.revision.attlist
+       "%db.revision.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.revnumber.attlist
+       "%db.revnumber.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.revremark.attlist
+       "%db.revremark.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.revdescription.attlist
+       "%db.revdescription.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.seriesvolnums.attlist
+       "%db.seriesvolnums.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.volumenum.attlist
+       "%db.volumenum.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.issuenum.attlist
+       "%db.issuenum.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.package.attlist
+       "%db.package.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.email.attlist
+       "%db.email.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.lineannotation.attlist
+       "%db.lineannotation.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.parameter.attlist
+       "%db.parameter.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.parameter.class.attribute;
+       "
+>
+
+  <!ENTITY % db.replaceable.attlist
+       "%db.replaceable.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.replaceable.class.attribute;
+       "
+>
+
+  <!ENTITY % db.uri.attlist
+       "%db.uri.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.uri.type.attribute;
+       "
+>
+
+  <!ENTITY % db.abbrev.attlist
+       "%db.abbrev.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.acronym.attlist
+       "%db.acronym.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.citation.attlist
+       "%db.citation.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.citerefentry.attlist
+       "%db.citerefentry.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.refentrytitle.attlist
+       "%db.refentrytitle.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.manvolnum.attlist
+       "%db.manvolnum.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.citetitle.attlist
+       "%db.citetitle.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.citetitle.pubwork.attribute;
+       "
+>
+
+  <!ENTITY % db.emphasis.attlist
+       "%db.emphasis.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.foreignphrase.attlist
+       "%db.foreignphrase.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.phrase.attlist
+       "%db.phrase.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.quote.attlist
+       "%db.quote.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.subscript.attlist
+       "%db.subscript.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.superscript.attlist
+       "%db.superscript.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.trademark.attlist
+       "%db.trademark.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.trademark.class.attribute;
+       "
+>
+
+  <!ENTITY % db.wordasword.attlist
+       "%db.wordasword.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.footnoteref.attlist
+       "%db.footnoteref.role.attribute;
+       %db.common.attributes;
+       %db.linkend.attribute.REQ;
+       %db.label.attribute;
+       "
+>
+
+  <!ENTITY % db.xref.attlist
+       "%db.xref.role.attribute;
+       %db.common.attributes;
+       %db.common.req.linking.attributes;
+       %db.xrefstyle.attribute;
+       %db.endterm.attribute;
+       "
+>
+
+  <!ENTITY % db.link.attlist
+       "%db.link.role.attribute;
+       %db.common.attributes;
+       %db.common.req.linking.attributes;
+       %db.xrefstyle.attribute;
+       %db.endterm.attribute;
+       "
+>
+
+  <!ENTITY % db.olink.attlist
+       "%db.common.attributes;
+       %db.olink.targetdoc.attribute;
+       %db.olink.role.attribute;
+       %db.xrefstyle.attribute;
+       %db.olink.localinfo.attribute;
+       %db.olink.targetptr.attribute;
+       %db.olink.type.attribute;
+       "
+>
+
+  <!ENTITY % db.anchor.attlist
+       "%db.anchor.role.attribute;
+       %db.common.idreq.attributes;
+       "
+>
+
+  <!ENTITY % db.alt.attlist
+       "%db.alt.role.attribute;
+       %db.common.attributes;
+       "
+>
+
+  <!ENTITY % db.component.contentmodel
+       "((%db.navigation.components;)*, %db.toplevel.blocks.or.sections;, (%db.navigation.components;)*)"
+>
+
+  <!ENTITY % db.set.attlist
+       "%db.set.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.label.attribute;
+       %db.status.attribute;
+       "
+>
+
+  <!ENTITY % db.book.attlist
+       "%db.book.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.label.attribute;
+       %db.status.attribute;
+       "
+>
+
+  <!ENTITY % db.dedication.attlist
+       "%db.dedication.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.label.attribute;
+       %db.status.attribute;
+       "
+>
+
+  <!ENTITY % db.acknowledgements.attlist
+       "%db.acknowledgements.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.label.attribute;
+       %db.status.attribute;
+       "
+>
+
+  <!ENTITY % db.colophon.attlist
+       "%db.colophon.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.label.attribute;
+       %db.status.attribute;
+       "
+>
+
+  <!ENTITY % db.appendix.attlist
+       "%db.appendix.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.label.attribute;
+       %db.status.attribute;
+       "
+>
+
+  <!ENTITY % db.chapter.attlist
+       "%db.chapter.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.label.attribute;
+       %db.status.attribute;
+       "
+>
+
+  <!ENTITY % db.part.attlist
+       "%db.part.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.label.attribute;
+       %db.status.attribute;
+       "
+>
+
+  <!ENTITY % db.preface.attlist
+       "%db.preface.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.label.attribute;
+       %db.status.attribute;
+       "
+>
+
+  <!ENTITY % db.partintro.attlist
+       "%db.partintro.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.label.attribute;
+       %db.status.attribute;
+       "
+>
+
+  <!ENTITY % db.section.attlist
+       "%db.section.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.label.attribute;
+       %db.status.attribute;
+       "
+>
+
+  <!ENTITY % db.simplesect.attlist
+       "%db.simplesect.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.label.attribute;
+       %db.status.attribute;
+       "
+>
+
+  <!ENTITY % db.article.attlist
+       "%db.article.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.label.attribute;
+       %db.status.attribute;
+       %db.article.class.attribute;
+       "
+>
+
+  <!ENTITY % db.annotation.attlist
+       "%db.annotation.role.attribute;
+       %db.annotation.annotates.attribute;
+       %db.common.attributes;
+       "
+>
+
+  <!ENTITY % db.extendedlink.attlist
+       "%db.extendedlink.role.attribute;
+       %db.common.attributes;
+       xlink:type      (extended)              #IMPLIED
+       %db.xlink.role.attribute;
+       %db.xlink.title.attribute;
+       "
+>
+
+  <!ENTITY % db.locator.attlist
+       "%db.locator.role.attribute;
+       %db.common.attributes;
+       xlink:type      (locator)               #IMPLIED
+       %db.xlink.href.attribute;
+       %db.xlink.role.attribute;
+       %db.xlink.title.attribute;
+       %db.xlink.label.attribute;
+       "
+>
+
+  <!ENTITY % db.arc.attlist
+       "%db.arc.role.attribute;
+       %db.common.attributes;
+       xlink:type      (arc)           #IMPLIED
+       %db.xlink.arcrole.attribute;
+       %db.xlink.title.attribute;
+       %db.xlink.show.attribute;
+       %db.xlink.actuate.attribute;
+       %db.xlink.from.attribute;
+       %db.xlink.to.attribute;
+       "
+>
+
+  <!ENTITY % db.sect1.attlist
+       "%db.sect1.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.label.attribute;
+       %db.status.attribute;
+       "
+>
+
+  <!ENTITY % db.sect2.attlist
+       "%db.sect2.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.label.attribute;
+       %db.status.attribute;
+       "
+>
+
+  <!ENTITY % db.sect3.attlist
+       "%db.sect3.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.label.attribute;
+       %db.status.attribute;
+       "
+>
+
+  <!ENTITY % db.sect4.attlist
+       "%db.sect4.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.label.attribute;
+       %db.status.attribute;
+       "
+>
+
+  <!ENTITY % db.sect5.attlist
+       "%db.sect5.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.label.attribute;
+       %db.status.attribute;
+       "
+>
+
+  <!ENTITY % db.reference.attlist
+       "%db.reference.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.status.attribute;
+       %db.label.attribute;
+       "
+>
+
+  <!ENTITY % db.refentry.attlist
+       "%db.refentry.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.status.attribute;
+       %db.label.attribute;
+       "
+>
+
+  <!ENTITY % db.refmeta.attlist
+       "%db.refmeta.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.refmiscinfo.attlist
+       "%db.refmiscinfo.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.refmiscinfo.class.attribute;
+       "
+>
+
+  <!ENTITY % db.refnamediv.attlist
+       "%db.refnamediv.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.refdescriptor.attlist
+       "%db.refdescriptor.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.refname.attlist
+       "%db.refname.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.refpurpose.attlist
+       "%db.refpurpose.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.refclass.attlist
+       "%db.refclass.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.refsynopsisdiv.attlist
+       "%db.refsynopsisdiv.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.refsection.attlist
+       "%db.refsection.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.status.attribute;
+       %db.label.attribute;
+       "
+>
+
+  <!ENTITY % db.refsect1.attlist
+       "%db.refsect1.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.label.attribute;
+       %db.status.attribute;
+       "
+>
+
+  <!ENTITY % db.refsect2.attlist
+       "%db.refsect2.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.label.attribute;
+       %db.status.attribute;
+       "
+>
+
+  <!ENTITY % db.refsect3.attlist
+       "%db.refsect3.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.label.attribute;
+       %db.status.attribute;
+       "
+>
+
+  <!ENTITY % db.glosslist.attlist
+       "%db.glosslist.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.glossentry.attlist
+       "%db.glossentry.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.glossentry.sortas.attribute;
+       "
+>
+
+  <!ENTITY % db.glossdef.attlist
+       "%db.glossdef.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.glossdef.subject.attribute;
+       "
+>
+
+  <!ENTITY % db.glosssee.attlist
+       "%db.glosssee.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.glosssee.otherterm.attribute;
+       "
+>
+
+  <!ENTITY % db.glossseealso.attlist
+       "%db.glossseealso.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.glossseealso.otherterm.attribute;
+       "
+>
+
+  <!ENTITY % db.firstterm.attlist
+       "%db.firstterm.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.baseform.attribute;
+       "
+>
+
+  <!ENTITY % db.glossterm.attlist
+       "%db.glossterm.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.baseform.attribute;
+       "
+>
+
+  <!ENTITY % db.glossary.attlist
+       "%db.glossary.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.label.attribute;
+       %db.status.attribute;
+       "
+>
+
+  <!ENTITY % db.glossdiv.attlist
+       "%db.glossdiv.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.label.attribute;
+       %db.status.attribute;
+       "
+>
+
+  <!ENTITY % db.termdef.attlist
+       "%db.termdef.role.attribute;
+       %db.glossentry.sortas.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.baseform.attribute;
+       "
+>
+
+  <!ENTITY % db.biblioentry.attlist
+       "%db.biblioentry.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.bibliomixed.attlist
+       "%db.bibliomixed.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.biblioset.attlist
+       "%db.biblioset.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.relation.attribute;
+       "
+>
+
+  <!ENTITY % db.bibliomset.attlist
+       "%db.bibliomset.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.relation.attribute;
+       "
+>
+
+  <!ENTITY % db.bibliomisc.attlist
+       "%db.bibliomisc.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.bibliography.attlist
+       "%db.bibliography.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.label.attribute;
+       %db.status.attribute;
+       "
+>
+
+  <!ENTITY % db.bibliodiv.attlist
+       "%db.bibliodiv.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.label.attribute;
+       %db.status.attribute;
+       "
+>
+
+  <!ENTITY % db.bibliolist.attlist
+       "%db.bibliolist.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.biblioref.attlist
+       "%db.biblioref.role.attribute;
+       %db.common.attributes;
+       %db.common.req.linking.attributes;
+       %db.xrefstyle.attribute;
+       %db.endterm.attribute;
+       %db.biblioref.units.attribute;
+       %db.biblioref.begin.attribute;
+       %db.biblioref.end.attribute;
+       "
+>
+
+  <!ENTITY % db.itermset.attlist
+       "%db.itermset.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.primary.attlist
+       "%db.primary.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.sortas.attribute;
+       "
+>
+
+  <!ENTITY % db.secondary.attlist
+       "%db.secondary.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.sortas.attribute;
+       "
+>
+
+  <!ENTITY % db.tertiary.attlist
+       "%db.tertiary.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.sortas.attribute;
+       "
+>
+
+  <!ENTITY % db.see.attlist
+       "%db.see.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.seealso.attlist
+       "%db.seealso.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.index.attlist
+       "%db.index.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.label.attribute;
+       %db.status.attribute;
+       %db.index.type.attribute;
+       "
+>
+
+  <!ENTITY % db.setindex.attlist
+       "%db.setindex.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.label.attribute;
+       %db.status.attribute;
+       %db.index.type.attribute;
+       "
+>
+
+  <!ENTITY % db.indexdiv.attlist
+       "%db.indexdiv.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.label.attribute;
+       %db.status.attribute;
+       "
+>
+
+  <!ENTITY % db.indexentry.attlist
+       "%db.indexentry.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.primaryie.attlist
+       "%db.primaryie.role.attribute;
+       %db.common.attributes;
+       %db.linkends.attribute;
+       "
+>
+
+  <!ENTITY % db.secondaryie.attlist
+       "%db.secondaryie.role.attribute;
+       %db.common.attributes;
+       %db.linkends.attribute;
+       "
+>
+
+  <!ENTITY % db.tertiaryie.attlist
+       "%db.tertiaryie.role.attribute;
+       %db.common.attributes;
+       %db.linkends.attribute;
+       "
+>
+
+  <!ENTITY % db.seeie.attlist
+       "%db.seeie.role.attribute;
+       %db.common.attributes;
+       %db.linkend.attribute;
+       "
+>
+
+  <!ENTITY % db.seealsoie.attlist
+       "%db.seealsoie.role.attribute;
+       %db.common.attributes;
+       %db.linkends.attribute;
+       "
+>
+
+  <!ENTITY % db.toc.attlist
+       "%db.toc.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.tocdiv.attlist
+       "%db.tocdiv.role.attribute;
+       %db.common.attributes;
+       %db.toc.pagenum.attribute;
+       %db.linkend.attribute;
+       "
+>
+
+  <!ENTITY % db.tocentry.attlist
+       "%db.tocentry.role.attribute;
+       %db.common.attributes;
+       %db.toc.pagenum.attribute;
+       %db.linkend.attribute;
+       "
+>
+
+  <!ENTITY % db.task.attlist
+       "%db.task.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.tasksummary.attlist
+       "%db.tasksummary.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.taskprerequisites.attlist
+       "%db.taskprerequisites.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.taskrelated.attlist
+       "%db.taskrelated.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.calloutlist.attlist
+       "%db.calloutlist.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.callout.attlist
+       "%db.callout.role.attribute;
+       %db.common.attributes;
+       %db.callout.arearefs.attribute;
+       "
+>
+
+  <!ENTITY % db.programlistingco.attlist
+       "%db.programlistingco.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.areaspec.attlist
+       "%db.areaspec.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.area.units.attribute;
+       "
+>
+
+  <!ENTITY % db.area.attlist
+       "%db.area.role.attribute;
+       %db.common.idreq.attributes;
+       %db.area.units.attribute;
+       %db.area.linkends.attribute;
+       %db.href.attributes;
+       %db.area.label.attribute;
+       %db.area.coords.attribute;
+       "
+>
+
+  <!ENTITY % db.areaset.attlist
+       "%db.areaset.role.attribute;
+       %db.common.idreq.attributes;
+       %db.area.units.attribute;
+       %db.linkends.attribute;
+       %db.href.attributes;
+       %db.label.attribute;
+       "
+>
+
+  <!ENTITY % db.screenco.attlist
+       "%db.screenco.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.imageobjectco.attlist
+       "%db.imageobjectco.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.co.attlist
+       "%db.co.role.attribute;
+       %db.common.idreq.attributes;
+       %db.linkends.attribute;
+       %db.label.attribute;
+       "
+>
+
+  <!ENTITY % db.coref.attlist
+       "%db.coref.role.attribute;
+       %db.common.attributes;
+       %db.linkend.attribute.REQ;
+       %db.label.attribute;
+       "
+>
+
+  <!ENTITY % db.productionset.attlist
+       "%db.productionset.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.production.attlist
+       "%db.production.role.attribute;
+       %db.common.idreq.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.lhs.attlist
+       "%db.lhs.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.rhs.attlist
+       "%db.rhs.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.nonterminal.attlist
+       "%db.nonterminal.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.nonterminal.def.attribute;
+       "
+>
+
+  <!ENTITY % db.constraint.attlist
+       "%db.constraint.role.attribute;
+       %db.common.attributes;
+       %db.common.req.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.productionrecap.attlist
+       "%db.productionrecap.role.attribute;
+       %db.common.attributes;
+       %db.common.req.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.constraintdef.attlist
+       "%db.constraintdef.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.tgroup.attlist
+       "%db.tgroup.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.char.attribute;
+       %db.charoff.attribute;
+       %db.tgroup.tgroupstyle.attribute;
+       %db.tgroup.cols.attribute;
+       %db.colsep.attribute;
+       %db.rowsep.attribute;
+       %db.align.attribute;
+       "
+>
+
+  <!ENTITY % db.colspec.attlist
+       "%db.colspec.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.colspec.colnum.attribute;
+       %db.char.attribute;
+       %db.colsep.attribute;
+       %db.colspec.colwidth.attribute;
+       %db.charoff.attribute;
+       %db.colname.attribute;
+       %db.rowsep.attribute;
+       %db.align.attribute;
+       "
+>
+
+  <!ENTITY % db.spanspec.attlist
+       "%db.spanspec.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.spanname.attribute;
+       %db.spanspec.namest.attribute;
+       %db.spanspec.nameend.attribute;
+       %db.char.attribute;
+       %db.colsep.attribute;
+       %db.charoff.attribute;
+       %db.rowsep.attribute;
+       %db.align.attribute;
+       "
+>
+
+  <!ENTITY % db.row.attlist
+       "%db.row.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.rowsep.attribute;
+       %db.valign.attribute;
+       "
+>
+
+  <!ENTITY % db.entry.attlist
+       "%db.entry.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.valign.attribute;
+       %db.char.attribute;
+       %db.colsep.attribute;
+       %db.charoff.attribute;
+       %db.entry.morerows.attribute;
+       %db.column-spec.attributes;
+       %db.rowsep.attribute;
+       %db.entry.rotate.attribute;
+       %db.align.attribute;
+       "
+>
+
+  <!ENTITY % db.entrytbl.attlist
+       "%db.entrytbl.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.char.attribute;
+       %db.charoff.attribute;
+       %db.column-spec.attributes;
+       %db.entrytbl.tgroupstyle.attribute;
+       %db.entrytbl.cols.attribute;
+       %db.colsep.attribute;
+       %db.rowsep.attribute;
+       %db.align.attribute;
+       "
+>
+
+  <!ENTITY % db.html.attrs
+       "%db.common.attributes;
+       %db.html.coreattrs;
+       %db.html.i18n;
+       %db.html.events;
+       "
+>
+
+  <!ENTITY % db.msgset.attlist
+       "%db.msgset.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.msgentry.attlist
+       "%db.msgentry.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.simplemsgentry.attlist
+       "%db.simplemsgentry.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.simplemsgentry.msgaud.attribute;
+       %db.simplemsgentry.msgorig.attribute;
+       %db.simplemsgentry.msglevel.attribute;
+       "
+>
+
+  <!ENTITY % db.msg.attlist
+       "%db.msg.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.msgmain.attlist
+       "%db.msgmain.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.msgsub.attlist
+       "%db.msgsub.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.msgrel.attlist
+       "%db.msgrel.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.msgtext.attlist
+       "%db.msgtext.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.msginfo.attlist
+       "%db.msginfo.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.msglevel.attlist
+       "%db.msglevel.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.msgorig.attlist
+       "%db.msgorig.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.msgaud.attlist
+       "%db.msgaud.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.msgexplan.attlist
+       "%db.msgexplan.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.qandaset.attlist
+       "%db.qandaset.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.qandaset.defaultlabel.attribute;
+       "
+>
+
+  <!ENTITY % db.qandadiv.attlist
+       "%db.qandadiv.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.qandaentry.attlist
+       "%db.qandaentry.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.question.attlist
+       "%db.question.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.answer.attlist
+       "%db.answer.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.label.attlist
+       "%db.label.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.equation.attlist
+       "%db.equation.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.label.attribute;
+       %db.pgwide.attribute;
+       %db.floatstyle.attribute;
+       "
+>
+
+  <!ENTITY % db.informalequation.attlist
+       "%db.informalequation.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.inlineequation.attlist
+       "%db.inlineequation.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.mathphrase.attlist
+       "%db.mathphrase.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.markup.attlist
+       "%db.markup.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.tag.attlist
+       "%db.tag.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.tag.class.attribute;
+       %db.tag.namespace.attribute;
+       "
+>
+
+  <!ENTITY % db.symbol.attlist
+       "%db.symbol.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.symbol.class.attribute;
+       "
+>
+
+  <!ENTITY % db.token.attlist
+       "%db.token.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.literal.attlist
+       "%db.literal.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.code.attlist
+       "%db.code.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %code.language.attribute;
+       "
+>
+
+  <!ENTITY % db.constant.attlist
+       "%db.constant.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.constant.class.attribute;
+       "
+>
+
+  <!ENTITY % db.productname.attlist
+       "%db.productname.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.productname.class.attribute;
+       "
+>
+
+  <!ENTITY % db.productnumber.attlist
+       "%db.productnumber.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.database.attlist
+       "%db.database.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.database.class.attribute;
+       "
+>
+
+  <!ENTITY % db.application.attlist
+       "%db.application.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.application.class.attribute;
+       "
+>
+
+  <!ENTITY % db.hardware.attlist
+       "%db.hardware.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.guibutton.attlist
+       "%db.guibutton.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.guiicon.attlist
+       "%db.guiicon.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.guilabel.attlist
+       "%db.guilabel.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.guimenu.attlist
+       "%db.guimenu.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.guimenuitem.attlist
+       "%db.guimenuitem.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.guisubmenu.attlist
+       "%db.guisubmenu.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.menuchoice.attlist
+       "%db.menuchoice.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.mousebutton.attlist
+       "%db.mousebutton.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.keycap.attlist
+       "%db.keycap.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.keycap.function.attrib;
+       "
+>
+
+  <!ENTITY % db.keycode.attlist
+       "%db.keycode.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.keycombo.attlist
+       "%db.keycombo.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.keycombo.action.attrib;
+       "
+>
+
+  <!ENTITY % db.keysym.attlist
+       "%db.keysym.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.accel.attlist
+       "%db.accel.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.shortcut.attlist
+       "%db.shortcut.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.keycombo.action.attrib;
+       "
+>
+
+  <!ENTITY % db.prompt.attlist
+       "%db.prompt.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.envar.attlist
+       "%db.envar.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.filename.attlist
+       "%db.filename.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.filename.path.attribute;
+       %db.filename.class.attribute;
+       "
+>
+
+  <!ENTITY % db.command.attlist
+       "%db.command.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.computeroutput.attlist
+       "%db.computeroutput.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.userinput.attlist
+       "%db.userinput.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.cmdsynopsis.attlist
+       "%db.cmdsynopsis.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.cmdsynopsis.sepchar.attribute;
+       %db.cmdsynopsis.cmdlength.attribute;
+       %db.label.attribute;
+       "
+>
+
+  <!ENTITY % db.arg.attlist
+       "%db.arg.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.rep.attribute;
+       %db.choice.opt.attribute;
+       "
+>
+
+  <!ENTITY % db.sbr.attlist
+       "%db.sbr.role.attribute;
+       %db.common.attributes;
+       "
+>
+
+  <!ENTITY % db.synopfragment.attlist
+       "%db.synopfragment.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.synopfragmentref.attlist
+       "%db.synopfragmentref.role.attribute;
+       %db.common.attributes;
+       %db.linkend.attribute.REQ;
+       "
+>
+
+  <!ENTITY % db.synopsis.attlist
+       "%db.synopsis.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.verbatim.attributes;
+       %db.label.attribute;
+       "
+>
+
+  <!ENTITY % db.funcsynopsis.attlist
+       "%db.funcsynopsis.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.language.attribute;
+       "
+>
+
+  <!ENTITY % db.funcsynopsisinfo.attlist
+       "%db.funcsynopsisinfo.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.verbatim.attributes;
+       "
+>
+
+  <!ENTITY % db.funcprototype.attlist
+       "%db.funcprototype.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.funcdef.attlist
+       "%db.funcdef.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.function.attlist
+       "%db.function.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.void.attlist
+       "%db.void.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.varargs.attlist
+       "%db.varargs.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.paramdef.attlist
+       "%db.paramdef.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.paramdef.choice.attribute;
+       "
+>
+
+  <!ENTITY % db.funcparams.attlist
+       "%db.funcparams.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.classsynopsis.attlist
+       "%db.classsynopsis.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.language.attribute;
+       %db.classsynopsis.class.attribute;
+       "
+>
+
+  <!ENTITY % db.classsynopsisinfo.attlist
+       "%db.classsynopsisinfo.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.verbatim.attributes;
+       "
+>
+
+  <!ENTITY % db.ooclass.attlist
+       "%db.ooclass.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.oointerface.attlist
+       "%db.oointerface.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.ooexception.attlist
+       "%db.ooexception.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.modifier.attlist
+       "%db.modifier.xml.space.attribute;
+       %db.modifier.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.interfacename.attlist
+       "%db.interfacename.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.exceptionname.attlist
+       "%db.exceptionname.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.fieldsynopsis.attlist
+       "%db.fieldsynopsis.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.language.attribute;
+       "
+>
+
+  <!ENTITY % db.initializer.attlist
+       "%db.initializer.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.constructorsynopsis.attlist
+       "%db.constructorsynopsis.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.language.attribute;
+       "
+>
+
+  <!ENTITY % db.destructorsynopsis.attlist
+       "%db.destructorsynopsis.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.language.attribute;
+       "
+>
+
+  <!ENTITY % db.methodsynopsis.attlist
+       "%db.methodsynopsis.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.language.attribute;
+       "
+>
+
+  <!ENTITY % db.methodname.attlist
+       "%db.methodname.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.methodparam.attlist
+       "%db.methodparam.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.rep.attribute;
+       %db.choice.req.attribute;
+       "
+>
+
+  <!ENTITY % db.varname.attlist
+       "%db.varname.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.returnvalue.attlist
+       "%db.returnvalue.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.type.attlist
+       "%db.type.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.classname.attlist
+       "%db.classname.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.programlisting.attlist
+       "%db.programlisting.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.verbatim.attributes;
+       %db.width.characters.attribute;
+       "
+>
+
+  <!ENTITY % db.caution.attlist
+       "%db.caution.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.important.attlist
+       "%db.important.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.note.attlist
+       "%db.note.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.tip.attlist
+       "%db.tip.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.warning.attlist
+       "%db.warning.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.errorcode.attlist
+       "%db.errorcode.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.errorname.attlist
+       "%db.errorname.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.errortext.attlist
+       "%db.errortext.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.errortype.attlist
+       "%db.errortype.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.systemitem.attlist
+       "%db.systemitem.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.systemitem.class.attribute;
+       "
+>
+
+  <!ENTITY % db.option.attlist
+       "%db.option.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.optional.attlist
+       "%db.optional.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.property.attlist
+       "%db.property.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.topic.attlist
+       "%db.topic.role.attribute;
+       %db.topic.type.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.label.attribute;
+       %db.status.attribute;
+       "
+>
+
+  <!ENTITY % db.assembly.attlist
+       "%db.assembly.role.attribute;
+       %db.common.attributes;
+       "
+>
+
+  <!ENTITY % db.resources.attlist
+       "%db.resources.role.attribute;
+       %db.grammar.attribute;
+       %db.common.attributes;
+       "
+>
+
+  <!ENTITY % db.structure.attlist
+       "%db.structure.role.attribute;
+       %db.structure.type.attribute;
+       %db.structure.renderas.attribute;
+       %db.structure.defaultformat.attribute;
+       %db.common.attributes;
+       "
+>
+
+  <!ENTITY % db.output.attlist
+       "%db.output.role.attribute;
+       %db.common.attributes;
+       %db.output.chunk.attribute;
+       %db.output.format.attribute;
+       %db.output.file.attribute;
+       %db.output.renderas.attribute;
+       %db.grammar.attribute;
+       %db.output.transform.attribute;
+       %db.output.suppress.attribute;
+       "
+>
+
+  <!ENTITY % db.override.attlist
+       "%db.override.role.attribute;
+       %db.common.attributes;
+       "
+>
+
+  <!ENTITY % db.resource.module.attlist
+       "%db.module.role.attribute;
+       %db.module.chunk.attribute;
+       %db.module.resourceref.attribute;
+       %db.module.omittitles.attribute;
+       %db.module.contentonly.attribute;
+       %db.module.renderas.attribute;
+       %db.common.attributes;
+       "
+>
+
+  <!ENTITY % db.filterout.attlist
+       "%db.filterout.role.attribute;
+       %db.common.attributes;
+       "
+>
+
+  <!ENTITY % db.filterin.attlist
+       "%db.filterin.role.attribute;
+       %db.common.attributes;
+       "
+>
+
+  <!ENTITY % db.relationships.attlist
+       "%db.relationships.role.attribute;
+       %db.relationships.type.attribute;
+       %db.common.attributes;
+       "
+>
+
+  <!ENTITY % db.relationship.attlist
+       "%db.relationship.role.attribute;
+       %db.relationship.type.attribute;
+       %db.linkend.attribute;
+       %db.common.attributes;
+       "
+>
+
+  <!ENTITY % db.association.attlist
+       "%db.association.role.attribute;
+       %db.linkend.attribute;
+       %db.common.attributes;
+       "
+>
+
+  <!ENTITY % db.instance.attlist
+       "%db.instance.role.attribute;
+       %db.instance.linking.attribute;
+       %db.common.attributes;
+       "
+>
+
+  <!ENTITY % db.transforms.attlist
+       "%db.transforms.role.attribute;
+       %db.common.attributes;
+       "
+>
+
+  <!ENTITY % db.transform.attlist
+       "%db.transform.role.attribute;
+       %db.grammar.attribute.REQ;
+       %db.transform.name.attribute;
+       %db.transform.fileref.attribute;
+       %db.common.attributes;
+       "
+>
+
+  <!ENTITY % db.description.attlist
+       "%db.description.role.attribute;
+       %db.common.attributes;
+       "
+>
+
+  <!ENTITY % db.indexterm.attlist
+       "%db.indexterm.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.significance.attribute;
+       %db.zone.attribute;
+       %db.indexterm.pagenum.attribute;
+       %db.scope.attribute;
+       %db.index.type.attribute;
+       %db.indexterm.class.attribute;
+       "
+>
+
+  <!ENTITY % db.group.attlist
+       "%db.group.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.rep.attribute;
+       %db.choice.opt.attribute;
+       "
+>
+
+  <!ENTITY % db.thead.attlist
+       "%db.thead.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.html.coreattrs;
+       %db.html.i18n;
+       %db.html.events;
+       %db.html.cellhalign;
+       %db.html.cellvalign;
+       "
+>
+
+  <!ENTITY % db.tfoot.attlist
+       "%db.tfoot.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.html.coreattrs;
+       %db.html.i18n;
+       %db.html.events;
+       %db.html.cellhalign;
+       %db.html.cellvalign;
+       "
+>
+
+  <!ENTITY % db.tbody.attlist
+       "%db.tbody.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.html.coreattrs;
+       %db.html.i18n;
+       %db.html.events;
+       %db.html.cellhalign;
+       %db.html.cellvalign;
+       "
+>
+
+  <!ENTITY % db.table.attlist
+       "%db.table.role.attribute;
+       %db.label.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.tabstyle.attribute;
+       %db.floatstyle.attribute;
+       %db.orient.attribute;
+       %db.colsep.attribute;
+       %db.rowsep.attribute;
+       %db.pgwide.attribute;
+       shortentry      CDATA           #IMPLIED
+       tocentry        CDATA           #IMPLIED
+       %db.rowheader.attribute;
+       %db.html.coreattrs;
+       %db.html.i18n;
+       %db.html.events;
+       %db.html.table.attributes;
+       "
+>
+
+  <!ENTITY % db.informaltable.attlist
+       "%db.informaltable.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.tabstyle.attribute;
+       %db.floatstyle.attribute;
+       %db.orient.attribute;
+       %db.colsep.attribute;
+       %db.rowsep.attribute;
+       %db.pgwide.attribute;
+       %db.rowheader.attribute;
+       %db.html.coreattrs;
+       %db.html.i18n;
+       %db.html.events;
+       %db.html.table.attributes;
+       "
+>
+
+  <!ENTITY % db.resource.attlist
+       "%db.resource.role.attribute;
+       %db.resource.fileref.attribute;
+       %db.grammar.attribute;
+       %db.common.attributes;
+       "
+>
+
+  <!ENTITY % db.appendix.contentmodel
+       "(%db.component.contentmodel; | (topic)+)"
+>
+
+  <!ENTITY % db.chapter.contentmodel
+       "(%db.component.contentmodel; | (topic)+)"
+>
+
+  <!ENTITY % db.html.col.attlist
+       "%db.html.attrs;
+       span    CDATA           #IMPLIED
+       width   CDATA           #IMPLIED
+       %db.html.cellhalign;
+       %db.html.cellvalign;
+       "
+>
+
+  <!ENTITY % db.html.colgroup.attlist
+       "%db.html.attrs;
+       span    CDATA           #IMPLIED
+       width   CDATA           #IMPLIED
+       %db.html.cellhalign;
+       %db.html.cellvalign;
+       "
+>
+
+  <!ENTITY % db.html.tr.attlist
+       "%db.html.attrs;
+       %db.html.cellhalign;
+       %db.html.cellvalign;
+       "
+>
+
+  <!ENTITY % db.html.th.attlist
+       "%db.html.attrs;
+       %db.html.tablecell.attributes;
+       %db.html.cellhalign;
+       %db.html.cellvalign;
+       "
+>
+
+  <!ENTITY % db.html.td.attlist
+       "%db.html.attrs;
+       %db.html.tablecell.attributes;
+       %db.html.cellhalign;
+       %db.html.cellvalign;
+       "
+>
+
+  <!ATTLIST title
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.title.attlist;
+       
+>
+
+  <!ELEMENT title
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | application | author | biblioref | citation | citebiblioid | citerefentry | citetitle | classname | code | command | computeroutput | constant | coref | database | date | editor | email | emphasis | envar | errorcode | errorname | errortext | errortype | exceptionname | filename | firstterm | footnote | footnoteref | foreignphrase | function | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | indexterm | initializer | inlineequation | inlinemediaobject | interfacename | jobtitle | keycap | keycode | keycombo | keysym | link | literal | markup | menuchoice | methodname | modifier | mousebutton | nonterminal | olink | ooclass | ooexception | oointerface | option | optional | org | orgname | package | parameter | person | personname | phrase | productname | productnumber | prompt | property | quote | remark | replaceable | returnvalue | shortcut | subscript | superscript | symbol | systemitem | tag | termdef | token | trademark | type | uri | userinput | varname | wordasword | xref)*
+>
+
+  <!ATTLIST titleabbrev
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.titleabbrev.attlist;
+       
+>
+
+  <!ELEMENT titleabbrev
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | application | author | biblioref | citation | citebiblioid | citerefentry | citetitle | classname | code | command | computeroutput | constant | coref | database | date | editor | email | emphasis | envar | errorcode | errorname | errortext | errortype | exceptionname | filename | firstterm | footnote | footnoteref | foreignphrase | function | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | indexterm | initializer | inlineequation | inlinemediaobject | interfacename | jobtitle | keycap | keycode | keycombo | keysym | link | literal | markup | menuchoice | methodname | modifier | mousebutton | nonterminal | olink | ooclass | ooexception | oointerface | option | optional | org | orgname | package | parameter | person | personname | phrase | productname | productnumber | prompt | property | quote | remark | replaceable | returnvalue | shortcut | subscript | superscript | symbol | systemitem | tag | termdef | token | trademark | type | uri | userinput | varname | wordasword | xref)*
+>
+
+  <!ATTLIST subtitle
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.subtitle.attlist;
+       
+>
+
+  <!ELEMENT subtitle
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | application | author | biblioref | citation | citebiblioid | citerefentry | citetitle | classname | code | command | computeroutput | constant | coref | database | date | editor | email | emphasis | envar | errorcode | errorname | errortext | errortype | exceptionname | filename | firstterm | footnote | footnoteref | foreignphrase | function | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | indexterm | initializer | inlineequation | inlinemediaobject | interfacename | jobtitle | keycap | keycode | keycombo | keysym | link | literal | markup | menuchoice | methodname | modifier | mousebutton | nonterminal | olink | ooclass | ooexception | oointerface | option | optional | org | orgname | package | parameter | person | personname | phrase | productname | productnumber | prompt | property | quote | remark | replaceable | returnvalue | shortcut | subscript | superscript | symbol | systemitem | tag | termdef | token | trademark | type | uri | userinput | varname | wordasword | xref)*
+>
+
+  <!ATTLIST info
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.info.attlist;
+       
+>
+
+  <!ELEMENT info
+       ((%db._title; | (%db.info.elements;)*))
+>
+
+  <!ATTLIST subjectset
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.subjectset.attlist;
+       
+>
+
+  <!ELEMENT subjectset
+       ((subject)+)
+>
+
+  <!ATTLIST subject
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.subject.attlist;
+       
+>
+
+  <!ELEMENT subject
+       ((subjectterm)+)
+>
+
+  <!ATTLIST subjectterm
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.subjectterm.attlist;
+       
+>
+
+  <!ELEMENT subjectterm
+       (#PCDATA)*
+>
+
+  <!ATTLIST keywordset
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.keywordset.attlist;
+       
+>
+
+  <!ELEMENT keywordset
+       ((keyword)+)
+>
+
+  <!ATTLIST keyword
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.keyword.attlist;
+       
+>
+
+  <!ELEMENT keyword
+       (#PCDATA)*
+>
+
+  <!ATTLIST procedure
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.procedure.attlist;
+       
+>
+
+  <!ELEMENT procedure
+       (%db.procedure.info;, (%db.all.blocks;)*, (step)+)
+>
+
+  <!ATTLIST step
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.step.attlist;
+       
+>
+
+  <!ELEMENT step
+       (%db.step.info;, (((%db.all.blocks;)+, ((substeps | stepalternatives), (%db.all.blocks;)*)?) | ((substeps | stepalternatives), (%db.all.blocks;)*)))
+>
+
+  <!ATTLIST stepalternatives
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.stepalternatives.attlist;
+       
+>
+
+  <!ELEMENT stepalternatives
+       (%db.stepalternatives.info;, (step)+)
+>
+
+  <!ATTLIST substeps
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.substeps.attlist;
+       
+>
+
+  <!ELEMENT substeps
+       ((step)+)
+>
+
+  <!ATTLIST sidebar
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.sidebar.attlist;
+       
+>
+
+  <!ELEMENT sidebar
+       (%db.sidebar.info;, (%db.all.blocks;)+)
+>
+
+  <!ATTLIST abstract
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.abstract.attlist;
+       
+>
+
+  <!ELEMENT abstract
+       (%db.abstract.info;, (%db.para.blocks;)+)
+>
+
+  <!ATTLIST personblurb
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.personblurb.attlist;
+       
+>
+
+  <!ELEMENT personblurb
+       (%db.personblurb.info;, (%db.para.blocks;)+)
+>
+
+  <!ATTLIST blockquote
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.blockquote.attlist;
+       
+>
+
+  <!ELEMENT blockquote
+       (%db.blockquote.info;, attribution?, (%db.all.blocks;)+)
+>
+
+  <!ATTLIST attribution
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.attribution.attlist;
+       
+>
+
+  <!ELEMENT attribution
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | citation | citetitle | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | person | personname | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST bridgehead
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.bridgehead.attlist;
+       
+>
+
+  <!ELEMENT bridgehead
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | application | author | biblioref | citation | citebiblioid | citerefentry | citetitle | classname | code | command | computeroutput | constant | coref | database | date | editor | email | emphasis | envar | errorcode | errorname | errortext | errortype | exceptionname | filename | firstterm | footnote | footnoteref | foreignphrase | function | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | indexterm | initializer | inlineequation | inlinemediaobject | interfacename | jobtitle | keycap | keycode | keycombo | keysym | link | literal | markup | menuchoice | methodname | modifier | mousebutton | nonterminal | olink | ooclass | ooexception | oointerface | option | optional | org | orgname | package | parameter | person | personname | phrase | productname | productnumber | prompt | property | quote | remark | replaceable | returnvalue | shortcut | subscript | superscript | symbol | systemitem | tag | termdef | token | trademark | type | uri | userinput | varname | wordasword | xref)*
+>
+
+  <!ATTLIST remark
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.remark.attlist;
+       
+>
+
+  <!ELEMENT remark
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | application | author | biblioref | citation | citebiblioid | citerefentry | citetitle | classname | code | command | computeroutput | constant | coref | database | date | editor | email | emphasis | envar | errorcode | errorname | errortext | errortype | exceptionname | filename | firstterm | footnote | footnoteref | foreignphrase | function | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | indexterm | initializer | inlineequation | inlinemediaobject | interfacename | jobtitle | keycap | keycode | keycombo | keysym | link | literal | markup | menuchoice | methodname | modifier | mousebutton | nonterminal | olink | ooclass | ooexception | oointerface | option | optional | org | orgname | package | parameter | person | personname | phrase | productname | productnumber | prompt | property | quote | remark | replaceable | returnvalue | shortcut | subscript | superscript | symbol | systemitem | tag | termdef | token | trademark | type | uri | userinput | varname | wordasword | xref)*
+>
+
+  <!ATTLIST epigraph
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.epigraph.attlist;
+       
+>
+
+  <!ELEMENT epigraph
+       (%db.epigraph.info;, attribution?, ((%db.para.blocks; | literallayout))+)
+>
+
+  <!ATTLIST footnote
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.footnote.attlist;
+       
+>
+
+  <!ELEMENT footnote
+       ((%db.all.blocks;)+)
+>
+
+  <!ATTLIST formalpara
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.formalpara.attlist;
+       
+>
+
+  <!ELEMENT formalpara
+       (%db.formalpara.info;, (%db.indexing.inlines;)*, para)
+>
+
+  <!ATTLIST para
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.para.attlist;
+       
+>
+
+  <!ELEMENT para
+       (#PCDATA | abbrev | accel | acronym | address | alt | anchor | annotation | application | author | bibliolist | biblioref | blockquote | bridgehead | calloutlist | caution | citation | citebiblioid | citerefentry | citetitle | classname | classsynopsis | cmdsynopsis | code | command | computeroutput | constant | constructorsynopsis | coref | database | date | destructorsynopsis | editor | email | emphasis | envar | epigraph | equation | errorcode | errorname | errortext | errortype | example | exceptionname | fieldsynopsis | figure | filename | firstterm | footnote | footnoteref | foreignphrase | funcsynopsis | function | glosslist | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | important | indexterm | info | informalequation | informalexample | informalfigure | informaltable | initializer | inlineequation | inlinemediaobject | interfacename | itemizedlist | jobtitle | keycap | keycode | keycombo | keysym | link | literal | literallayout | markup | mediaobject | menuchoice | methodname | methodsynopsis | modifier | mousebutton | nonterminal | note | olink | ooclass | ooexception | oointerface | option | optional | orderedlist | org | orgname | package | parameter | person | personname | phrase | procedure | productname | productnumber | programlisting | programlistingco | prompt | property | qandaset | quote | remark | replaceable | returnvalue | revhistory | screen | screenco | screenshot | segmentedlist | shortcut | sidebar | simplelist | subscript | superscript | symbol | synopsis | systemitem | table | tag | task | termdef | tip | token | trademark | type | uri | userinput | variablelist | varname | warning | wordasword | xref)*
+>
+
+  <!ATTLIST simpara
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.simpara.attlist;
+       
+>
+
+  <!ELEMENT simpara
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | application | author | biblioref | citation | citebiblioid | citerefentry | citetitle | classname | code | command | computeroutput | constant | coref | database | date | editor | email | emphasis | envar | errorcode | errorname | errortext | errortype | exceptionname | filename | firstterm | footnote | footnoteref | foreignphrase | function | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | indexterm | info | initializer | inlineequation | inlinemediaobject | interfacename | jobtitle | keycap | keycode | keycombo | keysym | link | literal | markup | menuchoice | methodname | modifier | mousebutton | nonterminal | olink | ooclass | ooexception | oointerface | option | optional | org | orgname | package | parameter | person | personname | phrase | productname | productnumber | prompt | property | quote | remark | replaceable | returnvalue | shortcut | subscript | superscript | symbol | systemitem | tag | termdef | token | trademark | type | uri | userinput | varname | wordasword | xref)*
+>
+
+  <!ATTLIST itemizedlist
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.itemizedlist.attlist;
+       
+>
+
+  <!ELEMENT itemizedlist
+       (%db.itemizedlist.info;, (%db.all.blocks;)*, (listitem)+)
+>
+
+  <!ATTLIST orderedlist
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.orderedlist.attlist;
+       
+>
+
+  <!ELEMENT orderedlist
+       (%db.orderedlist.info;, (%db.all.blocks;)*, (listitem)+)
+>
+
+  <!ATTLIST listitem
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.listitem.attlist;
+       
+>
+
+  <!ELEMENT listitem
+       ((%db.all.blocks;)+)
+>
+
+  <!ATTLIST segmentedlist
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.segmentedlist.attlist;
+       
+>
+
+  <!ELEMENT segmentedlist
+       (%db.segmentedlist.info;, (segtitle)+, (seglistitem)+)
+>
+
+  <!ATTLIST segtitle
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.segtitle.attlist;
+       
+>
+
+  <!ELEMENT segtitle
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | application | author | biblioref | citation | citebiblioid | citerefentry | citetitle | classname | code | command | computeroutput | constant | coref | database | date | editor | email | emphasis | envar | errorcode | errorname | errortext | errortype | exceptionname | filename | firstterm | footnote | footnoteref | foreignphrase | function | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | indexterm | initializer | inlineequation | inlinemediaobject | interfacename | jobtitle | keycap | keycode | keycombo | keysym | link | literal | markup | menuchoice | methodname | modifier | mousebutton | nonterminal | olink | ooclass | ooexception | oointerface | option | optional | org | orgname | package | parameter | person | personname | phrase | productname | productnumber | prompt | property | quote | remark | replaceable | returnvalue | shortcut | subscript | superscript | symbol | systemitem | tag | termdef | token | trademark | type | uri | userinput | varname | wordasword | xref)*
+>
+
+  <!ATTLIST seglistitem
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.seglistitem.attlist;
+       
+>
+
+  <!ELEMENT seglistitem
+       ((seg)+)
+>
+
+  <!ATTLIST seg
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.seg.attlist;
+       
+>
+
+  <!ELEMENT seg
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | application | author | biblioref | citation | citebiblioid | citerefentry | citetitle | classname | code | command | computeroutput | constant | coref | database | date | editor | email | emphasis | envar | errorcode | errorname | errortext | errortype | exceptionname | filename | firstterm | footnote | footnoteref | foreignphrase | function | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | indexterm | initializer | inlineequation | inlinemediaobject | interfacename | jobtitle | keycap | keycode | keycombo | keysym | link | literal | markup | menuchoice | methodname | modifier | mousebutton | nonterminal | olink | ooclass | ooexception | oointerface | option | optional | org | orgname | package | parameter | person | personname | phrase | productname | productnumber | prompt | property | quote | remark | replaceable | returnvalue | shortcut | subscript | superscript | symbol | systemitem | tag | termdef | token | trademark | type | uri | userinput | varname | wordasword | xref)*
+>
+
+  <!ATTLIST simplelist
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.simplelist.attlist;
+       
+>
+
+  <!ELEMENT simplelist
+       ((member)+)
+>
+
+  <!ATTLIST member
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.member.attlist;
+       
+>
+
+  <!ELEMENT member
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | application | author | biblioref | citation | citebiblioid | citerefentry | citetitle | classname | code | command | computeroutput | constant | coref | database | date | editor | email | emphasis | envar | errorcode | errorname | errortext | errortype | exceptionname | filename | firstterm | footnote | footnoteref | foreignphrase | function | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | indexterm | initializer | inlineequation | inlinemediaobject | interfacename | jobtitle | keycap | keycode | keycombo | keysym | link | literal | markup | menuchoice | methodname | modifier | mousebutton | nonterminal | olink | ooclass | ooexception | oointerface | option | optional | org | orgname | package | parameter | person | personname | phrase | productname | productnumber | prompt | property | quote | remark | replaceable | returnvalue | shortcut | subscript | superscript | symbol | systemitem | tag | termdef | token | trademark | type | uri | userinput | varname | wordasword | xref)*
+>
+
+  <!ATTLIST variablelist
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.variablelist.attlist;
+       
+>
+
+  <!ELEMENT variablelist
+       (%db.variablelist.info;, (%db.all.blocks;)*, (varlistentry)+)
+>
+
+  <!ATTLIST varlistentry
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.varlistentry.attlist;
+       
+>
+
+  <!ELEMENT varlistentry
+       ((term)+, listitem)
+>
+
+  <!ATTLIST term
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.term.attlist;
+       
+>
+
+  <!ELEMENT term
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | application | author | biblioref | citation | citebiblioid | citerefentry | citetitle | classname | code | command | computeroutput | constant | coref | database | date | editor | email | emphasis | envar | errorcode | errorname | errortext | errortype | exceptionname | filename | firstterm | footnote | footnoteref | foreignphrase | function | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | indexterm | initializer | inlineequation | inlinemediaobject | interfacename | jobtitle | keycap | keycode | keycombo | keysym | link | literal | markup | menuchoice | methodname | modifier | mousebutton | nonterminal | olink | ooclass | ooexception | oointerface | option | optional | org | orgname | package | parameter | person | personname | phrase | productname | productnumber | prompt | property | quote | remark | replaceable | returnvalue | shortcut | subscript | superscript | symbol | systemitem | tag | termdef | token | trademark | type | uri | userinput | varname | wordasword | xref)*
+>
+
+  <!ATTLIST example
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.example.attlist;
+       
+>
+
+  <!ELEMENT example
+       (%db.example.info;, (%db.all.blocks;)+, caption?)
+>
+
+  <!ATTLIST informalexample
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.informalexample.attlist;
+       
+>
+
+  <!ELEMENT informalexample
+       (%db.informalexample.info;, (%db.all.blocks;)+, caption?)
+>
+
+  <!ATTLIST literallayout
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.literallayout.attlist;
+       
+>
+
+  <!ELEMENT literallayout
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | application | author | biblioref | citation | citebiblioid | citerefentry | citetitle | classname | co | code | command | computeroutput | constant | coref | database | date | editor | email | emphasis | envar | errorcode | errorname | errortext | errortype | exceptionname | filename | firstterm | footnote | footnoteref | foreignphrase | function | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | indexterm | info | initializer | inlineequation | inlinemediaobject | interfacename | jobtitle | keycap | keycode | keycombo | keysym | lineannotation | link | literal | markup | menuchoice | methodname | modifier | mousebutton | nonterminal | olink | ooclass | ooexception | oointerface | option | optional | org | orgname | package | parameter | person | personname | phrase | productname | productnumber | prompt | property | quote | remark | replaceable | returnvalue | shortcut | subscript | superscript | symbol | systemitem | tag | termdef | textobject | token | trademark | type | uri | userinput | varname | wordasword | xref)*
+>
+
+  <!ATTLIST screen
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.screen.attlist;
+       
+>
+
+  <!ELEMENT screen
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | application | author | biblioref | citation | citebiblioid | citerefentry | citetitle | classname | co | code | command | computeroutput | constant | coref | database | date | editor | email | emphasis | envar | errorcode | errorname | errortext | errortype | exceptionname | filename | firstterm | footnote | footnoteref | foreignphrase | function | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | indexterm | info | initializer | inlineequation | inlinemediaobject | interfacename | jobtitle | keycap | keycode | keycombo | keysym | lineannotation | link | literal | markup | menuchoice | methodname | modifier | mousebutton | nonterminal | olink | ooclass | ooexception | oointerface | option | optional | org | orgname | package | parameter | person | personname | phrase | productname | productnumber | prompt | property | quote | remark | replaceable | returnvalue | shortcut | subscript | superscript | symbol | systemitem | tag | termdef | textobject | token | trademark | type | uri | userinput | varname | wordasword | xref)*
+>
+
+  <!ATTLIST screenshot
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.screenshot.attlist;
+       
+>
+
+  <!ELEMENT screenshot
+       (%db.screenshot.info;, mediaobject)
+>
+
+  <!ATTLIST figure
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.figure.attlist;
+       
+>
+
+  <!ELEMENT figure
+       (%db.figure.info;, (%db.all.blocks;)+, caption?)
+>
+
+  <!ATTLIST informalfigure
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.informalfigure.attlist;
+       
+>
+
+  <!ELEMENT informalfigure
+       (%db.informalfigure.info;, (%db.all.blocks;)+, caption?)
+>
+
+  <!ATTLIST mediaobject
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.mediaobject.attlist;
+       
+>
+
+  <!ELEMENT mediaobject
+       (%db.mediaobject.info;, alt?, (%db.mediaobject.content;)+, caption?)
+>
+
+  <!ATTLIST inlinemediaobject
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.inlinemediaobject.attlist;
+       
+>
+
+  <!ELEMENT inlinemediaobject
+       (%db.inlinemediaobject.info;, alt?, (%db.mediaobject.content;)+)
+>
+
+  <!ATTLIST videoobject
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.videoobject.attlist;
+       
+>
+
+  <!ELEMENT videoobject
+       (%db.videoobject.info;, videodata)
+>
+
+  <!ATTLIST audioobject
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.audioobject.attlist;
+       
+>
+
+  <!ELEMENT audioobject
+       (%db.audioobject.info;, audiodata)
+>
+
+  <!ATTLIST imageobject
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.imageobject.attlist;
+       
+>
+
+  <!ELEMENT imageobject
+       (%db.imageobject.info;, %db.imageobject.content;)
+>
+
+  <!ATTLIST textobject
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.textobject.attlist;
+       
+>
+
+  <!ELEMENT textobject
+       (%db.textobject.info;, (phrase | textdata | (%db.all.blocks;)+))
+>
+
+  <!ATTLIST videodata
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.videodata.attlist;
+       
+>
+
+  <!ELEMENT videodata
+       (%db.videodata.info;)
+>
+
+  <!ATTLIST audiodata
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.audiodata.attlist;
+       
+>
+
+  <!ELEMENT audiodata
+       (%db.audiodata.info;)
+>
+
+  <!ATTLIST imagedata
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.imagedata.attlist;
+       
+>
+
+  <!ELEMENT imagedata
+       (%db.imagedata.info;)
+>
+
+  <!ATTLIST textdata
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.textdata.attlist;
+       
+>
+
+  <!ELEMENT textdata
+       (%db.textdata.info;)
+>
+
+  <!ATTLIST address
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.address.attlist;
+       
+>
+
+  <!ELEMENT address
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | city | coref | country | date | email | emphasis | fax | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | orgname | otheraddr | personname | phone | phrase | pob | postcode | quote | remark | replaceable | state | street | subscript | superscript | trademark | uri | wordasword | xref)*
+>
+
+  <!ATTLIST street
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.street.attlist;
+       
+>
+
+  <!ELEMENT street
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST pob
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.pob.attlist;
+       
+>
+
+  <!ELEMENT pob
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST postcode
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.postcode.attlist;
+       
+>
+
+  <!ELEMENT postcode
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST city
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.city.attlist;
+       
+>
+
+  <!ELEMENT city
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST state
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.state.attlist;
+       
+>
+
+  <!ELEMENT state
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST country
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.country.attlist;
+       
+>
+
+  <!ELEMENT country
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST phone
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.phone.attlist;
+       
+>
+
+  <!ELEMENT phone
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST fax
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.fax.attlist;
+       
+>
+
+  <!ELEMENT fax
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST otheraddr
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.otheraddr.attlist;
+       
+>
+
+  <!ELEMENT otheraddr
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST affiliation
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.affiliation.attlist;
+       
+>
+
+  <!ELEMENT affiliation
+       (shortaffil?, (jobtitle)*, (org? | (orgname?, (orgdiv)*, (address)*)))
+>
+
+  <!ATTLIST shortaffil
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.shortaffil.attlist;
+       
+>
+
+  <!ELEMENT shortaffil
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST jobtitle
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.jobtitle.attlist;
+       
+>
+
+  <!ELEMENT jobtitle
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST orgname
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.orgname.attlist;
+       
+>
+
+  <!ELEMENT orgname
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST orgdiv
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.orgdiv.attlist;
+       
+>
+
+  <!ELEMENT orgdiv
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | application | author | biblioref | citation | citebiblioid | citerefentry | citetitle | classname | code | command | computeroutput | constant | coref | database | date | editor | email | emphasis | envar | errorcode | errorname | errortext | errortype | exceptionname | filename | firstterm | footnote | footnoteref | foreignphrase | function | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | indexterm | initializer | inlineequation | inlinemediaobject | interfacename | jobtitle | keycap | keycode | keycombo | keysym | link | literal | markup | menuchoice | methodname | modifier | mousebutton | nonterminal | olink | ooclass | ooexception | oointerface | option | optional | org | orgname | package | parameter | person | personname | phrase | productname | productnumber | prompt | property | quote | remark | replaceable | returnvalue | shortcut | subscript | superscript | symbol | systemitem | tag | termdef | token | trademark | type | uri | userinput | varname | wordasword | xref)*
+>
+
+  <!ATTLIST artpagenums
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.artpagenums.attlist;
+       
+>
+
+  <!ELEMENT artpagenums
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST personname
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.personname.attlist;
+       
+>
+
+  <!ELEMENT personname
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstname | firstterm | footnote | footnoteref | foreignphrase | givenname | glossterm | honorific | indexterm | inlinemediaobject | lineage | link | olink | othername | phrase | quote | remark | replaceable | subscript | superscript | surname | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST author
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.author.attlist;
+       
+>
+
+  <!ELEMENT author
+       (%db.credit.contentmodel;)
+>
+
+  <!ATTLIST authorgroup
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.authorgroup.attlist;
+       
+>
+
+  <!ELEMENT authorgroup
+       (((author | editor | othercredit))+)
+>
+
+  <!ATTLIST collab
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.collab.attlist;
+       
+>
+
+  <!ELEMENT collab
+       (((person | personname | org | orgname))+, (affiliation)*)
+>
+
+  <!ATTLIST authorinitials
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.authorinitials.attlist;
+       
+>
+
+  <!ELEMENT authorinitials
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST person
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.person.attlist;
+       
+>
+
+  <!ELEMENT person
+       (personname, ((address | affiliation | email | uri | personblurb))*)
+>
+
+  <!ATTLIST org
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.org.attlist;
+       
+>
+
+  <!ELEMENT org
+       (orgname, ((address | affiliation | email | uri | orgdiv))*)
+>
+
+  <!ATTLIST confgroup
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.confgroup.attlist;
+       
+>
+
+  <!ELEMENT confgroup
+       (((confdates | conftitle | confnum | confsponsor | address))*)
+>
+
+  <!ATTLIST confdates
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.confdates.attlist;
+       
+>
+
+  <!ELEMENT confdates
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST conftitle
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.conftitle.attlist;
+       
+>
+
+  <!ELEMENT conftitle
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST confnum
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.confnum.attlist;
+       
+>
+
+  <!ELEMENT confnum
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST confsponsor
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.confsponsor.attlist;
+       
+>
+
+  <!ELEMENT confsponsor
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST contractnum
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.contractnum.attlist;
+       
+>
+
+  <!ELEMENT contractnum
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST contractsponsor
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.contractsponsor.attlist;
+       
+>
+
+  <!ELEMENT contractsponsor
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST copyright
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.copyright.attlist;
+       
+>
+
+  <!ELEMENT copyright
+       ((year)+, (holder)*)
+>
+
+  <!ATTLIST year
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.year.attlist;
+       
+>
+
+  <!ELEMENT year
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST holder
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.holder.attlist;
+       
+>
+
+  <!ELEMENT holder
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST cover
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.cover.attlist;
+       
+>
+
+  <!ELEMENT cover
+       ((%db.cover.contentmodel;)+)
+>
+
+  <!ATTLIST date
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.date.attlist;
+       
+>
+
+  <!ELEMENT date
+       (#PCDATA)*
+>
+
+  <!ATTLIST edition
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.edition.attlist;
+       
+>
+
+  <!ELEMENT edition
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST editor
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.editor.attlist;
+       
+>
+
+  <!ELEMENT editor
+       (%db.credit.contentmodel;)
+>
+
+  <!ATTLIST biblioid
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.biblioid.attlist;
+       
+>
+
+  <!ELEMENT biblioid
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST citebiblioid
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.citebiblioid.attlist;
+       
+>
+
+  <!ELEMENT citebiblioid
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST bibliosource
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.bibliosource.attlist;
+       
+>
+
+  <!ELEMENT bibliosource
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST bibliorelation
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.bibliorelation.attlist;
+       
+>
+
+  <!ELEMENT bibliorelation
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST bibliocoverage
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.bibliocoverage.attlist;
+       
+>
+
+  <!ELEMENT bibliocoverage
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST legalnotice
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.legalnotice.attlist;
+       
+>
+
+  <!ELEMENT legalnotice
+       (%db.legalnotice.info;, (%db.all.blocks;)+)
+>
+
+  <!ATTLIST othercredit
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.othercredit.attlist;
+       
+>
+
+  <!ELEMENT othercredit
+       (%db.credit.contentmodel;)
+>
+
+  <!ATTLIST pagenums
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.pagenums.attlist;
+       
+>
+
+  <!ELEMENT pagenums
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST contrib
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.contrib.attlist;
+       
+>
+
+  <!ELEMENT contrib
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | application | author | biblioref | citation | citebiblioid | citerefentry | citetitle | classname | code | command | computeroutput | constant | coref | database | date | editor | email | emphasis | envar | errorcode | errorname | errortext | errortype | exceptionname | filename | firstterm | footnote | footnoteref | foreignphrase | function | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | indexterm | initializer | inlineequation | inlinemediaobject | interfacename | jobtitle | keycap | keycode | keycombo | keysym | link | literal | markup | menuchoice | methodname | modifier | mousebutton | nonterminal | olink | ooclass | ooexception | oointerface | option | optional | org | orgname | package | parameter | person | personname | phrase | productname | productnumber | prompt | property | quote | remark | replaceable | returnvalue | shortcut | subscript | superscript | symbol | systemitem | tag | termdef | token | trademark | type | uri | userinput | varname | wordasword | xref)*
+>
+
+  <!ATTLIST honorific
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.honorific.attlist;
+       
+>
+
+  <!ELEMENT honorific
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST firstname
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.firstname.attlist;
+       
+>
+
+  <!ELEMENT firstname
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST givenname
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.givenname.attlist;
+       
+>
+
+  <!ELEMENT givenname
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST surname
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.surname.attlist;
+       
+>
+
+  <!ELEMENT surname
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST lineage
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.lineage.attlist;
+       
+>
+
+  <!ELEMENT lineage
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST othername
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.othername.attlist;
+       
+>
+
+  <!ELEMENT othername
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST printhistory
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.printhistory.attlist;
+       
+>
+
+  <!ELEMENT printhistory
+       ((%db.para.blocks;)+)
+>
+
+  <!ATTLIST pubdate
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.pubdate.attlist;
+       
+>
+
+  <!ELEMENT pubdate
+       (#PCDATA)*
+>
+
+  <!ATTLIST publisher
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.publisher.attlist;
+       
+>
+
+  <!ELEMENT publisher
+       (publishername, (address)*)
+>
+
+  <!ATTLIST publishername
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.publishername.attlist;
+       
+>
+
+  <!ELEMENT publishername
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST releaseinfo
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.releaseinfo.attlist;
+       
+>
+
+  <!ELEMENT releaseinfo
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST revhistory
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.revhistory.attlist;
+       
+>
+
+  <!ELEMENT revhistory
+       (%db.revhistory.info;, (revision)+)
+>
+
+  <!ATTLIST revision
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.revision.attlist;
+       
+>
+
+  <!ELEMENT revision
+       (revnumber?, date, ((authorinitials | author))*, (revremark | revdescription)?)
+>
+
+  <!ATTLIST revnumber
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.revnumber.attlist;
+       
+>
+
+  <!ELEMENT revnumber
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST revremark
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.revremark.attlist;
+       
+>
+
+  <!ELEMENT revremark
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST revdescription
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.revdescription.attlist;
+       
+>
+
+  <!ELEMENT revdescription
+       ((%db.all.blocks;)*)
+>
+
+  <!ATTLIST seriesvolnums
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.seriesvolnums.attlist;
+       
+>
+
+  <!ELEMENT seriesvolnums
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST volumenum
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.volumenum.attlist;
+       
+>
+
+  <!ELEMENT volumenum
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST issuenum
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.issuenum.attlist;
+       
+>
+
+  <!ELEMENT issuenum
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST package
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.package.attlist;
+       
+>
+
+  <!ELEMENT package
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST email
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.email.attlist;
+       
+>
+
+  <!ELEMENT email
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST lineannotation
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.lineannotation.attlist;
+       
+>
+
+  <!ELEMENT lineannotation
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST parameter
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.parameter.attlist;
+       
+>
+
+  <!ELEMENT parameter
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST replaceable
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.replaceable.attlist;
+       
+>
+
+  <!ELEMENT replaceable
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | co | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST uri
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.uri.attlist;
+       
+>
+
+  <!ELEMENT uri
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST abbrev
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.abbrev.attlist;
+       
+>
+
+  <!ELEMENT abbrev
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST acronym
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.acronym.attlist;
+       
+>
+
+  <!ELEMENT acronym
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST citation
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.citation.attlist;
+       
+>
+
+  <!ELEMENT citation
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | application | author | biblioref | citation | citebiblioid | citerefentry | citetitle | classname | code | command | computeroutput | constant | coref | database | date | editor | email | emphasis | envar | errorcode | errorname | errortext | errortype | exceptionname | filename | firstterm | footnote | footnoteref | foreignphrase | function | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | indexterm | initializer | inlineequation | inlinemediaobject | interfacename | jobtitle | keycap | keycode | keycombo | keysym | link | literal | markup | menuchoice | methodname | modifier | mousebutton | nonterminal | olink | ooclass | ooexception | oointerface | option | optional | org | orgname | package | parameter | person | personname | phrase | productname | productnumber | prompt | property | quote | remark | replaceable | returnvalue | shortcut | subscript | superscript | symbol | systemitem | tag | termdef | token | trademark | type | uri | userinput | varname | wordasword | xref)*
+>
+
+  <!ATTLIST citerefentry
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.citerefentry.attlist;
+       
+>
+
+  <!ELEMENT citerefentry
+       (refentrytitle, manvolnum?)
+>
+
+  <!ATTLIST refentrytitle
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.refentrytitle.attlist;
+       
+>
+
+  <!ELEMENT refentrytitle
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | application | author | biblioref | citation | citebiblioid | citerefentry | citetitle | classname | code | command | computeroutput | constant | coref | database | date | editor | email | emphasis | envar | errorcode | errorname | errortext | errortype | exceptionname | filename | firstterm | footnote | footnoteref | foreignphrase | function | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | indexterm | initializer | inlineequation | inlinemediaobject | interfacename | jobtitle | keycap | keycode | keycombo | keysym | link | literal | markup | menuchoice | methodname | modifier | mousebutton | nonterminal | olink | ooclass | ooexception | oointerface | option | optional | org | orgname | package | parameter | person | personname | phrase | productname | productnumber | prompt | property | quote | remark | replaceable | returnvalue | shortcut | subscript | superscript | symbol | systemitem | tag | termdef | token | trademark | type | uri | userinput | varname | wordasword | xref)*
+>
+
+  <!ATTLIST manvolnum
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.manvolnum.attlist;
+       
+>
+
+  <!ELEMENT manvolnum
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST citetitle
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.citetitle.attlist;
+       
+>
+
+  <!ELEMENT citetitle
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | application | author | biblioref | citation | citebiblioid | citerefentry | citetitle | classname | code | command | computeroutput | constant | coref | database | date | editor | email | emphasis | envar | errorcode | errorname | errortext | errortype | exceptionname | filename | firstterm | footnote | footnoteref | foreignphrase | function | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | indexterm | initializer | inlineequation | inlinemediaobject | interfacename | jobtitle | keycap | keycode | keycombo | keysym | link | literal | markup | menuchoice | methodname | modifier | mousebutton | nonterminal | olink | ooclass | ooexception | oointerface | option | optional | org | orgname | package | parameter | person | personname | phrase | productname | productnumber | prompt | property | quote | remark | replaceable | returnvalue | shortcut | subscript | superscript | symbol | systemitem | tag | termdef | token | trademark | type | uri | userinput | varname | wordasword | xref)*
+>
+
+  <!ATTLIST emphasis
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.emphasis.attlist;
+       
+>
+
+  <!ELEMENT emphasis
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | application | author | biblioref | citation | citebiblioid | citerefentry | citetitle | classname | code | command | computeroutput | constant | coref | database | date | editor | email | emphasis | envar | errorcode | errorname | errortext | errortype | exceptionname | filename | firstterm | footnote | footnoteref | foreignphrase | function | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | indexterm | initializer | inlineequation | inlinemediaobject | interfacename | jobtitle | keycap | keycode | keycombo | keysym | link | literal | markup | menuchoice | methodname | modifier | mousebutton | nonterminal | olink | ooclass | ooexception | oointerface | option | optional | org | orgname | package | parameter | person | personname | phrase | productname | productnumber | prompt | property | quote | remark | replaceable | returnvalue | shortcut | subscript | superscript | symbol | systemitem | tag | termdef | token | trademark | type | uri | userinput | varname | wordasword | xref)*
+>
+
+  <!ATTLIST foreignphrase
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.foreignphrase.attlist;
+       
+>
+
+  <!ELEMENT foreignphrase
+       (#PCDATA | abbrev | acronym | anchor | application | author | biblioref | citation | citebiblioid | citerefentry | citetitle | coref | database | date | editor | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | hardware | indexterm | inlinemediaobject | jobtitle | link | olink | org | orgname | person | personname | phrase | productname | productnumber | quote | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST phrase
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.phrase.attlist;
+       
+>
+
+  <!ELEMENT phrase
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | application | author | biblioref | citation | citebiblioid | citerefentry | citetitle | classname | code | command | computeroutput | constant | coref | database | date | editor | email | emphasis | envar | errorcode | errorname | errortext | errortype | exceptionname | filename | firstterm | footnote | footnoteref | foreignphrase | function | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | indexterm | initializer | inlineequation | inlinemediaobject | interfacename | jobtitle | keycap | keycode | keycombo | keysym | link | literal | markup | menuchoice | methodname | modifier | mousebutton | nonterminal | olink | ooclass | ooexception | oointerface | option | optional | org | orgname | package | parameter | person | personname | phrase | productname | productnumber | prompt | property | quote | remark | replaceable | returnvalue | shortcut | subscript | superscript | symbol | systemitem | tag | termdef | token | trademark | type | uri | userinput | varname | wordasword | xref)*
+>
+
+  <!ATTLIST quote
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.quote.attlist;
+       
+>
+
+  <!ELEMENT quote
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | application | author | biblioref | citation | citebiblioid | citerefentry | citetitle | classname | code | command | computeroutput | constant | coref | database | date | editor | email | emphasis | envar | errorcode | errorname | errortext | errortype | exceptionname | filename | firstterm | footnote | footnoteref | foreignphrase | function | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | indexterm | initializer | inlineequation | inlinemediaobject | interfacename | jobtitle | keycap | keycode | keycombo | keysym | link | literal | markup | menuchoice | methodname | modifier | mousebutton | nonterminal | olink | ooclass | ooexception | oointerface | option | optional | org | orgname | package | parameter | person | personname | phrase | productname | productnumber | prompt | property | quote | remark | replaceable | returnvalue | shortcut | subscript | superscript | symbol | systemitem | tag | termdef | token | trademark | type | uri | userinput | varname | wordasword | xref)*
+>
+
+  <!ATTLIST subscript
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.subscript.attlist;
+       
+>
+
+  <!ELEMENT subscript
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST superscript
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.superscript.attlist;
+       
+>
+
+  <!ELEMENT superscript
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST trademark
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.trademark.attlist;
+       
+>
+
+  <!ELEMENT trademark
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST wordasword
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.wordasword.attlist;
+       
+>
+
+  <!ELEMENT wordasword
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST footnoteref
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.footnoteref.attlist;
+       
+>
+
+  <!ELEMENT footnoteref
+       EMPTY
+>
+
+  <!ATTLIST xref
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.xref.attlist;
+       
+>
+
+  <!ELEMENT xref
+       EMPTY
+>
+
+  <!ATTLIST link
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.link.attlist;
+       
+>
+
+  <!ELEMENT link
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | application | author | biblioref | citation | citebiblioid | citerefentry | citetitle | classname | code | command | computeroutput | constant | coref | database | date | editor | email | emphasis | envar | errorcode | errorname | errortext | errortype | exceptionname | filename | firstterm | footnote | footnoteref | foreignphrase | function | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | indexterm | initializer | inlineequation | inlinemediaobject | interfacename | jobtitle | keycap | keycode | keycombo | keysym | link | literal | markup | menuchoice | methodname | modifier | mousebutton | nonterminal | olink | ooclass | ooexception | oointerface | option | optional | org | orgname | package | parameter | person | personname | phrase | productname | productnumber | prompt | property | quote | remark | replaceable | returnvalue | shortcut | subscript | superscript | symbol | systemitem | tag | termdef | token | trademark | type | uri | userinput | varname | wordasword | xref)*
+>
+
+  <!ATTLIST olink
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.olink.attlist;
+       
+>
+
+  <!ELEMENT olink
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | application | author | biblioref | citation | citebiblioid | citerefentry | citetitle | classname | code | command | computeroutput | constant | coref | database | date | editor | email | emphasis | envar | errorcode | errorname | errortext | errortype | exceptionname | filename | firstterm | footnote | footnoteref | foreignphrase | function | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | indexterm | initializer | inlineequation | inlinemediaobject | interfacename | jobtitle | keycap | keycode | keycombo | keysym | link | literal | markup | menuchoice | methodname | modifier | mousebutton | nonterminal | olink | ooclass | ooexception | oointerface | option | optional | org | orgname | package | parameter | person | personname | phrase | productname | productnumber | prompt | property | quote | remark | replaceable | returnvalue | shortcut | subscript | superscript | symbol | systemitem | tag | termdef | token | trademark | type | uri | userinput | varname | wordasword | xref)*
+>
+
+  <!ATTLIST anchor
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.anchor.attlist;
+       
+>
+
+  <!ELEMENT anchor
+       EMPTY
+>
+
+  <!ATTLIST alt
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.alt.attlist;
+       
+>
+
+  <!ELEMENT alt
+       (#PCDATA | inlinemediaobject)*
+>
+
+  <!ATTLIST set
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.set.attlist;
+       
+>
+
+  <!ELEMENT set
+       (%db.set.info;, (%db.toc.components;)?, (%db.set.components;)+, (%db.setindex.components;)?)
+>
+
+  <!ATTLIST book
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.book.attlist;
+       
+>
+
+  <!ELEMENT book
+       (%db.book.info;, %db.book.components;)
+>
+
+  <!ATTLIST dedication
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.dedication.attlist;
+       
+>
+
+  <!ELEMENT dedication
+       (%db.dedication.info;, (%db.all.blocks;)+)
+>
+
+  <!ATTLIST acknowledgements
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.acknowledgements.attlist;
+       
+>
+
+  <!ELEMENT acknowledgements
+       (%db.acknowledgements.info;, (%db.all.blocks;)+)
+>
+
+  <!ATTLIST colophon
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.colophon.attlist;
+       
+>
+
+  <!ELEMENT colophon
+       (%db.colophon.info;, (((%db.all.blocks;)+, (simplesect)*) | ((%db.all.blocks;)*, (simplesect)+)))
+>
+
+  <!ATTLIST appendix
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.appendix.attlist;
+       
+>
+
+  <!ELEMENT appendix
+       (%db.appendix.info;, %db.appendix.contentmodel;)
+>
+
+  <!ATTLIST chapter
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.chapter.attlist;
+       
+>
+
+  <!ELEMENT chapter
+       (%db.chapter.info;, %db.chapter.contentmodel;)
+>
+
+  <!ATTLIST part
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.part.attlist;
+       
+>
+
+  <!ELEMENT part
+       (%db.part.info;, partintro?, %db.part.contentmodel;)
+>
+
+  <!ATTLIST preface
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.preface.attlist;
+       
+>
+
+  <!ELEMENT preface
+       (%db.preface.info;, %db.component.contentmodel;)
+>
+
+  <!ATTLIST partintro
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.partintro.attlist;
+       
+>
+
+  <!ELEMENT partintro
+       (%db.partintro.info;, %db.toplevel.blocks.or.sections;)
+>
+
+  <!ATTLIST section
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.section.attlist;
+       
+>
+
+  <!ELEMENT section
+       (%db.section.info;, %db.recursive.blocks.or.sections;, (%db.navigation.components;)*)
+>
+
+  <!ATTLIST simplesect
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.simplesect.attlist;
+       
+>
+
+  <!ELEMENT simplesect
+       (%db.simplesect.info;, (%db.all.blocks;)+)
+>
+
+  <!ATTLIST article
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.article.attlist;
+       
+>
+
+  <!ELEMENT article
+       (%db.article.info;, (%db.article.navcomponents;)*, (((%db.all.blocks;)+, (%db.article.components;)?) | %db.article.components;), (%db.article.navcomponents;)*)
+>
+
+  <!ATTLIST annotation
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.annotation.attlist;
+       
+>
+
+  <!ELEMENT annotation
+       (%db.annotation.info;, (%db.all.blocks;)+)
+>
+
+  <!ATTLIST extendedlink
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.extendedlink.attlist;
+       
+>
+
+  <!ELEMENT extendedlink
+       (((locator | arc))+)
+>
+
+  <!ATTLIST locator
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.locator.attlist;
+       
+>
+
+  <!ELEMENT locator
+       EMPTY
+>
+
+  <!ATTLIST arc
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.arc.attlist;
+       
+>
+
+  <!ELEMENT arc
+       EMPTY
+>
+
+  <!ATTLIST sect1
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.sect1.attlist;
+       
+>
+
+  <!ELEMENT sect1
+       (%db.sect1.info;, (((%db.all.blocks;)+, (%db.sect1.sections;)?) | %db.sect1.sections;), (%db.navigation.components;)*)
+>
+
+  <!ATTLIST sect2
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.sect2.attlist;
+       
+>
+
+  <!ELEMENT sect2
+       (%db.sect2.info;, (((%db.all.blocks;)+, (%db.sect2.sections;)?) | %db.sect2.sections;), (%db.navigation.components;)*)
+>
+
+  <!ATTLIST sect3
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.sect3.attlist;
+       
+>
+
+  <!ELEMENT sect3
+       (%db.sect3.info;, (((%db.all.blocks;)+, (%db.sect3.sections;)?) | %db.sect3.sections;), (%db.navigation.components;)*)
+>
+
+  <!ATTLIST sect4
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.sect4.attlist;
+       
+>
+
+  <!ELEMENT sect4
+       (%db.sect4.info;, (((%db.all.blocks;)+, (%db.sect4.sections;)?) | %db.sect4.sections;), (%db.navigation.components;)*)
+>
+
+  <!ATTLIST sect5
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.sect5.attlist;
+       
+>
+
+  <!ELEMENT sect5
+       (%db.sect5.info;, (((%db.all.blocks;)+, (%db.sect5.sections;)?) | %db.sect5.sections;), (%db.navigation.components;)*)
+>
+
+  <!ATTLIST reference
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.reference.attlist;
+       
+>
+
+  <!ELEMENT reference
+       (%db.reference.info;, partintro?, (%db.reference.components;)+)
+>
+
+  <!ATTLIST refentry
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.refentry.attlist;
+       
+>
+
+  <!ELEMENT refentry
+       ((indexterm)*, %db.refentry.info;, refmeta?, (refnamediv)+, refsynopsisdiv?, %db.toplevel.refsection;)
+>
+
+  <!ATTLIST refmeta
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.refmeta.attlist;
+       
+>
+
+  <!ELEMENT refmeta
+       ((indexterm)*, refentrytitle, manvolnum?, (refmiscinfo)*, (indexterm)*)
+>
+
+  <!ATTLIST refmiscinfo
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.refmiscinfo.attlist;
+       
+>
+
+  <!ELEMENT refmiscinfo
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST refnamediv
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.refnamediv.attlist;
+       
+>
+
+  <!ELEMENT refnamediv
+       (refdescriptor?, (refname)+, refpurpose, (refclass)*)
+>
+
+  <!ATTLIST refdescriptor
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.refdescriptor.attlist;
+       
+>
+
+  <!ELEMENT refdescriptor
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | application | author | biblioref | citation | citebiblioid | citerefentry | citetitle | classname | code | command | computeroutput | constant | coref | database | date | editor | email | emphasis | envar | errorcode | errorname | errortext | errortype | exceptionname | filename | firstterm | footnote | footnoteref | foreignphrase | function | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | indexterm | initializer | inlineequation | inlinemediaobject | interfacename | jobtitle | keycap | keycode | keycombo | keysym | link | literal | markup | menuchoice | methodname | modifier | mousebutton | nonterminal | olink | ooclass | ooexception | oointerface | option | optional | org | orgname | package | parameter | person | personname | phrase | productname | productnumber | prompt | property | quote | remark | replaceable | returnvalue | shortcut | subscript | superscript | symbol | systemitem | tag | termdef | token | trademark | type | uri | userinput | varname | wordasword | xref)*
+>
+
+  <!ATTLIST refname
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.refname.attlist;
+       
+>
+
+  <!ELEMENT refname
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | application | author | biblioref | citation | citebiblioid | citerefentry | citetitle | classname | code | command | computeroutput | constant | coref | database | date | editor | email | emphasis | envar | errorcode | errorname | errortext | errortype | exceptionname | filename | firstterm | footnote | footnoteref | foreignphrase | function | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | indexterm | initializer | inlineequation | inlinemediaobject | interfacename | jobtitle | keycap | keycode | keycombo | keysym | link | literal | markup | menuchoice | methodname | modifier | mousebutton | nonterminal | olink | ooclass | ooexception | oointerface | option | optional | org | orgname | package | parameter | person | personname | phrase | productname | productnumber | prompt | property | quote | remark | replaceable | returnvalue | shortcut | subscript | superscript | symbol | systemitem | tag | termdef | token | trademark | type | uri | userinput | varname | wordasword | xref)*
+>
+
+  <!ATTLIST refpurpose
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.refpurpose.attlist;
+       
+>
+
+  <!ELEMENT refpurpose
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | application | author | biblioref | citation | citebiblioid | citerefentry | citetitle | classname | code | command | computeroutput | constant | coref | database | date | editor | email | emphasis | envar | errorcode | errorname | errortext | errortype | exceptionname | filename | firstterm | footnote | footnoteref | foreignphrase | function | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | indexterm | initializer | inlineequation | inlinemediaobject | interfacename | jobtitle | keycap | keycode | keycombo | keysym | link | literal | markup | menuchoice | methodname | modifier | mousebutton | nonterminal | olink | ooclass | ooexception | oointerface | option | optional | org | orgname | package | parameter | person | personname | phrase | productname | productnumber | prompt | property | quote | remark | replaceable | returnvalue | shortcut | subscript | superscript | symbol | systemitem | tag | termdef | token | trademark | type | uri | userinput | varname | wordasword | xref)*
+>
+
+  <!ATTLIST refclass
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.refclass.attlist;
+       
+>
+
+  <!ELEMENT refclass
+       (#PCDATA | application)*
+>
+
+  <!ATTLIST refsynopsisdiv
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.refsynopsisdiv.attlist;
+       
+>
+
+  <!ELEMENT refsynopsisdiv
+       (%db.refsynopsisdiv.info;, (((%db.all.blocks;)+, (%db.secondlevel.refsection;)?) | %db.secondlevel.refsection;))
+>
+
+  <!ATTLIST refsection
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.refsection.attlist;
+       
+>
+
+  <!ELEMENT refsection
+       (%db.refsection.info;, (((%db.all.blocks;)+, (refsection)*) | (refsection)+))
+>
+
+  <!ATTLIST refsect1
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.refsect1.attlist;
+       
+>
+
+  <!ELEMENT refsect1
+       (%db.refsect1.info;, (((%db.all.blocks;)+, (%db.refsect1.sections;)?) | %db.refsect1.sections;))
+>
+
+  <!ATTLIST refsect2
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.refsect2.attlist;
+       
+>
+
+  <!ELEMENT refsect2
+       (%db.refsect2.info;, (((%db.all.blocks;)+, (%db.refsect2.sections;)?) | %db.refsect2.sections;))
+>
+
+  <!ATTLIST refsect3
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.refsect3.attlist;
+       
+>
+
+  <!ELEMENT refsect3
+       (%db.refsect3.info;, (%db.all.blocks;)+)
+>
+
+  <!ATTLIST glosslist
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.glosslist.attlist;
+       
+>
+
+  <!ELEMENT glosslist
+       ((%db.glosslist.info;)?, (%db.all.blocks;)*, (glossentry)+)
+>
+
+  <!ATTLIST glossentry
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.glossentry.attlist;
+       
+>
+
+  <!ELEMENT glossentry
+       (glossterm, acronym?, abbrev?, (indexterm)*, (glosssee | (glossdef)+))
+>
+
+  <!ATTLIST glossdef
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.glossdef.attlist;
+       
+>
+
+  <!ELEMENT glossdef
+       ((%db.all.blocks;)+, (glossseealso)*)
+>
+
+  <!ATTLIST glosssee
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.glosssee.attlist;
+       
+>
+
+  <!ELEMENT glosssee
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | application | author | biblioref | citation | citebiblioid | citerefentry | citetitle | classname | code | command | computeroutput | constant | coref | database | date | editor | email | emphasis | envar | errorcode | errorname | errortext | errortype | exceptionname | filename | firstterm | footnote | footnoteref | foreignphrase | function | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | indexterm | initializer | inlineequation | inlinemediaobject | interfacename | jobtitle | keycap | keycode | keycombo | keysym | link | literal | markup | menuchoice | methodname | modifier | mousebutton | nonterminal | olink | ooclass | ooexception | oointerface | option | optional | org | orgname | package | parameter | person | personname | phrase | productname | productnumber | prompt | property | quote | remark | replaceable | returnvalue | shortcut | subscript | superscript | symbol | systemitem | tag | termdef | token | trademark | type | uri | userinput | varname | wordasword | xref)*
+>
+
+  <!ATTLIST glossseealso
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.glossseealso.attlist;
+       
+>
+
+  <!ELEMENT glossseealso
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | application | author | biblioref | citation | citebiblioid | citerefentry | citetitle | classname | code | command | computeroutput | constant | coref | database | date | editor | email | emphasis | envar | errorcode | errorname | errortext | errortype | exceptionname | filename | firstterm | footnote | footnoteref | foreignphrase | function | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | indexterm | initializer | inlineequation | inlinemediaobject | interfacename | jobtitle | keycap | keycode | keycombo | keysym | link | literal | markup | menuchoice | methodname | modifier | mousebutton | nonterminal | olink | ooclass | ooexception | oointerface | option | optional | org | orgname | package | parameter | person | personname | phrase | productname | productnumber | prompt | property | quote | remark | replaceable | returnvalue | shortcut | subscript | superscript | symbol | systemitem | tag | termdef | token | trademark | type | uri | userinput | varname | wordasword | xref)*
+>
+
+  <!ATTLIST firstterm
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.firstterm.attlist;
+       
+>
+
+  <!ELEMENT firstterm
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | application | author | biblioref | citation | citebiblioid | citerefentry | citetitle | classname | code | command | computeroutput | constant | coref | database | date | editor | email | emphasis | envar | errorcode | errorname | errortext | errortype | exceptionname | filename | firstterm | footnote | footnoteref | foreignphrase | function | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | indexterm | initializer | inlineequation | inlinemediaobject | interfacename | jobtitle | keycap | keycode | keycombo | keysym | link | literal | markup | menuchoice | methodname | modifier | mousebutton | nonterminal | olink | ooclass | ooexception | oointerface | option | optional | org | orgname | package | parameter | person | personname | phrase | productname | productnumber | prompt | property | quote | remark | replaceable | returnvalue | shortcut | subscript | superscript | symbol | systemitem | tag | termdef | token | trademark | type | uri | userinput | varname | wordasword | xref)*
+>
+
+  <!ATTLIST glossterm
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.glossterm.attlist;
+       
+>
+
+  <!ELEMENT glossterm
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | application | author | biblioref | citation | citebiblioid | citerefentry | citetitle | classname | code | command | computeroutput | constant | coref | database | date | editor | email | emphasis | envar | errorcode | errorname | errortext | errortype | exceptionname | filename | firstterm | footnote | footnoteref | foreignphrase | function | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | indexterm | initializer | inlineequation | inlinemediaobject | interfacename | jobtitle | keycap | keycode | keycombo | keysym | link | literal | markup | menuchoice | methodname | modifier | mousebutton | nonterminal | olink | ooclass | ooexception | oointerface | option | optional | org | orgname | package | parameter | person | personname | phrase | productname | productnumber | prompt | property | quote | remark | replaceable | returnvalue | shortcut | subscript | superscript | symbol | systemitem | tag | termdef | token | trademark | type | uri | userinput | varname | wordasword | xref)*
+>
+
+  <!ATTLIST glossary
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.glossary.attlist;
+       
+>
+
+  <!ELEMENT glossary
+       (%db.glossary.info;, (%db.all.blocks;)*, ((glossdiv)* | (glossentry)*), bibliography?)
+>
+
+  <!ATTLIST glossdiv
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.glossdiv.attlist;
+       
+>
+
+  <!ELEMENT glossdiv
+       (%db.glossdiv.info;, (%db.all.blocks;)*, (glossentry)+)
+>
+
+  <!ATTLIST termdef
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.termdef.attlist;
+       
+>
+
+  <!ELEMENT termdef
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | application | author | biblioref | citation | citebiblioid | citerefentry | citetitle | classname | code | command | computeroutput | constant | coref | database | date | editor | email | emphasis | envar | errorcode | errorname | errortext | errortype | exceptionname | filename | firstterm | footnote | footnoteref | foreignphrase | function | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | indexterm | initializer | inlineequation | inlinemediaobject | interfacename | jobtitle | keycap | keycode | keycombo | keysym | link | literal | markup | menuchoice | methodname | modifier | mousebutton | nonterminal | olink | ooclass | ooexception | oointerface | option | optional | org | orgname | package | parameter | person | personname | phrase | productname | productnumber | prompt | property | quote | remark | replaceable | returnvalue | shortcut | subscript | superscript | symbol | systemitem | tag | termdef | token | trademark | type | uri | userinput | varname | wordasword | xref)*
+>
+
+  <!ATTLIST biblioentry
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.biblioentry.attlist;
+       
+>
+
+  <!ELEMENT biblioentry
+       ((%db.bibliographic.elements;)+)
+>
+
+  <!ATTLIST bibliomixed
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.bibliomixed.attlist;
+       
+>
+
+  <!ELEMENT bibliomixed
+       (#PCDATA | abbrev | abstract | acronym | address | alt | anchor | annotation | artpagenums | author | authorgroup | authorinitials | bibliocoverage | biblioid | bibliomisc | bibliomset | biblioref | bibliorelation | biblioset | bibliosource | citebiblioid | citerefentry | citetitle | collab | confgroup | contractnum | contractsponsor | copyright | coref | cover | date | edition | editor | emphasis | extendedlink | firstname | firstterm | footnote | footnoteref | foreignphrase | givenname | glossterm | honorific | indexterm | inlinemediaobject | issuenum | itermset | keywordset | legalnotice | lineage | link | mediaobject | olink | org | orgname | othercredit | othername | pagenums | person | personblurb | personname | phrase | printhistory | productname | productnumber | pubdate | publisher | publishername | quote | releaseinfo | remark | replaceable | revhistory | seriesvolnums | subjectset | subscript | subtitle | superscript | surname | title | titleabbrev | trademark | volumenum | wordasword | xref)*
+>
+
+  <!ATTLIST biblioset
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.biblioset.attlist;
+       
+>
+
+  <!ELEMENT biblioset
+       ((%db.bibliographic.elements;)+)
+>
+
+  <!ATTLIST bibliomset
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.bibliomset.attlist;
+       
+>
+
+  <!ELEMENT bibliomset
+       (#PCDATA | abbrev | abstract | acronym | address | alt | anchor | annotation | artpagenums | author | authorgroup | authorinitials | bibliocoverage | biblioid | bibliomisc | bibliomset | biblioref | bibliorelation | biblioset | bibliosource | citebiblioid | citerefentry | citetitle | collab | confgroup | contractnum | contractsponsor | copyright | coref | cover | date | edition | editor | emphasis | extendedlink | firstname | firstterm | footnote | footnoteref | foreignphrase | givenname | glossterm | honorific | indexterm | inlinemediaobject | issuenum | itermset | keywordset | legalnotice | lineage | link | mediaobject | olink | org | orgname | othercredit | othername | pagenums | person | personblurb | personname | phrase | printhistory | productname | productnumber | pubdate | publisher | publishername | quote | releaseinfo | remark | replaceable | revhistory | seriesvolnums | subjectset | subscript | subtitle | superscript | surname | title | titleabbrev | trademark | volumenum | wordasword | xref)*
+>
+
+  <!ATTLIST bibliomisc
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.bibliomisc.attlist;
+       
+>
+
+  <!ELEMENT bibliomisc
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST bibliography
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.bibliography.attlist;
+       
+>
+
+  <!ELEMENT bibliography
+       (%db.bibliography.info;, (%db.all.blocks;)*, ((bibliodiv)+ | ((biblioentry | bibliomixed))+))
+>
+
+  <!ATTLIST bibliodiv
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.bibliodiv.attlist;
+       
+>
+
+  <!ELEMENT bibliodiv
+       (%db.bibliodiv.info;, (%db.all.blocks;)*, ((biblioentry | bibliomixed))+)
+>
+
+  <!ATTLIST bibliolist
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.bibliolist.attlist;
+       
+>
+
+  <!ELEMENT bibliolist
+       ((%db.bibliolist.info;)?, (%db.all.blocks;)*, ((biblioentry | bibliomixed))+)
+>
+
+  <!ATTLIST biblioref
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.biblioref.attlist;
+       
+>
+
+  <!ELEMENT biblioref
+       EMPTY
+>
+
+  <!ATTLIST itermset
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.itermset.attlist;
+       
+>
+
+  <!ELEMENT itermset
+       ((indexterm)+)
+>
+
+  <!ATTLIST primary
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.primary.attlist;
+       
+>
+
+  <!ELEMENT primary
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | application | author | biblioref | citation | citebiblioid | citerefentry | citetitle | classname | code | command | computeroutput | constant | coref | database | date | editor | email | emphasis | envar | errorcode | errorname | errortext | errortype | exceptionname | filename | firstterm | footnote | footnoteref | foreignphrase | function | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | indexterm | initializer | inlineequation | inlinemediaobject | interfacename | jobtitle | keycap | keycode | keycombo | keysym | link | literal | markup | menuchoice | methodname | modifier | mousebutton | nonterminal | olink | ooclass | ooexception | oointerface | option | optional | org | orgname | package | parameter | person | personname | phrase | productname | productnumber | prompt | property | quote | remark | replaceable | returnvalue | shortcut | subscript | superscript | symbol | systemitem | tag | termdef | token | trademark | type | uri | userinput | varname | wordasword | xref)*
+>
+
+  <!ATTLIST secondary
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.secondary.attlist;
+       
+>
+
+  <!ELEMENT secondary
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | application | author | biblioref | citation | citebiblioid | citerefentry | citetitle | classname | code | command | computeroutput | constant | coref | database | date | editor | email | emphasis | envar | errorcode | errorname | errortext | errortype | exceptionname | filename | firstterm | footnote | footnoteref | foreignphrase | function | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | indexterm | initializer | inlineequation | inlinemediaobject | interfacename | jobtitle | keycap | keycode | keycombo | keysym | link | literal | markup | menuchoice | methodname | modifier | mousebutton | nonterminal | olink | ooclass | ooexception | oointerface | option | optional | org | orgname | package | parameter | person | personname | phrase | productname | productnumber | prompt | property | quote | remark | replaceable | returnvalue | shortcut | subscript | superscript | symbol | systemitem | tag | termdef | token | trademark | type | uri | userinput | varname | wordasword | xref)*
+>
+
+  <!ATTLIST tertiary
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.tertiary.attlist;
+       
+>
+
+  <!ELEMENT tertiary
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | application | author | biblioref | citation | citebiblioid | citerefentry | citetitle | classname | code | command | computeroutput | constant | coref | database | date | editor | email | emphasis | envar | errorcode | errorname | errortext | errortype | exceptionname | filename | firstterm | footnote | footnoteref | foreignphrase | function | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | indexterm | initializer | inlineequation | inlinemediaobject | interfacename | jobtitle | keycap | keycode | keycombo | keysym | link | literal | markup | menuchoice | methodname | modifier | mousebutton | nonterminal | olink | ooclass | ooexception | oointerface | option | optional | org | orgname | package | parameter | person | personname | phrase | productname | productnumber | prompt | property | quote | remark | replaceable | returnvalue | shortcut | subscript | superscript | symbol | systemitem | tag | termdef | token | trademark | type | uri | userinput | varname | wordasword | xref)*
+>
+
+  <!ATTLIST see
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.see.attlist;
+       
+>
+
+  <!ELEMENT see
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | application | author | biblioref | citation | citebiblioid | citerefentry | citetitle | classname | code | command | computeroutput | constant | coref | database | date | editor | email | emphasis | envar | errorcode | errorname | errortext | errortype | exceptionname | filename | firstterm | footnote | footnoteref | foreignphrase | function | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | indexterm | initializer | inlineequation | inlinemediaobject | interfacename | jobtitle | keycap | keycode | keycombo | keysym | link | literal | markup | menuchoice | methodname | modifier | mousebutton | nonterminal | olink | ooclass | ooexception | oointerface | option | optional | org | orgname | package | parameter | person | personname | phrase | productname | productnumber | prompt | property | quote | remark | replaceable | returnvalue | shortcut | subscript | superscript | symbol | systemitem | tag | termdef | token | trademark | type | uri | userinput | varname | wordasword | xref)*
+>
+
+  <!ATTLIST seealso
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.seealso.attlist;
+       
+>
+
+  <!ELEMENT seealso
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | application | author | biblioref | citation | citebiblioid | citerefentry | citetitle | classname | code | command | computeroutput | constant | coref | database | date | editor | email | emphasis | envar | errorcode | errorname | errortext | errortype | exceptionname | filename | firstterm | footnote | footnoteref | foreignphrase | function | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | indexterm | initializer | inlineequation | inlinemediaobject | interfacename | jobtitle | keycap | keycode | keycombo | keysym | link | literal | markup | menuchoice | methodname | modifier | mousebutton | nonterminal | olink | ooclass | ooexception | oointerface | option | optional | org | orgname | package | parameter | person | personname | phrase | productname | productnumber | prompt | property | quote | remark | replaceable | returnvalue | shortcut | subscript | superscript | symbol | systemitem | tag | termdef | token | trademark | type | uri | userinput | varname | wordasword | xref)*
+>
+
+  <!ATTLIST index
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.index.attlist;
+       
+>
+
+  <!ELEMENT index
+       (%db.index.info;, (%db.all.blocks;)*, ((indexdiv)* | (indexentry)* | segmentedlist))
+>
+
+  <!ATTLIST setindex
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.setindex.attlist;
+       
+>
+
+  <!ELEMENT setindex
+       (%db.setindex.info;, (%db.all.blocks;)*, ((indexdiv)* | (indexentry)*))
+>
+
+  <!ATTLIST indexdiv
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.indexdiv.attlist;
+       
+>
+
+  <!ELEMENT indexdiv
+       (%db.indexdiv.info;, (%db.all.blocks;)*, ((indexentry)+ | segmentedlist))
+>
+
+  <!ATTLIST indexentry
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.indexentry.attlist;
+       
+>
+
+  <!ELEMENT indexentry
+       (primaryie, ((seeie | seealsoie))*, (secondaryie | (seeie | seealsoie | tertiaryie))*)
+>
+
+  <!ATTLIST primaryie
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.primaryie.attlist;
+       
+>
+
+  <!ELEMENT primaryie
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | application | author | biblioref | citation | citebiblioid | citerefentry | citetitle | classname | code | command | computeroutput | constant | coref | database | date | editor | email | emphasis | envar | errorcode | errorname | errortext | errortype | exceptionname | filename | firstterm | footnote | footnoteref | foreignphrase | function | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | indexterm | initializer | inlineequation | inlinemediaobject | interfacename | jobtitle | keycap | keycode | keycombo | keysym | link | literal | markup | menuchoice | methodname | modifier | mousebutton | nonterminal | olink | ooclass | ooexception | oointerface | option | optional | org | orgname | package | parameter | person | personname | phrase | productname | productnumber | prompt | property | quote | remark | replaceable | returnvalue | shortcut | subscript | superscript | symbol | systemitem | tag | termdef | token | trademark | type | uri | userinput | varname | wordasword | xref)*
+>
+
+  <!ATTLIST secondaryie
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.secondaryie.attlist;
+       
+>
+
+  <!ELEMENT secondaryie
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | application | author | biblioref | citation | citebiblioid | citerefentry | citetitle | classname | code | command | computeroutput | constant | coref | database | date | editor | email | emphasis | envar | errorcode | errorname | errortext | errortype | exceptionname | filename | firstterm | footnote | footnoteref | foreignphrase | function | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | indexterm | initializer | inlineequation | inlinemediaobject | interfacename | jobtitle | keycap | keycode | keycombo | keysym | link | literal | markup | menuchoice | methodname | modifier | mousebutton | nonterminal | olink | ooclass | ooexception | oointerface | option | optional | org | orgname | package | parameter | person | personname | phrase | productname | productnumber | prompt | property | quote | remark | replaceable | returnvalue | shortcut | subscript | superscript | symbol | systemitem | tag | termdef | token | trademark | type | uri | userinput | varname | wordasword | xref)*
+>
+
+  <!ATTLIST tertiaryie
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.tertiaryie.attlist;
+       
+>
+
+  <!ELEMENT tertiaryie
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | application | author | biblioref | citation | citebiblioid | citerefentry | citetitle | classname | code | command | computeroutput | constant | coref | database | date | editor | email | emphasis | envar | errorcode | errorname | errortext | errortype | exceptionname | filename | firstterm | footnote | footnoteref | foreignphrase | function | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | indexterm | initializer | inlineequation | inlinemediaobject | interfacename | jobtitle | keycap | keycode | keycombo | keysym | link | literal | markup | menuchoice | methodname | modifier | mousebutton | nonterminal | olink | ooclass | ooexception | oointerface | option | optional | org | orgname | package | parameter | person | personname | phrase | productname | productnumber | prompt | property | quote | remark | replaceable | returnvalue | shortcut | subscript | superscript | symbol | systemitem | tag | termdef | token | trademark | type | uri | userinput | varname | wordasword | xref)*
+>
+
+  <!ATTLIST seeie
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.seeie.attlist;
+       
+>
+
+  <!ELEMENT seeie
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | application | author | biblioref | citation | citebiblioid | citerefentry | citetitle | classname | code | command | computeroutput | constant | coref | database | date | editor | email | emphasis | envar | errorcode | errorname | errortext | errortype | exceptionname | filename | firstterm | footnote | footnoteref | foreignphrase | function | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | indexterm | initializer | inlineequation | inlinemediaobject | interfacename | jobtitle | keycap | keycode | keycombo | keysym | link | literal | markup | menuchoice | methodname | modifier | mousebutton | nonterminal | olink | ooclass | ooexception | oointerface | option | optional | org | orgname | package | parameter | person | personname | phrase | productname | productnumber | prompt | property | quote | remark | replaceable | returnvalue | shortcut | subscript | superscript | symbol | systemitem | tag | termdef | token | trademark | type | uri | userinput | varname | wordasword | xref)*
+>
+
+  <!ATTLIST seealsoie
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.seealsoie.attlist;
+       
+>
+
+  <!ELEMENT seealsoie
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | application | author | biblioref | citation | citebiblioid | citerefentry | citetitle | classname | code | command | computeroutput | constant | coref | database | date | editor | email | emphasis | envar | errorcode | errorname | errortext | errortype | exceptionname | filename | firstterm | footnote | footnoteref | foreignphrase | function | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | indexterm | initializer | inlineequation | inlinemediaobject | interfacename | jobtitle | keycap | keycode | keycombo | keysym | link | literal | markup | menuchoice | methodname | modifier | mousebutton | nonterminal | olink | ooclass | ooexception | oointerface | option | optional | org | orgname | package | parameter | person | personname | phrase | productname | productnumber | prompt | property | quote | remark | replaceable | returnvalue | shortcut | subscript | superscript | symbol | systemitem | tag | termdef | token | trademark | type | uri | userinput | varname | wordasword | xref)*
+>
+
+  <!ATTLIST toc
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.toc.attlist;
+       
+>
+
+  <!ELEMENT toc
+       (%db.toc.info;, (%db.all.blocks;)*, ((tocdiv | tocentry))*)
+>
+
+  <!ATTLIST tocdiv
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.tocdiv.attlist;
+       
+>
+
+  <!ELEMENT tocdiv
+       (%db.tocdiv.info;, (%db.all.blocks;)*, ((tocdiv | tocentry))+)
+>
+
+  <!ATTLIST tocentry
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.tocentry.attlist;
+       
+>
+
+  <!ELEMENT tocentry
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | application | author | biblioref | citation | citebiblioid | citerefentry | citetitle | classname | code | command | computeroutput | constant | coref | database | date | editor | email | emphasis | envar | errorcode | errorname | errortext | errortype | exceptionname | filename | firstterm | footnote | footnoteref | foreignphrase | function | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | indexterm | initializer | inlineequation | inlinemediaobject | interfacename | jobtitle | keycap | keycode | keycombo | keysym | link | literal | markup | menuchoice | methodname | modifier | mousebutton | nonterminal | olink | ooclass | ooexception | oointerface | option | optional | org | orgname | package | parameter | person | personname | phrase | productname | productnumber | prompt | property | quote | remark | replaceable | returnvalue | shortcut | subscript | superscript | symbol | systemitem | tag | termdef | token | trademark | type | uri | userinput | varname | wordasword | xref)*
+>
+
+  <!ATTLIST task
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.task.attlist;
+       
+>
+
+  <!ELEMENT task
+       (%db.task.info;, tasksummary?, taskprerequisites?, procedure, (example)*, taskrelated?)
+>
+
+  <!ATTLIST tasksummary
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.tasksummary.attlist;
+       
+>
+
+  <!ELEMENT tasksummary
+       (%db.tasksummary.info;, (%db.all.blocks;)+)
+>
+
+  <!ATTLIST taskprerequisites
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.taskprerequisites.attlist;
+       
+>
+
+  <!ELEMENT taskprerequisites
+       (%db.taskprerequisites.info;, (%db.all.blocks;)+)
+>
+
+  <!ATTLIST taskrelated
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.taskrelated.attlist;
+       
+>
+
+  <!ELEMENT taskrelated
+       (%db.taskrelated.info;, (%db.all.blocks;)+)
+>
+
+  <!ATTLIST calloutlist
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.calloutlist.attlist;
+       
+>
+
+  <!ELEMENT calloutlist
+       (%db.calloutlist.info;, (%db.all.blocks;)*, (callout)+)
+>
+
+  <!ATTLIST callout
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.callout.attlist;
+       
+>
+
+  <!ELEMENT callout
+       ((%db.all.blocks;)+)
+>
+
+  <!ATTLIST programlistingco
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.programlistingco.attlist;
+       
+>
+
+  <!ELEMENT programlistingco
+       (%db.programlistingco.info;, areaspec, programlisting, (calloutlist)*)
+>
+
+  <!ATTLIST areaspec
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.areaspec.attlist;
+       
+>
+
+  <!ELEMENT areaspec
+       (((area | areaset))+)
+>
+
+  <!ATTLIST area
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.area.attlist;
+       
+>
+
+  <!ELEMENT area
+       (alt?)
+>
+
+  <!ATTLIST areaset
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.areaset.attlist;
+       
+>
+
+  <!ELEMENT areaset
+       ((area)+)
+>
+
+  <!ATTLIST screenco
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.screenco.attlist;
+       
+>
+
+  <!ELEMENT screenco
+       (%db.screenco.info;, areaspec, screen, (calloutlist)*)
+>
+
+  <!ATTLIST imageobjectco
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.imageobjectco.attlist;
+       
+>
+
+  <!ELEMENT imageobjectco
+       (%db.imageobjectco.info;, areaspec, (imageobject)+, (calloutlist)*)
+>
+
+  <!ATTLIST co
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.co.attlist;
+       
+>
+
+  <!ELEMENT co
+       EMPTY
+>
+
+  <!ATTLIST coref
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.coref.attlist;
+       
+>
+
+  <!ELEMENT coref
+       EMPTY
+>
+
+  <!ATTLIST productionset
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.productionset.attlist;
+       
+>
+
+  <!ELEMENT productionset
+       (%db.productionset.info;, ((production | productionrecap))+)
+>
+
+  <!ATTLIST production
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.production.attlist;
+       
+>
+
+  <!ELEMENT production
+       (lhs, (rhs)+, (constraint)*)
+>
+
+  <!ATTLIST lhs
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.lhs.attlist;
+       
+>
+
+  <!ELEMENT lhs
+       (#PCDATA)*
+>
+
+  <!ATTLIST rhs
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.rhs.attlist;
+       
+>
+
+  <!ELEMENT rhs
+       (#PCDATA | lineannotation | nonterminal | sbr)*
+>
+
+  <!ATTLIST nonterminal
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.nonterminal.attlist;
+       
+>
+
+  <!ELEMENT nonterminal
+       (#PCDATA)*
+>
+
+  <!ATTLIST constraint
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.constraint.attlist;
+       
+>
+
+  <!ELEMENT constraint
+       EMPTY
+>
+
+  <!ATTLIST productionrecap
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.productionrecap.attlist;
+       
+>
+
+  <!ELEMENT productionrecap
+       EMPTY
+>
+
+  <!ATTLIST constraintdef
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.constraintdef.attlist;
+       
+>
+
+  <!ELEMENT constraintdef
+       (%db.constraintdef.info;, (%db.all.blocks;)+)
+>
+
+  <!ATTLIST tgroup
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.tgroup.attlist;
+       
+>
+
+  <!ELEMENT tgroup
+       ((colspec)*, (spanspec)*, thead?, tfoot?, tbody)
+>
+
+  <!ATTLIST colspec
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.colspec.attlist;
+       
+>
+
+  <!ELEMENT colspec
+       EMPTY
+>
+
+  <!ATTLIST spanspec
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.spanspec.attlist;
+       
+>
+
+  <!ELEMENT spanspec
+       EMPTY
+>
+
+  <!ATTLIST row
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.row.attlist;
+       
+>
+
+  <!ELEMENT row
+       (((entry | entrytbl))+)
+>
+
+  <!ATTLIST entry
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.entry.attlist;
+       
+>
+
+  <!ELEMENT entry
+       (#PCDATA | abbrev | accel | acronym | address | alt | anchor | annotation | application | author | bibliolist | biblioref | blockquote | bridgehead | calloutlist | caution | citation | citebiblioid | citerefentry | citetitle | classname | classsynopsis | cmdsynopsis | code | command | computeroutput | constant | constructorsynopsis | coref | database | date | destructorsynopsis | editor | email | emphasis | envar | epigraph | equation | errorcode | errorname | errortext | errortype | example | exceptionname | fieldsynopsis | figure | filename | firstterm | footnote | footnoteref | foreignphrase | formalpara | funcsynopsis | function | glosslist | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | important | indexterm | informalequation | informalexample | informalfigure | informaltable | initializer | inlineequation | inlinemediaobject | interfacename | itemizedlist | jobtitle | keycap | keycode | keycombo | keysym | link | literal | literallayout | markup | mediaobject | menuchoice | methodname | methodsynopsis | modifier | mousebutton | nonterminal | note | olink | ooclass | ooexception | oointerface | option | optional | orderedlist | org | orgname | package | para | parameter | person | personname | phrase | procedure | productname | productnumber | programlisting | programlistingco | prompt | property | qandaset | quote | remark | replaceable | returnvalue | revhistory | screen | screenco | screenshot | segmentedlist | shortcut | sidebar | simpara | simplelist | subscript | superscript | symbol | synopsis | systemitem | table | tag | task | termdef | tip | token | trademark | type | uri | userinput | variablelist | varname | warning | wordasword | xref)*
+>
+
+  <!ATTLIST entrytbl
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.entrytbl.attlist;
+       
+>
+
+  <!ELEMENT entrytbl
+       ((colspec)*, (spanspec)*, thead?, tbody)
+>
+
+  <!ATTLIST col
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.html.col.attlist;
+       
+>
+
+  <!ELEMENT col
+       EMPTY
+>
+
+  <!ATTLIST colgroup
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.html.colgroup.attlist;
+       
+>
+
+  <!ELEMENT colgroup
+       ((col)*)
+>
+
+  <!ATTLIST tr
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.html.tr.attlist;
+       
+>
+
+  <!ELEMENT tr
+       (((th | td))+)
+>
+
+  <!ATTLIST th
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.html.th.attlist;
+       
+>
+
+  <!ELEMENT th
+       (#PCDATA | abbrev | accel | acronym | address | alt | anchor | annotation | application | author | bibliolist | biblioref | blockquote | bridgehead | calloutlist | caution | citation | citebiblioid | citerefentry | citetitle | classname | classsynopsis | cmdsynopsis | code | command | computeroutput | constant | constructorsynopsis | coref | database | date | destructorsynopsis | editor | email | emphasis | envar | epigraph | equation | errorcode | errorname | errortext | errortype | example | exceptionname | fieldsynopsis | figure | filename | firstterm | footnote | footnoteref | foreignphrase | formalpara | funcsynopsis | function | glosslist | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | important | indexterm | informalequation | informalexample | informalfigure | informaltable | initializer | inlineequation | inlinemediaobject | interfacename | itemizedlist | jobtitle | keycap | keycode | keycombo | keysym | link | literal | literallayout | markup | mediaobject | menuchoice | methodname | methodsynopsis | modifier | mousebutton | nonterminal | note | olink | ooclass | ooexception | oointerface | option | optional | orderedlist | org | orgname | package | para | parameter | person | personname | phrase | procedure | productname | productnumber | programlisting | programlistingco | prompt | property | qandaset | quote | remark | replaceable | returnvalue | revhistory | screen | screenco | screenshot | segmentedlist | shortcut | sidebar | simpara | simplelist | subscript | superscript | symbol | synopsis | systemitem | table | tag | task | termdef | tip | token | trademark | type | uri | userinput | variablelist | varname | warning | wordasword | xref)*
+>
+
+  <!ATTLIST td
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.html.td.attlist;
+       
+>
+
+  <!ELEMENT td
+       (#PCDATA | abbrev | accel | acronym | address | alt | anchor | annotation | application | author | bibliolist | biblioref | blockquote | bridgehead | calloutlist | caution | citation | citebiblioid | citerefentry | citetitle | classname | classsynopsis | cmdsynopsis | code | command | computeroutput | constant | constructorsynopsis | coref | database | date | destructorsynopsis | editor | email | emphasis | envar | epigraph | equation | errorcode | errorname | errortext | errortype | example | exceptionname | fieldsynopsis | figure | filename | firstterm | footnote | footnoteref | foreignphrase | formalpara | funcsynopsis | function | glosslist | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | important | indexterm | informalequation | informalexample | informalfigure | informaltable | initializer | inlineequation | inlinemediaobject | interfacename | itemizedlist | jobtitle | keycap | keycode | keycombo | keysym | link | literal | literallayout | markup | mediaobject | menuchoice | methodname | methodsynopsis | modifier | mousebutton | nonterminal | note | olink | ooclass | ooexception | oointerface | option | optional | orderedlist | org | orgname | package | para | parameter | person | personname | phrase | procedure | productname | productnumber | programlisting | programlistingco | prompt | property | qandaset | quote | remark | replaceable | returnvalue | revhistory | screen | screenco | screenshot | segmentedlist | shortcut | sidebar | simpara | simplelist | subscript | superscript | symbol | synopsis | systemitem | table | tag | task | termdef | tip | token | trademark | type | uri | userinput | variablelist | varname | warning | wordasword | xref)*
+>
+
+  <!ATTLIST msgset
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.msgset.attlist;
+       
+>
+
+  <!ELEMENT msgset
+       (%db.msgset.info;, ((msgentry)+ | (simplemsgentry)+))
+>
+
+  <!ATTLIST msgentry
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.msgentry.attlist;
+       
+>
+
+  <!ELEMENT msgentry
+       ((msg)+, msginfo?, (msgexplan)*)
+>
+
+  <!ATTLIST simplemsgentry
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.simplemsgentry.attlist;
+       
+>
+
+  <!ELEMENT simplemsgentry
+       (msgtext, (msgexplan)+)
+>
+
+  <!ATTLIST msg
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.msg.attlist;
+       
+>
+
+  <!ELEMENT msg
+       (%db.msg.info;, msgmain, ((msgsub | msgrel))*)
+>
+
+  <!ATTLIST msgmain
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.msgmain.attlist;
+       
+>
+
+  <!ELEMENT msgmain
+       (%db.msgmain.info;, msgtext)
+>
+
+  <!ATTLIST msgsub
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.msgsub.attlist;
+       
+>
+
+  <!ELEMENT msgsub
+       (%db.msgsub.info;, msgtext)
+>
+
+  <!ATTLIST msgrel
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.msgrel.attlist;
+       
+>
+
+  <!ELEMENT msgrel
+       (%db.msgrel.info;, msgtext)
+>
+
+  <!ATTLIST msgtext
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.msgtext.attlist;
+       
+>
+
+  <!ELEMENT msgtext
+       ((%db.all.blocks;)+)
+>
+
+  <!ATTLIST msginfo
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.msginfo.attlist;
+       
+>
+
+  <!ELEMENT msginfo
+       (((msglevel | msgorig | msgaud))*)
+>
+
+  <!ATTLIST msglevel
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.msglevel.attlist;
+       
+>
+
+  <!ELEMENT msglevel
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST msgorig
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.msgorig.attlist;
+       
+>
+
+  <!ELEMENT msgorig
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST msgaud
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.msgaud.attlist;
+       
+>
+
+  <!ELEMENT msgaud
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST msgexplan
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.msgexplan.attlist;
+       
+>
+
+  <!ELEMENT msgexplan
+       (%db.msgexplan.info;, (%db.all.blocks;)+)
+>
+
+  <!ATTLIST qandaset
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.qandaset.attlist;
+       
+>
+
+  <!ELEMENT qandaset
+       (%db.qandaset.info;, (%db.all.blocks;)*, ((qandadiv)+ | (qandaentry)+))
+>
+
+  <!ATTLIST qandadiv
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.qandadiv.attlist;
+       
+>
+
+  <!ELEMENT qandadiv
+       (%db.qandadiv.info;, (%db.all.blocks;)*, ((qandadiv)+ | (qandaentry)+))
+>
+
+  <!ATTLIST qandaentry
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.qandaentry.attlist;
+       
+>
+
+  <!ELEMENT qandaentry
+       (%db.qandaentry.info;, question, (answer)*)
+>
+
+  <!ATTLIST question
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.question.attlist;
+       
+>
+
+  <!ELEMENT question
+       (label?, (%db.all.blocks;)+)
+>
+
+  <!ATTLIST answer
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.answer.attlist;
+       
+>
+
+  <!ELEMENT answer
+       (label?, (%db.all.blocks;)+)
+>
+
+  <!ATTLIST label
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.label.attlist;
+       
+>
+
+  <!ELEMENT label
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST equation
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.equation.attlist;
+       
+>
+
+  <!ELEMENT equation
+       (%db.equation.info;, alt?, %db.equation.content;, caption?)
+>
+
+  <!ATTLIST informalequation
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.informalequation.attlist;
+       
+>
+
+  <!ELEMENT informalequation
+       (%db.informalequation.info;, alt?, %db.equation.content;, caption?)
+>
+
+  <!ATTLIST inlineequation
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.inlineequation.attlist;
+       
+>
+
+  <!ELEMENT inlineequation
+       (alt?, %db.inlineequation.content;)
+>
+
+  <!ATTLIST mathphrase
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.mathphrase.attlist;
+       
+>
+
+  <!ELEMENT mathphrase
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST markup
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.markup.attlist;
+       
+>
+
+  <!ELEMENT markup
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST tag
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.tag.attlist;
+       
+>
+
+  <!ELEMENT tag
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST symbol
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.symbol.attlist;
+       
+>
+
+  <!ELEMENT symbol
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST token
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.token.attlist;
+       
+>
+
+  <!ELEMENT token
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST literal
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.literal.attlist;
+       
+>
+
+  <!ELEMENT literal
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST code
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.code.attlist;
+       
+>
+
+  <!ELEMENT code
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | classname | coref | date | emphasis | exceptionname | firstterm | footnote | footnoteref | foreignphrase | function | glossterm | indexterm | initializer | inlinemediaobject | interfacename | link | methodname | modifier | olink | ooclass | ooexception | oointerface | parameter | phrase | quote | remark | replaceable | returnvalue | subscript | superscript | trademark | type | varname | wordasword | xref)*
+>
+
+  <!ATTLIST constant
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.constant.attlist;
+       
+>
+
+  <!ELEMENT constant
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST productname
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.productname.attlist;
+       
+>
+
+  <!ELEMENT productname
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST productnumber
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.productnumber.attlist;
+       
+>
+
+  <!ELEMENT productnumber
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST database
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.database.attlist;
+       
+>
+
+  <!ELEMENT database
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST application
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.application.attlist;
+       
+>
+
+  <!ELEMENT application
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST hardware
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.hardware.attlist;
+       
+>
+
+  <!ELEMENT hardware
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST guibutton
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.guibutton.attlist;
+       
+>
+
+  <!ELEMENT guibutton
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST guiicon
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.guiicon.attlist;
+       
+>
+
+  <!ELEMENT guiicon
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST guilabel
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.guilabel.attlist;
+       
+>
+
+  <!ELEMENT guilabel
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST guimenu
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.guimenu.attlist;
+       
+>
+
+  <!ELEMENT guimenu
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST guimenuitem
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.guimenuitem.attlist;
+       
+>
+
+  <!ELEMENT guimenuitem
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST guisubmenu
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.guisubmenu.attlist;
+       
+>
+
+  <!ELEMENT guisubmenu
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST menuchoice
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.menuchoice.attlist;
+       
+>
+
+  <!ELEMENT menuchoice
+       (shortcut?, ((guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu))+)
+>
+
+  <!ATTLIST mousebutton
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.mousebutton.attlist;
+       
+>
+
+  <!ELEMENT mousebutton
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST keycap
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.keycap.attlist;
+       
+>
+
+  <!ELEMENT keycap
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST keycode
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.keycode.attlist;
+       
+>
+
+  <!ELEMENT keycode
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST keycombo
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.keycombo.attlist;
+       
+>
+
+  <!ELEMENT keycombo
+       ((%db.keycombination.contentmodel;)+)
+>
+
+  <!ATTLIST keysym
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.keysym.attlist;
+       
+>
+
+  <!ELEMENT keysym
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST accel
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.accel.attlist;
+       
+>
+
+  <!ELEMENT accel
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST shortcut
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.shortcut.attlist;
+       
+>
+
+  <!ELEMENT shortcut
+       ((%db.keycombination.contentmodel;)+)
+>
+
+  <!ATTLIST prompt
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.prompt.attlist;
+       
+>
+
+  <!ELEMENT prompt
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | co | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST envar
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.envar.attlist;
+       
+>
+
+  <!ELEMENT envar
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST filename
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.filename.attlist;
+       
+>
+
+  <!ELEMENT filename
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST command
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.command.attlist;
+       
+>
+
+  <!ELEMENT command
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST computeroutput
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.computeroutput.attlist;
+       
+>
+
+  <!ELEMENT computeroutput
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | co | code | command | computeroutput | constant | coref | date | email | emphasis | envar | filename | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | literal | markup | nonterminal | olink | option | optional | package | parameter | phrase | prompt | property | quote | remark | replaceable | subscript | superscript | symbol | systemitem | tag | termdef | token | trademark | uri | userinput | wordasword | xref)*
+>
+
+  <!ATTLIST userinput
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.userinput.attlist;
+       
+>
+
+  <!ELEMENT userinput
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | biblioref | co | code | command | computeroutput | constant | coref | date | email | emphasis | envar | filename | firstterm | footnote | footnoteref | foreignphrase | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | indexterm | inlinemediaobject | keycap | keycode | keycombo | keysym | link | literal | markup | menuchoice | mousebutton | nonterminal | olink | option | optional | package | parameter | phrase | prompt | property | quote | remark | replaceable | shortcut | subscript | superscript | symbol | systemitem | tag | termdef | token | trademark | uri | userinput | wordasword | xref)*
+>
+
+  <!ATTLIST cmdsynopsis
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.cmdsynopsis.attlist;
+       
+>
+
+  <!ELEMENT cmdsynopsis
+       (%db.cmdsynopsis.info;, ((command | arg | group | sbr))+, (synopfragment)*)
+>
+
+  <!ATTLIST arg
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.arg.attlist;
+       
+>
+
+  <!ELEMENT arg
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | arg | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | group | indexterm | inlinemediaobject | link | olink | option | phrase | quote | remark | replaceable | sbr | subscript | superscript | synopfragmentref | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST sbr
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.sbr.attlist;
+       
+>
+
+  <!ELEMENT sbr
+       EMPTY
+>
+
+  <!ATTLIST synopfragment
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.synopfragment.attlist;
+       
+>
+
+  <!ELEMENT synopfragment
+       (((arg | group))+)
+>
+
+  <!ATTLIST synopfragmentref
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.synopfragmentref.attlist;
+       
+>
+
+  <!ELEMENT synopfragmentref
+       (#PCDATA)*
+>
+
+  <!ATTLIST synopsis
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.synopsis.attlist;
+       
+>
+
+  <!ELEMENT synopsis
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | application | author | biblioref | citation | citebiblioid | citerefentry | citetitle | classname | co | code | command | computeroutput | constant | coref | database | date | editor | email | emphasis | envar | errorcode | errorname | errortext | errortype | exceptionname | filename | firstterm | footnote | footnoteref | foreignphrase | function | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | indexterm | info | initializer | inlineequation | inlinemediaobject | interfacename | jobtitle | keycap | keycode | keycombo | keysym | lineannotation | link | literal | markup | menuchoice | methodname | modifier | mousebutton | nonterminal | olink | ooclass | ooexception | oointerface | option | optional | org | orgname | package | parameter | person | personname | phrase | productname | productnumber | prompt | property | quote | remark | replaceable | returnvalue | shortcut | subscript | superscript | symbol | systemitem | tag | termdef | textobject | token | trademark | type | uri | userinput | varname | wordasword | xref)*
+>
+
+  <!ATTLIST funcsynopsis
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.funcsynopsis.attlist;
+       
+>
+
+  <!ELEMENT funcsynopsis
+       (%db.funcsynopsis.info;, ((funcsynopsisinfo | funcprototype))+)
+>
+
+  <!ATTLIST funcsynopsisinfo
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.funcsynopsisinfo.attlist;
+       
+>
+
+  <!ELEMENT funcsynopsisinfo
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | application | author | biblioref | citation | citebiblioid | citerefentry | citetitle | classname | co | code | command | computeroutput | constant | coref | database | date | editor | email | emphasis | envar | errorcode | errorname | errortext | errortype | exceptionname | filename | firstterm | footnote | footnoteref | foreignphrase | function | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | indexterm | info | initializer | inlineequation | inlinemediaobject | interfacename | jobtitle | keycap | keycode | keycombo | keysym | lineannotation | link | literal | markup | menuchoice | methodname | modifier | mousebutton | nonterminal | olink | ooclass | ooexception | oointerface | option | optional | org | orgname | package | parameter | person | personname | phrase | productname | productnumber | prompt | property | quote | remark | replaceable | returnvalue | shortcut | subscript | superscript | symbol | systemitem | tag | termdef | textobject | token | trademark | type | uri | userinput | varname | wordasword | xref)*
+>
+
+  <!ATTLIST funcprototype
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.funcprototype.attlist;
+       
+>
+
+  <!ELEMENT funcprototype
+       ((modifier)*, funcdef, (void | varargs | (((paramdef | group))+, varargs?)), (modifier)*)
+>
+
+  <!ATTLIST funcdef
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.funcdef.attlist;
+       
+>
+
+  <!ELEMENT funcdef
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | function | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | type | wordasword | xref)*
+>
+
+  <!ATTLIST function
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.function.attlist;
+       
+>
+
+  <!ELEMENT function
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST void
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.void.attlist;
+       
+>
+
+  <!ELEMENT void
+       EMPTY
+>
+
+  <!ATTLIST varargs
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.varargs.attlist;
+       
+>
+
+  <!ELEMENT varargs
+       EMPTY
+>
+
+  <!ATTLIST paramdef
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.paramdef.attlist;
+       
+>
+
+  <!ELEMENT paramdef
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | funcparams | glossterm | indexterm | initializer | inlinemediaobject | link | olink | parameter | phrase | quote | remark | replaceable | subscript | superscript | trademark | type | wordasword | xref)*
+>
+
+  <!ATTLIST funcparams
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.funcparams.attlist;
+       
+>
+
+  <!ELEMENT funcparams
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST classsynopsis
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.classsynopsis.attlist;
+       
+>
+
+  <!ELEMENT classsynopsis
+       ((%db.oo.inlines;)+, ((classsynopsisinfo | methodsynopsis | constructorsynopsis | destructorsynopsis | fieldsynopsis))*)
+>
+
+  <!ATTLIST classsynopsisinfo
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.classsynopsisinfo.attlist;
+       
+>
+
+  <!ELEMENT classsynopsisinfo
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | application | author | biblioref | citation | citebiblioid | citerefentry | citetitle | classname | co | code | command | computeroutput | constant | coref | database | date | editor | email | emphasis | envar | errorcode | errorname | errortext | errortype | exceptionname | filename | firstterm | footnote | footnoteref | foreignphrase | function | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | indexterm | info | initializer | inlineequation | inlinemediaobject | interfacename | jobtitle | keycap | keycode | keycombo | keysym | lineannotation | link | literal | markup | menuchoice | methodname | modifier | mousebutton | nonterminal | olink | ooclass | ooexception | oointerface | option | optional | org | orgname | package | parameter | person | personname | phrase | productname | productnumber | prompt | property | quote | remark | replaceable | returnvalue | shortcut | subscript | superscript | symbol | systemitem | tag | termdef | textobject | token | trademark | type | uri | userinput | varname | wordasword | xref)*
+>
+
+  <!ATTLIST ooclass
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.ooclass.attlist;
+       
+>
+
+  <!ELEMENT ooclass
+       (((package | modifier))*, classname)
+>
+
+  <!ATTLIST oointerface
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.oointerface.attlist;
+       
+>
+
+  <!ELEMENT oointerface
+       (((package | modifier))*, interfacename)
+>
+
+  <!ATTLIST ooexception
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.ooexception.attlist;
+       
+>
+
+  <!ELEMENT ooexception
+       (((package | modifier))*, exceptionname)
+>
+
+  <!ATTLIST modifier
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.modifier.attlist;
+       
+>
+
+  <!ELEMENT modifier
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST interfacename
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.interfacename.attlist;
+       
+>
+
+  <!ELEMENT interfacename
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST exceptionname
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.exceptionname.attlist;
+       
+>
+
+  <!ELEMENT exceptionname
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST fieldsynopsis
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.fieldsynopsis.attlist;
+       
+>
+
+  <!ELEMENT fieldsynopsis
+       ((modifier)*, type?, varname, initializer?)
+>
+
+  <!ATTLIST initializer
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.initializer.attlist;
+       
+>
+
+  <!ELEMENT initializer
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | code | constant | coref | date | email | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | literal | markup | mathphrase | olink | phrase | quote | remark | replaceable | subscript | superscript | symbol | tag | token | trademark | uri | wordasword | xref)*
+>
+
+  <!ATTLIST constructorsynopsis
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.constructorsynopsis.attlist;
+       
+>
+
+  <!ELEMENT constructorsynopsis
+       ((modifier)*, methodname?, (((methodparam | group))+ | void?), (exceptionname)*)
+>
+
+  <!ATTLIST destructorsynopsis
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.destructorsynopsis.attlist;
+       
+>
+
+  <!ELEMENT destructorsynopsis
+       ((modifier)*, methodname?, (((methodparam | group))+ | void?), (exceptionname)*)
+>
+
+  <!ATTLIST methodsynopsis
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.methodsynopsis.attlist;
+       
+>
+
+  <!ELEMENT methodsynopsis
+       ((modifier)*, (type | void)?, methodname, (((methodparam | group))+ | void), (exceptionname)*, (modifier)*)
+>
+
+  <!ATTLIST methodname
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.methodname.attlist;
+       
+>
+
+  <!ELEMENT methodname
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST methodparam
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.methodparam.attlist;
+       
+>
+
+  <!ELEMENT methodparam
+       ((modifier)*, type?, (((modifier)*, parameter, initializer?) | funcparams), (modifier)*)
+>
+
+  <!ATTLIST varname
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.varname.attlist;
+       
+>
+
+  <!ELEMENT varname
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST returnvalue
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.returnvalue.attlist;
+       
+>
+
+  <!ELEMENT returnvalue
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST type
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.type.attlist;
+       
+>
+
+  <!ELEMENT type
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST classname
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.classname.attlist;
+       
+>
+
+  <!ELEMENT classname
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST programlisting
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.programlisting.attlist;
+       
+>
+
+  <!ELEMENT programlisting
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | application | author | biblioref | citation | citebiblioid | citerefentry | citetitle | classname | co | code | command | computeroutput | constant | coref | database | date | editor | email | emphasis | envar | errorcode | errorname | errortext | errortype | exceptionname | filename | firstterm | footnote | footnoteref | foreignphrase | function | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | indexterm | info | initializer | inlineequation | inlinemediaobject | interfacename | jobtitle | keycap | keycode | keycombo | keysym | lineannotation | link | literal | markup | menuchoice | methodname | modifier | mousebutton | nonterminal | olink | ooclass | ooexception | oointerface | option | optional | org | orgname | package | parameter | person | personname | phrase | productname | productnumber | prompt | property | quote | remark | replaceable | returnvalue | shortcut | subscript | superscript | symbol | systemitem | tag | termdef | textobject | token | trademark | type | uri | userinput | varname | wordasword | xref)*
+>
+
+  <!ATTLIST caution
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.caution.attlist;
+       
+>
+
+  <!ELEMENT caution
+       (%db.admonition.contentmodel;)
+>
+
+  <!ATTLIST important
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.important.attlist;
+       
+>
+
+  <!ELEMENT important
+       (%db.admonition.contentmodel;)
+>
+
+  <!ATTLIST note
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.note.attlist;
+       
+>
+
+  <!ELEMENT note
+       (%db.admonition.contentmodel;)
+>
+
+  <!ATTLIST tip
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.tip.attlist;
+       
+>
+
+  <!ELEMENT tip
+       (%db.admonition.contentmodel;)
+>
+
+  <!ATTLIST warning
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.warning.attlist;
+       
+>
+
+  <!ELEMENT warning
+       (%db.admonition.contentmodel;)
+>
+
+  <!ATTLIST errorcode
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.errorcode.attlist;
+       
+>
+
+  <!ELEMENT errorcode
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST errorname
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.errorname.attlist;
+       
+>
+
+  <!ELEMENT errorname
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST errortext
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.errortext.attlist;
+       
+>
+
+  <!ELEMENT errortext
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST errortype
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.errortype.attlist;
+       
+>
+
+  <!ELEMENT errortype
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST systemitem
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.systemitem.attlist;
+       
+>
+
+  <!ELEMENT systemitem
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | co | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST option
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.option.attlist;
+       
+>
+
+  <!ELEMENT option
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST optional
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.optional.attlist;
+       
+>
+
+  <!ELEMENT optional
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST property
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.property.attlist;
+       
+>
+
+  <!ELEMENT property
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST topic
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.topic.attlist;
+       
+>
+
+  <!ELEMENT topic
+       (%db.topic.info;, (%db.navigation.components;)*, %db.toplevel.blocks.or.sections;, (%db.navigation.components;)*)
+>
+
+  <!ATTLIST assembly
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.assembly.attlist;
+       
+>
+
+  <!ELEMENT assembly
+       (%db.assembly.info;, (resources)+, (structure)*, (relationships)*, transforms?)
+>
+
+  <!ATTLIST resources
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.resources.attlist;
+       
+>
+
+  <!ELEMENT resources
+       ((%db.resources.info;)?, ((description)*, (resource)+))
+>
+
+  <!ATTLIST structure
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.structure.attlist;
+       
+>
+
+  <!ELEMENT structure
+       (((output)* | filterin? | filterout? | %db.structure.info;), override?, revhistory?, (%db.navigation.components;)*, (module)+, (%db.navigation.components;)*)
+>
+
+  <!ATTLIST output
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.output.attlist;
+       
+>
+
+  <!ELEMENT output
+       EMPTY
+>
+
+  <!ATTLIST override
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.override.attlist;
+       
+>
+
+  <!ELEMENT override
+       ((%db._title; | (%db.info.elements;)*))
+>
+
+  <!ATTLIST filterout
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.filterout.attlist;
+       
+>
+
+  <!ELEMENT filterout
+       EMPTY
+>
+
+  <!ATTLIST filterin
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.filterin.attlist;
+       
+>
+
+  <!ELEMENT filterin
+       EMPTY
+>
+
+  <!ATTLIST relationships
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.relationships.attlist;
+       
+>
+
+  <!ELEMENT relationships
+       (%db.relationships.info;, ((relationship | instance))+)
+>
+
+  <!ATTLIST relationship
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.relationship.attlist;
+       
+>
+
+  <!ELEMENT relationship
+       (association, (instance)+)
+>
+
+  <!ATTLIST association
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.association.attlist;
+       
+>
+
+  <!ELEMENT association
+       (#PCDATA)*
+>
+
+  <!ATTLIST instance
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.instance.attlist;
+       %db.linkend.attribute.REQ;
+       
+>
+
+  <!ELEMENT instance
+       EMPTY
+>
+
+  <!ATTLIST transforms
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.transforms.attlist;
+       
+>
+
+  <!ELEMENT transforms
+       (%db.transforms.info;, (transform)+)
+>
+
+  <!ATTLIST transform
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.transform.attlist;
+       
+>
+
+  <!ELEMENT transform
+       EMPTY
+>
+
+  <!ATTLIST description
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.description.attlist;
+       
+>
+
+  <!ELEMENT description
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST indexterm
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.indexterm.attlist;
+       
+>
+
+  <!ELEMENT indexterm
+       (%db.indexterm.contentmodel;)
+>
+
+  <!ATTLIST caption
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.caption.attlist;
+       %db.html.attrs;
+       
+>
+
+  <!ELEMENT caption
+       (#PCDATA | abbrev | accel | acronym | address | alt | anchor | annotation | application | author | bibliolist | biblioref | blockquote | bridgehead | calloutlist | caution | citation | citebiblioid | citerefentry | citetitle | classname | classsynopsis | cmdsynopsis | code | command | computeroutput | constant | constructorsynopsis | coref | database | date | destructorsynopsis | editor | email | emphasis | envar | epigraph | equation | errorcode | errorname | errortext | errortype | example | exceptionname | fieldsynopsis | figure | filename | firstterm | footnote | footnoteref | foreignphrase | formalpara | funcsynopsis | function | glosslist | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | important | indexterm | info | informalequation | informalexample | informalfigure | informaltable | initializer | inlineequation | inlinemediaobject | interfacename | itemizedlist | jobtitle | keycap | keycode | keycombo | keysym | link | literal | literallayout | markup | mediaobject | menuchoice | methodname | methodsynopsis | modifier | mousebutton | nonterminal | note | olink | ooclass | ooexception | oointerface | option | optional | orderedlist | org | orgname | package | para | parameter | person | personname | phrase | procedure | productname | productnumber | programlisting | programlistingco | prompt | property | qandaset | quote | remark | replaceable | returnvalue | revhistory | screen | screenco | screenshot | segmentedlist | shortcut | sidebar | simpara | simplelist | subscript | superscript | symbol | synopsis | systemitem | table | tag | task | termdef | tip | token | trademark | type | uri | userinput | variablelist | varname | warning | wordasword | xref)*
+>
+
+  <!ATTLIST group
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.group.attlist;
+       
+>
+
+  <!ELEMENT group
+       (((arg | group | option | synopfragmentref | replaceable | sbr | methodparam | paramdef))+)
+>
+
+  <!ATTLIST thead
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.thead.attlist;
+       
+>
+
+  <!ELEMENT thead
+       ((((colspec)*, (row)+) | (tr)+))
+>
+
+  <!ATTLIST tfoot
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.tfoot.attlist;
+       
+>
+
+  <!ELEMENT tfoot
+       ((((colspec)*, (row)+) | (tr)+))
+>
+
+  <!ATTLIST tbody
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.tbody.attlist;
+       
+>
+
+  <!ELEMENT tbody
+       (((row)+ | (tr)+))
+>
+
+  <!ATTLIST table
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.table.attlist;
+       
+>
+
+  <!ELEMENT table
+       (((%db.cals.table.info;, (alt? | (%db.indexing.inlines;)* | (textobject)*), ((mediaobject)+ | (tgroup)+), caption?) | %db.html.table.model;))
+>
+
+  <!ATTLIST informaltable
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.informaltable.attlist;
+       
+>
+
+  <!ELEMENT informaltable
+       (((%db.cals.informaltable.info;, (alt? | (%db.indexing.inlines;)* | (textobject)*), ((mediaobject)+ | (tgroup)+), caption?) | %db.html.informaltable.model;))
+>
+
+  <!ATTLIST resource
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.resource.attlist;
+       
+>
+
+  <!ELEMENT resource
+       (#PCDATA)*
+>
+
+  <!ATTLIST module
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.resource.module.attlist;
+       
+>
+
+  <!ELEMENT module
+       ((((output | filterin | filterout))*, ((%db.module.info;, override?, (%db.navigation.components;)*, (module)*, (%db.navigation.components;)*))))
+>
+
diff --git a/contrib/samples/assembly/docbook51/assembly.rnc b/contrib/samples/assembly/docbook51/assembly.rnc
new file mode 100755 (executable)
index 0000000..8dfdc8a
--- /dev/null
@@ -0,0 +1,8863 @@
+namespace a = "http://relaxng.org/ns/compatibility/annotations/1.0"
+namespace ctrl = "http://nwalsh.com/xmlns/schema-control/"
+default namespace db = "http://docbook.org/ns/docbook"
+namespace html = "http://www.w3.org/1999/xhtml"
+namespace mml = "http://www.w3.org/1998/Math/MathML"
+namespace rng = "http://relaxng.org/ns/structure/1.0"
+namespace s = "http://purl.oclc.org/dsdl/schematron"
+namespace svg = "http://www.w3.org/2000/svg"
+namespace xlink = "http://www.w3.org/1999/xlink"
+
+#  DocBook V5.0
+
+# See http://docbook.org/ns/docbook
+div {
+  db._any.attribute =
+    
+    ## Any attribute, including any attribute in any namespace.
+    attribute * { text }
+  db._any =
+    
+    ## Any element from almost any namespace
+    element * - (db:* | html:*) {
+      (db._any.attribute | text | db._any)*
+    }
+}
+db.arch.attribute =
+  
+  ## Designates the computer or chip architecture to which the element applies
+  attribute arch { text }
+db.audience.attribute =
+  
+  ## Designates the intended audience to which the element applies, for example, system administrators, programmers, or new users.
+  attribute audience { text }
+db.condition.attribute =
+  
+  ## provides a standard place for application-specific effectivity
+  attribute condition { text }
+db.conformance.attribute =
+  
+  ## Indicates standards conformance characteristics of the element
+  attribute conformance { text }
+db.os.attribute =
+  
+  ## Indicates the operating system to which the element is applicable
+  attribute os { text }
+db.revision.attribute =
+  
+  ## Indicates the editorial revision to which the element belongs
+  attribute revision { text }
+db.security.attribute =
+  
+  ## Indicates something about the security level associated with the element to which it applies
+  attribute security { text }
+db.userlevel.attribute =
+  
+  ## Indicates the level of user experience for which the element applies
+  attribute userlevel { text }
+db.vendor.attribute =
+  
+  ## Indicates the computer vendor to which the element applies.
+  attribute vendor { text }
+db.wordsize.attribute =
+  
+  ## Indicates the word size (width in bits) of the computer architecture to which the element applies
+  attribute wordsize { text }
+db.effectivity.attributes =
+  db.arch.attribute?
+  & db.audience.attribute?
+  & db.condition.attribute?
+  & db.conformance.attribute?
+  & db.os.attribute?
+  & db.revision.attribute?
+  & db.security.attribute?
+  & db.userlevel.attribute?
+  & db.vendor.attribute?
+  & db.wordsize.attribute?
+db.endterm.attribute =
+  
+  ## Points to the element whose content is to be used as the text of the link
+  attribute endterm { xsd:IDREF }
+db.linkend.attribute =
+  
+  ## Points to an internal link target by identifying the value of its xml:id attribute
+  attribute linkend { xsd:IDREF }
+db.linkends.attribute =
+  
+  ## Points to one or more internal link targets by identifying the value of their xml:id attributes
+  attribute linkends { xsd:IDREFS }
+db.xlink.href.attribute =
+  
+  ## Identifies a link target with a URI
+  attribute xlink:href { xsd:anyURI }
+db.xlink.type.attribute =
+  
+  ## Identifies the XLink link type
+  attribute xlink:type {
+    
+    ## An XLink simple link
+    "simple"
+  }
+db.xlink.role.attribute =
+  
+  ## Identifies the XLink role of the link
+  attribute xlink:role { xsd:anyURI }
+db.xlink.arcrole.attribute =
+  
+  ## Identifies the XLink arcrole of the link
+  attribute xlink:arcrole { xsd:anyURI }
+db.xlink.title.attribute =
+  
+  ## Identifies the XLink title of the link
+  attribute xlink:title { text }
+db.xlink.show.enumeration =
+  
+  ## An application traversing to the ending resource should load it in a new window, frame, pane, or other relevant presentation context.
+  "new"
+  | 
+    ## An application traversing to the ending resource should load the resource in the same window, frame, pane, or other relevant presentation context in which the starting resource was loaded.
+    "replace"
+  | 
+    ## An application traversing to the ending resource should load its presentation in place of the presentation of the starting resource.
+    "embed"
+  | 
+    ## The behavior of an application traversing to the ending resource is unconstrained by XLink. The application should look for other markup present in the link to determine the appropriate behavior.
+    "other"
+  | 
+    ## The behavior of an application traversing to the ending resource is unconstrained by this specification. No other markup is present to help the application determine the appropriate behavior.
+    "none"
+db.xlink.show.attribute =
+  
+  ## Identifies the XLink show behavior of the link
+  attribute xlink:show { db.xlink.show.enumeration }
+db.xlink.actuate.enumeration =
+  
+  ## An application should traverse to the ending resource immediately on loading the starting resource.
+  "onLoad"
+  | 
+    ## An application should traverse from the starting resource to the ending resource only on a post-loading event triggered for the purpose of traversal.
+    "onRequest"
+  | 
+    ## The behavior of an application traversing to the ending resource is unconstrained by this specification. The application should look for other markup present in the link to determine the appropriate behavior.
+    "other"
+  | 
+    ## The behavior of an application traversing to the ending resource is unconstrained by this specification. No other markup is present to help the application determine the appropriate behavior.
+    "none"
+db.xlink.actuate.attribute =
+  
+  ## Identifies the XLink actuate behavior of the link
+  attribute xlink:actuate { db.xlink.actuate.enumeration }
+db.href.attributes =
+  db.xlink.href.attribute
+  & db.xlink.type.attribute?
+  & db.xlink.role.attribute?
+  & db.xlink.arcrole.attribute?
+  & db.xlink.title.attribute?
+  & db.xlink.show.attribute?
+  & db.xlink.actuate.attribute?
+db.xml.id.attribute =
+  
+  ## Identifies the unique ID value of the element
+  attribute xml:id { xsd:ID }
+db.version.attribute =
+  
+  ## Specifies the DocBook version of the element and its descendants
+  attribute version { text }
+db.xml.lang.attribute =
+  
+  ## Specifies the natural language of the element and its descendants
+  attribute xml:lang { text }
+db.xml.base.attribute =
+  
+  ## Specifies the base URI of the element and its descendants
+  attribute xml:base { xsd:anyURI }
+db.remap.attribute =
+  
+  ## Provides the name or similar semantic identifier assigned to the content in some previous markup scheme
+  attribute remap { text }
+db.xreflabel.attribute =
+  
+  ## Provides the text that is to be generated for a cross reference to the element
+  attribute xreflabel { text }
+db.xrefstyle.attribute =
+  
+  ## Specifies a keyword or keywords identifying additional style information
+  attribute xrefstyle { text }
+db.revisionflag.enumeration =
+  
+  ## The element has been changed.
+  "changed"
+  | 
+    ## The element is new (has been added to the document).
+    "added"
+  | 
+    ## The element has been deleted.
+    "deleted"
+  | 
+    ## Explicitly turns off revision markup for this element.
+    "off"
+db.revisionflag.attribute =
+  
+  ## Identifies the revision status of the element
+  attribute revisionflag { db.revisionflag.enumeration }
+db.dir.enumeration =
+  
+  ## Left-to-right text
+  "ltr"
+  | 
+    ## Right-to-left text
+    "rtl"
+  | 
+    ## Left-to-right override
+    "lro"
+  | 
+    ## Right-to-left override
+    "rlo"
+db.dir.attribute =
+  
+  ## Identifies the direction of text in an element
+  attribute dir { db.dir.enumeration }
+db.common.base.attributes =
+  db.version.attribute?
+  & db.xml.lang.attribute?
+  & db.xml.base.attribute?
+  & db.remap.attribute?
+  & db.xreflabel.attribute?
+  & db.revisionflag.attribute?
+  & db.dir.attribute?
+  & db.effectivity.attributes
+db.common.attributes =
+  db.xml.id.attribute?
+  & db.common.base.attributes
+  & db.annotations.attribute?
+db.common.idreq.attributes =
+  db.xml.id.attribute
+  & db.common.base.attributes
+  & db.annotations.attribute?
+db.common.linking.attributes =
+  (db.linkend.attribute | db.href.attributes)?
+db.common.req.linking.attributes =
+  db.linkend.attribute | db.href.attributes
+db.common.data.attributes =
+  
+  ## Specifies the format of the data
+  attribute format { text }?,
+  (
+   ## Indentifies the location of the data by URI
+   attribute fileref { xsd:anyURI }
+   | 
+     ## Identifies the location of the data by external identifier (entity name)
+     attribute entityref { xsd:ENTITY })
+db.verbatim.continuation.enumeration =
+  
+  ## Line numbering continues from the immediately preceding element with the same name.
+  "continues"
+  | 
+    ## Line numbering restarts (begins at 1, usually).
+    "restarts"
+db.verbatim.continuation.attribute =
+  
+  ## Determines whether line numbering continues from the previous element or restarts.
+  attribute continuation { db.verbatim.continuation.enumeration }
+db.verbatim.linenumbering.enumeration =
+  
+  ## Lines are numbered.
+  "numbered"
+  | 
+    ## Lines are not numbered.
+    "unnumbered"
+db.verbatim.linenumbering.attribute =
+  
+  ## Determines whether lines are numbered.
+  attribute linenumbering { db.verbatim.linenumbering.enumeration }
+db.verbatim.startinglinenumber.attribute =
+  
+  ## Specifies the initial line number.
+  attribute startinglinenumber { xsd:integer }
+db.verbatim.language.attribute =
+  
+  ## Identifies the language (i.e. programming language) of the verbatim content.
+  attribute language { text }
+db.verbatim.xml.space.attribute =
+  
+  ## Can be used to indicate explicitly that whitespace in the verbatim environment is preserved. Whitespace must always be preserved in verbatim environments whether this attribute is specified or not.
+  attribute xml:space {
+    
+    ## Whitespace must be preserved.
+    "preserve"
+  }
+db.verbatim.common.attributes =
+  db.verbatim.continuation.attribute?
+  & db.verbatim.linenumbering.attribute?
+  & db.verbatim.startinglinenumber.attribute?
+  & db.verbatim.xml.space.attribute?
+db.verbatim.attributes =
+  db.verbatim.common.attributes & db.verbatim.language.attribute?
+db.label.attribute =
+  
+  ## Specifies an identifying string for presentation purposes
+  attribute label { text }
+db.width.characters.attribute =
+  
+  ## Specifies the width (in characters) of the element
+  attribute width { xsd:nonNegativeInteger }
+db.spacing.enumeration =
+  
+  ## The spacing should be "compact".
+  "compact"
+  | 
+    ## The spacing should be "normal".
+    "normal"
+db.spacing.attribute =
+  
+  ## Specifies (a hint about) the spacing of the content
+  attribute spacing { db.spacing.enumeration }
+db.pgwide.enumeration =
+  
+  ## The element should be rendered in the current text flow (with the flow column width).
+  "0"
+  | 
+    ## The element should be rendered across the full text page.
+    "1"
+db.pgwide.attribute =
+  
+  ## Indicates if the element is rendered across the column or the page
+  attribute pgwide { db.pgwide.enumeration }
+db.language.attribute =
+  
+  ## Identifies the language (i.e. programming language) of the content.
+  attribute language { text }
+db.performance.enumeration =
+  
+  ## The content describes an optional step or steps.
+  "optional"
+  | 
+    ## The content describes a required step or steps.
+    "required"
+db.performance.attribute =
+  
+  ## Specifies if the content is required or optional.
+  attribute performance { db.performance.enumeration }
+db.floatstyle.attribute =
+  
+  ## Specifies style information to be used when rendering the float
+  attribute floatstyle { text }
+db.width.attribute =
+  
+  ## Specifies the width of the element
+  attribute width { text }
+db.depth.attribute =
+  
+  ## Specifies the depth of the element
+  attribute depth { text }
+db.contentwidth.attribute =
+  
+  ## Specifies the width of the content rectangle
+  attribute contentwidth { text }
+db.contentdepth.attribute =
+  
+  ## Specifies the depth of the content rectangle
+  attribute contentdepth { text }
+db.scalefit.enumeration =
+  
+  ## False (do not scale-to-fit; anamorphic scaling may occur)
+  "0"
+  | 
+    ## True (scale-to-fit; anamorphic scaling is forbidden)
+    "1"
+db.scale.attribute =
+  
+  ## Specifies the scaling factor
+  attribute scale { xsd:positiveInteger }
+db.halign.enumeration =
+  
+  ## Centered horizontally
+  "center"
+  | 
+    ## Aligned horizontally on the specified character
+    "char"
+  | 
+    ## Fully justified (left and right margins or edges)
+    "justify"
+  | 
+    ## Left aligned
+    "left"
+  | 
+    ## Right aligned
+    "right"
+db.valign.enumeration =
+  
+  ## Aligned on the bottom of the region
+  "bottom"
+  | 
+    ## Centered vertically
+    "middle"
+  | 
+    ## Aligned on the top of the region
+    "top"
+db.biblio.class.enumeration =
+  
+  ## A digital object identifier.
+  "doi"
+  | 
+    ## An international standard book number.
+    "isbn"
+  | 
+    ## An international standard technical report number (ISO 10444).
+    "isrn"
+  | 
+    ## An international standard serial number.
+    "issn"
+  | 
+    ## An international standard text code.
+    "istc"
+  | 
+    ## A Library of Congress reference number.
+    "libraryofcongress"
+  | 
+    ## A publication number (an internal number or possibly organizational standard).
+    "pubsnumber"
+  | 
+    ## A Uniform Resource Identifier
+    "uri"
+db.biblio.class-enum.attribute =
+  
+  ## Identifies the kind of bibliographic identifier
+  attribute class { db.biblio.class.enumeration }?
+db.biblio.class-other.attribute =
+  
+  ## Identifies the nature of the non-standard bibliographic identifier
+  attribute otherclass { xsd:NMTOKEN }
+db.biblio.class-other.attributes =
+  
+  ## Identifies the kind of bibliographic identifier
+  attribute class {
+    
+    ## Indicates that the identifier is some 'other' kind.
+    "other"
+  }
+  & db.biblio.class-other.attribute
+db.biblio.class.attribute =
+  db.biblio.class-enum.attribute | db.biblio.class-other.attributes
+db.ubiq.inlines =
+  (db.inlinemediaobject
+   | db.remark
+   | db.link.inlines
+   | db.alt
+   | db.trademark
+   | # below, effectively the publishing inlines (as of 5.0)
+     db.abbrev
+   | db.acronym
+   | db.date
+   | db._emphasis
+   | db.footnote
+   | db.footnoteref
+   | db._foreignphrase
+   | db._phrase
+   | db._quote
+   | db.subscript
+   | db.superscript
+   | db.wordasword)
+  | db.annotation
+  | (db._firstterm | db._glossterm)
+  | db.indexterm
+  | db.coref
+db._text = (text | db.ubiq.inlines | db._phrase | db.replaceable)*
+db._title = db.title? & db.titleabbrev? & db.subtitle?
+db._title.req = db.title & db.titleabbrev? & db.subtitle?
+db._title.only = db.title? & db.titleabbrev?
+db._title.onlyreq = db.title & db.titleabbrev?
+db._info = (db._title, db.titleforbidden.info?) | db.info?
+db._info.title.req =
+  (db._title.req, db.titleforbidden.info?) | db.titlereq.info
+db._info.title.only =
+  (db._title.only, db.titleforbidden.info?) | db.titleonly.info
+db._info.title.onlyreq =
+  (db._title.onlyreq, db.titleforbidden.info?) | db.titleonlyreq.info
+db._info.title.forbidden = db.titleforbidden.info?
+db.all.inlines =
+  text | db.ubiq.inlines | db.general.inlines | db.domain.inlines
+db.general.inlines =
+  db.publishing.inlines
+  | db.product.inlines
+  | db.bibliography.inlines
+  | db.graphic.inlines
+  | db.indexing.inlines
+  | db.link.inlines
+db.domain.inlines =
+  db.technical.inlines
+  | db.math.inlines
+  | db.markup.inlines
+  | db.gui.inlines
+  | db.keyboard.inlines
+  | db.os.inlines
+  | db.programming.inlines
+  | db.error.inlines
+db.technical.inlines =
+  (db.replaceable | db.package | db.parameter)
+  | db.termdef
+  | db.nonterminal
+  | (db.systemitem | db.option | db.optional | db.property)
+db.product.inlines =
+  db.trademark
+  | (db.productnumber
+     | db.productname
+     | db.database
+     | db.application
+     | db.hardware)
+db.bibliography.inlines =
+  db.citation
+  | db.citerefentry
+  | db.citetitle
+  | db.citebiblioid
+  | db.author
+  | db.person
+  | db.personname
+  | db.org
+  | db.orgname
+  | db.editor
+  | db.jobtitle
+db.publishing.inlines =
+  (db.abbrev
+   | db.acronym
+   | db.date
+   | db.emphasis
+   | db.footnote
+   | db.footnoteref
+   | db.foreignphrase
+   | db.phrase
+   | db.quote
+   | db.subscript
+   | db.superscript
+   | db.wordasword)
+  | db.glossary.inlines
+  | db.coref
+db.graphic.inlines = db.inlinemediaobject
+db.indexing.inlines = notAllowed | db.indexterm
+db.link.inlines =
+  (db.xref | db.link | db.olink | db.anchor) | db.biblioref
+db.nopara.blocks =
+  (db.list.blocks
+   | db.formal.blocks
+   | db.informal.blocks
+   | db.publishing.blocks
+   | db.graphic.blocks
+   | db.technical.blocks
+   | db.verbatim.blocks
+   | db.bridgehead
+   | db.remark
+   | db.revhistory)
+  | db.indexterm
+  | db.synopsis.blocks
+  | db.admonition.blocks
+db.para.blocks = db.anchor | db.para | db.formalpara | db.simpara
+db.all.blocks = (db.nopara.blocks | db.para.blocks) | db.annotation
+db.formal.blocks = (db.example | db.figure | db.table) | db.equation
+db.informal.blocks =
+  (db.informalexample | db.informalfigure | db.informaltable)
+  | db.informalequation
+db.publishing.blocks =
+  db.sidebar | db.blockquote | db.address | db.epigraph
+db.graphic.blocks = db.mediaobject | db.screenshot
+db.technical.blocks =
+  db.procedure
+  | db.task
+  | (db.productionset | db.constraintdef)
+  | db.msgset
+db.list.blocks =
+  (db.itemizedlist
+   | db.orderedlist
+   | db.procedure
+   | db.simplelist
+   | db.variablelist
+   | db.segmentedlist)
+  | db.glosslist
+  | db.bibliolist
+  | db.calloutlist
+  | db.qandaset
+db.verbatim.blocks =
+  (db.screen | db.literallayout)
+  | (db.programlistingco | db.screenco)
+  | (db.programlisting | db.synopsis)
+db.info.extension = db._any
+db.info.elements =
+  (db.abstract
+   | db.address
+   | db.artpagenums
+   | db.author
+   | db.authorgroup
+   | db.authorinitials
+   | db.bibliocoverage
+   | db.biblioid
+   | db.bibliosource
+   | db.collab
+   | db.confgroup
+   | db.contractsponsor
+   | db.contractnum
+   | db.copyright
+   | db.cover
+   | db.date
+   | db.edition
+   | db.editor
+   | db.issuenum
+   | db.keywordset
+   | db.legalnotice
+   | db.mediaobject
+   | db.org
+   | db.orgname
+   | db.othercredit
+   | db.pagenums
+   | db.printhistory
+   | db.pubdate
+   | db.publisher
+   | db.publishername
+   | db.releaseinfo
+   | db.revhistory
+   | db.seriesvolnums
+   | db.subjectset
+   | db.volumenum
+   | db.info.extension)
+  | db.annotation
+  | db.extendedlink
+  | (db.bibliomisc | db.bibliomset | db.bibliorelation | db.biblioset)
+  | db.itermset
+  | (db.productname | db.productnumber)
+db.bibliographic.elements =
+  db.info.elements
+  | db.publishing.inlines
+  | db.citerefentry
+  | db.citetitle
+  | db.citebiblioid
+  | db.person
+  | db.personblurb
+  | db.personname
+  | db.subtitle
+  | db.title
+  | db.titleabbrev
+div {
+  db.title.role.attribute = attribute role { text }
+  db.title.attlist =
+    db.title.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.title =
+    
+    ## The text of the title of a section of a document or of a formal block-level element
+    element title { db.title.attlist, db.all.inlines* }
+}
+div {
+  db.titleabbrev.role.attribute = attribute role { text }
+  db.titleabbrev.attlist =
+    db.titleabbrev.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.titleabbrev =
+    
+    ## The abbreviation of a title
+    element titleabbrev { db.titleabbrev.attlist, db.all.inlines* }
+}
+div {
+  db.subtitle.role.attribute = attribute role { text }
+  db.subtitle.attlist =
+    db.subtitle.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.subtitle =
+    
+    ## The subtitle of a document
+    element subtitle { db.subtitle.attlist, db.all.inlines* }
+}
+div {
+  db.info.role.attribute = attribute role { text }
+  db.info.attlist = db.info.role.attribute? & db.common.attributes
+  db.info =
+    
+    ## A wrapper for information about a component or other block
+    element info { db.info.attlist, (db._title & db.info.elements*) }
+}
+div {
+  db.titlereq.info.role.attribute = attribute role { text }
+  db.titlereq.info.attlist =
+    db.titlereq.info.role.attribute? & db.common.attributes
+  db.titlereq.info =
+    
+    ## A wrapper for information about a component or other block with a required title
+    element info {
+      db.titlereq.info.attlist, (db._title.req & db.info.elements*)
+    }
+}
+div {
+  db.titleonly.info.role.attribute = attribute role { text }
+  db.titleonly.info.attlist =
+    db.titleonly.info.role.attribute? & db.common.attributes
+  db.titleonly.info =
+    
+    ## A wrapper for information about a component or other block with only a title
+    element info {
+      db.titleonly.info.attlist, (db._title.only & db.info.elements*)
+    }
+}
+div {
+  db.titleonlyreq.info.role.attribute = attribute role { text }
+  db.titleonlyreq.info.attlist =
+    db.titleonlyreq.info.role.attribute? & db.common.attributes
+  db.titleonlyreq.info =
+    
+    ## A wrapper for information about a component or other block with only a required title
+    element info {
+      db.titleonlyreq.info.attlist,
+      (db._title.onlyreq & db.info.elements*)
+    }
+}
+div {
+  db.titleforbidden.info.role.attribute = attribute role { text }
+  db.titleforbidden.info.attlist =
+    db.titleforbidden.info.role.attribute? & db.common.attributes
+  db.titleforbidden.info =
+    
+    ## A wrapper for information about a component or other block without a title
+    element info { db.titleforbidden.info.attlist, db.info.elements* }
+}
+div {
+  db.subjectset.role.attribute = attribute role { text }
+  db.subjectset.scheme.attribute =
+    
+    ## Identifies the controlled vocabulary used by this set's terms
+    attribute scheme { xsd:NMTOKEN }
+  db.subjectset.attlist =
+    db.subjectset.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.subjectset.scheme.attribute?
+  db.subjectset =
+    
+    ## A set of terms describing the subject matter of a document
+    element subjectset { db.subjectset.attlist, db.subject+ }
+}
+div {
+  db.subject.role.attribute = attribute role { text }
+  db.subject.weight.attribute =
+    
+    ## Specifies a ranking for this subject relative to other subjects in the same set
+    attribute weight { text }
+  db.subject.attlist =
+    db.subject.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.subject.weight.attribute?
+  db.subject =
+    
+    ## One of a group of terms describing the subject matter of a document
+    element subject { db.subject.attlist, db.subjectterm+ }
+}
+div {
+  db.subjectterm.role.attribute = attribute role { text }
+  db.subjectterm.attlist =
+    db.subjectterm.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.subjectterm =
+    
+    ## A term in a group of terms describing the subject matter of a document
+    element subjectterm { db.subjectterm.attlist, text }
+}
+div {
+  db.keywordset.role.attribute = attribute role { text }
+  db.keywordset.attlist =
+    db.keywordset.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.keywordset =
+    
+    ## A set of keywords describing the content of a document
+    element keywordset { db.keywordset.attlist, db.keyword+ }
+}
+div {
+  db.keyword.role.attribute = attribute role { text }
+  db.keyword.attlist =
+    db.keyword.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.keyword =
+    
+    ## One of a set of keywords describing the content of a document
+    element keyword { db.keyword.attlist, text }
+}
+db.table.choice = notAllowed | db.cals.table | db.html.table
+db.informaltable.choice =
+  notAllowed | db.cals.informaltable | db.html.informaltable
+db.table = db.table.choice
+db.informaltable = db.informaltable.choice
+div {
+  db.procedure.role.attribute = attribute role { text }
+  db.procedure.attlist =
+    db.procedure.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.procedure.info = db._info.title.only
+  db.procedure =
+    
+    ## A list of operations to be performed in a well-defined sequence
+    element procedure {
+      db.procedure.attlist, db.procedure.info, db.all.blocks*, db.step+
+    }
+}
+div {
+  db.step.role.attribute = attribute role { text }
+  db.step.attlist =
+    db.step.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.performance.attribute?
+  db.step.info = db._info.title.only
+  # 
+  # This content model is blocks*, step|stepalternatives, blocks* but
+  # expressed this way it avoids UPA issues in XSD and DTD versions
+  db.step =
+    
+    ## A unit of action in a procedure
+    element step {
+      db.step.attlist,
+      db.step.info,
+      ((db.all.blocks+,
+        ((db.substeps | db.stepalternatives), db.all.blocks*)?)
+       | ((db.substeps | db.stepalternatives), db.all.blocks*))
+    }
+}
+div {
+  db.stepalternatives.role.attribute = attribute role { text }
+  db.stepalternatives.attlist =
+    db.stepalternatives.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.performance.attribute?
+  db.stepalternatives.info = db._info.title.forbidden
+  db.stepalternatives =
+    
+    ## Alternative steps in a procedure
+    element stepalternatives {
+      db.stepalternatives.attlist, db.stepalternatives.info, db.step+
+    }
+}
+div {
+  db.substeps.role.attribute = attribute role { text }
+  db.substeps.attlist =
+    db.substeps.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.performance.attribute?
+  db.substeps =
+    
+    ## A wrapper for steps that occur within steps in a procedure
+    element substeps { db.substeps.attlist, db.step+ }
+}
+div {
+  db.sidebar.floatstyle.attribute = db.floatstyle.attribute
+  db.sidebar.role.attribute = attribute role { text }
+  db.sidebar.attlist =
+    db.sidebar.role.attribute?
+    & db.sidebar.floatstyle.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.sidebar.info = db._info
+  db.sidebar =
+    
+    ## A portion of a document that is isolated from the main narrative flow
+    element sidebar {
+      db.sidebar.attlist, db.sidebar.info, db.all.blocks+
+    }
+}
+div {
+  db.abstract.role.attribute = attribute role { text }
+  db.abstract.attlist =
+    db.abstract.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.abstract.info = db._info.title.only
+  db.abstract =
+    
+    ## A summary
+    element abstract {
+      db.abstract.attlist, db.abstract.info, db.para.blocks+
+    }
+}
+div {
+  db.personblurb.role.attribute = attribute role { text }
+  db.personblurb.attlist =
+    db.personblurb.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.personblurb.info = db._info.title.only
+  db.personblurb =
+    
+    ## A short description or note about a person
+    element personblurb {
+      db.personblurb.attlist, db.personblurb.info, db.para.blocks+
+    }
+}
+div {
+  db.blockquote.role.attribute = attribute role { text }
+  db.blockquote.attlist =
+    db.blockquote.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.blockquote.info = db._info.title.only
+  db.blockquote =
+    
+    ## A quotation set off from the main text
+    element blockquote {
+      db.blockquote.attlist,
+      db.blockquote.info,
+      db.attribution?,
+      db.all.blocks+
+    }
+}
+div {
+  db.attribution.role.attribute = attribute role { text }
+  db.attribution.attlist =
+    db.attribution.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.attribution =
+    
+    ## The source of a block quote or epigraph
+    element attribution {
+      db.attribution.attlist,
+      (db._text
+       | db.person
+       | db.personname
+       | db.citetitle
+       | db.citation)*
+    }
+}
+div {
+  db.bridgehead.renderas.enumeration =
+    
+    ## Render as a first-level section
+    "sect1"
+    | 
+      ## Render as a second-level section
+      "sect2"
+    | 
+      ## Render as a third-level section
+      "sect3"
+    | 
+      ## Render as a fourth-level section
+      "sect4"
+    | 
+      ## Render as a fifth-level section
+      "sect5"
+  db.bridgehead.renderas-enum.attribute =
+    
+    ## Indicates how the bridge head should be rendered
+    attribute renderas { db.bridgehead.renderas.enumeration }?
+  db.bridgehead.renderas-other.attribute =
+    
+    ## Identifies the nature of the non-standard rendering
+    attribute otherrenderas { xsd:NMTOKEN }
+  db.bridgehead.renderas-other.attributes =
+    
+    ## Indicates how the bridge head should be rendered
+    attribute renderas {
+      
+      ## Identifies a non-standard rendering
+      "other"
+    }
+    & db.bridgehead.renderas-other.attribute
+  db.bridgehead.renderas.attribute =
+    db.bridgehead.renderas-enum.attribute
+    | db.bridgehead.renderas-other.attributes
+  db.bridgehead.role.attribute = attribute role { text }
+  db.bridgehead.attlist =
+    db.bridgehead.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.bridgehead.renderas.attribute?
+  db.bridgehead =
+    
+    ## A free-floating heading
+    element bridgehead { db.bridgehead.attlist, db.all.inlines* }
+}
+div {
+  db.remark.role.attribute = attribute role { text }
+  db.remark.attlist =
+    db.remark.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.remark =
+    
+    ## A remark (or comment) intended for presentation in a draft manuscript
+    element remark { db.remark.attlist, db.all.inlines* }
+}
+div {
+  db.epigraph.role.attribute = attribute role { text }
+  db.epigraph.attlist =
+    db.epigraph.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.epigraph.info = db._info.title.forbidden
+  db.epigraph =
+    
+    ## A short inscription at the beginning of a document or component
+    element epigraph {
+      db.epigraph.attlist,
+      db.epigraph.info,
+      db.attribution?,
+      (db.para.blocks | db.literallayout)+
+    }
+}
+div {
+  db.footnote.role.attribute = attribute role { text }
+  db.footnote.label.attribute =
+    
+    ## Identifies the desired footnote mark
+    attribute label { xsd:NMTOKEN }
+  db.footnote.attlist =
+    db.footnote.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.footnote.label.attribute?
+  db.footnote =
+    
+    ## A footnote
+    element footnote { db.footnote.attlist, db.all.blocks+ }
+}
+div {
+  db.formalpara.role.attribute = attribute role { text }
+  db.formalpara.attlist =
+    db.formalpara.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.formalpara.info = db._info.title.onlyreq
+  db.formalpara =
+    
+    ## A paragraph with a title
+    element formalpara {
+      db.formalpara.attlist,
+      db.formalpara.info,
+      db.indexing.inlines*,
+      db.para
+    }
+}
+div {
+  db.para.role.attribute = attribute role { text }
+  db.para.attlist =
+    db.para.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.para.info = db._info.title.forbidden
+  db.para =
+    
+    ## A paragraph
+    element para {
+      db.para.attlist,
+      db.para.info,
+      (db.all.inlines | db.nopara.blocks)*
+    }
+}
+div {
+  db.simpara.role.attribute = attribute role { text }
+  db.simpara.attlist =
+    db.simpara.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.simpara.info = db._info.title.forbidden
+  db.simpara =
+    
+    ## A paragraph that contains only text and inline markup, no block elements
+    element simpara {
+      db.simpara.attlist, db.simpara.info, db.all.inlines*
+    }
+}
+div {
+  db.itemizedlist.role.attribute = attribute role { text }
+  db.itemizedlist.mark.attribute =
+    
+    ## Identifies the type of mark to be used on items in this list
+    attribute mark { xsd:NMTOKEN }
+  db.itemizedlist.attlist =
+    db.itemizedlist.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.spacing.attribute?
+    & db.itemizedlist.mark.attribute?
+  db.itemizedlist.info = db._info.title.only
+  db.itemizedlist =
+    
+    ## A list in which each entry is marked with a bullet or other dingbat
+    element itemizedlist {
+      db.itemizedlist.attlist,
+      db.itemizedlist.info,
+      db.all.blocks*,
+      db.listitem+
+    }
+}
+div {
+  db.orderedlist.role.attribute = attribute role { text }
+  db.orderedlist.continuation.enumeration =
+    
+    ## Specifies that numbering should begin where the preceding list left off
+    "continues"
+    | 
+      ## Specifies that numbering should begin again at 1
+      "restarts"
+  db.orderedlist.continuation.attribute =
+    
+    ## Indicates how list numbering should begin relative to the immediately preceding list
+    attribute continuation { db.orderedlist.continuation.enumeration }
+  db.orderedlist.startingnumber.attribute =
+    
+    ## Specifies the initial line number.
+    attribute startingnumber { xsd:integer }
+  db.orderedlist.inheritnum.enumeration =
+    
+    ## Specifies that numbering should ignore list nesting
+    "ignore"
+    | 
+      ## Specifies that numbering should inherit from outer-level lists
+      "inherit"
+  db.orderedlist.inheritnum.attribute =
+    
+    ## Indicates whether or not item numbering should be influenced by list nesting
+    attribute inheritnum { db.orderedlist.inheritnum.enumeration }
+  db.orderedlist.numeration.enumeration =
+    
+    ## Specifies Arabic numeration (1, 2, 3, â€¦)
+    "arabic"
+    | 
+      ## Specifies upper-case alphabetic numeration (A, B, C, â€¦)
+      "upperalpha"
+    | 
+      ## Specifies lower-case alphabetic numeration (a, b, c, â€¦)
+      "loweralpha"
+    | 
+      ## Specifies upper-case Roman numeration (I, II, III, â€¦)
+      "upperroman"
+    | 
+      ## Specifies lower-case Roman numeration (i, ii, iii â€¦)
+      "lowerroman"
+  db.orderedlist.numeration.attribute =
+    
+    ## Indicates the desired numeration
+    attribute numeration { db.orderedlist.numeration.enumeration }
+  db.orderedlist.attlist =
+    db.orderedlist.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.spacing.attribute?
+    & (db.orderedlist.continuation.attribute
+       | db.orderedlist.startingnumber.attribute)?
+    & db.orderedlist.inheritnum.attribute?
+    & db.orderedlist.numeration.attribute?
+  db.orderedlist.info = db._info.title.only
+  db.orderedlist =
+    
+    ## A list in which each entry is marked with a sequentially incremented label
+    element orderedlist {
+      db.orderedlist.attlist,
+      db.orderedlist.info,
+      db.all.blocks*,
+      db.listitem+
+    }
+}
+div {
+  db.listitem.role.attribute = attribute role { text }
+  db.listitem.override.attribute =
+    
+    ## Specifies the keyword for the type of mark that should be used on this
+    ##  item, instead of the mark that would be used by default
+    attribute override { xsd:NMTOKEN }
+  db.listitem.attlist =
+    db.listitem.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.listitem.override.attribute?
+  db.listitem =
+    
+    ## A wrapper for the elements of a list item
+    element listitem { db.listitem.attlist, db.all.blocks+ }
+}
+div {
+  db.segmentedlist.role.attribute = attribute role { text }
+  db.segmentedlist.attlist =
+    db.segmentedlist.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.segmentedlist.info = db._info.title.only
+  db.segmentedlist =
+    
+    ## A segmented list, a list of sets of elements
+    element segmentedlist {
+      db.segmentedlist.attlist,
+      db.segmentedlist.info,
+      db.segtitle+,
+      db.seglistitem+
+    }
+}
+div {
+  db.segtitle.role.attribute = attribute role { text }
+  db.segtitle.attlist =
+    db.segtitle.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.segtitle =
+    
+    ## The title of an element of a list item in a segmented list
+    element segtitle { db.segtitle.attlist, db.all.inlines* }
+}
+div {
+  db.seglistitem.role.attribute = attribute role { text }
+  db.seglistitem.attlist =
+    db.seglistitem.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.seglistitem =
+    
+    ## A list item in a segmented list
+    element seglistitem { db.seglistitem.attlist, db.seg+ }
+}
+div {
+  db.seg.role.attribute = attribute role { text }
+  db.seg.attlist =
+    db.seg.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.seg =
+    
+    ## An element of a list item in a segmented list
+    element seg { db.seg.attlist, db.all.inlines* }
+}
+div {
+  db.simplelist.role.attribute = attribute role { text }
+  db.simplelist.type.enumeration =
+    
+    ## A tabular presentation in row-major order.
+    "horiz"
+    | 
+      ## A tabular presentation in column-major order.
+      "vert"
+    | 
+      ## An inline presentation, usually a comma-delimited list.
+      "inline"
+  db.simplelist.type.attribute =
+    
+    ## Specifies the type of list presentation.
+    [ a:defaultValue = "vert" ]
+    attribute type { db.simplelist.type.enumeration }
+  db.simplelist.columns.attribute =
+    
+    ## Specifies the number of columns for horizontal or vertical presentation
+    attribute columns { xsd:integer }
+  db.simplelist.attlist =
+    db.simplelist.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.simplelist.type.attribute?
+    & db.simplelist.columns.attribute?
+  db.simplelist =
+    
+    ## An undecorated list of single words or short phrases
+    element simplelist { db.simplelist.attlist, db.member+ }
+}
+div {
+  db.member.role.attribute = attribute role { text }
+  db.member.attlist =
+    db.member.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.member =
+    
+    ## An element of a simple list
+    element member { db.member.attlist, db.all.inlines* }
+}
+div {
+  db.variablelist.role.attribute = attribute role { text }
+  db.variablelist.termlength.attribute =
+    
+    ## Indicates a length beyond which the presentation system may consider a term too long and select an alternate presentation for that term, item, or list
+    attribute termlength { text }
+  db.variablelist.attlist =
+    db.variablelist.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.spacing.attribute?
+    & db.variablelist.termlength.attribute?
+  db.variablelist.info = db._info.title.only
+  db.variablelist =
+    
+    ## A list in which each entry is composed of a set of one or more terms and an associated description
+    element variablelist {
+      db.variablelist.attlist,
+      db.variablelist.info,
+      db.all.blocks*,
+      db.varlistentry+
+    }
+}
+div {
+  db.varlistentry.role.attribute = attribute role { text }
+  db.varlistentry.attlist =
+    db.varlistentry.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.varlistentry =
+    
+    ## A wrapper for a set of terms and the associated description in a variable list
+    element varlistentry {
+      db.varlistentry.attlist, db.term+, db.listitem
+    }
+}
+div {
+  db.term.role.attribute = attribute role { text }
+  db.term.attlist =
+    db.term.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.term =
+    
+    ## The word or phrase being defined or described in a variable list
+    element term { db.term.attlist, db.all.inlines* }
+}
+div {
+  db.example.role.attribute = attribute role { text }
+  db.example.label.attribute = db.label.attribute
+  db.example.width.attribute = db.width.characters.attribute
+  db.example.pgwide.attribute = db.pgwide.attribute
+  db.example.floatstyle.attribute = db.floatstyle.attribute
+  db.example.attlist =
+    db.example.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.example.label.attribute?
+    & db.example.floatstyle.attribute?
+    & (db.example.width.attribute | db.example.pgwide.attribute)?
+  db.example.info = db._info.title.onlyreq
+  db.example =
+    
+    ## A formal example, with a title
+    element example {
+      db.example.attlist, db.example.info, db.all.blocks+, db.caption?
+    }
+}
+div {
+  db.informalexample.role.attribute = attribute role { text }
+  db.informalexample.width.attribute = db.width.characters.attribute
+  db.informalexample.floatstyle.attribute = db.floatstyle.attribute
+  db.informalexample.attlist =
+    db.informalexample.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.informalexample.floatstyle.attribute?
+    & db.informalexample.width.attribute?
+  db.informalexample.info = db._info.title.forbidden
+  db.informalexample =
+    
+    ## A displayed example without a title
+    element informalexample {
+      db.informalexample.attlist,
+      db.informalexample.info,
+      db.all.blocks+,
+      db.caption?
+    }
+}
+db.verbatim.inlines = (db.all.inlines | db.lineannotation) | db.co
+db.verbatim.contentmodel =
+  db._info.title.forbidden, (db.textobject | db.verbatim.inlines*)
+div {
+  db.literallayout.role.attribute = attribute role { text }
+  db.literallayout.class.enumeration =
+    
+    ## The literal layout should be formatted with a monospaced font
+    "monospaced"
+    | 
+      ## The literal layout should be formatted with the current font
+      "normal"
+  db.literallayout.class.attribute =
+    
+    ## Specifies the class of literal layout
+    attribute class { db.literallayout.class.enumeration }
+  db.literallayout.attlist =
+    db.literallayout.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.verbatim.attributes
+    & db.literallayout.class.attribute?
+  db.literallayout =
+    
+    ## A block of text in which line breaks and white space are to be reproduced faithfully
+    element literallayout {
+      db.literallayout.attlist, db.verbatim.contentmodel
+    }
+}
+div {
+  db.screen.role.attribute = attribute role { text }
+  db.screen.width.attribute = db.width.characters.attribute
+  db.screen.attlist =
+    db.screen.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.verbatim.attributes
+    & db.screen.width.attribute?
+  db.screen =
+    
+    ## Text that a user sees or might see on a computer screen
+    element screen { db.screen.attlist, db.verbatim.contentmodel }
+}
+div {
+  db.screenshot.role.attribute = attribute role { text }
+  db.screenshot.attlist =
+    db.screenshot.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.screenshot.info = db._info
+  db.screenshot =
+    
+    ## A representation of what the user sees or might see on a computer screen
+    element screenshot {
+      db.screenshot.attlist, db.screenshot.info, db.mediaobject
+    }
+}
+div {
+  db.figure.role.attribute = attribute role { text }
+  db.figure.label.attribute = db.label.attribute
+  db.figure.pgwide.attribute = db.pgwide.attribute
+  db.figure.floatstyle.attribute = db.floatstyle.attribute
+  db.figure.attlist =
+    db.figure.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.figure.label.attribute?
+    & db.figure.pgwide.attribute?
+    & db.figure.floatstyle.attribute?
+  db.figure.info = db._info.title.onlyreq
+  db.figure =
+    
+    ## A formal figure, generally an illustration, with a title
+    element figure {
+      db.figure.attlist, db.figure.info, db.all.blocks+, db.caption?
+    }
+}
+div {
+  db.informalfigure.role.attribute = attribute role { text }
+  db.informalfigure.label.attribute = db.label.attribute
+  db.informalfigure.pgwide.attribute = db.pgwide.attribute
+  db.informalfigure.floatstyle.attribute = db.floatstyle.attribute
+  db.informalfigure.attlist =
+    db.informalfigure.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.informalfigure.label.attribute?
+    & db.informalfigure.pgwide.attribute?
+    & db.informalfigure.floatstyle.attribute?
+  db.informalfigure.info = db._info.title.forbidden
+  db.informalfigure =
+    
+    ## A untitled figure
+    element informalfigure {
+      db.informalfigure.attlist,
+      db.informalfigure.info,
+      db.all.blocks+,
+      db.caption?
+    }
+}
+db.mediaobject.content =
+  (db.videoobject | db.audioobject | db.imageobject | db.textobject)
+  | db.imageobjectco
+div {
+  db.mediaobject.role.attribute = attribute role { text }
+  db.mediaobject.attlist =
+    db.mediaobject.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.mediaobject.info = db._info.title.forbidden
+  db.mediaobject =
+    
+    ## A displayed media object (video, audio, image, etc.)
+    element mediaobject {
+      db.mediaobject.attlist,
+      db.mediaobject.info,
+      db.alt?,
+      db.mediaobject.content+,
+      db.caption?
+    }
+}
+div {
+  db.inlinemediaobject.role.attribute = attribute role { text }
+  db.inlinemediaobject.attlist =
+    db.inlinemediaobject.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.inlinemediaobject.info = db._info.title.forbidden
+  db.inlinemediaobject =
+    
+    ## An inline media object (video, audio, image, and so on)
+    element inlinemediaobject {
+      db.inlinemediaobject.attlist,
+      db.inlinemediaobject.info,
+      db.alt?,
+      db.mediaobject.content+
+    }
+}
+div {
+  db.videoobject.role.attribute = attribute role { text }
+  db.videoobject.attlist =
+    db.videoobject.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.videoobject.info = db._info.title.forbidden
+  db.videoobject =
+    
+    ## A wrapper for video data and its associated meta-information
+    element videoobject {
+      db.videoobject.attlist, db.videoobject.info, db.videodata
+    }
+}
+div {
+  db.audioobject.role.attribute = attribute role { text }
+  db.audioobject.attlist =
+    db.audioobject.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.audioobject.info = db._info.title.forbidden
+  db.audioobject =
+    
+    ## A wrapper for audio data and its associated meta-information
+    element audioobject {
+      db.audioobject.attlist, db.audioobject.info, db.audiodata
+    }
+}
+db.imageobject.content =
+  db.imagedata | db.imagedata.mathml | db.imagedata.svg
+div {
+  db.imageobject.role.attribute = attribute role { text }
+  db.imageobject.attlist =
+    db.imageobject.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.imageobject.info = db._info.title.forbidden
+  db.imageobject =
+    
+    ## A wrapper for image data and its associated meta-information
+    element imageobject {
+      db.imageobject.attlist,
+      db.imageobject.info,
+      db.imageobject.content
+    }
+}
+div {
+  db.textobject.role.attribute = attribute role { text }
+  db.textobject.attlist =
+    db.textobject.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.textobject.info = db._info.title.forbidden
+  db.textobject =
+    
+    ## A wrapper for a text description of an object and its associated meta-information
+    element textobject {
+      db.textobject.attlist,
+      db.textobject.info,
+      (db.phrase | db.textdata | db.all.blocks+)
+    }
+}
+div {
+  db.videodata.role.attribute = attribute role { text }
+  db.videodata.align.enumeration = db.halign.enumeration
+  db.videodata.align.attribute =
+    
+    ## Specifies the (horizontal) alignment of the video data
+    attribute align { db.videodata.align.enumeration }
+  db.videodata.valign.enumeration = db.valign.enumeration
+  db.videodata.valign.attribute =
+    
+    ## Specifies the vertical alignment of the video data
+    attribute valign { db.videodata.valign.enumeration }
+  db.videodata.width.attribute = db.width.attribute
+  db.videodata.depth.attribute = db.depth.attribute
+  db.videodata.contentwidth.attribute = db.contentwidth.attribute
+  db.videodata.contentdepth.attribute = db.contentdepth.attribute
+  db.videodata.scalefit.enumeration = db.scalefit.enumeration
+  db.videodata.scalefit.attribute =
+    
+    ## Determines if anamorphic scaling is forbidden
+    attribute scalefit { db.videodata.scalefit.enumeration }
+  db.videodata.scale.attribute = db.scale.attribute
+  db.videodata.attlist =
+    db.videodata.role.attribute?
+    & db.common.attributes
+    & db.common.data.attributes
+    & db.videodata.align.attribute?
+    & db.videodata.valign.attribute?
+    & db.videodata.width.attribute?
+    & db.videodata.contentwidth.attribute?
+    & db.videodata.scalefit.attribute?
+    & db.videodata.scale.attribute?
+    & db.videodata.depth.attribute?
+    & db.videodata.contentdepth.attribute?
+  db.videodata.info = db._info.title.forbidden
+  db.videodata =
+    
+    ## Pointer to external video data
+    element videodata { db.videodata.attlist, db.videodata.info }
+}
+div {
+  db.audiodata.role.attribute = attribute role { text }
+  db.audiodata.attlist =
+    db.audiodata.role.attribute?
+    & db.common.attributes
+    & db.common.data.attributes
+  db.audiodata.info = db._info.title.forbidden
+  db.audiodata =
+    
+    ## Pointer to external audio data
+    element audiodata { db.audiodata.attlist, db.audiodata.info }
+}
+div {
+  db.imagedata.role.attribute = attribute role { text }
+  db.imagedata.align.enumeration = db.halign.enumeration
+  db.imagedata.align.attribute =
+    
+    ## Specifies the (horizontal) alignment of the image data
+    attribute align { db.imagedata.align.enumeration }
+  db.imagedata.valign.enumeration = db.valign.enumeration
+  db.imagedata.valign.attribute =
+    
+    ## Specifies the vertical alignment of the image data
+    attribute valign { db.imagedata.valign.enumeration }
+  db.imagedata.width.attribute = db.width.attribute
+  db.imagedata.depth.attribute = db.depth.attribute
+  db.imagedata.contentwidth.attribute = db.contentwidth.attribute
+  db.imagedata.contentdepth.attribute = db.contentdepth.attribute
+  db.imagedata.scalefit.enumeration = db.scalefit.enumeration
+  db.imagedata.scalefit.attribute =
+    
+    ## Determines if anamorphic scaling is forbidden
+    attribute scalefit { db.imagedata.scalefit.enumeration }
+  db.imagedata.scale.attribute = db.scale.attribute
+  db.imagedata.attlist =
+    db.imagedata.role.attribute?
+    & db.common.attributes
+    & db.common.data.attributes
+    & db.imagedata.align.attribute?
+    & db.imagedata.valign.attribute?
+    & db.imagedata.width.attribute?
+    & db.imagedata.contentwidth.attribute?
+    & db.imagedata.scalefit.attribute?
+    & db.imagedata.scale.attribute?
+    & db.imagedata.depth.attribute?
+    & db.imagedata.contentdepth.attribute?
+  db.imagedata.info = db._info.title.forbidden
+  db.imagedata =
+    
+    ## Pointer to external image data
+    element imagedata { db.imagedata.attlist, db.imagedata.info }
+}
+div {
+  db.textdata.role.attribute = attribute role { text }
+  db.textdata.encoding.attribute =
+    
+    ## Identifies the encoding of the text in the external file
+    attribute encoding { text }
+  db.textdata.attlist =
+    db.textdata.role.attribute?
+    & db.common.attributes
+    & db.common.data.attributes
+    & db.textdata.encoding.attribute?
+  db.textdata.info = db._info.title.forbidden
+  db.textdata =
+    
+    ## Pointer to external text data
+    element textdata { db.textdata.attlist, db.textdata.info }
+}
+div {
+  db.caption.role.attribute = attribute role { text }
+  db.caption.attlist =
+    db.caption.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.caption.info = db._info.title.forbidden
+  db.caption =
+    
+    ## A caption
+    element caption {
+      db.caption.attlist, db.caption.info, db.all.blocks+
+    }
+}
+div {
+  db.address.role.attribute = attribute role { text }
+  db.address.attlist =
+    db.address.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.verbatim.attributes
+  db.address =
+    
+    ## A real-world address, generally a postal address
+    element address {
+      db.address.attlist,
+      (db._text
+       | db.personname
+       | db.orgname
+       | db.pob
+       | db.street
+       | db.city
+       | db.state
+       | db.postcode
+       | db.country
+       | db.phone
+       | db.fax
+       | db.email
+       | db.uri
+       | db.otheraddr)*
+    }
+}
+div {
+  db.street.role.attribute = attribute role { text }
+  db.street.attlist =
+    db.street.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.street =
+    
+    ## A street address in an address
+    element street { db.street.attlist, db._text }
+}
+div {
+  db.pob.role.attribute = attribute role { text }
+  db.pob.attlist =
+    db.pob.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.pob =
+    
+    ## A post office box in an address
+    element pob { db.pob.attlist, db._text }
+}
+div {
+  db.postcode.role.attribute = attribute role { text }
+  db.postcode.attlist =
+    db.postcode.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.postcode =
+    
+    ## A postal code in an address
+    element postcode { db.postcode.attlist, db._text }
+}
+div {
+  db.city.role.attribute = attribute role { text }
+  db.city.attlist =
+    db.city.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.city =
+    
+    ## The name of a city in an address
+    element city { db.city.attlist, db._text }
+}
+div {
+  db.state.role.attribute = attribute role { text }
+  db.state.attlist =
+    db.state.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.state =
+    
+    ## A state or province in an address
+    element state { db.state.attlist, db._text }
+}
+div {
+  db.country.role.attribute = attribute role { text }
+  db.country.attlist =
+    db.country.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.country =
+    
+    ## The name of a country
+    element country { db.country.attlist, db._text }
+}
+div {
+  db.phone.role.attribute = attribute role { text }
+  db.phone.attlist =
+    db.phone.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.phone =
+    
+    ## A telephone number
+    element phone { db.phone.attlist, db._text }
+}
+div {
+  db.fax.role.attribute = attribute role { text }
+  db.fax.attlist =
+    db.fax.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.fax =
+    
+    ## A fax number
+    element fax { db.fax.attlist, db._text }
+}
+div {
+  db.otheraddr.role.attribute = attribute role { text }
+  db.otheraddr.attlist =
+    db.otheraddr.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.otheraddr =
+    
+    ## Uncategorized information in address
+    element otheraddr { db.otheraddr.attlist, db._text }
+}
+div {
+  db.affiliation.role.attribute = attribute role { text }
+  db.affiliation.attlist =
+    db.affiliation.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.affiliation =
+    
+    ## The institutional affiliation of an individual
+    element affiliation {
+      db.affiliation.attlist,
+      db.shortaffil?,
+      db.jobtitle*,
+      (db.org? | (db.orgname?, db.orgdiv*, db.address*))
+    }
+}
+div {
+  db.shortaffil.role.attribute = attribute role { text }
+  db.shortaffil.attlist =
+    db.shortaffil.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.shortaffil =
+    
+    ## A brief description of an affiliation
+    element shortaffil { db.shortaffil.attlist, db._text }
+}
+div {
+  db.jobtitle.role.attribute = attribute role { text }
+  db.jobtitle.attlist =
+    db.jobtitle.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.jobtitle =
+    
+    ## The title of an individual in an organization
+    element jobtitle { db.jobtitle.attlist, db._text }
+}
+div {
+  db.orgname.class.enumeration =
+    
+    ## A consortium
+    "consortium"
+    | 
+      ## A corporation
+      "corporation"
+    | 
+      ## An informal organization
+      "informal"
+    | 
+      ## A non-profit organization
+      "nonprofit"
+  db.orgname.class-enum.attribute =
+    
+    ## Specifies the nature of the organization
+    attribute class { db.orgname.class.enumeration }
+  db.orgname.class-other.attributes =
+    
+    ## Specifies the nature of the organization
+    attribute class {
+      
+      ## Indicates a non-standard organization class
+      "other"
+    },
+    
+    ## Identifies the non-standard nature of the organization
+    attribute otherclass { text }
+  db.orgname.class.attribute =
+    db.orgname.class-enum.attribute | db.orgname.class-other.attributes
+  db.orgname.role.attribute = attribute role { text }
+  db.orgname.attlist =
+    db.orgname.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.orgname.class.attribute?
+  db.orgname =
+    
+    ## The name of an organization
+    element orgname { db.orgname.attlist, db._text }
+}
+div {
+  db.orgdiv.role.attribute = attribute role { text }
+  db.orgdiv.attlist =
+    db.orgdiv.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.orgdiv =
+    
+    ## A division of an organization
+    element orgdiv { db.orgdiv.attlist, db.all.inlines* }
+}
+div {
+  db.artpagenums.role.attribute = attribute role { text }
+  db.artpagenums.attlist =
+    db.artpagenums.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.artpagenums =
+    
+    ## The page numbers of an article as published
+    element artpagenums { db.artpagenums.attlist, db._text }
+}
+div {
+  db.personname.role.attribute = attribute role { text }
+  db.personname.attlist =
+    db.personname.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.personname =
+    
+    ## The personal name of an individual
+    element personname {
+      db.personname.attlist,
+      (db._text
+       | (db.honorific
+          | db.firstname
+          | db.surname
+          | db.lineage
+          | db.othername)+
+       | (db.honorific
+          | db.givenname
+          | db.surname
+          | db.lineage
+          | db.othername)+)
+    }
+}
+db.person.author.contentmodel =
+  db.personname,
+  (db.personblurb
+   | db.affiliation
+   | db.email
+   | db.uri
+   | db.address
+   | db.contrib)*
+db.org.author.contentmodel =
+  db.orgname,
+  (db.orgdiv
+   | db.affiliation
+   | db.email
+   | db.uri
+   | db.address
+   | db.contrib)*
+db.credit.contentmodel =
+  db.person.author.contentmodel | db.org.author.contentmodel
+div {
+  db.author.role.attribute = attribute role { text }
+  db.author.attlist =
+    db.author.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.author =
+    
+    ## The name of an individual author
+    element author { db.author.attlist, db.credit.contentmodel }
+}
+div {
+  db.authorgroup.role.attribute = attribute role { text }
+  db.authorgroup.attlist =
+    db.authorgroup.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.authorgroup =
+    
+    ## Wrapper for author information when a document has multiple authors or collaborators
+    element authorgroup {
+      db.authorgroup.attlist, (db.author | db.editor | db.othercredit)+
+    }
+}
+div {
+  db.collab.role.attribute = attribute role { text }
+  db.collab.attlist =
+    db.collab.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.collab =
+    
+    ## Identifies a collaborator
+    element collab {
+      db.collab.attlist,
+      (db.person | db.personname | db.org | db.orgname)+,
+      db.affiliation*
+    }
+}
+div {
+  db.authorinitials.role.attribute = attribute role { text }
+  db.authorinitials.attlist =
+    db.authorinitials.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.authorinitials =
+    
+    ## The initials or other short identifier for an author
+    element authorinitials { db.authorinitials.attlist, db._text }
+}
+div {
+  db.person.role.attribute = attribute role { text }
+  db.person.attlist =
+    db.person.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.person =
+    
+    ## A person and associated metadata
+    element person {
+      db.person.attlist,
+      db.personname,
+      (db.address
+       | db.affiliation
+       | db.email
+       | db.uri
+       | db.personblurb)*
+    }
+}
+div {
+  db.org.role.attribute = attribute role { text }
+  db.org.attlist =
+    db.org.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.org =
+    
+    ## An organization and associated metadata
+    element org {
+      db.org.attlist,
+      db.orgname,
+      (db.address | db.affiliation | db.email | db.uri | db.orgdiv)*
+    }
+}
+div {
+  db.confgroup.role.attribute = attribute role { text }
+  db.confgroup.attlist =
+    db.confgroup.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.confgroup =
+    
+    ## A wrapper for document meta-information about a conference
+    element confgroup {
+      db.confgroup.attlist,
+      (db.confdates
+       | db.conftitle
+       | db.confnum
+       | db.confsponsor
+       | db.address)*
+    }
+}
+div {
+  db.confdates.role.attribute = attribute role { text }
+  db.confdates.attlist =
+    db.confdates.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.confdates =
+    
+    ## The dates of a conference for which a document was written
+    element confdates { db.confdates.attlist, db._text }
+}
+div {
+  db.conftitle.role.attribute = attribute role { text }
+  db.conftitle.attlist =
+    db.conftitle.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.conftitle =
+    
+    ## The title of a conference for which a document was written
+    element conftitle { db.conftitle.attlist, db._text }
+}
+div {
+  db.confnum.role.attribute = attribute role { text }
+  db.confnum.attlist =
+    db.confnum.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.confnum =
+    
+    ## An identifier, frequently numerical, associated with a conference for which a document was written
+    element confnum { db.confnum.attlist, db._text }
+}
+div {
+  db.confsponsor.role.attribute = attribute role { text }
+  db.confsponsor.attlist =
+    db.confsponsor.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.confsponsor =
+    
+    ## The sponsor of a conference for which a document was written
+    element confsponsor { db.confsponsor.attlist, db._text }
+}
+div {
+  db.contractnum.role.attribute = attribute role { text }
+  db.contractnum.attlist =
+    db.contractnum.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.contractnum =
+    
+    ## The contract number of a document
+    element contractnum { db.contractnum.attlist, db._text }
+}
+div {
+  db.contractsponsor.role.attribute = attribute role { text }
+  db.contractsponsor.attlist =
+    db.contractsponsor.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.contractsponsor =
+    
+    ## The sponsor of a contract
+    element contractsponsor { db.contractsponsor.attlist, db._text }
+}
+div {
+  db.copyright.role.attribute = attribute role { text }
+  db.copyright.attlist =
+    db.copyright.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.copyright =
+    
+    ## Copyright information about a document
+    element copyright { db.copyright.attlist, db.year+, db.holder* }
+}
+div {
+  db.year.role.attribute = attribute role { text }
+  db.year.attlist =
+    db.year.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.year =
+    
+    ## The year of publication of a document
+    element year { db.year.attlist, db._text }
+}
+div {
+  db.holder.role.attribute = attribute role { text }
+  db.holder.attlist =
+    db.holder.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.holder =
+    
+    ## The name of the individual or organization that holds a copyright
+    element holder { db.holder.attlist, db._text }
+}
+db.cover.contentmodel =
+  (db.para.blocks
+   | db.list.blocks
+   | db.informal.blocks
+   | db.publishing.blocks
+   | db.graphic.blocks
+   | db.technical.blocks
+   | db.verbatim.blocks
+   | db.bridgehead
+   | db.remark
+   | db.revhistory)
+  | db.synopsis.blocks
+div {
+  db.cover.role.attribute = attribute role { text }
+  db.cover.attlist =
+    db.cover.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.cover =
+    
+    ## Additional content for the cover of a publication
+    element cover { db.cover.attlist, db.cover.contentmodel+ }
+}
+db.date.contentmodel =
+  xsd:date | xsd:dateTime | xsd:gYearMonth | xsd:gYear | text
+div {
+  db.date.role.attribute = attribute role { text }
+  db.date.attlist =
+    db.date.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.date =
+    
+    ## The date of publication or revision of a document
+    element date { db.date.attlist, db.date.contentmodel }
+}
+div {
+  db.edition.role.attribute = attribute role { text }
+  db.edition.attlist =
+    db.edition.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.edition =
+    
+    ## The name or number of an edition of a document
+    element edition { db.edition.attlist, db._text }
+}
+div {
+  db.editor.role.attribute = attribute role { text }
+  db.editor.attlist =
+    db.editor.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.editor =
+    
+    ## The name of the editor of a document
+    element editor { db.editor.attlist, db.credit.contentmodel }
+}
+div {
+  db.biblioid.role.attribute = attribute role { text }
+  db.biblioid.attlist =
+    db.biblioid.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.biblio.class.attribute
+  db.biblioid =
+    
+    ## An identifier for a document
+    element biblioid { db.biblioid.attlist, db._text }
+}
+div {
+  db.citebiblioid.role.attribute = attribute role { text }
+  db.citebiblioid.attlist =
+    db.citebiblioid.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.biblio.class.attribute
+  db.citebiblioid =
+    
+    ## A citation of a bibliographic identifier
+    element citebiblioid { db.citebiblioid.attlist, db._text }
+}
+div {
+  db.bibliosource.role.attribute = attribute role { text }
+  db.bibliosource.attlist =
+    db.bibliosource.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.biblio.class.attribute
+  db.bibliosource =
+    
+    ## The source of a document
+    element bibliosource { db.bibliosource.attlist, db._text }
+}
+div {
+  db.bibliorelation.type.enumeration =
+    
+    ## The described resource pre-existed the referenced resource, which is essentially the same intellectual content presented in another format
+    "hasformat"
+    | 
+      ## The described resource includes the referenced resource either physically or logically
+      "haspart"
+    | 
+      ## The described resource has a version, edition, or adaptation, namely, the referenced resource
+      "hasversion"
+    | 
+      ## The described resource is the same intellectual content of the referenced resource, but presented in another format
+      "isformatof"
+    | 
+      ## The described resource is a physical or logical part of the referenced resource
+      "ispartof"
+    | 
+      ## The described resource is referenced, cited, or otherwise pointed to by the referenced resource
+      "isreferencedby"
+    | 
+      ## The described resource is supplanted, displaced, or superceded by the referenced resource
+      "isreplacedby"
+    | 
+      ## The described resource is required by the referenced resource, either physically or logically
+      "isrequiredby"
+    | 
+      ## The described resource is a version, edition, or adaptation of the referenced resource; changes in version imply substantive changes in content rather than differences in format
+      "isversionof"
+    | 
+      ## The described resource references, cites, or otherwise points to the referenced resource
+      "references"
+    | 
+      ## The described resource supplants, displaces, or supersedes the referenced resource
+      "replaces"
+    | 
+      ## The described resource requires the referenced resource to support its function, delivery, or coherence of content
+      "requires"
+  db.bibliorelation.type-enum.attribute =
+    
+    ## Identifies the type of relationship
+    attribute type { db.bibliorelation.type.enumeration }?
+  db.bibliorelation.type-other.attributes =
+    
+    ## Identifies the type of relationship
+    attribute type {
+      
+      ## The described resource has a non-standard relationship with the referenced resource
+      "othertype"
+    }?,
+    
+    ## A keyword that identififes the type of the non-standard relationship
+    attribute othertype { xsd:NMTOKEN }
+  db.bibliorelation.type.attribute =
+    db.bibliorelation.type-enum.attribute
+    | db.bibliorelation.type-other.attributes
+  db.bibliorelation.role.attribute = attribute role { text }
+  db.bibliorelation.attlist =
+    db.bibliorelation.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.biblio.class.attribute
+    & db.bibliorelation.type.attribute
+  db.bibliorelation =
+    
+    ## The relationship of a document to another
+    element bibliorelation { db.bibliorelation.attlist, db._text }
+}
+div {
+  db.bibliocoverage.spacial.enumeration =
+    
+    ## The DCMI Point identifies a point in space using its geographic coordinates
+    "dcmipoint"
+    | 
+      ## ISO 3166 Codes for the representation of names of countries
+      "iso3166"
+    | 
+      ## The DCMI Box identifies a region of space using its geographic limits
+      "dcmibox"
+    | 
+      ## The Getty Thesaurus of Geographic Names
+      "tgn"
+  db.bibliocoverage.spatial-enum.attribute =
+    
+    ## Specifies the type of spatial coverage
+    attribute spatial { db.bibliocoverage.spacial.enumeration }?
+  db.bibliocoverage.spatial-other.attributes =
+    
+    ## Specifies the type of spatial coverage
+    attribute spatial {
+      
+      ## Identifies a non-standard type of coverage
+      "otherspatial"
+    }?,
+    
+    ## A keyword that identifies the type of non-standard coverage
+    attribute otherspatial { xsd:NMTOKEN }
+  db.bibliocoverage.spatial.attribute =
+    db.bibliocoverage.spatial-enum.attribute
+    | db.bibliocoverage.spatial-other.attributes
+  db.bibliocoverage.temporal.enumeration =
+    
+    ## A specification of the limits of a time interval
+    "dcmiperiod"
+    | 
+      ## W3C Encoding rules for dates and times—a profile based on ISO 8601
+      "w3c-dtf"
+  db.bibliocoverage.temporal-enum.attribute =
+    
+    ## Specifies the type of temporal coverage
+    attribute temporal { db.bibliocoverage.temporal.enumeration }?
+  db.bibliocoverage.temporal-other.attributes =
+    
+    ## Specifies the type of temporal coverage
+    attribute temporal {
+      
+      ## Specifies a non-standard type of coverage
+      "othertemporal"
+    }?,
+    
+    ## A keyword that identifies the type of non-standard coverage
+    attribute othertemporal { xsd:NMTOKEN }
+  db.bibliocoverage.temporal.attribute =
+    db.bibliocoverage.temporal-enum.attribute
+    | db.bibliocoverage.temporal-other.attributes
+  db.bibliocoverage.coverage.attrib =
+    db.bibliocoverage.spatial.attribute
+    & db.bibliocoverage.temporal.attribute
+  db.bibliocoverage.role.attribute = attribute role { text }
+  db.bibliocoverage.attlist =
+    db.bibliocoverage.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.bibliocoverage.coverage.attrib
+  db.bibliocoverage =
+    
+    ## The spatial or temporal coverage of a document
+    element bibliocoverage { db.bibliocoverage.attlist, db._text }
+}
+div {
+  db.legalnotice.role.attribute = attribute role { text }
+  db.legalnotice.attlist =
+    db.legalnotice.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.legalnotice.info = db._info.title.only
+  db.legalnotice =
+    
+    ## A statement of legal obligations or requirements
+    element legalnotice {
+      db.legalnotice.attlist, db.legalnotice.info, db.all.blocks+
+    }
+}
+div {
+  db.othercredit.class.enumeration =
+    
+    ## A copy editor
+    "copyeditor"
+    | 
+      ## A graphic designer
+      "graphicdesigner"
+    | 
+      ## Some other contributor
+      "other"
+    | 
+      ## A production editor
+      "productioneditor"
+    | 
+      ## A technical editor
+      "technicaleditor"
+    | 
+      ## A translator
+      "translator"
+    | 
+      ## An indexer
+      "indexer"
+    | 
+      ## A proof-reader
+      "proofreader"
+    | 
+      ## A cover designer
+      "coverdesigner"
+    | 
+      ## An interior designer
+      "interiordesigner"
+    | 
+      ## An illustrator
+      "illustrator"
+    | 
+      ## A reviewer
+      "reviewer"
+    | 
+      ## A typesetter
+      "typesetter"
+    | 
+      ## A converter (a persons responsible for conversion, not an application)
+      "conversion"
+  db.othercredit.class-enum.attribute =
+    
+    ## Identifies the nature of the contributor
+    attribute class { db.othercredit.class.enumeration }?
+  db.othercredit.class-other.attribute =
+    
+    ## Identifies the nature of the non-standard contribution
+    attribute otherclass { xsd:NMTOKEN }
+  db.othercredit.class-other.attributes =
+    
+    ## Identifies the nature of the contributor
+    attribute class {
+      
+      ## Identifies a non-standard contribution
+      "other"
+    }
+    & db.othercredit.class-other.attribute
+  db.othercredit.class.attribute =
+    db.othercredit.class-enum.attribute
+    | db.othercredit.class-other.attributes
+  db.othercredit.role.attribute = attribute role { text }
+  db.othercredit.attlist =
+    db.othercredit.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.othercredit.class.attribute
+  db.othercredit =
+    
+    ## A person or entity, other than an author or editor, credited in a document
+    element othercredit {
+      db.othercredit.attlist, db.credit.contentmodel
+    }
+}
+div {
+  db.pagenums.role.attribute = attribute role { text }
+  db.pagenums.attlist =
+    db.pagenums.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.pagenums =
+    
+    ## The numbers of the pages in a book, for use in a bibliographic entry
+    element pagenums { db.pagenums.attlist, db._text }
+}
+div {
+  db.contrib.role.attribute = attribute role { text }
+  db.contrib.attlist =
+    db.contrib.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.contrib =
+    
+    ## A summary of the contributions made to a document by a credited source
+    element contrib { db.contrib.attlist, db.all.inlines* }
+}
+div {
+  db.honorific.role.attribute = attribute role { text }
+  db.honorific.attlist =
+    db.honorific.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.honorific =
+    
+    ## The title of a person
+    element honorific { db.honorific.attlist, db._text }
+}
+div {
+  db.firstname.role.attribute = attribute role { text }
+  db.firstname.attlist =
+    db.firstname.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.firstname =
+    
+    ## A given name of a person
+    element firstname { db.firstname.attlist, db._text }
+}
+div {
+  db.givenname.role.attribute = attribute role { text }
+  db.givenname.attlist =
+    db.givenname.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.givenname =
+    
+    ## The given name of a person
+    element givenname { db.givenname.attlist, db._text }
+}
+div {
+  db.surname.role.attribute = attribute role { text }
+  db.surname.attlist =
+    db.surname.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.surname =
+    
+    ## An inherited or family name; in western cultures the last name
+    element surname { db.surname.attlist, db._text }
+}
+div {
+  db.lineage.role.attribute = attribute role { text }
+  db.lineage.attlist =
+    db.lineage.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.lineage =
+    
+    ## The portion of a person's name indicating a relationship to ancestors
+    element lineage { db.lineage.attlist, db._text }
+}
+div {
+  db.othername.role.attribute = attribute role { text }
+  db.othername.attlist =
+    db.othername.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.othername =
+    
+    ## A component of a person's name that is not a first name, surname, or lineage
+    element othername { db.othername.attlist, db._text }
+}
+div {
+  db.printhistory.role.attribute = attribute role { text }
+  db.printhistory.attlist =
+    db.printhistory.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.printhistory =
+    
+    ## The printing history of a document
+    element printhistory { db.printhistory.attlist, db.para.blocks+ }
+}
+div {
+  db.pubdate.role.attribute = attribute role { text }
+  db.pubdate.attlist =
+    db.pubdate.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.pubdate =
+    
+    ## The date of publication of a document
+    element pubdate { db.pubdate.attlist, db.date.contentmodel }
+}
+div {
+  db.publisher.role.attribute = attribute role { text }
+  db.publisher.attlist =
+    db.publisher.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.publisher =
+    
+    ## The publisher of a document
+    element publisher {
+      db.publisher.attlist, db.publishername, db.address*
+    }
+}
+div {
+  db.publishername.role.attribute = attribute role { text }
+  db.publishername.attlist =
+    db.publishername.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.publishername =
+    
+    ## The name of the publisher of a document
+    element publishername { db.publishername.attlist, db._text }
+}
+div {
+  db.releaseinfo.role.attribute = attribute role { text }
+  db.releaseinfo.attlist =
+    db.releaseinfo.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.releaseinfo =
+    
+    ## Information about a particular release of a document
+    element releaseinfo { db.releaseinfo.attlist, db._text }
+}
+div {
+  db.revhistory.role.attribute = attribute role { text }
+  db.revhistory.attlist =
+    db.revhistory.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.revhistory.info = db._info.title.only
+  db.revhistory =
+    
+    ## A history of the revisions to a document
+    element revhistory {
+      db.revhistory.attlist, db.revhistory.info, db.revision+
+    }
+}
+div {
+  db.revision.role.attribute = attribute role { text }
+  db.revision.attlist =
+    db.revision.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.revision =
+    
+    ## An entry describing a single revision in the history of the revisions to a document
+    element revision {
+      db.revision.attlist,
+      db.revnumber?,
+      db.date,
+      (db.authorinitials | db.author)*,
+      (db.revremark | db.revdescription)?
+    }
+}
+div {
+  db.revnumber.role.attribute = attribute role { text }
+  db.revnumber.attlist =
+    db.revnumber.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.revnumber =
+    
+    ## A document revision number
+    element revnumber { db.revnumber.attlist, db._text }
+}
+div {
+  db.revremark.role.attribute = attribute role { text }
+  db.revremark.attlist =
+    db.revremark.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.revremark =
+    
+    ## A description of a revision to a document
+    element revremark { db.revremark.attlist, db._text }
+}
+div {
+  db.revdescription.role.attribute = attribute role { text }
+  db.revdescription.attlist =
+    db.revdescription.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.revdescription =
+    
+    ## A extended description of a revision to a document
+    element revdescription { db.revdescription.attlist, db.all.blocks* }
+}
+div {
+  db.seriesvolnums.role.attribute = attribute role { text }
+  db.seriesvolnums.attlist =
+    db.seriesvolnums.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.seriesvolnums =
+    
+    ## Numbers of the volumes in a series of books
+    element seriesvolnums { db.seriesvolnums.attlist, db._text }
+}
+div {
+  db.volumenum.role.attribute = attribute role { text }
+  db.volumenum.attlist =
+    db.volumenum.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.volumenum =
+    
+    ## The volume number of a document in a set (as of books in a set or articles in a journal)
+    element volumenum { db.volumenum.attlist, db._text }
+}
+div {
+  db.issuenum.role.attribute = attribute role { text }
+  db.issuenum.attlist =
+    db.issuenum.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.issuenum =
+    
+    ## The number of an issue of a journal
+    element issuenum { db.issuenum.attlist, db._text }
+}
+div {
+  db.package.role.attribute = attribute role { text }
+  db.package.attlist =
+    db.package.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.package =
+    
+    ## A software or application package
+    element package { db.package.attlist, db._text }
+}
+div {
+  db.email.role.attribute = attribute role { text }
+  db.email.attlist =
+    db.email.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.email =
+    
+    ## An email address
+    element email { db.email.attlist, db._text }
+}
+div {
+  db.lineannotation.role.attribute = attribute role { text }
+  db.lineannotation.attlist =
+    db.lineannotation.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.lineannotation =
+    
+    ## A comment on a line in a verbatim listing
+    element lineannotation { db.lineannotation.attlist, db._text }
+}
+div {
+  db.parameter.class.enumeration =
+    
+    ## A command
+    "command"
+    | 
+      ## A function
+      "function"
+    | 
+      ## An option
+      "option"
+  db.parameter.class.attribute =
+    
+    ## Identifies the class of parameter
+    attribute class { db.parameter.class.enumeration }
+  db.parameter.role.attribute = attribute role { text }
+  db.parameter.attlist =
+    db.parameter.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.parameter.class.attribute?
+  db.parameter =
+    
+    ## A value or a symbolic reference to a value
+    element parameter { db.parameter.attlist, db._text }
+}
+db.replaceable.inlines = db._text | db.co
+div {
+  db.replaceable.class.enumeration =
+    
+    ## A command
+    "command"
+    | 
+      ## A function
+      "function"
+    | 
+      ## An option
+      "option"
+    | 
+      ## A parameter
+      "parameter"
+  db.replaceable.class.attribute =
+    
+    ## Identifies the nature of the replaceable text
+    attribute class { db.replaceable.class.enumeration }
+  db.replaceable.role.attribute = attribute role { text }
+  db.replaceable.attlist =
+    db.replaceable.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.replaceable.class.attribute?
+  db.replaceable =
+    
+    ## Content that may or must be replaced by the user
+    element replaceable {
+      db.replaceable.attlist, db.replaceable.inlines*
+    }
+}
+div {
+  db.uri.type.attribute =
+    
+    ## Identifies the type of URI specified
+    attribute type { text }?
+  db.uri.role.attribute = attribute role { text }
+  db.uri.attlist =
+    db.uri.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.uri.type.attribute
+  db.uri =
+    
+    ## A Uniform Resource Identifier
+    element uri { db.uri.attlist, db._text }
+}
+div {
+  db.abbrev.role.attribute = attribute role { text }
+  db.abbrev.attlist =
+    db.abbrev.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.abbrev =
+    
+    ## An abbreviation, especially one followed by a period
+    element abbrev {
+      db.abbrev.attlist,
+      (db._text | db.superscript | db.subscript | db.trademark)*
+    }
+}
+div {
+  db.acronym.role.attribute = attribute role { text }
+  db.acronym.attlist =
+    db.acronym.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.acronym =
+    
+    ## An often pronounceable word made from the initial (or selected) letters of a name or phrase
+    element acronym {
+      db.acronym.attlist,
+      (db._text | db.superscript | db.subscript | db.trademark)*
+    }
+}
+div {
+  db.citation.role.attribute = attribute role { text }
+  db.citation.attlist =
+    db.citation.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.citation =
+    
+    ## An inline bibliographic reference to another published work
+    element citation { db.citation.attlist, db.all.inlines* }
+}
+div {
+  db.citerefentry.role.attribute = attribute role { text }
+  db.citerefentry.attlist =
+    db.citerefentry.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.citerefentry =
+    
+    ## A citation to a reference page
+    element citerefentry {
+      db.citerefentry.attlist, db.refentrytitle, db.manvolnum?
+    }
+}
+div {
+  db.refentrytitle.role.attribute = attribute role { text }
+  db.refentrytitle.attlist =
+    db.refentrytitle.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.refentrytitle =
+    
+    ## The title of a reference page
+    element refentrytitle { db.refentrytitle.attlist, db.all.inlines* }
+}
+div {
+  db.manvolnum.role.attribute = attribute role { text }
+  db.manvolnum.attlist =
+    db.manvolnum.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.manvolnum =
+    
+    ## A reference volume number
+    element manvolnum { db.manvolnum.attlist, db._text }
+}
+div {
+  db.citetitle.pubwork.enumeration =
+    
+    ## An article
+    "article"
+    | 
+      ## A bulletin board system
+      "bbs"
+    | 
+      ## A book
+      "book"
+    | 
+      ## A CD-ROM
+      "cdrom"
+    | 
+      ## A chapter (as of a book)
+      "chapter"
+    | 
+      ## A DVD
+      "dvd"
+    | 
+      ## An email message
+      "emailmessage"
+    | 
+      ## A gopher page
+      "gopher"
+    | 
+      ## A journal
+      "journal"
+    | 
+      ## A manuscript
+      "manuscript"
+    | 
+      ## A posting to a newsgroup
+      "newsposting"
+    | 
+      ## A part (as of a book)
+      "part"
+    | 
+      ## A reference entry
+      "refentry"
+    | 
+      ## A section (as of a book or article)
+      "section"
+    | 
+      ## A series
+      "series"
+    | 
+      ## A set (as of books)
+      "set"
+    | 
+      ## A web page
+      "webpage"
+    | 
+      ## A wiki page
+      "wiki"
+  db.citetitle.pubwork.attribute =
+    
+    ## Identifies the nature of the publication being cited
+    attribute pubwork { db.citetitle.pubwork.enumeration }
+  db.citetitle.role.attribute = attribute role { text }
+  db.citetitle.attlist =
+    db.citetitle.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.citetitle.pubwork.attribute?
+  db.citetitle =
+    
+    ## The title of a cited work
+    element citetitle { db.citetitle.attlist, db.all.inlines* }
+}
+div {
+  db.emphasis.role.attribute = attribute role { text }
+  db.emphasis.attlist =
+    db.emphasis.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.emphasis =
+    
+    ## Emphasized text
+    element emphasis { db.emphasis.attlist, db.all.inlines* }
+}
+div {
+  db._emphasis =
+    
+    ## A limited span of emphasized text
+    element emphasis { db.emphasis.attlist, db._text }
+}
+div {
+  db.foreignphrase.role.attribute = attribute role { text }
+  db.foreignphrase.attlist =
+    db.foreignphrase.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.foreignphrase =
+    
+    ## A word or phrase in a language other than the primary language of the document
+    element foreignphrase {
+      db.foreignphrase.attlist, (text | db.general.inlines)*
+    }
+}
+div {
+  db._foreignphrase.role.attribute = attribute role { text }
+  db._foreignphrase.attlist =
+    db._foreignphrase.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db._foreignphrase =
+    
+    ## A limited word or phrase in a language other than the primary language of the document
+    element foreignphrase { db._foreignphrase.attlist, db._text }
+}
+div {
+  db.phrase.role.attribute = attribute role { text }
+  db.phrase.attlist =
+    db.phrase.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.phrase =
+    
+    ## A span of text
+    element phrase { db.phrase.attlist, db.all.inlines* }
+}
+div {
+  db._phrase =
+    
+    ## A limited span of text
+    element phrase { db.phrase.attlist, db._text }
+}
+div {
+  db.quote.role.attribute = attribute role { text }
+  db.quote.attlist =
+    db.quote.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.quote =
+    
+    ## An inline quotation
+    element quote { db.quote.attlist, db.all.inlines* }
+}
+div {
+  db._quote.role.attribute = attribute role { text }
+  db._quote.attlist =
+    db._quote.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db._quote =
+    
+    ## A limited inline quotation
+    element quote { db._quote.attlist, db._text }
+}
+div {
+  db.subscript.role.attribute = attribute role { text }
+  db.subscript.attlist =
+    db.subscript.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.subscript =
+    
+    ## A subscript (as in H2
+    ## O, the molecular formula for water)
+    element subscript { db.subscript.attlist, db._text }
+}
+div {
+  db.superscript.role.attribute = attribute role { text }
+  db.superscript.attlist =
+    db.superscript.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.superscript =
+    
+    ## A superscript (as in x2
+    ## , the mathematical notation for x multiplied by itself)
+    element superscript { db.superscript.attlist, db._text }
+}
+div {
+  db.trademark.class.enumeration =
+    
+    ## A copyright
+    "copyright"
+    | 
+      ## A registered copyright
+      "registered"
+    | 
+      ## A service
+      "service"
+    | 
+      ## A trademark
+      "trade"
+  db.trademark.class.attribute =
+    
+    ## Identifies the class of trade mark
+    attribute class { db.trademark.class.enumeration }
+  db.trademark.role.attribute = attribute role { text }
+  db.trademark.attlist =
+    db.trademark.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.trademark.class.attribute?
+  db.trademark =
+    
+    ## A trademark
+    element trademark { db.trademark.attlist, db._text }
+}
+div {
+  db.wordasword.role.attribute = attribute role { text }
+  db.wordasword.attlist =
+    db.wordasword.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.wordasword =
+    
+    ## A word meant specifically as a word and not representing anything else
+    element wordasword { db.wordasword.attlist, db._text }
+}
+div {
+  db.footnoteref.role.attribute = attribute role { text }
+  db.footnoteref.label.attribute = db.label.attribute
+  db.footnoteref.attlist =
+    db.footnoteref.role.attribute?
+    & db.common.attributes
+    & db.linkend.attribute
+    & db.footnoteref.label.attribute?
+  db.footnoteref =
+    
+    ## A cross reference to a footnote (a footnote mark)
+    element footnoteref { db.footnoteref.attlist, empty }
+}
+div {
+  db.xref.role.attribute = attribute role { text }
+  db.xref.xrefstyle.attribute = db.xrefstyle.attribute
+  db.xref.endterm.attribute = db.endterm.attribute
+  db.xref.attlist =
+    db.xref.role.attribute?
+    & db.common.attributes
+    & db.common.req.linking.attributes
+    & db.xref.xrefstyle.attribute?
+    & db.xref.endterm.attribute?
+  db.xref =
+    
+    ## A cross reference to another part of the document
+    element xref { db.xref.attlist, empty }
+}
+div {
+  db.link.role.attribute = attribute role { text }
+  db.link.xrefstyle.attribute = db.xrefstyle.attribute
+  db.link.endterm.attribute = db.endterm.attribute
+  db.link.attlist =
+    db.link.role.attribute?
+    & db.common.attributes
+    & db.common.req.linking.attributes
+    & db.link.xrefstyle.attribute?
+    & db.link.endterm.attribute?
+  db.link =
+    
+    ## A hypertext link
+    element link { db.link.attlist, db.all.inlines* }
+}
+div {
+  db.olink.role.attribute = attribute role { text }
+  db.olink.xrefstyle.attribute = db.xrefstyle.attribute
+  db.olink.localinfo.attribute =
+    
+    ## Holds additional information that may be used by the application when resolving the link
+    attribute localinfo { text }
+  db.olink.targetdoc.attribute =
+    
+    ## Specifies the URI of the document in which the link target appears
+    attribute targetdoc { xsd:anyURI }
+  db.olink.targetptr.attribute =
+    
+    ## Specifies the location of the link target in the document
+    attribute targetptr { text }
+  db.olink.type.attribute =
+    
+    ## Identifies application-specific customization of the link behavior
+    attribute type { text }
+  db.olink.attlist =
+    db.common.attributes
+    & db.olink.targetdoc.attribute?
+    & db.olink.role.attribute?
+    & db.olink.xrefstyle.attribute?
+    & db.olink.localinfo.attribute?
+    & db.olink.targetptr.attribute?
+    & db.olink.type.attribute?
+  db.olink =
+    
+    ## A link that addresses its target indirectly
+    element olink { db.olink.attlist, db.all.inlines* }
+}
+div {
+  db.anchor.role.attribute = attribute role { text }
+  db.anchor.attlist =
+    db.anchor.role.attribute? & db.common.idreq.attributes
+  db.anchor =
+    
+    ## A spot in the document
+    element anchor { db.anchor.attlist, empty }
+}
+div {
+  db.alt.role.attribute = attribute role { text }
+  db.alt.attlist = db.alt.role.attribute? & db.common.attributes
+  db.alt =
+    
+    ## A text-only annotation, often used for accessibility
+    element alt { db.alt.attlist, (text | db.inlinemediaobject)* }
+}
+db.status.attribute =
+  
+  ## Identifies the editorial or publication status of the element on which it occurs
+  attribute status { text }
+db.toplevel.sections =
+  ((db.section+, db.simplesect*) | db.simplesect+)
+  | (db.sect1+, db.simplesect*)
+  | db.refentry+
+db.toplevel.blocks.or.sections =
+  (db.all.blocks+, db.toplevel.sections?) | db.toplevel.sections
+db.recursive.sections =
+  ((db.section+, db.simplesect*) | db.simplesect+)
+  | db.refentry+
+db.recursive.blocks.or.sections =
+  (db.all.blocks+, db.recursive.sections?) | db.recursive.sections
+db.divisions = db.part | db.reference
+db.components =
+  db.dedication
+  | db.acknowledgements
+  | db.preface
+  | db.chapter
+  | db.appendix
+  | db.article
+  | db.colophon
+db.navigation.components =
+  notAllowed | db.glossary | db.bibliography | db.index | db.toc
+db.component.contentmodel =
+  db.navigation.components*,
+  db.toplevel.blocks.or.sections,
+  db.navigation.components*
+db.setindex.components = notAllowed | db.setindex
+db.toc.components = notAllowed | db.toc
+db.set.components = db.set | db.book
+div {
+  db.set.status.attribute = db.status.attribute
+  db.set.role.attribute = attribute role { text }
+  db.set.attlist =
+    db.set.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.label.attribute?
+    & db.set.status.attribute?
+  db.set.info = db._info.title.req
+  db.set =
+    
+    ## A collection of books
+    element set {
+      db.set.attlist,
+      db.set.info,
+      db.toc.components?,
+      db.set.components+,
+      db.setindex.components?
+    }
+}
+db.book.components =
+  (db.navigation.components | db.components | db.divisions)* | db.topic*
+div {
+  db.book.status.attribute = db.status.attribute
+  db.book.role.attribute = attribute role { text }
+  db.book.attlist =
+    db.book.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.label.attribute?
+    & db.book.status.attribute?
+  db.book.info = db._info
+  db.book =
+    
+    ## A book
+    element book { db.book.attlist, db.book.info, db.book.components }
+}
+div {
+  db.dedication.status.attribute = db.status.attribute
+  db.dedication.role.attribute = attribute role { text }
+  db.dedication.attlist =
+    db.dedication.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.label.attribute?
+    & db.dedication.status.attribute?
+  db.dedication.info = db._info
+  db.dedication =
+    
+    ## The dedication of a book or other component
+    element dedication {
+      db.dedication.attlist, db.dedication.info, db.all.blocks+
+    }
+}
+div {
+  db.acknowledgements.status.attribute = db.status.attribute
+  db.acknowledgements.role.attribute = attribute role { text }
+  db.acknowledgements.attlist =
+    db.acknowledgements.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.label.attribute?
+    & db.acknowledgements.status.attribute?
+  db.acknowledgements.info = db._info
+  db.acknowledgements =
+    
+    ## Acknowledgements of a book or other component
+    element acknowledgements {
+      db.acknowledgements.attlist,
+      db.acknowledgements.info,
+      db.all.blocks+
+    }
+}
+div {
+  db.colophon.status.attribute = db.status.attribute
+  db.colophon.role.attribute = attribute role { text }
+  db.colophon.attlist =
+    db.colophon.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.label.attribute?
+    & db.colophon.status.attribute?
+  db.colophon.info = db._info
+  db.colophon =
+    
+    ## Text at the back of a book describing facts about its production
+    element colophon {
+      db.colophon.attlist,
+      db.colophon.info,
+      ((db.all.blocks+, db.simplesect*)
+       | (db.all.blocks*, db.simplesect+))
+    }
+}
+db.appendix.contentmodel = db.component.contentmodel | db.topic+
+div {
+  db.appendix.status.attribute = db.status.attribute
+  db.appendix.role.attribute = attribute role { text }
+  db.appendix.attlist =
+    db.appendix.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.label.attribute?
+    & db.appendix.status.attribute?
+  db.appendix.info = db._info.title.req
+  db.appendix =
+    
+    ## An appendix in a book or article
+    element appendix {
+      db.appendix.attlist, db.appendix.info, db.appendix.contentmodel
+    }
+}
+db.chapter.contentmodel = db.component.contentmodel | db.topic+
+div {
+  db.chapter.status.attribute = db.status.attribute
+  db.chapter.role.attribute = attribute role { text }
+  db.chapter.attlist =
+    db.chapter.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.label.attribute?
+    & db.chapter.status.attribute?
+  db.chapter.info = db._info.title.req
+  db.chapter =
+    
+    ## A chapter, as of a book
+    element chapter {
+      db.chapter.attlist, db.chapter.info, db.chapter.contentmodel
+    }
+}
+db.part.components =
+  (db.navigation.components | db.components)
+  | (db.refentry | db.reference)
+db.part.contentmodel = db.part.components+ | db.topic+
+div {
+  db.part.status.attribute = db.status.attribute
+  db.part.role.attribute = attribute role { text }
+  db.part.attlist =
+    db.part.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.label.attribute?
+    & db.part.status.attribute?
+  db.part.info = db._info.title.req
+  db.part =
+    
+    ## A division in a book
+    element part {
+      db.part.attlist, db.part.info, db.partintro?, db.part.contentmodel
+    }
+}
+div {
+  db.preface.status.attribute = db.status.attribute
+  db.preface.role.attribute = attribute role { text }
+  db.preface.attlist =
+    db.preface.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.label.attribute?
+    & db.preface.status.attribute?
+  db.preface.info = db._info.title.req
+  db.preface =
+    
+    ## Introductory matter preceding the first chapter of a book
+    element preface {
+      db.preface.attlist, db.preface.info, db.component.contentmodel
+    }
+}
+div {
+  db.partintro.status.attribute = db.status.attribute
+  db.partintro.role.attribute = attribute role { text }
+  db.partintro.attlist =
+    db.partintro.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.label.attribute?
+    & db.partintro.status.attribute?
+  db.partintro.info = db._info
+  db.partintro =
+    
+    ## An introduction to the contents of a part
+    element partintro {
+      db.partintro.attlist,
+      db.partintro.info,
+      db.toplevel.blocks.or.sections
+    }
+}
+div {
+  db.section.status.attribute = db.status.attribute
+  db.section.role.attribute = attribute role { text }
+  db.section.attlist =
+    db.section.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.label.attribute?
+    & db.section.status.attribute?
+  db.section.info = db._info.title.req
+  db.section =
+    
+    ## A recursive section
+    element section {
+      db.section.attlist,
+      db.section.info,
+      db.recursive.blocks.or.sections,
+      db.navigation.components*
+    }
+}
+div {
+  db.simplesect.status.attribute = db.status.attribute
+  db.simplesect.role.attribute = attribute role { text }
+  db.simplesect.attlist =
+    db.simplesect.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.label.attribute?
+    & db.simplesect.status.attribute?
+  db.simplesect.info = db._info.title.req
+  db.simplesect =
+    
+    ## A section of a document with no subdivisions
+    element simplesect {
+      db.simplesect.attlist, db.simplesect.info, db.all.blocks+
+    }
+}
+db.article.components = db.toplevel.sections
+db.article.navcomponents =
+  db.navigation.components
+  | db.acknowledgements
+  | db.dedication
+  | db.appendix
+  | db.colophon
+div {
+  db.article.status.attribute = db.status.attribute
+  db.article.class.enumeration =
+    
+    ## A collection of frequently asked questions.
+    "faq"
+    | 
+      ## An article in a journal or other periodical.
+      "journalarticle"
+    | 
+      ## A description of a product.
+      "productsheet"
+    | 
+      ## A specification.
+      "specification"
+    | 
+      ## A technical report.
+      "techreport"
+    | 
+      ## A white paper.
+      "whitepaper"
+  db.article.class.attribute =
+    
+    ## Identifies the nature of the article
+    attribute class { db.article.class.enumeration }
+  db.article.role.attribute = attribute role { text }
+  db.article.attlist =
+    db.article.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.label.attribute?
+    & db.article.status.attribute?
+    & db.article.class.attribute?
+  db.article.info = db._info.title.req
+  db.article =
+    
+    ## An article
+    element article {
+      db.article.attlist,
+      db.article.info,
+      db.article.navcomponents*,
+      ((db.all.blocks+, db.article.components?)
+       | db.article.components),
+      db.article.navcomponents*
+    }
+}
+db.annotations.attribute =
+  
+  ## Identifies one or more annotations that apply to this element
+  attribute annotations { text }
+div {
+  db.annotation.role.attribute = attribute role { text }
+  db.annotation.annotates.attribute =
+    
+    ## Identifies one ore more elements to which this annotation applies
+    attribute annotates { text }
+  db.annotation.attlist =
+    db.annotation.role.attribute?
+    & db.annotation.annotates.attribute?
+    & db.common.attributes
+  db.annotation.info = db._info.title.only
+  db.annotation =
+    
+    ## An annotation
+    element annotation {
+      db.annotation.attlist, db.annotation.info, db.all.blocks+
+    }
+}
+db.xlink.from.attribute =
+  
+  ## Specifies the XLink traversal-from
+  attribute xlink:from { xsd:NMTOKEN }
+db.xlink.label.attribute =
+  
+  ## Specifies the XLink label
+  attribute xlink:label { xsd:NMTOKEN }
+db.xlink.to.attribute =
+  
+  ## Specifies the XLink traversal-to
+  attribute xlink:to { xsd:NMTOKEN }
+div {
+  db.extendedlink.role.attribute = attribute role { text }
+  db.extendedlink.attlist =
+    db.extendedlink.role.attribute?
+    & db.common.attributes
+    & 
+      ## Identifies the XLink link type 
+      [ a:defaultValue = "extended" ]
+      attribute xlink:type {
+        
+        ## An XLink extended link
+        "extended"
+      }?
+    & db.xlink.role.attribute?
+    & db.xlink.title.attribute?
+  db.extendedlink =
+    
+    ## An XLink extended link
+    element extendedlink {
+      db.extendedlink.attlist, (db.locator | db.arc)+
+    }
+}
+div {
+  db.locator.role.attribute = attribute role { text }
+  db.locator.attlist =
+    db.locator.role.attribute?
+    & db.common.attributes
+    & 
+      ## Identifies the XLink link type 
+      [ a:defaultValue = "locator" ]
+      attribute xlink:type {
+        
+        ## An XLink locator link
+        "locator"
+      }?
+    & db.xlink.href.attribute
+    & db.xlink.role.attribute?
+    & db.xlink.title.attribute?
+    & db.xlink.label.attribute?
+  db.locator =
+    
+    ## An XLink locator in an extendedlink
+    element locator { db.locator.attlist, empty }
+}
+div {
+  db.arc.role.attribute = attribute role { text }
+  db.arc.attlist =
+    db.arc.role.attribute?
+    & db.common.attributes
+    & 
+      ## Identifies the XLink link type 
+      [ a:defaultValue = "arc" ]
+      attribute xlink:type {
+        
+        ## An XLink arc link
+        "arc"
+      }?
+    & db.xlink.arcrole.attribute?
+    & db.xlink.title.attribute?
+    & db.xlink.show.attribute?
+    & db.xlink.actuate.attribute?
+    & db.xlink.from.attribute?
+    & db.xlink.to.attribute?
+  db.arc =
+    
+    ## An XLink arc in an extendedlink
+    element arc { db.arc.attlist, empty }
+}
+db.sect1.sections = (db.sect2+, db.simplesect*) | db.simplesect+
+div {
+  db.sect1.status.attribute = db.status.attribute
+  db.sect1.role.attribute = attribute role { text }
+  db.sect1.attlist =
+    db.sect1.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.label.attribute?
+    & db.sect1.status.attribute?
+  db.sect1.info = db._info.title.req
+  db.sect1 =
+    
+    ## A top-level section of document
+    element sect1 {
+      db.sect1.attlist,
+      db.sect1.info,
+      ((db.all.blocks+, db.sect1.sections?) | db.sect1.sections),
+      db.navigation.components*
+    }
+}
+db.sect2.sections = (db.sect3+, db.simplesect*) | db.simplesect+
+div {
+  db.sect2.status.attribute = db.status.attribute
+  db.sect2.role.attribute = attribute role { text }
+  db.sect2.attlist =
+    db.sect2.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.label.attribute?
+    & db.sect2.status.attribute?
+  db.sect2.info = db._info.title.req
+  db.sect2 =
+    
+    ## A subsection within a sect1
+    element sect2 {
+      db.sect2.attlist,
+      db.sect2.info,
+      ((db.all.blocks+, db.sect2.sections?) | db.sect2.sections),
+      db.navigation.components*
+    }
+}
+db.sect3.sections = (db.sect4+, db.simplesect*) | db.simplesect+
+div {
+  db.sect3.status.attribute = db.status.attribute
+  db.sect3.role.attribute = attribute role { text }
+  db.sect3.attlist =
+    db.sect3.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.label.attribute?
+    & db.sect3.status.attribute?
+  db.sect3.info = db._info.title.req
+  db.sect3 =
+    
+    ## A subsection within a sect2
+    element sect3 {
+      db.sect3.attlist,
+      db.sect3.info,
+      ((db.all.blocks+, db.sect3.sections?) | db.sect3.sections),
+      db.navigation.components*
+    }
+}
+db.sect4.sections = (db.sect5+, db.simplesect*) | db.simplesect+
+div {
+  db.sect4.status.attribute = db.status.attribute
+  db.sect4.role.attribute = attribute role { text }
+  db.sect4.attlist =
+    db.sect4.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.label.attribute?
+    & db.sect4.status.attribute?
+  db.sect4.info = db._info.title.req
+  db.sect4 =
+    
+    ## A subsection within a sect3
+    element sect4 {
+      db.sect4.attlist,
+      db.sect4.info,
+      ((db.all.blocks+, db.sect4.sections?) | db.sect4.sections),
+      db.navigation.components*
+    }
+}
+db.sect5.sections = db.simplesect+
+div {
+  db.sect5.status.attribute = db.status.attribute
+  db.sect5.role.attribute = attribute role { text }
+  db.sect5.attlist =
+    db.sect5.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.label.attribute?
+    & db.sect5.status.attribute?
+  db.sect5.info = db._info.title.req
+  db.sect5 =
+    
+    ## A subsection within a sect4
+    element sect5 {
+      db.sect5.attlist,
+      db.sect5.info,
+      ((db.all.blocks+, db.sect5.sections?) | db.sect5.sections),
+      db.navigation.components*
+    }
+}
+db.toplevel.refsection = db.refsection+ | db.refsect1+
+db.secondlevel.refsection = db.refsection+ | db.refsect2+
+db.reference.components = db.refentry
+div {
+  db.reference.status.attribute = db.status.attribute
+  db.reference.role.attribute = attribute role { text }
+  db.reference.attlist =
+    db.reference.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.reference.status.attribute?
+    & db.label.attribute?
+  db.reference.info = db._info.title.req
+  db.reference =
+    
+    ## A collection of reference entries
+    element reference {
+      db.reference.attlist,
+      db.reference.info,
+      db.partintro?,
+      db.reference.components+
+    }
+}
+div {
+  db.refentry.status.attribute = db.status.attribute
+  db.refentry.role.attribute = attribute role { text }
+  db.refentry.attlist =
+    db.refentry.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.refentry.status.attribute?
+    & db.label.attribute?
+  db.refentry.info = db._info.title.forbidden
+  db.refentry =
+    
+    ## A reference page (originally a UNIX man-style reference page)
+    element refentry {
+      db.refentry.attlist,
+      db.indexterm*,
+      db.refentry.info,
+      db.refmeta?,
+      db.refnamediv+,
+      db.refsynopsisdiv?,
+      db.toplevel.refsection
+    }
+}
+div {
+  db.refmeta.role.attribute = attribute role { text }
+  db.refmeta.attlist =
+    db.refmeta.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.refmeta =
+    
+    ## Meta-information for a reference entry
+    element refmeta {
+      db.refmeta.attlist,
+      db.indexterm*,
+      db.refentrytitle,
+      db.manvolnum?,
+      db.refmiscinfo*,
+      db.indexterm*
+    }
+}
+db.refmiscinfo.class.enumeration =
+  
+  ## The name of the software product or component to which this topic applies
+  "source"
+  | 
+    ## The version of the software product or component to which this topic applies
+    "version"
+  | 
+    ## The section title of the reference page (e.g., User Commands)
+    "manual"
+  | 
+    ## The section title of the reference page (believed synonymous with "manual" but in wide use)
+    "sectdesc"
+  | 
+    ## The name of the software product or component to which this topic applies (e.g., SunOS x.y; believed synonymous with "source" but in wide use)
+    "software"
+db.refmiscinfo.class-enum.attribute =
+  
+  ## Identifies the kind of miscellaneous information
+  attribute class { db.refmiscinfo.class.enumeration }?
+db.refmiscinfo.class-other.attribute =
+  
+  ## Identifies the nature of non-standard miscellaneous information
+  attribute otherclass { text }
+db.refmiscinfo.class-other.attributes =
+  
+  ## Identifies the kind of miscellaneious information
+  attribute class {
+    
+    ## Indicates that the information is some 'other' kind.
+    "other"
+  }
+  & db.refmiscinfo.class-other.attribute
+db.refmiscinfo.class.attribute =
+  db.refmiscinfo.class-enum.attribute
+  | db.refmiscinfo.class-other.attributes
+div {
+  db.refmiscinfo.role.attribute = attribute role { text }
+  db.refmiscinfo.attlist =
+    db.refmiscinfo.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.refmiscinfo.class.attribute?
+  db.refmiscinfo =
+    
+    ## Meta-information for a reference entry other than the title and volume number
+    element refmiscinfo { db.refmiscinfo.attlist, db._text }
+}
+div {
+  db.refnamediv.role.attribute = attribute role { text }
+  db.refnamediv.attlist =
+    db.refnamediv.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.refnamediv =
+    
+    ## The name, purpose, and classification of a reference page
+    element refnamediv {
+      db.refnamediv.attlist,
+      db.refdescriptor?,
+      db.refname+,
+      db.refpurpose,
+      db.refclass*
+    }
+}
+div {
+  db.refdescriptor.role.attribute = attribute role { text }
+  db.refdescriptor.attlist =
+    db.refdescriptor.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.refdescriptor =
+    
+    ## A description of the topic of a reference page
+    element refdescriptor { db.refdescriptor.attlist, db.all.inlines* }
+}
+div {
+  db.refname.role.attribute = attribute role { text }
+  db.refname.attlist =
+    db.refname.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.refname =
+    
+    ## The name of (one of) the subject(s) of a reference page
+    element refname { db.refname.attlist, db.all.inlines* }
+}
+div {
+  db.refpurpose.role.attribute = attribute role { text }
+  db.refpurpose.attlist =
+    db.refpurpose.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.refpurpose =
+    
+    ## A short (one sentence) synopsis of the topic of a reference page
+    element refpurpose { db.refpurpose.attlist, db.all.inlines* }
+}
+div {
+  db.refclass.role.attribute = attribute role { text }
+  db.refclass.attlist =
+    db.refclass.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.refclass =
+    
+    ## The scope or other indication of applicability of a reference entry
+    element refclass { db.refclass.attlist, (text | db.application)* }
+}
+div {
+  db.refsynopsisdiv.role.attribute = attribute role { text }
+  db.refsynopsisdiv.attlist =
+    db.refsynopsisdiv.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.refsynopsisdiv.info = db._info
+  db.refsynopsisdiv =
+    
+    ## A syntactic synopsis of the subject of the reference page
+    element refsynopsisdiv {
+      db.refsynopsisdiv.attlist,
+      db.refsynopsisdiv.info,
+      ((db.all.blocks+, db.secondlevel.refsection?)
+       | db.secondlevel.refsection)
+    }
+}
+div {
+  db.refsection.status.attribute = db.status.attribute
+  db.refsection.role.attribute = attribute role { text }
+  db.refsection.attlist =
+    db.refsection.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.refsection.status.attribute?
+    & db.label.attribute?
+  db.refsection.info = db._info.title.req
+  db.refsection =
+    
+    ## A recursive section in a refentry
+    element refsection {
+      db.refsection.attlist,
+      db.refsection.info,
+      ((db.all.blocks+, db.refsection*) | db.refsection+)
+    }
+}
+db.refsect1.sections = db.refsect2+
+div {
+  db.refsect1.status.attribute = db.status.attribute
+  db.refsect1.role.attribute = attribute role { text }
+  db.refsect1.attlist =
+    db.refsect1.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.label.attribute?
+    & db.refsect1.status.attribute?
+  db.refsect1.info = db._info.title.req
+  db.refsect1 =
+    
+    ## A major subsection of a reference entry
+    element refsect1 {
+      db.refsect1.attlist,
+      db.refsect1.info,
+      ((db.all.blocks+, db.refsect1.sections?) | db.refsect1.sections)
+    }
+}
+db.refsect2.sections = db.refsect3+
+div {
+  db.refsect2.status.attribute = db.status.attribute
+  db.refsect2.role.attribute = attribute role { text }
+  db.refsect2.attlist =
+    db.refsect2.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.label.attribute?
+    & db.refsect2.status.attribute?
+  db.refsect2.info = db._info.title.req
+  db.refsect2 =
+    
+    ## A subsection of a refsect1
+    element refsect2 {
+      db.refsect2.attlist,
+      db.refsect2.info,
+      ((db.all.blocks+, db.refsect2.sections?) | db.refsect2.sections)
+    }
+}
+div {
+  db.refsect3.status.attribute = db.status.attribute
+  db.refsect3.role.attribute = attribute role { text }
+  db.refsect3.attlist =
+    db.refsect3.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.label.attribute?
+    & db.refsect3.status.attribute?
+  db.refsect3.info = db._info.title.req
+  db.refsect3 =
+    
+    ## A subsection of a refsect2
+    element refsect3 {
+      db.refsect3.attlist, db.refsect3.info, db.all.blocks+
+    }
+}
+db.glossary.inlines =
+  db.firstterm | db.glossterm | db._firstterm | db._glossterm
+db.baseform.attribute =
+  
+  ## Specifies the base form of the term, the one that appears in the glossary. This allows adjectival, plural, and other variations of the term to appear in the element. The element content is the default base form.
+  attribute baseform { text }?
+div {
+  db.glosslist.role.attribute = attribute role { text }
+  db.glosslist.attlist =
+    db.glosslist.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.glosslist.info = db._info.title.only
+  db.glosslist =
+    
+    ## A wrapper for a list of glossary entries
+    element glosslist {
+      db.glosslist.attlist,
+      db.glosslist.info?,
+      db.all.blocks*,
+      db.glossentry+
+    }
+}
+div {
+  db.glossentry.role.attribute = attribute role { text }
+  db.glossentry.sortas.attribute =
+    
+    ## Specifies the string by which the element's content is to be sorted; if unspecified, the content is used
+    attribute sortas { text }
+  db.glossentry.attlist =
+    db.glossentry.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.glossentry.sortas.attribute?
+  db.glossentry =
+    
+    ## An entry in a glossary or glosslist
+    element glossentry {
+      db.glossentry.attlist,
+      db.glossterm,
+      db.acronym?,
+      db.abbrev?,
+      db.indexterm*,
+      (db.glosssee | db.glossdef+)
+    }
+}
+div {
+  db.glossdef.role.attribute = attribute role { text }
+  db.glossdef.subject.attribute =
+    
+    ## Specifies a list of keywords for the definition
+    attribute subject { text }
+  db.glossdef.attlist =
+    db.glossdef.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.glossdef.subject.attribute?
+  db.glossdef =
+    
+    ## A definition in a glossentry
+    element glossdef {
+      db.glossdef.attlist, db.all.blocks+, db.glossseealso*
+    }
+}
+div {
+  db.glosssee.role.attribute = attribute role { text }
+  db.glosssee.otherterm.attribute =
+    
+    ## Identifies the other term
+    attribute otherterm { xsd:IDREF }
+  db.glosssee.attlist =
+    db.glosssee.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.glosssee.otherterm.attribute?
+  db.glosssee =
+    
+    ## A cross-reference from one glossentry
+    ##  to another
+    element glosssee { db.glosssee.attlist, db.all.inlines* }
+}
+div {
+  db.glossseealso.role.attribute = attribute role { text }
+  db.glossseealso.otherterm.attribute =
+    
+    ## Identifies the other term
+    attribute otherterm { xsd:IDREF }
+  db.glossseealso.attlist =
+    db.glossseealso.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.glossseealso.otherterm.attribute?
+  db.glossseealso =
+    
+    ## A cross-reference from one glossentry to another
+    element glossseealso { db.glossseealso.attlist, db.all.inlines* }
+}
+div {
+  db.firstterm.role.attribute = attribute role { text }
+  db.firstterm.attlist =
+    db.firstterm.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.baseform.attribute
+  db.firstterm =
+    
+    ## The first occurrence of a term
+    element firstterm { db.firstterm.attlist, db.all.inlines* }
+}
+div {
+  db._firstterm.role.attribute = attribute role { text }
+  db._firstterm.attlist =
+    db._firstterm.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.baseform.attribute
+  db._firstterm =
+    
+    ## The first occurrence of a term, with limited content
+    element firstterm { db._firstterm.attlist, db._text }
+}
+div {
+  db.glossterm.role.attribute = attribute role { text }
+  db.glossterm.attlist =
+    db.glossterm.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.baseform.attribute
+  db.glossterm =
+    
+    ## A glossary term
+    element glossterm { db.glossterm.attlist, db.all.inlines* }
+}
+div {
+  db._glossterm.role.attribute = attribute role { text }
+  db._glossterm.attlist =
+    db._glossterm.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.baseform.attribute
+  db._glossterm =
+    
+    ## A glossary term
+    element glossterm { db._glossterm.attlist, db._text }
+}
+div {
+  db.glossary.status.attribute = db.status.attribute
+  db.glossary.role.attribute = attribute role { text }
+  db.glossary.attlist =
+    db.glossary.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.label.attribute?
+    & db.glossary.status.attribute?
+  db.glossary.info = db._info
+  db.glossary =
+    
+    ## A glossary
+    element glossary {
+      db.glossary.attlist,
+      db.glossary.info,
+      db.all.blocks*,
+      (db.glossdiv* | db.glossentry*),
+      db.bibliography?
+    }
+}
+div {
+  db.glossdiv.status.attribute = db.status.attribute
+  db.glossdiv.role.attribute = attribute role { text }
+  db.glossdiv.attlist =
+    db.glossdiv.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.label.attribute?
+    & db.glossdiv.status.attribute?
+  db.glossdiv.info = db._info.title.req
+  db.glossdiv =
+    
+    ## A division in a glossary
+    element glossdiv {
+      db.glossdiv.attlist,
+      db.glossdiv.info,
+      db.all.blocks*,
+      db.glossentry+
+    }
+}
+div {
+  db.termdef.role.attribute = attribute role { text }
+  db.termdef.attlist =
+    db.termdef.role.attribute?
+    & db.glossentry.sortas.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.baseform.attribute
+  db.termdef =
+    
+    ## An inline definition of a term
+    element termdef { db.termdef.attlist, db.all.inlines* }
+}
+db.relation.attribute =
+  
+  ## Identifies the relationship between the bibliographic elemnts
+  attribute relation { text }
+div {
+  db.biblioentry.role.attribute = attribute role { text }
+  db.biblioentry.attlist =
+    db.biblioentry.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.biblioentry =
+    
+    ## A raw entry in a bibliography
+    element biblioentry {
+      db.biblioentry.attlist, db.bibliographic.elements+
+    }
+}
+div {
+  db.bibliomixed.role.attribute = attribute role { text }
+  db.bibliomixed.attlist =
+    db.bibliomixed.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.bibliomixed =
+    
+    ## A cooked entry in a bibliography
+    element bibliomixed {
+      db.bibliomixed.attlist,
+      ((db._text
+        | db.honorific
+        | db.firstname
+        | db.surname
+        | db.lineage
+        | db.othername
+        | db.bibliographic.elements)*
+       | (db._text
+          | db.honorific
+          | db.givenname
+          | db.surname
+          | db.lineage
+          | db.othername
+          | db.bibliographic.elements)*)
+    }
+}
+div {
+  db.biblioset.relation.attribute = db.relation.attribute
+  db.biblioset.role.attribute = attribute role { text }
+  db.biblioset.attlist =
+    db.biblioset.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.biblioset.relation.attribute?
+  db.biblioset =
+    
+    ## A raw container for related bibliographic information
+    element biblioset {
+      db.biblioset.attlist, db.bibliographic.elements+
+    }
+}
+div {
+  db.bibliomset.relation.attribute = db.relation.attribute
+  db.bibliomset.role.attribute = attribute role { text }
+  db.bibliomset.attlist =
+    db.bibliomset.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.bibliomset.relation.attribute?
+  db.bibliomset =
+    
+    ## A cooked container for related bibliographic information
+    element bibliomset {
+      db.bibliomset.attlist,
+      ((db._text
+        | db.honorific
+        | db.firstname
+        | db.surname
+        | db.lineage
+        | db.othername
+        | db.bibliographic.elements)*
+       | (db._text
+          | db.honorific
+          | db.givenname
+          | db.surname
+          | db.lineage
+          | db.othername
+          | db.bibliographic.elements)*)
+    }
+}
+div {
+  db.bibliomisc.role.attribute = attribute role { text }
+  db.bibliomisc.attlist =
+    db.bibliomisc.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.bibliomisc =
+    
+    ## Untyped bibliographic information
+    element bibliomisc { db.bibliomisc.attlist, db._text }
+}
+div {
+  db.bibliography.status.attrib = db.status.attribute
+  db.bibliography.role.attribute = attribute role { text }
+  db.bibliography.attlist =
+    db.bibliography.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.label.attribute?
+    & db.bibliography.status.attrib?
+  db.bibliography.info = db._info
+  db.bibliography =
+    
+    ## A bibliography
+    element bibliography {
+      db.bibliography.attlist,
+      db.bibliography.info,
+      db.all.blocks*,
+      (db.bibliodiv+ | (db.biblioentry | db.bibliomixed)+)
+    }
+}
+div {
+  db.bibliodiv.status.attrib = db.status.attribute
+  db.bibliodiv.role.attribute = attribute role { text }
+  db.bibliodiv.attlist =
+    db.bibliodiv.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.label.attribute?
+    & db.bibliodiv.status.attrib?
+  db.bibliodiv.info = db._info.title.req
+  db.bibliodiv =
+    
+    ## A section of a bibliography
+    element bibliodiv {
+      db.bibliodiv.attlist,
+      db.bibliodiv.info,
+      db.all.blocks*,
+      (db.biblioentry | db.bibliomixed)+
+    }
+}
+div {
+  db.bibliolist.role.attribute = attribute role { text }
+  db.bibliolist.attlist =
+    db.bibliolist.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.bibliolist.info = db._info.title.only
+  db.bibliolist =
+    
+    ## A wrapper for a list of bibliography entries
+    element bibliolist {
+      db.bibliolist.attlist,
+      db.bibliolist.info?,
+      db.all.blocks*,
+      (db.biblioentry | db.bibliomixed)+
+    }
+}
+div {
+  db.biblioref.role.attribute = attribute role { text }
+  db.biblioref.xrefstyle.attribute = db.xrefstyle.attribute
+  db.biblioref.endterm.attribute = db.endterm.attribute
+  db.biblioref.units.attribute =
+    
+    ## The units (for example, pages) used to identify the beginning and ending of a reference.
+    attribute units { xsd:token }
+  db.biblioref.begin.attribute =
+    
+    ## Identifies the beginning of a reference; the location within the work that is being referenced.
+    attribute begin { xsd:token }
+  db.biblioref.end.attribute =
+    
+    ## Identifies the end of a reference.
+    attribute end { xsd:token }
+  db.biblioref.attlist =
+    db.biblioref.role.attribute?
+    & db.common.attributes
+    & db.common.req.linking.attributes
+    & db.biblioref.xrefstyle.attribute?
+    & db.biblioref.endterm.attribute?
+    & db.biblioref.units.attribute?
+    & db.biblioref.begin.attribute?
+    & db.biblioref.end.attribute?
+  db.biblioref =
+    
+    ## A cross-reference to a bibliographic entry
+    element biblioref { db.biblioref.attlist, empty }
+}
+db.significance.enumeration =
+  
+  ## Normal
+  "normal"
+  | 
+    ## Preferred
+    "preferred"
+db.significance.attribute =
+  
+  ## Specifies the significance of the term
+  attribute significance { db.significance.enumeration }
+db.zone.attribute =
+  
+  ## Specifies the IDs of the elements to which this term applies
+  attribute zone { xsd:IDREFS }
+db.indexterm.pagenum.attribute =
+  
+  ## Indicates the page on which this index term occurs in some version of the printed document
+  attribute pagenum { text }
+db.scope.enumeration =
+  
+  ## All indexes
+  "all"
+  | 
+    ## The global index (as for a combined index of a set of books)
+    "global"
+  | 
+    ## The local index (the index for this document only)
+    "local"
+db.scope.attribute =
+  
+  ## Specifies the scope of the index term
+  attribute scope { db.scope.enumeration }
+db.sortas.attribute =
+  
+  ## Specifies the string by which the term is to be sorted; if unspecified, the term content is used
+  attribute sortas { text }
+db.index.type.attribute =
+  
+  ## Specifies the target index for this term
+  attribute type { text }
+div {
+  db.itermset.role.attribute = attribute role { text }
+  db.itermset.attlist =
+    db.itermset.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.itermset =
+    
+    ## A set of index terms in the meta-information of a document
+    element itermset { db.itermset.attlist, db.indexterm.singular+ }
+}
+db.indexterm.contentmodel =
+  db.primary?,
+  ((db.secondary,
+    ((db.tertiary, (db.see | db.seealso+)?)
+     | db.see
+     | db.seealso+)?)
+   | db.see
+   | db.seealso+)?
+div {
+  db.indexterm.singular.role.attribute = attribute role { text }
+  db.indexterm.singular.class.attribute =
+    
+    ## Identifies the class of index term
+    attribute class {
+      
+      ## A singular index term
+      "singular"
+    }
+  db.indexterm.singular.attlist =
+    db.indexterm.singular.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.significance.attribute?
+    & db.zone.attribute?
+    & db.indexterm.pagenum.attribute?
+    & db.scope.attribute?
+    & db.index.type.attribute?
+    & db.indexterm.singular.class.attribute?
+  db.indexterm.singular =
+    
+    ## A wrapper for an indexed term
+    element indexterm {
+      db.indexterm.singular.attlist, db.indexterm.contentmodel
+    }
+}
+div {
+  db.indexterm.startofrange.role.attribute = attribute role { text }
+  db.indexterm.startofrange.class.attribute =
+    
+    ## Identifies the class of index term
+    attribute class {
+      
+      ## The start of a range
+      "startofrange"
+    }
+  db.indexterm.startofrange.attlist =
+    db.indexterm.startofrange.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.significance.attribute?
+    & db.zone.attribute?
+    & db.indexterm.pagenum.attribute?
+    & db.scope.attribute?
+    & db.index.type.attribute?
+    & db.indexterm.startofrange.class.attribute
+  db.indexterm.startofrange =
+    
+    ## A wrapper for an indexed term that covers a range
+    element indexterm {
+      db.indexterm.startofrange.attlist, db.indexterm.contentmodel
+    }
+}
+div {
+  db.indexterm.endofrange.role.attribute = attribute role { text }
+  db.indexterm.endofrange.class.attribute =
+    
+    ## Identifies the class of index term
+    attribute class {
+      
+      ## The end of a range
+      "endofrange"
+    }
+  db.indexterm.endofrange.startref.attribute =
+    
+    ## Points to the start of the range
+    attribute startref { xsd:IDREF }
+  db.indexterm.endofrange.attlist =
+    db.indexterm.endofrange.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.indexterm.endofrange.class.attribute
+    & db.indexterm.endofrange.startref.attribute
+  db.indexterm.endofrange =
+    
+    ## Identifies the end of a range associated with an indexed term
+    element indexterm { db.indexterm.endofrange.attlist, empty }
+}
+div {
+  db.indexterm =
+    db.indexterm.singular
+    | db.indexterm.startofrange
+    | db.indexterm.endofrange
+}
+div {
+  db.primary.role.attribute = attribute role { text }
+  db.primary.attlist =
+    db.primary.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.sortas.attribute?
+  db.primary =
+    
+    ## The primary word or phrase under which an index term should be sorted
+    element primary { db.primary.attlist, db.all.inlines* }
+}
+div {
+  db.secondary.role.attribute = attribute role { text }
+  db.secondary.attlist =
+    db.secondary.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.sortas.attribute?
+  db.secondary =
+    
+    ## A secondary word or phrase in an index term
+    element secondary { db.secondary.attlist, db.all.inlines* }
+}
+div {
+  db.tertiary.role.attribute = attribute role { text }
+  db.tertiary.attlist =
+    db.tertiary.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.sortas.attribute?
+  db.tertiary =
+    
+    ## A tertiary word or phrase in an index term
+    element tertiary { db.tertiary.attlist, db.all.inlines* }
+}
+div {
+  db.see.role.attribute = attribute role { text }
+  db.see.attlist =
+    db.see.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.see =
+    
+    ## Part of an index term directing the reader instead to another entry in the index
+    element see { db.see.attlist, db.all.inlines* }
+}
+div {
+  db.seealso.role.attribute = attribute role { text }
+  db.seealso.attlist =
+    db.seealso.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.seealso =
+    
+    ## Part of an index term directing the reader also to another entry in the index
+    element seealso { db.seealso.attlist, db.all.inlines* }
+}
+div {
+  db.index.status.attribute = db.status.attribute
+  db.index.role.attribute = attribute role { text }
+  db.index.attlist =
+    db.index.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.label.attribute?
+    & db.index.status.attribute?
+    & db.index.type.attribute?
+  db.index.info = db._info
+  # 
+  # Yes, db.indexdiv* and db.indexentry*; that way an <index/> is valid.
+  # Authors can use an empty index to indicate where a generated index should
+  # appear.
+  db.index =
+    
+    ## An index to a book or part of a book
+    element index {
+      db.index.attlist,
+      db.index.info,
+      db.all.blocks*,
+      (db.indexdiv* | db.indexentry* | db.segmentedlist)
+    }
+}
+div {
+  db.setindex.status.attribute = db.status.attribute
+  db.setindex.role.attribute = attribute role { text }
+  db.setindex.attlist =
+    db.setindex.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.label.attribute?
+    & db.setindex.status.attribute?
+    & db.index.type.attribute?
+  db.setindex.info = db._info
+  db.setindex =
+    
+    ## An index to a set of books
+    element setindex {
+      db.setindex.attlist,
+      db.setindex.info,
+      db.all.blocks*,
+      (db.indexdiv* | db.indexentry*)
+    }
+}
+div {
+  db.indexdiv.status.attribute = db.status.attribute
+  db.indexdiv.role.attribute = attribute role { text }
+  db.indexdiv.attlist =
+    db.indexdiv.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.label.attribute?
+    & db.indexdiv.status.attribute?
+  db.indexdiv.info = db._info.title.req
+  db.indexdiv =
+    
+    ## A division in an index
+    element indexdiv {
+      db.indexdiv.attlist,
+      db.indexdiv.info,
+      db.all.blocks*,
+      (db.indexentry+ | db.segmentedlist)
+    }
+}
+div {
+  db.indexentry.role.attribute = attribute role { text }
+  db.indexentry.attlist =
+    db.indexentry.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.indexentry =
+    
+    ## An entry in an index
+    element indexentry {
+      db.indexentry.attlist,
+      db.primaryie,
+      (db.seeie | db.seealsoie)*,
+      (db.secondaryie, (db.seeie | db.seealsoie | db.tertiaryie)*)*
+    }
+}
+div {
+  db.primaryie.role.attribute = attribute role { text }
+  db.primaryie.attlist =
+    db.primaryie.role.attribute?
+    & db.common.attributes
+    & db.linkends.attribute?
+  db.primaryie =
+    
+    ## A primary term in an index entry, not in the text
+    element primaryie { db.primaryie.attlist, db.all.inlines* }
+}
+div {
+  db.secondaryie.role.attribute = attribute role { text }
+  db.secondaryie.attlist =
+    db.secondaryie.role.attribute?
+    & db.common.attributes
+    & db.linkends.attribute?
+  db.secondaryie =
+    
+    ## A secondary term in an index entry, rather than in the text
+    element secondaryie { db.secondaryie.attlist, db.all.inlines* }
+}
+div {
+  db.tertiaryie.role.attribute = attribute role { text }
+  db.tertiaryie.attlist =
+    db.tertiaryie.role.attribute?
+    & db.common.attributes
+    & db.linkends.attribute?
+  db.tertiaryie =
+    
+    ## A tertiary term in an index entry, rather than in the text
+    element tertiaryie { db.tertiaryie.attlist, db.all.inlines* }
+}
+div {
+  db.seeie.role.attribute = attribute role { text }
+  db.seeie.attlist =
+    db.seeie.role.attribute?
+    & db.common.attributes
+    & db.linkend.attribute?
+  db.seeie =
+    
+    ## A See
+    ## entry in an index, rather than in the text
+    element seeie { db.seeie.attlist, db.all.inlines* }
+}
+div {
+  db.seealsoie.role.attribute = attribute role { text }
+  db.seealsoie.attlist =
+    db.seealsoie.role.attribute?
+    & db.common.attributes
+    & db.linkends.attribute?
+  db.seealsoie =
+    
+    ## A See also
+    ##  entry in an index, rather than in the text
+    element seealsoie { db.seealsoie.attlist, db.all.inlines* }
+}
+db.toc.pagenum.attribute =
+  
+  ## Indicates the page on which this element occurs in some version of the printed document
+  attribute pagenum { text }
+div {
+  db.toc.role.attribute = attribute role { text }
+  db.toc.attlist =
+    db.toc.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.toc.info = db._info.title.only
+  db.toc =
+    
+    ## A table of contents
+    element toc {
+      db.toc.attlist,
+      db.toc.info,
+      db.all.blocks*,
+      (db.tocdiv | db.tocentry)*
+    }
+}
+div {
+  db.tocdiv.role.attribute = attribute role { text }
+  db.tocdiv.pagenum.attribute = db.toc.pagenum.attribute
+  db.tocdiv.attlist =
+    db.tocdiv.role.attribute?
+    & db.common.attributes
+    & db.tocdiv.pagenum.attribute?
+    & db.linkend.attribute?
+  db.tocdiv.info = db._info
+  db.tocdiv =
+    
+    ## A division in a table of contents
+    element tocdiv {
+      db.tocdiv.attlist,
+      db.tocdiv.info,
+      db.all.blocks*,
+      (db.tocdiv | db.tocentry)+
+    }
+}
+div {
+  db.tocentry.role.attribute = attribute role { text }
+  db.tocentry.pagenum.attribute = db.toc.pagenum.attribute
+  db.tocentry.attlist =
+    db.tocentry.role.attribute?
+    & db.common.attributes
+    & db.tocentry.pagenum.attribute?
+    & db.linkend.attribute?
+  db.tocentry =
+    
+    ## A component title in a table of contents
+    element tocentry { db.tocentry.attlist, db.all.inlines* }
+}
+db.task.info = db._info.title.req
+div {
+  db.task.role.attribute = attribute role { text }
+  db.task.attlist =
+    db.task.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.task =
+    
+    ## A task to be completed
+    element task {
+      db.task.attlist,
+      db.task.info,
+      db.tasksummary?,
+      db.taskprerequisites?,
+      db.procedure,
+      db.example*,
+      db.taskrelated?
+    }
+}
+div {
+  db.tasksummary.role.attribute = attribute role { text }
+  db.tasksummary.attlist =
+    db.tasksummary.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.tasksummary.info = db._info.title.only
+  db.tasksummary =
+    
+    ## A summary of a task
+    element tasksummary {
+      db.tasksummary.attlist, db.tasksummary.info, db.all.blocks+
+    }
+}
+div {
+  db.taskprerequisites.role.attribute = attribute role { text }
+  db.taskprerequisites.attlist =
+    db.taskprerequisites.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.taskprerequisites.info = db._info.title.only
+  db.taskprerequisites =
+    
+    ## The prerequisites for a task
+    element taskprerequisites {
+      db.taskprerequisites.attlist,
+      db.taskprerequisites.info,
+      db.all.blocks+
+    }
+}
+div {
+  db.taskrelated.role.attribute = attribute role { text }
+  db.taskrelated.attlist =
+    db.taskrelated.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.taskrelated.info = db._info.title.only
+  db.taskrelated =
+    
+    ## Information related to a task
+    element taskrelated {
+      db.taskrelated.attlist, db.taskrelated.info, db.all.blocks+
+    }
+}
+db.area.units.enumeration =
+  
+  ## Coordinates expressed as a pair of CALS graphic coordinates.
+  "calspair"
+  | 
+    ## Coordinates expressed as a line and column.
+    "linecolumn"
+  | 
+    ## Coordinates expressed as a pair of lines and columns.
+    "linecolumnpair"
+  | 
+    ## Coordinates expressed as a line range.
+    "linerange"
+db.area.units-enum.attribute =
+  
+  ## Identifies the units used in the coords attribute. The default units vary according to the type of callout specified: calspair
+  ##  for graphics and linecolumn
+  ##  for line-oriented elements.
+  attribute units { db.area.units.enumeration }?
+db.area.units-other.attributes =
+  
+  ## Indicates that non-standard units are used for this area
+  ## . In this case otherunits
+  ##  must be specified.
+  attribute units {
+    
+    ## Coordinates expressed in some non-standard units.
+    "other"
+  }?,
+  
+  ## Identifies the units used in the coords
+  ##  attribute when the units
+  ##  attribute is other
+  ## . This attribute is forbidden otherwise.
+  attribute otherunits { xsd:NMTOKEN }
+db.area.units.attribute =
+  db.area.units-enum.attribute | db.area.units-other.attributes
+div {
+  db.calloutlist.role.attribute = attribute role { text }
+  db.calloutlist.attlist =
+    db.calloutlist.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.calloutlist.info = db._info.title.only
+  db.calloutlist =
+    
+    ## A list of callout
+    ## s
+    element calloutlist {
+      db.calloutlist.attlist,
+      db.calloutlist.info,
+      db.all.blocks*,
+      db.callout+
+    }
+}
+div {
+  db.callout.role.attribute = attribute role { text }
+  db.callout.arearefs.attribute =
+    
+    ## Identifies the areas described by this callout.
+    attribute arearefs { xsd:IDREFS }
+  db.callout.attlist =
+    db.callout.role.attribute?
+    & db.common.attributes
+    & db.callout.arearefs.attribute
+  db.callout =
+    
+    ## A called out
+    ##  description of a marked area
+    element callout { db.callout.attlist, db.all.blocks+ }
+}
+div {
+  db.programlistingco.role.attribute = attribute role { text }
+  db.programlistingco.attlist =
+    db.programlistingco.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.programlistingco.info = db._info.title.forbidden
+  db.programlistingco =
+    
+    ## A program listing with associated areas used in callouts
+    element programlistingco {
+      db.programlistingco.attlist,
+      db.programlistingco.info,
+      db.areaspec,
+      db.programlisting,
+      db.calloutlist*
+    }
+}
+div {
+  db.areaspec.role.attribute = attribute role { text }
+  db.areaspec.attlist =
+    db.areaspec.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.area.units.attribute
+  db.areaspec =
+    
+    ## A collection of regions in a graphic or code example
+    element areaspec { db.areaspec.attlist, (db.area | db.areaset)+ }
+}
+div {
+  db.area.role.attribute = attribute role { text }
+  db.area.linkends.attribute =
+    
+    ## Point to the callout
+    ## s which refer to this area. (This provides bidirectional linking which may be useful in online presentation.)
+    attribute linkends { xsd:IDREFS }
+  db.area.label.attribute =
+    
+    ## Specifies an identifying number or string that may be used in presentation. The area label might be drawn on top of the figure, for example, at the position indicated by the coords attribute.
+    attribute label { text }
+  db.area.coords.attribute =
+    
+    ## Provides the coordinates of the area. The coordinates must be interpreted using the units
+    ##  specified.
+    attribute coords { text }
+  db.area.attlist =
+    db.area.role.attribute?
+    & db.common.idreq.attributes
+    & db.area.units.attribute
+    & (db.area.linkends.attribute | db.href.attributes)?
+    & db.area.label.attribute?
+    & db.area.coords.attribute
+  db.area =
+    
+    ## A region defined for a callout in a graphic or code example
+    element area { db.area.attlist, db.alt? }
+}
+div {
+  # The only difference is that xml:id is optional
+  db.area.inareaset.attlist =
+    db.area.role.attribute?
+    & db.common.attributes
+    & db.area.units.attribute
+    & (db.area.linkends.attribute | db.href.attributes)?
+    & db.area.label.attribute?
+    & db.area.coords.attribute
+  db.area.inareaset =
+    
+    ## A region defined for a callout in a graphic or code example
+    element area { db.area.inareaset.attlist, db.alt? }
+}
+div {
+  db.areaset.role.attribute = attribute role { text }
+  db.areaset.linkends.attribute = db.linkends.attribute
+  db.areaset.label.attribute = db.label.attribute
+  db.areaset.attlist =
+    db.areaset.role.attribute?
+    & db.common.idreq.attributes
+    & db.area.units.attribute
+    & (db.areaset.linkends.attribute | db.href.attributes)?
+    & db.areaset.label.attribute?
+  db.areaset =
+    
+    ## A set of related areas in a graphic or code example
+    element areaset { db.areaset.attlist, db.area.inareaset+ }
+}
+div {
+  db.screenco.role.attribute = attribute role { text }
+  db.screenco.attlist =
+    db.screenco.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.screenco.info = db._info.title.forbidden
+  db.screenco =
+    
+    ## A screen with associated areas used in callouts
+    element screenco {
+      db.screenco.attlist,
+      db.screenco.info,
+      db.areaspec,
+      db.screen,
+      db.calloutlist*
+    }
+}
+div {
+  db.imageobjectco.role.attribute = attribute role { text }
+  db.imageobjectco.attlist =
+    db.imageobjectco.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.imageobjectco.info = db._info.title.forbidden
+  db.imageobjectco =
+    
+    ## A wrapper for an image object with callouts
+    element imageobjectco {
+      db.imageobjectco.attlist,
+      db.imageobjectco.info,
+      db.areaspec,
+      db.imageobject+,
+      db.calloutlist*
+    }
+}
+div {
+  db.co.role.attribute = attribute role { text }
+  db.co.linkends.attribute = db.linkends.attribute
+  db.co.label.attribute = db.label.attribute
+  db.co.attlist =
+    db.co.role.attribute?
+    & db.common.idreq.attributes
+    & db.co.linkends.attribute?
+    & db.co.label.attribute?
+  db.co =
+    
+    ## The location of a callout embedded in text
+    element co { db.co.attlist, empty }
+}
+div {
+  db.coref.role.attribute = attribute role { text }
+  db.coref.label.attribute = db.label.attribute
+  db.coref.attlist =
+    db.coref.role.attribute?
+    & db.common.attributes
+    & db.linkend.attribute
+    & db.coref.label.attribute?
+  db.coref =
+    
+    ## A cross reference to a co
+    element coref { db.coref.attlist, empty }
+}
+div {
+  db.productionset.role.attribute = attribute role { text }
+  db.productionset.attlist =
+    db.productionset.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.productionset.info = db._info.title.only
+  db.productionset =
+    
+    ## A set of EBNF productions
+    element productionset {
+      db.productionset.attlist,
+      db.productionset.info,
+      (db.production | db.productionrecap)+
+    }
+}
+div {
+  db.production.role.attribute = attribute role { text }
+  db.production.attlist =
+    db.production.role.attribute?
+    & db.common.idreq.attributes
+    & db.common.linking.attributes
+  db.production =
+    
+    ## A production in a set of EBNF productions
+    element production {
+      db.production.attlist, db.lhs, db.rhs+, db.constraint*
+    }
+}
+div {
+  db.lhs.role.attribute = attribute role { text }
+  db.lhs.attlist =
+    db.lhs.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.lhs =
+    
+    ## The left-hand side of an EBNF production
+    element lhs { db.lhs.attlist, text }
+}
+div {
+  db.rhs.role.attribute = attribute role { text }
+  db.rhs.attlist =
+    db.rhs.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.rhs =
+    
+    ## The right-hand side of an EBNF production
+    element rhs {
+      db.rhs.attlist,
+      (text | db.nonterminal | db.lineannotation | db.sbr)*
+    }
+}
+div {
+  db.nonterminal.role.attribute = attribute role { text }
+  db.nonterminal.def.attribute =
+    
+    ## Specifies a URI that points to a production
+    ## where the nonterminal
+    ##  is defined
+    attribute def { xsd:anyURI }
+  db.nonterminal.attlist =
+    db.nonterminal.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.nonterminal.def.attribute
+  db.nonterminal =
+    
+    ## A non-terminal in an EBNF production
+    element nonterminal { db.nonterminal.attlist, text }
+}
+div {
+  db.constraint.role.attribute = attribute role { text }
+  db.constraint.attlist =
+    db.constraint.role.attribute?
+    & db.common.attributes
+    & db.common.req.linking.attributes
+  db.constraint =
+    
+    ## A constraint in an EBNF production
+    element constraint { db.constraint.attlist, empty }
+}
+div {
+  db.productionrecap.role.attribute = attribute role { text }
+  db.productionrecap.attlist =
+    db.productionrecap.role.attribute?
+    & db.common.attributes
+    & db.common.req.linking.attributes
+  db.productionrecap =
+    
+    ## A cross-reference to an EBNF production
+    element productionrecap { db.productionrecap.attlist, empty }
+}
+div {
+  db.constraintdef.role.attribute = attribute role { text }
+  db.constraintdef.attlist =
+    db.constraintdef.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.constraintdef.info = db._info.title.only
+  db.constraintdef =
+    
+    ## The definition of a constraint in an EBNF production
+    element constraintdef {
+      db.constraintdef.attlist, db.constraintdef.info, db.all.blocks+
+    }
+}
+db.char.attribute =
+  
+  ## Specifies the alignment character when align
+  ##  is set to char
+  ## .
+  attribute char { text }
+db.charoff.attribute =
+  
+  ## Specifies the percentage of the column's total width that should appear to the left of the first occurance of the character identified in char
+  ##  when align
+  ##  is set to char
+  ## .
+  attribute charoff {
+    xsd:decimal { minExclusive = "0" maxExclusive = "100" }
+  }
+db.frame.attribute =
+  
+  ## Specifies how the table is to be framed. Note that there is no way to obtain a border on only the starting edge (left, in left-to-right writing systems) of the table.
+  attribute frame {
+    
+    ## Frame all four sides of the table. In some environments with limited control over table border formatting, such as HTML, this may imply additional borders.
+    "all"
+    | 
+      ## Frame only the bottom of the table.
+      "bottom"
+    | 
+      ## Place no border on the table. In some environments with limited control over table border formatting, such as HTML, this may disable other borders as well.
+      "none"
+    | 
+      ## Frame the left and right sides of the table.
+      "sides"
+    | 
+      ## Frame the top of the table.
+      "top"
+    | 
+      ## Frame the top and bottom of the table.
+      "topbot"
+  }
+db.colsep.attribute =
+  
+  ## Specifies the presence or absence of the column separator
+  attribute colsep {
+    
+    ## No column separator rule.
+    "0"
+    | 
+      ## Provide a column separator rule on the right
+      "1"
+  }
+db.rowsep.attribute =
+  
+  ## Specifies the presence or absence of the row separator
+  attribute rowsep {
+    
+    ## No row separator rule.
+    "0"
+    | 
+      ## Provide a row separator rule below
+      "1"
+  }
+db.orient.attribute =
+  
+  ## Specifies the orientation of the table
+  attribute orient {
+    
+    ## 90 degrees counter-clockwise from the rest of the text flow.
+    "land"
+    | 
+      ## The same orientation as the rest of the text flow.
+      "port"
+  }
+db.tabstyle.attribute =
+  
+  ## Specifies the table style
+  attribute tabstyle { text }
+db.rowheader.attribute =
+  
+  ## Indicates whether or not the entries in the first column should be considered row headers
+  attribute rowheader {
+    
+    ## Indicates that entries in the first column of the table are functionally row headers (analogous to the way that a thead provides column headers).
+    "firstcol"
+    | 
+      ## Indicates that entries in the first column have no special significance with respect to column headers.
+      "norowheader"
+  }
+db.align.attribute =
+  
+  ## Specifies the horizontal alignment of text in an entry.
+  attribute align {
+    
+    ## Centered.
+    "center"
+    | 
+      ## Aligned on a particular character.
+      "char"
+    | 
+      ## Left and right justified.
+      "justify"
+    | 
+      ## Left justified.
+      "left"
+    | 
+      ## Right justified.
+      "right"
+  }
+db.valign.attribute =
+  
+  ## Specifies the vertical alignment of text in an entry.
+  attribute valign {
+    
+    ## Aligned on the bottom of the entry.
+    "bottom"
+    | 
+      ## Aligned in the middle.
+      "middle"
+    | 
+      ## Aligned at the top of the entry.
+      "top"
+  }
+db.specify-col-by-colname.attributes =
+  
+  ## Specifies a column specification by name.
+  attribute colname { text }
+db.specify-col-by-namest.attributes =
+  
+  ## Specifies a starting column by name.
+  attribute namest { text }
+db.specify-span-by-spanspec.attributes =
+  
+  ## Specifies a span by name.
+  attribute spanname { text }
+db.specify-span-directly.attributes =
+  
+  ## Specifies a starting column by name.
+  attribute namest { text }
+  & 
+    ## Specifies an ending column by name.
+    attribute nameend { text }
+db.column-spec.attributes =
+  db.specify-col-by-colname.attributes
+  | db.specify-col-by-namest.attributes
+  | db.specify-span-by-spanspec.attributes
+  | db.specify-span-directly.attributes
+db.colname.attribute =
+  
+  ## Provides a name for a column specification.
+  attribute colname { text }
+db.spanname.attribute =
+  
+  ## Provides a name for a span specification.
+  attribute spanname { text }
+div {
+  db.tgroup.role.attribute = attribute role { text }
+  db.tgroup.tgroupstyle.attribute =
+    
+    ## Additional style information for downstream processing; typically the name of a style.
+    attribute tgroupstyle { text }
+  db.tgroup.cols.attribute =
+    
+    ## The number of columns in the table. Must be an integer greater than zero.
+    attribute cols { xsd:positiveInteger }
+  db.tgroup.attlist =
+    db.tgroup.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.char.attribute?
+    & db.charoff.attribute?
+    & db.tgroup.tgroupstyle.attribute?
+    & db.tgroup.cols.attribute
+    & db.colsep.attribute?
+    & db.rowsep.attribute?
+    & db.align.attribute?
+  db.tgroup =
+    
+    ## A wrapper for the main content of a table, or part of a table
+    element tgroup {
+      db.tgroup.attlist,
+      db.colspec*,
+      db.spanspec*,
+      db.cals.thead?,
+      db.cals.tfoot?,
+      db.cals.tbody
+    }
+}
+div {
+  db.colspec.role.attribute = attribute role { text }
+  db.colspec.colnum.attribute =
+    
+    ## The number of the column to which this specification applies. Must be greater than any preceding column number. Defaults to one more than the number of the preceding column, if there is one, or one.
+    attribute colnum { xsd:positiveInteger }
+  db.colspec.colwidth.attribute =
+    
+    ## Specifies the width of the column.
+    attribute colwidth { text }
+  db.colspec.attlist =
+    db.colspec.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.colspec.colnum.attribute?
+    & db.char.attribute?
+    & db.colsep.attribute?
+    & db.colspec.colwidth.attribute?
+    & db.charoff.attribute?
+    & db.colname.attribute?
+    & db.rowsep.attribute?
+    & db.align.attribute?
+  db.colspec =
+    
+    ## Specifications for a column in a table
+    element colspec { db.colspec.attlist, empty }
+}
+div {
+  db.spanspec.role.attribute = attribute role { text }
+  db.spanspec.namest.attribute =
+    
+    ## Specifies a starting column by name.
+    attribute namest { text }
+  db.spanspec.nameend.attribute =
+    
+    ## Specifies an ending column by name.
+    attribute nameend { text }
+  db.spanspec.attlist =
+    db.spanspec.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.spanname.attribute
+    & db.spanspec.namest.attribute
+    & db.spanspec.nameend.attribute
+    & db.char.attribute?
+    & db.colsep.attribute?
+    & db.charoff.attribute?
+    & db.rowsep.attribute?
+    & db.align.attribute?
+  db.spanspec =
+    
+    ## Formatting information for a spanned column in a table
+    element spanspec { db.spanspec.attlist, empty }
+}
+div {
+  db.cals.thead.role.attribute = attribute role { text }
+  db.cals.thead.attlist =
+    db.cals.thead.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.valign.attribute?
+  db.cals.thead =
+    
+    ## A table header consisting of one or more rows
+    element thead { db.cals.thead.attlist, db.colspec*, db.row+ }
+}
+div {
+  db.cals.tfoot.role.attribute = attribute role { text }
+  db.cals.tfoot.attlist =
+    db.cals.tfoot.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.valign.attribute?
+  db.cals.tfoot =
+    
+    ## A table footer consisting of one or more rows
+    element tfoot { db.cals.tfoot.attlist, db.colspec*, db.row+ }
+}
+div {
+  db.cals.tbody.role.attribute = attribute role { text }
+  db.cals.tbody.attlist =
+    db.cals.tbody.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.valign.attribute?
+  db.cals.tbody =
+    
+    ## A wrapper for the rows of a table or informal table
+    element tbody { db.cals.tbody.attlist, db.row+ }
+}
+div {
+  db.row.role.attribute = attribute role { text }
+  db.row.attlist =
+    db.row.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.rowsep.attribute?
+    & db.valign.attribute?
+  db.row =
+    
+    ## A row in a table
+    element row { db.row.attlist, (db.entry | db.entrytbl)+ }
+}
+div {
+  db.entry.role.attribute = attribute role { text }
+  db.entry.morerows.attribute =
+    
+    ## Specifies the number of additional rows which this entry occupies. Defaults to zero.
+    attribute morerows { xsd:integer }
+  db.entry.rotate.attribute =
+    
+    ## Specifies the rotation of this entry. A value of 1 (true) rotates the cell 90 degrees counter-clockwise. A value of 0 (false) leaves the cell unrotated.
+    attribute rotate {
+      
+      ## Do not rotate the cell.
+      "0"
+      | 
+        ## Rotate the cell 90 degrees counter-clockwise.
+        "1"
+    }
+  db.entry.attlist =
+    db.entry.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.valign.attribute?
+    & db.char.attribute?
+    & db.colsep.attribute?
+    & db.charoff.attribute?
+    & db.entry.morerows.attribute?
+    & db.column-spec.attributes?
+    & db.rowsep.attribute?
+    & db.entry.rotate.attribute?
+    & db.align.attribute?
+  db.entry =
+    
+    ## A cell in a table
+    element entry {
+      db.entry.attlist, (db.all.inlines* | db.all.blocks*)
+    }
+}
+div {
+  db.entrytbl.role.attribute = attribute role { text }
+  db.entrytbl.tgroupstyle.attribute =
+    
+    ## Additional style information for downstream processing; typically the name of a style.
+    attribute tgroupstyle { text }
+  db.entrytbl.cols.attribute =
+    
+    ## The number of columns in the entry table. Must be an integer greater than zero.
+    attribute cols { xsd:positiveInteger }
+  db.entrytbl.attlist =
+    db.entrytbl.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.char.attribute?
+    & db.charoff.attribute?
+    & db.column-spec.attributes?
+    & db.entrytbl.tgroupstyle.attribute?
+    & db.entrytbl.cols.attribute?
+    & db.colsep.attribute?
+    & db.rowsep.attribute?
+    & db.align.attribute?
+  db.entrytbl =
+    
+    ## A subtable appearing in place of an entry in a table
+    element entrytbl {
+      db.entrytbl.attlist,
+      db.colspec*,
+      db.spanspec*,
+      db.cals.entrytbl.thead?,
+      db.cals.entrytbl.tbody
+    }
+}
+div {
+  db.cals.entrytbl.thead.role.attribute = attribute role { text }
+  db.cals.entrytbl.thead.attlist =
+    db.cals.entrytbl.thead.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.valign.attribute?
+  db.cals.entrytbl.thead =
+    
+    ## A table header consisting of one or more rows
+    element thead {
+      db.cals.entrytbl.thead.attlist, db.colspec*, db.entrytbl.row+
+    }
+}
+div {
+  db.cals.entrytbl.tbody.role.attribute = attribute role { text }
+  db.cals.entrytbl.tbody.attlist =
+    db.cals.entrytbl.tbody.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.valign.attribute?
+  db.cals.entrytbl.tbody =
+    
+    ## A wrapper for the rows of a table or informal table
+    element tbody { db.cals.entrytbl.tbody.attlist, db.entrytbl.row+ }
+}
+div {
+  db.entrytbl.row.role.attribute = attribute role { text }
+  db.entrytbl.row.attlist =
+    db.entrytbl.row.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.rowsep.attribute?
+    & db.valign.attribute?
+  db.entrytbl.row =
+    
+    ## A row in a table
+    element row { db.entrytbl.row.attlist, db.entry+ }
+}
+div {
+  db.cals.table.role.attribute = attribute role { text }
+  db.cals.table.label.attribute = db.label.attribute
+  db.cals.table.attlist =
+    db.cals.table.role.attribute?
+    & db.cals.table.label.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.tabstyle.attribute?
+    & db.floatstyle.attribute?
+    & db.orient.attribute?
+    & db.colsep.attribute?
+    & db.rowsep.attribute?
+    & db.frame.attribute?
+    & db.pgwide.attribute?
+    & 
+      ## Indicates if the short or long title should be used in a List of Tables
+      attribute shortentry {
+        
+        ## Indicates that the full title should be used.
+        "0"
+        | 
+          ## Indicates that the short short title (titleabbrev) should be used.
+          "1"
+      }?
+    & 
+      ## Indicates if the table should appear in a List of Tables
+      attribute tocentry {
+        
+        ## Indicates that the table should not occur in the List of Tables.
+        "0"
+        | 
+          ## Indicates that the table should appear in the List of Tables.
+          "1"
+      }?
+    & db.rowheader.attribute?
+  db.cals.table.info = db._info.title.onlyreq
+  db.cals.table =
+    
+    ## A formal table in a document
+    element table {
+      db.cals.table.attlist,
+      db.cals.table.info,
+      (db.alt? & db.indexing.inlines* & db.textobject*),
+      (db.mediaobject+ | db.tgroup+),
+      db.caption?
+    }
+}
+div {
+  db.cals.informaltable.role.attribute = attribute role { text }
+  db.cals.informaltable.attlist =
+    db.cals.informaltable.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.tabstyle.attribute?
+    & db.floatstyle.attribute?
+    & db.orient.attribute?
+    & db.colsep.attribute?
+    & db.rowsep.attribute?
+    & db.frame.attribute?
+    & db.pgwide.attribute?
+    & db.rowheader.attribute?
+  db.cals.informaltable.info = db._info.title.forbidden
+  db.cals.informaltable =
+    
+    ## A table without a title
+    element informaltable {
+      db.cals.informaltable.attlist,
+      db.cals.informaltable.info,
+      (db.alt? & db.indexing.inlines* & db.textobject*),
+      (db.mediaobject+ | db.tgroup+),
+      db.caption?
+    }
+}
+db.html.coreattrs =
+  
+  ## This attribute assigns a class name or set of class names to an element. Any number of elements may be assigned the same class name or names. Multiple class names must be separated by white space characters.
+  attribute class { text }?
+  & 
+    ## This attribute specifies style information for the current element.
+    attribute style { text }?
+  & 
+    ## This attribute offers advisory information about the element for which it is set.
+    attribute title { text }?
+db.html.i18n =
+  
+  ## This attribute specifies the base language of an element's attribute values and text content. The default value of this attribute is unknown.
+  attribute lang { text }?
+db.html.events =
+  
+  ## Occurs when the pointing device button is clicked over an element.
+  attribute onclick { text }?
+  & 
+    ## Occurs when the pointing device button is double clicked over an element.
+    attribute ondblclick { text }?
+  & 
+    ## Occurs when the pointing device button is pressed over an element.
+    attribute onmousedown { text }?
+  & 
+    ## Occurs when the pointing device button is released over an element.
+    attribute onmouseup { text }?
+  & 
+    ## Occurs when the pointing device is moved onto an element.
+    attribute onmouseover { text }?
+  & 
+    ## Occurs when the pointing device is moved while it is over an element.
+    attribute onmousemove { text }?
+  & 
+    ## Occurs when the pointing device is moved away from an element.
+    attribute onmouseout { text }?
+  & 
+    ## Occurs when a key is pressed and released over an element.
+    attribute onkeypress { text }?
+  & 
+    ## Occurs when a key is pressed down over an element.
+    attribute onkeydown { text }?
+  & 
+    ## Occurs when a key is released over an element.
+    attribute onkeyup { text }?
+db.html.attrs =
+  db.common.attributes
+  & db.html.coreattrs
+  & db.html.i18n
+  & db.html.events
+db.html.cellhalign =
+  
+  ## Specifies the alignment of data and the justification of text in a cell.
+  attribute align {
+    
+    ## Left-flush data/Left-justify text. This is the default value for table data.
+    "left"
+    | 
+      ## Center data/Center-justify text. This is the default value for table headers.
+      "center"
+    | 
+      ## Right-flush data/Right-justify text.
+      "right"
+    | 
+      ## Double-justify text.
+      "justify"
+    | 
+      ## Align text around a specific character. If a user agent doesn't support character alignment, behavior in the presence of this value is unspecified.
+      "char"
+  }?
+  & 
+    ## This attribute specifies a single character within a text fragment to act as an axis for alignment. The default value for this attribute is the decimal point character for the current language as set by the lang attribute (e.g., the period in English and the comma in French). User agents are not required to support this attribute.
+    attribute char { text }?
+  & 
+    ## When present, this attribute specifies the offset to the first occurrence of the alignment character on each line. If a line doesn't include the alignment character, it should be horizontally shifted to end at the alignment position. When charoff is used to set the offset of an alignment character, the direction of offset is determined by the current text direction (set by the dir attribute). In left-to-right texts (the default), offset is from the left margin. In right-to-left texts, offset is from the right margin. User agents are not required to support this attribute.
+    attribute charoff {
+      xsd:integer >> a:documentation [ "An explicit offset." ]
+      | xsd:string { pattern = "[0-9]+%" }
+        >> a:documentation [ "A percentage offset." ]
+    }?
+db.html.cellvalign =
+  
+  ## Specifies the vertical position of data within a cell.
+  attribute valign {
+    
+    ## Cell data is flush with the top of the cell.
+    "top"
+    | 
+      ## Cell data is centered vertically within the cell. This is the default value.
+      "middle"
+    | 
+      ## Cell data is flush with the bottom of the cell.
+      "bottom"
+    | 
+      ## All cells in the same row as a cell whose valign attribute has this value should have their textual data positioned so that the first text line occurs on a baseline common to all cells in the row. This constraint does not apply to subsequent text lines in these cells.
+      "baseline"
+  }?
+db.html.table.attributes =
+  
+  ## Provides a summary of the table's purpose and structure for user agents rendering to non-visual media such as speech and Braille.
+  attribute summary { text }?
+  & 
+    ## Specifies the desired width of the entire table and is intended for visual user agents. When the value is a percentage value, the value is relative to the user agent's available horizontal space. In the absence of any width specification, table width is determined by the user agent.
+    attribute width {
+      xsd:integer >> a:documentation [ "An explicit width." ]
+      | xsd:string { pattern = "[0-9]+%" }
+        >> a:documentation [ "A percentage width." ]
+    }?
+  & 
+    ## Specifies the width (in pixels only) of the frame around a table.
+    attribute border { xsd:nonNegativeInteger }?
+  & 
+    ## Specifies which sides of the frame surrounding a table will be visible.
+    attribute frame {
+      
+      ## No sides. This is the default value.
+      "void"
+      | 
+        ## The top side only.
+        "above"
+      | 
+        ## The bottom side only.
+        "below"
+      | 
+        ## The top and bottom sides only.
+        "hsides"
+      | 
+        ## The left-hand side only.
+        "lhs"
+      | 
+        ## The right-hand side only.
+        "rhs"
+      | 
+        ## The right and left sides only.
+        "vsides"
+      | 
+        ## All four sides.
+        "box"
+      | 
+        ## All four sides.
+        "border"
+    }?
+  & 
+    ## Specifies which rules will appear between cells within a table. The rendering of rules is user agent dependent.
+    attribute rules {
+      
+      ## No rules. This is the default value.
+      "none"
+      | 
+        ## Rules will appear between row groups (see thead, tfoot, and tbody) and column groups (see colgroup and col) only.
+        "groups"
+      | 
+        ## Rules will appear between rows only.
+        "rows"
+      | 
+        ## Rules will appear between columns only.
+        "cols"
+      | 
+        ## Rules will appear between all rows and columns.
+        "all"
+    }?
+  & 
+    ## Specifies how much space the user agent should leave between the left side of the table and the left-hand side of the leftmost column, the top of the table and the top side of the topmost row, and so on for the right and bottom of the table. The attribute also specifies the amount of space to leave between cells.
+    attribute cellspacing {
+      xsd:integer >> a:documentation [ "An explicit spacing." ]
+      | xsd:string { pattern = "[0-9]+%" }
+        >> a:documentation [ "A percentage spacing." ]
+    }?
+  & 
+    ## Specifies the amount of space between the border of the cell and its contents. If the value of this attribute is a pixel length, all four margins should be this distance from the contents. If the value of the attribute is a percentage length, the top and bottom margins should be equally separated from the content based on a percentage of the available vertical space, and the left and right margins should be equally separated from the content based on a percentage of the available horizontal space.
+    attribute cellpadding {
+      xsd:integer >> a:documentation [ "An explicit padding." ]
+      | xsd:string { pattern = "[0-9]+%" }
+        >> a:documentation [ "A percentage padding." ]
+    }?
+db.html.tablecell.attributes =
+  
+  ## Provides an abbreviated form of the cell's content and may be rendered by user agents when appropriate in place of the cell's content. Abbreviated names should be short since user agents may render them repeatedly. For instance, speech synthesizers may render the abbreviated headers relating to a particular cell before rendering that cell's content.
+  attribute abbr { text }?
+  & 
+    ## This attribute may be used to place a cell into conceptual categories that can be considered to form axes in an n-dimensional space. User agents may give users access to these categories (e.g., the user may query the user agent for all cells that belong to certain categories, the user agent may present a table in the form of a table of contents, etc.). Please consult an HTML reference for more details.
+    attribute axis { text }?
+  & 
+    ## Specifies the list of header cells that provide header information for the current data cell. The value of this attribute is a space-separated list of cell names; those cells must be named by setting their id attribute. Authors generally use the headers attribute to help non-visual user agents render header information about data cells (e.g., header information is spoken prior to the cell data), but the attribute may also be used in conjunction with style sheets.
+    attribute headers { text }?
+  & 
+    ## Specifies the set of data cells for which the current header cell provides header information. This attribute may be used in place of the headers attribute, particularly for simple tables.
+    attribute scope {
+      
+      ## The current cell provides header information for the rest of the row that contains it
+      "row"
+      | 
+        ## The current cell provides header information for the rest of the column that contains it.
+        "col"
+      | 
+        ## The header cell provides header information for the rest of the row group that contains it.
+        "rowgroup"
+      | 
+        ## The header cell provides header information for the rest of the column group that contains it.
+        "colgroup"
+    }?
+  & 
+    ## Specifies the number of rows spanned by the current cell. The default value of this attribute is one (1
+    ## ). The value zero (0
+    ## ) means that the cell spans all rows from the current row to the last row of the table section (thead
+    ## , tbody
+    ## , or tfoot
+    ## ) in which the cell is defined.
+    attribute rowspan { xsd:nonNegativeInteger }?
+  & 
+    ## Specifies the number of columns spanned by the current cell. The default value of this attribute is one (1
+    ## ). The value zero (0
+    ## ) means that the cell spans all columns from the current column to the last column of the column group (colgroup
+    ## ) in which the cell is defined.
+    attribute colspan { xsd:nonNegativeInteger }?
+db.html.table.info = db._info.title.forbidden
+db.html.table.model =
+  db.html.table.info?,
+  db.html.caption,
+  (db.html.col* | db.html.colgroup*),
+  db.html.thead?,
+  db.html.tfoot?,
+  (db.html.tbody+ | db.html.tr+)
+db.html.informaltable.info = db._info.title.forbidden
+db.html.informaltable.model =
+  db.html.informaltable.info?,
+  (db.html.col* | db.html.colgroup*),
+  db.html.thead?,
+  db.html.tfoot?,
+  (db.html.tbody+ | db.html.tr+)
+div {
+  db.html.table.role.attribute = attribute role { text }
+  db.html.table.label.attribute = db.label.attribute
+  db.html.table.attlist =
+    db.html.attrs
+    & db.html.table.attributes
+    & db.html.table.role.attribute?
+    & db.html.table.label.attribute?
+    & db.orient.attribute?
+    & db.pgwide.attribute?
+    & db.tabstyle.attribute?
+    & db.floatstyle.attribute?
+  db.html.table =
+    
+    ## A formal (captioned) HTML table in a document
+    element table { db.html.table.attlist, db.html.table.model }
+}
+div {
+  db.html.informaltable.role.attribute = attribute role { text }
+  db.html.informaltable.label.attribute = db.label.attribute
+  db.html.informaltable.attlist =
+    db.html.attrs
+    & db.html.table.attributes
+    & db.html.informaltable.role.attribute?
+    & db.html.informaltable.label.attribute?
+    & db.orient.attribute?
+    & db.pgwide.attribute?
+    & db.tabstyle.attribute?
+    & db.floatstyle.attribute?
+  db.html.informaltable =
+    
+    ## An HTML table without a title
+    element informaltable {
+      db.html.informaltable.attlist, db.html.informaltable.model
+    }
+}
+div {
+  db.html.caption.attlist = db.html.attrs
+  db.html.caption =
+    
+    ## An HTML table caption
+    element caption { db.html.caption.attlist, db.all.inlines* }
+}
+div {
+  db.html.col.attlist =
+    db.html.attrs
+    & 
+      ## This attribute, whose value must be an integer > 0, specifies the number of columns spanned
+      ##  by the col
+      ##  element; the col
+      ##  element shares its attributes with all the columns it spans. The default value for this attribute is 1 (i.e., a single column). If the span attribute is set to N > 1, the current col
+      ##  element shares its attributes with the next N-1 columns.
+      attribute span { xsd:nonNegativeInteger }?
+    & 
+      ## Specifies a default width for each column spanned by the current col
+      ##  element. It has the same meaning as the width
+      ##  attribute for the colgroup
+      ##  element and overrides it.
+      attribute width { text }?
+    & db.html.cellhalign
+    & db.html.cellvalign
+  db.html.col =
+    
+    ## Specifications for a column in an HTML table
+    element col { db.html.col.attlist, empty }
+}
+div {
+  db.html.colgroup.attlist =
+    db.html.attrs
+    & 
+      ## This attribute, which must be an integer > 0, specifies the number of columns in a column group. In the absence of a span attribute, each colgroup
+      ##  defines a column group containing one column. If the span attribute is set to N > 0, the current colgroup
+      ##  element defines a column group containing N columns. User agents must ignore this attribute if the colgroup
+      ##  element contains one or more col
+      ##  elements.
+      attribute span { xsd:nonNegativeInteger }?
+    & 
+      ## This attribute specifies a default width for each column in the current column group. In addition to the standard pixel, percentage, and relative values, this attribute allows the special form 0*
+      ##  (zero asterisk) which means that the width of the each column in the group should be the minimum width necessary to hold the column's contents. This implies that a column's entire contents must be known before its width may be correctly computed. Authors should be aware that specifying 0*
+      ##  will prevent visual user agents from rendering a table incrementally. This attribute is overridden for any column in the column group whose width is specified via a col
+      ##  element.
+      attribute width { text }?
+    & db.html.cellhalign
+    & db.html.cellvalign
+  db.html.colgroup =
+    
+    ## A group of columns in an HTML table
+    element colgroup { db.html.colgroup.attlist, db.html.col* }
+}
+div {
+  db.html.thead.attlist =
+    db.html.attrs & db.html.cellhalign & db.html.cellvalign
+  db.html.thead =
+    
+    ## A table header consisting of one or more rows in an HTML table
+    element thead { db.html.thead.attlist, db.html.tr+ }
+}
+div {
+  db.html.tfoot.attlist =
+    db.html.attrs & db.html.cellhalign & db.html.cellvalign
+  db.html.tfoot =
+    
+    ## A table footer consisting of one or more rows in an HTML table
+    element tfoot { db.html.tfoot.attlist, db.html.tr+ }
+}
+div {
+  db.html.tbody.attlist =
+    db.html.attrs & db.html.cellhalign & db.html.cellvalign
+  db.html.tbody =
+    
+    ## A wrapper for the rows of an HTML table or informal HTML table
+    element tbody { db.html.tbody.attlist, db.html.tr+ }
+}
+div {
+  db.html.tr.attlist =
+    db.html.attrs & db.html.cellhalign & db.html.cellvalign
+  db.html.tr =
+    
+    ## A row in an HTML table
+    element tr { db.html.tr.attlist, (db.html.th | db.html.td)+ }
+}
+div {
+  db.html.th.attlist =
+    db.html.attrs
+    & db.html.tablecell.attributes
+    & db.html.cellhalign
+    & db.html.cellvalign
+  db.html.th =
+    
+    ## A table header entry in an HTML table
+    element th {
+      db.html.th.attlist, (db.all.inlines* | db.all.blocks*)
+    }
+}
+div {
+  db.html.td.attlist =
+    db.html.attrs
+    & db.html.tablecell.attributes
+    & db.html.cellhalign
+    & db.html.cellvalign
+  db.html.td =
+    
+    ## A table entry in an HTML table
+    element td {
+      db.html.td.attlist, (db.all.inlines* | db.all.blocks*)
+    }
+}
+div {
+  db.msgset.role.attribute = attribute role { text }
+  db.msgset.attlist =
+    db.msgset.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.msgset.info = db._info.title.only
+  db.msgset =
+    
+    ## A detailed set of messages, usually error messages
+    element msgset {
+      db.msgset.attlist,
+      db.msgset.info,
+      (db.msgentry+ | db.simplemsgentry+)
+    }
+}
+div {
+  db.msgentry.role.attribute = attribute role { text }
+  db.msgentry.attlist =
+    db.msgentry.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.msgentry =
+    
+    ## A wrapper for an entry in a message set
+    element msgentry {
+      db.msgentry.attlist, db.msg+, db.msginfo?, db.msgexplan*
+    }
+}
+div {
+  db.simplemsgentry.role.attribute = attribute role { text }
+  db.simplemsgentry.msgaud.attribute =
+    
+    ## The audience to which the message relevant
+    attribute msgaud { text }
+  db.simplemsgentry.msgorig.attribute =
+    
+    ## The origin of the message
+    attribute msgorig { text }
+  db.simplemsgentry.msglevel.attribute =
+    
+    ## The level of importance or severity of a message
+    attribute msglevel { text }
+  db.simplemsgentry.attlist =
+    db.simplemsgentry.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.simplemsgentry.msgaud.attribute?
+    & db.simplemsgentry.msgorig.attribute?
+    & db.simplemsgentry.msglevel.attribute?
+  db.simplemsgentry =
+    
+    ## A wrapper for a simpler entry in a message set
+    element simplemsgentry {
+      db.simplemsgentry.attlist, db.msgtext, db.msgexplan+
+    }
+}
+div {
+  db.msg.role.attribute = attribute role { text }
+  db.msg.attlist =
+    db.msg.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.msg.info = db._info.title.only
+  db.msg =
+    
+    ## A message in a message set
+    element msg {
+      db.msg.attlist, db.msg.info, db.msgmain, (db.msgsub | db.msgrel)*
+    }
+}
+div {
+  db.msgmain.role.attribute = attribute role { text }
+  db.msgmain.attlist =
+    db.msgmain.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.msgmain.info = db._info.title.only
+  db.msgmain =
+    
+    ## The primary component of a message in a message set 
+    element msgmain { db.msgmain.attlist, db.msgmain.info, db.msgtext }
+}
+div {
+  db.msgsub.role.attribute = attribute role { text }
+  db.msgsub.attlist =
+    db.msgsub.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.msgsub.info = db._info.title.only
+  db.msgsub =
+    
+    ## A subcomponent of a message in a message set
+    element msgsub { db.msgsub.attlist, db.msgsub.info, db.msgtext }
+}
+div {
+  db.msgrel.role.attribute = attribute role { text }
+  db.msgrel.attlist =
+    db.msgrel.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.msgrel.info = db._info.title.only
+  db.msgrel =
+    
+    ## A related component of a message in a message set
+    element msgrel { db.msgrel.attlist, db.msgrel.info, db.msgtext }
+}
+div {
+  db.msgtext.role.attribute = attribute role { text }
+  db.msgtext.attlist =
+    db.msgtext.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.msgtext =
+    
+    ## The actual text of a message component in a message set
+    element msgtext { db.msgtext.attlist, db.all.blocks+ }
+}
+div {
+  db.msginfo.role.attribute = attribute role { text }
+  db.msginfo.attlist =
+    db.msginfo.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.msginfo =
+    
+    ## Information about a message in a message set
+    element msginfo {
+      db.msginfo.attlist, (db.msglevel | db.msgorig | db.msgaud)*
+    }
+}
+div {
+  db.msglevel.role.attribute = attribute role { text }
+  db.msglevel.attlist =
+    db.msglevel.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.msglevel =
+    
+    ## The level of importance or severity of a message in a message set
+    element msglevel { db.msglevel.attlist, db._text }
+}
+div {
+  db.msgorig.role.attribute = attribute role { text }
+  db.msgorig.attlist =
+    db.msgorig.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.msgorig =
+    
+    ## The origin of a message in a message set
+    element msgorig { db.msgorig.attlist, db._text }
+}
+div {
+  db.msgaud.role.attribute = attribute role { text }
+  db.msgaud.attlist =
+    db.msgaud.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.msgaud =
+    
+    ## The audience to which a message in a message set is relevant
+    element msgaud { db.msgaud.attlist, db._text }
+}
+div {
+  db.msgexplan.role.attribute = attribute role { text }
+  db.msgexplan.attlist =
+    db.msgexplan.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.msgexplan.info = db._info.title.only
+  db.msgexplan =
+    
+    ## Explanatory material relating to a message in a message set
+    element msgexplan {
+      db.msgexplan.attlist, db.msgexplan.info, db.all.blocks+
+    }
+}
+div {
+  db.qandaset.role.attribute = attribute role { text }
+  db.qandaset.defaultlabel.enumeration =
+    
+    ## No labels
+    "none"
+    | 
+      ## Numeric labels
+      "number"
+    | 
+      ## "Q:" and "A:" labels
+      "qanda"
+  db.qandaset.defaultlabel.attribute =
+    
+    ## Specifies the default labelling
+    attribute defaultlabel { db.qandaset.defaultlabel.enumeration }
+  db.qandaset.attlist =
+    db.qandaset.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.qandaset.defaultlabel.attribute?
+  db.qandaset.info = db._info.title.only
+  db.qandaset =
+    
+    ## A question-and-answer set
+    element qandaset {
+      db.qandaset.attlist,
+      db.qandaset.info,
+      db.all.blocks*,
+      (db.qandadiv+ | db.qandaentry+)
+    }
+}
+div {
+  db.qandadiv.role.attribute = attribute role { text }
+  db.qandadiv.attlist =
+    db.qandadiv.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.qandadiv.info = db._info.title.only
+  db.qandadiv =
+    
+    ## A titled division in a qandaset
+    element qandadiv {
+      db.qandadiv.attlist,
+      db.qandadiv.info,
+      db.all.blocks*,
+      (db.qandadiv+ | db.qandaentry+)
+    }
+}
+div {
+  db.qandaentry.role.attribute = attribute role { text }
+  db.qandaentry.attlist =
+    db.qandaentry.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.qandaentry.info = db._info.title.only
+  db.qandaentry =
+    
+    ## A question/answer set within a qandaset
+    element qandaentry {
+      db.qandaentry.attlist, db.qandaentry.info, db.question, db.answer*
+    }
+}
+div {
+  db.question.role.attribute = attribute role { text }
+  db.question.attlist =
+    db.question.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.question =
+    
+    ## A question in a qandaset
+    element question { db.question.attlist, db.label?, db.all.blocks+ }
+}
+div {
+  db.answer.role.attribute = attribute role { text }
+  db.answer.attlist =
+    db.answer.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.answer =
+    
+    ## An answer to a question posed in a qandaset
+    element answer { db.answer.attlist, db.label?, db.all.blocks+ }
+}
+div {
+  db.label.role.attribute = attribute role { text }
+  db.label.attlist =
+    db.label.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.label =
+    
+    ## A label on a question or answer
+    element label { db.label.attlist, db._text }
+}
+db.math.inlines = db.inlineequation
+db.equation.content = (db.mediaobject+ | db.mathphrase+) | db._any.mml+
+db.inlineequation.content =
+  (db.inlinemediaobject+ | db.mathphrase+) | db._any.mml+
+div {
+  db.equation.role.attribute = attribute role { text }
+  db.equation.label.attribute = db.label.attribute
+  db.equation.attlist =
+    db.equation.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.equation.label.attribute?
+    & db.pgwide.attribute?
+    & db.floatstyle.attribute?
+  db.equation.info = db._info.title.only
+  db.equation =
+    
+    ## A displayed mathematical equation
+    element equation {
+      db.equation.attlist,
+      db.equation.info,
+      db.alt?,
+      db.equation.content,
+      db.caption?
+    }
+}
+div {
+  db.informalequation.role.attribute = attribute role { text }
+  db.informalequation.attlist =
+    db.informalequation.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.informalequation.info = db._info.title.forbidden
+  db.informalequation =
+    
+    ## A displayed mathematical equation without a title
+    element informalequation {
+      db.informalequation.attlist,
+      db.informalequation.info,
+      db.alt?,
+      db.equation.content,
+      db.caption?
+    }
+}
+div {
+  db.inlineequation.role.attribute = attribute role { text }
+  db.inlineequation.attlist =
+    db.inlineequation.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.inlineequation =
+    
+    ## A mathematical equation or expression occurring inline
+    element inlineequation {
+      db.inlineequation.attlist, db.alt?, db.inlineequation.content
+    }
+}
+div {
+  db.mathphrase.role.attribute = attribute role { text }
+  db.mathphrase.attlist =
+    db.mathphrase.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.mathphrase =
+    
+    ## A mathematical phrase that can be represented with ordinary text and a small amount of markup
+    element mathphrase {
+      db.mathphrase.attlist,
+      (db._text | db.ubiq.inlines | db._emphasis)*
+    }
+}
+div {
+  db.imagedata.mathml.role.attribute = attribute role { text }
+  db.imagedata.mathml.attlist =
+    db.imagedata.mathml.role.attribute?
+    & db.common.attributes
+    & 
+      ## Specifies that the format of the data is MathML
+      attribute format {
+        
+        ## Specifies MathML.
+        "mathml"
+      }?
+    & db.imagedata.align.attribute?
+    & db.imagedata.valign.attribute?
+    & db.imagedata.width.attribute?
+    & db.imagedata.contentwidth.attribute?
+    & db.imagedata.scalefit.attribute?
+    & db.imagedata.scale.attribute?
+    & db.imagedata.depth.attribute?
+    & db.imagedata.contentdepth.attribute?
+  db.imagedata.mathml.info = db._info.title.forbidden
+  db.imagedata.mathml =
+    
+    ## A MathML expression in a media object
+    element imagedata {
+      db.imagedata.mathml.attlist,
+      db.imagedata.mathml.info,
+      db._any.mml+
+    }
+}
+div {
+  db._any.mml =
+    
+    ## Any element from the MathML namespace
+    element mml:* { (db._any.attribute | text | db._any)* }
+}
+div {
+  db.imagedata.svg.role.attribute = attribute role { text }
+  db.imagedata.svg.attlist =
+    db.imagedata.svg.role.attribute?
+    & db.common.attributes
+    & 
+      ## Specifies that the format of the data is SVG
+      attribute format {
+        
+        ## Specifies SVG.
+        "svg"
+      }?
+    & db.imagedata.align.attribute?
+    & db.imagedata.valign.attribute?
+    & db.imagedata.width.attribute?
+    & db.imagedata.contentwidth.attribute?
+    & db.imagedata.scalefit.attribute?
+    & db.imagedata.scale.attribute?
+    & db.imagedata.depth.attribute?
+    & db.imagedata.contentdepth.attribute?
+  db.imagedata.svg.info = db._info.title.forbidden
+  db.imagedata.svg =
+    
+    ## An SVG drawing in a media object
+    element imagedata {
+      db.imagedata.svg.attlist, db.imagedata.svg.info, db._any.svg+
+    }
+}
+div {
+  db._any.svg =
+    
+    ## Any element from the SVG namespace
+    element svg:* { (db._any.attribute | text | db._any)* }
+}
+db.markup.inlines =
+  db.tag
+  | db.markup
+  | db.token
+  | db.symbol
+  | db.literal
+  | db.code
+  | db.constant
+  | db.email
+  | db.uri
+div {
+  db.markup.role.attribute = attribute role { text }
+  db.markup.attlist =
+    db.markup.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.markup =
+    
+    ## A string of formatting markup in text that is to be represented literally
+    element markup { db.markup.attlist, db._text }
+}
+div {
+  db.tag.role.attribute = attribute role { text }
+  db.tag.class.enumeration =
+    
+    ## An attribute
+    "attribute"
+    | 
+      ## An attribute value
+      "attvalue"
+    | 
+      ## An element
+      "element"
+    | 
+      ## An empty element tag
+      "emptytag"
+    | 
+      ## An end tag
+      "endtag"
+    | 
+      ## A general entity
+      "genentity"
+    | 
+      ## The local name part of a qualified name
+      "localname"
+    | 
+      ## A namespace
+      "namespace"
+    | 
+      ## A numeric character reference
+      "numcharref"
+    | 
+      ## A parameter entity
+      "paramentity"
+    | 
+      ## A processing instruction
+      "pi"
+    | 
+      ## The prefix part of a qualified name
+      "prefix"
+    | 
+      ## An SGML comment
+      "comment"
+    | 
+      ## A start tag
+      "starttag"
+    | 
+      ## An XML processing instruction
+      "xmlpi"
+  db.tag.class.attribute =
+    
+    ## Identifies the nature of the tag content
+    attribute class { db.tag.class.enumeration }
+  db.tag.namespace.attribute =
+    
+    ## Identifies the namespace of the tag content
+    attribute namespace { xsd:anyURI }
+  db.tag.attlist =
+    db.tag.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.tag.class.attribute?
+    & db.tag.namespace.attribute?
+  db.tag =
+    
+    ## A component of XML (or SGML) markup
+    element tag { db.tag.attlist, db._text }
+}
+div {
+  db.symbol.class.attribute =
+    
+    ## Identifies the class of symbol
+    attribute class {
+      
+      ## The value is a limit of some kind
+      "limit"
+    }
+  db.symbol.role.attribute = attribute role { text }
+  db.symbol.attlist =
+    db.symbol.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.symbol.class.attribute?
+  db.symbol =
+    
+    ## A name that is replaced by a value before processing
+    element symbol { db.symbol.attlist, db._text }
+}
+div {
+  db.token.role.attribute = attribute role { text }
+  db.token.attlist =
+    db.token.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.token =
+    
+    ## A unit of information
+    element token { db.token.attlist, db._text }
+}
+div {
+  db.literal.role.attribute = attribute role { text }
+  db.literal.attlist =
+    db.literal.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.literal =
+    
+    ## Inline text that is some literal value
+    element literal { db.literal.attlist, db._text }
+}
+div {
+  code.language.attribute =
+    
+    ## Identifies the (computer) language of the code fragment
+    attribute language { text }
+  db.code.role.attribute = attribute role { text }
+  db.code.attlist =
+    db.code.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & code.language.attribute?
+  db.code =
+    
+    ## An inline code fragment
+    element code {
+      db.code.attlist, (db.programming.inlines | db._text)*
+    }
+}
+div {
+  db.constant.class.attribute =
+    
+    ## Identifies the class of constant
+    attribute class {
+      
+      ## The value is a limit of some kind
+      "limit"
+    }
+  db.constant.role.attribute = attribute role { text }
+  db.constant.attlist =
+    db.constant.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.constant.class.attribute?
+  db.constant =
+    
+    ## A programming or system constant
+    element constant { db.constant.attlist, db._text }
+}
+div {
+  db.productname.role.attribute = attribute role { text }
+  db.productname.class.enumeration =
+    
+    ## A name with a copyright
+    "copyright"
+    | 
+      ## A name with a registered copyright
+      "registered"
+    | 
+      ## A name of a service
+      "service"
+    | 
+      ## A name which is trademarked
+      "trade"
+  db.productname.class.attribute =
+    
+    ## Specifies the class of product name
+    attribute class { db.productname.class.enumeration }
+  db.productname.attlist =
+    db.productname.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.productname.class.attribute?
+  db.productname =
+    
+    ## The formal name of a product
+    element productname { db.productname.attlist, db._text }
+}
+div {
+  db.productnumber.role.attribute = attribute role { text }
+  db.productnumber.attlist =
+    db.productnumber.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.productnumber =
+    
+    ## A number assigned to a product
+    element productnumber { db.productnumber.attlist, db._text }
+}
+div {
+  db.database.class.enumeration =
+    
+    ## An alternate or secondary key
+    "altkey"
+    | 
+      ## A constraint
+      "constraint"
+    | 
+      ## A data type
+      "datatype"
+    | 
+      ## A field
+      "field"
+    | 
+      ## A foreign key
+      "foreignkey"
+    | 
+      ## A group
+      "group"
+    | 
+      ## An index
+      "index"
+    | 
+      ## The first or primary key
+      "key1"
+    | 
+      ## An alternate or secondary key
+      "key2"
+    | 
+      ## A name
+      "name"
+    | 
+      ## The primary key
+      "primarykey"
+    | 
+      ## A (stored) procedure
+      "procedure"
+    | 
+      ## A record
+      "record"
+    | 
+      ## A rule
+      "rule"
+    | 
+      ## The secondary key
+      "secondarykey"
+    | 
+      ## A table
+      "table"
+    | 
+      ## A user
+      "user"
+    | 
+      ## A view
+      "view"
+  db.database.class.attribute =
+    
+    ## Identifies the class of database artifact
+    attribute class { db.database.class.enumeration }
+  db.database.role.attribute = attribute role { text }
+  db.database.attlist =
+    db.database.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.database.class.attribute?
+  db.database =
+    
+    ## The name of a database, or part of a database
+    element database { db.database.attlist, db._text }
+}
+div {
+  db.application.class.enumeration =
+    
+    ## A hardware application
+    "hardware"
+    | 
+      ## A software application
+      "software"
+  db.application.class.attribute =
+    
+    ## Identifies the class of application
+    attribute class { db.application.class.enumeration }
+  db.application.role.attribute = attribute role { text }
+  db.application.attlist =
+    db.application.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.application.class.attribute?
+  db.application =
+    
+    ## The name of a software program
+    element application { db.application.attlist, db._text }
+}
+div {
+  db.hardware.role.attribute = attribute role { text }
+  db.hardware.attlist =
+    db.hardware.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.hardware =
+    
+    ## A physical part of a computer system
+    element hardware { db.hardware.attlist, db._text }
+}
+db.gui.inlines =
+  db.guiicon
+  | db.guibutton
+  | db.guimenuitem
+  | db.guimenu
+  | db.guisubmenu
+  | db.guilabel
+  | db.menuchoice
+  | db.mousebutton
+div {
+  db.guibutton.role.attribute = attribute role { text }
+  db.guibutton.attlist =
+    db.guibutton.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.guibutton =
+    
+    ## The text on a button in a GUI
+    element guibutton {
+      db.guibutton.attlist,
+      (db._text | db.accel | db.superscript | db.subscript)*
+    }
+}
+div {
+  db.guiicon.role.attribute = attribute role { text }
+  db.guiicon.attlist =
+    db.guiicon.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.guiicon =
+    
+    ## Graphic and/or text appearing as a icon in a GUI
+    element guiicon {
+      db.guiicon.attlist,
+      (db._text | db.accel | db.superscript | db.subscript)*
+    }
+}
+div {
+  db.guilabel.role.attribute = attribute role { text }
+  db.guilabel.attlist =
+    db.guilabel.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.guilabel =
+    
+    ## The text of a label in a GUI
+    element guilabel {
+      db.guilabel.attlist,
+      (db._text | db.accel | db.superscript | db.subscript)*
+    }
+}
+div {
+  db.guimenu.role.attribute = attribute role { text }
+  db.guimenu.attlist =
+    db.guimenu.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.guimenu =
+    
+    ## The name of a menu in a GUI
+    element guimenu {
+      db.guimenu.attlist,
+      (db._text | db.accel | db.superscript | db.subscript)*
+    }
+}
+div {
+  db.guimenuitem.role.attribute = attribute role { text }
+  db.guimenuitem.attlist =
+    db.guimenuitem.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.guimenuitem =
+    
+    ## The name of a terminal menu item in a GUI
+    element guimenuitem {
+      db.guimenuitem.attlist,
+      (db._text | db.accel | db.superscript | db.subscript)*
+    }
+}
+div {
+  db.guisubmenu.role.attribute = attribute role { text }
+  db.guisubmenu.attlist =
+    db.guisubmenu.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.guisubmenu =
+    
+    ## The name of a submenu in a GUI
+    element guisubmenu {
+      db.guisubmenu.attlist,
+      (db._text | db.accel | db.superscript | db.subscript)*
+    }
+}
+div {
+  db.menuchoice.role.attribute = attribute role { text }
+  db.menuchoice.attlist =
+    db.menuchoice.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.menuchoice =
+    
+    ## A selection or series of selections from a menu
+    element menuchoice {
+      db.menuchoice.attlist,
+      db.shortcut?,
+      (db.guibutton
+       | db.guiicon
+       | db.guilabel
+       | db.guimenu
+       | db.guimenuitem
+       | db.guisubmenu)+
+    }
+}
+div {
+  db.mousebutton.role.attribute = attribute role { text }
+  db.mousebutton.attlist =
+    db.mousebutton.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.mousebutton =
+    
+    ## The conventional name of a mouse button
+    element mousebutton { db.mousebutton.attlist, db._text }
+}
+db.keyboard.inlines =
+  db.keycombo
+  | db.keycap
+  | db.keycode
+  | db.keysym
+  | db.shortcut
+  | db.accel
+div {
+  db.keycap.function.enumeration =
+    
+    ## The "Alt" key
+    "alt"
+    | 
+      ## The "Backspace" key
+      "backspace"
+    | 
+      ## The "Command" key
+      "command"
+    | 
+      ## The "Control" key
+      "control"
+    | 
+      ## The "Delete" key
+      "delete"
+    | 
+      ## The down arrow
+      "down"
+    | 
+      ## The "End" key
+      "end"
+    | 
+      ## The "Enter" or "Return" key
+      "enter"
+    | 
+      ## The "Escape" key
+      "escape"
+    | 
+      ## The "Home" key
+      "home"
+    | 
+      ## The "Insert" key
+      "insert"
+    | 
+      ## The left arrow
+      "left"
+    | 
+      ## The "Meta" key
+      "meta"
+    | 
+      ## The "Option" key
+      "option"
+    | 
+      ## The page down key
+      "pagedown"
+    | 
+      ## The page up key
+      "pageup"
+    | 
+      ## The right arrow
+      "right"
+    | 
+      ## The "Shift" key
+      "shift"
+    | 
+      ## The spacebar
+      "space"
+    | 
+      ## The "Tab" key
+      "tab"
+    | 
+      ## The up arrow
+      "up"
+  db.keycap.function-enum.attribute =
+    
+    ## Identifies the function key
+    attribute function { db.keycap.function.enumeration }?
+  db.keycap.function-other.attributes =
+    
+    ## Identifies the function key
+    attribute function {
+      
+      ## Indicates a non-standard function key
+      "other"
+    }?,
+    
+    ## Specifies a keyword that identifies the non-standard key
+    attribute otherfunction { text }
+  db.keycap.function.attrib =
+    db.keycap.function-enum.attribute
+    | db.keycap.function-other.attributes
+  db.keycap.role.attribute = attribute role { text }
+  db.keycap.attlist =
+    db.keycap.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.keycap.function.attrib
+  db.keycap =
+    
+    ## The text printed on a key on a keyboard
+    element keycap { db.keycap.attlist, db._text }
+}
+div {
+  db.keycode.role.attribute = attribute role { text }
+  db.keycode.attlist =
+    db.keycode.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.keycode =
+    
+    ## The internal, frequently numeric, identifier for a key on a keyboard
+    element keycode { db.keycode.attlist, db._text }
+}
+db.keycombination.contentmodel =
+  (db.keycap | db.keycombo | db.keysym) | db.mousebutton
+div {
+  db.keycombo.action.enumeration =
+    
+    ## A (single) mouse click.
+    "click"
+    | 
+      ## A double mouse click.
+      "double-click"
+    | 
+      ## A mouse or key press.
+      "press"
+    | 
+      ## Sequential clicks or presses.
+      "seq"
+    | 
+      ## Simultaneous clicks or presses.
+      "simul"
+  db.keycombo.action-enum.attribute =
+    
+    ## Identifies the nature of the action taken. If keycombo
+    ##  contains more than one element, simul
+    ##  is the default, otherwise there is no default.
+    attribute action { db.keycombo.action.enumeration }?
+  db.keycombo.action-other.attributes =
+    
+    ## Identifies the nature of the action taken
+    attribute action {
+      
+      ## Indicates a non-standard action
+      "other"
+    }?,
+    
+    ## Identifies the non-standard action in some unspecified way.
+    attribute otheraction { text }
+  db.keycombo.action.attrib =
+    db.keycombo.action-enum.attribute
+    | db.keycombo.action-other.attributes
+  db.keycombo.role.attribute = attribute role { text }
+  db.keycombo.attlist =
+    db.keycombo.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.keycombo.action.attrib
+  db.keycombo =
+    
+    ## A combination of input actions
+    element keycombo {
+      db.keycombo.attlist, db.keycombination.contentmodel+
+    }
+}
+div {
+  db.keysym.role.attribute = attribute role { text }
+  db.keysym.attlist =
+    db.keysym.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.keysym =
+    
+    ## The symbolic name of a key on a keyboard
+    element keysym { db.keysym.attlist, db._text }
+}
+div {
+  db.accel.role.attribute = attribute role { text }
+  db.accel.attlist =
+    db.accel.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.accel =
+    
+    ## A graphical user interface (GUI) keyboard shortcut
+    element accel { db.accel.attlist, db._text }
+}
+div {
+  db.shortcut.action.attrib = db.keycombo.action.attrib
+  db.shortcut.role.attribute = attribute role { text }
+  db.shortcut.attlist =
+    db.shortcut.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.shortcut.action.attrib
+  db.shortcut =
+    
+    ## A key combination for an action that is also accessible through a menu
+    element shortcut {
+      db.shortcut.attlist, db.keycombination.contentmodel+
+    }
+}
+db.os.inlines =
+  db.prompt
+  | db.envar
+  | db.filename
+  | db.command
+  | db.computeroutput
+  | db.userinput
+db.computeroutput.inlines =
+  (text | db.ubiq.inlines | db.os.inlines | db.technical.inlines)
+  | db.co
+  | db.markup.inlines
+db.userinput.inlines =
+  (text | db.ubiq.inlines | db.os.inlines | db.technical.inlines)
+  | db.co
+  | db.markup.inlines
+  | db.gui.inlines
+  | db.keyboard.inlines
+db.prompt.inlines = db._text | db.co
+div {
+  db.prompt.role.attribute = attribute role { text }
+  db.prompt.attlist =
+    db.prompt.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.prompt =
+    
+    ## A character or string indicating the start of an input field in a  computer display
+    element prompt { db.prompt.attlist, db.prompt.inlines* }
+}
+div {
+  db.envar.role.attribute = attribute role { text }
+  db.envar.attlist =
+    db.envar.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.envar =
+    
+    ## A software environment variable
+    element envar { db.envar.attlist, db._text }
+}
+div {
+  db.filename.class.enumeration =
+    
+    ## A device
+    "devicefile"
+    | 
+      ## A directory
+      "directory"
+    | 
+      ## A filename extension
+      "extension"
+    | 
+      ## A header file (as for a programming language)
+      "headerfile"
+    | 
+      ## A library file
+      "libraryfile"
+    | 
+      ## A partition (as of a hard disk)
+      "partition"
+    | 
+      ## A symbolic link
+      "symlink"
+  db.filename.class.attribute =
+    
+    ## Identifies the class of filename
+    attribute class { db.filename.class.enumeration }
+  db.filename.path.attribute =
+    
+    ## Specifies the path of the filename
+    attribute path { text }
+  db.filename.role.attribute = attribute role { text }
+  db.filename.attlist =
+    db.filename.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.filename.path.attribute?
+    & db.filename.class.attribute?
+  db.filename =
+    
+    ## The name of a file
+    element filename { db.filename.attlist, db._text }
+}
+div {
+  db.command.role.attribute = attribute role { text }
+  db.command.attlist =
+    db.command.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.command =
+    
+    ## The name of an executable program or other software command
+    element command { db.command.attlist, db._text }
+}
+div {
+  db.computeroutput.role.attribute = attribute role { text }
+  db.computeroutput.attlist =
+    db.computeroutput.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.computeroutput =
+    
+    ## Data, generally text, displayed or presented by a computer
+    element computeroutput {
+      db.computeroutput.attlist, db.computeroutput.inlines*
+    }
+}
+div {
+  db.userinput.role.attribute = attribute role { text }
+  db.userinput.attlist =
+    db.userinput.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.userinput =
+    
+    ## Data entered by the user
+    element userinput { db.userinput.attlist, db.userinput.inlines* }
+}
+div {
+  db.cmdsynopsis.role.attribute = attribute role { text }
+  db.cmdsynopsis.sepchar.attribute =
+    
+    ## Specifies the character that should separate the command and its top-level arguments
+    attribute sepchar { text }
+  db.cmdsynopsis.cmdlength.attribute =
+    
+    ## Indicates the displayed length of the command; this information may be used to intelligently indent command synopses which extend beyond one line
+    attribute cmdlength { text }
+  db.cmdsynopsis.label.attribute = db.label.attribute
+  db.cmdsynopsis.attlist =
+    db.cmdsynopsis.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.cmdsynopsis.sepchar.attribute?
+    & db.cmdsynopsis.cmdlength.attribute?
+    & db.cmdsynopsis.label.attribute?
+  db.cmdsynopsis.info = db._info.title.forbidden
+  db.cmdsynopsis =
+    
+    ## A syntax summary for a software command
+    element cmdsynopsis {
+      db.cmdsynopsis.attlist,
+      db.cmdsynopsis.info,
+      (db.command | db.arg | db.group | db.sbr)+,
+      db.synopfragment*
+    }
+}
+db.rep.enumeration =
+  
+  ## Can not be repeated.
+  "norepeat"
+  | 
+    ## Can be repeated.
+    "repeat"
+db.rep.attribute =
+  
+  ## Indicates whether or not repetition is possible.
+  [ a:defaultValue = "norepeat" ] attribute rep { db.rep.enumeration }
+db.choice.enumeration =
+  
+  ## Formatted to indicate that it is optional.
+  "opt"
+  | 
+    ## Formatted without indication.
+    "plain"
+  | 
+    ## Formatted to indicate that it is required.
+    "req"
+db.choice.opt.attribute =
+  
+  ## Indicates optionality.
+  [ a:defaultValue = "opt" ] attribute choice { db.choice.enumeration }
+db.choice.req.attribute =
+  
+  ## Indicates optionality.
+  [ a:defaultValue = "req" ] attribute choice { db.choice.enumeration }
+div {
+  db.arg.role.attribute = attribute role { text }
+  db.arg.rep.attribute = db.rep.attribute
+  db.arg.choice.attribute = db.choice.opt.attribute
+  db.arg.attlist =
+    db.arg.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.arg.rep.attribute?
+    & db.arg.choice.attribute?
+  db.arg =
+    
+    ## An argument in a cmdsynopsis
+    element arg {
+      db.arg.attlist,
+      (db._text
+       | db.arg
+       | db.group
+       | db.option
+       | db.synopfragmentref
+       | db.sbr)*
+    }
+}
+div {
+  db.group.role.attribute = attribute role { text }
+  db.group.rep.attribute = db.rep.attribute
+  db.group.choice.attribute = db.choice.opt.attribute
+  db.group.attlist =
+    db.group.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.group.rep.attribute?
+    & db.group.choice.attribute?
+  db.group =
+    
+    ## A group of elements in a cmdsynopsis
+    element group {
+      db.group.attlist,
+      (db.arg
+       | db.group
+       | db.option
+       | db.synopfragmentref
+       | db.replaceable
+       | db.sbr)+
+    }
+}
+div {
+  db.sbr.role.attribute = attribute role { text }
+  db.sbr.attlist = db.sbr.role.attribute? & db.common.attributes
+  db.sbr =
+    
+    ## An explicit line break in a command synopsis
+    element sbr { db.sbr.attlist, empty }
+}
+div {
+  db.synopfragment.role.attribute = attribute role { text }
+  db.synopfragment.attlist =
+    db.synopfragment.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.synopfragment =
+    
+    ## A portion of a cmdsynopsis broken out from the main body of the synopsis
+    element synopfragment {
+      db.synopfragment.attlist, (db.arg | db.group)+
+    }
+}
+div {
+  db.synopfragmentref.role.attribute = attribute role { text }
+  db.synopfragmentref.attlist =
+    db.synopfragmentref.role.attribute?
+    & db.common.attributes
+    & db.linkend.attribute
+  db.synopfragmentref =
+    
+    ## A reference to a fragment of a command synopsis
+    element synopfragmentref { db.synopfragmentref.attlist, text }
+}
+db.programming.inlines =
+  db.function
+  | db.parameter
+  | db.varname
+  | db.returnvalue
+  | db.type
+  | db.classname
+  | db.exceptionname
+  | db.interfacename
+  | db.methodname
+  | db.modifier
+  | db.initializer
+  | db.oo.inlines
+db.oo.inlines = db.ooclass | db.ooexception | db.oointerface
+db.synopsis.blocks =
+  (db.funcsynopsis
+   | db.classsynopsis
+   | db.methodsynopsis
+   | db.constructorsynopsis
+   | db.destructorsynopsis
+   | db.fieldsynopsis)
+  | db.cmdsynopsis
+div {
+  db.synopsis.role.attribute = attribute role { text }
+  db.synopsis.label.attribute = db.label.attribute
+  db.synopsis.attlist =
+    db.synopsis.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.verbatim.attributes
+    & db.synopsis.label.attribute?
+  db.synopsis =
+    
+    ## A general-purpose element for representing the syntax of commands or functions
+    element synopsis { db.synopsis.attlist, db.verbatim.contentmodel }
+}
+div {
+  db.funcsynopsis.role.attribute = attribute role { text }
+  db.funcsynopsis.attlist =
+    db.funcsynopsis.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.language.attribute?
+  db.funcsynopsis.info = db._info.title.forbidden
+  db.funcsynopsis =
+    
+    ## The syntax summary for a function definition
+    element funcsynopsis {
+      db.funcsynopsis.attlist,
+      db.funcsynopsis.info,
+      (db.funcsynopsisinfo | db.funcprototype)+
+    }
+}
+div {
+  db.funcsynopsisinfo.role.attribute = attribute role { text }
+  db.funcsynopsisinfo.attlist =
+    db.funcsynopsisinfo.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.verbatim.attributes
+  db.funcsynopsisinfo =
+    
+    ## Information supplementing the funcdefs of a funcsynopsis
+    element funcsynopsisinfo {
+      db.funcsynopsisinfo.attlist, db.verbatim.contentmodel
+    }
+}
+div {
+  db.funcprototype.role.attribute = attribute role { text }
+  db.funcprototype.attlist =
+    db.funcprototype.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.funcprototype =
+    
+    ## The prototype of a function
+    element funcprototype {
+      db.funcprototype.attlist,
+      db.modifier*,
+      db.funcdef,
+      (db.void
+       | db.varargs
+       | ((db.paramdef | db.group.paramdef)+, db.varargs?)),
+      db.modifier*
+    }
+}
+div {
+  db.funcdef.role.attribute = attribute role { text }
+  db.funcdef.attlist =
+    db.funcdef.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.funcdef =
+    
+    ## A function (subroutine) name and its return type
+    element funcdef {
+      db.funcdef.attlist, (db._text | db.type | db.function)*
+    }
+}
+div {
+  db.function.role.attribute = attribute role { text }
+  db.function.attlist =
+    db.function.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.function =
+    
+    ## The name of a function or subroutine, as in a programming language
+    element function { db.function.attlist, db._text }
+}
+div {
+  db.void.role.attribute = attribute role { text }
+  db.void.attlist =
+    db.void.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.void =
+    
+    ## An empty element in a function synopsis indicating that the function in question takes no arguments
+    element void { db.void.attlist, empty }
+}
+div {
+  db.varargs.role.attribute = attribute role { text }
+  db.varargs.attlist =
+    db.varargs.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.varargs =
+    
+    ## An empty element in a function synopsis indicating a variable number of arguments
+    element varargs { db.varargs.attlist, empty }
+}
+div {
+  db.group.paramdef.role.attribute = attribute role { text }
+  db.group.paramdef.choice.attribute = db.choice.opt.attribute
+  db.group.paramdef.attlist =
+    db.group.paramdef.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.group.paramdef.choice.attribute?
+  db.group.paramdef =
+    
+    ## A group of parameters
+    element group {
+      db.group.paramdef.attlist, (db.paramdef | db.group.paramdef)+
+    }
+}
+div {
+  db.paramdef.role.attribute = attribute role { text }
+  db.paramdef.choice.enumeration =
+    
+    ## Formatted to indicate that it is optional.
+    "opt"
+    | 
+      ## Formatted to indicate that it is required.
+      "req"
+  db.paramdef.choice.attribute =
+    
+    ## Indicates optionality.
+    [ a:defaultValue = "opt" ]
+    attribute choice { db.paramdef.choice.enumeration }
+  db.paramdef.attlist =
+    db.paramdef.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.paramdef.choice.attribute?
+  db.paramdef =
+    
+    ## Information about a function parameter in a programming language
+    element paramdef {
+      db.paramdef.attlist,
+      (db._text
+       | db.initializer
+       | db.type
+       | db.parameter
+       | db.funcparams)*
+    }
+}
+div {
+  db.funcparams.role.attribute = attribute role { text }
+  db.funcparams.attlist =
+    db.funcparams.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.funcparams =
+    
+    ## Parameters for a function referenced through a function pointer in a synopsis
+    element funcparams { db.funcparams.attlist, db._text }
+}
+div {
+  db.classsynopsis.role.attribute = attribute role { text }
+  db.classsynopsis.class.enumeration =
+    
+    ## This is the synopsis of a class
+    "class"
+    | 
+      ## This is the synopsis of an interface
+      "interface"
+  db.classsynopsis.class.attribute =
+    
+    ## Specifies the nature of the synopsis
+    attribute class { db.classsynopsis.class.enumeration }
+  db.classsynopsis.attlist =
+    db.classsynopsis.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.language.attribute?
+    & db.classsynopsis.class.attribute?
+  db.classsynopsis =
+    
+    ## The syntax summary for a class definition
+    element classsynopsis {
+      db.classsynopsis.attlist,
+      db.oo.inlines+,
+      (db.classsynopsisinfo
+       | db.methodsynopsis
+       | db.constructorsynopsis
+       | db.destructorsynopsis
+       | db.fieldsynopsis)*
+    }
+}
+div {
+  db.classsynopsisinfo.role.attribute = attribute role { text }
+  db.classsynopsisinfo.attlist =
+    db.classsynopsisinfo.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.verbatim.attributes
+  db.classsynopsisinfo =
+    
+    ## Information supplementing the contents of a classsynopsis
+    element classsynopsisinfo {
+      db.classsynopsisinfo.attlist, db.verbatim.contentmodel
+    }
+}
+div {
+  db.ooclass.role.attribute = attribute role { text }
+  db.ooclass.attlist =
+    db.ooclass.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.ooclass =
+    
+    ## A class in an object-oriented programming language
+    element ooclass {
+      db.ooclass.attlist, (db.package | db.modifier)*, db.classname
+    }
+}
+div {
+  db.oointerface.role.attribute = attribute role { text }
+  db.oointerface.attlist =
+    db.oointerface.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.oointerface =
+    
+    ## An interface in an object-oriented programming language
+    element oointerface {
+      db.oointerface.attlist,
+      (db.package | db.modifier)*,
+      db.interfacename
+    }
+}
+div {
+  db.ooexception.role.attribute = attribute role { text }
+  db.ooexception.attlist =
+    db.ooexception.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.ooexception =
+    
+    ## An exception in an object-oriented programming language
+    element ooexception {
+      db.ooexception.attlist,
+      (db.package | db.modifier)*,
+      db.exceptionname
+    }
+}
+db.modifier.xml.space.attribute =
+  
+  ## Can be used to indicate that whitespace in the modifier should be preserved (for multi-line annotations, for example).
+  attribute xml:space {
+    
+    ## Extra whitespace and line breaks must be preserved.
+    [
+      # Ideally the definition of xml:space used on modifier would be
+      # different from the definition used on the verbatim elements. The
+      # verbatim elements forbid the use of xml:space="default" which
+      # wouldn't be a problem on modifier. But doing that causes the
+      # generated XSD schemas to be broken so I'm just reusing the existing
+      # definition for now. It won't be backwards incompatible to fix this
+      # problem in the future.
+      #    | ## Extra whitespace and line breaks are not preserved.
+      #      "default"
+      
+    ]
+    "preserve"
+  }
+div {
+  db.modifier.role.attribute = attribute role { text }
+  db.modifier.attlist =
+    db.modifier.xml.space.attribute?
+    & db.modifier.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.modifier =
+    
+    ## Modifiers in a synopsis
+    element modifier { db.modifier.attlist, db._text }
+}
+div {
+  db.interfacename.role.attribute = attribute role { text }
+  db.interfacename.attlist =
+    db.interfacename.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.interfacename =
+    
+    ## The name of an interface
+    element interfacename { db.interfacename.attlist, db._text }
+}
+div {
+  db.exceptionname.role.attribute = attribute role { text }
+  db.exceptionname.attlist =
+    db.exceptionname.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.exceptionname =
+    
+    ## The name of an exception
+    element exceptionname { db.exceptionname.attlist, db._text }
+}
+div {
+  db.fieldsynopsis.role.attribute = attribute role { text }
+  db.fieldsynopsis.attlist =
+    db.fieldsynopsis.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.language.attribute?
+  db.fieldsynopsis =
+    
+    ## The name of a field in a class definition
+    element fieldsynopsis {
+      db.fieldsynopsis.attlist,
+      db.modifier*,
+      db.type?,
+      db.varname,
+      db.initializer?
+    }
+}
+div {
+  db.initializer.role.attribute = attribute role { text }
+  db.initializer.attlist =
+    db.initializer.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.initializer.inlines = db._text | db.mathphrase | db.markup.inlines
+  db.initializer =
+    
+    ## The initializer for a fieldsynopsis
+    element initializer {
+      db.initializer.attlist, db.initializer.inlines*
+    }
+}
+div {
+  db.constructorsynopsis.role.attribute = attribute role { text }
+  db.constructorsynopsis.attlist =
+    db.constructorsynopsis.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.language.attribute?
+  db.constructorsynopsis =
+    
+    ## A syntax summary for a constructor
+    element constructorsynopsis {
+      db.constructorsynopsis.attlist,
+      db.modifier*,
+      db.methodname?,
+      ((db.methodparam | db.group.methodparam)+ | db.void?),
+      db.exceptionname*
+    }
+}
+div {
+  db.destructorsynopsis.role.attribute = attribute role { text }
+  db.destructorsynopsis.attlist =
+    db.destructorsynopsis.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.language.attribute?
+  db.destructorsynopsis =
+    
+    ## A syntax summary for a destructor
+    element destructorsynopsis {
+      db.destructorsynopsis.attlist,
+      db.modifier*,
+      db.methodname?,
+      ((db.methodparam | db.group.methodparam)+ | db.void?),
+      db.exceptionname*
+    }
+}
+div {
+  db.methodsynopsis.role.attribute = attribute role { text }
+  db.methodsynopsis.attlist =
+    db.methodsynopsis.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.language.attribute?
+  db.methodsynopsis =
+    
+    ## A syntax summary for a method
+    element methodsynopsis {
+      db.methodsynopsis.attlist,
+      db.modifier*,
+      (db.type | db.void)?,
+      db.methodname,
+      ((db.methodparam | db.group.methodparam)+ | db.void),
+      db.exceptionname*,
+      db.modifier*
+    }
+}
+div {
+  db.methodname.role.attribute = attribute role { text }
+  db.methodname.attlist =
+    db.methodname.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.methodname =
+    
+    ## The name of a method
+    element methodname { db.methodname.attlist, db._text }
+}
+div {
+  db.methodparam.role.attribute = attribute role { text }
+  db.methodparam.rep.attribute = db.rep.attribute
+  db.methodparam.choice.attribute = db.choice.req.attribute
+  db.methodparam.attlist =
+    db.methodparam.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.methodparam.rep.attribute?
+    & db.methodparam.choice.attribute?
+  db.methodparam =
+    
+    ## Parameters to a method
+    element methodparam {
+      db.methodparam.attlist,
+      db.modifier*,
+      db.type?,
+      ((db.modifier*, db.parameter, db.initializer?) | db.funcparams),
+      db.modifier*
+    }
+}
+div {
+  db.group.methodparam.role.attribute = attribute role { text }
+  db.group.methodparam.choice.attribute = db.choice.opt.attribute
+  db.group.methodparam.attlist =
+    db.group.methodparam.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.group.methodparam.choice.attribute?
+  db.group.methodparam =
+    
+    ## A group of method parameters
+    element group {
+      db.group.methodparam.attlist,
+      (db.methodparam | db.group.methodparam)+
+    }
+}
+div {
+  db.varname.role.attribute = attribute role { text }
+  db.varname.attlist =
+    db.varname.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.varname =
+    
+    ## The name of a variable
+    element varname { db.varname.attlist, db._text }
+}
+div {
+  db.returnvalue.role.attribute = attribute role { text }
+  db.returnvalue.attlist =
+    db.returnvalue.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.returnvalue =
+    
+    ## The value returned by a function
+    element returnvalue { db.returnvalue.attlist, db._text }
+}
+div {
+  db.type.role.attribute = attribute role { text }
+  db.type.attlist =
+    db.type.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.type =
+    
+    ## The classification of a value
+    element type { db.type.attlist, db._text }
+}
+div {
+  db.classname.role.attribute = attribute role { text }
+  db.classname.attlist =
+    db.classname.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.classname =
+    
+    ## The name of a class, in the object-oriented programming sense
+    element classname { db.classname.attlist, db._text }
+}
+div {
+  db.programlisting.role.attribute = attribute role { text }
+  db.programlisting.width.attribute = db.width.characters.attribute
+  db.programlisting.attlist =
+    db.programlisting.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.verbatim.attributes
+    & db.programlisting.width.attribute?
+  db.programlisting =
+    
+    ## A literal listing of all or part of a program
+    element programlisting {
+      db.programlisting.attlist, db.verbatim.contentmodel
+    }
+}
+db.admonition.blocks =
+  db.caution | db.important | db.note | db.tip | db.warning
+db.admonition.contentmodel = db._info.title.only, db.all.blocks+
+div {
+  db.caution.role.attribute = attribute role { text }
+  db.caution.attlist =
+    db.caution.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.caution =
+    
+    ## A note of caution
+    element caution { db.caution.attlist, db.admonition.contentmodel }
+}
+div {
+  db.important.role.attribute = attribute role { text }
+  db.important.attlist =
+    db.important.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.important =
+    
+    ## An admonition set off from the text
+    element important {
+      db.important.attlist, db.admonition.contentmodel
+    }
+}
+div {
+  db.note.role.attribute = attribute role { text }
+  db.note.attlist =
+    db.note.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.note =
+    
+    ## A message set off from the text
+    element note { db.note.attlist, db.admonition.contentmodel }
+}
+div {
+  db.tip.role.attribute = attribute role { text }
+  db.tip.attlist =
+    db.tip.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.tip =
+    
+    ## A suggestion to the user, set off from the text
+    element tip { db.tip.attlist, db.admonition.contentmodel }
+}
+div {
+  db.warning.role.attribute = attribute role { text }
+  db.warning.attlist =
+    db.warning.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.warning =
+    
+    ## An admonition set off from the text
+    element warning { db.warning.attlist, db.admonition.contentmodel }
+}
+db.error.inlines =
+  db.errorcode | db.errortext | db.errorname | db.errortype
+div {
+  db.errorcode.role.attribute = attribute role { text }
+  db.errorcode.attlist =
+    db.errorcode.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.errorcode =
+    
+    ## An error code
+    element errorcode { db.errorcode.attlist, db._text }
+}
+div {
+  db.errorname.role.attribute = attribute role { text }
+  db.errorname.attlist =
+    db.errorname.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.errorname =
+    
+    ## An error name
+    element errorname { db.errorname.attlist, db._text }
+}
+div {
+  db.errortext.role.attribute = attribute role { text }
+  db.errortext.attlist =
+    db.errortext.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.errortext =
+    
+    ## An error message.
+    element errortext { db.errortext.attlist, db._text }
+}
+div {
+  db.errortype.role.attribute = attribute role { text }
+  db.errortype.attlist =
+    db.errortype.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.errortype =
+    
+    ## The classification of an error message
+    element errortype { db.errortype.attlist, db._text }
+}
+db.systemitem.inlines = db._text | db.co
+div {
+  db.systemitem.class.enumeration =
+    
+    ## A daemon or other system process (syslogd)
+    "daemon"
+    | 
+      ## A domain name (example.com)
+      "domainname"
+    | 
+      ## An ethernet address (00:05:4E:49:FD:8E)
+      "etheraddress"
+    | 
+      ## An event of some sort (SIGHUP)
+      "event"
+    | 
+      ## An event handler of some sort (hangup)
+      "eventhandler"
+    | 
+      ## A filesystem (ext3)
+      "filesystem"
+    | 
+      ## A fully qualified domain name (my.example.com)
+      "fqdomainname"
+    | 
+      ## A group name (wheel)
+      "groupname"
+    | 
+      ## An IP address (127.0.0.1)
+      "ipaddress"
+    | 
+      ## A library (libncurses)
+      "library"
+    | 
+      ## A macro
+      "macro"
+    | 
+      ## A netmask (255.255.255.192)
+      "netmask"
+    | 
+      ## A newsgroup (comp.text.xml)
+      "newsgroup"
+    | 
+      ## An operating system name (Hurd)
+      "osname"
+    | 
+      ## A process (gnome-cups-icon)
+      "process"
+    | 
+      ## A protocol (ftp)
+      "protocol"
+    | 
+      ## A resource
+      "resource"
+    | 
+      ## A security context (a role, permission, or security token, for example)
+      "securitycontext"
+    | 
+      ## A server (mail.example.com)
+      "server"
+    | 
+      ## A service (ppp)
+      "service"
+    | 
+      ## A system name (hephaistos)
+      "systemname"
+    | 
+      ## A user name (ndw)
+      "username"
+  db.systemitem.class-enum.attribute =
+    
+    ## Identifies the nature of the system item
+    attribute class { db.systemitem.class.enumeration }?
+  db.systemitem.class-other.attribute =
+    
+    ## Identifies the nature of the non-standard system item
+    attribute otherclass { xsd:NMTOKEN }
+  db.systemitem.class-other.attributes =
+    
+    ## Identifies the kind of systemitemgraphic identifier
+    attribute class {
+      
+      ## Indicates that the system item is some 'other' kind.
+      "other"
+    }
+    & db.systemitem.class-other.attribute
+  db.systemitem.class.attribute =
+    db.systemitem.class-enum.attribute
+    | db.systemitem.class-other.attributes
+  db.systemitem.role.attribute = attribute role { text }
+  db.systemitem.attlist =
+    db.systemitem.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.systemitem.class.attribute?
+  db.systemitem =
+    
+    ## A system-related item or term
+    element systemitem { db.systemitem.attlist, db.systemitem.inlines* }
+}
+div {
+  db.option.role.attribute = attribute role { text }
+  db.option.attlist =
+    db.option.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.option =
+    
+    ## An option for a software command
+    element option { db.option.attlist, db._text }
+}
+div {
+  db.optional.role.attribute = attribute role { text }
+  db.optional.attlist =
+    db.optional.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.optional =
+    
+    ## Optional information
+    element optional { db.optional.attlist, db._text }
+}
+div {
+  db.property.role.attribute = attribute role { text }
+  db.property.attlist =
+    db.property.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.property =
+    
+    ## A unit of data associated with some part of a computer system
+    element property { db.property.attlist, db._text }
+}
+div {
+  db.topic.status.attribute = db.status.attribute
+  db.topic.role.attribute = attribute role { text }
+  db.topic.type.attribute =
+    
+    ## Identifies the topic type
+    attribute type { text }
+  db.topic.attlist =
+    db.topic.role.attribute?
+    & db.topic.type.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.label.attribute?
+    & db.topic.status.attribute?
+  db.topic.info = db._info.title.req
+  db.topic =
+    
+    ## A modular unit of documentation not part of any particular narrative flow
+    element topic {
+      db.topic.attlist,
+      db.topic.info,
+      db.navigation.components*,
+      db.toplevel.blocks.or.sections,
+      db.navigation.components*
+    }
+}
+start =
+  db.assembly
+  | db.resources
+  | db.relationships
+  | db.transforms
+  | db.module
+div {
+  db._any.docbook =
+    db._emphasis
+    | db._firstterm
+    | db._foreignphrase
+    | db._glossterm
+    | db._phrase
+    | db._quote
+    | db.abbrev
+    | db.abstract
+    | db.accel
+    | db.acknowledgements
+    | db.acronym
+    | db.address
+    | db.affiliation
+    | db.alt
+    | db.anchor
+    | db.annotation
+    | db.answer
+    | db.appendix
+    | db.application
+    | db.arc
+    | db.area
+    | db.area.inareaset
+    | db.areaset
+    | db.areaspec
+    | db.arg
+    | db.article
+    | db.artpagenums
+    | db.attribution
+    | db.audiodata
+    | db.audioobject
+    | db.author
+    | db.authorgroup
+    | db.authorinitials
+    | db.bibliocoverage
+    | db.bibliodiv
+    | db.biblioentry
+    | db.bibliography
+    | db.biblioid
+    | db.bibliolist
+    | db.bibliomisc
+    | db.bibliomixed
+    | db.bibliomset
+    | db.biblioref
+    | db.bibliorelation
+    | db.biblioset
+    | db.bibliosource
+    | db.blockquote
+    | db.book
+    | db.bridgehead
+    | db.callout
+    | db.calloutlist
+    | db.cals.entrytbl.tbody
+    | db.cals.entrytbl.thead
+    | db.cals.informaltable
+    | db.cals.table
+    | db.cals.tbody
+    | db.cals.tfoot
+    | db.cals.thead
+    | db.caption
+    | db.caution
+    | db.chapter
+    | db.citation
+    | db.citebiblioid
+    | db.citerefentry
+    | db.citetitle
+    | db.city
+    | db.classname
+    | db.classsynopsis
+    | db.classsynopsisinfo
+    | db.cmdsynopsis
+    | db.co
+    | db.code
+    | db.collab
+    | db.colophon
+    | db.colspec
+    | db.command
+    | db.computeroutput
+    | db.confdates
+    | db.confgroup
+    | db.confnum
+    | db.confsponsor
+    | db.conftitle
+    | db.constant
+    | db.constraint
+    | db.constraintdef
+    | db.constructorsynopsis
+    | db.contractnum
+    | db.contractsponsor
+    | db.contrib
+    | db.copyright
+    | db.coref
+    | db.country
+    | db.cover
+    | db.database
+    | db.date
+    | db.dedication
+    | db.destructorsynopsis
+    | db.edition
+    | db.editor
+    | db.email
+    | db.emphasis
+    | db.entry
+    | db.entrytbl
+    | db.entrytbl.row
+    | db.envar
+    | db.epigraph
+    | db.equation
+    | db.errorcode
+    | db.errorname
+    | db.errortext
+    | db.errortype
+    | db.example
+    | db.exceptionname
+    | db.extendedlink
+    | db.fax
+    | db.fieldsynopsis
+    | db.figure
+    | db.filename
+    | db.firstname
+    | db.firstterm
+    | db.footnote
+    | db.footnoteref
+    | db.foreignphrase
+    | db.formalpara
+    | db.funcdef
+    | db.funcparams
+    | db.funcprototype
+    | db.funcsynopsis
+    | db.funcsynopsisinfo
+    | db.function
+    | db.givenname
+    | db.glossary
+    | db.glossdef
+    | db.glossdiv
+    | db.glossentry
+    | db.glosslist
+    | db.glosssee
+    | db.glossseealso
+    | db.glossterm
+    | db.group
+    | db.group.methodparam
+    | db.group.paramdef
+    | db.guibutton
+    | db.guiicon
+    | db.guilabel
+    | db.guimenu
+    | db.guimenuitem
+    | db.guisubmenu
+    | db.hardware
+    | db.holder
+    | db.honorific
+    | db.html.caption
+    | db.html.col
+    | db.html.colgroup
+    | db.html.informaltable
+    | db.html.table
+    | db.html.tbody
+    | db.html.td
+    | db.html.tfoot
+    | db.html.th
+    | db.html.thead
+    | db.html.tr
+    | db.imagedata
+    | db.imagedata.mathml
+    | db.imagedata.svg
+    | db.imageobject
+    | db.imageobjectco
+    | db.important
+    | db.index
+    | db.indexdiv
+    | db.indexentry
+    | db.indexterm.endofrange
+    | db.indexterm.singular
+    | db.indexterm.startofrange
+    | db.info
+    | db.informalequation
+    | db.informalexample
+    | db.informalfigure
+    | db.initializer
+    | db.inlineequation
+    | db.inlinemediaobject
+    | db.interfacename
+    | db.issuenum
+    | db.itemizedlist
+    | db.itermset
+    | db.jobtitle
+    | db.keycap
+    | db.keycode
+    | db.keycombo
+    | db.keysym
+    | db.keyword
+    | db.keywordset
+    | db.label
+    | db.legalnotice
+    | db.lhs
+    | db.lineage
+    | db.lineannotation
+    | db.link
+    | db.listitem
+    | db.literal
+    | db.literallayout
+    | db.locator
+    | db.manvolnum
+    | db.markup
+    | db.mathphrase
+    | db.mediaobject
+    | db.member
+    | db.menuchoice
+    | db.methodname
+    | db.methodparam
+    | db.methodsynopsis
+    | db.modifier
+    | db.mousebutton
+    | db.msg
+    | db.msgaud
+    | db.msgentry
+    | db.msgexplan
+    | db.msginfo
+    | db.msglevel
+    | db.msgmain
+    | db.msgorig
+    | db.msgrel
+    | db.msgset
+    | db.msgsub
+    | db.msgtext
+    | db.nonterminal
+    | db.note
+    | db.olink
+    | db.ooclass
+    | db.ooexception
+    | db.oointerface
+    | db.option
+    | db.optional
+    | db.orderedlist
+    | db.org
+    | db.orgdiv
+    | db.orgname
+    | db.otheraddr
+    | db.othercredit
+    | db.othername
+    | db.package
+    | db.pagenums
+    | db.para
+    | db.paramdef
+    | db.parameter
+    | db.part
+    | db.partintro
+    | db.person
+    | db.personblurb
+    | db.personname
+    | db.phone
+    | db.phrase
+    | db.pob
+    | db.postcode
+    | db.preface
+    | db.primary
+    | db.primaryie
+    | db.printhistory
+    | db.procedure
+    | db.production
+    | db.productionrecap
+    | db.productionset
+    | db.productname
+    | db.productnumber
+    | db.programlisting
+    | db.programlistingco
+    | db.prompt
+    | db.property
+    | db.pubdate
+    | db.publisher
+    | db.publishername
+    | db.qandadiv
+    | db.qandaentry
+    | db.qandaset
+    | db.question
+    | db.quote
+    | db.refclass
+    | db.refdescriptor
+    | db.refentry
+    | db.refentrytitle
+    | db.reference
+    | db.refmeta
+    | db.refmiscinfo
+    | db.refname
+    | db.refnamediv
+    | db.refpurpose
+    | db.refsect1
+    | db.refsect2
+    | db.refsect3
+    | db.refsection
+    | db.refsynopsisdiv
+    | db.releaseinfo
+    | db.remark
+    | db.replaceable
+    | db.returnvalue
+    | db.revdescription
+    | db.revhistory
+    | db.revision
+    | db.revnumber
+    | db.revremark
+    | db.rhs
+    | db.row
+    | db.sbr
+    | db.screen
+    | db.screenco
+    | db.screenshot
+    | db.secondary
+    | db.secondaryie
+    | db.sect1
+    | db.sect2
+    | db.sect3
+    | db.sect4
+    | db.sect5
+    | db.section
+    | db.see
+    | db.seealso
+    | db.seealsoie
+    | db.seeie
+    | db.seg
+    | db.seglistitem
+    | db.segmentedlist
+    | db.segtitle
+    | db.seriesvolnums
+    | db.set
+    | db.setindex
+    | db.shortaffil
+    | db.shortcut
+    | db.sidebar
+    | db.simpara
+    | db.simplelist
+    | db.simplemsgentry
+    | db.simplesect
+    | db.spanspec
+    | db.state
+    | db.step
+    | db.stepalternatives
+    | db.street
+    | db.subject
+    | db.subjectset
+    | db.subjectterm
+    | db.subscript
+    | db.substeps
+    | db.subtitle
+    | db.superscript
+    | db.surname
+    | db.symbol
+    | db.synopfragment
+    | db.synopfragmentref
+    | db.synopsis
+    | db.systemitem
+    | db.tag
+    | db.task
+    | db.taskprerequisites
+    | db.taskrelated
+    | db.tasksummary
+    | db.term
+    | db.termdef
+    | db.tertiary
+    | db.tertiaryie
+    | db.textdata
+    | db.textobject
+    | db.tgroup
+    | db.tip
+    | db.title
+    | db.titleabbrev
+    | db.titleforbidden.info
+    | db.titleonly.info
+    | db.titleonlyreq.info
+    | db.titlereq.info
+    | db.toc
+    | db.tocdiv
+    | db.tocentry
+    | db.token
+    | db.topic
+    | db.trademark
+    | db.type
+    | db.uri
+    | db.userinput
+    | db.varargs
+    | db.variablelist
+    | db.varlistentry
+    | db.varname
+    | db.videodata
+    | db.videoobject
+    | db.void
+    | db.volumenum
+    | db.warning
+    | db.wordasword
+    | db.xref
+    | db.year
+}
+db.grammar.attribute =
+  
+  ## Identifies the markup grammar of a resource
+  attribute grammar { text }
+div {
+  db.assembly.role.attribute = attribute role { text }
+  db.assembly.attlist =
+    db.assembly.role.attribute? & db.common.attributes
+  db.assembly.info = db._info
+  db.assembly =
+    
+    ## Defines the hierarchy and relationships for a collection of resources
+    element assembly {
+      db.assembly.attlist,
+      db.assembly.info,
+      db.resources+,
+      db.structure*,
+      db.relationships*,
+      db.transforms?
+    }
+}
+div {
+  db.resources.role.attribute = attribute role { text }
+  db.resources.grammar.attribute = db.grammar.attribute
+  db.resources.attlist =
+    db.resources.role.attribute?
+    & db.resources.grammar.attribute?
+    & db.common.attributes
+  db.resources.info = db._info.title.forbidden
+  db.resources =
+    
+    ## Contains one or more resource objects that are managed by the assembly
+    element resources {
+      db.resources.attlist,
+      db.resources.info?,
+      (db.description*, db.resource+)
+    }
+}
+div {
+  db.resource.role.attribute = attribute role { text }
+  db.resource.fileref.attribute =
+    
+    ## Indentifies the location of the data by URI
+    attribute fileref { xsd:anyURI }
+  db.resource.grammar.attribute = db.grammar.attribute
+  db.resource.attlist =
+    db.resource.role.attribute?
+    & db.resource.grammar.attribute?
+    & db.common.attributes
+  db.resource = db.file.resource | db.container.resource
+  db.file.resource =
+    
+    ## Identifies an object managed within the assembly
+    element resource {
+      db.resource.attlist,
+      db.resource.fileref.attribute,
+      db.description*
+    }
+  # FIXME: contents should be any valid DocBook content model fragment
+  db.container.resource =
+    
+    ## Identifies an object managed within the assembly
+    element resource {
+      db.resource.attlist, (text | db.description | db._any.docbook)*
+    }
+}
+div {
+  db.structure.role.attribute = attribute role { text }
+  db.structure.type.attribute =
+    
+    ## Identifies the structure type of the structure
+    attribute type { xsd:NMTOKEN }
+  db.structure.defaultformat.attribute =
+    
+    ## Identifies the default format of the structure
+    attribute defaultformat { xsd:NMTOKEN }
+  db.structure.renderas.attribute =
+    
+    ## Specifies the DocBook element to which this unit should be renamed
+    attribute renderas { xsd:QName }
+  db.structure.attlist =
+    db.structure.role.attribute?
+    & db.structure.type.attribute?
+    & db.structure.renderas.attribute?
+    & db.structure.defaultformat.attribute?
+    & db.common.attributes
+  db.structure.info = db._info.title.req
+  db.structure =
+    
+    ## Describes the structure of a document
+    element structure {
+      db.structure.attlist,
+      (db.output* & db.filterin? & db.filterout? & db.structure.info),
+      db.override?,
+      db.revhistory?,
+      db.navigation.components*,
+      db.module+,
+      db.navigation.components*
+    }
+}
+div {
+  db.output.role.attribute = attribute role { text }
+  db.output.chunk.attribute =
+    
+    ## Specifies chunking for this module
+    [ a:defaultValue = "auto" ]
+    attribute chunk { db.module.chunk.enumeration }
+  db.output.format.attribute =
+    
+    ## Identifies the format of the module or structure
+    attribute format { xsd:NMTOKENS }
+  db.output.file.attribute =
+    
+    ## Specifies the output file for this module or structure
+    attribute file { xsd:anyURI }
+  db.output.renderas.attribute =
+    
+    ## Specifies the DocBook element to which this unit should be renamed
+    attribute renderas { xsd:QName }
+  db.output.grammar.attribute = db.grammar.attribute
+  db.output.transform.attribute =
+    
+    ## Specifies the transformation that should be applied to this unit
+    attribute transform { xsd:NMTOKEN }
+  db.output.suppress.attribute =
+    
+    ## Indicates whether or not this unit should be suppressed
+    attribute suppress { xsd:boolean }
+  db.output.attlist =
+    db.output.role.attribute?
+    & db.common.attributes
+    & db.output.chunk.attribute?
+    & db.output.format.attribute?
+    & db.output.file.attribute?
+    & db.output.renderas.attribute?
+    & db.output.grammar.attribute?
+    & db.output.transform.attribute?
+    & db.output.suppress.attribute?
+  db.output =
+    
+    ## Specify an output format and/or file name and/or renderas
+    element output { db.output.attlist, empty }
+}
+div {
+  db.override.role.attribute = attribute role { text }
+  db.override.attlist =
+    db.override.role.attribute? & db.common.attributes
+  db.override =
+    
+    ## A wrapper for information that a module overrides in the resource it includes
+    element override {
+      db.override.attlist, (db._title & db.info.elements*)
+    }
+}
+div {
+  db.module.role.attribute = attribute role { text }
+  db.module.chunk.enumeration =
+    
+    ## This module will be in a chunk
+    "true"
+    | 
+      ## This module will not be in a chunk
+      "false"
+    | 
+      ## Chunking of this module depends on the overall chunking algorithm
+      "auto"
+  db.module.chunk.attribute =
+    
+    ## Specifies chunking for this module
+    [ a:defaultValue = "auto" ]
+    attribute chunk { db.module.chunk.enumeration }
+  db.module.resourceref.attribute =
+    
+    ## Indicates a single resource from which to construct this module
+    attribute resourceref { xsd:IDREF }
+  db.module.omittitles.attribute =
+    
+    ## Indicates if titles should be omitted when including a resource
+    attribute omittitles { xsd:boolean }?
+  db.module.contentonly.attribute =
+    
+    ## Indicates if only the content should be copied when including a resource
+    attribute contentonly { xsd:boolean }?
+  db.module.renderas.attribute =
+    
+    ## Specifies the DocBook element to which this unit should be renamed
+    attribute renderas { xsd:QName }
+  db.resource.module.attlist =
+    db.module.role.attribute?
+    & db.module.chunk.attribute?
+    & db.module.resourceref.attribute?
+    & db.module.omittitles.attribute?
+    & db.module.contentonly.attribute?
+    & db.module.renderas.attribute?
+    & db.common.attributes
+  db.module.info = db._info
+  db.module = db.resource.module | db.container.module
+  db.resource.module =
+    
+    ## A modular component within a structure
+    element module {
+      db.resource.module.attlist,
+      ((db.output | db.filterin | db.filterout)*,
+       db.module.info,
+       db.override?,
+       db.navigation.components*,
+       db.module*,
+       db.navigation.components*)
+    }
+  db.container.module.attlist =
+    db.module.role.attribute?
+    & db.module.chunk.attribute?
+    & db.module.omittitles.attribute?
+    & db.module.contentonly.attribute?
+    & db.module.renderas.attribute?
+    & db.common.attributes
+  db.container.module =
+    
+    ## A modular component within a structure
+    element module {
+      db.container.module.attlist,
+      ((db.output | db.filterin | db.filterout)*, db._any.docbook)
+    }
+}
+div {
+  db.filterout.role.attribute = attribute role { text }
+  db.filterout.attlist =
+    db.filterout.role.attribute? & db.common.attributes
+  db.filterout =
+    
+    ## Elements with effectivity attributes matching this element are suppressed
+    element filterout { db.filterout.attlist, empty }
+}
+div {
+  db.filterin.role.attribute = attribute role { text }
+  db.filterin.attlist =
+    db.filterin.role.attribute? & db.common.attributes
+  db.filterin =
+    
+    ## Elements with effectivity attributes matching this element are allowed
+    element filterin { db.filterin.attlist, empty }
+}
+div {
+  db.relationships.role.attribute = attribute role { text }
+  db.relationships.type.attribute =
+    
+    ## Identifies the type of the contained relationships
+    attribute type { xsd:NMTOKENS }
+  db.relationships.attlist =
+    db.relationships.role.attribute?
+    & db.relationships.type.attribute?
+    & db.common.attributes
+  db.relationships.info = db._info
+  db.relationships =
+    
+    ## Groups relationship elements to define associations between resources
+    element relationships {
+      db.relationships.attlist,
+      db.relationships.info,
+      (db.relationship | db.instance)+
+    }
+}
+div {
+  db.relationship.role.attribute = attribute role { text }
+  db.relationship.type.attribute =
+    
+    ## Identifies the type of the relationship
+    attribute type { xsd:NMTOKEN }
+  db.relationship.attlist =
+    db.relationship.role.attribute?
+    & db.relationship.type.attribute?
+    & db.linkend.attribute?
+    & db.common.attributes
+  db.relationship =
+    
+    ## A relationship associates one or more resources
+    element relationship {
+      db.relationship.attlist, db.association, db.instance+
+    }
+}
+div {
+  db.association.role.attribute = attribute role { text }
+  db.association.attlist =
+    db.association.role.attribute?
+    & db.linkend.attribute?
+    & db.common.attributes
+  db.association =
+    
+    ## Identifies the type of relationship between one or more resources
+    element association { db.association.attlist, text? }
+}
+div {
+  db.instance.role.attribute = attribute role { text }
+  db.instance.linking.attribute =
+    
+    ## Specifies the type of link for this instance
+    attribute linking { xsd:NMTOKENS }
+  db.instance.attlist =
+    db.instance.role.attribute?
+    & db.instance.linking.attribute?
+    & db.common.attributes
+  db.instance =
+    
+    ## Identifies a resource that is part of a relationship
+    element instance {
+      db.instance.attlist, db.linkend.attribute, empty
+    }
+}
+div {
+  db.transforms.role.attribute = attribute role { text }
+  db.transforms.attlist =
+    db.transforms.role.attribute? & db.common.attributes
+  db.transforms.info = db._info
+  db.transforms =
+    
+    ## List of transforms for converting from non-DocBook schemas
+    element transforms {
+      db.transforms.attlist, db.transforms.info, db.transform+
+    }
+}
+div {
+  db.transform.role.attribute = attribute role { text }
+  db.transform.grammar.attribute = db.grammar.attribute
+  db.transform.fileref.attribute =
+    
+    ## Indentifies the location of the data by URI
+    attribute fileref { xsd:anyURI }
+  db.transform.name.attribute =
+    
+    ## Identifies the location of the data by reference
+    attribute name { xsd:NMTOKEN }
+  db.transform.attlist =
+    db.transform.role.attribute?
+    & (db.transform.grammar.attribute | db.transform.name.attribute)
+    & db.transform.fileref.attribute
+    & db.common.attributes
+  db.transform =
+    
+    ## Identifies a transform for converting from a non-DocBook schema
+    element transform { db.transform.attlist, empty }
+}
+div {
+  db.description.role.attribute = attribute role { text }
+  db.description.attlist =
+    db.description.role.attribute? & db.common.attributes
+  db.description =
+    
+    ## A description of a resource or resources
+    element description { db.description.attlist, db._text }
+}
diff --git a/contrib/samples/assembly/docbook51/docbook.dtd b/contrib/samples/assembly/docbook51/docbook.dtd
new file mode 100755 (executable)
index 0000000..8250c43
--- /dev/null
@@ -0,0 +1,10662 @@
+<!ENTITY % db.xmlns.attrib
+       "xmlns  CDATA   #FIXED 'http://docbook.org/ns/docbook'"
+>
+<!ENTITY % xlink.xmlns.attrib
+       "xmlns:xlink    CDATA   #FIXED 'http://www.w3.org/1999/xlink'"
+>
+  <!ENTITY % db.arch.attribute
+       "arch   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.audience.attribute
+       "audience       CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.condition.attribute
+       "condition      CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.conformance.attribute
+       "conformance    CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.os.attribute
+       "os     CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.revision.attribute
+       "revision       CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.security.attribute
+       "security       CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.userlevel.attribute
+       "userlevel      CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.vendor.attribute
+       "vendor CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.wordsize.attribute
+       "wordsize       CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.endterm.attribute
+       "endterm        IDREF           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.linkend.attribute.REQ
+       "linkend        IDREF           #REQUIRED
+       "
+>
+
+  <!ENTITY % db.linkend.attribute
+       "linkend        IDREF           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.linkends.attribute
+       "linkends       IDREFS          #IMPLIED
+       "
+>
+
+  <!ENTITY % db.xlink.href.attribute
+       "xlink:href     CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.xlink.type.attribute
+       "xlink:type     (simple)                #IMPLIED
+       "
+>
+
+  <!ENTITY % db.xlink.role.attribute
+       "xlink:role     CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.xlink.arcrole.attribute
+       "xlink:arcrole  CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.xlink.title.attribute
+       "xlink:title    CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.xlink.show.enumeration
+       "(new | replace | embed | other | none)"
+>
+
+  <!ENTITY % db.xlink.actuate.enumeration
+       "(onLoad | onRequest | other | none)"
+>
+
+  <!ENTITY % db.xml.id.attribute.REQ
+       "xml:id ID              #REQUIRED
+       "
+>
+
+  <!ENTITY % db.xml.id.attribute
+       "xml:id ID              #IMPLIED
+       "
+>
+
+  <!ENTITY % db.version.attribute
+       "version        CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.xml.lang.attribute
+       "xml:lang       CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.xml.base.attribute
+       "xml:base       CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.remap.attribute
+       "remap  CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.xreflabel.attribute
+       "xreflabel      CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.xrefstyle.attribute
+       "xrefstyle      CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.revisionflag.enumeration
+       "(changed | added | deleted | off)"
+>
+
+  <!ENTITY % db.dir.enumeration
+       "(ltr | rtl | lro | rlo)"
+>
+
+  <!ENTITY % db.common.data.attributes
+       "format CDATA           #IMPLIED
+       fileref CDATA           #REQUIRED
+       entityref       ENTITY          #REQUIRED
+       "
+>
+
+  <!ENTITY % db.verbatim.continuation.enumeration
+       "(continues | restarts)"
+>
+
+  <!ENTITY % db.verbatim.linenumbering.enumeration
+       "(numbered | unnumbered)"
+>
+
+  <!ENTITY % db.verbatim.startinglinenumber.attribute
+       "startinglinenumber     CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.verbatim.language.attribute
+       "language       CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.verbatim.xml.space.attribute
+       "xml:space      (preserve)              #IMPLIED
+       "
+>
+
+  <!ENTITY % db.label.attribute
+       "label  CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.width.characters.attribute
+       "width  CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.spacing.enumeration
+       "(compact | normal)"
+>
+
+  <!ENTITY % db.pgwide.enumeration
+       "(0 | 1)"
+>
+
+  <!ENTITY % db.language.attribute
+       "language       CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.performance.enumeration
+       "(optional | required)"
+>
+
+  <!ENTITY % db.floatstyle.attribute
+       "floatstyle     CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.width.attribute
+       "width  CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.depth.attribute
+       "depth  CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.contentwidth.attribute
+       "contentwidth   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.contentdepth.attribute
+       "contentdepth   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.scalefit.enumeration
+       "(0 | 1)"
+>
+
+  <!ENTITY % db.scale.attribute
+       "scale  CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.halign.enumeration
+       "(center | char | justify | left | right)"
+>
+
+  <!ENTITY % db.valign.enumeration
+       "(bottom | middle | top)"
+>
+
+  <!ENTITY % db._title
+       "(title? | titleabbrev? | subtitle?)"
+>
+
+  <!ENTITY % db._title.req
+       "(title | titleabbrev? | subtitle?)"
+>
+
+  <!ENTITY % db._title.only
+       "(title? | titleabbrev?)"
+>
+
+  <!ENTITY % db._title.onlyreq
+       "(title | titleabbrev?)"
+>
+
+  <!ENTITY % db._info.title.forbidden
+       "info?"
+>
+
+  <!ENTITY % db.technical.inlines
+       "(replaceable | package | parameter | termdef | nonterminal | systemitem | option | optional | property)"
+>
+
+  <!ENTITY % db.product.inlines
+       "(trademark | productnumber | productname | database | application | hardware)"
+>
+
+  <!ENTITY % db.bibliography.inlines
+       "(citation | citerefentry | citetitle | citebiblioid | author | person | personname | org | orgname | editor | jobtitle)"
+>
+
+  <!ENTITY % db.graphic.inlines
+       "inlinemediaobject"
+>
+
+  <!ENTITY % db.indexing.inlines
+       "(indexterm)"
+>
+
+  <!ENTITY % db.link.inlines
+       "(xref | link | olink | anchor | biblioref)"
+>
+
+  <!ENTITY % db.para.blocks
+       "(anchor | para | formalpara | simpara)"
+>
+
+  <!ENTITY % db.formal.blocks
+       "(example | figure | table | equation)"
+>
+
+  <!ENTITY % db.informal.blocks
+       "(informalexample | informalfigure | informaltable | informalequation)"
+>
+
+  <!ENTITY % db.publishing.blocks
+       "(sidebar | blockquote | address | epigraph)"
+>
+
+  <!ENTITY % db.graphic.blocks
+       "(mediaobject | screenshot)"
+>
+
+  <!ENTITY % db.technical.blocks
+       "(task)"
+>
+
+  <!ENTITY % db.list.blocks
+       "(itemizedlist | orderedlist | procedure | simplelist | variablelist | segmentedlist | glosslist | bibliolist | calloutlist | qandaset)"
+>
+
+  <!ENTITY % db.verbatim.blocks
+       "(screen | literallayout | programlistingco | screenco | programlisting | synopsis)"
+>
+
+  <!ENTITY % db.info.elements
+       "(abstract | address | artpagenums | author | authorgroup | authorinitials | bibliocoverage | biblioid | bibliosource | collab | confgroup | contractsponsor | contractnum | copyright | cover | date | edition | editor | issuenum | keywordset | legalnotice | mediaobject | org | orgname | othercredit | pagenums | printhistory | pubdate | publisher | publishername | releaseinfo | revhistory | seriesvolnums | subjectset | volumenum | annotation | extendedlink | bibliomisc | bibliomset | bibliorelation | biblioset | itermset | productname | productnumber)"
+>
+
+  <!ENTITY % db.title.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.titleabbrev.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.subtitle.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.info.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.subjectset.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.subjectset.scheme.attribute
+       "scheme NMTOKEN         #IMPLIED
+       "
+>
+
+  <!ENTITY % db.subject.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.subject.weight.attribute
+       "weight CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.subjectterm.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.keywordset.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.keyword.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.procedure.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.step.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.stepalternatives.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.substeps.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.sidebar.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.abstract.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.personblurb.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.blockquote.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.attribution.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.bridgehead.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.remark.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.epigraph.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.footnote.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.footnote.label.attribute
+       "label  NMTOKEN         #IMPLIED
+       "
+>
+
+  <!ENTITY % db.formalpara.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.para.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.simpara.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.itemizedlist.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.itemizedlist.mark.attribute
+       "mark   NMTOKEN         #IMPLIED
+       "
+>
+
+  <!ENTITY % db.orderedlist.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.orderedlist.continuation.enumeration
+       "(continues | restarts)"
+>
+
+  <!ENTITY % db.orderedlist.startingnumber.attribute
+       "startingnumber CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.orderedlist.inheritnum.enumeration
+       "(ignore | inherit)"
+>
+
+  <!ENTITY % db.orderedlist.numeration.enumeration
+       "(arabic | upperalpha | loweralpha | upperroman | lowerroman)"
+>
+
+  <!ENTITY % db.listitem.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.listitem.override.attribute
+       "override       NMTOKEN         #IMPLIED
+       "
+>
+
+  <!ENTITY % db.segmentedlist.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.segtitle.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.seglistitem.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.seg.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.simplelist.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.simplelist.type.enumeration
+       "(horiz | vert | inline)"
+>
+
+  <!ENTITY % db.simplelist.columns.attribute
+       "columns        CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.member.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.variablelist.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.variablelist.termlength.attribute
+       "termlength     CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.varlistentry.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.term.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.example.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.informalexample.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.literallayout.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.literallayout.class.enumeration
+       "(monospaced | normal)"
+>
+
+  <!ENTITY % db.screen.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.screenshot.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.figure.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.informalfigure.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.mediaobject.content
+       "(videoobject | audioobject | imageobject | textobject | imageobjectco)"
+>
+
+  <!ENTITY % db.mediaobject.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.inlinemediaobject.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.videoobject.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.audioobject.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.imageobject.content
+       "(imagedata | imagedata | imagedata)"
+>
+
+  <!ENTITY % db.imageobject.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.textobject.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.videodata.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.audiodata.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.imagedata.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.textdata.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.textdata.encoding.attribute
+       "encoding       CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.caption.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.address.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.street.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.pob.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.postcode.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.city.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.state.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.country.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.phone.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.fax.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.otheraddr.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.affiliation.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.shortaffil.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.jobtitle.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.orgname.class.enumeration
+       "(consortium | corporation | informal | nonprofit | other)"
+>
+
+  <!ENTITY % db.orgname.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.orgdiv.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.artpagenums.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.personname.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.person.author.contentmodel
+       "(personname, ((personblurb | affiliation | email | uri | address | contrib))*)"
+>
+
+  <!ENTITY % db.org.author.contentmodel
+       "(orgname, ((orgdiv | affiliation | email | uri | address | contrib))*)"
+>
+
+  <!ENTITY % db.author.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.authorgroup.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.collab.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.authorinitials.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.person.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.org.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.confgroup.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.confdates.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.conftitle.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.confnum.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.confsponsor.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.contractnum.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.contractsponsor.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.copyright.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.year.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.holder.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.cover.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.date.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.edition.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.editor.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.biblioid.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.citebiblioid.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.bibliosource.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.bibliorelation.type.enumeration
+       "(hasformat | haspart | hasversion | isformatof | ispartof | isreferencedby | isreplacedby | isrequiredby | isversionof | references | replaces | requires | other)"
+>
+
+  <!ENTITY % db.bibliorelation.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.bibliocoverage.spacial.enumeration
+       "(dcmipoint | iso3166 | dcmibox | tgn | other)"
+>
+
+  <!ENTITY % db.bibliocoverage.temporal.enumeration
+       "(dcmiperiod | w3c-dtf | other)"
+>
+
+  <!ENTITY % db.bibliocoverage.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.legalnotice.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.othercredit.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.pagenums.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.contrib.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.honorific.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.firstname.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.givenname.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.surname.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.lineage.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.othername.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.printhistory.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.pubdate.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.publisher.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.publishername.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.releaseinfo.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.revhistory.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.revision.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.revnumber.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.revremark.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.revdescription.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.seriesvolnums.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.volumenum.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.issuenum.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.package.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.email.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.lineannotation.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.parameter.class.enumeration
+       "(command | function | option)"
+>
+
+  <!ENTITY % db.parameter.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.replaceable.class.enumeration
+       "(command | function | option | parameter)"
+>
+
+  <!ENTITY % db.replaceable.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.uri.type.attribute
+       "type   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.uri.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.abbrev.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.acronym.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.citation.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.citerefentry.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.refentrytitle.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.manvolnum.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.citetitle.pubwork.enumeration
+       "(article | bbs | book | cdrom | chapter | dvd | emailmessage | gopher | journal | manuscript | newsposting | part | refentry | section | series | set | webpage | wiki)"
+>
+
+  <!ENTITY % db.citetitle.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.emphasis.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.foreignphrase.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.phrase.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.quote.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.subscript.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.superscript.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.trademark.class.enumeration
+       "(copyright | registered | service | trade)"
+>
+
+  <!ENTITY % db.trademark.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.wordasword.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.footnoteref.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.xref.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.link.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.olink.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.olink.localinfo.attribute
+       "localinfo      CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.olink.targetdoc.attribute
+       "targetdoc      CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.olink.targetptr.attribute
+       "targetptr      CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.olink.type.attribute
+       "type   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.anchor.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.alt.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.status.attribute
+       "status CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.toplevel.sections
+       "(((section)+, (simplesect)*) | (simplesect)+ | ((sect1)+, (simplesect)*) | (refentry)+)"
+>
+
+  <!ENTITY % db.recursive.sections
+       "(((section)+, (simplesect)*) | (simplesect)+ | (refentry)+)"
+>
+
+  <!ENTITY % db.divisions
+       "(part | reference)"
+>
+
+  <!ENTITY % db.components
+       "(dedication | acknowledgements | preface | chapter | appendix | article | colophon)"
+>
+
+  <!ENTITY % db.navigation.components
+       "(glossary | bibliography | index | toc)"
+>
+
+  <!ENTITY % db.setindex.components
+       "(setindex)"
+>
+
+  <!ENTITY % db.toc.components
+       "(toc)"
+>
+
+  <!ENTITY % db.set.components
+       "(set | book)"
+>
+
+  <!ENTITY % db.set.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.book.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.dedication.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.acknowledgements.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.colophon.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.appendix.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.chapter.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.part.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.preface.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.partintro.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.section.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.simplesect.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.article.class.enumeration
+       "(faq | journalarticle | productsheet | specification | techreport | whitepaper)"
+>
+
+  <!ENTITY % db.article.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.annotations.attribute
+       "annotations    CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.annotation.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.annotation.annotates.attribute
+       "annotates      CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.xlink.from.attribute
+       "xlink:from     NMTOKEN         #IMPLIED
+       "
+>
+
+  <!ENTITY % db.xlink.label.attribute
+       "xlink:label    NMTOKEN         #IMPLIED
+       "
+>
+
+  <!ENTITY % db.xlink.to.attribute
+       "xlink:to       NMTOKEN         #IMPLIED
+       "
+>
+
+  <!ENTITY % db.extendedlink.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.locator.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.arc.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.sect1.sections
+       "(((sect2)+, (simplesect)*) | (simplesect)+)"
+>
+
+  <!ENTITY % db.sect1.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.sect2.sections
+       "(((sect3)+, (simplesect)*) | (simplesect)+)"
+>
+
+  <!ENTITY % db.sect2.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.sect3.sections
+       "(((sect4)+, (simplesect)*) | (simplesect)+)"
+>
+
+  <!ENTITY % db.sect3.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.sect4.sections
+       "(((sect5)+, (simplesect)*) | (simplesect)+)"
+>
+
+  <!ENTITY % db.sect4.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.sect5.sections
+       "(simplesect)+"
+>
+
+  <!ENTITY % db.sect5.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.toplevel.refsection
+       "((refsection)+ | (refsect1)+)"
+>
+
+  <!ENTITY % db.secondlevel.refsection
+       "((refsection)+ | (refsect2)+)"
+>
+
+  <!ENTITY % db.reference.components
+       "refentry"
+>
+
+  <!ENTITY % db.reference.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.refentry.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.refmeta.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.refmiscinfo.class.enumeration
+       "(source | version | manual | sectdesc | software)"
+>
+
+  <!ENTITY % db.refmiscinfo.class-other.attribute
+       "otherclass     CDATA           #REQUIRED
+       "
+>
+
+  <!ENTITY % db.refmiscinfo.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.refnamediv.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.refdescriptor.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.refname.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.refpurpose.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.refclass.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.refsynopsisdiv.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.refsection.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.refsect1.sections
+       "(refsect2)+"
+>
+
+  <!ENTITY % db.refsect1.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.refsect2.sections
+       "(refsect3)+"
+>
+
+  <!ENTITY % db.refsect2.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.refsect3.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.glossary.inlines
+       "(firstterm | glossterm | firstterm | glossterm)"
+>
+
+  <!ENTITY % db.baseform.attribute
+       "baseform       CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.glosslist.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.glossentry.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.glossentry.sortas.attribute
+       "sortas CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.glossdef.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.glossdef.subject.attribute
+       "subject        CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.glosssee.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.glosssee.otherterm.attribute
+       "otherterm      IDREF           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.glossseealso.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.glossseealso.otherterm.attribute
+       "otherterm      IDREF           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.firstterm.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.glossterm.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.glossary.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.glossdiv.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.termdef.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.relation.attribute
+       "relation       CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.biblioentry.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.bibliomixed.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.biblioset.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.bibliomset.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.bibliomisc.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.bibliography.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.bibliodiv.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.bibliolist.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.biblioref.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.biblioref.units.attribute
+       "units  CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.biblioref.begin.attribute
+       "begin  CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.biblioref.end.attribute
+       "end    CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.significance.enumeration
+       "(normal | preferred)"
+>
+
+  <!ENTITY % db.zone.attribute
+       "zone   IDREFS          #IMPLIED
+       "
+>
+
+  <!ENTITY % db.indexterm.pagenum.attribute
+       "pagenum        CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.scope.enumeration
+       "(all | global | local)"
+>
+
+  <!ENTITY % db.sortas.attribute
+       "sortas CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.index.type.attribute
+       "type   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.itermset.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.indexterm.contentmodel
+       "(primary?, ((secondary, ((tertiary, (see | (seealso)+)?) | see | (seealso)+)?) | see | (seealso)+)?)"
+>
+
+  <!ENTITY % db.primary.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.secondary.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.tertiary.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.see.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.seealso.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.index.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.setindex.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.indexdiv.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.indexentry.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.primaryie.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.secondaryie.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.tertiaryie.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.seeie.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.seealsoie.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.toc.pagenum.attribute
+       "pagenum        CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.toc.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.tocdiv.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.tocentry.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.task.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.tasksummary.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.taskprerequisites.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.taskrelated.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.area.units.enumeration
+       "(calspair | linecolumn | linecolumnpair | linerange | other)"
+>
+
+  <!ENTITY % db.calloutlist.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.callout.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.callout.arearefs.attribute
+       "arearefs       IDREFS          #REQUIRED
+       "
+>
+
+  <!ENTITY % db.programlistingco.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.areaspec.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.area.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.area.linkends.attribute
+       "linkends       IDREFS          #IMPLIED
+       "
+>
+
+  <!ENTITY % db.area.label.attribute
+       "label  CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.area.coords.attribute
+       "coords CDATA           #REQUIRED
+       "
+>
+
+  <!ENTITY % db.areaset.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.screenco.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.imageobjectco.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.co.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.coref.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.productionset.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.production.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.lhs.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.rhs.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.nonterminal.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.nonterminal.def.attribute
+       "def    CDATA           #REQUIRED
+       "
+>
+
+  <!ENTITY % db.constraint.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.productionrecap.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.constraintdef.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.char.attribute
+       "char   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.charoff.attribute
+       "charoff        CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.colsep.attribute
+       "colsep CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.rowsep.attribute
+       "rowsep CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.orient.attribute
+       "orient CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.tabstyle.attribute
+       "tabstyle       CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.rowheader.attribute
+       "rowheader      CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.align.attribute
+       "align  CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.valign.attribute
+       "valign CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.specify-col-by-colname.attributes
+       "colname        CDATA           #REQUIRED
+       "
+>
+
+  <!ENTITY % db.specify-col-by-namest.attributes
+       "namest CDATA           #REQUIRED
+       "
+>
+
+  <!ENTITY % db.specify-span-by-spanspec.attributes
+       "spanname       CDATA           #REQUIRED
+       "
+>
+
+  <!ENTITY % db.specify-span-directly.attributes
+       "nameend        CDATA           #REQUIRED
+       "
+>
+
+  <!ENTITY % db.colname.attribute
+       "colname        CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.spanname.attribute
+       "spanname       CDATA           #REQUIRED
+       "
+>
+
+  <!ENTITY % db.tgroup.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.tgroup.tgroupstyle.attribute
+       "tgroupstyle    CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.tgroup.cols.attribute
+       "cols   CDATA           #REQUIRED
+       "
+>
+
+  <!ENTITY % db.colspec.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.colspec.colnum.attribute
+       "colnum CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.colspec.colwidth.attribute
+       "colwidth       CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.spanspec.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.spanspec.namest.attribute
+       "namest CDATA           #REQUIRED
+       "
+>
+
+  <!ENTITY % db.spanspec.nameend.attribute
+       "nameend        CDATA           #REQUIRED
+       "
+>
+
+  <!ENTITY % db.row.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.entry.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.entry.morerows.attribute
+       "morerows       CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.entry.rotate.attribute
+       "rotate CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.entrytbl.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.entrytbl.tgroupstyle.attribute
+       "tgroupstyle    CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.entrytbl.cols.attribute
+       "cols   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.html.coreattrs
+       "class  CDATA           #IMPLIED
+       style   CDATA           #IMPLIED
+       title   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.html.i18n
+       "lang   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.html.events
+       "onclick        CDATA           #IMPLIED
+       ondblclick      CDATA           #IMPLIED
+       onmousedown     CDATA           #IMPLIED
+       onmouseup       CDATA           #IMPLIED
+       onmouseover     CDATA           #IMPLIED
+       onmousemove     CDATA           #IMPLIED
+       onmouseout      CDATA           #IMPLIED
+       onkeypress      CDATA           #IMPLIED
+       onkeydown       CDATA           #IMPLIED
+       onkeyup CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.html.cellhalign
+       "align  CDATA           #IMPLIED
+       char    CDATA           #IMPLIED
+       charoff CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.html.cellvalign
+       "valign CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.html.table.attributes
+       "summary        CDATA           #IMPLIED
+       width   CDATA           #IMPLIED
+       border  CDATA           #IMPLIED
+       frame   CDATA           #IMPLIED
+       rules   CDATA           #IMPLIED
+       cellspacing     CDATA           #IMPLIED
+       cellpadding     CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.html.tablecell.attributes
+       "abbr   CDATA           #IMPLIED
+       axis    CDATA           #IMPLIED
+       headers CDATA           #IMPLIED
+       scope   CDATA           #IMPLIED
+       rowspan CDATA           #IMPLIED
+       colspan CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.msgset.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.msgentry.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.simplemsgentry.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.simplemsgentry.msgaud.attribute
+       "msgaud CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.simplemsgentry.msgorig.attribute
+       "msgorig        CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.simplemsgentry.msglevel.attribute
+       "msglevel       CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.msg.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.msgmain.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.msgsub.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.msgrel.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.msgtext.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.msginfo.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.msglevel.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.msgorig.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.msgaud.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.msgexplan.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.qandaset.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.qandaset.defaultlabel.enumeration
+       "(none | number | qanda)"
+>
+
+  <!ENTITY % db.qandadiv.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.qandaentry.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.question.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.answer.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.label.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.math.inlines
+       "inlineequation"
+>
+
+  <!ENTITY % db.equation.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.informalequation.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.inlineequation.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.mathphrase.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.markup.inlines
+       "(tag | markup | token | symbol | literal | code | constant | email | uri)"
+>
+
+  <!ENTITY % db.markup.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.tag.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.tag.class.enumeration
+       "(attribute | attvalue | element | emptytag | endtag | genentity | localname | namespace | numcharref | paramentity | pi | prefix | comment | starttag | xmlpi)"
+>
+
+  <!ENTITY % db.tag.namespace.attribute
+       "namespace      CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.symbol.class.attribute
+       "class  (limit)         #IMPLIED
+       "
+>
+
+  <!ENTITY % db.symbol.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.token.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.literal.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % code.language.attribute
+       "language       CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.code.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.constant.class.attribute
+       "class  (limit)         #IMPLIED
+       "
+>
+
+  <!ENTITY % db.constant.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.productname.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.productname.class.enumeration
+       "(copyright | registered | service | trade)"
+>
+
+  <!ENTITY % db.productnumber.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.database.class.enumeration
+       "(altkey | constraint | datatype | field | foreignkey | group | index | key1 | key2 | name | primarykey | procedure | record | rule | secondarykey | table | user | view)"
+>
+
+  <!ENTITY % db.database.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.application.class.enumeration
+       "(hardware | software)"
+>
+
+  <!ENTITY % db.application.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.hardware.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.gui.inlines
+       "(guiicon | guibutton | guimenuitem | guimenu | guisubmenu | guilabel | menuchoice | mousebutton)"
+>
+
+  <!ENTITY % db.guibutton.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.guiicon.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.guilabel.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.guimenu.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.guimenuitem.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.guisubmenu.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.menuchoice.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.mousebutton.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.keyboard.inlines
+       "(keycombo | keycap | keycode | keysym | shortcut | accel)"
+>
+
+  <!ENTITY % db.keycap.function.enumeration
+       "(alt | backspace | command | control | delete | down | end | enter | escape | home | insert | left | meta | option | pagedown | pageup | right | shift | space | tab | up | other)"
+>
+
+  <!ENTITY % db.keycap.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.keycode.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.keycombination.contentmodel
+       "(keycap | keycombo | keysym | mousebutton)"
+>
+
+  <!ENTITY % db.keycombo.action.enumeration
+       "(click | double-click | press | seq | simul | other)"
+>
+
+  <!ENTITY % db.keycombo.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.keysym.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.accel.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.shortcut.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.os.inlines
+       "(prompt | envar | filename | command | computeroutput | userinput)"
+>
+
+  <!ENTITY % db.prompt.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.envar.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.filename.class.enumeration
+       "(devicefile | directory | extension | headerfile | libraryfile | partition | symlink)"
+>
+
+  <!ENTITY % db.filename.path.attribute
+       "path   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.filename.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.command.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.computeroutput.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.userinput.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.cmdsynopsis.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.cmdsynopsis.sepchar.attribute
+       "sepchar        CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.cmdsynopsis.cmdlength.attribute
+       "cmdlength      CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.rep.enumeration
+       "(norepeat | repeat)"
+>
+
+  <!ENTITY % db.choice.enumeration
+       "(opt | plain | req)"
+>
+
+  <!ENTITY % db.arg.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.sbr.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.synopfragment.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.synopfragmentref.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.oo.inlines
+       "(ooclass | ooexception | oointerface)"
+>
+
+  <!ENTITY % db.synopsis.blocks
+       "(funcsynopsis | classsynopsis | methodsynopsis | constructorsynopsis | destructorsynopsis | fieldsynopsis | cmdsynopsis)"
+>
+
+  <!ENTITY % db.synopsis.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.funcsynopsis.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.funcsynopsisinfo.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.funcprototype.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.funcdef.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.function.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.void.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.varargs.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.paramdef.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.paramdef.choice.enumeration
+       "(opt | req)"
+>
+
+  <!ENTITY % db.funcparams.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.classsynopsis.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.classsynopsis.class.enumeration
+       "(class | interface)"
+>
+
+  <!ENTITY % db.classsynopsisinfo.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.ooclass.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.oointerface.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.ooexception.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.modifier.xml.space.attribute
+       "xml:space      (preserve)              #IMPLIED
+       "
+>
+
+  <!ENTITY % db.modifier.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.interfacename.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.exceptionname.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.fieldsynopsis.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.initializer.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.constructorsynopsis.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.destructorsynopsis.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.methodsynopsis.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.methodname.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.methodparam.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.varname.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.returnvalue.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.type.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.classname.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.programlisting.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.admonition.blocks
+       "(caution | important | note | tip | warning)"
+>
+
+  <!ENTITY % db.caution.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.important.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.note.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.tip.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.warning.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.error.inlines
+       "(errorcode | errortext | errorname | errortype)"
+>
+
+  <!ENTITY % db.errorcode.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.errorname.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.errortext.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.errortype.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.systemitem.class.enumeration
+       "(daemon | domainname | etheraddress | event | eventhandler | filesystem | fqdomainname | groupname | ipaddress | library | macro | netmask | newsgroup | osname | process | protocol | resource | securitycontext | server | service | systemname | username | other)"
+>
+
+  <!ENTITY % db.systemitem.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.option.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.optional.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.property.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.topic.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.topic.type.attribute
+       "type   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.biblio.class.enumeration
+       "(doi | isbn | isrn | issn | libraryofcongress | pubsnumber | uri | other)"
+>
+
+  <!ENTITY % db.bridgehead.renderas.enumeration
+       "(sect1 | sect2 | sect3 | sect4 | sect5 | other)"
+>
+
+  <!ENTITY % db.othercredit.class.enumeration
+       "(copyeditor | graphicdesigner | productioneditor | technicaleditor | translator | indexer | proofreader | coverdesigner | interiordesigner | illustrator | reviewer | typesetter | conversion | other)"
+>
+
+  <!ENTITY % db.indexterm.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.indexterm.class.attribute
+       "class  CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.group.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.thead.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.tfoot.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.tbody.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.table.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.informaltable.role.attribute
+       "role   CDATA           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.equation.content
+       "((mediaobject)+ | (mathphrase)+)"
+>
+
+  <!ENTITY % db.inlineequation.content
+       "((inlinemediaobject)+ | (mathphrase)+)"
+>
+
+  <!ENTITY % db.date.contentmodel
+       "#PCDATA"
+>
+
+  <!ENTITY % db.effectivity.attributes
+       "%db.arch.attribute;
+       %db.audience.attribute;
+       %db.condition.attribute;
+       %db.conformance.attribute;
+       %db.os.attribute;
+       %db.revision.attribute;
+       %db.security.attribute;
+       %db.userlevel.attribute;
+       %db.vendor.attribute;
+       %db.wordsize.attribute;
+       "
+>
+
+  <!ENTITY % db.xlink.show.attribute
+       "xlink:show     %db.xlink.show.enumeration;             #IMPLIED
+       "
+>
+
+  <!ENTITY % db.xlink.actuate.attribute
+       "xlink:actuate  %db.xlink.actuate.enumeration;          #IMPLIED
+       "
+>
+
+  <!ENTITY % db.revisionflag.attribute
+       "revisionflag   %db.revisionflag.enumeration;           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.dir.attribute
+       "dir    %db.dir.enumeration;            #IMPLIED
+       "
+>
+
+  <!ENTITY % db.verbatim.continuation.attribute
+       "continuation   %db.verbatim.continuation.enumeration;          #IMPLIED
+       "
+>
+
+  <!ENTITY % db.verbatim.linenumbering.attribute
+       "linenumbering  %db.verbatim.linenumbering.enumeration;         #IMPLIED
+       "
+>
+
+  <!ENTITY % db.spacing.attribute
+       "spacing        %db.spacing.enumeration;                #IMPLIED
+       "
+>
+
+  <!ENTITY % db.pgwide.attribute
+       "pgwide %db.pgwide.enumeration;         #IMPLIED
+       "
+>
+
+  <!ENTITY % db.performance.attribute
+       "performance    %db.performance.enumeration;            #IMPLIED
+       "
+>
+
+  <!ENTITY % db.ubiq.inlines
+       "(inlinemediaobject | remark | %db.link.inlines; | alt | trademark | abbrev | acronym | date | emphasis | footnote | footnoteref | foreignphrase | phrase | quote | subscript | superscript | wordasword | annotation | firstterm | glossterm | indexterm | coref)"
+>
+
+  <!ENTITY % db._info
+       "((%db._title;), (info?))"
+>
+
+  <!ENTITY % db._info.title.req
+       "(%db._title.req;, (info?))"
+>
+
+  <!ENTITY % db._info.title.only
+       "(%db._title.only;, (info?))"
+>
+
+  <!ENTITY % db._info.title.onlyreq
+       "(%db._title.onlyreq;, (info?))"
+>
+
+  <!ENTITY % db.publishing.inlines
+       "(abbrev | acronym | date | emphasis | footnote | footnoteref | foreignphrase | phrase | quote | subscript | superscript | wordasword | %db.glossary.inlines; | coref)"
+>
+
+  <!ENTITY % db.nopara.blocks
+       "(%db.list.blocks; | %db.formal.blocks; | %db.informal.blocks; | %db.publishing.blocks; | %db.graphic.blocks; | %db.technical.blocks; | %db.verbatim.blocks; | bridgehead | remark | revhistory | indexterm | %db.synopsis.blocks; | %db.admonition.blocks;)"
+>
+
+  <!ENTITY % db.stepalternatives.info
+       "%db._info.title.forbidden;"
+>
+
+  <!ENTITY % db.epigraph.info
+       "%db._info.title.forbidden;"
+>
+
+  <!ENTITY % db.para.info
+       "%db._info.title.forbidden;"
+>
+
+  <!ENTITY % db.simpara.info
+       "%db._info.title.forbidden;"
+>
+
+  <!ENTITY % db.orderedlist.continuation.attribute
+       "continuation   %db.orderedlist.continuation.enumeration;               #IMPLIED
+       "
+>
+
+  <!ENTITY % db.orderedlist.inheritnum.attribute
+       "inheritnum     %db.orderedlist.inheritnum.enumeration;         #IMPLIED
+       "
+>
+
+  <!ENTITY % db.orderedlist.numeration.attribute
+       "numeration     %db.orderedlist.numeration.enumeration;         #IMPLIED
+       "
+>
+
+  <!ENTITY % db.simplelist.type.attribute
+       "type   %db.simplelist.type.enumeration;                #IMPLIED
+       "
+>
+
+  <!ENTITY % db.informalexample.info
+       "%db._info.title.forbidden;"
+>
+
+  <!ENTITY % db.literallayout.class.attribute
+       "class  %db.literallayout.class.enumeration;            #IMPLIED
+       "
+>
+
+  <!ENTITY % db.informalfigure.info
+       "%db._info.title.forbidden;"
+>
+
+  <!ENTITY % db.mediaobject.info
+       "%db._info.title.forbidden;"
+>
+
+  <!ENTITY % db.inlinemediaobject.info
+       "%db._info.title.forbidden;"
+>
+
+  <!ENTITY % db.videoobject.info
+       "%db._info.title.forbidden;"
+>
+
+  <!ENTITY % db.audioobject.info
+       "%db._info.title.forbidden;"
+>
+
+  <!ENTITY % db.imageobject.info
+       "%db._info.title.forbidden;"
+>
+
+  <!ENTITY % db.textobject.info
+       "%db._info.title.forbidden;"
+>
+
+  <!ENTITY % db.videodata.align.enumeration
+       "%db.halign.enumeration;"
+>
+
+  <!ENTITY % db.videodata.valign.enumeration
+       "%db.valign.enumeration;"
+>
+
+  <!ENTITY % db.videodata.scalefit.enumeration
+       "%db.scalefit.enumeration;"
+>
+
+  <!ENTITY % db.videodata.info
+       "%db._info.title.forbidden;"
+>
+
+  <!ENTITY % db.audiodata.info
+       "%db._info.title.forbidden;"
+>
+
+  <!ENTITY % db.imagedata.align.enumeration
+       "%db.halign.enumeration;"
+>
+
+  <!ENTITY % db.imagedata.valign.enumeration
+       "%db.valign.enumeration;"
+>
+
+  <!ENTITY % db.imagedata.scalefit.enumeration
+       "%db.scalefit.enumeration;"
+>
+
+  <!ENTITY % db.imagedata.info
+       "%db._info.title.forbidden;"
+>
+
+  <!ENTITY % db.textdata.info
+       "%db._info.title.forbidden;"
+>
+
+  <!ENTITY % db.caption.info
+       "%db._info.title.forbidden;"
+>
+
+  <!ENTITY % db.orgname.class.attribute
+       "class  %db.orgname.class.enumeration;          #IMPLIED
+       otherclass      NMTOKEN         #IMPLIED
+       "
+>
+
+  <!ENTITY % db.credit.contentmodel
+       "(%db.person.author.contentmodel; | %db.org.author.contentmodel;)"
+>
+
+  <!ENTITY % db.cover.contentmodel
+       "(%db.para.blocks; | %db.list.blocks; | %db.informal.blocks; | %db.publishing.blocks; | %db.graphic.blocks; | %db.technical.blocks; | %db.verbatim.blocks; | bridgehead | remark | revhistory | %db.synopsis.blocks;)"
+>
+
+  <!ENTITY % db.bibliorelation.type.attribute
+       "type   %db.bibliorelation.type.enumeration;            #REQUIRED
+       "
+>
+
+  <!ENTITY % db.bibliocoverage.spatial.attribute
+       "spatial        %db.bibliocoverage.spacial.enumeration;         #REQUIRED
+       "
+>
+
+  <!ENTITY % db.bibliocoverage.temporal.attribute
+       "temporal       %db.bibliocoverage.temporal.enumeration;                #REQUIRED
+       "
+>
+
+  <!ENTITY % db.parameter.class.attribute
+       "class  %db.parameter.class.enumeration;                #IMPLIED
+       "
+>
+
+  <!ENTITY % db.replaceable.class.attribute
+       "class  %db.replaceable.class.enumeration;              #IMPLIED
+       "
+>
+
+  <!ENTITY % db.citetitle.pubwork.attribute
+       "pubwork        %db.citetitle.pubwork.enumeration;              #IMPLIED
+       "
+>
+
+  <!ENTITY % db.trademark.class.attribute
+       "class  %db.trademark.class.enumeration;                #IMPLIED
+       "
+>
+
+  <!ENTITY % db.book.components
+       "(((%db.navigation.components; | %db.components; | %db.divisions;))* | (topic)*)"
+>
+
+  <!ENTITY % db.part.components
+       "(%db.navigation.components; | %db.components; | refentry | reference)"
+>
+
+  <!ENTITY % db.article.components
+       "%db.toplevel.sections;"
+>
+
+  <!ENTITY % db.article.navcomponents
+       "(%db.navigation.components; | acknowledgements | dedication | appendix | colophon)"
+>
+
+  <!ENTITY % db.article.class.attribute
+       "class  %db.article.class.enumeration;          #IMPLIED
+       "
+>
+
+  <!ENTITY % db.refentry.info
+       "%db._info.title.forbidden;"
+>
+
+  <!ENTITY % db.refmiscinfo.class-enum.attribute
+       "class  %db.refmiscinfo.class.enumeration;              #IMPLIED
+       "
+>
+
+  <!ENTITY % db.significance.attribute
+       "significance   %db.significance.enumeration;           #IMPLIED
+       "
+>
+
+  <!ENTITY % db.scope.attribute
+       "scope  %db.scope.enumeration;          #IMPLIED
+       "
+>
+
+  <!ENTITY % db.area.units.attribute
+       "class  %db.area.units.enumeration;             #REQUIRED
+       "
+>
+
+  <!ENTITY % db.programlistingco.info
+       "%db._info.title.forbidden;"
+>
+
+  <!ENTITY % db.screenco.info
+       "%db._info.title.forbidden;"
+>
+
+  <!ENTITY % db.imageobjectco.info
+       "%db._info.title.forbidden;"
+>
+
+  <!ENTITY % db.column-spec.attributes
+       "%db.specify-col-by-colname.attributes;
+       %db.specify-col-by-namest.attributes;
+       %db.specify-span-by-spanspec.attributes;
+       %db.specify-span-directly.attributes;
+       "
+>
+
+  <!ENTITY % db.cals.informaltable.info
+       "%db._info.title.forbidden;"
+>
+
+  <!ENTITY % db.html.table.info
+       "%db._info.title.forbidden;"
+>
+
+  <!ENTITY % db.html.informaltable.info
+       "%db._info.title.forbidden;"
+>
+
+  <!ENTITY % db.qandaset.defaultlabel.attribute
+       "defaultlabel   %db.qandaset.defaultlabel.enumeration;          #IMPLIED
+       "
+>
+
+  <!ENTITY % db.informalequation.info
+       "%db._info.title.forbidden;"
+>
+
+  <!ENTITY % db.tag.class.attribute
+       "class  %db.tag.class.enumeration;              #IMPLIED
+       "
+>
+
+  <!ENTITY % db.productname.class.attribute
+       "class  %db.productname.class.enumeration;              #IMPLIED
+       "
+>
+
+  <!ENTITY % db.database.class.attribute
+       "class  %db.database.class.enumeration;         #IMPLIED
+       "
+>
+
+  <!ENTITY % db.application.class.attribute
+       "class  %db.application.class.enumeration;              #IMPLIED
+       "
+>
+
+  <!ENTITY % db.keycap.function.attrib
+       "function       %db.keycap.function.enumeration;                #IMPLIED
+       "
+>
+
+  <!ENTITY % db.keycombo.action.attrib
+       "action %db.keycombo.action.enumeration;                #IMPLIED
+       "
+>
+
+  <!ENTITY % db.filename.class.attribute
+       "class  %db.filename.class.enumeration;         #IMPLIED
+       "
+>
+
+  <!ENTITY % db.cmdsynopsis.info
+       "%db._info.title.forbidden;"
+>
+
+  <!ENTITY % db.rep.attribute
+       "rep    %db.rep.enumeration;            #IMPLIED
+       "
+>
+
+  <!ENTITY % db.choice.opt.attribute
+       "choice %db.choice.enumeration;         #IMPLIED
+       "
+>
+
+  <!ENTITY % db.choice.req.attribute
+       "choice %db.choice.enumeration;         #IMPLIED
+       "
+>
+
+  <!ENTITY % db.programming.inlines
+       "(function | parameter | varname | returnvalue | type | classname | exceptionname | interfacename | methodname | modifier | initializer | %db.oo.inlines;)"
+>
+
+  <!ENTITY % db.funcsynopsis.info
+       "%db._info.title.forbidden;"
+>
+
+  <!ENTITY % db.paramdef.choice.attribute
+       "choice %db.paramdef.choice.enumeration;                #IMPLIED
+       "
+>
+
+  <!ENTITY % db.classsynopsis.class.attribute
+       "class  %db.classsynopsis.class.enumeration;            #IMPLIED
+       "
+>
+
+  <!ENTITY % db.systemitem.class.attribute
+       "class  %db.systemitem.class.enumeration;               #IMPLIED
+       otherclass      NMTOKEN         #IMPLIED
+       "
+>
+
+  <!ENTITY % db.biblio.class.attribute
+       "class  %db.biblio.class.enumeration;           #REQUIRED
+       otherclass      NMTOKEN         #IMPLIED
+       "
+>
+
+  <!ENTITY % db.bridgehead.renderas.attribute
+       "class  %db.bridgehead.renderas.enumeration;            #IMPLIED
+       "
+>
+
+  <!ENTITY % db.othercredit.class.attribute
+       "class  %db.othercredit.class.enumeration;              #REQUIRED
+       otherclass      NMTOKEN         #IMPLIED
+       "
+>
+
+  <!ENTITY % db.href.attributes
+       "%db.xlink.href.attribute;
+       %db.xlink.type.attribute;
+       %db.xlink.role.attribute;
+       %db.xlink.arcrole.attribute;
+       %db.xlink.title.attribute;
+       %db.xlink.show.attribute;
+       %db.xlink.actuate.attribute;
+       "
+>
+
+  <!ENTITY % db.common.base.attributes
+       "%db.version.attribute;
+       %db.xml.lang.attribute;
+       %db.xml.base.attribute;
+       %db.remap.attribute;
+       %db.xreflabel.attribute;
+       %db.revisionflag.attribute;
+       %db.dir.attribute;
+       %db.effectivity.attributes;
+       "
+>
+
+  <!ENTITY % db.verbatim.common.attributes
+       "%db.verbatim.continuation.attribute;
+       %db.verbatim.linenumbering.attribute;
+       %db.verbatim.startinglinenumber.attribute;
+       %db.verbatim.xml.space.attribute;
+       "
+>
+
+  <!ENTITY % db._text
+       "((#PCDATA | %db.ubiq.inlines; | phrase | replaceable))*"
+>
+
+  <!ENTITY % db.general.inlines
+       "(%db.publishing.inlines; | %db.product.inlines; | %db.bibliography.inlines; | %db.graphic.inlines; | %db.indexing.inlines; | %db.link.inlines;)"
+>
+
+  <!ENTITY % db.domain.inlines
+       "(%db.technical.inlines; | %db.math.inlines; | %db.markup.inlines; | %db.gui.inlines; | %db.keyboard.inlines; | %db.os.inlines; | %db.programming.inlines; | %db.error.inlines;)"
+>
+
+  <!ENTITY % db.all.blocks
+       "(%db.nopara.blocks; | %db.para.blocks; | annotation)"
+>
+
+  <!ENTITY % db.bibliographic.elements
+       "(%db.info.elements; | %db.publishing.inlines; | citerefentry | citetitle | citebiblioid | person | personblurb | personname | subtitle | title | titleabbrev)"
+>
+
+  <!ENTITY % db.procedure.info
+       "%db._info.title.only;"
+>
+
+  <!ENTITY % db.step.info
+       "%db._info.title.only;"
+>
+
+  <!ENTITY % db.sidebar.info
+       "%db._info;"
+>
+
+  <!ENTITY % db.abstract.info
+       "%db._info.title.only;"
+>
+
+  <!ENTITY % db.personblurb.info
+       "%db._info.title.only;"
+>
+
+  <!ENTITY % db.blockquote.info
+       "%db._info.title.only;"
+>
+
+  <!ENTITY % db.formalpara.info
+       "%db._info.title.onlyreq;"
+>
+
+  <!ENTITY % db.itemizedlist.info
+       "%db._info.title.only;"
+>
+
+  <!ENTITY % db.orderedlist.info
+       "%db._info.title.only;"
+>
+
+  <!ENTITY % db.segmentedlist.info
+       "%db._info.title.only;"
+>
+
+  <!ENTITY % db.variablelist.info
+       "%db._info.title.only;"
+>
+
+  <!ENTITY % db.example.info
+       "%db._info.title.onlyreq;"
+>
+
+  <!ENTITY % db.screenshot.info
+       "%db._info;"
+>
+
+  <!ENTITY % db.figure.info
+       "%db._info.title.onlyreq;"
+>
+
+  <!ENTITY % db.videodata.align.attribute
+       "align  %db.videodata.align.enumeration;                #IMPLIED
+       "
+>
+
+  <!ENTITY % db.videodata.valign.attribute
+       "valign %db.videodata.valign.enumeration;               #IMPLIED
+       "
+>
+
+  <!ENTITY % db.videodata.scalefit.attribute
+       "scalefit       %db.videodata.scalefit.enumeration;             #IMPLIED
+       "
+>
+
+  <!ENTITY % db.imagedata.align.attribute
+       "align  %db.imagedata.align.enumeration;                #IMPLIED
+       "
+>
+
+  <!ENTITY % db.imagedata.valign.attribute
+       "valign %db.imagedata.valign.enumeration;               #IMPLIED
+       "
+>
+
+  <!ENTITY % db.imagedata.scalefit.attribute
+       "scalefit       %db.imagedata.scalefit.enumeration;             #IMPLIED
+       "
+>
+
+  <!ENTITY % db.bibliocoverage.coverage.attrib
+       "%db.bibliocoverage.spatial.attribute;
+       %db.bibliocoverage.temporal.attribute;
+       "
+>
+
+  <!ENTITY % db.legalnotice.info
+       "%db._info.title.only;"
+>
+
+  <!ENTITY % db.revhistory.info
+       "%db._info.title.only;"
+>
+
+  <!ENTITY % db.replaceable.inlines
+       "(((#PCDATA | %db.ubiq.inlines; | phrase | replaceable))* | co)"
+>
+
+  <!ENTITY % db.set.info
+       "%db._info.title.req;"
+>
+
+  <!ENTITY % db.book.info
+       "%db._info;"
+>
+
+  <!ENTITY % db.dedication.info
+       "%db._info;"
+>
+
+  <!ENTITY % db.acknowledgements.info
+       "%db._info;"
+>
+
+  <!ENTITY % db.colophon.info
+       "%db._info;"
+>
+
+  <!ENTITY % db.appendix.info
+       "%db._info.title.req;"
+>
+
+  <!ENTITY % db.chapter.info
+       "%db._info.title.req;"
+>
+
+  <!ENTITY % db.part.contentmodel
+       "((%db.part.components;)+ | (topic)+)"
+>
+
+  <!ENTITY % db.part.info
+       "%db._info.title.req;"
+>
+
+  <!ENTITY % db.preface.info
+       "%db._info.title.req;"
+>
+
+  <!ENTITY % db.partintro.info
+       "%db._info;"
+>
+
+  <!ENTITY % db.section.info
+       "%db._info.title.req;"
+>
+
+  <!ENTITY % db.simplesect.info
+       "%db._info.title.req;"
+>
+
+  <!ENTITY % db.article.info
+       "%db._info.title.req;"
+>
+
+  <!ENTITY % db.annotation.info
+       "%db._info.title.only;"
+>
+
+  <!ENTITY % db.sect1.info
+       "%db._info.title.req;"
+>
+
+  <!ENTITY % db.sect2.info
+       "%db._info.title.req;"
+>
+
+  <!ENTITY % db.sect3.info
+       "%db._info.title.req;"
+>
+
+  <!ENTITY % db.sect4.info
+       "%db._info.title.req;"
+>
+
+  <!ENTITY % db.sect5.info
+       "%db._info.title.req;"
+>
+
+  <!ENTITY % db.reference.info
+       "%db._info.title.req;"
+>
+
+  <!ENTITY % db.refmiscinfo.class.attribute
+       "%db.refmiscinfo.class-enum.attribute;
+       %db.refmiscinfo.class-other.attribute;
+       "
+>
+
+  <!ENTITY % db.refsynopsisdiv.info
+       "%db._info;"
+>
+
+  <!ENTITY % db.refsection.info
+       "%db._info.title.req;"
+>
+
+  <!ENTITY % db.refsect1.info
+       "%db._info.title.req;"
+>
+
+  <!ENTITY % db.refsect2.info
+       "%db._info.title.req;"
+>
+
+  <!ENTITY % db.refsect3.info
+       "%db._info.title.req;"
+>
+
+  <!ENTITY % db.glosslist.info
+       "%db._info.title.only;"
+>
+
+  <!ENTITY % db.glossary.info
+       "%db._info;"
+>
+
+  <!ENTITY % db.glossdiv.info
+       "%db._info.title.req;"
+>
+
+  <!ENTITY % db.bibliography.info
+       "%db._info;"
+>
+
+  <!ENTITY % db.bibliodiv.info
+       "%db._info.title.req;"
+>
+
+  <!ENTITY % db.bibliolist.info
+       "%db._info.title.only;"
+>
+
+  <!ENTITY % db.index.info
+       "%db._info;"
+>
+
+  <!ENTITY % db.setindex.info
+       "%db._info;"
+>
+
+  <!ENTITY % db.indexdiv.info
+       "%db._info.title.req;"
+>
+
+  <!ENTITY % db.toc.info
+       "%db._info.title.only;"
+>
+
+  <!ENTITY % db.tocdiv.info
+       "%db._info;"
+>
+
+  <!ENTITY % db.task.info
+       "%db._info.title.req;"
+>
+
+  <!ENTITY % db.tasksummary.info
+       "%db._info.title.only;"
+>
+
+  <!ENTITY % db.taskprerequisites.info
+       "%db._info.title.only;"
+>
+
+  <!ENTITY % db.taskrelated.info
+       "%db._info.title.only;"
+>
+
+  <!ENTITY % db.calloutlist.info
+       "%db._info.title.only;"
+>
+
+  <!ENTITY % db.productionset.info
+       "%db._info.title.only;"
+>
+
+  <!ENTITY % db.constraintdef.info
+       "%db._info.title.only;"
+>
+
+  <!ENTITY % db.cals.table.info
+       "%db._info.title.onlyreq;"
+>
+
+  <!ENTITY % db.html.table.model
+       "((%db.html.table.info;)?, caption, ((col)* | (colgroup)*), thead?, tfoot?, ((tbody)+ | (tr)+))"
+>
+
+  <!ENTITY % db.html.informaltable.model
+       "((%db.html.informaltable.info;)?, ((col)* | (colgroup)*), thead?, tfoot?, ((tbody)+ | (tr)+))"
+>
+
+  <!ENTITY % db.msgset.info
+       "%db._info.title.only;"
+>
+
+  <!ENTITY % db.msg.info
+       "%db._info.title.only;"
+>
+
+  <!ENTITY % db.msgmain.info
+       "%db._info.title.only;"
+>
+
+  <!ENTITY % db.msgsub.info
+       "%db._info.title.only;"
+>
+
+  <!ENTITY % db.msgrel.info
+       "%db._info.title.only;"
+>
+
+  <!ENTITY % db.msgexplan.info
+       "%db._info.title.only;"
+>
+
+  <!ENTITY % db.qandaset.info
+       "%db._info.title.only;"
+>
+
+  <!ENTITY % db.qandadiv.info
+       "%db._info.title.only;"
+>
+
+  <!ENTITY % db.qandaentry.info
+       "%db._info.title.only;"
+>
+
+  <!ENTITY % db.equation.info
+       "%db._info.title.only;"
+>
+
+  <!ENTITY % db.computeroutput.inlines
+       "(#PCDATA | %db.ubiq.inlines; | %db.os.inlines; | %db.technical.inlines; | co | %db.markup.inlines;)"
+>
+
+  <!ENTITY % db.userinput.inlines
+       "(#PCDATA | %db.ubiq.inlines; | %db.os.inlines; | %db.technical.inlines; | co | %db.markup.inlines; | %db.gui.inlines; | %db.keyboard.inlines;)"
+>
+
+  <!ENTITY % db.prompt.inlines
+       "(((#PCDATA | %db.ubiq.inlines; | phrase | replaceable))* | co)"
+>
+
+  <!ENTITY % db.initializer.inlines
+       "(((#PCDATA | %db.ubiq.inlines; | phrase | replaceable))* | mathphrase | %db.markup.inlines;)"
+>
+
+  <!ENTITY % db.systemitem.inlines
+       "(((#PCDATA | %db.ubiq.inlines; | phrase | replaceable))* | co)"
+>
+
+  <!ENTITY % db.topic.info
+       "%db._info.title.req;"
+>
+
+  <!ENTITY % db.common.attributes
+       "%db.xml.id.attribute;
+       %db.common.base.attributes;
+       %db.annotations.attribute;
+       "
+>
+
+  <!ENTITY % db.common.idreq.attributes
+       "%db.xml.id.attribute.REQ;
+       %db.common.base.attributes;
+       %db.annotations.attribute;
+       "
+>
+
+  <!ENTITY % db.common.linking.attributes
+       "%db.linkend.attribute;
+       %db.href.attributes;
+       "
+>
+
+  <!ENTITY % db.common.req.linking.attributes
+       "%db.linkend.attribute.REQ;
+       %db.href.attributes;
+       "
+>
+
+  <!ENTITY % db.verbatim.attributes
+       "%db.verbatim.common.attributes;
+       %db.verbatim.language.attribute;
+       "
+>
+
+  <!ENTITY % db.all.inlines
+       "(#PCDATA | %db.ubiq.inlines; | %db.general.inlines; | %db.domain.inlines;)"
+>
+
+  <!ENTITY % db.verbatim.inlines
+       "((#PCDATA | %db.ubiq.inlines; | %db.general.inlines; | %db.domain.inlines;) | lineannotation | co)"
+>
+
+  <!ENTITY % db.verbatim.contentmodel
+       "(%db._info.title.forbidden;, (textobject | (((#PCDATA | %db.ubiq.inlines; | %db.general.inlines; | %db.domain.inlines;) | lineannotation | co))*))"
+>
+
+  <!ENTITY % db.toplevel.blocks.or.sections
+       "(((%db.all.blocks;)+, (%db.toplevel.sections;)?) | %db.toplevel.sections;)"
+>
+
+  <!ENTITY % db.recursive.blocks.or.sections
+       "(((%db.all.blocks;)+, (%db.recursive.sections;)?) | %db.recursive.sections;)"
+>
+
+  <!ENTITY % db.admonition.contentmodel
+       "(%db._info.title.only;, (%db.all.blocks;)+)"
+>
+
+  <!ENTITY % db.title.attlist
+       "%db.title.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.titleabbrev.attlist
+       "%db.titleabbrev.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.subtitle.attlist
+       "%db.subtitle.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.info.attlist
+       "%db.info.role.attribute;
+       %db.common.attributes;
+       "
+>
+
+  <!ENTITY % db.subjectset.attlist
+       "%db.subjectset.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.subjectset.scheme.attribute;
+       "
+>
+
+  <!ENTITY % db.subject.attlist
+       "%db.subject.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.subject.weight.attribute;
+       "
+>
+
+  <!ENTITY % db.subjectterm.attlist
+       "%db.subjectterm.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.keywordset.attlist
+       "%db.keywordset.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.keyword.attlist
+       "%db.keyword.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.procedure.attlist
+       "%db.procedure.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.step.attlist
+       "%db.step.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.performance.attribute;
+       "
+>
+
+  <!ENTITY % db.stepalternatives.attlist
+       "%db.stepalternatives.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.performance.attribute;
+       "
+>
+
+  <!ENTITY % db.substeps.attlist
+       "%db.substeps.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.performance.attribute;
+       "
+>
+
+  <!ENTITY % db.sidebar.attlist
+       "%db.sidebar.role.attribute;
+       %db.floatstyle.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.abstract.attlist
+       "%db.abstract.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.personblurb.attlist
+       "%db.personblurb.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.blockquote.attlist
+       "%db.blockquote.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.attribution.attlist
+       "%db.attribution.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.bridgehead.attlist
+       "%db.bridgehead.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.bridgehead.renderas.attribute;
+       "
+>
+
+  <!ENTITY % db.remark.attlist
+       "%db.remark.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.epigraph.attlist
+       "%db.epigraph.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.footnote.attlist
+       "%db.footnote.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.footnote.label.attribute;
+       "
+>
+
+  <!ENTITY % db.formalpara.attlist
+       "%db.formalpara.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.para.attlist
+       "%db.para.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.simpara.attlist
+       "%db.simpara.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.itemizedlist.attlist
+       "%db.itemizedlist.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.spacing.attribute;
+       %db.itemizedlist.mark.attribute;
+       "
+>
+
+  <!ENTITY % db.orderedlist.attlist
+       "%db.orderedlist.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.spacing.attribute;
+       %db.orderedlist.continuation.attribute;
+       %db.orderedlist.startingnumber.attribute;
+       %db.orderedlist.inheritnum.attribute;
+       %db.orderedlist.numeration.attribute;
+       "
+>
+
+  <!ENTITY % db.listitem.attlist
+       "%db.listitem.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.listitem.override.attribute;
+       "
+>
+
+  <!ENTITY % db.segmentedlist.attlist
+       "%db.segmentedlist.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.segtitle.attlist
+       "%db.segtitle.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.seglistitem.attlist
+       "%db.seglistitem.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.seg.attlist
+       "%db.seg.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.simplelist.attlist
+       "%db.simplelist.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.simplelist.type.attribute;
+       %db.simplelist.columns.attribute;
+       "
+>
+
+  <!ENTITY % db.member.attlist
+       "%db.member.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.variablelist.attlist
+       "%db.variablelist.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.spacing.attribute;
+       %db.variablelist.termlength.attribute;
+       "
+>
+
+  <!ENTITY % db.varlistentry.attlist
+       "%db.varlistentry.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.term.attlist
+       "%db.term.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.example.attlist
+       "%db.example.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.label.attribute;
+       %db.floatstyle.attribute;
+       %db.width.characters.attribute;
+       %db.pgwide.attribute;
+       "
+>
+
+  <!ENTITY % db.informalexample.attlist
+       "%db.informalexample.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.floatstyle.attribute;
+       %db.width.characters.attribute;
+       "
+>
+
+  <!ENTITY % db.literallayout.attlist
+       "%db.literallayout.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.verbatim.attributes;
+       %db.literallayout.class.attribute;
+       "
+>
+
+  <!ENTITY % db.screen.attlist
+       "%db.screen.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.verbatim.attributes;
+       %db.width.characters.attribute;
+       "
+>
+
+  <!ENTITY % db.screenshot.attlist
+       "%db.screenshot.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.figure.attlist
+       "%db.figure.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.label.attribute;
+       %db.pgwide.attribute;
+       %db.floatstyle.attribute;
+       "
+>
+
+  <!ENTITY % db.informalfigure.attlist
+       "%db.informalfigure.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.label.attribute;
+       %db.pgwide.attribute;
+       %db.floatstyle.attribute;
+       "
+>
+
+  <!ENTITY % db.mediaobject.attlist
+       "%db.mediaobject.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.inlinemediaobject.attlist
+       "%db.inlinemediaobject.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.videoobject.attlist
+       "%db.videoobject.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.audioobject.attlist
+       "%db.audioobject.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.imageobject.attlist
+       "%db.imageobject.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.textobject.attlist
+       "%db.textobject.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.videodata.attlist
+       "%db.videodata.role.attribute;
+       %db.common.attributes;
+       %db.common.data.attributes;
+       %db.videodata.align.attribute;
+       %db.videodata.valign.attribute;
+       %db.width.attribute;
+       %db.contentwidth.attribute;
+       %db.videodata.scalefit.attribute;
+       %db.scale.attribute;
+       %db.depth.attribute;
+       %db.contentdepth.attribute;
+       "
+>
+
+  <!ENTITY % db.audiodata.attlist
+       "%db.audiodata.role.attribute;
+       %db.common.attributes;
+       %db.common.data.attributes;
+       "
+>
+
+  <!ENTITY % db.imagedata.attlist
+       "%db.imagedata.role.attribute;
+       %db.common.attributes;
+       %db.common.data.attributes;
+       %db.imagedata.align.attribute;
+       %db.imagedata.valign.attribute;
+       %db.width.attribute;
+       %db.contentwidth.attribute;
+       %db.imagedata.scalefit.attribute;
+       %db.scale.attribute;
+       %db.depth.attribute;
+       %db.contentdepth.attribute;
+       "
+>
+
+  <!ENTITY % db.textdata.attlist
+       "%db.textdata.role.attribute;
+       %db.common.attributes;
+       %db.common.data.attributes;
+       %db.textdata.encoding.attribute;
+       "
+>
+
+  <!ENTITY % db.caption.attlist
+       "%db.caption.role.attribute;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.address.attlist
+       "%db.address.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.verbatim.attributes;
+       "
+>
+
+  <!ENTITY % db.street.attlist
+       "%db.street.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.pob.attlist
+       "%db.pob.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.postcode.attlist
+       "%db.postcode.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.city.attlist
+       "%db.city.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.state.attlist
+       "%db.state.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.country.attlist
+       "%db.country.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.phone.attlist
+       "%db.phone.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.fax.attlist
+       "%db.fax.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.otheraddr.attlist
+       "%db.otheraddr.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.affiliation.attlist
+       "%db.affiliation.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.shortaffil.attlist
+       "%db.shortaffil.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.jobtitle.attlist
+       "%db.jobtitle.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.orgname.attlist
+       "%db.orgname.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.orgname.class.attribute;
+       "
+>
+
+  <!ENTITY % db.orgdiv.attlist
+       "%db.orgdiv.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.artpagenums.attlist
+       "%db.artpagenums.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.personname.attlist
+       "%db.personname.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.author.attlist
+       "%db.author.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.authorgroup.attlist
+       "%db.authorgroup.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.collab.attlist
+       "%db.collab.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.authorinitials.attlist
+       "%db.authorinitials.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.person.attlist
+       "%db.person.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.org.attlist
+       "%db.org.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.confgroup.attlist
+       "%db.confgroup.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.confdates.attlist
+       "%db.confdates.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.conftitle.attlist
+       "%db.conftitle.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.confnum.attlist
+       "%db.confnum.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.confsponsor.attlist
+       "%db.confsponsor.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.contractnum.attlist
+       "%db.contractnum.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.contractsponsor.attlist
+       "%db.contractsponsor.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.copyright.attlist
+       "%db.copyright.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.year.attlist
+       "%db.year.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.holder.attlist
+       "%db.holder.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.cover.attlist
+       "%db.cover.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.date.attlist
+       "%db.date.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.edition.attlist
+       "%db.edition.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.editor.attlist
+       "%db.editor.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.biblioid.attlist
+       "%db.biblioid.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.biblio.class.attribute;
+       "
+>
+
+  <!ENTITY % db.citebiblioid.attlist
+       "%db.citebiblioid.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.biblio.class.attribute;
+       "
+>
+
+  <!ENTITY % db.bibliosource.attlist
+       "%db.bibliosource.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.biblio.class.attribute;
+       "
+>
+
+  <!ENTITY % db.bibliorelation.attlist
+       "%db.bibliorelation.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.biblio.class.attribute;
+       %db.bibliorelation.type.attribute;
+       "
+>
+
+  <!ENTITY % db.bibliocoverage.attlist
+       "%db.bibliocoverage.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.bibliocoverage.coverage.attrib;
+       "
+>
+
+  <!ENTITY % db.legalnotice.attlist
+       "%db.legalnotice.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.othercredit.attlist
+       "%db.othercredit.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.othercredit.class.attribute;
+       "
+>
+
+  <!ENTITY % db.pagenums.attlist
+       "%db.pagenums.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.contrib.attlist
+       "%db.contrib.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.honorific.attlist
+       "%db.honorific.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.firstname.attlist
+       "%db.firstname.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.givenname.attlist
+       "%db.givenname.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.surname.attlist
+       "%db.surname.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.lineage.attlist
+       "%db.lineage.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.othername.attlist
+       "%db.othername.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.printhistory.attlist
+       "%db.printhistory.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.pubdate.attlist
+       "%db.pubdate.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.publisher.attlist
+       "%db.publisher.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.publishername.attlist
+       "%db.publishername.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.releaseinfo.attlist
+       "%db.releaseinfo.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.revhistory.attlist
+       "%db.revhistory.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.revision.attlist
+       "%db.revision.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.revnumber.attlist
+       "%db.revnumber.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.revremark.attlist
+       "%db.revremark.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.revdescription.attlist
+       "%db.revdescription.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.seriesvolnums.attlist
+       "%db.seriesvolnums.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.volumenum.attlist
+       "%db.volumenum.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.issuenum.attlist
+       "%db.issuenum.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.package.attlist
+       "%db.package.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.email.attlist
+       "%db.email.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.lineannotation.attlist
+       "%db.lineannotation.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.parameter.attlist
+       "%db.parameter.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.parameter.class.attribute;
+       "
+>
+
+  <!ENTITY % db.replaceable.attlist
+       "%db.replaceable.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.replaceable.class.attribute;
+       "
+>
+
+  <!ENTITY % db.uri.attlist
+       "%db.uri.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.uri.type.attribute;
+       "
+>
+
+  <!ENTITY % db.abbrev.attlist
+       "%db.abbrev.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.acronym.attlist
+       "%db.acronym.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.citation.attlist
+       "%db.citation.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.citerefentry.attlist
+       "%db.citerefentry.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.refentrytitle.attlist
+       "%db.refentrytitle.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.manvolnum.attlist
+       "%db.manvolnum.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.citetitle.attlist
+       "%db.citetitle.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.citetitle.pubwork.attribute;
+       "
+>
+
+  <!ENTITY % db.emphasis.attlist
+       "%db.emphasis.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.foreignphrase.attlist
+       "%db.foreignphrase.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.phrase.attlist
+       "%db.phrase.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.quote.attlist
+       "%db.quote.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.subscript.attlist
+       "%db.subscript.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.superscript.attlist
+       "%db.superscript.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.trademark.attlist
+       "%db.trademark.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.trademark.class.attribute;
+       "
+>
+
+  <!ENTITY % db.wordasword.attlist
+       "%db.wordasword.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.footnoteref.attlist
+       "%db.footnoteref.role.attribute;
+       %db.common.attributes;
+       %db.linkend.attribute.REQ;
+       %db.label.attribute;
+       "
+>
+
+  <!ENTITY % db.xref.attlist
+       "%db.xref.role.attribute;
+       %db.common.attributes;
+       %db.common.req.linking.attributes;
+       %db.xrefstyle.attribute;
+       %db.endterm.attribute;
+       "
+>
+
+  <!ENTITY % db.link.attlist
+       "%db.link.role.attribute;
+       %db.common.attributes;
+       %db.common.req.linking.attributes;
+       %db.xrefstyle.attribute;
+       %db.endterm.attribute;
+       "
+>
+
+  <!ENTITY % db.olink.attlist
+       "%db.common.attributes;
+       %db.olink.targetdoc.attribute;
+       %db.olink.role.attribute;
+       %db.xrefstyle.attribute;
+       %db.olink.localinfo.attribute;
+       %db.olink.targetptr.attribute;
+       %db.olink.type.attribute;
+       "
+>
+
+  <!ENTITY % db.anchor.attlist
+       "%db.anchor.role.attribute;
+       %db.common.idreq.attributes;
+       "
+>
+
+  <!ENTITY % db.alt.attlist
+       "%db.alt.role.attribute;
+       %db.common.attributes;
+       "
+>
+
+  <!ENTITY % db.component.contentmodel
+       "((%db.navigation.components;)*, %db.toplevel.blocks.or.sections;, (%db.navigation.components;)*)"
+>
+
+  <!ENTITY % db.set.attlist
+       "%db.set.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.label.attribute;
+       %db.status.attribute;
+       "
+>
+
+  <!ENTITY % db.book.attlist
+       "%db.book.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.label.attribute;
+       %db.status.attribute;
+       "
+>
+
+  <!ENTITY % db.dedication.attlist
+       "%db.dedication.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.label.attribute;
+       %db.status.attribute;
+       "
+>
+
+  <!ENTITY % db.acknowledgements.attlist
+       "%db.acknowledgements.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.label.attribute;
+       %db.status.attribute;
+       "
+>
+
+  <!ENTITY % db.colophon.attlist
+       "%db.colophon.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.label.attribute;
+       %db.status.attribute;
+       "
+>
+
+  <!ENTITY % db.appendix.attlist
+       "%db.appendix.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.label.attribute;
+       %db.status.attribute;
+       "
+>
+
+  <!ENTITY % db.chapter.attlist
+       "%db.chapter.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.label.attribute;
+       %db.status.attribute;
+       "
+>
+
+  <!ENTITY % db.part.attlist
+       "%db.part.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.label.attribute;
+       %db.status.attribute;
+       "
+>
+
+  <!ENTITY % db.preface.attlist
+       "%db.preface.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.label.attribute;
+       %db.status.attribute;
+       "
+>
+
+  <!ENTITY % db.partintro.attlist
+       "%db.partintro.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.label.attribute;
+       %db.status.attribute;
+       "
+>
+
+  <!ENTITY % db.section.attlist
+       "%db.section.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.label.attribute;
+       %db.status.attribute;
+       "
+>
+
+  <!ENTITY % db.simplesect.attlist
+       "%db.simplesect.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.label.attribute;
+       %db.status.attribute;
+       "
+>
+
+  <!ENTITY % db.article.attlist
+       "%db.article.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.label.attribute;
+       %db.status.attribute;
+       %db.article.class.attribute;
+       "
+>
+
+  <!ENTITY % db.annotation.attlist
+       "%db.annotation.role.attribute;
+       %db.annotation.annotates.attribute;
+       %db.common.attributes;
+       "
+>
+
+  <!ENTITY % db.extendedlink.attlist
+       "%db.extendedlink.role.attribute;
+       %db.common.attributes;
+       xlink:type      (extended)              #IMPLIED
+       %db.xlink.role.attribute;
+       %db.xlink.title.attribute;
+       "
+>
+
+  <!ENTITY % db.locator.attlist
+       "%db.locator.role.attribute;
+       %db.common.attributes;
+       xlink:type      (locator)               #IMPLIED
+       %db.xlink.href.attribute;
+       %db.xlink.role.attribute;
+       %db.xlink.title.attribute;
+       %db.xlink.label.attribute;
+       "
+>
+
+  <!ENTITY % db.arc.attlist
+       "%db.arc.role.attribute;
+       %db.common.attributes;
+       xlink:type      (arc)           #IMPLIED
+       %db.xlink.arcrole.attribute;
+       %db.xlink.title.attribute;
+       %db.xlink.show.attribute;
+       %db.xlink.actuate.attribute;
+       %db.xlink.from.attribute;
+       %db.xlink.to.attribute;
+       "
+>
+
+  <!ENTITY % db.sect1.attlist
+       "%db.sect1.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.label.attribute;
+       %db.status.attribute;
+       "
+>
+
+  <!ENTITY % db.sect2.attlist
+       "%db.sect2.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.label.attribute;
+       %db.status.attribute;
+       "
+>
+
+  <!ENTITY % db.sect3.attlist
+       "%db.sect3.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.label.attribute;
+       %db.status.attribute;
+       "
+>
+
+  <!ENTITY % db.sect4.attlist
+       "%db.sect4.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.label.attribute;
+       %db.status.attribute;
+       "
+>
+
+  <!ENTITY % db.sect5.attlist
+       "%db.sect5.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.label.attribute;
+       %db.status.attribute;
+       "
+>
+
+  <!ENTITY % db.reference.attlist
+       "%db.reference.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.status.attribute;
+       %db.label.attribute;
+       "
+>
+
+  <!ENTITY % db.refentry.attlist
+       "%db.refentry.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.status.attribute;
+       %db.label.attribute;
+       "
+>
+
+  <!ENTITY % db.refmeta.attlist
+       "%db.refmeta.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.refmiscinfo.attlist
+       "%db.refmiscinfo.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.refmiscinfo.class.attribute;
+       "
+>
+
+  <!ENTITY % db.refnamediv.attlist
+       "%db.refnamediv.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.refdescriptor.attlist
+       "%db.refdescriptor.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.refname.attlist
+       "%db.refname.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.refpurpose.attlist
+       "%db.refpurpose.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.refclass.attlist
+       "%db.refclass.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.refsynopsisdiv.attlist
+       "%db.refsynopsisdiv.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.refsection.attlist
+       "%db.refsection.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.status.attribute;
+       %db.label.attribute;
+       "
+>
+
+  <!ENTITY % db.refsect1.attlist
+       "%db.refsect1.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.label.attribute;
+       %db.status.attribute;
+       "
+>
+
+  <!ENTITY % db.refsect2.attlist
+       "%db.refsect2.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.label.attribute;
+       %db.status.attribute;
+       "
+>
+
+  <!ENTITY % db.refsect3.attlist
+       "%db.refsect3.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.label.attribute;
+       %db.status.attribute;
+       "
+>
+
+  <!ENTITY % db.glosslist.attlist
+       "%db.glosslist.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.glossentry.attlist
+       "%db.glossentry.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.glossentry.sortas.attribute;
+       "
+>
+
+  <!ENTITY % db.glossdef.attlist
+       "%db.glossdef.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.glossdef.subject.attribute;
+       "
+>
+
+  <!ENTITY % db.glosssee.attlist
+       "%db.glosssee.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.glosssee.otherterm.attribute;
+       "
+>
+
+  <!ENTITY % db.glossseealso.attlist
+       "%db.glossseealso.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.glossseealso.otherterm.attribute;
+       "
+>
+
+  <!ENTITY % db.firstterm.attlist
+       "%db.firstterm.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.baseform.attribute;
+       "
+>
+
+  <!ENTITY % db.glossterm.attlist
+       "%db.glossterm.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.baseform.attribute;
+       "
+>
+
+  <!ENTITY % db.glossary.attlist
+       "%db.glossary.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.label.attribute;
+       %db.status.attribute;
+       "
+>
+
+  <!ENTITY % db.glossdiv.attlist
+       "%db.glossdiv.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.label.attribute;
+       %db.status.attribute;
+       "
+>
+
+  <!ENTITY % db.termdef.attlist
+       "%db.termdef.role.attribute;
+       %db.glossentry.sortas.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.baseform.attribute;
+       "
+>
+
+  <!ENTITY % db.biblioentry.attlist
+       "%db.biblioentry.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.bibliomixed.attlist
+       "%db.bibliomixed.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.biblioset.attlist
+       "%db.biblioset.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.relation.attribute;
+       "
+>
+
+  <!ENTITY % db.bibliomset.attlist
+       "%db.bibliomset.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.relation.attribute;
+       "
+>
+
+  <!ENTITY % db.bibliomisc.attlist
+       "%db.bibliomisc.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.bibliography.attlist
+       "%db.bibliography.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.label.attribute;
+       %db.status.attribute;
+       "
+>
+
+  <!ENTITY % db.bibliodiv.attlist
+       "%db.bibliodiv.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.label.attribute;
+       %db.status.attribute;
+       "
+>
+
+  <!ENTITY % db.bibliolist.attlist
+       "%db.bibliolist.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.biblioref.attlist
+       "%db.biblioref.role.attribute;
+       %db.common.attributes;
+       %db.common.req.linking.attributes;
+       %db.xrefstyle.attribute;
+       %db.endterm.attribute;
+       %db.biblioref.units.attribute;
+       %db.biblioref.begin.attribute;
+       %db.biblioref.end.attribute;
+       "
+>
+
+  <!ENTITY % db.itermset.attlist
+       "%db.itermset.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.primary.attlist
+       "%db.primary.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.sortas.attribute;
+       "
+>
+
+  <!ENTITY % db.secondary.attlist
+       "%db.secondary.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.sortas.attribute;
+       "
+>
+
+  <!ENTITY % db.tertiary.attlist
+       "%db.tertiary.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.sortas.attribute;
+       "
+>
+
+  <!ENTITY % db.see.attlist
+       "%db.see.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.seealso.attlist
+       "%db.seealso.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.index.attlist
+       "%db.index.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.label.attribute;
+       %db.status.attribute;
+       %db.index.type.attribute;
+       "
+>
+
+  <!ENTITY % db.setindex.attlist
+       "%db.setindex.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.label.attribute;
+       %db.status.attribute;
+       %db.index.type.attribute;
+       "
+>
+
+  <!ENTITY % db.indexdiv.attlist
+       "%db.indexdiv.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.label.attribute;
+       %db.status.attribute;
+       "
+>
+
+  <!ENTITY % db.indexentry.attlist
+       "%db.indexentry.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.primaryie.attlist
+       "%db.primaryie.role.attribute;
+       %db.common.attributes;
+       %db.linkends.attribute;
+       "
+>
+
+  <!ENTITY % db.secondaryie.attlist
+       "%db.secondaryie.role.attribute;
+       %db.common.attributes;
+       %db.linkends.attribute;
+       "
+>
+
+  <!ENTITY % db.tertiaryie.attlist
+       "%db.tertiaryie.role.attribute;
+       %db.common.attributes;
+       %db.linkends.attribute;
+       "
+>
+
+  <!ENTITY % db.seeie.attlist
+       "%db.seeie.role.attribute;
+       %db.common.attributes;
+       %db.linkend.attribute;
+       "
+>
+
+  <!ENTITY % db.seealsoie.attlist
+       "%db.seealsoie.role.attribute;
+       %db.common.attributes;
+       %db.linkends.attribute;
+       "
+>
+
+  <!ENTITY % db.toc.attlist
+       "%db.toc.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.tocdiv.attlist
+       "%db.tocdiv.role.attribute;
+       %db.common.attributes;
+       %db.toc.pagenum.attribute;
+       %db.linkend.attribute;
+       "
+>
+
+  <!ENTITY % db.tocentry.attlist
+       "%db.tocentry.role.attribute;
+       %db.common.attributes;
+       %db.toc.pagenum.attribute;
+       %db.linkend.attribute;
+       "
+>
+
+  <!ENTITY % db.task.attlist
+       "%db.task.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.tasksummary.attlist
+       "%db.tasksummary.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.taskprerequisites.attlist
+       "%db.taskprerequisites.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.taskrelated.attlist
+       "%db.taskrelated.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.calloutlist.attlist
+       "%db.calloutlist.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.callout.attlist
+       "%db.callout.role.attribute;
+       %db.common.attributes;
+       %db.callout.arearefs.attribute;
+       "
+>
+
+  <!ENTITY % db.programlistingco.attlist
+       "%db.programlistingco.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.areaspec.attlist
+       "%db.areaspec.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.area.units.attribute;
+       "
+>
+
+  <!ENTITY % db.area.attlist
+       "%db.area.role.attribute;
+       %db.common.idreq.attributes;
+       %db.area.units.attribute;
+       %db.area.linkends.attribute;
+       %db.href.attributes;
+       %db.area.label.attribute;
+       %db.area.coords.attribute;
+       "
+>
+
+  <!ENTITY % db.areaset.attlist
+       "%db.areaset.role.attribute;
+       %db.common.idreq.attributes;
+       %db.area.units.attribute;
+       %db.linkends.attribute;
+       %db.href.attributes;
+       %db.label.attribute;
+       "
+>
+
+  <!ENTITY % db.screenco.attlist
+       "%db.screenco.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.imageobjectco.attlist
+       "%db.imageobjectco.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.co.attlist
+       "%db.co.role.attribute;
+       %db.common.idreq.attributes;
+       %db.linkends.attribute;
+       %db.label.attribute;
+       "
+>
+
+  <!ENTITY % db.coref.attlist
+       "%db.coref.role.attribute;
+       %db.common.attributes;
+       %db.linkend.attribute.REQ;
+       %db.label.attribute;
+       "
+>
+
+  <!ENTITY % db.productionset.attlist
+       "%db.productionset.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.production.attlist
+       "%db.production.role.attribute;
+       %db.common.idreq.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.lhs.attlist
+       "%db.lhs.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.rhs.attlist
+       "%db.rhs.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.nonterminal.attlist
+       "%db.nonterminal.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.nonterminal.def.attribute;
+       "
+>
+
+  <!ENTITY % db.constraint.attlist
+       "%db.constraint.role.attribute;
+       %db.common.attributes;
+       %db.common.req.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.productionrecap.attlist
+       "%db.productionrecap.role.attribute;
+       %db.common.attributes;
+       %db.common.req.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.constraintdef.attlist
+       "%db.constraintdef.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.tgroup.attlist
+       "%db.tgroup.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.char.attribute;
+       %db.charoff.attribute;
+       %db.tgroup.tgroupstyle.attribute;
+       %db.tgroup.cols.attribute;
+       %db.colsep.attribute;
+       %db.rowsep.attribute;
+       %db.align.attribute;
+       "
+>
+
+  <!ENTITY % db.colspec.attlist
+       "%db.colspec.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.colspec.colnum.attribute;
+       %db.char.attribute;
+       %db.colsep.attribute;
+       %db.colspec.colwidth.attribute;
+       %db.charoff.attribute;
+       %db.colname.attribute;
+       %db.rowsep.attribute;
+       %db.align.attribute;
+       "
+>
+
+  <!ENTITY % db.spanspec.attlist
+       "%db.spanspec.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.spanname.attribute;
+       %db.spanspec.namest.attribute;
+       %db.spanspec.nameend.attribute;
+       %db.char.attribute;
+       %db.colsep.attribute;
+       %db.charoff.attribute;
+       %db.rowsep.attribute;
+       %db.align.attribute;
+       "
+>
+
+  <!ENTITY % db.row.attlist
+       "%db.row.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.rowsep.attribute;
+       %db.valign.attribute;
+       "
+>
+
+  <!ENTITY % db.entry.attlist
+       "%db.entry.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.valign.attribute;
+       %db.char.attribute;
+       %db.colsep.attribute;
+       %db.charoff.attribute;
+       %db.entry.morerows.attribute;
+       %db.column-spec.attributes;
+       %db.rowsep.attribute;
+       %db.entry.rotate.attribute;
+       %db.align.attribute;
+       "
+>
+
+  <!ENTITY % db.entrytbl.attlist
+       "%db.entrytbl.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.char.attribute;
+       %db.charoff.attribute;
+       %db.column-spec.attributes;
+       %db.entrytbl.tgroupstyle.attribute;
+       %db.entrytbl.cols.attribute;
+       %db.colsep.attribute;
+       %db.rowsep.attribute;
+       %db.align.attribute;
+       "
+>
+
+  <!ENTITY % db.html.attrs
+       "%db.common.attributes;
+       %db.html.coreattrs;
+       %db.html.i18n;
+       %db.html.events;
+       "
+>
+
+  <!ENTITY % db.msgset.attlist
+       "%db.msgset.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.msgentry.attlist
+       "%db.msgentry.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.simplemsgentry.attlist
+       "%db.simplemsgentry.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.simplemsgentry.msgaud.attribute;
+       %db.simplemsgentry.msgorig.attribute;
+       %db.simplemsgentry.msglevel.attribute;
+       "
+>
+
+  <!ENTITY % db.msg.attlist
+       "%db.msg.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.msgmain.attlist
+       "%db.msgmain.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.msgsub.attlist
+       "%db.msgsub.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.msgrel.attlist
+       "%db.msgrel.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.msgtext.attlist
+       "%db.msgtext.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.msginfo.attlist
+       "%db.msginfo.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.msglevel.attlist
+       "%db.msglevel.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.msgorig.attlist
+       "%db.msgorig.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.msgaud.attlist
+       "%db.msgaud.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.msgexplan.attlist
+       "%db.msgexplan.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.qandaset.attlist
+       "%db.qandaset.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.qandaset.defaultlabel.attribute;
+       "
+>
+
+  <!ENTITY % db.qandadiv.attlist
+       "%db.qandadiv.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.qandaentry.attlist
+       "%db.qandaentry.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.question.attlist
+       "%db.question.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.answer.attlist
+       "%db.answer.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.label.attlist
+       "%db.label.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.equation.attlist
+       "%db.equation.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.label.attribute;
+       %db.pgwide.attribute;
+       %db.floatstyle.attribute;
+       "
+>
+
+  <!ENTITY % db.informalequation.attlist
+       "%db.informalequation.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.inlineequation.attlist
+       "%db.inlineequation.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.mathphrase.attlist
+       "%db.mathphrase.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.markup.attlist
+       "%db.markup.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.tag.attlist
+       "%db.tag.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.tag.class.attribute;
+       %db.tag.namespace.attribute;
+       "
+>
+
+  <!ENTITY % db.symbol.attlist
+       "%db.symbol.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.symbol.class.attribute;
+       "
+>
+
+  <!ENTITY % db.token.attlist
+       "%db.token.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.literal.attlist
+       "%db.literal.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.code.attlist
+       "%db.code.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %code.language.attribute;
+       "
+>
+
+  <!ENTITY % db.constant.attlist
+       "%db.constant.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.constant.class.attribute;
+       "
+>
+
+  <!ENTITY % db.productname.attlist
+       "%db.productname.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.productname.class.attribute;
+       "
+>
+
+  <!ENTITY % db.productnumber.attlist
+       "%db.productnumber.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.database.attlist
+       "%db.database.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.database.class.attribute;
+       "
+>
+
+  <!ENTITY % db.application.attlist
+       "%db.application.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.application.class.attribute;
+       "
+>
+
+  <!ENTITY % db.hardware.attlist
+       "%db.hardware.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.guibutton.attlist
+       "%db.guibutton.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.guiicon.attlist
+       "%db.guiicon.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.guilabel.attlist
+       "%db.guilabel.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.guimenu.attlist
+       "%db.guimenu.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.guimenuitem.attlist
+       "%db.guimenuitem.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.guisubmenu.attlist
+       "%db.guisubmenu.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.menuchoice.attlist
+       "%db.menuchoice.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.mousebutton.attlist
+       "%db.mousebutton.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.keycap.attlist
+       "%db.keycap.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.keycap.function.attrib;
+       "
+>
+
+  <!ENTITY % db.keycode.attlist
+       "%db.keycode.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.keycombo.attlist
+       "%db.keycombo.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.keycombo.action.attrib;
+       "
+>
+
+  <!ENTITY % db.keysym.attlist
+       "%db.keysym.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.accel.attlist
+       "%db.accel.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.shortcut.attlist
+       "%db.shortcut.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.keycombo.action.attrib;
+       "
+>
+
+  <!ENTITY % db.prompt.attlist
+       "%db.prompt.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.envar.attlist
+       "%db.envar.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.filename.attlist
+       "%db.filename.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.filename.path.attribute;
+       %db.filename.class.attribute;
+       "
+>
+
+  <!ENTITY % db.command.attlist
+       "%db.command.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.computeroutput.attlist
+       "%db.computeroutput.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.userinput.attlist
+       "%db.userinput.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.cmdsynopsis.attlist
+       "%db.cmdsynopsis.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.cmdsynopsis.sepchar.attribute;
+       %db.cmdsynopsis.cmdlength.attribute;
+       %db.label.attribute;
+       "
+>
+
+  <!ENTITY % db.arg.attlist
+       "%db.arg.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.rep.attribute;
+       %db.choice.opt.attribute;
+       "
+>
+
+  <!ENTITY % db.sbr.attlist
+       "%db.sbr.role.attribute;
+       %db.common.attributes;
+       "
+>
+
+  <!ENTITY % db.synopfragment.attlist
+       "%db.synopfragment.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.synopfragmentref.attlist
+       "%db.synopfragmentref.role.attribute;
+       %db.common.attributes;
+       %db.linkend.attribute.REQ;
+       "
+>
+
+  <!ENTITY % db.synopsis.attlist
+       "%db.synopsis.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.verbatim.attributes;
+       %db.label.attribute;
+       "
+>
+
+  <!ENTITY % db.funcsynopsis.attlist
+       "%db.funcsynopsis.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.language.attribute;
+       "
+>
+
+  <!ENTITY % db.funcsynopsisinfo.attlist
+       "%db.funcsynopsisinfo.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.verbatim.attributes;
+       "
+>
+
+  <!ENTITY % db.funcprototype.attlist
+       "%db.funcprototype.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.funcdef.attlist
+       "%db.funcdef.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.function.attlist
+       "%db.function.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.void.attlist
+       "%db.void.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.varargs.attlist
+       "%db.varargs.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.paramdef.attlist
+       "%db.paramdef.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.paramdef.choice.attribute;
+       "
+>
+
+  <!ENTITY % db.funcparams.attlist
+       "%db.funcparams.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.classsynopsis.attlist
+       "%db.classsynopsis.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.language.attribute;
+       %db.classsynopsis.class.attribute;
+       "
+>
+
+  <!ENTITY % db.classsynopsisinfo.attlist
+       "%db.classsynopsisinfo.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.verbatim.attributes;
+       "
+>
+
+  <!ENTITY % db.ooclass.attlist
+       "%db.ooclass.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.oointerface.attlist
+       "%db.oointerface.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.ooexception.attlist
+       "%db.ooexception.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.modifier.attlist
+       "%db.modifier.xml.space.attribute;
+       %db.modifier.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.interfacename.attlist
+       "%db.interfacename.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.exceptionname.attlist
+       "%db.exceptionname.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.fieldsynopsis.attlist
+       "%db.fieldsynopsis.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.language.attribute;
+       "
+>
+
+  <!ENTITY % db.initializer.attlist
+       "%db.initializer.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.constructorsynopsis.attlist
+       "%db.constructorsynopsis.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.language.attribute;
+       "
+>
+
+  <!ENTITY % db.destructorsynopsis.attlist
+       "%db.destructorsynopsis.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.language.attribute;
+       "
+>
+
+  <!ENTITY % db.methodsynopsis.attlist
+       "%db.methodsynopsis.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.language.attribute;
+       "
+>
+
+  <!ENTITY % db.methodname.attlist
+       "%db.methodname.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.methodparam.attlist
+       "%db.methodparam.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.rep.attribute;
+       %db.choice.req.attribute;
+       "
+>
+
+  <!ENTITY % db.varname.attlist
+       "%db.varname.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.returnvalue.attlist
+       "%db.returnvalue.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.type.attlist
+       "%db.type.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.classname.attlist
+       "%db.classname.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.programlisting.attlist
+       "%db.programlisting.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.verbatim.attributes;
+       %db.width.characters.attribute;
+       "
+>
+
+  <!ENTITY % db.caution.attlist
+       "%db.caution.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.important.attlist
+       "%db.important.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.note.attlist
+       "%db.note.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.tip.attlist
+       "%db.tip.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.warning.attlist
+       "%db.warning.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.errorcode.attlist
+       "%db.errorcode.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.errorname.attlist
+       "%db.errorname.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.errortext.attlist
+       "%db.errortext.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.errortype.attlist
+       "%db.errortype.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.systemitem.attlist
+       "%db.systemitem.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.systemitem.class.attribute;
+       "
+>
+
+  <!ENTITY % db.option.attlist
+       "%db.option.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.optional.attlist
+       "%db.optional.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.property.attlist
+       "%db.property.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       "
+>
+
+  <!ENTITY % db.topic.attlist
+       "%db.topic.role.attribute;
+       %db.topic.type.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.label.attribute;
+       %db.status.attribute;
+       "
+>
+
+  <!ENTITY % db.indexterm.attlist
+       "%db.indexterm.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.significance.attribute;
+       %db.zone.attribute;
+       %db.indexterm.pagenum.attribute;
+       %db.scope.attribute;
+       %db.index.type.attribute;
+       %db.indexterm.class.attribute;
+       "
+>
+
+  <!ENTITY % db.group.attlist
+       "%db.group.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.rep.attribute;
+       %db.choice.opt.attribute;
+       "
+>
+
+  <!ENTITY % db.thead.attlist
+       "%db.thead.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.html.coreattrs;
+       %db.html.i18n;
+       %db.html.events;
+       %db.html.cellhalign;
+       %db.html.cellvalign;
+       "
+>
+
+  <!ENTITY % db.tfoot.attlist
+       "%db.tfoot.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.html.coreattrs;
+       %db.html.i18n;
+       %db.html.events;
+       %db.html.cellhalign;
+       %db.html.cellvalign;
+       "
+>
+
+  <!ENTITY % db.tbody.attlist
+       "%db.tbody.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.html.coreattrs;
+       %db.html.i18n;
+       %db.html.events;
+       %db.html.cellhalign;
+       %db.html.cellvalign;
+       "
+>
+
+  <!ENTITY % db.table.attlist
+       "%db.table.role.attribute;
+       %db.label.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.tabstyle.attribute;
+       %db.floatstyle.attribute;
+       %db.orient.attribute;
+       %db.colsep.attribute;
+       %db.rowsep.attribute;
+       %db.pgwide.attribute;
+       shortentry      CDATA           #IMPLIED
+       tocentry        CDATA           #IMPLIED
+       %db.rowheader.attribute;
+       %db.html.coreattrs;
+       %db.html.i18n;
+       %db.html.events;
+       %db.html.table.attributes;
+       "
+>
+
+  <!ENTITY % db.informaltable.attlist
+       "%db.informaltable.role.attribute;
+       %db.common.attributes;
+       %db.common.linking.attributes;
+       %db.tabstyle.attribute;
+       %db.floatstyle.attribute;
+       %db.orient.attribute;
+       %db.colsep.attribute;
+       %db.rowsep.attribute;
+       %db.pgwide.attribute;
+       %db.rowheader.attribute;
+       %db.html.coreattrs;
+       %db.html.i18n;
+       %db.html.events;
+       %db.html.table.attributes;
+       "
+>
+
+  <!ENTITY % db.appendix.contentmodel
+       "(%db.component.contentmodel; | (topic)+)"
+>
+
+  <!ENTITY % db.chapter.contentmodel
+       "(%db.component.contentmodel; | (topic)+)"
+>
+
+  <!ENTITY % db.html.col.attlist
+       "%db.html.attrs;
+       span    CDATA           #IMPLIED
+       width   CDATA           #IMPLIED
+       %db.html.cellhalign;
+       %db.html.cellvalign;
+       "
+>
+
+  <!ENTITY % db.html.colgroup.attlist
+       "%db.html.attrs;
+       span    CDATA           #IMPLIED
+       width   CDATA           #IMPLIED
+       %db.html.cellhalign;
+       %db.html.cellvalign;
+       "
+>
+
+  <!ENTITY % db.html.tr.attlist
+       "%db.html.attrs;
+       %db.html.cellhalign;
+       %db.html.cellvalign;
+       "
+>
+
+  <!ENTITY % db.html.th.attlist
+       "%db.html.attrs;
+       %db.html.tablecell.attributes;
+       %db.html.cellhalign;
+       %db.html.cellvalign;
+       "
+>
+
+  <!ENTITY % db.html.td.attlist
+       "%db.html.attrs;
+       %db.html.tablecell.attributes;
+       %db.html.cellhalign;
+       %db.html.cellvalign;
+       "
+>
+
+  <!ATTLIST title
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.title.attlist;
+       
+>
+
+  <!ELEMENT title
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | application | author | biblioref | citation | citebiblioid | citerefentry | citetitle | classname | code | command | computeroutput | constant | coref | database | date | editor | email | emphasis | envar | errorcode | errorname | errortext | errortype | exceptionname | filename | firstterm | footnote | footnoteref | foreignphrase | function | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | indexterm | initializer | inlineequation | inlinemediaobject | interfacename | jobtitle | keycap | keycode | keycombo | keysym | link | literal | markup | menuchoice | methodname | modifier | mousebutton | nonterminal | olink | ooclass | ooexception | oointerface | option | optional | org | orgname | package | parameter | person | personname | phrase | productname | productnumber | prompt | property | quote | remark | replaceable | returnvalue | shortcut | subscript | superscript | symbol | systemitem | tag | termdef | token | trademark | type | uri | userinput | varname | wordasword | xref)*
+>
+
+  <!ATTLIST titleabbrev
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.titleabbrev.attlist;
+       
+>
+
+  <!ELEMENT titleabbrev
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | application | author | biblioref | citation | citebiblioid | citerefentry | citetitle | classname | code | command | computeroutput | constant | coref | database | date | editor | email | emphasis | envar | errorcode | errorname | errortext | errortype | exceptionname | filename | firstterm | footnote | footnoteref | foreignphrase | function | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | indexterm | initializer | inlineequation | inlinemediaobject | interfacename | jobtitle | keycap | keycode | keycombo | keysym | link | literal | markup | menuchoice | methodname | modifier | mousebutton | nonterminal | olink | ooclass | ooexception | oointerface | option | optional | org | orgname | package | parameter | person | personname | phrase | productname | productnumber | prompt | property | quote | remark | replaceable | returnvalue | shortcut | subscript | superscript | symbol | systemitem | tag | termdef | token | trademark | type | uri | userinput | varname | wordasword | xref)*
+>
+
+  <!ATTLIST subtitle
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.subtitle.attlist;
+       
+>
+
+  <!ELEMENT subtitle
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | application | author | biblioref | citation | citebiblioid | citerefentry | citetitle | classname | code | command | computeroutput | constant | coref | database | date | editor | email | emphasis | envar | errorcode | errorname | errortext | errortype | exceptionname | filename | firstterm | footnote | footnoteref | foreignphrase | function | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | indexterm | initializer | inlineequation | inlinemediaobject | interfacename | jobtitle | keycap | keycode | keycombo | keysym | link | literal | markup | menuchoice | methodname | modifier | mousebutton | nonterminal | olink | ooclass | ooexception | oointerface | option | optional | org | orgname | package | parameter | person | personname | phrase | productname | productnumber | prompt | property | quote | remark | replaceable | returnvalue | shortcut | subscript | superscript | symbol | systemitem | tag | termdef | token | trademark | type | uri | userinput | varname | wordasword | xref)*
+>
+
+  <!ATTLIST info
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.info.attlist;
+       
+>
+
+  <!ELEMENT info
+       ((%db._title; | (%db.info.elements;)*))
+>
+
+  <!ATTLIST subjectset
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.subjectset.attlist;
+       
+>
+
+  <!ELEMENT subjectset
+       ((subject)+)
+>
+
+  <!ATTLIST subject
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.subject.attlist;
+       
+>
+
+  <!ELEMENT subject
+       ((subjectterm)+)
+>
+
+  <!ATTLIST subjectterm
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.subjectterm.attlist;
+       
+>
+
+  <!ELEMENT subjectterm
+       (#PCDATA)*
+>
+
+  <!ATTLIST keywordset
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.keywordset.attlist;
+       
+>
+
+  <!ELEMENT keywordset
+       ((keyword)+)
+>
+
+  <!ATTLIST keyword
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.keyword.attlist;
+       
+>
+
+  <!ELEMENT keyword
+       (#PCDATA)*
+>
+
+  <!ATTLIST procedure
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.procedure.attlist;
+       
+>
+
+  <!ELEMENT procedure
+       (%db.procedure.info;, (%db.all.blocks;)*, (step)+)
+>
+
+  <!ATTLIST step
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.step.attlist;
+       
+>
+
+  <!ELEMENT step
+       (%db.step.info;, (((%db.all.blocks;)+, ((substeps | stepalternatives), (%db.all.blocks;)*)?) | ((substeps | stepalternatives), (%db.all.blocks;)*)))
+>
+
+  <!ATTLIST stepalternatives
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.stepalternatives.attlist;
+       
+>
+
+  <!ELEMENT stepalternatives
+       (%db.stepalternatives.info;, (step)+)
+>
+
+  <!ATTLIST substeps
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.substeps.attlist;
+       
+>
+
+  <!ELEMENT substeps
+       ((step)+)
+>
+
+  <!ATTLIST sidebar
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.sidebar.attlist;
+       
+>
+
+  <!ELEMENT sidebar
+       (%db.sidebar.info;, (%db.all.blocks;)+)
+>
+
+  <!ATTLIST abstract
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.abstract.attlist;
+       
+>
+
+  <!ELEMENT abstract
+       (%db.abstract.info;, (%db.para.blocks;)+)
+>
+
+  <!ATTLIST personblurb
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.personblurb.attlist;
+       
+>
+
+  <!ELEMENT personblurb
+       (%db.personblurb.info;, (%db.para.blocks;)+)
+>
+
+  <!ATTLIST blockquote
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.blockquote.attlist;
+       
+>
+
+  <!ELEMENT blockquote
+       (%db.blockquote.info;, attribution?, (%db.all.blocks;)+)
+>
+
+  <!ATTLIST attribution
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.attribution.attlist;
+       
+>
+
+  <!ELEMENT attribution
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | citation | citetitle | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | person | personname | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST bridgehead
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.bridgehead.attlist;
+       
+>
+
+  <!ELEMENT bridgehead
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | application | author | biblioref | citation | citebiblioid | citerefentry | citetitle | classname | code | command | computeroutput | constant | coref | database | date | editor | email | emphasis | envar | errorcode | errorname | errortext | errortype | exceptionname | filename | firstterm | footnote | footnoteref | foreignphrase | function | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | indexterm | initializer | inlineequation | inlinemediaobject | interfacename | jobtitle | keycap | keycode | keycombo | keysym | link | literal | markup | menuchoice | methodname | modifier | mousebutton | nonterminal | olink | ooclass | ooexception | oointerface | option | optional | org | orgname | package | parameter | person | personname | phrase | productname | productnumber | prompt | property | quote | remark | replaceable | returnvalue | shortcut | subscript | superscript | symbol | systemitem | tag | termdef | token | trademark | type | uri | userinput | varname | wordasword | xref)*
+>
+
+  <!ATTLIST remark
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.remark.attlist;
+       
+>
+
+  <!ELEMENT remark
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | application | author | biblioref | citation | citebiblioid | citerefentry | citetitle | classname | code | command | computeroutput | constant | coref | database | date | editor | email | emphasis | envar | errorcode | errorname | errortext | errortype | exceptionname | filename | firstterm | footnote | footnoteref | foreignphrase | function | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | indexterm | initializer | inlineequation | inlinemediaobject | interfacename | jobtitle | keycap | keycode | keycombo | keysym | link | literal | markup | menuchoice | methodname | modifier | mousebutton | nonterminal | olink | ooclass | ooexception | oointerface | option | optional | org | orgname | package | parameter | person | personname | phrase | productname | productnumber | prompt | property | quote | remark | replaceable | returnvalue | shortcut | subscript | superscript | symbol | systemitem | tag | termdef | token | trademark | type | uri | userinput | varname | wordasword | xref)*
+>
+
+  <!ATTLIST epigraph
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.epigraph.attlist;
+       
+>
+
+  <!ELEMENT epigraph
+       (%db.epigraph.info;, attribution?, ((%db.para.blocks; | literallayout))+)
+>
+
+  <!ATTLIST footnote
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.footnote.attlist;
+       
+>
+
+  <!ELEMENT footnote
+       ((%db.all.blocks;)+)
+>
+
+  <!ATTLIST formalpara
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.formalpara.attlist;
+       
+>
+
+  <!ELEMENT formalpara
+       (%db.formalpara.info;, (%db.indexing.inlines;)*, para)
+>
+
+  <!ATTLIST para
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.para.attlist;
+       
+>
+
+  <!ELEMENT para
+       (#PCDATA | abbrev | accel | acronym | address | alt | anchor | annotation | application | author | bibliolist | biblioref | blockquote | bridgehead | calloutlist | caution | citation | citebiblioid | citerefentry | citetitle | classname | classsynopsis | cmdsynopsis | code | command | computeroutput | constant | constructorsynopsis | coref | database | date | destructorsynopsis | editor | email | emphasis | envar | epigraph | equation | errorcode | errorname | errortext | errortype | example | exceptionname | fieldsynopsis | figure | filename | firstterm | footnote | footnoteref | foreignphrase | funcsynopsis | function | glosslist | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | important | indexterm | info | informalequation | informalexample | informalfigure | informaltable | initializer | inlineequation | inlinemediaobject | interfacename | itemizedlist | jobtitle | keycap | keycode | keycombo | keysym | link | literal | literallayout | markup | mediaobject | menuchoice | methodname | methodsynopsis | modifier | mousebutton | nonterminal | note | olink | ooclass | ooexception | oointerface | option | optional | orderedlist | org | orgname | package | parameter | person | personname | phrase | procedure | productname | productnumber | programlisting | programlistingco | prompt | property | qandaset | quote | remark | replaceable | returnvalue | revhistory | screen | screenco | screenshot | segmentedlist | shortcut | sidebar | simplelist | subscript | superscript | symbol | synopsis | systemitem | table | tag | task | termdef | tip | token | trademark | type | uri | userinput | variablelist | varname | warning | wordasword | xref)*
+>
+
+  <!ATTLIST simpara
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.simpara.attlist;
+       
+>
+
+  <!ELEMENT simpara
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | application | author | biblioref | citation | citebiblioid | citerefentry | citetitle | classname | code | command | computeroutput | constant | coref | database | date | editor | email | emphasis | envar | errorcode | errorname | errortext | errortype | exceptionname | filename | firstterm | footnote | footnoteref | foreignphrase | function | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | indexterm | info | initializer | inlineequation | inlinemediaobject | interfacename | jobtitle | keycap | keycode | keycombo | keysym | link | literal | markup | menuchoice | methodname | modifier | mousebutton | nonterminal | olink | ooclass | ooexception | oointerface | option | optional | org | orgname | package | parameter | person | personname | phrase | productname | productnumber | prompt | property | quote | remark | replaceable | returnvalue | shortcut | subscript | superscript | symbol | systemitem | tag | termdef | token | trademark | type | uri | userinput | varname | wordasword | xref)*
+>
+
+  <!ATTLIST itemizedlist
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.itemizedlist.attlist;
+       
+>
+
+  <!ELEMENT itemizedlist
+       (%db.itemizedlist.info;, (%db.all.blocks;)*, (listitem)+)
+>
+
+  <!ATTLIST orderedlist
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.orderedlist.attlist;
+       
+>
+
+  <!ELEMENT orderedlist
+       (%db.orderedlist.info;, (%db.all.blocks;)*, (listitem)+)
+>
+
+  <!ATTLIST listitem
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.listitem.attlist;
+       
+>
+
+  <!ELEMENT listitem
+       ((%db.all.blocks;)+)
+>
+
+  <!ATTLIST segmentedlist
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.segmentedlist.attlist;
+       
+>
+
+  <!ELEMENT segmentedlist
+       (%db.segmentedlist.info;, (segtitle)+, (seglistitem)+)
+>
+
+  <!ATTLIST segtitle
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.segtitle.attlist;
+       
+>
+
+  <!ELEMENT segtitle
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | application | author | biblioref | citation | citebiblioid | citerefentry | citetitle | classname | code | command | computeroutput | constant | coref | database | date | editor | email | emphasis | envar | errorcode | errorname | errortext | errortype | exceptionname | filename | firstterm | footnote | footnoteref | foreignphrase | function | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | indexterm | initializer | inlineequation | inlinemediaobject | interfacename | jobtitle | keycap | keycode | keycombo | keysym | link | literal | markup | menuchoice | methodname | modifier | mousebutton | nonterminal | olink | ooclass | ooexception | oointerface | option | optional | org | orgname | package | parameter | person | personname | phrase | productname | productnumber | prompt | property | quote | remark | replaceable | returnvalue | shortcut | subscript | superscript | symbol | systemitem | tag | termdef | token | trademark | type | uri | userinput | varname | wordasword | xref)*
+>
+
+  <!ATTLIST seglistitem
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.seglistitem.attlist;
+       
+>
+
+  <!ELEMENT seglistitem
+       ((seg)+)
+>
+
+  <!ATTLIST seg
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.seg.attlist;
+       
+>
+
+  <!ELEMENT seg
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | application | author | biblioref | citation | citebiblioid | citerefentry | citetitle | classname | code | command | computeroutput | constant | coref | database | date | editor | email | emphasis | envar | errorcode | errorname | errortext | errortype | exceptionname | filename | firstterm | footnote | footnoteref | foreignphrase | function | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | indexterm | initializer | inlineequation | inlinemediaobject | interfacename | jobtitle | keycap | keycode | keycombo | keysym | link | literal | markup | menuchoice | methodname | modifier | mousebutton | nonterminal | olink | ooclass | ooexception | oointerface | option | optional | org | orgname | package | parameter | person | personname | phrase | productname | productnumber | prompt | property | quote | remark | replaceable | returnvalue | shortcut | subscript | superscript | symbol | systemitem | tag | termdef | token | trademark | type | uri | userinput | varname | wordasword | xref)*
+>
+
+  <!ATTLIST simplelist
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.simplelist.attlist;
+       
+>
+
+  <!ELEMENT simplelist
+       ((member)+)
+>
+
+  <!ATTLIST member
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.member.attlist;
+       
+>
+
+  <!ELEMENT member
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | application | author | biblioref | citation | citebiblioid | citerefentry | citetitle | classname | code | command | computeroutput | constant | coref | database | date | editor | email | emphasis | envar | errorcode | errorname | errortext | errortype | exceptionname | filename | firstterm | footnote | footnoteref | foreignphrase | function | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | indexterm | initializer | inlineequation | inlinemediaobject | interfacename | jobtitle | keycap | keycode | keycombo | keysym | link | literal | markup | menuchoice | methodname | modifier | mousebutton | nonterminal | olink | ooclass | ooexception | oointerface | option | optional | org | orgname | package | parameter | person | personname | phrase | productname | productnumber | prompt | property | quote | remark | replaceable | returnvalue | shortcut | subscript | superscript | symbol | systemitem | tag | termdef | token | trademark | type | uri | userinput | varname | wordasword | xref)*
+>
+
+  <!ATTLIST variablelist
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.variablelist.attlist;
+       
+>
+
+  <!ELEMENT variablelist
+       (%db.variablelist.info;, (%db.all.blocks;)*, (varlistentry)+)
+>
+
+  <!ATTLIST varlistentry
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.varlistentry.attlist;
+       
+>
+
+  <!ELEMENT varlistentry
+       ((term)+, listitem)
+>
+
+  <!ATTLIST term
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.term.attlist;
+       
+>
+
+  <!ELEMENT term
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | application | author | biblioref | citation | citebiblioid | citerefentry | citetitle | classname | code | command | computeroutput | constant | coref | database | date | editor | email | emphasis | envar | errorcode | errorname | errortext | errortype | exceptionname | filename | firstterm | footnote | footnoteref | foreignphrase | function | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | indexterm | initializer | inlineequation | inlinemediaobject | interfacename | jobtitle | keycap | keycode | keycombo | keysym | link | literal | markup | menuchoice | methodname | modifier | mousebutton | nonterminal | olink | ooclass | ooexception | oointerface | option | optional | org | orgname | package | parameter | person | personname | phrase | productname | productnumber | prompt | property | quote | remark | replaceable | returnvalue | shortcut | subscript | superscript | symbol | systemitem | tag | termdef | token | trademark | type | uri | userinput | varname | wordasword | xref)*
+>
+
+  <!ATTLIST example
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.example.attlist;
+       
+>
+
+  <!ELEMENT example
+       (%db.example.info;, (%db.all.blocks;)+, caption?)
+>
+
+  <!ATTLIST informalexample
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.informalexample.attlist;
+       
+>
+
+  <!ELEMENT informalexample
+       (%db.informalexample.info;, (%db.all.blocks;)+, caption?)
+>
+
+  <!ATTLIST literallayout
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.literallayout.attlist;
+       
+>
+
+  <!ELEMENT literallayout
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | application | author | biblioref | citation | citebiblioid | citerefentry | citetitle | classname | co | code | command | computeroutput | constant | coref | database | date | editor | email | emphasis | envar | errorcode | errorname | errortext | errortype | exceptionname | filename | firstterm | footnote | footnoteref | foreignphrase | function | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | indexterm | info | initializer | inlineequation | inlinemediaobject | interfacename | jobtitle | keycap | keycode | keycombo | keysym | lineannotation | link | literal | markup | menuchoice | methodname | modifier | mousebutton | nonterminal | olink | ooclass | ooexception | oointerface | option | optional | org | orgname | package | parameter | person | personname | phrase | productname | productnumber | prompt | property | quote | remark | replaceable | returnvalue | shortcut | subscript | superscript | symbol | systemitem | tag | termdef | textobject | token | trademark | type | uri | userinput | varname | wordasword | xref)*
+>
+
+  <!ATTLIST screen
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.screen.attlist;
+       
+>
+
+  <!ELEMENT screen
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | application | author | biblioref | citation | citebiblioid | citerefentry | citetitle | classname | co | code | command | computeroutput | constant | coref | database | date | editor | email | emphasis | envar | errorcode | errorname | errortext | errortype | exceptionname | filename | firstterm | footnote | footnoteref | foreignphrase | function | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | indexterm | info | initializer | inlineequation | inlinemediaobject | interfacename | jobtitle | keycap | keycode | keycombo | keysym | lineannotation | link | literal | markup | menuchoice | methodname | modifier | mousebutton | nonterminal | olink | ooclass | ooexception | oointerface | option | optional | org | orgname | package | parameter | person | personname | phrase | productname | productnumber | prompt | property | quote | remark | replaceable | returnvalue | shortcut | subscript | superscript | symbol | systemitem | tag | termdef | textobject | token | trademark | type | uri | userinput | varname | wordasword | xref)*
+>
+
+  <!ATTLIST screenshot
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.screenshot.attlist;
+       
+>
+
+  <!ELEMENT screenshot
+       (%db.screenshot.info;, mediaobject)
+>
+
+  <!ATTLIST figure
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.figure.attlist;
+       
+>
+
+  <!ELEMENT figure
+       (%db.figure.info;, (%db.all.blocks;)+, caption?)
+>
+
+  <!ATTLIST informalfigure
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.informalfigure.attlist;
+       
+>
+
+  <!ELEMENT informalfigure
+       (%db.informalfigure.info;, (%db.all.blocks;)+, caption?)
+>
+
+  <!ATTLIST mediaobject
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.mediaobject.attlist;
+       
+>
+
+  <!ELEMENT mediaobject
+       (%db.mediaobject.info;, alt?, (%db.mediaobject.content;)+, caption?)
+>
+
+  <!ATTLIST inlinemediaobject
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.inlinemediaobject.attlist;
+       
+>
+
+  <!ELEMENT inlinemediaobject
+       (%db.inlinemediaobject.info;, alt?, (%db.mediaobject.content;)+)
+>
+
+  <!ATTLIST videoobject
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.videoobject.attlist;
+       
+>
+
+  <!ELEMENT videoobject
+       (%db.videoobject.info;, videodata)
+>
+
+  <!ATTLIST audioobject
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.audioobject.attlist;
+       
+>
+
+  <!ELEMENT audioobject
+       (%db.audioobject.info;, audiodata)
+>
+
+  <!ATTLIST imageobject
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.imageobject.attlist;
+       
+>
+
+  <!ELEMENT imageobject
+       (%db.imageobject.info;, %db.imageobject.content;)
+>
+
+  <!ATTLIST textobject
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.textobject.attlist;
+       
+>
+
+  <!ELEMENT textobject
+       (%db.textobject.info;, (phrase | textdata | (%db.all.blocks;)+))
+>
+
+  <!ATTLIST videodata
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.videodata.attlist;
+       
+>
+
+  <!ELEMENT videodata
+       (%db.videodata.info;)
+>
+
+  <!ATTLIST audiodata
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.audiodata.attlist;
+       
+>
+
+  <!ELEMENT audiodata
+       (%db.audiodata.info;)
+>
+
+  <!ATTLIST imagedata
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.imagedata.attlist;
+       
+>
+
+  <!ELEMENT imagedata
+       (%db.imagedata.info;)
+>
+
+  <!ATTLIST textdata
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.textdata.attlist;
+       
+>
+
+  <!ELEMENT textdata
+       (%db.textdata.info;)
+>
+
+  <!ATTLIST address
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.address.attlist;
+       
+>
+
+  <!ELEMENT address
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | city | coref | country | date | email | emphasis | fax | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | orgname | otheraddr | personname | phone | phrase | pob | postcode | quote | remark | replaceable | state | street | subscript | superscript | trademark | uri | wordasword | xref)*
+>
+
+  <!ATTLIST street
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.street.attlist;
+       
+>
+
+  <!ELEMENT street
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST pob
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.pob.attlist;
+       
+>
+
+  <!ELEMENT pob
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST postcode
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.postcode.attlist;
+       
+>
+
+  <!ELEMENT postcode
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST city
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.city.attlist;
+       
+>
+
+  <!ELEMENT city
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST state
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.state.attlist;
+       
+>
+
+  <!ELEMENT state
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST country
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.country.attlist;
+       
+>
+
+  <!ELEMENT country
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST phone
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.phone.attlist;
+       
+>
+
+  <!ELEMENT phone
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST fax
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.fax.attlist;
+       
+>
+
+  <!ELEMENT fax
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST otheraddr
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.otheraddr.attlist;
+       
+>
+
+  <!ELEMENT otheraddr
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST affiliation
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.affiliation.attlist;
+       
+>
+
+  <!ELEMENT affiliation
+       (shortaffil?, (jobtitle)*, (org? | (orgname?, (orgdiv)*, (address)*)))
+>
+
+  <!ATTLIST shortaffil
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.shortaffil.attlist;
+       
+>
+
+  <!ELEMENT shortaffil
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST jobtitle
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.jobtitle.attlist;
+       
+>
+
+  <!ELEMENT jobtitle
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST orgname
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.orgname.attlist;
+       
+>
+
+  <!ELEMENT orgname
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST orgdiv
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.orgdiv.attlist;
+       
+>
+
+  <!ELEMENT orgdiv
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | application | author | biblioref | citation | citebiblioid | citerefentry | citetitle | classname | code | command | computeroutput | constant | coref | database | date | editor | email | emphasis | envar | errorcode | errorname | errortext | errortype | exceptionname | filename | firstterm | footnote | footnoteref | foreignphrase | function | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | indexterm | initializer | inlineequation | inlinemediaobject | interfacename | jobtitle | keycap | keycode | keycombo | keysym | link | literal | markup | menuchoice | methodname | modifier | mousebutton | nonterminal | olink | ooclass | ooexception | oointerface | option | optional | org | orgname | package | parameter | person | personname | phrase | productname | productnumber | prompt | property | quote | remark | replaceable | returnvalue | shortcut | subscript | superscript | symbol | systemitem | tag | termdef | token | trademark | type | uri | userinput | varname | wordasword | xref)*
+>
+
+  <!ATTLIST artpagenums
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.artpagenums.attlist;
+       
+>
+
+  <!ELEMENT artpagenums
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST personname
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.personname.attlist;
+       
+>
+
+  <!ELEMENT personname
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstname | firstterm | footnote | footnoteref | foreignphrase | givenname | glossterm | honorific | indexterm | inlinemediaobject | lineage | link | olink | othername | phrase | quote | remark | replaceable | subscript | superscript | surname | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST author
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.author.attlist;
+       
+>
+
+  <!ELEMENT author
+       (%db.credit.contentmodel;)
+>
+
+  <!ATTLIST authorgroup
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.authorgroup.attlist;
+       
+>
+
+  <!ELEMENT authorgroup
+       (((author | editor | othercredit))+)
+>
+
+  <!ATTLIST collab
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.collab.attlist;
+       
+>
+
+  <!ELEMENT collab
+       (((person | personname | org | orgname))+, (affiliation)*)
+>
+
+  <!ATTLIST authorinitials
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.authorinitials.attlist;
+       
+>
+
+  <!ELEMENT authorinitials
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST person
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.person.attlist;
+       
+>
+
+  <!ELEMENT person
+       (personname, ((address | affiliation | email | uri | personblurb))*)
+>
+
+  <!ATTLIST org
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.org.attlist;
+       
+>
+
+  <!ELEMENT org
+       (orgname, ((address | affiliation | email | uri | orgdiv))*)
+>
+
+  <!ATTLIST confgroup
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.confgroup.attlist;
+       
+>
+
+  <!ELEMENT confgroup
+       (((confdates | conftitle | confnum | confsponsor | address))*)
+>
+
+  <!ATTLIST confdates
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.confdates.attlist;
+       
+>
+
+  <!ELEMENT confdates
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST conftitle
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.conftitle.attlist;
+       
+>
+
+  <!ELEMENT conftitle
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST confnum
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.confnum.attlist;
+       
+>
+
+  <!ELEMENT confnum
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST confsponsor
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.confsponsor.attlist;
+       
+>
+
+  <!ELEMENT confsponsor
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST contractnum
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.contractnum.attlist;
+       
+>
+
+  <!ELEMENT contractnum
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST contractsponsor
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.contractsponsor.attlist;
+       
+>
+
+  <!ELEMENT contractsponsor
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST copyright
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.copyright.attlist;
+       
+>
+
+  <!ELEMENT copyright
+       ((year)+, (holder)*)
+>
+
+  <!ATTLIST year
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.year.attlist;
+       
+>
+
+  <!ELEMENT year
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST holder
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.holder.attlist;
+       
+>
+
+  <!ELEMENT holder
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST cover
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.cover.attlist;
+       
+>
+
+  <!ELEMENT cover
+       ((%db.cover.contentmodel;)+)
+>
+
+  <!ATTLIST date
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.date.attlist;
+       
+>
+
+  <!ELEMENT date
+       (#PCDATA)*
+>
+
+  <!ATTLIST edition
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.edition.attlist;
+       
+>
+
+  <!ELEMENT edition
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST editor
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.editor.attlist;
+       
+>
+
+  <!ELEMENT editor
+       (%db.credit.contentmodel;)
+>
+
+  <!ATTLIST biblioid
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.biblioid.attlist;
+       
+>
+
+  <!ELEMENT biblioid
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST citebiblioid
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.citebiblioid.attlist;
+       
+>
+
+  <!ELEMENT citebiblioid
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST bibliosource
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.bibliosource.attlist;
+       
+>
+
+  <!ELEMENT bibliosource
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST bibliorelation
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.bibliorelation.attlist;
+       
+>
+
+  <!ELEMENT bibliorelation
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST bibliocoverage
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.bibliocoverage.attlist;
+       
+>
+
+  <!ELEMENT bibliocoverage
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST legalnotice
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.legalnotice.attlist;
+       
+>
+
+  <!ELEMENT legalnotice
+       (%db.legalnotice.info;, (%db.all.blocks;)+)
+>
+
+  <!ATTLIST othercredit
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.othercredit.attlist;
+       
+>
+
+  <!ELEMENT othercredit
+       (%db.credit.contentmodel;)
+>
+
+  <!ATTLIST pagenums
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.pagenums.attlist;
+       
+>
+
+  <!ELEMENT pagenums
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST contrib
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.contrib.attlist;
+       
+>
+
+  <!ELEMENT contrib
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | application | author | biblioref | citation | citebiblioid | citerefentry | citetitle | classname | code | command | computeroutput | constant | coref | database | date | editor | email | emphasis | envar | errorcode | errorname | errortext | errortype | exceptionname | filename | firstterm | footnote | footnoteref | foreignphrase | function | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | indexterm | initializer | inlineequation | inlinemediaobject | interfacename | jobtitle | keycap | keycode | keycombo | keysym | link | literal | markup | menuchoice | methodname | modifier | mousebutton | nonterminal | olink | ooclass | ooexception | oointerface | option | optional | org | orgname | package | parameter | person | personname | phrase | productname | productnumber | prompt | property | quote | remark | replaceable | returnvalue | shortcut | subscript | superscript | symbol | systemitem | tag | termdef | token | trademark | type | uri | userinput | varname | wordasword | xref)*
+>
+
+  <!ATTLIST honorific
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.honorific.attlist;
+       
+>
+
+  <!ELEMENT honorific
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST firstname
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.firstname.attlist;
+       
+>
+
+  <!ELEMENT firstname
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST givenname
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.givenname.attlist;
+       
+>
+
+  <!ELEMENT givenname
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST surname
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.surname.attlist;
+       
+>
+
+  <!ELEMENT surname
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST lineage
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.lineage.attlist;
+       
+>
+
+  <!ELEMENT lineage
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST othername
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.othername.attlist;
+       
+>
+
+  <!ELEMENT othername
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST printhistory
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.printhistory.attlist;
+       
+>
+
+  <!ELEMENT printhistory
+       ((%db.para.blocks;)+)
+>
+
+  <!ATTLIST pubdate
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.pubdate.attlist;
+       
+>
+
+  <!ELEMENT pubdate
+       (#PCDATA)*
+>
+
+  <!ATTLIST publisher
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.publisher.attlist;
+       
+>
+
+  <!ELEMENT publisher
+       (publishername, (address)*)
+>
+
+  <!ATTLIST publishername
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.publishername.attlist;
+       
+>
+
+  <!ELEMENT publishername
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST releaseinfo
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.releaseinfo.attlist;
+       
+>
+
+  <!ELEMENT releaseinfo
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST revhistory
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.revhistory.attlist;
+       
+>
+
+  <!ELEMENT revhistory
+       (%db.revhistory.info;, (revision)+)
+>
+
+  <!ATTLIST revision
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.revision.attlist;
+       
+>
+
+  <!ELEMENT revision
+       (revnumber?, date, ((authorinitials | author))*, (revremark | revdescription)?)
+>
+
+  <!ATTLIST revnumber
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.revnumber.attlist;
+       
+>
+
+  <!ELEMENT revnumber
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST revremark
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.revremark.attlist;
+       
+>
+
+  <!ELEMENT revremark
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST revdescription
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.revdescription.attlist;
+       
+>
+
+  <!ELEMENT revdescription
+       ((%db.all.blocks;)*)
+>
+
+  <!ATTLIST seriesvolnums
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.seriesvolnums.attlist;
+       
+>
+
+  <!ELEMENT seriesvolnums
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST volumenum
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.volumenum.attlist;
+       
+>
+
+  <!ELEMENT volumenum
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST issuenum
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.issuenum.attlist;
+       
+>
+
+  <!ELEMENT issuenum
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST package
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.package.attlist;
+       
+>
+
+  <!ELEMENT package
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST email
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.email.attlist;
+       
+>
+
+  <!ELEMENT email
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST lineannotation
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.lineannotation.attlist;
+       
+>
+
+  <!ELEMENT lineannotation
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST parameter
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.parameter.attlist;
+       
+>
+
+  <!ELEMENT parameter
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST replaceable
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.replaceable.attlist;
+       
+>
+
+  <!ELEMENT replaceable
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | co | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST uri
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.uri.attlist;
+       
+>
+
+  <!ELEMENT uri
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST abbrev
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.abbrev.attlist;
+       
+>
+
+  <!ELEMENT abbrev
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST acronym
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.acronym.attlist;
+       
+>
+
+  <!ELEMENT acronym
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST citation
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.citation.attlist;
+       
+>
+
+  <!ELEMENT citation
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | application | author | biblioref | citation | citebiblioid | citerefentry | citetitle | classname | code | command | computeroutput | constant | coref | database | date | editor | email | emphasis | envar | errorcode | errorname | errortext | errortype | exceptionname | filename | firstterm | footnote | footnoteref | foreignphrase | function | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | indexterm | initializer | inlineequation | inlinemediaobject | interfacename | jobtitle | keycap | keycode | keycombo | keysym | link | literal | markup | menuchoice | methodname | modifier | mousebutton | nonterminal | olink | ooclass | ooexception | oointerface | option | optional | org | orgname | package | parameter | person | personname | phrase | productname | productnumber | prompt | property | quote | remark | replaceable | returnvalue | shortcut | subscript | superscript | symbol | systemitem | tag | termdef | token | trademark | type | uri | userinput | varname | wordasword | xref)*
+>
+
+  <!ATTLIST citerefentry
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.citerefentry.attlist;
+       
+>
+
+  <!ELEMENT citerefentry
+       (refentrytitle, manvolnum?)
+>
+
+  <!ATTLIST refentrytitle
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.refentrytitle.attlist;
+       
+>
+
+  <!ELEMENT refentrytitle
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | application | author | biblioref | citation | citebiblioid | citerefentry | citetitle | classname | code | command | computeroutput | constant | coref | database | date | editor | email | emphasis | envar | errorcode | errorname | errortext | errortype | exceptionname | filename | firstterm | footnote | footnoteref | foreignphrase | function | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | indexterm | initializer | inlineequation | inlinemediaobject | interfacename | jobtitle | keycap | keycode | keycombo | keysym | link | literal | markup | menuchoice | methodname | modifier | mousebutton | nonterminal | olink | ooclass | ooexception | oointerface | option | optional | org | orgname | package | parameter | person | personname | phrase | productname | productnumber | prompt | property | quote | remark | replaceable | returnvalue | shortcut | subscript | superscript | symbol | systemitem | tag | termdef | token | trademark | type | uri | userinput | varname | wordasword | xref)*
+>
+
+  <!ATTLIST manvolnum
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.manvolnum.attlist;
+       
+>
+
+  <!ELEMENT manvolnum
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST citetitle
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.citetitle.attlist;
+       
+>
+
+  <!ELEMENT citetitle
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | application | author | biblioref | citation | citebiblioid | citerefentry | citetitle | classname | code | command | computeroutput | constant | coref | database | date | editor | email | emphasis | envar | errorcode | errorname | errortext | errortype | exceptionname | filename | firstterm | footnote | footnoteref | foreignphrase | function | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | indexterm | initializer | inlineequation | inlinemediaobject | interfacename | jobtitle | keycap | keycode | keycombo | keysym | link | literal | markup | menuchoice | methodname | modifier | mousebutton | nonterminal | olink | ooclass | ooexception | oointerface | option | optional | org | orgname | package | parameter | person | personname | phrase | productname | productnumber | prompt | property | quote | remark | replaceable | returnvalue | shortcut | subscript | superscript | symbol | systemitem | tag | termdef | token | trademark | type | uri | userinput | varname | wordasword | xref)*
+>
+
+  <!ATTLIST emphasis
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.emphasis.attlist;
+       
+>
+
+  <!ELEMENT emphasis
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | application | author | biblioref | citation | citebiblioid | citerefentry | citetitle | classname | code | command | computeroutput | constant | coref | database | date | editor | email | emphasis | envar | errorcode | errorname | errortext | errortype | exceptionname | filename | firstterm | footnote | footnoteref | foreignphrase | function | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | indexterm | initializer | inlineequation | inlinemediaobject | interfacename | jobtitle | keycap | keycode | keycombo | keysym | link | literal | markup | menuchoice | methodname | modifier | mousebutton | nonterminal | olink | ooclass | ooexception | oointerface | option | optional | org | orgname | package | parameter | person | personname | phrase | productname | productnumber | prompt | property | quote | remark | replaceable | returnvalue | shortcut | subscript | superscript | symbol | systemitem | tag | termdef | token | trademark | type | uri | userinput | varname | wordasword | xref)*
+>
+
+  <!ATTLIST foreignphrase
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.foreignphrase.attlist;
+       
+>
+
+  <!ELEMENT foreignphrase
+       (#PCDATA | abbrev | acronym | anchor | application | author | biblioref | citation | citebiblioid | citerefentry | citetitle | coref | database | date | editor | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | hardware | indexterm | inlinemediaobject | jobtitle | link | olink | org | orgname | person | personname | phrase | productname | productnumber | quote | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST phrase
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.phrase.attlist;
+       
+>
+
+  <!ELEMENT phrase
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | application | author | biblioref | citation | citebiblioid | citerefentry | citetitle | classname | code | command | computeroutput | constant | coref | database | date | editor | email | emphasis | envar | errorcode | errorname | errortext | errortype | exceptionname | filename | firstterm | footnote | footnoteref | foreignphrase | function | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | indexterm | initializer | inlineequation | inlinemediaobject | interfacename | jobtitle | keycap | keycode | keycombo | keysym | link | literal | markup | menuchoice | methodname | modifier | mousebutton | nonterminal | olink | ooclass | ooexception | oointerface | option | optional | org | orgname | package | parameter | person | personname | phrase | productname | productnumber | prompt | property | quote | remark | replaceable | returnvalue | shortcut | subscript | superscript | symbol | systemitem | tag | termdef | token | trademark | type | uri | userinput | varname | wordasword | xref)*
+>
+
+  <!ATTLIST quote
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.quote.attlist;
+       
+>
+
+  <!ELEMENT quote
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | application | author | biblioref | citation | citebiblioid | citerefentry | citetitle | classname | code | command | computeroutput | constant | coref | database | date | editor | email | emphasis | envar | errorcode | errorname | errortext | errortype | exceptionname | filename | firstterm | footnote | footnoteref | foreignphrase | function | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | indexterm | initializer | inlineequation | inlinemediaobject | interfacename | jobtitle | keycap | keycode | keycombo | keysym | link | literal | markup | menuchoice | methodname | modifier | mousebutton | nonterminal | olink | ooclass | ooexception | oointerface | option | optional | org | orgname | package | parameter | person | personname | phrase | productname | productnumber | prompt | property | quote | remark | replaceable | returnvalue | shortcut | subscript | superscript | symbol | systemitem | tag | termdef | token | trademark | type | uri | userinput | varname | wordasword | xref)*
+>
+
+  <!ATTLIST subscript
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.subscript.attlist;
+       
+>
+
+  <!ELEMENT subscript
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST superscript
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.superscript.attlist;
+       
+>
+
+  <!ELEMENT superscript
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST trademark
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.trademark.attlist;
+       
+>
+
+  <!ELEMENT trademark
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST wordasword
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.wordasword.attlist;
+       
+>
+
+  <!ELEMENT wordasword
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST footnoteref
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.footnoteref.attlist;
+       
+>
+
+  <!ELEMENT footnoteref
+       EMPTY
+>
+
+  <!ATTLIST xref
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.xref.attlist;
+       
+>
+
+  <!ELEMENT xref
+       EMPTY
+>
+
+  <!ATTLIST link
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.link.attlist;
+       
+>
+
+  <!ELEMENT link
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | application | author | biblioref | citation | citebiblioid | citerefentry | citetitle | classname | code | command | computeroutput | constant | coref | database | date | editor | email | emphasis | envar | errorcode | errorname | errortext | errortype | exceptionname | filename | firstterm | footnote | footnoteref | foreignphrase | function | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | indexterm | initializer | inlineequation | inlinemediaobject | interfacename | jobtitle | keycap | keycode | keycombo | keysym | link | literal | markup | menuchoice | methodname | modifier | mousebutton | nonterminal | olink | ooclass | ooexception | oointerface | option | optional | org | orgname | package | parameter | person | personname | phrase | productname | productnumber | prompt | property | quote | remark | replaceable | returnvalue | shortcut | subscript | superscript | symbol | systemitem | tag | termdef | token | trademark | type | uri | userinput | varname | wordasword | xref)*
+>
+
+  <!ATTLIST olink
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.olink.attlist;
+       
+>
+
+  <!ELEMENT olink
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | application | author | biblioref | citation | citebiblioid | citerefentry | citetitle | classname | code | command | computeroutput | constant | coref | database | date | editor | email | emphasis | envar | errorcode | errorname | errortext | errortype | exceptionname | filename | firstterm | footnote | footnoteref | foreignphrase | function | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | indexterm | initializer | inlineequation | inlinemediaobject | interfacename | jobtitle | keycap | keycode | keycombo | keysym | link | literal | markup | menuchoice | methodname | modifier | mousebutton | nonterminal | olink | ooclass | ooexception | oointerface | option | optional | org | orgname | package | parameter | person | personname | phrase | productname | productnumber | prompt | property | quote | remark | replaceable | returnvalue | shortcut | subscript | superscript | symbol | systemitem | tag | termdef | token | trademark | type | uri | userinput | varname | wordasword | xref)*
+>
+
+  <!ATTLIST anchor
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.anchor.attlist;
+       
+>
+
+  <!ELEMENT anchor
+       EMPTY
+>
+
+  <!ATTLIST alt
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.alt.attlist;
+       
+>
+
+  <!ELEMENT alt
+       (#PCDATA | inlinemediaobject)*
+>
+
+  <!ATTLIST set
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.set.attlist;
+       
+>
+
+  <!ELEMENT set
+       (%db.set.info;, (%db.toc.components;)?, (%db.set.components;)+, (%db.setindex.components;)?)
+>
+
+  <!ATTLIST book
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.book.attlist;
+       
+>
+
+  <!ELEMENT book
+       (%db.book.info;, %db.book.components;)
+>
+
+  <!ATTLIST dedication
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.dedication.attlist;
+       
+>
+
+  <!ELEMENT dedication
+       (%db.dedication.info;, (%db.all.blocks;)+)
+>
+
+  <!ATTLIST acknowledgements
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.acknowledgements.attlist;
+       
+>
+
+  <!ELEMENT acknowledgements
+       (%db.acknowledgements.info;, (%db.all.blocks;)+)
+>
+
+  <!ATTLIST colophon
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.colophon.attlist;
+       
+>
+
+  <!ELEMENT colophon
+       (%db.colophon.info;, (((%db.all.blocks;)+, (simplesect)*) | ((%db.all.blocks;)*, (simplesect)+)))
+>
+
+  <!ATTLIST appendix
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.appendix.attlist;
+       
+>
+
+  <!ELEMENT appendix
+       (%db.appendix.info;, %db.appendix.contentmodel;)
+>
+
+  <!ATTLIST chapter
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.chapter.attlist;
+       
+>
+
+  <!ELEMENT chapter
+       (%db.chapter.info;, %db.chapter.contentmodel;)
+>
+
+  <!ATTLIST part
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.part.attlist;
+       
+>
+
+  <!ELEMENT part
+       (%db.part.info;, partintro?, %db.part.contentmodel;)
+>
+
+  <!ATTLIST preface
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.preface.attlist;
+       
+>
+
+  <!ELEMENT preface
+       (%db.preface.info;, %db.component.contentmodel;)
+>
+
+  <!ATTLIST partintro
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.partintro.attlist;
+       
+>
+
+  <!ELEMENT partintro
+       (%db.partintro.info;, %db.toplevel.blocks.or.sections;)
+>
+
+  <!ATTLIST section
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.section.attlist;
+       
+>
+
+  <!ELEMENT section
+       (%db.section.info;, %db.recursive.blocks.or.sections;, (%db.navigation.components;)*)
+>
+
+  <!ATTLIST simplesect
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.simplesect.attlist;
+       
+>
+
+  <!ELEMENT simplesect
+       (%db.simplesect.info;, (%db.all.blocks;)+)
+>
+
+  <!ATTLIST article
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.article.attlist;
+       
+>
+
+  <!ELEMENT article
+       (%db.article.info;, (%db.article.navcomponents;)*, (((%db.all.blocks;)+, (%db.article.components;)?) | %db.article.components;), (%db.article.navcomponents;)*)
+>
+
+  <!ATTLIST annotation
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.annotation.attlist;
+       
+>
+
+  <!ELEMENT annotation
+       (%db.annotation.info;, (%db.all.blocks;)+)
+>
+
+  <!ATTLIST extendedlink
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.extendedlink.attlist;
+       
+>
+
+  <!ELEMENT extendedlink
+       (((locator | arc))+)
+>
+
+  <!ATTLIST locator
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.locator.attlist;
+       
+>
+
+  <!ELEMENT locator
+       EMPTY
+>
+
+  <!ATTLIST arc
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.arc.attlist;
+       
+>
+
+  <!ELEMENT arc
+       EMPTY
+>
+
+  <!ATTLIST sect1
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.sect1.attlist;
+       
+>
+
+  <!ELEMENT sect1
+       (%db.sect1.info;, (((%db.all.blocks;)+, (%db.sect1.sections;)?) | %db.sect1.sections;), (%db.navigation.components;)*)
+>
+
+  <!ATTLIST sect2
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.sect2.attlist;
+       
+>
+
+  <!ELEMENT sect2
+       (%db.sect2.info;, (((%db.all.blocks;)+, (%db.sect2.sections;)?) | %db.sect2.sections;), (%db.navigation.components;)*)
+>
+
+  <!ATTLIST sect3
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.sect3.attlist;
+       
+>
+
+  <!ELEMENT sect3
+       (%db.sect3.info;, (((%db.all.blocks;)+, (%db.sect3.sections;)?) | %db.sect3.sections;), (%db.navigation.components;)*)
+>
+
+  <!ATTLIST sect4
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.sect4.attlist;
+       
+>
+
+  <!ELEMENT sect4
+       (%db.sect4.info;, (((%db.all.blocks;)+, (%db.sect4.sections;)?) | %db.sect4.sections;), (%db.navigation.components;)*)
+>
+
+  <!ATTLIST sect5
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.sect5.attlist;
+       
+>
+
+  <!ELEMENT sect5
+       (%db.sect5.info;, (((%db.all.blocks;)+, (%db.sect5.sections;)?) | %db.sect5.sections;), (%db.navigation.components;)*)
+>
+
+  <!ATTLIST reference
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.reference.attlist;
+       
+>
+
+  <!ELEMENT reference
+       (%db.reference.info;, partintro?, (%db.reference.components;)+)
+>
+
+  <!ATTLIST refentry
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.refentry.attlist;
+       
+>
+
+  <!ELEMENT refentry
+       ((indexterm)*, %db.refentry.info;, refmeta?, (refnamediv)+, refsynopsisdiv?, %db.toplevel.refsection;)
+>
+
+  <!ATTLIST refmeta
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.refmeta.attlist;
+       
+>
+
+  <!ELEMENT refmeta
+       ((indexterm)*, refentrytitle, manvolnum?, (refmiscinfo)*, (indexterm)*)
+>
+
+  <!ATTLIST refmiscinfo
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.refmiscinfo.attlist;
+       
+>
+
+  <!ELEMENT refmiscinfo
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST refnamediv
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.refnamediv.attlist;
+       
+>
+
+  <!ELEMENT refnamediv
+       (refdescriptor?, (refname)+, refpurpose, (refclass)*)
+>
+
+  <!ATTLIST refdescriptor
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.refdescriptor.attlist;
+       
+>
+
+  <!ELEMENT refdescriptor
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | application | author | biblioref | citation | citebiblioid | citerefentry | citetitle | classname | code | command | computeroutput | constant | coref | database | date | editor | email | emphasis | envar | errorcode | errorname | errortext | errortype | exceptionname | filename | firstterm | footnote | footnoteref | foreignphrase | function | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | indexterm | initializer | inlineequation | inlinemediaobject | interfacename | jobtitle | keycap | keycode | keycombo | keysym | link | literal | markup | menuchoice | methodname | modifier | mousebutton | nonterminal | olink | ooclass | ooexception | oointerface | option | optional | org | orgname | package | parameter | person | personname | phrase | productname | productnumber | prompt | property | quote | remark | replaceable | returnvalue | shortcut | subscript | superscript | symbol | systemitem | tag | termdef | token | trademark | type | uri | userinput | varname | wordasword | xref)*
+>
+
+  <!ATTLIST refname
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.refname.attlist;
+       
+>
+
+  <!ELEMENT refname
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | application | author | biblioref | citation | citebiblioid | citerefentry | citetitle | classname | code | command | computeroutput | constant | coref | database | date | editor | email | emphasis | envar | errorcode | errorname | errortext | errortype | exceptionname | filename | firstterm | footnote | footnoteref | foreignphrase | function | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | indexterm | initializer | inlineequation | inlinemediaobject | interfacename | jobtitle | keycap | keycode | keycombo | keysym | link | literal | markup | menuchoice | methodname | modifier | mousebutton | nonterminal | olink | ooclass | ooexception | oointerface | option | optional | org | orgname | package | parameter | person | personname | phrase | productname | productnumber | prompt | property | quote | remark | replaceable | returnvalue | shortcut | subscript | superscript | symbol | systemitem | tag | termdef | token | trademark | type | uri | userinput | varname | wordasword | xref)*
+>
+
+  <!ATTLIST refpurpose
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.refpurpose.attlist;
+       
+>
+
+  <!ELEMENT refpurpose
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | application | author | biblioref | citation | citebiblioid | citerefentry | citetitle | classname | code | command | computeroutput | constant | coref | database | date | editor | email | emphasis | envar | errorcode | errorname | errortext | errortype | exceptionname | filename | firstterm | footnote | footnoteref | foreignphrase | function | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | indexterm | initializer | inlineequation | inlinemediaobject | interfacename | jobtitle | keycap | keycode | keycombo | keysym | link | literal | markup | menuchoice | methodname | modifier | mousebutton | nonterminal | olink | ooclass | ooexception | oointerface | option | optional | org | orgname | package | parameter | person | personname | phrase | productname | productnumber | prompt | property | quote | remark | replaceable | returnvalue | shortcut | subscript | superscript | symbol | systemitem | tag | termdef | token | trademark | type | uri | userinput | varname | wordasword | xref)*
+>
+
+  <!ATTLIST refclass
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.refclass.attlist;
+       
+>
+
+  <!ELEMENT refclass
+       (#PCDATA | application)*
+>
+
+  <!ATTLIST refsynopsisdiv
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.refsynopsisdiv.attlist;
+       
+>
+
+  <!ELEMENT refsynopsisdiv
+       (%db.refsynopsisdiv.info;, (((%db.all.blocks;)+, (%db.secondlevel.refsection;)?) | %db.secondlevel.refsection;))
+>
+
+  <!ATTLIST refsection
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.refsection.attlist;
+       
+>
+
+  <!ELEMENT refsection
+       (%db.refsection.info;, (((%db.all.blocks;)+, (refsection)*) | (refsection)+))
+>
+
+  <!ATTLIST refsect1
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.refsect1.attlist;
+       
+>
+
+  <!ELEMENT refsect1
+       (%db.refsect1.info;, (((%db.all.blocks;)+, (%db.refsect1.sections;)?) | %db.refsect1.sections;))
+>
+
+  <!ATTLIST refsect2
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.refsect2.attlist;
+       
+>
+
+  <!ELEMENT refsect2
+       (%db.refsect2.info;, (((%db.all.blocks;)+, (%db.refsect2.sections;)?) | %db.refsect2.sections;))
+>
+
+  <!ATTLIST refsect3
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.refsect3.attlist;
+       
+>
+
+  <!ELEMENT refsect3
+       (%db.refsect3.info;, (%db.all.blocks;)+)
+>
+
+  <!ATTLIST glosslist
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.glosslist.attlist;
+       
+>
+
+  <!ELEMENT glosslist
+       ((%db.glosslist.info;)?, (%db.all.blocks;)*, (glossentry)+)
+>
+
+  <!ATTLIST glossentry
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.glossentry.attlist;
+       
+>
+
+  <!ELEMENT glossentry
+       (glossterm, acronym?, abbrev?, (indexterm)*, (glosssee | (glossdef)+))
+>
+
+  <!ATTLIST glossdef
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.glossdef.attlist;
+       
+>
+
+  <!ELEMENT glossdef
+       ((%db.all.blocks;)+, (glossseealso)*)
+>
+
+  <!ATTLIST glosssee
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.glosssee.attlist;
+       
+>
+
+  <!ELEMENT glosssee
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | application | author | biblioref | citation | citebiblioid | citerefentry | citetitle | classname | code | command | computeroutput | constant | coref | database | date | editor | email | emphasis | envar | errorcode | errorname | errortext | errortype | exceptionname | filename | firstterm | footnote | footnoteref | foreignphrase | function | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | indexterm | initializer | inlineequation | inlinemediaobject | interfacename | jobtitle | keycap | keycode | keycombo | keysym | link | literal | markup | menuchoice | methodname | modifier | mousebutton | nonterminal | olink | ooclass | ooexception | oointerface | option | optional | org | orgname | package | parameter | person | personname | phrase | productname | productnumber | prompt | property | quote | remark | replaceable | returnvalue | shortcut | subscript | superscript | symbol | systemitem | tag | termdef | token | trademark | type | uri | userinput | varname | wordasword | xref)*
+>
+
+  <!ATTLIST glossseealso
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.glossseealso.attlist;
+       
+>
+
+  <!ELEMENT glossseealso
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | application | author | biblioref | citation | citebiblioid | citerefentry | citetitle | classname | code | command | computeroutput | constant | coref | database | date | editor | email | emphasis | envar | errorcode | errorname | errortext | errortype | exceptionname | filename | firstterm | footnote | footnoteref | foreignphrase | function | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | indexterm | initializer | inlineequation | inlinemediaobject | interfacename | jobtitle | keycap | keycode | keycombo | keysym | link | literal | markup | menuchoice | methodname | modifier | mousebutton | nonterminal | olink | ooclass | ooexception | oointerface | option | optional | org | orgname | package | parameter | person | personname | phrase | productname | productnumber | prompt | property | quote | remark | replaceable | returnvalue | shortcut | subscript | superscript | symbol | systemitem | tag | termdef | token | trademark | type | uri | userinput | varname | wordasword | xref)*
+>
+
+  <!ATTLIST firstterm
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.firstterm.attlist;
+       
+>
+
+  <!ELEMENT firstterm
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | application | author | biblioref | citation | citebiblioid | citerefentry | citetitle | classname | code | command | computeroutput | constant | coref | database | date | editor | email | emphasis | envar | errorcode | errorname | errortext | errortype | exceptionname | filename | firstterm | footnote | footnoteref | foreignphrase | function | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | indexterm | initializer | inlineequation | inlinemediaobject | interfacename | jobtitle | keycap | keycode | keycombo | keysym | link | literal | markup | menuchoice | methodname | modifier | mousebutton | nonterminal | olink | ooclass | ooexception | oointerface | option | optional | org | orgname | package | parameter | person | personname | phrase | productname | productnumber | prompt | property | quote | remark | replaceable | returnvalue | shortcut | subscript | superscript | symbol | systemitem | tag | termdef | token | trademark | type | uri | userinput | varname | wordasword | xref)*
+>
+
+  <!ATTLIST glossterm
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.glossterm.attlist;
+       
+>
+
+  <!ELEMENT glossterm
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | application | author | biblioref | citation | citebiblioid | citerefentry | citetitle | classname | code | command | computeroutput | constant | coref | database | date | editor | email | emphasis | envar | errorcode | errorname | errortext | errortype | exceptionname | filename | firstterm | footnote | footnoteref | foreignphrase | function | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | indexterm | initializer | inlineequation | inlinemediaobject | interfacename | jobtitle | keycap | keycode | keycombo | keysym | link | literal | markup | menuchoice | methodname | modifier | mousebutton | nonterminal | olink | ooclass | ooexception | oointerface | option | optional | org | orgname | package | parameter | person | personname | phrase | productname | productnumber | prompt | property | quote | remark | replaceable | returnvalue | shortcut | subscript | superscript | symbol | systemitem | tag | termdef | token | trademark | type | uri | userinput | varname | wordasword | xref)*
+>
+
+  <!ATTLIST glossary
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.glossary.attlist;
+       
+>
+
+  <!ELEMENT glossary
+       (%db.glossary.info;, (%db.all.blocks;)*, ((glossdiv)* | (glossentry)*), bibliography?)
+>
+
+  <!ATTLIST glossdiv
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.glossdiv.attlist;
+       
+>
+
+  <!ELEMENT glossdiv
+       (%db.glossdiv.info;, (%db.all.blocks;)*, (glossentry)+)
+>
+
+  <!ATTLIST termdef
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.termdef.attlist;
+       
+>
+
+  <!ELEMENT termdef
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | application | author | biblioref | citation | citebiblioid | citerefentry | citetitle | classname | code | command | computeroutput | constant | coref | database | date | editor | email | emphasis | envar | errorcode | errorname | errortext | errortype | exceptionname | filename | firstterm | footnote | footnoteref | foreignphrase | function | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | indexterm | initializer | inlineequation | inlinemediaobject | interfacename | jobtitle | keycap | keycode | keycombo | keysym | link | literal | markup | menuchoice | methodname | modifier | mousebutton | nonterminal | olink | ooclass | ooexception | oointerface | option | optional | org | orgname | package | parameter | person | personname | phrase | productname | productnumber | prompt | property | quote | remark | replaceable | returnvalue | shortcut | subscript | superscript | symbol | systemitem | tag | termdef | token | trademark | type | uri | userinput | varname | wordasword | xref)*
+>
+
+  <!ATTLIST biblioentry
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.biblioentry.attlist;
+       
+>
+
+  <!ELEMENT biblioentry
+       ((%db.bibliographic.elements;)+)
+>
+
+  <!ATTLIST bibliomixed
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.bibliomixed.attlist;
+       
+>
+
+  <!ELEMENT bibliomixed
+       (#PCDATA | abbrev | abstract | acronym | address | alt | anchor | annotation | artpagenums | author | authorgroup | authorinitials | bibliocoverage | biblioid | bibliomisc | bibliomset | biblioref | bibliorelation | biblioset | bibliosource | citebiblioid | citerefentry | citetitle | collab | confgroup | contractnum | contractsponsor | copyright | coref | cover | date | edition | editor | emphasis | extendedlink | firstname | firstterm | footnote | footnoteref | foreignphrase | givenname | glossterm | honorific | indexterm | inlinemediaobject | issuenum | itermset | keywordset | legalnotice | lineage | link | mediaobject | olink | org | orgname | othercredit | othername | pagenums | person | personblurb | personname | phrase | printhistory | productname | productnumber | pubdate | publisher | publishername | quote | releaseinfo | remark | replaceable | revhistory | seriesvolnums | subjectset | subscript | subtitle | superscript | surname | title | titleabbrev | trademark | volumenum | wordasword | xref)*
+>
+
+  <!ATTLIST biblioset
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.biblioset.attlist;
+       
+>
+
+  <!ELEMENT biblioset
+       ((%db.bibliographic.elements;)+)
+>
+
+  <!ATTLIST bibliomset
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.bibliomset.attlist;
+       
+>
+
+  <!ELEMENT bibliomset
+       (#PCDATA | abbrev | abstract | acronym | address | alt | anchor | annotation | artpagenums | author | authorgroup | authorinitials | bibliocoverage | biblioid | bibliomisc | bibliomset | biblioref | bibliorelation | biblioset | bibliosource | citebiblioid | citerefentry | citetitle | collab | confgroup | contractnum | contractsponsor | copyright | coref | cover | date | edition | editor | emphasis | extendedlink | firstname | firstterm | footnote | footnoteref | foreignphrase | givenname | glossterm | honorific | indexterm | inlinemediaobject | issuenum | itermset | keywordset | legalnotice | lineage | link | mediaobject | olink | org | orgname | othercredit | othername | pagenums | person | personblurb | personname | phrase | printhistory | productname | productnumber | pubdate | publisher | publishername | quote | releaseinfo | remark | replaceable | revhistory | seriesvolnums | subjectset | subscript | subtitle | superscript | surname | title | titleabbrev | trademark | volumenum | wordasword | xref)*
+>
+
+  <!ATTLIST bibliomisc
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.bibliomisc.attlist;
+       
+>
+
+  <!ELEMENT bibliomisc
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST bibliography
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.bibliography.attlist;
+       
+>
+
+  <!ELEMENT bibliography
+       (%db.bibliography.info;, (%db.all.blocks;)*, ((bibliodiv)+ | ((biblioentry | bibliomixed))+))
+>
+
+  <!ATTLIST bibliodiv
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.bibliodiv.attlist;
+       
+>
+
+  <!ELEMENT bibliodiv
+       (%db.bibliodiv.info;, (%db.all.blocks;)*, ((biblioentry | bibliomixed))+)
+>
+
+  <!ATTLIST bibliolist
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.bibliolist.attlist;
+       
+>
+
+  <!ELEMENT bibliolist
+       ((%db.bibliolist.info;)?, (%db.all.blocks;)*, ((biblioentry | bibliomixed))+)
+>
+
+  <!ATTLIST biblioref
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.biblioref.attlist;
+       
+>
+
+  <!ELEMENT biblioref
+       EMPTY
+>
+
+  <!ATTLIST itermset
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.itermset.attlist;
+       
+>
+
+  <!ELEMENT itermset
+       ((indexterm)+)
+>
+
+  <!ATTLIST primary
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.primary.attlist;
+       
+>
+
+  <!ELEMENT primary
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | application | author | biblioref | citation | citebiblioid | citerefentry | citetitle | classname | code | command | computeroutput | constant | coref | database | date | editor | email | emphasis | envar | errorcode | errorname | errortext | errortype | exceptionname | filename | firstterm | footnote | footnoteref | foreignphrase | function | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | indexterm | initializer | inlineequation | inlinemediaobject | interfacename | jobtitle | keycap | keycode | keycombo | keysym | link | literal | markup | menuchoice | methodname | modifier | mousebutton | nonterminal | olink | ooclass | ooexception | oointerface | option | optional | org | orgname | package | parameter | person | personname | phrase | productname | productnumber | prompt | property | quote | remark | replaceable | returnvalue | shortcut | subscript | superscript | symbol | systemitem | tag | termdef | token | trademark | type | uri | userinput | varname | wordasword | xref)*
+>
+
+  <!ATTLIST secondary
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.secondary.attlist;
+       
+>
+
+  <!ELEMENT secondary
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | application | author | biblioref | citation | citebiblioid | citerefentry | citetitle | classname | code | command | computeroutput | constant | coref | database | date | editor | email | emphasis | envar | errorcode | errorname | errortext | errortype | exceptionname | filename | firstterm | footnote | footnoteref | foreignphrase | function | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | indexterm | initializer | inlineequation | inlinemediaobject | interfacename | jobtitle | keycap | keycode | keycombo | keysym | link | literal | markup | menuchoice | methodname | modifier | mousebutton | nonterminal | olink | ooclass | ooexception | oointerface | option | optional | org | orgname | package | parameter | person | personname | phrase | productname | productnumber | prompt | property | quote | remark | replaceable | returnvalue | shortcut | subscript | superscript | symbol | systemitem | tag | termdef | token | trademark | type | uri | userinput | varname | wordasword | xref)*
+>
+
+  <!ATTLIST tertiary
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.tertiary.attlist;
+       
+>
+
+  <!ELEMENT tertiary
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | application | author | biblioref | citation | citebiblioid | citerefentry | citetitle | classname | code | command | computeroutput | constant | coref | database | date | editor | email | emphasis | envar | errorcode | errorname | errortext | errortype | exceptionname | filename | firstterm | footnote | footnoteref | foreignphrase | function | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | indexterm | initializer | inlineequation | inlinemediaobject | interfacename | jobtitle | keycap | keycode | keycombo | keysym | link | literal | markup | menuchoice | methodname | modifier | mousebutton | nonterminal | olink | ooclass | ooexception | oointerface | option | optional | org | orgname | package | parameter | person | personname | phrase | productname | productnumber | prompt | property | quote | remark | replaceable | returnvalue | shortcut | subscript | superscript | symbol | systemitem | tag | termdef | token | trademark | type | uri | userinput | varname | wordasword | xref)*
+>
+
+  <!ATTLIST see
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.see.attlist;
+       
+>
+
+  <!ELEMENT see
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | application | author | biblioref | citation | citebiblioid | citerefentry | citetitle | classname | code | command | computeroutput | constant | coref | database | date | editor | email | emphasis | envar | errorcode | errorname | errortext | errortype | exceptionname | filename | firstterm | footnote | footnoteref | foreignphrase | function | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | indexterm | initializer | inlineequation | inlinemediaobject | interfacename | jobtitle | keycap | keycode | keycombo | keysym | link | literal | markup | menuchoice | methodname | modifier | mousebutton | nonterminal | olink | ooclass | ooexception | oointerface | option | optional | org | orgname | package | parameter | person | personname | phrase | productname | productnumber | prompt | property | quote | remark | replaceable | returnvalue | shortcut | subscript | superscript | symbol | systemitem | tag | termdef | token | trademark | type | uri | userinput | varname | wordasword | xref)*
+>
+
+  <!ATTLIST seealso
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.seealso.attlist;
+       
+>
+
+  <!ELEMENT seealso
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | application | author | biblioref | citation | citebiblioid | citerefentry | citetitle | classname | code | command | computeroutput | constant | coref | database | date | editor | email | emphasis | envar | errorcode | errorname | errortext | errortype | exceptionname | filename | firstterm | footnote | footnoteref | foreignphrase | function | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | indexterm | initializer | inlineequation | inlinemediaobject | interfacename | jobtitle | keycap | keycode | keycombo | keysym | link | literal | markup | menuchoice | methodname | modifier | mousebutton | nonterminal | olink | ooclass | ooexception | oointerface | option | optional | org | orgname | package | parameter | person | personname | phrase | productname | productnumber | prompt | property | quote | remark | replaceable | returnvalue | shortcut | subscript | superscript | symbol | systemitem | tag | termdef | token | trademark | type | uri | userinput | varname | wordasword | xref)*
+>
+
+  <!ATTLIST index
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.index.attlist;
+       
+>
+
+  <!ELEMENT index
+       (%db.index.info;, (%db.all.blocks;)*, ((indexdiv)* | (indexentry)* | segmentedlist))
+>
+
+  <!ATTLIST setindex
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.setindex.attlist;
+       
+>
+
+  <!ELEMENT setindex
+       (%db.setindex.info;, (%db.all.blocks;)*, ((indexdiv)* | (indexentry)*))
+>
+
+  <!ATTLIST indexdiv
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.indexdiv.attlist;
+       
+>
+
+  <!ELEMENT indexdiv
+       (%db.indexdiv.info;, (%db.all.blocks;)*, ((indexentry)+ | segmentedlist))
+>
+
+  <!ATTLIST indexentry
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.indexentry.attlist;
+       
+>
+
+  <!ELEMENT indexentry
+       (primaryie, ((seeie | seealsoie))*, (secondaryie | (seeie | seealsoie | tertiaryie))*)
+>
+
+  <!ATTLIST primaryie
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.primaryie.attlist;
+       
+>
+
+  <!ELEMENT primaryie
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | application | author | biblioref | citation | citebiblioid | citerefentry | citetitle | classname | code | command | computeroutput | constant | coref | database | date | editor | email | emphasis | envar | errorcode | errorname | errortext | errortype | exceptionname | filename | firstterm | footnote | footnoteref | foreignphrase | function | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | indexterm | initializer | inlineequation | inlinemediaobject | interfacename | jobtitle | keycap | keycode | keycombo | keysym | link | literal | markup | menuchoice | methodname | modifier | mousebutton | nonterminal | olink | ooclass | ooexception | oointerface | option | optional | org | orgname | package | parameter | person | personname | phrase | productname | productnumber | prompt | property | quote | remark | replaceable | returnvalue | shortcut | subscript | superscript | symbol | systemitem | tag | termdef | token | trademark | type | uri | userinput | varname | wordasword | xref)*
+>
+
+  <!ATTLIST secondaryie
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.secondaryie.attlist;
+       
+>
+
+  <!ELEMENT secondaryie
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | application | author | biblioref | citation | citebiblioid | citerefentry | citetitle | classname | code | command | computeroutput | constant | coref | database | date | editor | email | emphasis | envar | errorcode | errorname | errortext | errortype | exceptionname | filename | firstterm | footnote | footnoteref | foreignphrase | function | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | indexterm | initializer | inlineequation | inlinemediaobject | interfacename | jobtitle | keycap | keycode | keycombo | keysym | link | literal | markup | menuchoice | methodname | modifier | mousebutton | nonterminal | olink | ooclass | ooexception | oointerface | option | optional | org | orgname | package | parameter | person | personname | phrase | productname | productnumber | prompt | property | quote | remark | replaceable | returnvalue | shortcut | subscript | superscript | symbol | systemitem | tag | termdef | token | trademark | type | uri | userinput | varname | wordasword | xref)*
+>
+
+  <!ATTLIST tertiaryie
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.tertiaryie.attlist;
+       
+>
+
+  <!ELEMENT tertiaryie
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | application | author | biblioref | citation | citebiblioid | citerefentry | citetitle | classname | code | command | computeroutput | constant | coref | database | date | editor | email | emphasis | envar | errorcode | errorname | errortext | errortype | exceptionname | filename | firstterm | footnote | footnoteref | foreignphrase | function | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | indexterm | initializer | inlineequation | inlinemediaobject | interfacename | jobtitle | keycap | keycode | keycombo | keysym | link | literal | markup | menuchoice | methodname | modifier | mousebutton | nonterminal | olink | ooclass | ooexception | oointerface | option | optional | org | orgname | package | parameter | person | personname | phrase | productname | productnumber | prompt | property | quote | remark | replaceable | returnvalue | shortcut | subscript | superscript | symbol | systemitem | tag | termdef | token | trademark | type | uri | userinput | varname | wordasword | xref)*
+>
+
+  <!ATTLIST seeie
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.seeie.attlist;
+       
+>
+
+  <!ELEMENT seeie
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | application | author | biblioref | citation | citebiblioid | citerefentry | citetitle | classname | code | command | computeroutput | constant | coref | database | date | editor | email | emphasis | envar | errorcode | errorname | errortext | errortype | exceptionname | filename | firstterm | footnote | footnoteref | foreignphrase | function | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | indexterm | initializer | inlineequation | inlinemediaobject | interfacename | jobtitle | keycap | keycode | keycombo | keysym | link | literal | markup | menuchoice | methodname | modifier | mousebutton | nonterminal | olink | ooclass | ooexception | oointerface | option | optional | org | orgname | package | parameter | person | personname | phrase | productname | productnumber | prompt | property | quote | remark | replaceable | returnvalue | shortcut | subscript | superscript | symbol | systemitem | tag | termdef | token | trademark | type | uri | userinput | varname | wordasword | xref)*
+>
+
+  <!ATTLIST seealsoie
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.seealsoie.attlist;
+       
+>
+
+  <!ELEMENT seealsoie
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | application | author | biblioref | citation | citebiblioid | citerefentry | citetitle | classname | code | command | computeroutput | constant | coref | database | date | editor | email | emphasis | envar | errorcode | errorname | errortext | errortype | exceptionname | filename | firstterm | footnote | footnoteref | foreignphrase | function | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | indexterm | initializer | inlineequation | inlinemediaobject | interfacename | jobtitle | keycap | keycode | keycombo | keysym | link | literal | markup | menuchoice | methodname | modifier | mousebutton | nonterminal | olink | ooclass | ooexception | oointerface | option | optional | org | orgname | package | parameter | person | personname | phrase | productname | productnumber | prompt | property | quote | remark | replaceable | returnvalue | shortcut | subscript | superscript | symbol | systemitem | tag | termdef | token | trademark | type | uri | userinput | varname | wordasword | xref)*
+>
+
+  <!ATTLIST toc
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.toc.attlist;
+       
+>
+
+  <!ELEMENT toc
+       (%db.toc.info;, (%db.all.blocks;)*, ((tocdiv | tocentry))*)
+>
+
+  <!ATTLIST tocdiv
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.tocdiv.attlist;
+       
+>
+
+  <!ELEMENT tocdiv
+       (%db.tocdiv.info;, (%db.all.blocks;)*, ((tocdiv | tocentry))+)
+>
+
+  <!ATTLIST tocentry
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.tocentry.attlist;
+       
+>
+
+  <!ELEMENT tocentry
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | application | author | biblioref | citation | citebiblioid | citerefentry | citetitle | classname | code | command | computeroutput | constant | coref | database | date | editor | email | emphasis | envar | errorcode | errorname | errortext | errortype | exceptionname | filename | firstterm | footnote | footnoteref | foreignphrase | function | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | indexterm | initializer | inlineequation | inlinemediaobject | interfacename | jobtitle | keycap | keycode | keycombo | keysym | link | literal | markup | menuchoice | methodname | modifier | mousebutton | nonterminal | olink | ooclass | ooexception | oointerface | option | optional | org | orgname | package | parameter | person | personname | phrase | productname | productnumber | prompt | property | quote | remark | replaceable | returnvalue | shortcut | subscript | superscript | symbol | systemitem | tag | termdef | token | trademark | type | uri | userinput | varname | wordasword | xref)*
+>
+
+  <!ATTLIST task
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.task.attlist;
+       
+>
+
+  <!ELEMENT task
+       (%db.task.info;, tasksummary?, taskprerequisites?, procedure, (example)*, taskrelated?)
+>
+
+  <!ATTLIST tasksummary
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.tasksummary.attlist;
+       
+>
+
+  <!ELEMENT tasksummary
+       (%db.tasksummary.info;, (%db.all.blocks;)+)
+>
+
+  <!ATTLIST taskprerequisites
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.taskprerequisites.attlist;
+       
+>
+
+  <!ELEMENT taskprerequisites
+       (%db.taskprerequisites.info;, (%db.all.blocks;)+)
+>
+
+  <!ATTLIST taskrelated
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.taskrelated.attlist;
+       
+>
+
+  <!ELEMENT taskrelated
+       (%db.taskrelated.info;, (%db.all.blocks;)+)
+>
+
+  <!ATTLIST calloutlist
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.calloutlist.attlist;
+       
+>
+
+  <!ELEMENT calloutlist
+       (%db.calloutlist.info;, (%db.all.blocks;)*, (callout)+)
+>
+
+  <!ATTLIST callout
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.callout.attlist;
+       
+>
+
+  <!ELEMENT callout
+       ((%db.all.blocks;)+)
+>
+
+  <!ATTLIST programlistingco
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.programlistingco.attlist;
+       
+>
+
+  <!ELEMENT programlistingco
+       (%db.programlistingco.info;, areaspec, programlisting, (calloutlist)*)
+>
+
+  <!ATTLIST areaspec
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.areaspec.attlist;
+       
+>
+
+  <!ELEMENT areaspec
+       (((area | areaset))+)
+>
+
+  <!ATTLIST area
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.area.attlist;
+       
+>
+
+  <!ELEMENT area
+       (alt?)
+>
+
+  <!ATTLIST areaset
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.areaset.attlist;
+       
+>
+
+  <!ELEMENT areaset
+       ((area)+)
+>
+
+  <!ATTLIST screenco
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.screenco.attlist;
+       
+>
+
+  <!ELEMENT screenco
+       (%db.screenco.info;, areaspec, screen, (calloutlist)*)
+>
+
+  <!ATTLIST imageobjectco
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.imageobjectco.attlist;
+       
+>
+
+  <!ELEMENT imageobjectco
+       (%db.imageobjectco.info;, areaspec, (imageobject)+, (calloutlist)*)
+>
+
+  <!ATTLIST co
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.co.attlist;
+       
+>
+
+  <!ELEMENT co
+       EMPTY
+>
+
+  <!ATTLIST coref
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.coref.attlist;
+       
+>
+
+  <!ELEMENT coref
+       EMPTY
+>
+
+  <!ATTLIST productionset
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.productionset.attlist;
+       
+>
+
+  <!ELEMENT productionset
+       (%db.productionset.info;, ((production | productionrecap))+)
+>
+
+  <!ATTLIST production
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.production.attlist;
+       
+>
+
+  <!ELEMENT production
+       (lhs, (rhs)+, (constraint)*)
+>
+
+  <!ATTLIST lhs
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.lhs.attlist;
+       
+>
+
+  <!ELEMENT lhs
+       (#PCDATA)*
+>
+
+  <!ATTLIST rhs
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.rhs.attlist;
+       
+>
+
+  <!ELEMENT rhs
+       (#PCDATA | lineannotation | nonterminal | sbr)*
+>
+
+  <!ATTLIST nonterminal
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.nonterminal.attlist;
+       
+>
+
+  <!ELEMENT nonterminal
+       (#PCDATA)*
+>
+
+  <!ATTLIST constraint
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.constraint.attlist;
+       
+>
+
+  <!ELEMENT constraint
+       EMPTY
+>
+
+  <!ATTLIST productionrecap
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.productionrecap.attlist;
+       
+>
+
+  <!ELEMENT productionrecap
+       EMPTY
+>
+
+  <!ATTLIST constraintdef
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.constraintdef.attlist;
+       
+>
+
+  <!ELEMENT constraintdef
+       (%db.constraintdef.info;, (%db.all.blocks;)+)
+>
+
+  <!ATTLIST tgroup
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.tgroup.attlist;
+       
+>
+
+  <!ELEMENT tgroup
+       ((colspec)*, (spanspec)*, thead?, tfoot?, tbody)
+>
+
+  <!ATTLIST colspec
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.colspec.attlist;
+       
+>
+
+  <!ELEMENT colspec
+       EMPTY
+>
+
+  <!ATTLIST spanspec
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.spanspec.attlist;
+       
+>
+
+  <!ELEMENT spanspec
+       EMPTY
+>
+
+  <!ATTLIST row
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.row.attlist;
+       
+>
+
+  <!ELEMENT row
+       (((entry | entrytbl))+)
+>
+
+  <!ATTLIST entry
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.entry.attlist;
+       
+>
+
+  <!ELEMENT entry
+       (#PCDATA | abbrev | accel | acronym | address | alt | anchor | annotation | application | author | bibliolist | biblioref | blockquote | bridgehead | calloutlist | caution | citation | citebiblioid | citerefentry | citetitle | classname | classsynopsis | cmdsynopsis | code | command | computeroutput | constant | constructorsynopsis | coref | database | date | destructorsynopsis | editor | email | emphasis | envar | epigraph | equation | errorcode | errorname | errortext | errortype | example | exceptionname | fieldsynopsis | figure | filename | firstterm | footnote | footnoteref | foreignphrase | formalpara | funcsynopsis | function | glosslist | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | important | indexterm | informalequation | informalexample | informalfigure | informaltable | initializer | inlineequation | inlinemediaobject | interfacename | itemizedlist | jobtitle | keycap | keycode | keycombo | keysym | link | literal | literallayout | markup | mediaobject | menuchoice | methodname | methodsynopsis | modifier | mousebutton | nonterminal | note | olink | ooclass | ooexception | oointerface | option | optional | orderedlist | org | orgname | package | para | parameter | person | personname | phrase | procedure | productname | productnumber | programlisting | programlistingco | prompt | property | qandaset | quote | remark | replaceable | returnvalue | revhistory | screen | screenco | screenshot | segmentedlist | shortcut | sidebar | simpara | simplelist | subscript | superscript | symbol | synopsis | systemitem | table | tag | task | termdef | tip | token | trademark | type | uri | userinput | variablelist | varname | warning | wordasword | xref)*
+>
+
+  <!ATTLIST entrytbl
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.entrytbl.attlist;
+       
+>
+
+  <!ELEMENT entrytbl
+       ((colspec)*, (spanspec)*, thead?, tbody)
+>
+
+  <!ATTLIST col
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.html.col.attlist;
+       
+>
+
+  <!ELEMENT col
+       EMPTY
+>
+
+  <!ATTLIST colgroup
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.html.colgroup.attlist;
+       
+>
+
+  <!ELEMENT colgroup
+       ((col)*)
+>
+
+  <!ATTLIST tr
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.html.tr.attlist;
+       
+>
+
+  <!ELEMENT tr
+       (((th | td))+)
+>
+
+  <!ATTLIST th
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.html.th.attlist;
+       
+>
+
+  <!ELEMENT th
+       (#PCDATA | abbrev | accel | acronym | address | alt | anchor | annotation | application | author | bibliolist | biblioref | blockquote | bridgehead | calloutlist | caution | citation | citebiblioid | citerefentry | citetitle | classname | classsynopsis | cmdsynopsis | code | command | computeroutput | constant | constructorsynopsis | coref | database | date | destructorsynopsis | editor | email | emphasis | envar | epigraph | equation | errorcode | errorname | errortext | errortype | example | exceptionname | fieldsynopsis | figure | filename | firstterm | footnote | footnoteref | foreignphrase | formalpara | funcsynopsis | function | glosslist | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | important | indexterm | informalequation | informalexample | informalfigure | informaltable | initializer | inlineequation | inlinemediaobject | interfacename | itemizedlist | jobtitle | keycap | keycode | keycombo | keysym | link | literal | literallayout | markup | mediaobject | menuchoice | methodname | methodsynopsis | modifier | mousebutton | nonterminal | note | olink | ooclass | ooexception | oointerface | option | optional | orderedlist | org | orgname | package | para | parameter | person | personname | phrase | procedure | productname | productnumber | programlisting | programlistingco | prompt | property | qandaset | quote | remark | replaceable | returnvalue | revhistory | screen | screenco | screenshot | segmentedlist | shortcut | sidebar | simpara | simplelist | subscript | superscript | symbol | synopsis | systemitem | table | tag | task | termdef | tip | token | trademark | type | uri | userinput | variablelist | varname | warning | wordasword | xref)*
+>
+
+  <!ATTLIST td
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.html.td.attlist;
+       
+>
+
+  <!ELEMENT td
+       (#PCDATA | abbrev | accel | acronym | address | alt | anchor | annotation | application | author | bibliolist | biblioref | blockquote | bridgehead | calloutlist | caution | citation | citebiblioid | citerefentry | citetitle | classname | classsynopsis | cmdsynopsis | code | command | computeroutput | constant | constructorsynopsis | coref | database | date | destructorsynopsis | editor | email | emphasis | envar | epigraph | equation | errorcode | errorname | errortext | errortype | example | exceptionname | fieldsynopsis | figure | filename | firstterm | footnote | footnoteref | foreignphrase | formalpara | funcsynopsis | function | glosslist | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | important | indexterm | informalequation | informalexample | informalfigure | informaltable | initializer | inlineequation | inlinemediaobject | interfacename | itemizedlist | jobtitle | keycap | keycode | keycombo | keysym | link | literal | literallayout | markup | mediaobject | menuchoice | methodname | methodsynopsis | modifier | mousebutton | nonterminal | note | olink | ooclass | ooexception | oointerface | option | optional | orderedlist | org | orgname | package | para | parameter | person | personname | phrase | procedure | productname | productnumber | programlisting | programlistingco | prompt | property | qandaset | quote | remark | replaceable | returnvalue | revhistory | screen | screenco | screenshot | segmentedlist | shortcut | sidebar | simpara | simplelist | subscript | superscript | symbol | synopsis | systemitem | table | tag | task | termdef | tip | token | trademark | type | uri | userinput | variablelist | varname | warning | wordasword | xref)*
+>
+
+  <!ATTLIST msgset
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.msgset.attlist;
+       
+>
+
+  <!ELEMENT msgset
+       (%db.msgset.info;, ((msgentry)+ | (simplemsgentry)+))
+>
+
+  <!ATTLIST msgentry
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.msgentry.attlist;
+       
+>
+
+  <!ELEMENT msgentry
+       ((msg)+, msginfo?, (msgexplan)*)
+>
+
+  <!ATTLIST simplemsgentry
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.simplemsgentry.attlist;
+       
+>
+
+  <!ELEMENT simplemsgentry
+       (msgtext, (msgexplan)+)
+>
+
+  <!ATTLIST msg
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.msg.attlist;
+       
+>
+
+  <!ELEMENT msg
+       (%db.msg.info;, msgmain, ((msgsub | msgrel))*)
+>
+
+  <!ATTLIST msgmain
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.msgmain.attlist;
+       
+>
+
+  <!ELEMENT msgmain
+       (%db.msgmain.info;, msgtext)
+>
+
+  <!ATTLIST msgsub
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.msgsub.attlist;
+       
+>
+
+  <!ELEMENT msgsub
+       (%db.msgsub.info;, msgtext)
+>
+
+  <!ATTLIST msgrel
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.msgrel.attlist;
+       
+>
+
+  <!ELEMENT msgrel
+       (%db.msgrel.info;, msgtext)
+>
+
+  <!ATTLIST msgtext
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.msgtext.attlist;
+       
+>
+
+  <!ELEMENT msgtext
+       ((%db.all.blocks;)+)
+>
+
+  <!ATTLIST msginfo
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.msginfo.attlist;
+       
+>
+
+  <!ELEMENT msginfo
+       (((msglevel | msgorig | msgaud))*)
+>
+
+  <!ATTLIST msglevel
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.msglevel.attlist;
+       
+>
+
+  <!ELEMENT msglevel
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST msgorig
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.msgorig.attlist;
+       
+>
+
+  <!ELEMENT msgorig
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST msgaud
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.msgaud.attlist;
+       
+>
+
+  <!ELEMENT msgaud
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST msgexplan
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.msgexplan.attlist;
+       
+>
+
+  <!ELEMENT msgexplan
+       (%db.msgexplan.info;, (%db.all.blocks;)+)
+>
+
+  <!ATTLIST qandaset
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.qandaset.attlist;
+       
+>
+
+  <!ELEMENT qandaset
+       (%db.qandaset.info;, (%db.all.blocks;)*, ((qandadiv)+ | (qandaentry)+))
+>
+
+  <!ATTLIST qandadiv
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.qandadiv.attlist;
+       
+>
+
+  <!ELEMENT qandadiv
+       (%db.qandadiv.info;, (%db.all.blocks;)*, ((qandadiv)+ | (qandaentry)+))
+>
+
+  <!ATTLIST qandaentry
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.qandaentry.attlist;
+       
+>
+
+  <!ELEMENT qandaentry
+       (%db.qandaentry.info;, question, (answer)*)
+>
+
+  <!ATTLIST question
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.question.attlist;
+       
+>
+
+  <!ELEMENT question
+       (label?, (%db.all.blocks;)+)
+>
+
+  <!ATTLIST answer
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.answer.attlist;
+       
+>
+
+  <!ELEMENT answer
+       (label?, (%db.all.blocks;)+)
+>
+
+  <!ATTLIST label
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.label.attlist;
+       
+>
+
+  <!ELEMENT label
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST equation
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.equation.attlist;
+       
+>
+
+  <!ELEMENT equation
+       (%db.equation.info;, alt?, %db.equation.content;, caption?)
+>
+
+  <!ATTLIST informalequation
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.informalequation.attlist;
+       
+>
+
+  <!ELEMENT informalequation
+       (%db.informalequation.info;, alt?, %db.equation.content;, caption?)
+>
+
+  <!ATTLIST inlineequation
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.inlineequation.attlist;
+       
+>
+
+  <!ELEMENT inlineequation
+       (alt?, %db.inlineequation.content;)
+>
+
+  <!ATTLIST mathphrase
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.mathphrase.attlist;
+       
+>
+
+  <!ELEMENT mathphrase
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST markup
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.markup.attlist;
+       
+>
+
+  <!ELEMENT markup
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST tag
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.tag.attlist;
+       
+>
+
+  <!ELEMENT tag
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST symbol
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.symbol.attlist;
+       
+>
+
+  <!ELEMENT symbol
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST token
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.token.attlist;
+       
+>
+
+  <!ELEMENT token
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST literal
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.literal.attlist;
+       
+>
+
+  <!ELEMENT literal
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST code
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.code.attlist;
+       
+>
+
+  <!ELEMENT code
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | classname | coref | date | emphasis | exceptionname | firstterm | footnote | footnoteref | foreignphrase | function | glossterm | indexterm | initializer | inlinemediaobject | interfacename | link | methodname | modifier | olink | ooclass | ooexception | oointerface | parameter | phrase | quote | remark | replaceable | returnvalue | subscript | superscript | trademark | type | varname | wordasword | xref)*
+>
+
+  <!ATTLIST constant
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.constant.attlist;
+       
+>
+
+  <!ELEMENT constant
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST productname
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.productname.attlist;
+       
+>
+
+  <!ELEMENT productname
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST productnumber
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.productnumber.attlist;
+       
+>
+
+  <!ELEMENT productnumber
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST database
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.database.attlist;
+       
+>
+
+  <!ELEMENT database
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST application
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.application.attlist;
+       
+>
+
+  <!ELEMENT application
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST hardware
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.hardware.attlist;
+       
+>
+
+  <!ELEMENT hardware
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST guibutton
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.guibutton.attlist;
+       
+>
+
+  <!ELEMENT guibutton
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST guiicon
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.guiicon.attlist;
+       
+>
+
+  <!ELEMENT guiicon
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST guilabel
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.guilabel.attlist;
+       
+>
+
+  <!ELEMENT guilabel
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST guimenu
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.guimenu.attlist;
+       
+>
+
+  <!ELEMENT guimenu
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST guimenuitem
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.guimenuitem.attlist;
+       
+>
+
+  <!ELEMENT guimenuitem
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST guisubmenu
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.guisubmenu.attlist;
+       
+>
+
+  <!ELEMENT guisubmenu
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST menuchoice
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.menuchoice.attlist;
+       
+>
+
+  <!ELEMENT menuchoice
+       (shortcut?, ((guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu))+)
+>
+
+  <!ATTLIST mousebutton
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.mousebutton.attlist;
+       
+>
+
+  <!ELEMENT mousebutton
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST keycap
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.keycap.attlist;
+       
+>
+
+  <!ELEMENT keycap
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST keycode
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.keycode.attlist;
+       
+>
+
+  <!ELEMENT keycode
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST keycombo
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.keycombo.attlist;
+       
+>
+
+  <!ELEMENT keycombo
+       ((%db.keycombination.contentmodel;)+)
+>
+
+  <!ATTLIST keysym
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.keysym.attlist;
+       
+>
+
+  <!ELEMENT keysym
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST accel
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.accel.attlist;
+       
+>
+
+  <!ELEMENT accel
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST shortcut
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.shortcut.attlist;
+       
+>
+
+  <!ELEMENT shortcut
+       ((%db.keycombination.contentmodel;)+)
+>
+
+  <!ATTLIST prompt
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.prompt.attlist;
+       
+>
+
+  <!ELEMENT prompt
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | co | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST envar
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.envar.attlist;
+       
+>
+
+  <!ELEMENT envar
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST filename
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.filename.attlist;
+       
+>
+
+  <!ELEMENT filename
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST command
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.command.attlist;
+       
+>
+
+  <!ELEMENT command
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST computeroutput
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.computeroutput.attlist;
+       
+>
+
+  <!ELEMENT computeroutput
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | co | code | command | computeroutput | constant | coref | date | email | emphasis | envar | filename | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | literal | markup | nonterminal | olink | option | optional | package | parameter | phrase | prompt | property | quote | remark | replaceable | subscript | superscript | symbol | systemitem | tag | termdef | token | trademark | uri | userinput | wordasword | xref)*
+>
+
+  <!ATTLIST userinput
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.userinput.attlist;
+       
+>
+
+  <!ELEMENT userinput
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | biblioref | co | code | command | computeroutput | constant | coref | date | email | emphasis | envar | filename | firstterm | footnote | footnoteref | foreignphrase | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | indexterm | inlinemediaobject | keycap | keycode | keycombo | keysym | link | literal | markup | menuchoice | mousebutton | nonterminal | olink | option | optional | package | parameter | phrase | prompt | property | quote | remark | replaceable | shortcut | subscript | superscript | symbol | systemitem | tag | termdef | token | trademark | uri | userinput | wordasword | xref)*
+>
+
+  <!ATTLIST cmdsynopsis
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.cmdsynopsis.attlist;
+       
+>
+
+  <!ELEMENT cmdsynopsis
+       (%db.cmdsynopsis.info;, ((command | arg | group | sbr))+, (synopfragment)*)
+>
+
+  <!ATTLIST arg
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.arg.attlist;
+       
+>
+
+  <!ELEMENT arg
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | arg | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | group | indexterm | inlinemediaobject | link | olink | option | phrase | quote | remark | replaceable | sbr | subscript | superscript | synopfragmentref | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST sbr
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.sbr.attlist;
+       
+>
+
+  <!ELEMENT sbr
+       EMPTY
+>
+
+  <!ATTLIST synopfragment
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.synopfragment.attlist;
+       
+>
+
+  <!ELEMENT synopfragment
+       (((arg | group))+)
+>
+
+  <!ATTLIST synopfragmentref
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.synopfragmentref.attlist;
+       
+>
+
+  <!ELEMENT synopfragmentref
+       (#PCDATA)*
+>
+
+  <!ATTLIST synopsis
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.synopsis.attlist;
+       
+>
+
+  <!ELEMENT synopsis
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | application | author | biblioref | citation | citebiblioid | citerefentry | citetitle | classname | co | code | command | computeroutput | constant | coref | database | date | editor | email | emphasis | envar | errorcode | errorname | errortext | errortype | exceptionname | filename | firstterm | footnote | footnoteref | foreignphrase | function | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | indexterm | info | initializer | inlineequation | inlinemediaobject | interfacename | jobtitle | keycap | keycode | keycombo | keysym | lineannotation | link | literal | markup | menuchoice | methodname | modifier | mousebutton | nonterminal | olink | ooclass | ooexception | oointerface | option | optional | org | orgname | package | parameter | person | personname | phrase | productname | productnumber | prompt | property | quote | remark | replaceable | returnvalue | shortcut | subscript | superscript | symbol | systemitem | tag | termdef | textobject | token | trademark | type | uri | userinput | varname | wordasword | xref)*
+>
+
+  <!ATTLIST funcsynopsis
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.funcsynopsis.attlist;
+       
+>
+
+  <!ELEMENT funcsynopsis
+       (%db.funcsynopsis.info;, ((funcsynopsisinfo | funcprototype))+)
+>
+
+  <!ATTLIST funcsynopsisinfo
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.funcsynopsisinfo.attlist;
+       
+>
+
+  <!ELEMENT funcsynopsisinfo
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | application | author | biblioref | citation | citebiblioid | citerefentry | citetitle | classname | co | code | command | computeroutput | constant | coref | database | date | editor | email | emphasis | envar | errorcode | errorname | errortext | errortype | exceptionname | filename | firstterm | footnote | footnoteref | foreignphrase | function | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | indexterm | info | initializer | inlineequation | inlinemediaobject | interfacename | jobtitle | keycap | keycode | keycombo | keysym | lineannotation | link | literal | markup | menuchoice | methodname | modifier | mousebutton | nonterminal | olink | ooclass | ooexception | oointerface | option | optional | org | orgname | package | parameter | person | personname | phrase | productname | productnumber | prompt | property | quote | remark | replaceable | returnvalue | shortcut | subscript | superscript | symbol | systemitem | tag | termdef | textobject | token | trademark | type | uri | userinput | varname | wordasword | xref)*
+>
+
+  <!ATTLIST funcprototype
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.funcprototype.attlist;
+       
+>
+
+  <!ELEMENT funcprototype
+       ((modifier)*, funcdef, (void | varargs | (((paramdef | group))+, varargs?)), (modifier)*)
+>
+
+  <!ATTLIST funcdef
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.funcdef.attlist;
+       
+>
+
+  <!ELEMENT funcdef
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | function | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | type | wordasword | xref)*
+>
+
+  <!ATTLIST function
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.function.attlist;
+       
+>
+
+  <!ELEMENT function
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST void
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.void.attlist;
+       
+>
+
+  <!ELEMENT void
+       EMPTY
+>
+
+  <!ATTLIST varargs
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.varargs.attlist;
+       
+>
+
+  <!ELEMENT varargs
+       EMPTY
+>
+
+  <!ATTLIST paramdef
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.paramdef.attlist;
+       
+>
+
+  <!ELEMENT paramdef
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | funcparams | glossterm | indexterm | initializer | inlinemediaobject | link | olink | parameter | phrase | quote | remark | replaceable | subscript | superscript | trademark | type | wordasword | xref)*
+>
+
+  <!ATTLIST funcparams
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.funcparams.attlist;
+       
+>
+
+  <!ELEMENT funcparams
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST classsynopsis
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.classsynopsis.attlist;
+       
+>
+
+  <!ELEMENT classsynopsis
+       ((%db.oo.inlines;)+, ((classsynopsisinfo | methodsynopsis | constructorsynopsis | destructorsynopsis | fieldsynopsis))*)
+>
+
+  <!ATTLIST classsynopsisinfo
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.classsynopsisinfo.attlist;
+       
+>
+
+  <!ELEMENT classsynopsisinfo
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | application | author | biblioref | citation | citebiblioid | citerefentry | citetitle | classname | co | code | command | computeroutput | constant | coref | database | date | editor | email | emphasis | envar | errorcode | errorname | errortext | errortype | exceptionname | filename | firstterm | footnote | footnoteref | foreignphrase | function | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | indexterm | info | initializer | inlineequation | inlinemediaobject | interfacename | jobtitle | keycap | keycode | keycombo | keysym | lineannotation | link | literal | markup | menuchoice | methodname | modifier | mousebutton | nonterminal | olink | ooclass | ooexception | oointerface | option | optional | org | orgname | package | parameter | person | personname | phrase | productname | productnumber | prompt | property | quote | remark | replaceable | returnvalue | shortcut | subscript | superscript | symbol | systemitem | tag | termdef | textobject | token | trademark | type | uri | userinput | varname | wordasword | xref)*
+>
+
+  <!ATTLIST ooclass
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.ooclass.attlist;
+       
+>
+
+  <!ELEMENT ooclass
+       (((package | modifier))*, classname)
+>
+
+  <!ATTLIST oointerface
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.oointerface.attlist;
+       
+>
+
+  <!ELEMENT oointerface
+       (((package | modifier))*, interfacename)
+>
+
+  <!ATTLIST ooexception
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.ooexception.attlist;
+       
+>
+
+  <!ELEMENT ooexception
+       (((package | modifier))*, exceptionname)
+>
+
+  <!ATTLIST modifier
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.modifier.attlist;
+       
+>
+
+  <!ELEMENT modifier
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST interfacename
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.interfacename.attlist;
+       
+>
+
+  <!ELEMENT interfacename
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST exceptionname
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.exceptionname.attlist;
+       
+>
+
+  <!ELEMENT exceptionname
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST fieldsynopsis
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.fieldsynopsis.attlist;
+       
+>
+
+  <!ELEMENT fieldsynopsis
+       ((modifier)*, type?, varname, initializer?)
+>
+
+  <!ATTLIST initializer
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.initializer.attlist;
+       
+>
+
+  <!ELEMENT initializer
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | code | constant | coref | date | email | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | literal | markup | mathphrase | olink | phrase | quote | remark | replaceable | subscript | superscript | symbol | tag | token | trademark | uri | wordasword | xref)*
+>
+
+  <!ATTLIST constructorsynopsis
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.constructorsynopsis.attlist;
+       
+>
+
+  <!ELEMENT constructorsynopsis
+       ((modifier)*, methodname?, (((methodparam | group))+ | void?), (exceptionname)*)
+>
+
+  <!ATTLIST destructorsynopsis
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.destructorsynopsis.attlist;
+       
+>
+
+  <!ELEMENT destructorsynopsis
+       ((modifier)*, methodname?, (((methodparam | group))+ | void?), (exceptionname)*)
+>
+
+  <!ATTLIST methodsynopsis
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.methodsynopsis.attlist;
+       
+>
+
+  <!ELEMENT methodsynopsis
+       ((modifier)*, (type | void)?, methodname, (((methodparam | group))+ | void), (exceptionname)*, (modifier)*)
+>
+
+  <!ATTLIST methodname
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.methodname.attlist;
+       
+>
+
+  <!ELEMENT methodname
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST methodparam
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.methodparam.attlist;
+       
+>
+
+  <!ELEMENT methodparam
+       ((modifier)*, type?, (((modifier)*, parameter, initializer?) | funcparams), (modifier)*)
+>
+
+  <!ATTLIST varname
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.varname.attlist;
+       
+>
+
+  <!ELEMENT varname
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST returnvalue
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.returnvalue.attlist;
+       
+>
+
+  <!ELEMENT returnvalue
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST type
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.type.attlist;
+       
+>
+
+  <!ELEMENT type
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST classname
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.classname.attlist;
+       
+>
+
+  <!ELEMENT classname
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST programlisting
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.programlisting.attlist;
+       
+>
+
+  <!ELEMENT programlisting
+       (#PCDATA | abbrev | accel | acronym | alt | anchor | annotation | application | author | biblioref | citation | citebiblioid | citerefentry | citetitle | classname | co | code | command | computeroutput | constant | coref | database | date | editor | email | emphasis | envar | errorcode | errorname | errortext | errortype | exceptionname | filename | firstterm | footnote | footnoteref | foreignphrase | function | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | indexterm | info | initializer | inlineequation | inlinemediaobject | interfacename | jobtitle | keycap | keycode | keycombo | keysym | lineannotation | link | literal | markup | menuchoice | methodname | modifier | mousebutton | nonterminal | olink | ooclass | ooexception | oointerface | option | optional | org | orgname | package | parameter | person | personname | phrase | productname | productnumber | prompt | property | quote | remark | replaceable | returnvalue | shortcut | subscript | superscript | symbol | systemitem | tag | termdef | textobject | token | trademark | type | uri | userinput | varname | wordasword | xref)*
+>
+
+  <!ATTLIST caution
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.caution.attlist;
+       
+>
+
+  <!ELEMENT caution
+       (%db.admonition.contentmodel;)
+>
+
+  <!ATTLIST important
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.important.attlist;
+       
+>
+
+  <!ELEMENT important
+       (%db.admonition.contentmodel;)
+>
+
+  <!ATTLIST note
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.note.attlist;
+       
+>
+
+  <!ELEMENT note
+       (%db.admonition.contentmodel;)
+>
+
+  <!ATTLIST tip
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.tip.attlist;
+       
+>
+
+  <!ELEMENT tip
+       (%db.admonition.contentmodel;)
+>
+
+  <!ATTLIST warning
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.warning.attlist;
+       
+>
+
+  <!ELEMENT warning
+       (%db.admonition.contentmodel;)
+>
+
+  <!ATTLIST errorcode
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.errorcode.attlist;
+       
+>
+
+  <!ELEMENT errorcode
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST errorname
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.errorname.attlist;
+       
+>
+
+  <!ELEMENT errorname
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST errortext
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.errortext.attlist;
+       
+>
+
+  <!ELEMENT errortext
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST errortype
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.errortype.attlist;
+       
+>
+
+  <!ELEMENT errortype
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST systemitem
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.systemitem.attlist;
+       
+>
+
+  <!ELEMENT systemitem
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | co | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST option
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.option.attlist;
+       
+>
+
+  <!ELEMENT option
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST optional
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.optional.attlist;
+       
+>
+
+  <!ELEMENT optional
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST property
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.property.attlist;
+       
+>
+
+  <!ELEMENT property
+       (#PCDATA | abbrev | acronym | alt | anchor | annotation | biblioref | coref | date | emphasis | firstterm | footnote | footnoteref | foreignphrase | glossterm | indexterm | inlinemediaobject | link | olink | phrase | quote | remark | replaceable | subscript | superscript | trademark | wordasword | xref)*
+>
+
+  <!ATTLIST topic
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.topic.attlist;
+       
+>
+
+  <!ELEMENT topic
+       (%db.topic.info;, (%db.navigation.components;)*, %db.toplevel.blocks.or.sections;, (%db.navigation.components;)*)
+>
+
+  <!ATTLIST indexterm
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.indexterm.attlist;
+       
+>
+
+  <!ELEMENT indexterm
+       (%db.indexterm.contentmodel;)
+>
+
+  <!ATTLIST caption
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.caption.attlist;
+       %db.html.attrs;
+       
+>
+
+  <!ELEMENT caption
+       (#PCDATA | abbrev | accel | acronym | address | alt | anchor | annotation | application | author | bibliolist | biblioref | blockquote | bridgehead | calloutlist | caution | citation | citebiblioid | citerefentry | citetitle | classname | classsynopsis | cmdsynopsis | code | command | computeroutput | constant | constructorsynopsis | coref | database | date | destructorsynopsis | editor | email | emphasis | envar | epigraph | equation | errorcode | errorname | errortext | errortype | example | exceptionname | fieldsynopsis | figure | filename | firstterm | footnote | footnoteref | foreignphrase | formalpara | funcsynopsis | function | glosslist | glossterm | guibutton | guiicon | guilabel | guimenu | guimenuitem | guisubmenu | hardware | important | indexterm | info | informalequation | informalexample | informalfigure | informaltable | initializer | inlineequation | inlinemediaobject | interfacename | itemizedlist | jobtitle | keycap | keycode | keycombo | keysym | link | literal | literallayout | markup | mediaobject | menuchoice | methodname | methodsynopsis | modifier | mousebutton | nonterminal | note | olink | ooclass | ooexception | oointerface | option | optional | orderedlist | org | orgname | package | para | parameter | person | personname | phrase | procedure | productname | productnumber | programlisting | programlistingco | prompt | property | qandaset | quote | remark | replaceable | returnvalue | revhistory | screen | screenco | screenshot | segmentedlist | shortcut | sidebar | simpara | simplelist | subscript | superscript | symbol | synopsis | systemitem | table | tag | task | termdef | tip | token | trademark | type | uri | userinput | variablelist | varname | warning | wordasword | xref)*
+>
+
+  <!ATTLIST group
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.group.attlist;
+       
+>
+
+  <!ELEMENT group
+       (((arg | group | option | synopfragmentref | replaceable | sbr | methodparam | paramdef))+)
+>
+
+  <!ATTLIST thead
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.thead.attlist;
+       
+>
+
+  <!ELEMENT thead
+       ((((colspec)*, (row)+) | (tr)+))
+>
+
+  <!ATTLIST tfoot
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.tfoot.attlist;
+       
+>
+
+  <!ELEMENT tfoot
+       ((((colspec)*, (row)+) | (tr)+))
+>
+
+  <!ATTLIST tbody
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.tbody.attlist;
+       
+>
+
+  <!ELEMENT tbody
+       (((row)+ | (tr)+))
+>
+
+  <!ATTLIST table
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.table.attlist;
+       
+>
+
+  <!ELEMENT table
+       (((%db.cals.table.info;, (alt? | (%db.indexing.inlines;)* | (textobject)*), ((mediaobject)+ | (tgroup)+), caption?) | %db.html.table.model;))
+>
+
+  <!ATTLIST informaltable
+       %db.xmlns.attrib;
+       %xlink.xmlns.attrib;
+       %db.informaltable.attlist;
+       
+>
+
+  <!ELEMENT informaltable
+       (((%db.cals.informaltable.info;, (alt? | (%db.indexing.inlines;)* | (textobject)*), ((mediaobject)+ | (tgroup)+), caption?) | %db.html.informaltable.model;))
+>
+
diff --git a/contrib/samples/assembly/docbook51/docbook.rnc b/contrib/samples/assembly/docbook51/docbook.rnc
new file mode 100755 (executable)
index 0000000..6349d21
--- /dev/null
@@ -0,0 +1,8179 @@
+namespace a = "http://relaxng.org/ns/compatibility/annotations/1.0"
+namespace ctrl = "http://nwalsh.com/xmlns/schema-control/"
+default namespace db = "http://docbook.org/ns/docbook"
+namespace html = "http://www.w3.org/1999/xhtml"
+namespace mml = "http://www.w3.org/1998/Math/MathML"
+namespace rng = "http://relaxng.org/ns/structure/1.0"
+namespace s = "http://purl.oclc.org/dsdl/schematron"
+namespace svg = "http://www.w3.org/2000/svg"
+namespace xlink = "http://www.w3.org/1999/xlink"
+
+#  DocBook V5.0
+
+# See http://docbook.org/ns/docbook
+start =
+  (db.set
+   | db.book
+   | db.divisions
+   | db.components
+   | db.navigation.components
+   | db.section
+   | db.para)
+  | (db.abstract
+     | db.mediaobject.content
+     | db.audiodata
+     | db.imagedata
+     | db.textdata
+     | db.videodata
+     | db.caption
+     | db.publishing.blocks
+     | db.formal.blocks
+     | db.informal.blocks
+     | db.formalpara
+     | db.inlinemediaobject
+     | db.list.blocks
+     | db.legalnotice
+     | db.verbatim.blocks
+     | db.graphic.blocks
+     | db.personblurb
+     | db.revhistory
+     | db.simpara
+     | db.step
+     | db.stepalternatives)
+  | (db.partintro | db.simplesect)
+  | db.annotation
+  | (db.sect1 | db.sect2 | db.sect3 | db.sect4 | db.sect5)
+  | (db.refentry | db.refsection | db.refsynopsisdiv)
+  | (db.refsect1 | db.refsect2 | db.refsect3)
+  | (db.glossary | db.glossdiv | db.glosslist)
+  | (db.bibliodiv | db.bibliolist)
+  | (db.setindex | db.index | db.indexdiv)
+  | (db.toc | db.tocdiv)
+  | (db.task | db.taskprerequisites | db.taskrelated | db.tasksummary)
+  | (db.calloutlist
+     | db.programlistingco
+     | db.screenco
+     | db.imageobjectco)
+  | (db.productionset | db.constraintdef)
+  | (db.msg
+     | db.msgexplan
+     | db.msgmain
+     | db.msgrel
+     | db.msgset
+     | db.msgsub)
+  | (db.qandadiv | db.qandaentry | db.qandaset)
+  | (db.equation | db.informalequation)
+  | db.cmdsynopsis
+  | (db.synopsis.blocks | db.funcsynopsisinfo | db.classsynopsisinfo)
+  | db.admonition.blocks
+  | db.topic
+div {
+  db._any.attribute =
+    
+    ## Any attribute, including any attribute in any namespace.
+    attribute * { text }
+  db._any =
+    
+    ## Any element from almost any namespace
+    element * - (db:* | html:*) {
+      (db._any.attribute | text | db._any)*
+    }
+}
+db.arch.attribute =
+  
+  ## Designates the computer or chip architecture to which the element applies
+  attribute arch { text }
+db.audience.attribute =
+  
+  ## Designates the intended audience to which the element applies, for example, system administrators, programmers, or new users.
+  attribute audience { text }
+db.condition.attribute =
+  
+  ## provides a standard place for application-specific effectivity
+  attribute condition { text }
+db.conformance.attribute =
+  
+  ## Indicates standards conformance characteristics of the element
+  attribute conformance { text }
+db.os.attribute =
+  
+  ## Indicates the operating system to which the element is applicable
+  attribute os { text }
+db.revision.attribute =
+  
+  ## Indicates the editorial revision to which the element belongs
+  attribute revision { text }
+db.security.attribute =
+  
+  ## Indicates something about the security level associated with the element to which it applies
+  attribute security { text }
+db.userlevel.attribute =
+  
+  ## Indicates the level of user experience for which the element applies
+  attribute userlevel { text }
+db.vendor.attribute =
+  
+  ## Indicates the computer vendor to which the element applies.
+  attribute vendor { text }
+db.wordsize.attribute =
+  
+  ## Indicates the word size (width in bits) of the computer architecture to which the element applies
+  attribute wordsize { text }
+db.effectivity.attributes =
+  db.arch.attribute?
+  & db.audience.attribute?
+  & db.condition.attribute?
+  & db.conformance.attribute?
+  & db.os.attribute?
+  & db.revision.attribute?
+  & db.security.attribute?
+  & db.userlevel.attribute?
+  & db.vendor.attribute?
+  & db.wordsize.attribute?
+db.endterm.attribute =
+  
+  ## Points to the element whose content is to be used as the text of the link
+  attribute endterm { xsd:IDREF }
+db.linkend.attribute =
+  
+  ## Points to an internal link target by identifying the value of its xml:id attribute
+  attribute linkend { xsd:IDREF }
+db.linkends.attribute =
+  
+  ## Points to one or more internal link targets by identifying the value of their xml:id attributes
+  attribute linkends { xsd:IDREFS }
+db.xlink.href.attribute =
+  
+  ## Identifies a link target with a URI
+  attribute xlink:href { xsd:anyURI }
+db.xlink.type.attribute =
+  
+  ## Identifies the XLink link type
+  attribute xlink:type {
+    
+    ## An XLink simple link
+    "simple"
+  }
+db.xlink.role.attribute =
+  
+  ## Identifies the XLink role of the link
+  attribute xlink:role { xsd:anyURI }
+db.xlink.arcrole.attribute =
+  
+  ## Identifies the XLink arcrole of the link
+  attribute xlink:arcrole { xsd:anyURI }
+db.xlink.title.attribute =
+  
+  ## Identifies the XLink title of the link
+  attribute xlink:title { text }
+db.xlink.show.enumeration =
+  
+  ## An application traversing to the ending resource should load it in a new window, frame, pane, or other relevant presentation context.
+  "new"
+  | 
+    ## An application traversing to the ending resource should load the resource in the same window, frame, pane, or other relevant presentation context in which the starting resource was loaded.
+    "replace"
+  | 
+    ## An application traversing to the ending resource should load its presentation in place of the presentation of the starting resource.
+    "embed"
+  | 
+    ## The behavior of an application traversing to the ending resource is unconstrained by XLink. The application should look for other markup present in the link to determine the appropriate behavior.
+    "other"
+  | 
+    ## The behavior of an application traversing to the ending resource is unconstrained by this specification. No other markup is present to help the application determine the appropriate behavior.
+    "none"
+db.xlink.show.attribute =
+  
+  ## Identifies the XLink show behavior of the link
+  attribute xlink:show { db.xlink.show.enumeration }
+db.xlink.actuate.enumeration =
+  
+  ## An application should traverse to the ending resource immediately on loading the starting resource.
+  "onLoad"
+  | 
+    ## An application should traverse from the starting resource to the ending resource only on a post-loading event triggered for the purpose of traversal.
+    "onRequest"
+  | 
+    ## The behavior of an application traversing to the ending resource is unconstrained by this specification. The application should look for other markup present in the link to determine the appropriate behavior.
+    "other"
+  | 
+    ## The behavior of an application traversing to the ending resource is unconstrained by this specification. No other markup is present to help the application determine the appropriate behavior.
+    "none"
+db.xlink.actuate.attribute =
+  
+  ## Identifies the XLink actuate behavior of the link
+  attribute xlink:actuate { db.xlink.actuate.enumeration }
+db.href.attributes =
+  db.xlink.href.attribute
+  & db.xlink.type.attribute?
+  & db.xlink.role.attribute?
+  & db.xlink.arcrole.attribute?
+  & db.xlink.title.attribute?
+  & db.xlink.show.attribute?
+  & db.xlink.actuate.attribute?
+db.xml.id.attribute =
+  
+  ## Identifies the unique ID value of the element
+  attribute xml:id { xsd:ID }
+db.version.attribute =
+  
+  ## Specifies the DocBook version of the element and its descendants
+  attribute version { text }
+db.xml.lang.attribute =
+  
+  ## Specifies the natural language of the element and its descendants
+  attribute xml:lang { text }
+db.xml.base.attribute =
+  
+  ## Specifies the base URI of the element and its descendants
+  attribute xml:base { xsd:anyURI }
+db.remap.attribute =
+  
+  ## Provides the name or similar semantic identifier assigned to the content in some previous markup scheme
+  attribute remap { text }
+db.xreflabel.attribute =
+  
+  ## Provides the text that is to be generated for a cross reference to the element
+  attribute xreflabel { text }
+db.xrefstyle.attribute =
+  
+  ## Specifies a keyword or keywords identifying additional style information
+  attribute xrefstyle { text }
+db.revisionflag.enumeration =
+  
+  ## The element has been changed.
+  "changed"
+  | 
+    ## The element is new (has been added to the document).
+    "added"
+  | 
+    ## The element has been deleted.
+    "deleted"
+  | 
+    ## Explicitly turns off revision markup for this element.
+    "off"
+db.revisionflag.attribute =
+  
+  ## Identifies the revision status of the element
+  attribute revisionflag { db.revisionflag.enumeration }
+db.dir.enumeration =
+  
+  ## Left-to-right text
+  "ltr"
+  | 
+    ## Right-to-left text
+    "rtl"
+  | 
+    ## Left-to-right override
+    "lro"
+  | 
+    ## Right-to-left override
+    "rlo"
+db.dir.attribute =
+  
+  ## Identifies the direction of text in an element
+  attribute dir { db.dir.enumeration }
+db.common.base.attributes =
+  db.version.attribute?
+  & db.xml.lang.attribute?
+  & db.xml.base.attribute?
+  & db.remap.attribute?
+  & db.xreflabel.attribute?
+  & db.revisionflag.attribute?
+  & db.dir.attribute?
+  & db.effectivity.attributes
+db.common.attributes =
+  db.xml.id.attribute?
+  & db.common.base.attributes
+  & db.annotations.attribute?
+db.common.idreq.attributes =
+  db.xml.id.attribute
+  & db.common.base.attributes
+  & db.annotations.attribute?
+db.common.linking.attributes =
+  (db.linkend.attribute | db.href.attributes)?
+db.common.req.linking.attributes =
+  db.linkend.attribute | db.href.attributes
+db.common.data.attributes =
+  
+  ## Specifies the format of the data
+  attribute format { text }?,
+  (
+   ## Indentifies the location of the data by URI
+   attribute fileref { xsd:anyURI }
+   | 
+     ## Identifies the location of the data by external identifier (entity name)
+     attribute entityref { xsd:ENTITY })
+db.verbatim.continuation.enumeration =
+  
+  ## Line numbering continues from the immediately preceding element with the same name.
+  "continues"
+  | 
+    ## Line numbering restarts (begins at 1, usually).
+    "restarts"
+db.verbatim.continuation.attribute =
+  
+  ## Determines whether line numbering continues from the previous element or restarts.
+  attribute continuation { db.verbatim.continuation.enumeration }
+db.verbatim.linenumbering.enumeration =
+  
+  ## Lines are numbered.
+  "numbered"
+  | 
+    ## Lines are not numbered.
+    "unnumbered"
+db.verbatim.linenumbering.attribute =
+  
+  ## Determines whether lines are numbered.
+  attribute linenumbering { db.verbatim.linenumbering.enumeration }
+db.verbatim.startinglinenumber.attribute =
+  
+  ## Specifies the initial line number.
+  attribute startinglinenumber { xsd:integer }
+db.verbatim.language.attribute =
+  
+  ## Identifies the language (i.e. programming language) of the verbatim content.
+  attribute language { text }
+db.verbatim.xml.space.attribute =
+  
+  ## Can be used to indicate explicitly that whitespace in the verbatim environment is preserved. Whitespace must always be preserved in verbatim environments whether this attribute is specified or not.
+  attribute xml:space {
+    
+    ## Whitespace must be preserved.
+    "preserve"
+  }
+db.verbatim.common.attributes =
+  db.verbatim.continuation.attribute?
+  & db.verbatim.linenumbering.attribute?
+  & db.verbatim.startinglinenumber.attribute?
+  & db.verbatim.xml.space.attribute?
+db.verbatim.attributes =
+  db.verbatim.common.attributes & db.verbatim.language.attribute?
+db.label.attribute =
+  
+  ## Specifies an identifying string for presentation purposes
+  attribute label { text }
+db.width.characters.attribute =
+  
+  ## Specifies the width (in characters) of the element
+  attribute width { xsd:nonNegativeInteger }
+db.spacing.enumeration =
+  
+  ## The spacing should be "compact".
+  "compact"
+  | 
+    ## The spacing should be "normal".
+    "normal"
+db.spacing.attribute =
+  
+  ## Specifies (a hint about) the spacing of the content
+  attribute spacing { db.spacing.enumeration }
+db.pgwide.enumeration =
+  
+  ## The element should be rendered in the current text flow (with the flow column width).
+  "0"
+  | 
+    ## The element should be rendered across the full text page.
+    "1"
+db.pgwide.attribute =
+  
+  ## Indicates if the element is rendered across the column or the page
+  attribute pgwide { db.pgwide.enumeration }
+db.language.attribute =
+  
+  ## Identifies the language (i.e. programming language) of the content.
+  attribute language { text }
+db.performance.enumeration =
+  
+  ## The content describes an optional step or steps.
+  "optional"
+  | 
+    ## The content describes a required step or steps.
+    "required"
+db.performance.attribute =
+  
+  ## Specifies if the content is required or optional.
+  attribute performance { db.performance.enumeration }
+db.floatstyle.attribute =
+  
+  ## Specifies style information to be used when rendering the float
+  attribute floatstyle { text }
+db.width.attribute =
+  
+  ## Specifies the width of the element
+  attribute width { text }
+db.depth.attribute =
+  
+  ## Specifies the depth of the element
+  attribute depth { text }
+db.contentwidth.attribute =
+  
+  ## Specifies the width of the content rectangle
+  attribute contentwidth { text }
+db.contentdepth.attribute =
+  
+  ## Specifies the depth of the content rectangle
+  attribute contentdepth { text }
+db.scalefit.enumeration =
+  
+  ## False (do not scale-to-fit; anamorphic scaling may occur)
+  "0"
+  | 
+    ## True (scale-to-fit; anamorphic scaling is forbidden)
+    "1"
+db.scale.attribute =
+  
+  ## Specifies the scaling factor
+  attribute scale { xsd:positiveInteger }
+db.halign.enumeration =
+  
+  ## Centered horizontally
+  "center"
+  | 
+    ## Aligned horizontally on the specified character
+    "char"
+  | 
+    ## Fully justified (left and right margins or edges)
+    "justify"
+  | 
+    ## Left aligned
+    "left"
+  | 
+    ## Right aligned
+    "right"
+db.valign.enumeration =
+  
+  ## Aligned on the bottom of the region
+  "bottom"
+  | 
+    ## Centered vertically
+    "middle"
+  | 
+    ## Aligned on the top of the region
+    "top"
+db.biblio.class.enumeration =
+  
+  ## A digital object identifier.
+  "doi"
+  | 
+    ## An international standard book number.
+    "isbn"
+  | 
+    ## An international standard technical report number (ISO 10444).
+    "isrn"
+  | 
+    ## An international standard serial number.
+    "issn"
+  | 
+    ## An international standard text code.
+    "istc"
+  | 
+    ## A Library of Congress reference number.
+    "libraryofcongress"
+  | 
+    ## A publication number (an internal number or possibly organizational standard).
+    "pubsnumber"
+  | 
+    ## A Uniform Resource Identifier
+    "uri"
+db.biblio.class-enum.attribute =
+  
+  ## Identifies the kind of bibliographic identifier
+  attribute class { db.biblio.class.enumeration }?
+db.biblio.class-other.attribute =
+  
+  ## Identifies the nature of the non-standard bibliographic identifier
+  attribute otherclass { xsd:NMTOKEN }
+db.biblio.class-other.attributes =
+  
+  ## Identifies the kind of bibliographic identifier
+  attribute class {
+    
+    ## Indicates that the identifier is some 'other' kind.
+    "other"
+  }
+  & db.biblio.class-other.attribute
+db.biblio.class.attribute =
+  db.biblio.class-enum.attribute | db.biblio.class-other.attributes
+db.ubiq.inlines =
+  (db.inlinemediaobject
+   | db.remark
+   | db.link.inlines
+   | db.alt
+   | db.trademark
+   | # below, effectively the publishing inlines (as of 5.0)
+     db.abbrev
+   | db.acronym
+   | db.date
+   | db._emphasis
+   | db.footnote
+   | db.footnoteref
+   | db._foreignphrase
+   | db._phrase
+   | db._quote
+   | db.subscript
+   | db.superscript
+   | db.wordasword)
+  | db.annotation
+  | (db._firstterm | db._glossterm)
+  | db.indexterm
+  | db.coref
+db._text = (text | db.ubiq.inlines | db._phrase | db.replaceable)*
+db._title = db.title? & db.titleabbrev? & db.subtitle?
+db._title.req = db.title & db.titleabbrev? & db.subtitle?
+db._title.only = db.title? & db.titleabbrev?
+db._title.onlyreq = db.title & db.titleabbrev?
+db._info = (db._title, db.titleforbidden.info?) | db.info?
+db._info.title.req =
+  (db._title.req, db.titleforbidden.info?) | db.titlereq.info
+db._info.title.only =
+  (db._title.only, db.titleforbidden.info?) | db.titleonly.info
+db._info.title.onlyreq =
+  (db._title.onlyreq, db.titleforbidden.info?) | db.titleonlyreq.info
+db._info.title.forbidden = db.titleforbidden.info?
+db.all.inlines =
+  text
+  | db.ubiq.inlines
+  | db.general.inlines
+  | db.domain.inlines
+  | db.extension.inlines
+db.general.inlines =
+  db.publishing.inlines
+  | db.product.inlines
+  | db.bibliography.inlines
+  | db.graphic.inlines
+  | db.indexing.inlines
+  | db.link.inlines
+db.domain.inlines =
+  db.technical.inlines
+  | db.math.inlines
+  | db.markup.inlines
+  | db.gui.inlines
+  | db.keyboard.inlines
+  | db.os.inlines
+  | db.programming.inlines
+  | db.error.inlines
+db.technical.inlines =
+  (db.replaceable | db.package | db.parameter)
+  | db.termdef
+  | db.nonterminal
+  | (db.systemitem | db.option | db.optional | db.property)
+db.product.inlines =
+  db.trademark
+  | (db.productnumber
+     | db.productname
+     | db.database
+     | db.application
+     | db.hardware)
+db.bibliography.inlines =
+  db.citation
+  | db.citerefentry
+  | db.citetitle
+  | db.citebiblioid
+  | db.author
+  | db.person
+  | db.personname
+  | db.org
+  | db.orgname
+  | db.editor
+  | db.jobtitle
+db.publishing.inlines =
+  (db.abbrev
+   | db.acronym
+   | db.date
+   | db.emphasis
+   | db.footnote
+   | db.footnoteref
+   | db.foreignphrase
+   | db.phrase
+   | db.quote
+   | db.subscript
+   | db.superscript
+   | db.wordasword)
+  | db.glossary.inlines
+  | db.coref
+db.graphic.inlines = db.inlinemediaobject
+db.indexing.inlines = notAllowed | db.indexterm
+db.link.inlines =
+  (db.xref | db.link | db.olink | db.anchor) | db.biblioref
+db.extension.inlines = notAllowed
+db.nopara.blocks =
+  (db.list.blocks
+   | db.formal.blocks
+   | db.informal.blocks
+   | db.publishing.blocks
+   | db.graphic.blocks
+   | db.technical.blocks
+   | db.verbatim.blocks
+   | db.bridgehead
+   | db.remark
+   | db.revhistory)
+  | db.indexterm
+  | db.synopsis.blocks
+  | db.admonition.blocks
+db.para.blocks = db.anchor | db.para | db.formalpara | db.simpara
+db.all.blocks =
+  (db.nopara.blocks | db.para.blocks | db.extension.blocks)
+  | db.annotation
+db.formal.blocks = (db.example | db.figure | db.table) | db.equation
+db.informal.blocks =
+  (db.informalexample | db.informalfigure | db.informaltable)
+  | db.informalequation
+db.publishing.blocks =
+  db.sidebar | db.blockquote | db.address | db.epigraph
+db.graphic.blocks = db.mediaobject | db.screenshot
+db.technical.blocks =
+  db.procedure
+  | db.task
+  | (db.productionset | db.constraintdef)
+  | db.msgset
+db.list.blocks =
+  (db.itemizedlist
+   | db.orderedlist
+   | db.procedure
+   | db.simplelist
+   | db.variablelist
+   | db.segmentedlist)
+  | db.glosslist
+  | db.bibliolist
+  | db.calloutlist
+  | db.qandaset
+db.verbatim.blocks =
+  (db.screen | db.literallayout)
+  | (db.programlistingco | db.screenco)
+  | (db.programlisting | db.synopsis)
+db.extension.blocks = notAllowed
+db.info.extension = db._any
+db.info.elements =
+  (db.abstract
+   | db.address
+   | db.artpagenums
+   | db.author
+   | db.authorgroup
+   | db.authorinitials
+   | db.bibliocoverage
+   | db.biblioid
+   | db.bibliosource
+   | db.collab
+   | db.confgroup
+   | db.contractsponsor
+   | db.contractnum
+   | db.copyright
+   | db.cover
+   | db.date
+   | db.edition
+   | db.editor
+   | db.issuenum
+   | db.keywordset
+   | db.legalnotice
+   | db.mediaobject
+   | db.org
+   | db.orgname
+   | db.othercredit
+   | db.pagenums
+   | db.printhistory
+   | db.pubdate
+   | db.publisher
+   | db.publishername
+   | db.releaseinfo
+   | db.revhistory
+   | db.seriesvolnums
+   | db.subjectset
+   | db.volumenum
+   | db.info.extension)
+  | db.annotation
+  | db.extendedlink
+  | (db.bibliomisc | db.bibliomset | db.bibliorelation | db.biblioset)
+  | db.itermset
+  | (db.productname | db.productnumber)
+db.bibliographic.elements =
+  db.info.elements
+  | db.publishing.inlines
+  | db.citerefentry
+  | db.citetitle
+  | db.citebiblioid
+  | db.person
+  | db.personblurb
+  | db.personname
+  | db.subtitle
+  | db.title
+  | db.titleabbrev
+div {
+  db.title.role.attribute = attribute role { text }
+  db.title.attlist =
+    db.title.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.title =
+    
+    ## The text of the title of a section of a document or of a formal block-level element
+    element title { db.title.attlist, db.all.inlines* }
+}
+div {
+  db.titleabbrev.role.attribute = attribute role { text }
+  db.titleabbrev.attlist =
+    db.titleabbrev.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.titleabbrev =
+    
+    ## The abbreviation of a title
+    element titleabbrev { db.titleabbrev.attlist, db.all.inlines* }
+}
+div {
+  db.subtitle.role.attribute = attribute role { text }
+  db.subtitle.attlist =
+    db.subtitle.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.subtitle =
+    
+    ## The subtitle of a document
+    element subtitle { db.subtitle.attlist, db.all.inlines* }
+}
+div {
+  db.info.role.attribute = attribute role { text }
+  db.info.attlist = db.info.role.attribute? & db.common.attributes
+  db.info =
+    
+    ## A wrapper for information about a component or other block
+    element info { db.info.attlist, (db._title & db.info.elements*) }
+}
+div {
+  db.titlereq.info.role.attribute = attribute role { text }
+  db.titlereq.info.attlist =
+    db.titlereq.info.role.attribute? & db.common.attributes
+  db.titlereq.info =
+    
+    ## A wrapper for information about a component or other block with a required title
+    element info {
+      db.titlereq.info.attlist, (db._title.req & db.info.elements*)
+    }
+}
+div {
+  db.titleonly.info.role.attribute = attribute role { text }
+  db.titleonly.info.attlist =
+    db.titleonly.info.role.attribute? & db.common.attributes
+  db.titleonly.info =
+    
+    ## A wrapper for information about a component or other block with only a title
+    element info {
+      db.titleonly.info.attlist, (db._title.only & db.info.elements*)
+    }
+}
+div {
+  db.titleonlyreq.info.role.attribute = attribute role { text }
+  db.titleonlyreq.info.attlist =
+    db.titleonlyreq.info.role.attribute? & db.common.attributes
+  db.titleonlyreq.info =
+    
+    ## A wrapper for information about a component or other block with only a required title
+    element info {
+      db.titleonlyreq.info.attlist,
+      (db._title.onlyreq & db.info.elements*)
+    }
+}
+div {
+  db.titleforbidden.info.role.attribute = attribute role { text }
+  db.titleforbidden.info.attlist =
+    db.titleforbidden.info.role.attribute? & db.common.attributes
+  db.titleforbidden.info =
+    
+    ## A wrapper for information about a component or other block without a title
+    element info { db.titleforbidden.info.attlist, db.info.elements* }
+}
+div {
+  db.subjectset.role.attribute = attribute role { text }
+  db.subjectset.scheme.attribute =
+    
+    ## Identifies the controlled vocabulary used by this set's terms
+    attribute scheme { xsd:NMTOKEN }
+  db.subjectset.attlist =
+    db.subjectset.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.subjectset.scheme.attribute?
+  db.subjectset =
+    
+    ## A set of terms describing the subject matter of a document
+    element subjectset { db.subjectset.attlist, db.subject+ }
+}
+div {
+  db.subject.role.attribute = attribute role { text }
+  db.subject.weight.attribute =
+    
+    ## Specifies a ranking for this subject relative to other subjects in the same set
+    attribute weight { text }
+  db.subject.attlist =
+    db.subject.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.subject.weight.attribute?
+  db.subject =
+    
+    ## One of a group of terms describing the subject matter of a document
+    element subject { db.subject.attlist, db.subjectterm+ }
+}
+div {
+  db.subjectterm.role.attribute = attribute role { text }
+  db.subjectterm.attlist =
+    db.subjectterm.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.subjectterm =
+    
+    ## A term in a group of terms describing the subject matter of a document
+    element subjectterm { db.subjectterm.attlist, text }
+}
+div {
+  db.keywordset.role.attribute = attribute role { text }
+  db.keywordset.attlist =
+    db.keywordset.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.keywordset =
+    
+    ## A set of keywords describing the content of a document
+    element keywordset { db.keywordset.attlist, db.keyword+ }
+}
+div {
+  db.keyword.role.attribute = attribute role { text }
+  db.keyword.attlist =
+    db.keyword.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.keyword =
+    
+    ## One of a set of keywords describing the content of a document
+    element keyword { db.keyword.attlist, text }
+}
+db.table.choice = notAllowed | db.cals.table | db.html.table
+db.informaltable.choice =
+  notAllowed | db.cals.informaltable | db.html.informaltable
+db.table = db.table.choice
+db.informaltable = db.informaltable.choice
+div {
+  db.procedure.role.attribute = attribute role { text }
+  db.procedure.attlist =
+    db.procedure.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.procedure.info = db._info.title.only
+  db.procedure =
+    
+    ## A list of operations to be performed in a well-defined sequence
+    element procedure {
+      db.procedure.attlist, db.procedure.info, db.all.blocks*, db.step+
+    }
+}
+div {
+  db.step.role.attribute = attribute role { text }
+  db.step.attlist =
+    db.step.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.performance.attribute?
+  db.step.info = db._info.title.only
+  # 
+  # This content model is blocks*, step|stepalternatives, blocks* but
+  # expressed this way it avoids UPA issues in XSD and DTD versions
+  db.step =
+    
+    ## A unit of action in a procedure
+    element step {
+      db.step.attlist,
+      db.step.info,
+      ((db.all.blocks+,
+        ((db.substeps | db.stepalternatives), db.all.blocks*)?)
+       | ((db.substeps | db.stepalternatives), db.all.blocks*))
+    }
+}
+div {
+  db.stepalternatives.role.attribute = attribute role { text }
+  db.stepalternatives.attlist =
+    db.stepalternatives.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.performance.attribute?
+  db.stepalternatives.info = db._info.title.forbidden
+  db.stepalternatives =
+    
+    ## Alternative steps in a procedure
+    element stepalternatives {
+      db.stepalternatives.attlist, db.stepalternatives.info, db.step+
+    }
+}
+div {
+  db.substeps.role.attribute = attribute role { text }
+  db.substeps.attlist =
+    db.substeps.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.performance.attribute?
+  db.substeps =
+    
+    ## A wrapper for steps that occur within steps in a procedure
+    element substeps { db.substeps.attlist, db.step+ }
+}
+div {
+  db.sidebar.floatstyle.attribute = db.floatstyle.attribute
+  db.sidebar.role.attribute = attribute role { text }
+  db.sidebar.attlist =
+    db.sidebar.role.attribute?
+    & db.sidebar.floatstyle.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.sidebar.info = db._info
+  db.sidebar =
+    
+    ## A portion of a document that is isolated from the main narrative flow
+    element sidebar {
+      db.sidebar.attlist, db.sidebar.info, db.all.blocks+
+    }
+}
+div {
+  db.abstract.role.attribute = attribute role { text }
+  db.abstract.attlist =
+    db.abstract.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.abstract.info = db._info.title.only
+  db.abstract =
+    
+    ## A summary
+    element abstract {
+      db.abstract.attlist, db.abstract.info, db.para.blocks+
+    }
+}
+div {
+  db.personblurb.role.attribute = attribute role { text }
+  db.personblurb.attlist =
+    db.personblurb.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.personblurb.info = db._info.title.only
+  db.personblurb =
+    
+    ## A short description or note about a person
+    element personblurb {
+      db.personblurb.attlist, db.personblurb.info, db.para.blocks+
+    }
+}
+div {
+  db.blockquote.role.attribute = attribute role { text }
+  db.blockquote.attlist =
+    db.blockquote.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.blockquote.info = db._info.title.only
+  db.blockquote =
+    
+    ## A quotation set off from the main text
+    element blockquote {
+      db.blockquote.attlist,
+      db.blockquote.info,
+      db.attribution?,
+      db.all.blocks+
+    }
+}
+div {
+  db.attribution.role.attribute = attribute role { text }
+  db.attribution.attlist =
+    db.attribution.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.attribution =
+    
+    ## The source of a block quote or epigraph
+    element attribution {
+      db.attribution.attlist,
+      (db._text
+       | db.person
+       | db.personname
+       | db.citetitle
+       | db.citation)*
+    }
+}
+div {
+  db.bridgehead.renderas.enumeration =
+    
+    ## Render as a first-level section
+    "sect1"
+    | 
+      ## Render as a second-level section
+      "sect2"
+    | 
+      ## Render as a third-level section
+      "sect3"
+    | 
+      ## Render as a fourth-level section
+      "sect4"
+    | 
+      ## Render as a fifth-level section
+      "sect5"
+  db.bridgehead.renderas-enum.attribute =
+    
+    ## Indicates how the bridge head should be rendered
+    attribute renderas { db.bridgehead.renderas.enumeration }?
+  db.bridgehead.renderas-other.attribute =
+    
+    ## Identifies the nature of the non-standard rendering
+    attribute otherrenderas { xsd:NMTOKEN }
+  db.bridgehead.renderas-other.attributes =
+    
+    ## Indicates how the bridge head should be rendered
+    attribute renderas {
+      
+      ## Identifies a non-standard rendering
+      "other"
+    }
+    & db.bridgehead.renderas-other.attribute
+  db.bridgehead.renderas.attribute =
+    db.bridgehead.renderas-enum.attribute
+    | db.bridgehead.renderas-other.attributes
+  db.bridgehead.role.attribute = attribute role { text }
+  db.bridgehead.attlist =
+    db.bridgehead.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.bridgehead.renderas.attribute?
+  db.bridgehead =
+    
+    ## A free-floating heading
+    element bridgehead { db.bridgehead.attlist, db.all.inlines* }
+}
+div {
+  db.remark.role.attribute = attribute role { text }
+  db.remark.attlist =
+    db.remark.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.remark =
+    
+    ## A remark (or comment) intended for presentation in a draft manuscript
+    element remark { db.remark.attlist, db.all.inlines* }
+}
+div {
+  db.epigraph.role.attribute = attribute role { text }
+  db.epigraph.attlist =
+    db.epigraph.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.epigraph.info = db._info.title.forbidden
+  db.epigraph =
+    
+    ## A short inscription at the beginning of a document or component
+    element epigraph {
+      db.epigraph.attlist,
+      db.epigraph.info,
+      db.attribution?,
+      (db.para.blocks | db.literallayout)+
+    }
+}
+div {
+  db.footnote.role.attribute = attribute role { text }
+  db.footnote.label.attribute =
+    
+    ## Identifies the desired footnote mark
+    attribute label { xsd:NMTOKEN }
+  db.footnote.attlist =
+    db.footnote.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.footnote.label.attribute?
+  db.footnote =
+    
+    ## A footnote
+    element footnote { db.footnote.attlist, db.all.blocks+ }
+}
+div {
+  db.formalpara.role.attribute = attribute role { text }
+  db.formalpara.attlist =
+    db.formalpara.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.formalpara.info = db._info.title.onlyreq
+  db.formalpara =
+    
+    ## A paragraph with a title
+    element formalpara {
+      db.formalpara.attlist,
+      db.formalpara.info,
+      db.indexing.inlines*,
+      db.para
+    }
+}
+div {
+  db.para.role.attribute = attribute role { text }
+  db.para.attlist =
+    db.para.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.para.info = db._info.title.forbidden
+  db.para =
+    
+    ## A paragraph
+    element para {
+      db.para.attlist,
+      db.para.info,
+      (db.all.inlines | db.nopara.blocks)*
+    }
+}
+div {
+  db.simpara.role.attribute = attribute role { text }
+  db.simpara.attlist =
+    db.simpara.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.simpara.info = db._info.title.forbidden
+  db.simpara =
+    
+    ## A paragraph that contains only text and inline markup, no block elements
+    element simpara {
+      db.simpara.attlist, db.simpara.info, db.all.inlines*
+    }
+}
+div {
+  db.itemizedlist.role.attribute = attribute role { text }
+  db.itemizedlist.mark.attribute =
+    
+    ## Identifies the type of mark to be used on items in this list
+    attribute mark { xsd:NMTOKEN }
+  db.itemizedlist.attlist =
+    db.itemizedlist.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.spacing.attribute?
+    & db.itemizedlist.mark.attribute?
+  db.itemizedlist.info = db._info.title.only
+  db.itemizedlist =
+    
+    ## A list in which each entry is marked with a bullet or other dingbat
+    element itemizedlist {
+      db.itemizedlist.attlist,
+      db.itemizedlist.info,
+      db.all.blocks*,
+      db.listitem+
+    }
+}
+div {
+  db.orderedlist.role.attribute = attribute role { text }
+  db.orderedlist.continuation.enumeration =
+    
+    ## Specifies that numbering should begin where the preceding list left off
+    "continues"
+    | 
+      ## Specifies that numbering should begin again at 1
+      "restarts"
+  db.orderedlist.continuation.attribute =
+    
+    ## Indicates how list numbering should begin relative to the immediately preceding list
+    attribute continuation { db.orderedlist.continuation.enumeration }
+  db.orderedlist.startingnumber.attribute =
+    
+    ## Specifies the initial line number.
+    attribute startingnumber { xsd:integer }
+  db.orderedlist.inheritnum.enumeration =
+    
+    ## Specifies that numbering should ignore list nesting
+    "ignore"
+    | 
+      ## Specifies that numbering should inherit from outer-level lists
+      "inherit"
+  db.orderedlist.inheritnum.attribute =
+    
+    ## Indicates whether or not item numbering should be influenced by list nesting
+    attribute inheritnum { db.orderedlist.inheritnum.enumeration }
+  db.orderedlist.numeration.enumeration =
+    
+    ## Specifies Arabic numeration (1, 2, 3, â€¦)
+    "arabic"
+    | 
+      ## Specifies upper-case alphabetic numeration (A, B, C, â€¦)
+      "upperalpha"
+    | 
+      ## Specifies lower-case alphabetic numeration (a, b, c, â€¦)
+      "loweralpha"
+    | 
+      ## Specifies upper-case Roman numeration (I, II, III, â€¦)
+      "upperroman"
+    | 
+      ## Specifies lower-case Roman numeration (i, ii, iii â€¦)
+      "lowerroman"
+  db.orderedlist.numeration.attribute =
+    
+    ## Indicates the desired numeration
+    attribute numeration { db.orderedlist.numeration.enumeration }
+  db.orderedlist.attlist =
+    db.orderedlist.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.spacing.attribute?
+    & (db.orderedlist.continuation.attribute
+       | db.orderedlist.startingnumber.attribute)?
+    & db.orderedlist.inheritnum.attribute?
+    & db.orderedlist.numeration.attribute?
+  db.orderedlist.info = db._info.title.only
+  db.orderedlist =
+    
+    ## A list in which each entry is marked with a sequentially incremented label
+    element orderedlist {
+      db.orderedlist.attlist,
+      db.orderedlist.info,
+      db.all.blocks*,
+      db.listitem+
+    }
+}
+div {
+  db.listitem.role.attribute = attribute role { text }
+  db.listitem.override.attribute =
+    
+    ## Specifies the keyword for the type of mark that should be used on this
+    ##  item, instead of the mark that would be used by default
+    attribute override { xsd:NMTOKEN }
+  db.listitem.attlist =
+    db.listitem.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.listitem.override.attribute?
+  db.listitem =
+    
+    ## A wrapper for the elements of a list item
+    element listitem { db.listitem.attlist, db.all.blocks+ }
+}
+div {
+  db.segmentedlist.role.attribute = attribute role { text }
+  db.segmentedlist.attlist =
+    db.segmentedlist.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.segmentedlist.info = db._info.title.only
+  db.segmentedlist =
+    
+    ## A segmented list, a list of sets of elements
+    element segmentedlist {
+      db.segmentedlist.attlist,
+      db.segmentedlist.info,
+      db.segtitle+,
+      db.seglistitem+
+    }
+}
+div {
+  db.segtitle.role.attribute = attribute role { text }
+  db.segtitle.attlist =
+    db.segtitle.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.segtitle =
+    
+    ## The title of an element of a list item in a segmented list
+    element segtitle { db.segtitle.attlist, db.all.inlines* }
+}
+div {
+  db.seglistitem.role.attribute = attribute role { text }
+  db.seglistitem.attlist =
+    db.seglistitem.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.seglistitem =
+    
+    ## A list item in a segmented list
+    element seglistitem { db.seglistitem.attlist, db.seg+ }
+}
+div {
+  db.seg.role.attribute = attribute role { text }
+  db.seg.attlist =
+    db.seg.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.seg =
+    
+    ## An element of a list item in a segmented list
+    element seg { db.seg.attlist, db.all.inlines* }
+}
+div {
+  db.simplelist.role.attribute = attribute role { text }
+  db.simplelist.type.enumeration =
+    
+    ## A tabular presentation in row-major order.
+    "horiz"
+    | 
+      ## A tabular presentation in column-major order.
+      "vert"
+    | 
+      ## An inline presentation, usually a comma-delimited list.
+      "inline"
+  db.simplelist.type.attribute =
+    
+    ## Specifies the type of list presentation.
+    [ a:defaultValue = "vert" ]
+    attribute type { db.simplelist.type.enumeration }
+  db.simplelist.columns.attribute =
+    
+    ## Specifies the number of columns for horizontal or vertical presentation
+    attribute columns { xsd:integer }
+  db.simplelist.attlist =
+    db.simplelist.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.simplelist.type.attribute?
+    & db.simplelist.columns.attribute?
+  db.simplelist =
+    
+    ## An undecorated list of single words or short phrases
+    element simplelist { db.simplelist.attlist, db.member+ }
+}
+div {
+  db.member.role.attribute = attribute role { text }
+  db.member.attlist =
+    db.member.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.member =
+    
+    ## An element of a simple list
+    element member { db.member.attlist, db.all.inlines* }
+}
+div {
+  db.variablelist.role.attribute = attribute role { text }
+  db.variablelist.termlength.attribute =
+    
+    ## Indicates a length beyond which the presentation system may consider a term too long and select an alternate presentation for that term, item, or list
+    attribute termlength { text }
+  db.variablelist.attlist =
+    db.variablelist.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.spacing.attribute?
+    & db.variablelist.termlength.attribute?
+  db.variablelist.info = db._info.title.only
+  db.variablelist =
+    
+    ## A list in which each entry is composed of a set of one or more terms and an associated description
+    element variablelist {
+      db.variablelist.attlist,
+      db.variablelist.info,
+      db.all.blocks*,
+      db.varlistentry+
+    }
+}
+div {
+  db.varlistentry.role.attribute = attribute role { text }
+  db.varlistentry.attlist =
+    db.varlistentry.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.varlistentry =
+    
+    ## A wrapper for a set of terms and the associated description in a variable list
+    element varlistentry {
+      db.varlistentry.attlist, db.term+, db.listitem
+    }
+}
+div {
+  db.term.role.attribute = attribute role { text }
+  db.term.attlist =
+    db.term.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.term =
+    
+    ## The word or phrase being defined or described in a variable list
+    element term { db.term.attlist, db.all.inlines* }
+}
+div {
+  db.example.role.attribute = attribute role { text }
+  db.example.label.attribute = db.label.attribute
+  db.example.width.attribute = db.width.characters.attribute
+  db.example.pgwide.attribute = db.pgwide.attribute
+  db.example.floatstyle.attribute = db.floatstyle.attribute
+  db.example.attlist =
+    db.example.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.example.label.attribute?
+    & db.example.floatstyle.attribute?
+    & (db.example.width.attribute | db.example.pgwide.attribute)?
+  db.example.info = db._info.title.onlyreq
+  db.example =
+    
+    ## A formal example, with a title
+    element example {
+      db.example.attlist, db.example.info, db.all.blocks+, db.caption?
+    }
+}
+div {
+  db.informalexample.role.attribute = attribute role { text }
+  db.informalexample.width.attribute = db.width.characters.attribute
+  db.informalexample.floatstyle.attribute = db.floatstyle.attribute
+  db.informalexample.attlist =
+    db.informalexample.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.informalexample.floatstyle.attribute?
+    & db.informalexample.width.attribute?
+  db.informalexample.info = db._info.title.forbidden
+  db.informalexample =
+    
+    ## A displayed example without a title
+    element informalexample {
+      db.informalexample.attlist,
+      db.informalexample.info,
+      db.all.blocks+,
+      db.caption?
+    }
+}
+db.verbatim.inlines = (db.all.inlines | db.lineannotation) | db.co
+db.verbatim.contentmodel =
+  db._info.title.forbidden, (db.textobject | db.verbatim.inlines*)
+div {
+  db.literallayout.role.attribute = attribute role { text }
+  db.literallayout.class.enumeration =
+    
+    ## The literal layout should be formatted with a monospaced font
+    "monospaced"
+    | 
+      ## The literal layout should be formatted with the current font
+      "normal"
+  db.literallayout.class.attribute =
+    
+    ## Specifies the class of literal layout
+    attribute class { db.literallayout.class.enumeration }
+  db.literallayout.attlist =
+    db.literallayout.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.verbatim.attributes
+    & db.literallayout.class.attribute?
+  db.literallayout =
+    
+    ## A block of text in which line breaks and white space are to be reproduced faithfully
+    element literallayout {
+      db.literallayout.attlist, db.verbatim.contentmodel
+    }
+}
+div {
+  db.screen.role.attribute = attribute role { text }
+  db.screen.width.attribute = db.width.characters.attribute
+  db.screen.attlist =
+    db.screen.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.verbatim.attributes
+    & db.screen.width.attribute?
+  db.screen =
+    
+    ## Text that a user sees or might see on a computer screen
+    element screen { db.screen.attlist, db.verbatim.contentmodel }
+}
+div {
+  db.screenshot.role.attribute = attribute role { text }
+  db.screenshot.attlist =
+    db.screenshot.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.screenshot.info = db._info
+  db.screenshot =
+    
+    ## A representation of what the user sees or might see on a computer screen
+    element screenshot {
+      db.screenshot.attlist, db.screenshot.info, db.mediaobject
+    }
+}
+div {
+  db.figure.role.attribute = attribute role { text }
+  db.figure.label.attribute = db.label.attribute
+  db.figure.pgwide.attribute = db.pgwide.attribute
+  db.figure.floatstyle.attribute = db.floatstyle.attribute
+  db.figure.attlist =
+    db.figure.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.figure.label.attribute?
+    & db.figure.pgwide.attribute?
+    & db.figure.floatstyle.attribute?
+  db.figure.info = db._info.title.onlyreq
+  db.figure =
+    
+    ## A formal figure, generally an illustration, with a title
+    element figure {
+      db.figure.attlist, db.figure.info, db.all.blocks+, db.caption?
+    }
+}
+div {
+  db.informalfigure.role.attribute = attribute role { text }
+  db.informalfigure.label.attribute = db.label.attribute
+  db.informalfigure.pgwide.attribute = db.pgwide.attribute
+  db.informalfigure.floatstyle.attribute = db.floatstyle.attribute
+  db.informalfigure.attlist =
+    db.informalfigure.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.informalfigure.label.attribute?
+    & db.informalfigure.pgwide.attribute?
+    & db.informalfigure.floatstyle.attribute?
+  db.informalfigure.info = db._info.title.forbidden
+  db.informalfigure =
+    
+    ## A untitled figure
+    element informalfigure {
+      db.informalfigure.attlist,
+      db.informalfigure.info,
+      db.all.blocks+,
+      db.caption?
+    }
+}
+db.mediaobject.content =
+  (db.videoobject | db.audioobject | db.imageobject | db.textobject)
+  | db.imageobjectco
+div {
+  db.mediaobject.role.attribute = attribute role { text }
+  db.mediaobject.attlist =
+    db.mediaobject.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.mediaobject.info = db._info.title.forbidden
+  db.mediaobject =
+    
+    ## A displayed media object (video, audio, image, etc.)
+    element mediaobject {
+      db.mediaobject.attlist,
+      db.mediaobject.info,
+      db.alt?,
+      db.mediaobject.content+,
+      db.caption?
+    }
+}
+div {
+  db.inlinemediaobject.role.attribute = attribute role { text }
+  db.inlinemediaobject.attlist =
+    db.inlinemediaobject.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.inlinemediaobject.info = db._info.title.forbidden
+  db.inlinemediaobject =
+    
+    ## An inline media object (video, audio, image, and so on)
+    element inlinemediaobject {
+      db.inlinemediaobject.attlist,
+      db.inlinemediaobject.info,
+      db.alt?,
+      db.mediaobject.content+
+    }
+}
+div {
+  db.videoobject.role.attribute = attribute role { text }
+  db.videoobject.attlist =
+    db.videoobject.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.videoobject.info = db._info.title.forbidden
+  db.videoobject =
+    
+    ## A wrapper for video data and its associated meta-information
+    element videoobject {
+      db.videoobject.attlist, db.videoobject.info, db.videodata
+    }
+}
+div {
+  db.audioobject.role.attribute = attribute role { text }
+  db.audioobject.attlist =
+    db.audioobject.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.audioobject.info = db._info.title.forbidden
+  db.audioobject =
+    
+    ## A wrapper for audio data and its associated meta-information
+    element audioobject {
+      db.audioobject.attlist, db.audioobject.info, db.audiodata
+    }
+}
+db.imageobject.content =
+  db.imagedata | db.imagedata.mathml | db.imagedata.svg
+div {
+  db.imageobject.role.attribute = attribute role { text }
+  db.imageobject.attlist =
+    db.imageobject.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.imageobject.info = db._info.title.forbidden
+  db.imageobject =
+    
+    ## A wrapper for image data and its associated meta-information
+    element imageobject {
+      db.imageobject.attlist,
+      db.imageobject.info,
+      db.imageobject.content
+    }
+}
+div {
+  db.textobject.role.attribute = attribute role { text }
+  db.textobject.attlist =
+    db.textobject.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.textobject.info = db._info.title.forbidden
+  db.textobject =
+    
+    ## A wrapper for a text description of an object and its associated meta-information
+    element textobject {
+      db.textobject.attlist,
+      db.textobject.info,
+      (db.phrase | db.textdata | db.all.blocks+)
+    }
+}
+div {
+  db.videodata.role.attribute = attribute role { text }
+  db.videodata.align.enumeration = db.halign.enumeration
+  db.videodata.align.attribute =
+    
+    ## Specifies the (horizontal) alignment of the video data
+    attribute align { db.videodata.align.enumeration }
+  db.videodata.valign.enumeration = db.valign.enumeration
+  db.videodata.valign.attribute =
+    
+    ## Specifies the vertical alignment of the video data
+    attribute valign { db.videodata.valign.enumeration }
+  db.videodata.width.attribute = db.width.attribute
+  db.videodata.depth.attribute = db.depth.attribute
+  db.videodata.contentwidth.attribute = db.contentwidth.attribute
+  db.videodata.contentdepth.attribute = db.contentdepth.attribute
+  db.videodata.scalefit.enumeration = db.scalefit.enumeration
+  db.videodata.scalefit.attribute =
+    
+    ## Determines if anamorphic scaling is forbidden
+    attribute scalefit { db.videodata.scalefit.enumeration }
+  db.videodata.scale.attribute = db.scale.attribute
+  db.videodata.attlist =
+    db.videodata.role.attribute?
+    & db.common.attributes
+    & db.common.data.attributes
+    & db.videodata.align.attribute?
+    & db.videodata.valign.attribute?
+    & db.videodata.width.attribute?
+    & db.videodata.contentwidth.attribute?
+    & db.videodata.scalefit.attribute?
+    & db.videodata.scale.attribute?
+    & db.videodata.depth.attribute?
+    & db.videodata.contentdepth.attribute?
+  db.videodata.info = db._info.title.forbidden
+  db.videodata =
+    
+    ## Pointer to external video data
+    element videodata { db.videodata.attlist, db.videodata.info }
+}
+div {
+  db.audiodata.role.attribute = attribute role { text }
+  db.audiodata.attlist =
+    db.audiodata.role.attribute?
+    & db.common.attributes
+    & db.common.data.attributes
+  db.audiodata.info = db._info.title.forbidden
+  db.audiodata =
+    
+    ## Pointer to external audio data
+    element audiodata { db.audiodata.attlist, db.audiodata.info }
+}
+div {
+  db.imagedata.role.attribute = attribute role { text }
+  db.imagedata.align.enumeration = db.halign.enumeration
+  db.imagedata.align.attribute =
+    
+    ## Specifies the (horizontal) alignment of the image data
+    attribute align { db.imagedata.align.enumeration }
+  db.imagedata.valign.enumeration = db.valign.enumeration
+  db.imagedata.valign.attribute =
+    
+    ## Specifies the vertical alignment of the image data
+    attribute valign { db.imagedata.valign.enumeration }
+  db.imagedata.width.attribute = db.width.attribute
+  db.imagedata.depth.attribute = db.depth.attribute
+  db.imagedata.contentwidth.attribute = db.contentwidth.attribute
+  db.imagedata.contentdepth.attribute = db.contentdepth.attribute
+  db.imagedata.scalefit.enumeration = db.scalefit.enumeration
+  db.imagedata.scalefit.attribute =
+    
+    ## Determines if anamorphic scaling is forbidden
+    attribute scalefit { db.imagedata.scalefit.enumeration }
+  db.imagedata.scale.attribute = db.scale.attribute
+  db.imagedata.attlist =
+    db.imagedata.role.attribute?
+    & db.common.attributes
+    & db.common.data.attributes
+    & db.imagedata.align.attribute?
+    & db.imagedata.valign.attribute?
+    & db.imagedata.width.attribute?
+    & db.imagedata.contentwidth.attribute?
+    & db.imagedata.scalefit.attribute?
+    & db.imagedata.scale.attribute?
+    & db.imagedata.depth.attribute?
+    & db.imagedata.contentdepth.attribute?
+  db.imagedata.info = db._info.title.forbidden
+  db.imagedata =
+    
+    ## Pointer to external image data
+    element imagedata { db.imagedata.attlist, db.imagedata.info }
+}
+div {
+  db.textdata.role.attribute = attribute role { text }
+  db.textdata.encoding.attribute =
+    
+    ## Identifies the encoding of the text in the external file
+    attribute encoding { text }
+  db.textdata.attlist =
+    db.textdata.role.attribute?
+    & db.common.attributes
+    & db.common.data.attributes
+    & db.textdata.encoding.attribute?
+  db.textdata.info = db._info.title.forbidden
+  db.textdata =
+    
+    ## Pointer to external text data
+    element textdata { db.textdata.attlist, db.textdata.info }
+}
+div {
+  db.caption.role.attribute = attribute role { text }
+  db.caption.attlist =
+    db.caption.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.caption.info = db._info.title.forbidden
+  db.caption =
+    
+    ## A caption
+    element caption {
+      db.caption.attlist, db.caption.info, db.all.blocks+
+    }
+}
+div {
+  db.address.role.attribute = attribute role { text }
+  db.address.attlist =
+    db.address.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.verbatim.attributes
+  db.address =
+    
+    ## A real-world address, generally a postal address
+    element address {
+      db.address.attlist,
+      (db._text
+       | db.personname
+       | db.orgname
+       | db.pob
+       | db.street
+       | db.city
+       | db.state
+       | db.postcode
+       | db.country
+       | db.phone
+       | db.fax
+       | db.email
+       | db.uri
+       | db.otheraddr)*
+    }
+}
+div {
+  db.street.role.attribute = attribute role { text }
+  db.street.attlist =
+    db.street.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.street =
+    
+    ## A street address in an address
+    element street { db.street.attlist, db._text }
+}
+div {
+  db.pob.role.attribute = attribute role { text }
+  db.pob.attlist =
+    db.pob.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.pob =
+    
+    ## A post office box in an address
+    element pob { db.pob.attlist, db._text }
+}
+div {
+  db.postcode.role.attribute = attribute role { text }
+  db.postcode.attlist =
+    db.postcode.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.postcode =
+    
+    ## A postal code in an address
+    element postcode { db.postcode.attlist, db._text }
+}
+div {
+  db.city.role.attribute = attribute role { text }
+  db.city.attlist =
+    db.city.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.city =
+    
+    ## The name of a city in an address
+    element city { db.city.attlist, db._text }
+}
+div {
+  db.state.role.attribute = attribute role { text }
+  db.state.attlist =
+    db.state.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.state =
+    
+    ## A state or province in an address
+    element state { db.state.attlist, db._text }
+}
+div {
+  db.country.role.attribute = attribute role { text }
+  db.country.attlist =
+    db.country.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.country =
+    
+    ## The name of a country
+    element country { db.country.attlist, db._text }
+}
+div {
+  db.phone.role.attribute = attribute role { text }
+  db.phone.attlist =
+    db.phone.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.phone =
+    
+    ## A telephone number
+    element phone { db.phone.attlist, db._text }
+}
+div {
+  db.fax.role.attribute = attribute role { text }
+  db.fax.attlist =
+    db.fax.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.fax =
+    
+    ## A fax number
+    element fax { db.fax.attlist, db._text }
+}
+div {
+  db.otheraddr.role.attribute = attribute role { text }
+  db.otheraddr.attlist =
+    db.otheraddr.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.otheraddr =
+    
+    ## Uncategorized information in address
+    element otheraddr { db.otheraddr.attlist, db._text }
+}
+div {
+  db.affiliation.role.attribute = attribute role { text }
+  db.affiliation.attlist =
+    db.affiliation.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.affiliation =
+    
+    ## The institutional affiliation of an individual
+    element affiliation {
+      db.affiliation.attlist,
+      db.shortaffil?,
+      db.jobtitle*,
+      (db.org? | (db.orgname?, db.orgdiv*, db.address*))
+    }
+}
+div {
+  db.shortaffil.role.attribute = attribute role { text }
+  db.shortaffil.attlist =
+    db.shortaffil.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.shortaffil =
+    
+    ## A brief description of an affiliation
+    element shortaffil { db.shortaffil.attlist, db._text }
+}
+div {
+  db.jobtitle.role.attribute = attribute role { text }
+  db.jobtitle.attlist =
+    db.jobtitle.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.jobtitle =
+    
+    ## The title of an individual in an organization
+    element jobtitle { db.jobtitle.attlist, db._text }
+}
+div {
+  db.orgname.class.enumeration =
+    
+    ## A consortium
+    "consortium"
+    | 
+      ## A corporation
+      "corporation"
+    | 
+      ## An informal organization
+      "informal"
+    | 
+      ## A non-profit organization
+      "nonprofit"
+  db.orgname.class-enum.attribute =
+    
+    ## Specifies the nature of the organization
+    attribute class { db.orgname.class.enumeration }
+  db.orgname.class-other.attributes =
+    
+    ## Specifies the nature of the organization
+    attribute class {
+      
+      ## Indicates a non-standard organization class
+      "other"
+    },
+    
+    ## Identifies the non-standard nature of the organization
+    attribute otherclass { text }
+  db.orgname.class.attribute =
+    db.orgname.class-enum.attribute | db.orgname.class-other.attributes
+  db.orgname.role.attribute = attribute role { text }
+  db.orgname.attlist =
+    db.orgname.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.orgname.class.attribute?
+  db.orgname =
+    
+    ## The name of an organization
+    element orgname { db.orgname.attlist, db._text }
+}
+div {
+  db.orgdiv.role.attribute = attribute role { text }
+  db.orgdiv.attlist =
+    db.orgdiv.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.orgdiv =
+    
+    ## A division of an organization
+    element orgdiv { db.orgdiv.attlist, db.all.inlines* }
+}
+div {
+  db.artpagenums.role.attribute = attribute role { text }
+  db.artpagenums.attlist =
+    db.artpagenums.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.artpagenums =
+    
+    ## The page numbers of an article as published
+    element artpagenums { db.artpagenums.attlist, db._text }
+}
+div {
+  db.personname.role.attribute = attribute role { text }
+  db.personname.attlist =
+    db.personname.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.personname =
+    
+    ## The personal name of an individual
+    element personname {
+      db.personname.attlist,
+      (db._text
+       | (db.honorific
+          | db.firstname
+          | db.surname
+          | db.lineage
+          | db.othername)+
+       | (db.honorific
+          | db.givenname
+          | db.surname
+          | db.lineage
+          | db.othername)+)
+    }
+}
+db.person.author.contentmodel =
+  db.personname,
+  (db.personblurb
+   | db.affiliation
+   | db.email
+   | db.uri
+   | db.address
+   | db.contrib)*
+db.org.author.contentmodel =
+  db.orgname,
+  (db.orgdiv
+   | db.affiliation
+   | db.email
+   | db.uri
+   | db.address
+   | db.contrib)*
+db.credit.contentmodel =
+  db.person.author.contentmodel | db.org.author.contentmodel
+div {
+  db.author.role.attribute = attribute role { text }
+  db.author.attlist =
+    db.author.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.author =
+    
+    ## The name of an individual author
+    element author { db.author.attlist, db.credit.contentmodel }
+}
+div {
+  db.authorgroup.role.attribute = attribute role { text }
+  db.authorgroup.attlist =
+    db.authorgroup.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.authorgroup =
+    
+    ## Wrapper for author information when a document has multiple authors or collaborators
+    element authorgroup {
+      db.authorgroup.attlist, (db.author | db.editor | db.othercredit)+
+    }
+}
+div {
+  db.collab.role.attribute = attribute role { text }
+  db.collab.attlist =
+    db.collab.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.collab =
+    
+    ## Identifies a collaborator
+    element collab {
+      db.collab.attlist,
+      (db.person | db.personname | db.org | db.orgname)+,
+      db.affiliation*
+    }
+}
+div {
+  db.authorinitials.role.attribute = attribute role { text }
+  db.authorinitials.attlist =
+    db.authorinitials.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.authorinitials =
+    
+    ## The initials or other short identifier for an author
+    element authorinitials { db.authorinitials.attlist, db._text }
+}
+div {
+  db.person.role.attribute = attribute role { text }
+  db.person.attlist =
+    db.person.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.person =
+    
+    ## A person and associated metadata
+    element person {
+      db.person.attlist,
+      db.personname,
+      (db.address
+       | db.affiliation
+       | db.email
+       | db.uri
+       | db.personblurb)*
+    }
+}
+div {
+  db.org.role.attribute = attribute role { text }
+  db.org.attlist =
+    db.org.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.org =
+    
+    ## An organization and associated metadata
+    element org {
+      db.org.attlist,
+      db.orgname,
+      (db.address | db.affiliation | db.email | db.uri | db.orgdiv)*
+    }
+}
+div {
+  db.confgroup.role.attribute = attribute role { text }
+  db.confgroup.attlist =
+    db.confgroup.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.confgroup =
+    
+    ## A wrapper for document meta-information about a conference
+    element confgroup {
+      db.confgroup.attlist,
+      (db.confdates
+       | db.conftitle
+       | db.confnum
+       | db.confsponsor
+       | db.address)*
+    }
+}
+div {
+  db.confdates.role.attribute = attribute role { text }
+  db.confdates.attlist =
+    db.confdates.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.confdates =
+    
+    ## The dates of a conference for which a document was written
+    element confdates { db.confdates.attlist, db._text }
+}
+div {
+  db.conftitle.role.attribute = attribute role { text }
+  db.conftitle.attlist =
+    db.conftitle.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.conftitle =
+    
+    ## The title of a conference for which a document was written
+    element conftitle { db.conftitle.attlist, db._text }
+}
+div {
+  db.confnum.role.attribute = attribute role { text }
+  db.confnum.attlist =
+    db.confnum.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.confnum =
+    
+    ## An identifier, frequently numerical, associated with a conference for which a document was written
+    element confnum { db.confnum.attlist, db._text }
+}
+div {
+  db.confsponsor.role.attribute = attribute role { text }
+  db.confsponsor.attlist =
+    db.confsponsor.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.confsponsor =
+    
+    ## The sponsor of a conference for which a document was written
+    element confsponsor { db.confsponsor.attlist, db._text }
+}
+div {
+  db.contractnum.role.attribute = attribute role { text }
+  db.contractnum.attlist =
+    db.contractnum.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.contractnum =
+    
+    ## The contract number of a document
+    element contractnum { db.contractnum.attlist, db._text }
+}
+div {
+  db.contractsponsor.role.attribute = attribute role { text }
+  db.contractsponsor.attlist =
+    db.contractsponsor.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.contractsponsor =
+    
+    ## The sponsor of a contract
+    element contractsponsor { db.contractsponsor.attlist, db._text }
+}
+div {
+  db.copyright.role.attribute = attribute role { text }
+  db.copyright.attlist =
+    db.copyright.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.copyright =
+    
+    ## Copyright information about a document
+    element copyright { db.copyright.attlist, db.year+, db.holder* }
+}
+div {
+  db.year.role.attribute = attribute role { text }
+  db.year.attlist =
+    db.year.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.year =
+    
+    ## The year of publication of a document
+    element year { db.year.attlist, db._text }
+}
+div {
+  db.holder.role.attribute = attribute role { text }
+  db.holder.attlist =
+    db.holder.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.holder =
+    
+    ## The name of the individual or organization that holds a copyright
+    element holder { db.holder.attlist, db._text }
+}
+db.cover.contentmodel =
+  (db.para.blocks
+   | db.extension.blocks
+   | db.list.blocks
+   | db.informal.blocks
+   | db.publishing.blocks
+   | db.graphic.blocks
+   | db.technical.blocks
+   | db.verbatim.blocks
+   | db.bridgehead
+   | db.remark
+   | db.revhistory)
+  | db.synopsis.blocks
+div {
+  db.cover.role.attribute = attribute role { text }
+  db.cover.attlist =
+    db.cover.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.cover =
+    
+    ## Additional content for the cover of a publication
+    element cover { db.cover.attlist, db.cover.contentmodel+ }
+}
+db.date.contentmodel =
+  xsd:date | xsd:dateTime | xsd:gYearMonth | xsd:gYear | text
+div {
+  db.date.role.attribute = attribute role { text }
+  db.date.attlist =
+    db.date.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.date =
+    
+    ## The date of publication or revision of a document
+    element date { db.date.attlist, db.date.contentmodel }
+}
+div {
+  db.edition.role.attribute = attribute role { text }
+  db.edition.attlist =
+    db.edition.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.edition =
+    
+    ## The name or number of an edition of a document
+    element edition { db.edition.attlist, db._text }
+}
+div {
+  db.editor.role.attribute = attribute role { text }
+  db.editor.attlist =
+    db.editor.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.editor =
+    
+    ## The name of the editor of a document
+    element editor { db.editor.attlist, db.credit.contentmodel }
+}
+div {
+  db.biblioid.role.attribute = attribute role { text }
+  db.biblioid.attlist =
+    db.biblioid.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.biblio.class.attribute
+  db.biblioid =
+    
+    ## An identifier for a document
+    element biblioid { db.biblioid.attlist, db._text }
+}
+div {
+  db.citebiblioid.role.attribute = attribute role { text }
+  db.citebiblioid.attlist =
+    db.citebiblioid.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.biblio.class.attribute
+  db.citebiblioid =
+    
+    ## A citation of a bibliographic identifier
+    element citebiblioid { db.citebiblioid.attlist, db._text }
+}
+div {
+  db.bibliosource.role.attribute = attribute role { text }
+  db.bibliosource.attlist =
+    db.bibliosource.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.biblio.class.attribute
+  db.bibliosource =
+    
+    ## The source of a document
+    element bibliosource { db.bibliosource.attlist, db._text }
+}
+div {
+  db.bibliorelation.type.enumeration =
+    
+    ## The described resource pre-existed the referenced resource, which is essentially the same intellectual content presented in another format
+    "hasformat"
+    | 
+      ## The described resource includes the referenced resource either physically or logically
+      "haspart"
+    | 
+      ## The described resource has a version, edition, or adaptation, namely, the referenced resource
+      "hasversion"
+    | 
+      ## The described resource is the same intellectual content of the referenced resource, but presented in another format
+      "isformatof"
+    | 
+      ## The described resource is a physical or logical part of the referenced resource
+      "ispartof"
+    | 
+      ## The described resource is referenced, cited, or otherwise pointed to by the referenced resource
+      "isreferencedby"
+    | 
+      ## The described resource is supplanted, displaced, or superceded by the referenced resource
+      "isreplacedby"
+    | 
+      ## The described resource is required by the referenced resource, either physically or logically
+      "isrequiredby"
+    | 
+      ## The described resource is a version, edition, or adaptation of the referenced resource; changes in version imply substantive changes in content rather than differences in format
+      "isversionof"
+    | 
+      ## The described resource references, cites, or otherwise points to the referenced resource
+      "references"
+    | 
+      ## The described resource supplants, displaces, or supersedes the referenced resource
+      "replaces"
+    | 
+      ## The described resource requires the referenced resource to support its function, delivery, or coherence of content
+      "requires"
+  db.bibliorelation.type-enum.attribute =
+    
+    ## Identifies the type of relationship
+    attribute type { db.bibliorelation.type.enumeration }?
+  db.bibliorelation.type-other.attributes =
+    
+    ## Identifies the type of relationship
+    attribute type {
+      
+      ## The described resource has a non-standard relationship with the referenced resource
+      "othertype"
+    }?,
+    
+    ## A keyword that identififes the type of the non-standard relationship
+    attribute othertype { xsd:NMTOKEN }
+  db.bibliorelation.type.attribute =
+    db.bibliorelation.type-enum.attribute
+    | db.bibliorelation.type-other.attributes
+  db.bibliorelation.role.attribute = attribute role { text }
+  db.bibliorelation.attlist =
+    db.bibliorelation.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.biblio.class.attribute
+    & db.bibliorelation.type.attribute
+  db.bibliorelation =
+    
+    ## The relationship of a document to another
+    element bibliorelation { db.bibliorelation.attlist, db._text }
+}
+div {
+  db.bibliocoverage.spacial.enumeration =
+    
+    ## The DCMI Point identifies a point in space using its geographic coordinates
+    "dcmipoint"
+    | 
+      ## ISO 3166 Codes for the representation of names of countries
+      "iso3166"
+    | 
+      ## The DCMI Box identifies a region of space using its geographic limits
+      "dcmibox"
+    | 
+      ## The Getty Thesaurus of Geographic Names
+      "tgn"
+  db.bibliocoverage.spatial-enum.attribute =
+    
+    ## Specifies the type of spatial coverage
+    attribute spatial { db.bibliocoverage.spacial.enumeration }?
+  db.bibliocoverage.spatial-other.attributes =
+    
+    ## Specifies the type of spatial coverage
+    attribute spatial {
+      
+      ## Identifies a non-standard type of coverage
+      "otherspatial"
+    }?,
+    
+    ## A keyword that identifies the type of non-standard coverage
+    attribute otherspatial { xsd:NMTOKEN }
+  db.bibliocoverage.spatial.attribute =
+    db.bibliocoverage.spatial-enum.attribute
+    | db.bibliocoverage.spatial-other.attributes
+  db.bibliocoverage.temporal.enumeration =
+    
+    ## A specification of the limits of a time interval
+    "dcmiperiod"
+    | 
+      ## W3C Encoding rules for dates and times—a profile based on ISO 8601
+      "w3c-dtf"
+  db.bibliocoverage.temporal-enum.attribute =
+    
+    ## Specifies the type of temporal coverage
+    attribute temporal { db.bibliocoverage.temporal.enumeration }?
+  db.bibliocoverage.temporal-other.attributes =
+    
+    ## Specifies the type of temporal coverage
+    attribute temporal {
+      
+      ## Specifies a non-standard type of coverage
+      "othertemporal"
+    }?,
+    
+    ## A keyword that identifies the type of non-standard coverage
+    attribute othertemporal { xsd:NMTOKEN }
+  db.bibliocoverage.temporal.attribute =
+    db.bibliocoverage.temporal-enum.attribute
+    | db.bibliocoverage.temporal-other.attributes
+  db.bibliocoverage.coverage.attrib =
+    db.bibliocoverage.spatial.attribute
+    & db.bibliocoverage.temporal.attribute
+  db.bibliocoverage.role.attribute = attribute role { text }
+  db.bibliocoverage.attlist =
+    db.bibliocoverage.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.bibliocoverage.coverage.attrib
+  db.bibliocoverage =
+    
+    ## The spatial or temporal coverage of a document
+    element bibliocoverage { db.bibliocoverage.attlist, db._text }
+}
+div {
+  db.legalnotice.role.attribute = attribute role { text }
+  db.legalnotice.attlist =
+    db.legalnotice.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.legalnotice.info = db._info.title.only
+  db.legalnotice =
+    
+    ## A statement of legal obligations or requirements
+    element legalnotice {
+      db.legalnotice.attlist, db.legalnotice.info, db.all.blocks+
+    }
+}
+div {
+  db.othercredit.class.enumeration =
+    
+    ## A copy editor
+    "copyeditor"
+    | 
+      ## A graphic designer
+      "graphicdesigner"
+    | 
+      ## Some other contributor
+      "other"
+    | 
+      ## A production editor
+      "productioneditor"
+    | 
+      ## A technical editor
+      "technicaleditor"
+    | 
+      ## A translator
+      "translator"
+    | 
+      ## An indexer
+      "indexer"
+    | 
+      ## A proof-reader
+      "proofreader"
+    | 
+      ## A cover designer
+      "coverdesigner"
+    | 
+      ## An interior designer
+      "interiordesigner"
+    | 
+      ## An illustrator
+      "illustrator"
+    | 
+      ## A reviewer
+      "reviewer"
+    | 
+      ## A typesetter
+      "typesetter"
+    | 
+      ## A converter (a persons responsible for conversion, not an application)
+      "conversion"
+  db.othercredit.class-enum.attribute =
+    
+    ## Identifies the nature of the contributor
+    attribute class { db.othercredit.class.enumeration }?
+  db.othercredit.class-other.attribute =
+    
+    ## Identifies the nature of the non-standard contribution
+    attribute otherclass { xsd:NMTOKEN }
+  db.othercredit.class-other.attributes =
+    
+    ## Identifies the nature of the contributor
+    attribute class {
+      
+      ## Identifies a non-standard contribution
+      "other"
+    }
+    & db.othercredit.class-other.attribute
+  db.othercredit.class.attribute =
+    db.othercredit.class-enum.attribute
+    | db.othercredit.class-other.attributes
+  db.othercredit.role.attribute = attribute role { text }
+  db.othercredit.attlist =
+    db.othercredit.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.othercredit.class.attribute
+  db.othercredit =
+    
+    ## A person or entity, other than an author or editor, credited in a document
+    element othercredit {
+      db.othercredit.attlist, db.credit.contentmodel
+    }
+}
+div {
+  db.pagenums.role.attribute = attribute role { text }
+  db.pagenums.attlist =
+    db.pagenums.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.pagenums =
+    
+    ## The numbers of the pages in a book, for use in a bibliographic entry
+    element pagenums { db.pagenums.attlist, db._text }
+}
+div {
+  db.contrib.role.attribute = attribute role { text }
+  db.contrib.attlist =
+    db.contrib.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.contrib =
+    
+    ## A summary of the contributions made to a document by a credited source
+    element contrib { db.contrib.attlist, db.all.inlines* }
+}
+div {
+  db.honorific.role.attribute = attribute role { text }
+  db.honorific.attlist =
+    db.honorific.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.honorific =
+    
+    ## The title of a person
+    element honorific { db.honorific.attlist, db._text }
+}
+div {
+  db.firstname.role.attribute = attribute role { text }
+  db.firstname.attlist =
+    db.firstname.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.firstname =
+    
+    ## A given name of a person
+    element firstname { db.firstname.attlist, db._text }
+}
+div {
+  db.givenname.role.attribute = attribute role { text }
+  db.givenname.attlist =
+    db.givenname.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.givenname =
+    
+    ## The given name of a person
+    element givenname { db.givenname.attlist, db._text }
+}
+div {
+  db.surname.role.attribute = attribute role { text }
+  db.surname.attlist =
+    db.surname.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.surname =
+    
+    ## An inherited or family name; in western cultures the last name
+    element surname { db.surname.attlist, db._text }
+}
+div {
+  db.lineage.role.attribute = attribute role { text }
+  db.lineage.attlist =
+    db.lineage.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.lineage =
+    
+    ## The portion of a person's name indicating a relationship to ancestors
+    element lineage { db.lineage.attlist, db._text }
+}
+div {
+  db.othername.role.attribute = attribute role { text }
+  db.othername.attlist =
+    db.othername.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.othername =
+    
+    ## A component of a person's name that is not a first name, surname, or lineage
+    element othername { db.othername.attlist, db._text }
+}
+div {
+  db.printhistory.role.attribute = attribute role { text }
+  db.printhistory.attlist =
+    db.printhistory.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.printhistory =
+    
+    ## The printing history of a document
+    element printhistory { db.printhistory.attlist, db.para.blocks+ }
+}
+div {
+  db.pubdate.role.attribute = attribute role { text }
+  db.pubdate.attlist =
+    db.pubdate.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.pubdate =
+    
+    ## The date of publication of a document
+    element pubdate { db.pubdate.attlist, db.date.contentmodel }
+}
+div {
+  db.publisher.role.attribute = attribute role { text }
+  db.publisher.attlist =
+    db.publisher.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.publisher =
+    
+    ## The publisher of a document
+    element publisher {
+      db.publisher.attlist, db.publishername, db.address*
+    }
+}
+div {
+  db.publishername.role.attribute = attribute role { text }
+  db.publishername.attlist =
+    db.publishername.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.publishername =
+    
+    ## The name of the publisher of a document
+    element publishername { db.publishername.attlist, db._text }
+}
+div {
+  db.releaseinfo.role.attribute = attribute role { text }
+  db.releaseinfo.attlist =
+    db.releaseinfo.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.releaseinfo =
+    
+    ## Information about a particular release of a document
+    element releaseinfo { db.releaseinfo.attlist, db._text }
+}
+div {
+  db.revhistory.role.attribute = attribute role { text }
+  db.revhistory.attlist =
+    db.revhistory.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.revhistory.info = db._info.title.only
+  db.revhistory =
+    
+    ## A history of the revisions to a document
+    element revhistory {
+      db.revhistory.attlist, db.revhistory.info, db.revision+
+    }
+}
+div {
+  db.revision.role.attribute = attribute role { text }
+  db.revision.attlist =
+    db.revision.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.revision =
+    
+    ## An entry describing a single revision in the history of the revisions to a document
+    element revision {
+      db.revision.attlist,
+      db.revnumber?,
+      db.date,
+      (db.authorinitials | db.author)*,
+      (db.revremark | db.revdescription)?
+    }
+}
+div {
+  db.revnumber.role.attribute = attribute role { text }
+  db.revnumber.attlist =
+    db.revnumber.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.revnumber =
+    
+    ## A document revision number
+    element revnumber { db.revnumber.attlist, db._text }
+}
+div {
+  db.revremark.role.attribute = attribute role { text }
+  db.revremark.attlist =
+    db.revremark.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.revremark =
+    
+    ## A description of a revision to a document
+    element revremark { db.revremark.attlist, db._text }
+}
+div {
+  db.revdescription.role.attribute = attribute role { text }
+  db.revdescription.attlist =
+    db.revdescription.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.revdescription =
+    
+    ## A extended description of a revision to a document
+    element revdescription { db.revdescription.attlist, db.all.blocks* }
+}
+div {
+  db.seriesvolnums.role.attribute = attribute role { text }
+  db.seriesvolnums.attlist =
+    db.seriesvolnums.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.seriesvolnums =
+    
+    ## Numbers of the volumes in a series of books
+    element seriesvolnums { db.seriesvolnums.attlist, db._text }
+}
+div {
+  db.volumenum.role.attribute = attribute role { text }
+  db.volumenum.attlist =
+    db.volumenum.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.volumenum =
+    
+    ## The volume number of a document in a set (as of books in a set or articles in a journal)
+    element volumenum { db.volumenum.attlist, db._text }
+}
+div {
+  db.issuenum.role.attribute = attribute role { text }
+  db.issuenum.attlist =
+    db.issuenum.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.issuenum =
+    
+    ## The number of an issue of a journal
+    element issuenum { db.issuenum.attlist, db._text }
+}
+div {
+  db.package.role.attribute = attribute role { text }
+  db.package.attlist =
+    db.package.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.package =
+    
+    ## A software or application package
+    element package { db.package.attlist, db._text }
+}
+div {
+  db.email.role.attribute = attribute role { text }
+  db.email.attlist =
+    db.email.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.email =
+    
+    ## An email address
+    element email { db.email.attlist, db._text }
+}
+div {
+  db.lineannotation.role.attribute = attribute role { text }
+  db.lineannotation.attlist =
+    db.lineannotation.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.lineannotation =
+    
+    ## A comment on a line in a verbatim listing
+    element lineannotation { db.lineannotation.attlist, db._text }
+}
+div {
+  db.parameter.class.enumeration =
+    
+    ## A command
+    "command"
+    | 
+      ## A function
+      "function"
+    | 
+      ## An option
+      "option"
+  db.parameter.class.attribute =
+    
+    ## Identifies the class of parameter
+    attribute class { db.parameter.class.enumeration }
+  db.parameter.role.attribute = attribute role { text }
+  db.parameter.attlist =
+    db.parameter.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.parameter.class.attribute?
+  db.parameter =
+    
+    ## A value or a symbolic reference to a value
+    element parameter { db.parameter.attlist, db._text }
+}
+db.replaceable.inlines = db._text | db.co
+div {
+  db.replaceable.class.enumeration =
+    
+    ## A command
+    "command"
+    | 
+      ## A function
+      "function"
+    | 
+      ## An option
+      "option"
+    | 
+      ## A parameter
+      "parameter"
+  db.replaceable.class.attribute =
+    
+    ## Identifies the nature of the replaceable text
+    attribute class { db.replaceable.class.enumeration }
+  db.replaceable.role.attribute = attribute role { text }
+  db.replaceable.attlist =
+    db.replaceable.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.replaceable.class.attribute?
+  db.replaceable =
+    
+    ## Content that may or must be replaced by the user
+    element replaceable {
+      db.replaceable.attlist, db.replaceable.inlines*
+    }
+}
+div {
+  db.uri.type.attribute =
+    
+    ## Identifies the type of URI specified
+    attribute type { text }?
+  db.uri.role.attribute = attribute role { text }
+  db.uri.attlist =
+    db.uri.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.uri.type.attribute
+  db.uri =
+    
+    ## A Uniform Resource Identifier
+    element uri { db.uri.attlist, db._text }
+}
+div {
+  db.abbrev.role.attribute = attribute role { text }
+  db.abbrev.attlist =
+    db.abbrev.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.abbrev =
+    
+    ## An abbreviation, especially one followed by a period
+    element abbrev {
+      db.abbrev.attlist,
+      (db._text | db.superscript | db.subscript | db.trademark)*
+    }
+}
+div {
+  db.acronym.role.attribute = attribute role { text }
+  db.acronym.attlist =
+    db.acronym.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.acronym =
+    
+    ## An often pronounceable word made from the initial (or selected) letters of a name or phrase
+    element acronym {
+      db.acronym.attlist,
+      (db._text | db.superscript | db.subscript | db.trademark)*
+    }
+}
+div {
+  db.citation.role.attribute = attribute role { text }
+  db.citation.attlist =
+    db.citation.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.citation =
+    
+    ## An inline bibliographic reference to another published work
+    element citation { db.citation.attlist, db.all.inlines* }
+}
+div {
+  db.citerefentry.role.attribute = attribute role { text }
+  db.citerefentry.attlist =
+    db.citerefentry.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.citerefentry =
+    
+    ## A citation to a reference page
+    element citerefentry {
+      db.citerefentry.attlist, db.refentrytitle, db.manvolnum?
+    }
+}
+div {
+  db.refentrytitle.role.attribute = attribute role { text }
+  db.refentrytitle.attlist =
+    db.refentrytitle.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.refentrytitle =
+    
+    ## The title of a reference page
+    element refentrytitle { db.refentrytitle.attlist, db.all.inlines* }
+}
+div {
+  db.manvolnum.role.attribute = attribute role { text }
+  db.manvolnum.attlist =
+    db.manvolnum.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.manvolnum =
+    
+    ## A reference volume number
+    element manvolnum { db.manvolnum.attlist, db._text }
+}
+div {
+  db.citetitle.pubwork.enumeration =
+    
+    ## An article
+    "article"
+    | 
+      ## A bulletin board system
+      "bbs"
+    | 
+      ## A book
+      "book"
+    | 
+      ## A CD-ROM
+      "cdrom"
+    | 
+      ## A chapter (as of a book)
+      "chapter"
+    | 
+      ## A DVD
+      "dvd"
+    | 
+      ## An email message
+      "emailmessage"
+    | 
+      ## A gopher page
+      "gopher"
+    | 
+      ## A journal
+      "journal"
+    | 
+      ## A manuscript
+      "manuscript"
+    | 
+      ## A posting to a newsgroup
+      "newsposting"
+    | 
+      ## A part (as of a book)
+      "part"
+    | 
+      ## A reference entry
+      "refentry"
+    | 
+      ## A section (as of a book or article)
+      "section"
+    | 
+      ## A series
+      "series"
+    | 
+      ## A set (as of books)
+      "set"
+    | 
+      ## A web page
+      "webpage"
+    | 
+      ## A wiki page
+      "wiki"
+  db.citetitle.pubwork.attribute =
+    
+    ## Identifies the nature of the publication being cited
+    attribute pubwork { db.citetitle.pubwork.enumeration }
+  db.citetitle.role.attribute = attribute role { text }
+  db.citetitle.attlist =
+    db.citetitle.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.citetitle.pubwork.attribute?
+  db.citetitle =
+    
+    ## The title of a cited work
+    element citetitle { db.citetitle.attlist, db.all.inlines* }
+}
+div {
+  db.emphasis.role.attribute = attribute role { text }
+  db.emphasis.attlist =
+    db.emphasis.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.emphasis =
+    
+    ## Emphasized text
+    element emphasis { db.emphasis.attlist, db.all.inlines* }
+}
+div {
+  db._emphasis =
+    
+    ## A limited span of emphasized text
+    element emphasis { db.emphasis.attlist, db._text }
+}
+div {
+  db.foreignphrase.role.attribute = attribute role { text }
+  db.foreignphrase.attlist =
+    db.foreignphrase.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.foreignphrase =
+    
+    ## A word or phrase in a language other than the primary language of the document
+    element foreignphrase {
+      db.foreignphrase.attlist, (text | db.general.inlines)*
+    }
+}
+div {
+  db._foreignphrase.role.attribute = attribute role { text }
+  db._foreignphrase.attlist =
+    db._foreignphrase.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db._foreignphrase =
+    
+    ## A limited word or phrase in a language other than the primary language of the document
+    element foreignphrase { db._foreignphrase.attlist, db._text }
+}
+div {
+  db.phrase.role.attribute = attribute role { text }
+  db.phrase.attlist =
+    db.phrase.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.phrase =
+    
+    ## A span of text
+    element phrase { db.phrase.attlist, db.all.inlines* }
+}
+div {
+  db._phrase =
+    
+    ## A limited span of text
+    element phrase { db.phrase.attlist, db._text }
+}
+div {
+  db.quote.role.attribute = attribute role { text }
+  db.quote.attlist =
+    db.quote.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.quote =
+    
+    ## An inline quotation
+    element quote { db.quote.attlist, db.all.inlines* }
+}
+div {
+  db._quote.role.attribute = attribute role { text }
+  db._quote.attlist =
+    db._quote.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db._quote =
+    
+    ## A limited inline quotation
+    element quote { db._quote.attlist, db._text }
+}
+div {
+  db.subscript.role.attribute = attribute role { text }
+  db.subscript.attlist =
+    db.subscript.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.subscript =
+    
+    ## A subscript (as in H2
+    ## O, the molecular formula for water)
+    element subscript { db.subscript.attlist, db._text }
+}
+div {
+  db.superscript.role.attribute = attribute role { text }
+  db.superscript.attlist =
+    db.superscript.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.superscript =
+    
+    ## A superscript (as in x2
+    ## , the mathematical notation for x multiplied by itself)
+    element superscript { db.superscript.attlist, db._text }
+}
+div {
+  db.trademark.class.enumeration =
+    
+    ## A copyright
+    "copyright"
+    | 
+      ## A registered copyright
+      "registered"
+    | 
+      ## A service
+      "service"
+    | 
+      ## A trademark
+      "trade"
+  db.trademark.class.attribute =
+    
+    ## Identifies the class of trade mark
+    attribute class { db.trademark.class.enumeration }
+  db.trademark.role.attribute = attribute role { text }
+  db.trademark.attlist =
+    db.trademark.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.trademark.class.attribute?
+  db.trademark =
+    
+    ## A trademark
+    element trademark { db.trademark.attlist, db._text }
+}
+div {
+  db.wordasword.role.attribute = attribute role { text }
+  db.wordasword.attlist =
+    db.wordasword.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.wordasword =
+    
+    ## A word meant specifically as a word and not representing anything else
+    element wordasword { db.wordasword.attlist, db._text }
+}
+div {
+  db.footnoteref.role.attribute = attribute role { text }
+  db.footnoteref.label.attribute = db.label.attribute
+  db.footnoteref.attlist =
+    db.footnoteref.role.attribute?
+    & db.common.attributes
+    & db.linkend.attribute
+    & db.footnoteref.label.attribute?
+  db.footnoteref =
+    
+    ## A cross reference to a footnote (a footnote mark)
+    element footnoteref { db.footnoteref.attlist, empty }
+}
+div {
+  db.xref.role.attribute = attribute role { text }
+  db.xref.xrefstyle.attribute = db.xrefstyle.attribute
+  db.xref.endterm.attribute = db.endterm.attribute
+  db.xref.attlist =
+    db.xref.role.attribute?
+    & db.common.attributes
+    & db.common.req.linking.attributes
+    & db.xref.xrefstyle.attribute?
+    & db.xref.endterm.attribute?
+  db.xref =
+    
+    ## A cross reference to another part of the document
+    element xref { db.xref.attlist, empty }
+}
+div {
+  db.link.role.attribute = attribute role { text }
+  db.link.xrefstyle.attribute = db.xrefstyle.attribute
+  db.link.endterm.attribute = db.endterm.attribute
+  db.link.attlist =
+    db.link.role.attribute?
+    & db.common.attributes
+    & db.common.req.linking.attributes
+    & db.link.xrefstyle.attribute?
+    & db.link.endterm.attribute?
+  db.link =
+    
+    ## A hypertext link
+    element link { db.link.attlist, db.all.inlines* }
+}
+div {
+  db.olink.role.attribute = attribute role { text }
+  db.olink.xrefstyle.attribute = db.xrefstyle.attribute
+  db.olink.localinfo.attribute =
+    
+    ## Holds additional information that may be used by the application when resolving the link
+    attribute localinfo { text }
+  db.olink.targetdoc.attribute =
+    
+    ## Specifies the URI of the document in which the link target appears
+    attribute targetdoc { xsd:anyURI }
+  db.olink.targetptr.attribute =
+    
+    ## Specifies the location of the link target in the document
+    attribute targetptr { text }
+  db.olink.type.attribute =
+    
+    ## Identifies application-specific customization of the link behavior
+    attribute type { text }
+  db.olink.attlist =
+    db.common.attributes
+    & db.olink.targetdoc.attribute?
+    & db.olink.role.attribute?
+    & db.olink.xrefstyle.attribute?
+    & db.olink.localinfo.attribute?
+    & db.olink.targetptr.attribute?
+    & db.olink.type.attribute?
+  db.olink =
+    
+    ## A link that addresses its target indirectly
+    element olink { db.olink.attlist, db.all.inlines* }
+}
+div {
+  db.anchor.role.attribute = attribute role { text }
+  db.anchor.attlist =
+    db.anchor.role.attribute? & db.common.idreq.attributes
+  db.anchor =
+    
+    ## A spot in the document
+    element anchor { db.anchor.attlist, empty }
+}
+div {
+  db.alt.role.attribute = attribute role { text }
+  db.alt.attlist = db.alt.role.attribute? & db.common.attributes
+  db.alt =
+    
+    ## A text-only annotation, often used for accessibility
+    element alt { db.alt.attlist, (text | db.inlinemediaobject)* }
+}
+db.status.attribute =
+  
+  ## Identifies the editorial or publication status of the element on which it occurs
+  attribute status { text }
+db.toplevel.sections =
+  ((db.section+, db.simplesect*) | db.simplesect+)
+  | (db.sect1+, db.simplesect*)
+  | db.refentry+
+db.toplevel.blocks.or.sections =
+  (db.all.blocks+, db.toplevel.sections?) | db.toplevel.sections
+db.recursive.sections =
+  ((db.section+, db.simplesect*) | db.simplesect+)
+  | db.refentry+
+db.recursive.blocks.or.sections =
+  (db.all.blocks+, db.recursive.sections?) | db.recursive.sections
+db.divisions = db.part | db.reference
+db.components =
+  db.dedication
+  | db.acknowledgements
+  | db.preface
+  | db.chapter
+  | db.appendix
+  | db.article
+  | db.colophon
+db.navigation.components =
+  notAllowed | db.glossary | db.bibliography | db.index | db.toc
+db.component.contentmodel =
+  db.navigation.components*,
+  db.toplevel.blocks.or.sections,
+  db.navigation.components*
+db.setindex.components = notAllowed | db.setindex
+db.toc.components = notAllowed | db.toc
+db.set.components = db.set | db.book
+div {
+  db.set.status.attribute = db.status.attribute
+  db.set.role.attribute = attribute role { text }
+  db.set.attlist =
+    db.set.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.label.attribute?
+    & db.set.status.attribute?
+  db.set.info = db._info.title.req
+  db.set =
+    
+    ## A collection of books
+    element set {
+      db.set.attlist,
+      db.set.info,
+      db.toc.components?,
+      db.set.components+,
+      db.setindex.components?
+    }
+}
+db.book.components =
+  (db.navigation.components | db.components | db.divisions)* | db.topic*
+div {
+  db.book.status.attribute = db.status.attribute
+  db.book.role.attribute = attribute role { text }
+  db.book.attlist =
+    db.book.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.label.attribute?
+    & db.book.status.attribute?
+  db.book.info = db._info
+  db.book =
+    
+    ## A book
+    element book { db.book.attlist, db.book.info, db.book.components }
+}
+div {
+  db.dedication.status.attribute = db.status.attribute
+  db.dedication.role.attribute = attribute role { text }
+  db.dedication.attlist =
+    db.dedication.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.label.attribute?
+    & db.dedication.status.attribute?
+  db.dedication.info = db._info
+  db.dedication =
+    
+    ## The dedication of a book or other component
+    element dedication {
+      db.dedication.attlist, db.dedication.info, db.all.blocks+
+    }
+}
+div {
+  db.acknowledgements.status.attribute = db.status.attribute
+  db.acknowledgements.role.attribute = attribute role { text }
+  db.acknowledgements.attlist =
+    db.acknowledgements.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.label.attribute?
+    & db.acknowledgements.status.attribute?
+  db.acknowledgements.info = db._info
+  db.acknowledgements =
+    
+    ## Acknowledgements of a book or other component
+    element acknowledgements {
+      db.acknowledgements.attlist,
+      db.acknowledgements.info,
+      db.all.blocks+
+    }
+}
+div {
+  db.colophon.status.attribute = db.status.attribute
+  db.colophon.role.attribute = attribute role { text }
+  db.colophon.attlist =
+    db.colophon.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.label.attribute?
+    & db.colophon.status.attribute?
+  db.colophon.info = db._info
+  db.colophon =
+    
+    ## Text at the back of a book describing facts about its production
+    element colophon {
+      db.colophon.attlist,
+      db.colophon.info,
+      ((db.all.blocks+, db.simplesect*)
+       | (db.all.blocks*, db.simplesect+))
+    }
+}
+db.appendix.contentmodel = db.component.contentmodel | db.topic+
+div {
+  db.appendix.status.attribute = db.status.attribute
+  db.appendix.role.attribute = attribute role { text }
+  db.appendix.attlist =
+    db.appendix.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.label.attribute?
+    & db.appendix.status.attribute?
+  db.appendix.info = db._info.title.req
+  db.appendix =
+    
+    ## An appendix in a book or article
+    element appendix {
+      db.appendix.attlist, db.appendix.info, db.appendix.contentmodel
+    }
+}
+db.chapter.contentmodel = db.component.contentmodel | db.topic+
+div {
+  db.chapter.status.attribute = db.status.attribute
+  db.chapter.role.attribute = attribute role { text }
+  db.chapter.attlist =
+    db.chapter.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.label.attribute?
+    & db.chapter.status.attribute?
+  db.chapter.info = db._info.title.req
+  db.chapter =
+    
+    ## A chapter, as of a book
+    element chapter {
+      db.chapter.attlist, db.chapter.info, db.chapter.contentmodel
+    }
+}
+db.part.components =
+  (db.navigation.components | db.components)
+  | (db.refentry | db.reference)
+db.part.contentmodel = db.part.components+ | db.topic+
+div {
+  db.part.status.attribute = db.status.attribute
+  db.part.role.attribute = attribute role { text }
+  db.part.attlist =
+    db.part.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.label.attribute?
+    & db.part.status.attribute?
+  db.part.info = db._info.title.req
+  db.part =
+    
+    ## A division in a book
+    element part {
+      db.part.attlist, db.part.info, db.partintro?, db.part.contentmodel
+    }
+}
+div {
+  db.preface.status.attribute = db.status.attribute
+  db.preface.role.attribute = attribute role { text }
+  db.preface.attlist =
+    db.preface.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.label.attribute?
+    & db.preface.status.attribute?
+  db.preface.info = db._info.title.req
+  db.preface =
+    
+    ## Introductory matter preceding the first chapter of a book
+    element preface {
+      db.preface.attlist, db.preface.info, db.component.contentmodel
+    }
+}
+div {
+  db.partintro.status.attribute = db.status.attribute
+  db.partintro.role.attribute = attribute role { text }
+  db.partintro.attlist =
+    db.partintro.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.label.attribute?
+    & db.partintro.status.attribute?
+  db.partintro.info = db._info
+  db.partintro =
+    
+    ## An introduction to the contents of a part
+    element partintro {
+      db.partintro.attlist,
+      db.partintro.info,
+      db.toplevel.blocks.or.sections
+    }
+}
+div {
+  db.section.status.attribute = db.status.attribute
+  db.section.role.attribute = attribute role { text }
+  db.section.attlist =
+    db.section.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.label.attribute?
+    & db.section.status.attribute?
+  db.section.info = db._info.title.req
+  db.section =
+    
+    ## A recursive section
+    element section {
+      db.section.attlist,
+      db.section.info,
+      db.recursive.blocks.or.sections,
+      db.navigation.components*
+    }
+}
+div {
+  db.simplesect.status.attribute = db.status.attribute
+  db.simplesect.role.attribute = attribute role { text }
+  db.simplesect.attlist =
+    db.simplesect.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.label.attribute?
+    & db.simplesect.status.attribute?
+  db.simplesect.info = db._info.title.req
+  db.simplesect =
+    
+    ## A section of a document with no subdivisions
+    element simplesect {
+      db.simplesect.attlist, db.simplesect.info, db.all.blocks+
+    }
+}
+db.article.components = db.toplevel.sections
+db.article.navcomponents =
+  db.navigation.components
+  | db.acknowledgements
+  | db.dedication
+  | db.appendix
+  | db.colophon
+div {
+  db.article.status.attribute = db.status.attribute
+  db.article.class.enumeration =
+    
+    ## A collection of frequently asked questions.
+    "faq"
+    | 
+      ## An article in a journal or other periodical.
+      "journalarticle"
+    | 
+      ## A description of a product.
+      "productsheet"
+    | 
+      ## A specification.
+      "specification"
+    | 
+      ## A technical report.
+      "techreport"
+    | 
+      ## A white paper.
+      "whitepaper"
+  db.article.class.attribute =
+    
+    ## Identifies the nature of the article
+    attribute class { db.article.class.enumeration }
+  db.article.role.attribute = attribute role { text }
+  db.article.attlist =
+    db.article.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.label.attribute?
+    & db.article.status.attribute?
+    & db.article.class.attribute?
+  db.article.info = db._info.title.req
+  db.article =
+    
+    ## An article
+    element article {
+      db.article.attlist,
+      db.article.info,
+      db.article.navcomponents*,
+      ((db.all.blocks+, db.article.components?)
+       | db.article.components),
+      db.article.navcomponents*
+    }
+}
+db.annotations.attribute =
+  
+  ## Identifies one or more annotations that apply to this element
+  attribute annotations { text }
+div {
+  db.annotation.role.attribute = attribute role { text }
+  db.annotation.annotates.attribute =
+    
+    ## Identifies one ore more elements to which this annotation applies
+    attribute annotates { text }
+  db.annotation.attlist =
+    db.annotation.role.attribute?
+    & db.annotation.annotates.attribute?
+    & db.common.attributes
+  db.annotation.info = db._info.title.only
+  db.annotation =
+    
+    ## An annotation
+    element annotation {
+      db.annotation.attlist, db.annotation.info, db.all.blocks+
+    }
+}
+db.xlink.from.attribute =
+  
+  ## Specifies the XLink traversal-from
+  attribute xlink:from { xsd:NMTOKEN }
+db.xlink.label.attribute =
+  
+  ## Specifies the XLink label
+  attribute xlink:label { xsd:NMTOKEN }
+db.xlink.to.attribute =
+  
+  ## Specifies the XLink traversal-to
+  attribute xlink:to { xsd:NMTOKEN }
+div {
+  db.extendedlink.role.attribute = attribute role { text }
+  db.extendedlink.attlist =
+    db.extendedlink.role.attribute?
+    & db.common.attributes
+    & 
+      ## Identifies the XLink link type 
+      [ a:defaultValue = "extended" ]
+      attribute xlink:type {
+        
+        ## An XLink extended link
+        "extended"
+      }?
+    & db.xlink.role.attribute?
+    & db.xlink.title.attribute?
+  db.extendedlink =
+    
+    ## An XLink extended link
+    element extendedlink {
+      db.extendedlink.attlist, (db.locator | db.arc)+
+    }
+}
+div {
+  db.locator.role.attribute = attribute role { text }
+  db.locator.attlist =
+    db.locator.role.attribute?
+    & db.common.attributes
+    & 
+      ## Identifies the XLink link type 
+      [ a:defaultValue = "locator" ]
+      attribute xlink:type {
+        
+        ## An XLink locator link
+        "locator"
+      }?
+    & db.xlink.href.attribute
+    & db.xlink.role.attribute?
+    & db.xlink.title.attribute?
+    & db.xlink.label.attribute?
+  db.locator =
+    
+    ## An XLink locator in an extendedlink
+    element locator { db.locator.attlist, empty }
+}
+div {
+  db.arc.role.attribute = attribute role { text }
+  db.arc.attlist =
+    db.arc.role.attribute?
+    & db.common.attributes
+    & 
+      ## Identifies the XLink link type 
+      [ a:defaultValue = "arc" ]
+      attribute xlink:type {
+        
+        ## An XLink arc link
+        "arc"
+      }?
+    & db.xlink.arcrole.attribute?
+    & db.xlink.title.attribute?
+    & db.xlink.show.attribute?
+    & db.xlink.actuate.attribute?
+    & db.xlink.from.attribute?
+    & db.xlink.to.attribute?
+  db.arc =
+    
+    ## An XLink arc in an extendedlink
+    element arc { db.arc.attlist, empty }
+}
+db.sect1.sections = (db.sect2+, db.simplesect*) | db.simplesect+
+div {
+  db.sect1.status.attribute = db.status.attribute
+  db.sect1.role.attribute = attribute role { text }
+  db.sect1.attlist =
+    db.sect1.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.label.attribute?
+    & db.sect1.status.attribute?
+  db.sect1.info = db._info.title.req
+  db.sect1 =
+    
+    ## A top-level section of document
+    element sect1 {
+      db.sect1.attlist,
+      db.sect1.info,
+      ((db.all.blocks+, db.sect1.sections?) | db.sect1.sections),
+      db.navigation.components*
+    }
+}
+db.sect2.sections = (db.sect3+, db.simplesect*) | db.simplesect+
+div {
+  db.sect2.status.attribute = db.status.attribute
+  db.sect2.role.attribute = attribute role { text }
+  db.sect2.attlist =
+    db.sect2.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.label.attribute?
+    & db.sect2.status.attribute?
+  db.sect2.info = db._info.title.req
+  db.sect2 =
+    
+    ## A subsection within a sect1
+    element sect2 {
+      db.sect2.attlist,
+      db.sect2.info,
+      ((db.all.blocks+, db.sect2.sections?) | db.sect2.sections),
+      db.navigation.components*
+    }
+}
+db.sect3.sections = (db.sect4+, db.simplesect*) | db.simplesect+
+div {
+  db.sect3.status.attribute = db.status.attribute
+  db.sect3.role.attribute = attribute role { text }
+  db.sect3.attlist =
+    db.sect3.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.label.attribute?
+    & db.sect3.status.attribute?
+  db.sect3.info = db._info.title.req
+  db.sect3 =
+    
+    ## A subsection within a sect2
+    element sect3 {
+      db.sect3.attlist,
+      db.sect3.info,
+      ((db.all.blocks+, db.sect3.sections?) | db.sect3.sections),
+      db.navigation.components*
+    }
+}
+db.sect4.sections = (db.sect5+, db.simplesect*) | db.simplesect+
+div {
+  db.sect4.status.attribute = db.status.attribute
+  db.sect4.role.attribute = attribute role { text }
+  db.sect4.attlist =
+    db.sect4.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.label.attribute?
+    & db.sect4.status.attribute?
+  db.sect4.info = db._info.title.req
+  db.sect4 =
+    
+    ## A subsection within a sect3
+    element sect4 {
+      db.sect4.attlist,
+      db.sect4.info,
+      ((db.all.blocks+, db.sect4.sections?) | db.sect4.sections),
+      db.navigation.components*
+    }
+}
+db.sect5.sections = db.simplesect+
+div {
+  db.sect5.status.attribute = db.status.attribute
+  db.sect5.role.attribute = attribute role { text }
+  db.sect5.attlist =
+    db.sect5.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.label.attribute?
+    & db.sect5.status.attribute?
+  db.sect5.info = db._info.title.req
+  db.sect5 =
+    
+    ## A subsection within a sect4
+    element sect5 {
+      db.sect5.attlist,
+      db.sect5.info,
+      ((db.all.blocks+, db.sect5.sections?) | db.sect5.sections),
+      db.navigation.components*
+    }
+}
+db.toplevel.refsection = db.refsection+ | db.refsect1+
+db.secondlevel.refsection = db.refsection+ | db.refsect2+
+db.reference.components = db.refentry
+div {
+  db.reference.status.attribute = db.status.attribute
+  db.reference.role.attribute = attribute role { text }
+  db.reference.attlist =
+    db.reference.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.reference.status.attribute?
+    & db.label.attribute?
+  db.reference.info = db._info.title.req
+  db.reference =
+    
+    ## A collection of reference entries
+    element reference {
+      db.reference.attlist,
+      db.reference.info,
+      db.partintro?,
+      db.reference.components+
+    }
+}
+div {
+  db.refentry.status.attribute = db.status.attribute
+  db.refentry.role.attribute = attribute role { text }
+  db.refentry.attlist =
+    db.refentry.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.refentry.status.attribute?
+    & db.label.attribute?
+  db.refentry.info = db._info.title.forbidden
+  db.refentry =
+    
+    ## A reference page (originally a UNIX man-style reference page)
+    element refentry {
+      db.refentry.attlist,
+      db.indexterm*,
+      db.refentry.info,
+      db.refmeta?,
+      db.refnamediv+,
+      db.refsynopsisdiv?,
+      db.toplevel.refsection
+    }
+}
+div {
+  db.refmeta.role.attribute = attribute role { text }
+  db.refmeta.attlist =
+    db.refmeta.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.refmeta =
+    
+    ## Meta-information for a reference entry
+    element refmeta {
+      db.refmeta.attlist,
+      db.indexterm*,
+      db.refentrytitle,
+      db.manvolnum?,
+      db.refmiscinfo*,
+      db.indexterm*
+    }
+}
+db.refmiscinfo.class.enumeration =
+  
+  ## The name of the software product or component to which this topic applies
+  "source"
+  | 
+    ## The version of the software product or component to which this topic applies
+    "version"
+  | 
+    ## The section title of the reference page (e.g., User Commands)
+    "manual"
+  | 
+    ## The section title of the reference page (believed synonymous with "manual" but in wide use)
+    "sectdesc"
+  | 
+    ## The name of the software product or component to which this topic applies (e.g., SunOS x.y; believed synonymous with "source" but in wide use)
+    "software"
+db.refmiscinfo.class-enum.attribute =
+  
+  ## Identifies the kind of miscellaneous information
+  attribute class { db.refmiscinfo.class.enumeration }?
+db.refmiscinfo.class-other.attribute =
+  
+  ## Identifies the nature of non-standard miscellaneous information
+  attribute otherclass { text }
+db.refmiscinfo.class-other.attributes =
+  
+  ## Identifies the kind of miscellaneious information
+  attribute class {
+    
+    ## Indicates that the information is some 'other' kind.
+    "other"
+  }
+  & db.refmiscinfo.class-other.attribute
+db.refmiscinfo.class.attribute =
+  db.refmiscinfo.class-enum.attribute
+  | db.refmiscinfo.class-other.attributes
+div {
+  db.refmiscinfo.role.attribute = attribute role { text }
+  db.refmiscinfo.attlist =
+    db.refmiscinfo.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.refmiscinfo.class.attribute?
+  db.refmiscinfo =
+    
+    ## Meta-information for a reference entry other than the title and volume number
+    element refmiscinfo { db.refmiscinfo.attlist, db._text }
+}
+div {
+  db.refnamediv.role.attribute = attribute role { text }
+  db.refnamediv.attlist =
+    db.refnamediv.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.refnamediv =
+    
+    ## The name, purpose, and classification of a reference page
+    element refnamediv {
+      db.refnamediv.attlist,
+      db.refdescriptor?,
+      db.refname+,
+      db.refpurpose,
+      db.refclass*
+    }
+}
+div {
+  db.refdescriptor.role.attribute = attribute role { text }
+  db.refdescriptor.attlist =
+    db.refdescriptor.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.refdescriptor =
+    
+    ## A description of the topic of a reference page
+    element refdescriptor { db.refdescriptor.attlist, db.all.inlines* }
+}
+div {
+  db.refname.role.attribute = attribute role { text }
+  db.refname.attlist =
+    db.refname.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.refname =
+    
+    ## The name of (one of) the subject(s) of a reference page
+    element refname { db.refname.attlist, db.all.inlines* }
+}
+div {
+  db.refpurpose.role.attribute = attribute role { text }
+  db.refpurpose.attlist =
+    db.refpurpose.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.refpurpose =
+    
+    ## A short (one sentence) synopsis of the topic of a reference page
+    element refpurpose { db.refpurpose.attlist, db.all.inlines* }
+}
+div {
+  db.refclass.role.attribute = attribute role { text }
+  db.refclass.attlist =
+    db.refclass.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.refclass =
+    
+    ## The scope or other indication of applicability of a reference entry
+    element refclass { db.refclass.attlist, (text | db.application)* }
+}
+div {
+  db.refsynopsisdiv.role.attribute = attribute role { text }
+  db.refsynopsisdiv.attlist =
+    db.refsynopsisdiv.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.refsynopsisdiv.info = db._info
+  db.refsynopsisdiv =
+    
+    ## A syntactic synopsis of the subject of the reference page
+    element refsynopsisdiv {
+      db.refsynopsisdiv.attlist,
+      db.refsynopsisdiv.info,
+      ((db.all.blocks+, db.secondlevel.refsection?)
+       | db.secondlevel.refsection)
+    }
+}
+div {
+  db.refsection.status.attribute = db.status.attribute
+  db.refsection.role.attribute = attribute role { text }
+  db.refsection.attlist =
+    db.refsection.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.refsection.status.attribute?
+    & db.label.attribute?
+  db.refsection.info = db._info.title.req
+  db.refsection =
+    
+    ## A recursive section in a refentry
+    element refsection {
+      db.refsection.attlist,
+      db.refsection.info,
+      ((db.all.blocks+, db.refsection*) | db.refsection+)
+    }
+}
+db.refsect1.sections = db.refsect2+
+div {
+  db.refsect1.status.attribute = db.status.attribute
+  db.refsect1.role.attribute = attribute role { text }
+  db.refsect1.attlist =
+    db.refsect1.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.label.attribute?
+    & db.refsect1.status.attribute?
+  db.refsect1.info = db._info.title.req
+  db.refsect1 =
+    
+    ## A major subsection of a reference entry
+    element refsect1 {
+      db.refsect1.attlist,
+      db.refsect1.info,
+      ((db.all.blocks+, db.refsect1.sections?) | db.refsect1.sections)
+    }
+}
+db.refsect2.sections = db.refsect3+
+div {
+  db.refsect2.status.attribute = db.status.attribute
+  db.refsect2.role.attribute = attribute role { text }
+  db.refsect2.attlist =
+    db.refsect2.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.label.attribute?
+    & db.refsect2.status.attribute?
+  db.refsect2.info = db._info.title.req
+  db.refsect2 =
+    
+    ## A subsection of a refsect1
+    element refsect2 {
+      db.refsect2.attlist,
+      db.refsect2.info,
+      ((db.all.blocks+, db.refsect2.sections?) | db.refsect2.sections)
+    }
+}
+div {
+  db.refsect3.status.attribute = db.status.attribute
+  db.refsect3.role.attribute = attribute role { text }
+  db.refsect3.attlist =
+    db.refsect3.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.label.attribute?
+    & db.refsect3.status.attribute?
+  db.refsect3.info = db._info.title.req
+  db.refsect3 =
+    
+    ## A subsection of a refsect2
+    element refsect3 {
+      db.refsect3.attlist, db.refsect3.info, db.all.blocks+
+    }
+}
+db.glossary.inlines =
+  db.firstterm | db.glossterm | db._firstterm | db._glossterm
+db.baseform.attribute =
+  
+  ## Specifies the base form of the term, the one that appears in the glossary. This allows adjectival, plural, and other variations of the term to appear in the element. The element content is the default base form.
+  attribute baseform { text }?
+div {
+  db.glosslist.role.attribute = attribute role { text }
+  db.glosslist.attlist =
+    db.glosslist.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.glosslist.info = db._info.title.only
+  db.glosslist =
+    
+    ## A wrapper for a list of glossary entries
+    element glosslist {
+      db.glosslist.attlist,
+      db.glosslist.info?,
+      db.all.blocks*,
+      db.glossentry+
+    }
+}
+div {
+  db.glossentry.role.attribute = attribute role { text }
+  db.glossentry.sortas.attribute =
+    
+    ## Specifies the string by which the element's content is to be sorted; if unspecified, the content is used
+    attribute sortas { text }
+  db.glossentry.attlist =
+    db.glossentry.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.glossentry.sortas.attribute?
+  db.glossentry =
+    
+    ## An entry in a glossary or glosslist
+    element glossentry {
+      db.glossentry.attlist,
+      db.glossterm,
+      db.acronym?,
+      db.abbrev?,
+      db.indexterm*,
+      (db.glosssee | db.glossdef+)
+    }
+}
+div {
+  db.glossdef.role.attribute = attribute role { text }
+  db.glossdef.subject.attribute =
+    
+    ## Specifies a list of keywords for the definition
+    attribute subject { text }
+  db.glossdef.attlist =
+    db.glossdef.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.glossdef.subject.attribute?
+  db.glossdef =
+    
+    ## A definition in a glossentry
+    element glossdef {
+      db.glossdef.attlist, db.all.blocks+, db.glossseealso*
+    }
+}
+div {
+  db.glosssee.role.attribute = attribute role { text }
+  db.glosssee.otherterm.attribute =
+    
+    ## Identifies the other term
+    attribute otherterm { xsd:IDREF }
+  db.glosssee.attlist =
+    db.glosssee.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.glosssee.otherterm.attribute?
+  db.glosssee =
+    
+    ## A cross-reference from one glossentry
+    ##  to another
+    element glosssee { db.glosssee.attlist, db.all.inlines* }
+}
+div {
+  db.glossseealso.role.attribute = attribute role { text }
+  db.glossseealso.otherterm.attribute =
+    
+    ## Identifies the other term
+    attribute otherterm { xsd:IDREF }
+  db.glossseealso.attlist =
+    db.glossseealso.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.glossseealso.otherterm.attribute?
+  db.glossseealso =
+    
+    ## A cross-reference from one glossentry to another
+    element glossseealso { db.glossseealso.attlist, db.all.inlines* }
+}
+div {
+  db.firstterm.role.attribute = attribute role { text }
+  db.firstterm.attlist =
+    db.firstterm.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.baseform.attribute
+  db.firstterm =
+    
+    ## The first occurrence of a term
+    element firstterm { db.firstterm.attlist, db.all.inlines* }
+}
+div {
+  db._firstterm.role.attribute = attribute role { text }
+  db._firstterm.attlist =
+    db._firstterm.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.baseform.attribute
+  db._firstterm =
+    
+    ## The first occurrence of a term, with limited content
+    element firstterm { db._firstterm.attlist, db._text }
+}
+div {
+  db.glossterm.role.attribute = attribute role { text }
+  db.glossterm.attlist =
+    db.glossterm.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.baseform.attribute
+  db.glossterm =
+    
+    ## A glossary term
+    element glossterm { db.glossterm.attlist, db.all.inlines* }
+}
+div {
+  db._glossterm.role.attribute = attribute role { text }
+  db._glossterm.attlist =
+    db._glossterm.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.baseform.attribute
+  db._glossterm =
+    
+    ## A glossary term
+    element glossterm { db._glossterm.attlist, db._text }
+}
+div {
+  db.glossary.status.attribute = db.status.attribute
+  db.glossary.role.attribute = attribute role { text }
+  db.glossary.attlist =
+    db.glossary.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.label.attribute?
+    & db.glossary.status.attribute?
+  db.glossary.info = db._info
+  db.glossary =
+    
+    ## A glossary
+    element glossary {
+      db.glossary.attlist,
+      db.glossary.info,
+      db.all.blocks*,
+      (db.glossdiv* | db.glossentry*),
+      db.bibliography?
+    }
+}
+div {
+  db.glossdiv.status.attribute = db.status.attribute
+  db.glossdiv.role.attribute = attribute role { text }
+  db.glossdiv.attlist =
+    db.glossdiv.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.label.attribute?
+    & db.glossdiv.status.attribute?
+  db.glossdiv.info = db._info.title.req
+  db.glossdiv =
+    
+    ## A division in a glossary
+    element glossdiv {
+      db.glossdiv.attlist,
+      db.glossdiv.info,
+      db.all.blocks*,
+      db.glossentry+
+    }
+}
+div {
+  db.termdef.role.attribute = attribute role { text }
+  db.termdef.attlist =
+    db.termdef.role.attribute?
+    & db.glossentry.sortas.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.baseform.attribute
+  db.termdef =
+    
+    ## An inline definition of a term
+    element termdef { db.termdef.attlist, db.all.inlines* }
+}
+db.relation.attribute =
+  
+  ## Identifies the relationship between the bibliographic elemnts
+  attribute relation { text }
+div {
+  db.biblioentry.role.attribute = attribute role { text }
+  db.biblioentry.attlist =
+    db.biblioentry.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.biblioentry =
+    
+    ## A raw entry in a bibliography
+    element biblioentry {
+      db.biblioentry.attlist, db.bibliographic.elements+
+    }
+}
+div {
+  db.bibliomixed.role.attribute = attribute role { text }
+  db.bibliomixed.attlist =
+    db.bibliomixed.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.bibliomixed =
+    
+    ## A cooked entry in a bibliography
+    element bibliomixed {
+      db.bibliomixed.attlist,
+      ((db._text
+        | db.honorific
+        | db.firstname
+        | db.surname
+        | db.lineage
+        | db.othername
+        | db.bibliographic.elements)*
+       | (db._text
+          | db.honorific
+          | db.givenname
+          | db.surname
+          | db.lineage
+          | db.othername
+          | db.bibliographic.elements)*)
+    }
+}
+div {
+  db.biblioset.relation.attribute = db.relation.attribute
+  db.biblioset.role.attribute = attribute role { text }
+  db.biblioset.attlist =
+    db.biblioset.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.biblioset.relation.attribute?
+  db.biblioset =
+    
+    ## A raw container for related bibliographic information
+    element biblioset {
+      db.biblioset.attlist, db.bibliographic.elements+
+    }
+}
+div {
+  db.bibliomset.relation.attribute = db.relation.attribute
+  db.bibliomset.role.attribute = attribute role { text }
+  db.bibliomset.attlist =
+    db.bibliomset.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.bibliomset.relation.attribute?
+  db.bibliomset =
+    
+    ## A cooked container for related bibliographic information
+    element bibliomset {
+      db.bibliomset.attlist,
+      ((db._text
+        | db.honorific
+        | db.firstname
+        | db.surname
+        | db.lineage
+        | db.othername
+        | db.bibliographic.elements)*
+       | (db._text
+          | db.honorific
+          | db.givenname
+          | db.surname
+          | db.lineage
+          | db.othername
+          | db.bibliographic.elements)*)
+    }
+}
+div {
+  db.bibliomisc.role.attribute = attribute role { text }
+  db.bibliomisc.attlist =
+    db.bibliomisc.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.bibliomisc =
+    
+    ## Untyped bibliographic information
+    element bibliomisc { db.bibliomisc.attlist, db._text }
+}
+div {
+  db.bibliography.status.attrib = db.status.attribute
+  db.bibliography.role.attribute = attribute role { text }
+  db.bibliography.attlist =
+    db.bibliography.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.label.attribute?
+    & db.bibliography.status.attrib?
+  db.bibliography.info = db._info
+  db.bibliography =
+    
+    ## A bibliography
+    element bibliography {
+      db.bibliography.attlist,
+      db.bibliography.info,
+      db.all.blocks*,
+      (db.bibliodiv+ | (db.biblioentry | db.bibliomixed)+)
+    }
+}
+div {
+  db.bibliodiv.status.attrib = db.status.attribute
+  db.bibliodiv.role.attribute = attribute role { text }
+  db.bibliodiv.attlist =
+    db.bibliodiv.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.label.attribute?
+    & db.bibliodiv.status.attrib?
+  db.bibliodiv.info = db._info.title.req
+  db.bibliodiv =
+    
+    ## A section of a bibliography
+    element bibliodiv {
+      db.bibliodiv.attlist,
+      db.bibliodiv.info,
+      db.all.blocks*,
+      (db.biblioentry | db.bibliomixed)+
+    }
+}
+div {
+  db.bibliolist.role.attribute = attribute role { text }
+  db.bibliolist.attlist =
+    db.bibliolist.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.bibliolist.info = db._info.title.only
+  db.bibliolist =
+    
+    ## A wrapper for a list of bibliography entries
+    element bibliolist {
+      db.bibliolist.attlist,
+      db.bibliolist.info?,
+      db.all.blocks*,
+      (db.biblioentry | db.bibliomixed)+
+    }
+}
+div {
+  db.biblioref.role.attribute = attribute role { text }
+  db.biblioref.xrefstyle.attribute = db.xrefstyle.attribute
+  db.biblioref.endterm.attribute = db.endterm.attribute
+  db.biblioref.units.attribute =
+    
+    ## The units (for example, pages) used to identify the beginning and ending of a reference.
+    attribute units { xsd:token }
+  db.biblioref.begin.attribute =
+    
+    ## Identifies the beginning of a reference; the location within the work that is being referenced.
+    attribute begin { xsd:token }
+  db.biblioref.end.attribute =
+    
+    ## Identifies the end of a reference.
+    attribute end { xsd:token }
+  db.biblioref.attlist =
+    db.biblioref.role.attribute?
+    & db.common.attributes
+    & db.common.req.linking.attributes
+    & db.biblioref.xrefstyle.attribute?
+    & db.biblioref.endterm.attribute?
+    & db.biblioref.units.attribute?
+    & db.biblioref.begin.attribute?
+    & db.biblioref.end.attribute?
+  db.biblioref =
+    
+    ## A cross-reference to a bibliographic entry
+    element biblioref { db.biblioref.attlist, empty }
+}
+db.significance.enumeration =
+  
+  ## Normal
+  "normal"
+  | 
+    ## Preferred
+    "preferred"
+db.significance.attribute =
+  
+  ## Specifies the significance of the term
+  attribute significance { db.significance.enumeration }
+db.zone.attribute =
+  
+  ## Specifies the IDs of the elements to which this term applies
+  attribute zone { xsd:IDREFS }
+db.indexterm.pagenum.attribute =
+  
+  ## Indicates the page on which this index term occurs in some version of the printed document
+  attribute pagenum { text }
+db.scope.enumeration =
+  
+  ## All indexes
+  "all"
+  | 
+    ## The global index (as for a combined index of a set of books)
+    "global"
+  | 
+    ## The local index (the index for this document only)
+    "local"
+db.scope.attribute =
+  
+  ## Specifies the scope of the index term
+  attribute scope { db.scope.enumeration }
+db.sortas.attribute =
+  
+  ## Specifies the string by which the term is to be sorted; if unspecified, the term content is used
+  attribute sortas { text }
+db.index.type.attribute =
+  
+  ## Specifies the target index for this term
+  attribute type { text }
+div {
+  db.itermset.role.attribute = attribute role { text }
+  db.itermset.attlist =
+    db.itermset.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.itermset =
+    
+    ## A set of index terms in the meta-information of a document
+    element itermset { db.itermset.attlist, db.indexterm.singular+ }
+}
+db.indexterm.contentmodel =
+  db.primary?,
+  ((db.secondary,
+    ((db.tertiary, (db.see | db.seealso+)?)
+     | db.see
+     | db.seealso+)?)
+   | db.see
+   | db.seealso+)?
+div {
+  db.indexterm.singular.role.attribute = attribute role { text }
+  db.indexterm.singular.class.attribute =
+    
+    ## Identifies the class of index term
+    attribute class {
+      
+      ## A singular index term
+      "singular"
+    }
+  db.indexterm.singular.attlist =
+    db.indexterm.singular.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.significance.attribute?
+    & db.zone.attribute?
+    & db.indexterm.pagenum.attribute?
+    & db.scope.attribute?
+    & db.index.type.attribute?
+    & db.indexterm.singular.class.attribute?
+  db.indexterm.singular =
+    
+    ## A wrapper for an indexed term
+    element indexterm {
+      db.indexterm.singular.attlist, db.indexterm.contentmodel
+    }
+}
+div {
+  db.indexterm.startofrange.role.attribute = attribute role { text }
+  db.indexterm.startofrange.class.attribute =
+    
+    ## Identifies the class of index term
+    attribute class {
+      
+      ## The start of a range
+      "startofrange"
+    }
+  db.indexterm.startofrange.attlist =
+    db.indexterm.startofrange.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.significance.attribute?
+    & db.zone.attribute?
+    & db.indexterm.pagenum.attribute?
+    & db.scope.attribute?
+    & db.index.type.attribute?
+    & db.indexterm.startofrange.class.attribute
+  db.indexterm.startofrange =
+    
+    ## A wrapper for an indexed term that covers a range
+    element indexterm {
+      db.indexterm.startofrange.attlist, db.indexterm.contentmodel
+    }
+}
+div {
+  db.indexterm.endofrange.role.attribute = attribute role { text }
+  db.indexterm.endofrange.class.attribute =
+    
+    ## Identifies the class of index term
+    attribute class {
+      
+      ## The end of a range
+      "endofrange"
+    }
+  db.indexterm.endofrange.startref.attribute =
+    
+    ## Points to the start of the range
+    attribute startref { xsd:IDREF }
+  db.indexterm.endofrange.attlist =
+    db.indexterm.endofrange.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.indexterm.endofrange.class.attribute
+    & db.indexterm.endofrange.startref.attribute
+  db.indexterm.endofrange =
+    
+    ## Identifies the end of a range associated with an indexed term
+    element indexterm { db.indexterm.endofrange.attlist, empty }
+}
+div {
+  db.indexterm =
+    db.indexterm.singular
+    | db.indexterm.startofrange
+    | db.indexterm.endofrange
+}
+div {
+  db.primary.role.attribute = attribute role { text }
+  db.primary.attlist =
+    db.primary.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.sortas.attribute?
+  db.primary =
+    
+    ## The primary word or phrase under which an index term should be sorted
+    element primary { db.primary.attlist, db.all.inlines* }
+}
+div {
+  db.secondary.role.attribute = attribute role { text }
+  db.secondary.attlist =
+    db.secondary.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.sortas.attribute?
+  db.secondary =
+    
+    ## A secondary word or phrase in an index term
+    element secondary { db.secondary.attlist, db.all.inlines* }
+}
+div {
+  db.tertiary.role.attribute = attribute role { text }
+  db.tertiary.attlist =
+    db.tertiary.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.sortas.attribute?
+  db.tertiary =
+    
+    ## A tertiary word or phrase in an index term
+    element tertiary { db.tertiary.attlist, db.all.inlines* }
+}
+div {
+  db.see.role.attribute = attribute role { text }
+  db.see.attlist =
+    db.see.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.see =
+    
+    ## Part of an index term directing the reader instead to another entry in the index
+    element see { db.see.attlist, db.all.inlines* }
+}
+div {
+  db.seealso.role.attribute = attribute role { text }
+  db.seealso.attlist =
+    db.seealso.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.seealso =
+    
+    ## Part of an index term directing the reader also to another entry in the index
+    element seealso { db.seealso.attlist, db.all.inlines* }
+}
+div {
+  db.index.status.attribute = db.status.attribute
+  db.index.role.attribute = attribute role { text }
+  db.index.attlist =
+    db.index.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.label.attribute?
+    & db.index.status.attribute?
+    & db.index.type.attribute?
+  db.index.info = db._info
+  # 
+  # Yes, db.indexdiv* and db.indexentry*; that way an <index/> is valid.
+  # Authors can use an empty index to indicate where a generated index should
+  # appear.
+  db.index =
+    
+    ## An index to a book or part of a book
+    element index {
+      db.index.attlist,
+      db.index.info,
+      db.all.blocks*,
+      (db.indexdiv* | db.indexentry* | db.segmentedlist)
+    }
+}
+div {
+  db.setindex.status.attribute = db.status.attribute
+  db.setindex.role.attribute = attribute role { text }
+  db.setindex.attlist =
+    db.setindex.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.label.attribute?
+    & db.setindex.status.attribute?
+    & db.index.type.attribute?
+  db.setindex.info = db._info
+  db.setindex =
+    
+    ## An index to a set of books
+    element setindex {
+      db.setindex.attlist,
+      db.setindex.info,
+      db.all.blocks*,
+      (db.indexdiv* | db.indexentry*)
+    }
+}
+div {
+  db.indexdiv.status.attribute = db.status.attribute
+  db.indexdiv.role.attribute = attribute role { text }
+  db.indexdiv.attlist =
+    db.indexdiv.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.label.attribute?
+    & db.indexdiv.status.attribute?
+  db.indexdiv.info = db._info.title.req
+  db.indexdiv =
+    
+    ## A division in an index
+    element indexdiv {
+      db.indexdiv.attlist,
+      db.indexdiv.info,
+      db.all.blocks*,
+      (db.indexentry+ | db.segmentedlist)
+    }
+}
+div {
+  db.indexentry.role.attribute = attribute role { text }
+  db.indexentry.attlist =
+    db.indexentry.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.indexentry =
+    
+    ## An entry in an index
+    element indexentry {
+      db.indexentry.attlist,
+      db.primaryie,
+      (db.seeie | db.seealsoie)*,
+      (db.secondaryie, (db.seeie | db.seealsoie | db.tertiaryie)*)*
+    }
+}
+div {
+  db.primaryie.role.attribute = attribute role { text }
+  db.primaryie.attlist =
+    db.primaryie.role.attribute?
+    & db.common.attributes
+    & db.linkends.attribute?
+  db.primaryie =
+    
+    ## A primary term in an index entry, not in the text
+    element primaryie { db.primaryie.attlist, db.all.inlines* }
+}
+div {
+  db.secondaryie.role.attribute = attribute role { text }
+  db.secondaryie.attlist =
+    db.secondaryie.role.attribute?
+    & db.common.attributes
+    & db.linkends.attribute?
+  db.secondaryie =
+    
+    ## A secondary term in an index entry, rather than in the text
+    element secondaryie { db.secondaryie.attlist, db.all.inlines* }
+}
+div {
+  db.tertiaryie.role.attribute = attribute role { text }
+  db.tertiaryie.attlist =
+    db.tertiaryie.role.attribute?
+    & db.common.attributes
+    & db.linkends.attribute?
+  db.tertiaryie =
+    
+    ## A tertiary term in an index entry, rather than in the text
+    element tertiaryie { db.tertiaryie.attlist, db.all.inlines* }
+}
+div {
+  db.seeie.role.attribute = attribute role { text }
+  db.seeie.attlist =
+    db.seeie.role.attribute?
+    & db.common.attributes
+    & db.linkend.attribute?
+  db.seeie =
+    
+    ## A See
+    ## entry in an index, rather than in the text
+    element seeie { db.seeie.attlist, db.all.inlines* }
+}
+div {
+  db.seealsoie.role.attribute = attribute role { text }
+  db.seealsoie.attlist =
+    db.seealsoie.role.attribute?
+    & db.common.attributes
+    & db.linkends.attribute?
+  db.seealsoie =
+    
+    ## A See also
+    ##  entry in an index, rather than in the text
+    element seealsoie { db.seealsoie.attlist, db.all.inlines* }
+}
+db.toc.pagenum.attribute =
+  
+  ## Indicates the page on which this element occurs in some version of the printed document
+  attribute pagenum { text }
+div {
+  db.toc.role.attribute = attribute role { text }
+  db.toc.attlist =
+    db.toc.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.toc.info = db._info.title.only
+  db.toc =
+    
+    ## A table of contents
+    element toc {
+      db.toc.attlist,
+      db.toc.info,
+      db.all.blocks*,
+      (db.tocdiv | db.tocentry)*
+    }
+}
+div {
+  db.tocdiv.role.attribute = attribute role { text }
+  db.tocdiv.pagenum.attribute = db.toc.pagenum.attribute
+  db.tocdiv.attlist =
+    db.tocdiv.role.attribute?
+    & db.common.attributes
+    & db.tocdiv.pagenum.attribute?
+    & db.linkend.attribute?
+  db.tocdiv.info = db._info
+  db.tocdiv =
+    
+    ## A division in a table of contents
+    element tocdiv {
+      db.tocdiv.attlist,
+      db.tocdiv.info,
+      db.all.blocks*,
+      (db.tocdiv | db.tocentry)+
+    }
+}
+div {
+  db.tocentry.role.attribute = attribute role { text }
+  db.tocentry.pagenum.attribute = db.toc.pagenum.attribute
+  db.tocentry.attlist =
+    db.tocentry.role.attribute?
+    & db.common.attributes
+    & db.tocentry.pagenum.attribute?
+    & db.linkend.attribute?
+  db.tocentry =
+    
+    ## A component title in a table of contents
+    element tocentry { db.tocentry.attlist, db.all.inlines* }
+}
+db.task.info = db._info.title.req
+div {
+  db.task.role.attribute = attribute role { text }
+  db.task.attlist =
+    db.task.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.task =
+    
+    ## A task to be completed
+    element task {
+      db.task.attlist,
+      db.task.info,
+      db.tasksummary?,
+      db.taskprerequisites?,
+      db.procedure,
+      db.example*,
+      db.taskrelated?
+    }
+}
+div {
+  db.tasksummary.role.attribute = attribute role { text }
+  db.tasksummary.attlist =
+    db.tasksummary.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.tasksummary.info = db._info.title.only
+  db.tasksummary =
+    
+    ## A summary of a task
+    element tasksummary {
+      db.tasksummary.attlist, db.tasksummary.info, db.all.blocks+
+    }
+}
+div {
+  db.taskprerequisites.role.attribute = attribute role { text }
+  db.taskprerequisites.attlist =
+    db.taskprerequisites.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.taskprerequisites.info = db._info.title.only
+  db.taskprerequisites =
+    
+    ## The prerequisites for a task
+    element taskprerequisites {
+      db.taskprerequisites.attlist,
+      db.taskprerequisites.info,
+      db.all.blocks+
+    }
+}
+div {
+  db.taskrelated.role.attribute = attribute role { text }
+  db.taskrelated.attlist =
+    db.taskrelated.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.taskrelated.info = db._info.title.only
+  db.taskrelated =
+    
+    ## Information related to a task
+    element taskrelated {
+      db.taskrelated.attlist, db.taskrelated.info, db.all.blocks+
+    }
+}
+db.area.units.enumeration =
+  
+  ## Coordinates expressed as a pair of CALS graphic coordinates.
+  "calspair"
+  | 
+    ## Coordinates expressed as a line and column.
+    "linecolumn"
+  | 
+    ## Coordinates expressed as a pair of lines and columns.
+    "linecolumnpair"
+  | 
+    ## Coordinates expressed as a line range.
+    "linerange"
+db.area.units-enum.attribute =
+  
+  ## Identifies the units used in the coords attribute. The default units vary according to the type of callout specified: calspair
+  ##  for graphics and linecolumn
+  ##  for line-oriented elements.
+  attribute units { db.area.units.enumeration }?
+db.area.units-other.attributes =
+  
+  ## Indicates that non-standard units are used for this area
+  ## . In this case otherunits
+  ##  must be specified.
+  attribute units {
+    
+    ## Coordinates expressed in some non-standard units.
+    "other"
+  }?,
+  
+  ## Identifies the units used in the coords
+  ##  attribute when the units
+  ##  attribute is other
+  ## . This attribute is forbidden otherwise.
+  attribute otherunits { xsd:NMTOKEN }
+db.area.units.attribute =
+  db.area.units-enum.attribute | db.area.units-other.attributes
+div {
+  db.calloutlist.role.attribute = attribute role { text }
+  db.calloutlist.attlist =
+    db.calloutlist.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.calloutlist.info = db._info.title.only
+  db.calloutlist =
+    
+    ## A list of callout
+    ## s
+    element calloutlist {
+      db.calloutlist.attlist,
+      db.calloutlist.info,
+      db.all.blocks*,
+      db.callout+
+    }
+}
+div {
+  db.callout.role.attribute = attribute role { text }
+  db.callout.arearefs.attribute =
+    
+    ## Identifies the areas described by this callout.
+    attribute arearefs { xsd:IDREFS }
+  db.callout.attlist =
+    db.callout.role.attribute?
+    & db.common.attributes
+    & db.callout.arearefs.attribute
+  db.callout =
+    
+    ## A called out
+    ##  description of a marked area
+    element callout { db.callout.attlist, db.all.blocks+ }
+}
+div {
+  db.programlistingco.role.attribute = attribute role { text }
+  db.programlistingco.attlist =
+    db.programlistingco.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.programlistingco.info = db._info.title.forbidden
+  db.programlistingco =
+    
+    ## A program listing with associated areas used in callouts
+    element programlistingco {
+      db.programlistingco.attlist,
+      db.programlistingco.info,
+      db.areaspec,
+      db.programlisting,
+      db.calloutlist*
+    }
+}
+div {
+  db.areaspec.role.attribute = attribute role { text }
+  db.areaspec.attlist =
+    db.areaspec.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.area.units.attribute
+  db.areaspec =
+    
+    ## A collection of regions in a graphic or code example
+    element areaspec { db.areaspec.attlist, (db.area | db.areaset)+ }
+}
+div {
+  db.area.role.attribute = attribute role { text }
+  db.area.linkends.attribute =
+    
+    ## Point to the callout
+    ## s which refer to this area. (This provides bidirectional linking which may be useful in online presentation.)
+    attribute linkends { xsd:IDREFS }
+  db.area.label.attribute =
+    
+    ## Specifies an identifying number or string that may be used in presentation. The area label might be drawn on top of the figure, for example, at the position indicated by the coords attribute.
+    attribute label { text }
+  db.area.coords.attribute =
+    
+    ## Provides the coordinates of the area. The coordinates must be interpreted using the units
+    ##  specified.
+    attribute coords { text }
+  db.area.attlist =
+    db.area.role.attribute?
+    & db.common.idreq.attributes
+    & db.area.units.attribute
+    & (db.area.linkends.attribute | db.href.attributes)?
+    & db.area.label.attribute?
+    & db.area.coords.attribute
+  db.area =
+    
+    ## A region defined for a callout in a graphic or code example
+    element area { db.area.attlist, db.alt? }
+}
+div {
+  # The only difference is that xml:id is optional
+  db.area.inareaset.attlist =
+    db.area.role.attribute?
+    & db.common.attributes
+    & db.area.units.attribute
+    & (db.area.linkends.attribute | db.href.attributes)?
+    & db.area.label.attribute?
+    & db.area.coords.attribute
+  db.area.inareaset =
+    
+    ## A region defined for a callout in a graphic or code example
+    element area { db.area.inareaset.attlist, db.alt? }
+}
+div {
+  db.areaset.role.attribute = attribute role { text }
+  db.areaset.linkends.attribute = db.linkends.attribute
+  db.areaset.label.attribute = db.label.attribute
+  db.areaset.attlist =
+    db.areaset.role.attribute?
+    & db.common.idreq.attributes
+    & db.area.units.attribute
+    & (db.areaset.linkends.attribute | db.href.attributes)?
+    & db.areaset.label.attribute?
+  db.areaset =
+    
+    ## A set of related areas in a graphic or code example
+    element areaset { db.areaset.attlist, db.area.inareaset+ }
+}
+div {
+  db.screenco.role.attribute = attribute role { text }
+  db.screenco.attlist =
+    db.screenco.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.screenco.info = db._info.title.forbidden
+  db.screenco =
+    
+    ## A screen with associated areas used in callouts
+    element screenco {
+      db.screenco.attlist,
+      db.screenco.info,
+      db.areaspec,
+      db.screen,
+      db.calloutlist*
+    }
+}
+div {
+  db.imageobjectco.role.attribute = attribute role { text }
+  db.imageobjectco.attlist =
+    db.imageobjectco.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.imageobjectco.info = db._info.title.forbidden
+  db.imageobjectco =
+    
+    ## A wrapper for an image object with callouts
+    element imageobjectco {
+      db.imageobjectco.attlist,
+      db.imageobjectco.info,
+      db.areaspec,
+      db.imageobject+,
+      db.calloutlist*
+    }
+}
+div {
+  db.co.role.attribute = attribute role { text }
+  db.co.linkends.attribute = db.linkends.attribute
+  db.co.label.attribute = db.label.attribute
+  db.co.attlist =
+    db.co.role.attribute?
+    & db.common.idreq.attributes
+    & db.co.linkends.attribute?
+    & db.co.label.attribute?
+  db.co =
+    
+    ## The location of a callout embedded in text
+    element co { db.co.attlist, empty }
+}
+div {
+  db.coref.role.attribute = attribute role { text }
+  db.coref.label.attribute = db.label.attribute
+  db.coref.attlist =
+    db.coref.role.attribute?
+    & db.common.attributes
+    & db.linkend.attribute
+    & db.coref.label.attribute?
+  db.coref =
+    
+    ## A cross reference to a co
+    element coref { db.coref.attlist, empty }
+}
+div {
+  db.productionset.role.attribute = attribute role { text }
+  db.productionset.attlist =
+    db.productionset.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.productionset.info = db._info.title.only
+  db.productionset =
+    
+    ## A set of EBNF productions
+    element productionset {
+      db.productionset.attlist,
+      db.productionset.info,
+      (db.production | db.productionrecap)+
+    }
+}
+div {
+  db.production.role.attribute = attribute role { text }
+  db.production.attlist =
+    db.production.role.attribute?
+    & db.common.idreq.attributes
+    & db.common.linking.attributes
+  db.production =
+    
+    ## A production in a set of EBNF productions
+    element production {
+      db.production.attlist, db.lhs, db.rhs+, db.constraint*
+    }
+}
+div {
+  db.lhs.role.attribute = attribute role { text }
+  db.lhs.attlist =
+    db.lhs.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.lhs =
+    
+    ## The left-hand side of an EBNF production
+    element lhs { db.lhs.attlist, text }
+}
+div {
+  db.rhs.role.attribute = attribute role { text }
+  db.rhs.attlist =
+    db.rhs.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.rhs =
+    
+    ## The right-hand side of an EBNF production
+    element rhs {
+      db.rhs.attlist,
+      (text | db.nonterminal | db.lineannotation | db.sbr)*
+    }
+}
+div {
+  db.nonterminal.role.attribute = attribute role { text }
+  db.nonterminal.def.attribute =
+    
+    ## Specifies a URI that points to a production
+    ## where the nonterminal
+    ##  is defined
+    attribute def { xsd:anyURI }
+  db.nonterminal.attlist =
+    db.nonterminal.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.nonterminal.def.attribute
+  db.nonterminal =
+    
+    ## A non-terminal in an EBNF production
+    element nonterminal { db.nonterminal.attlist, text }
+}
+div {
+  db.constraint.role.attribute = attribute role { text }
+  db.constraint.attlist =
+    db.constraint.role.attribute?
+    & db.common.attributes
+    & db.common.req.linking.attributes
+  db.constraint =
+    
+    ## A constraint in an EBNF production
+    element constraint { db.constraint.attlist, empty }
+}
+div {
+  db.productionrecap.role.attribute = attribute role { text }
+  db.productionrecap.attlist =
+    db.productionrecap.role.attribute?
+    & db.common.attributes
+    & db.common.req.linking.attributes
+  db.productionrecap =
+    
+    ## A cross-reference to an EBNF production
+    element productionrecap { db.productionrecap.attlist, empty }
+}
+div {
+  db.constraintdef.role.attribute = attribute role { text }
+  db.constraintdef.attlist =
+    db.constraintdef.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.constraintdef.info = db._info.title.only
+  db.constraintdef =
+    
+    ## The definition of a constraint in an EBNF production
+    element constraintdef {
+      db.constraintdef.attlist, db.constraintdef.info, db.all.blocks+
+    }
+}
+db.char.attribute =
+  
+  ## Specifies the alignment character when align
+  ##  is set to char
+  ## .
+  attribute char { text }
+db.charoff.attribute =
+  
+  ## Specifies the percentage of the column's total width that should appear to the left of the first occurance of the character identified in char
+  ##  when align
+  ##  is set to char
+  ## .
+  attribute charoff {
+    xsd:decimal { minExclusive = "0" maxExclusive = "100" }
+  }
+db.frame.attribute =
+  
+  ## Specifies how the table is to be framed. Note that there is no way to obtain a border on only the starting edge (left, in left-to-right writing systems) of the table.
+  attribute frame {
+    
+    ## Frame all four sides of the table. In some environments with limited control over table border formatting, such as HTML, this may imply additional borders.
+    "all"
+    | 
+      ## Frame only the bottom of the table.
+      "bottom"
+    | 
+      ## Place no border on the table. In some environments with limited control over table border formatting, such as HTML, this may disable other borders as well.
+      "none"
+    | 
+      ## Frame the left and right sides of the table.
+      "sides"
+    | 
+      ## Frame the top of the table.
+      "top"
+    | 
+      ## Frame the top and bottom of the table.
+      "topbot"
+  }
+db.colsep.attribute =
+  
+  ## Specifies the presence or absence of the column separator
+  attribute colsep {
+    
+    ## No column separator rule.
+    "0"
+    | 
+      ## Provide a column separator rule on the right
+      "1"
+  }
+db.rowsep.attribute =
+  
+  ## Specifies the presence or absence of the row separator
+  attribute rowsep {
+    
+    ## No row separator rule.
+    "0"
+    | 
+      ## Provide a row separator rule below
+      "1"
+  }
+db.orient.attribute =
+  
+  ## Specifies the orientation of the table
+  attribute orient {
+    
+    ## 90 degrees counter-clockwise from the rest of the text flow.
+    "land"
+    | 
+      ## The same orientation as the rest of the text flow.
+      "port"
+  }
+db.tabstyle.attribute =
+  
+  ## Specifies the table style
+  attribute tabstyle { text }
+db.rowheader.attribute =
+  
+  ## Indicates whether or not the entries in the first column should be considered row headers
+  attribute rowheader {
+    
+    ## Indicates that entries in the first column of the table are functionally row headers (analogous to the way that a thead provides column headers).
+    "firstcol"
+    | 
+      ## Indicates that entries in the first column have no special significance with respect to column headers.
+      "norowheader"
+  }
+db.align.attribute =
+  
+  ## Specifies the horizontal alignment of text in an entry.
+  attribute align {
+    
+    ## Centered.
+    "center"
+    | 
+      ## Aligned on a particular character.
+      "char"
+    | 
+      ## Left and right justified.
+      "justify"
+    | 
+      ## Left justified.
+      "left"
+    | 
+      ## Right justified.
+      "right"
+  }
+db.valign.attribute =
+  
+  ## Specifies the vertical alignment of text in an entry.
+  attribute valign {
+    
+    ## Aligned on the bottom of the entry.
+    "bottom"
+    | 
+      ## Aligned in the middle.
+      "middle"
+    | 
+      ## Aligned at the top of the entry.
+      "top"
+  }
+db.specify-col-by-colname.attributes =
+  
+  ## Specifies a column specification by name.
+  attribute colname { text }
+db.specify-col-by-namest.attributes =
+  
+  ## Specifies a starting column by name.
+  attribute namest { text }
+db.specify-span-by-spanspec.attributes =
+  
+  ## Specifies a span by name.
+  attribute spanname { text }
+db.specify-span-directly.attributes =
+  
+  ## Specifies a starting column by name.
+  attribute namest { text }
+  & 
+    ## Specifies an ending column by name.
+    attribute nameend { text }
+db.column-spec.attributes =
+  db.specify-col-by-colname.attributes
+  | db.specify-col-by-namest.attributes
+  | db.specify-span-by-spanspec.attributes
+  | db.specify-span-directly.attributes
+db.colname.attribute =
+  
+  ## Provides a name for a column specification.
+  attribute colname { text }
+db.spanname.attribute =
+  
+  ## Provides a name for a span specification.
+  attribute spanname { text }
+div {
+  db.tgroup.role.attribute = attribute role { text }
+  db.tgroup.tgroupstyle.attribute =
+    
+    ## Additional style information for downstream processing; typically the name of a style.
+    attribute tgroupstyle { text }
+  db.tgroup.cols.attribute =
+    
+    ## The number of columns in the table. Must be an integer greater than zero.
+    attribute cols { xsd:positiveInteger }
+  db.tgroup.attlist =
+    db.tgroup.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.char.attribute?
+    & db.charoff.attribute?
+    & db.tgroup.tgroupstyle.attribute?
+    & db.tgroup.cols.attribute
+    & db.colsep.attribute?
+    & db.rowsep.attribute?
+    & db.align.attribute?
+  db.tgroup =
+    
+    ## A wrapper for the main content of a table, or part of a table
+    element tgroup {
+      db.tgroup.attlist,
+      db.colspec*,
+      db.spanspec*,
+      db.cals.thead?,
+      db.cals.tfoot?,
+      db.cals.tbody
+    }
+}
+div {
+  db.colspec.role.attribute = attribute role { text }
+  db.colspec.colnum.attribute =
+    
+    ## The number of the column to which this specification applies. Must be greater than any preceding column number. Defaults to one more than the number of the preceding column, if there is one, or one.
+    attribute colnum { xsd:positiveInteger }
+  db.colspec.colwidth.attribute =
+    
+    ## Specifies the width of the column.
+    attribute colwidth { text }
+  db.colspec.attlist =
+    db.colspec.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.colspec.colnum.attribute?
+    & db.char.attribute?
+    & db.colsep.attribute?
+    & db.colspec.colwidth.attribute?
+    & db.charoff.attribute?
+    & db.colname.attribute?
+    & db.rowsep.attribute?
+    & db.align.attribute?
+  db.colspec =
+    
+    ## Specifications for a column in a table
+    element colspec { db.colspec.attlist, empty }
+}
+div {
+  db.spanspec.role.attribute = attribute role { text }
+  db.spanspec.namest.attribute =
+    
+    ## Specifies a starting column by name.
+    attribute namest { text }
+  db.spanspec.nameend.attribute =
+    
+    ## Specifies an ending column by name.
+    attribute nameend { text }
+  db.spanspec.attlist =
+    db.spanspec.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.spanname.attribute
+    & db.spanspec.namest.attribute
+    & db.spanspec.nameend.attribute
+    & db.char.attribute?
+    & db.colsep.attribute?
+    & db.charoff.attribute?
+    & db.rowsep.attribute?
+    & db.align.attribute?
+  db.spanspec =
+    
+    ## Formatting information for a spanned column in a table
+    element spanspec { db.spanspec.attlist, empty }
+}
+div {
+  db.cals.thead.role.attribute = attribute role { text }
+  db.cals.thead.attlist =
+    db.cals.thead.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.valign.attribute?
+  db.cals.thead =
+    
+    ## A table header consisting of one or more rows
+    element thead { db.cals.thead.attlist, db.colspec*, db.row+ }
+}
+div {
+  db.cals.tfoot.role.attribute = attribute role { text }
+  db.cals.tfoot.attlist =
+    db.cals.tfoot.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.valign.attribute?
+  db.cals.tfoot =
+    
+    ## A table footer consisting of one or more rows
+    element tfoot { db.cals.tfoot.attlist, db.colspec*, db.row+ }
+}
+div {
+  db.cals.tbody.role.attribute = attribute role { text }
+  db.cals.tbody.attlist =
+    db.cals.tbody.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.valign.attribute?
+  db.cals.tbody =
+    
+    ## A wrapper for the rows of a table or informal table
+    element tbody { db.cals.tbody.attlist, db.row+ }
+}
+div {
+  db.row.role.attribute = attribute role { text }
+  db.row.attlist =
+    db.row.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.rowsep.attribute?
+    & db.valign.attribute?
+  db.row =
+    
+    ## A row in a table
+    element row { db.row.attlist, (db.entry | db.entrytbl)+ }
+}
+div {
+  db.entry.role.attribute = attribute role { text }
+  db.entry.morerows.attribute =
+    
+    ## Specifies the number of additional rows which this entry occupies. Defaults to zero.
+    attribute morerows { xsd:integer }
+  db.entry.rotate.attribute =
+    
+    ## Specifies the rotation of this entry. A value of 1 (true) rotates the cell 90 degrees counter-clockwise. A value of 0 (false) leaves the cell unrotated.
+    attribute rotate {
+      
+      ## Do not rotate the cell.
+      "0"
+      | 
+        ## Rotate the cell 90 degrees counter-clockwise.
+        "1"
+    }
+  db.entry.attlist =
+    db.entry.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.valign.attribute?
+    & db.char.attribute?
+    & db.colsep.attribute?
+    & db.charoff.attribute?
+    & db.entry.morerows.attribute?
+    & db.column-spec.attributes?
+    & db.rowsep.attribute?
+    & db.entry.rotate.attribute?
+    & db.align.attribute?
+  db.entry =
+    
+    ## A cell in a table
+    element entry {
+      db.entry.attlist, (db.all.inlines* | db.all.blocks*)
+    }
+}
+div {
+  db.entrytbl.role.attribute = attribute role { text }
+  db.entrytbl.tgroupstyle.attribute =
+    
+    ## Additional style information for downstream processing; typically the name of a style.
+    attribute tgroupstyle { text }
+  db.entrytbl.cols.attribute =
+    
+    ## The number of columns in the entry table. Must be an integer greater than zero.
+    attribute cols { xsd:positiveInteger }
+  db.entrytbl.attlist =
+    db.entrytbl.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.char.attribute?
+    & db.charoff.attribute?
+    & db.column-spec.attributes?
+    & db.entrytbl.tgroupstyle.attribute?
+    & db.entrytbl.cols.attribute?
+    & db.colsep.attribute?
+    & db.rowsep.attribute?
+    & db.align.attribute?
+  db.entrytbl =
+    
+    ## A subtable appearing in place of an entry in a table
+    element entrytbl {
+      db.entrytbl.attlist,
+      db.colspec*,
+      db.spanspec*,
+      db.cals.entrytbl.thead?,
+      db.cals.entrytbl.tbody
+    }
+}
+div {
+  db.cals.entrytbl.thead.role.attribute = attribute role { text }
+  db.cals.entrytbl.thead.attlist =
+    db.cals.entrytbl.thead.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.valign.attribute?
+  db.cals.entrytbl.thead =
+    
+    ## A table header consisting of one or more rows
+    element thead {
+      db.cals.entrytbl.thead.attlist, db.colspec*, db.entrytbl.row+
+    }
+}
+div {
+  db.cals.entrytbl.tbody.role.attribute = attribute role { text }
+  db.cals.entrytbl.tbody.attlist =
+    db.cals.entrytbl.tbody.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.valign.attribute?
+  db.cals.entrytbl.tbody =
+    
+    ## A wrapper for the rows of a table or informal table
+    element tbody { db.cals.entrytbl.tbody.attlist, db.entrytbl.row+ }
+}
+div {
+  db.entrytbl.row.role.attribute = attribute role { text }
+  db.entrytbl.row.attlist =
+    db.entrytbl.row.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.rowsep.attribute?
+    & db.valign.attribute?
+  db.entrytbl.row =
+    
+    ## A row in a table
+    element row { db.entrytbl.row.attlist, db.entry+ }
+}
+div {
+  db.cals.table.role.attribute = attribute role { text }
+  db.cals.table.label.attribute = db.label.attribute
+  db.cals.table.attlist =
+    db.cals.table.role.attribute?
+    & db.cals.table.label.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.tabstyle.attribute?
+    & db.floatstyle.attribute?
+    & db.orient.attribute?
+    & db.colsep.attribute?
+    & db.rowsep.attribute?
+    & db.frame.attribute?
+    & db.pgwide.attribute?
+    & 
+      ## Indicates if the short or long title should be used in a List of Tables
+      attribute shortentry {
+        
+        ## Indicates that the full title should be used.
+        "0"
+        | 
+          ## Indicates that the short short title (titleabbrev) should be used.
+          "1"
+      }?
+    & 
+      ## Indicates if the table should appear in a List of Tables
+      attribute tocentry {
+        
+        ## Indicates that the table should not occur in the List of Tables.
+        "0"
+        | 
+          ## Indicates that the table should appear in the List of Tables.
+          "1"
+      }?
+    & db.rowheader.attribute?
+  db.cals.table.info = db._info.title.onlyreq
+  db.cals.table =
+    
+    ## A formal table in a document
+    element table {
+      db.cals.table.attlist,
+      db.cals.table.info,
+      (db.alt? & db.indexing.inlines* & db.textobject*),
+      (db.mediaobject+ | db.tgroup+),
+      db.caption?
+    }
+}
+div {
+  db.cals.informaltable.role.attribute = attribute role { text }
+  db.cals.informaltable.attlist =
+    db.cals.informaltable.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.tabstyle.attribute?
+    & db.floatstyle.attribute?
+    & db.orient.attribute?
+    & db.colsep.attribute?
+    & db.rowsep.attribute?
+    & db.frame.attribute?
+    & db.pgwide.attribute?
+    & db.rowheader.attribute?
+  db.cals.informaltable.info = db._info.title.forbidden
+  db.cals.informaltable =
+    
+    ## A table without a title
+    element informaltable {
+      db.cals.informaltable.attlist,
+      db.cals.informaltable.info,
+      (db.alt? & db.indexing.inlines* & db.textobject*),
+      (db.mediaobject+ | db.tgroup+),
+      db.caption?
+    }
+}
+db.html.coreattrs =
+  
+  ## This attribute assigns a class name or set of class names to an element. Any number of elements may be assigned the same class name or names. Multiple class names must be separated by white space characters.
+  attribute class { text }?
+  & 
+    ## This attribute specifies style information for the current element.
+    attribute style { text }?
+  & 
+    ## This attribute offers advisory information about the element for which it is set.
+    attribute title { text }?
+db.html.i18n =
+  
+  ## This attribute specifies the base language of an element's attribute values and text content. The default value of this attribute is unknown.
+  attribute lang { text }?
+db.html.events =
+  
+  ## Occurs when the pointing device button is clicked over an element.
+  attribute onclick { text }?
+  & 
+    ## Occurs when the pointing device button is double clicked over an element.
+    attribute ondblclick { text }?
+  & 
+    ## Occurs when the pointing device button is pressed over an element.
+    attribute onmousedown { text }?
+  & 
+    ## Occurs when the pointing device button is released over an element.
+    attribute onmouseup { text }?
+  & 
+    ## Occurs when the pointing device is moved onto an element.
+    attribute onmouseover { text }?
+  & 
+    ## Occurs when the pointing device is moved while it is over an element.
+    attribute onmousemove { text }?
+  & 
+    ## Occurs when the pointing device is moved away from an element.
+    attribute onmouseout { text }?
+  & 
+    ## Occurs when a key is pressed and released over an element.
+    attribute onkeypress { text }?
+  & 
+    ## Occurs when a key is pressed down over an element.
+    attribute onkeydown { text }?
+  & 
+    ## Occurs when a key is released over an element.
+    attribute onkeyup { text }?
+db.html.attrs =
+  db.common.attributes
+  & db.html.coreattrs
+  & db.html.i18n
+  & db.html.events
+db.html.cellhalign =
+  
+  ## Specifies the alignment of data and the justification of text in a cell.
+  attribute align {
+    
+    ## Left-flush data/Left-justify text. This is the default value for table data.
+    "left"
+    | 
+      ## Center data/Center-justify text. This is the default value for table headers.
+      "center"
+    | 
+      ## Right-flush data/Right-justify text.
+      "right"
+    | 
+      ## Double-justify text.
+      "justify"
+    | 
+      ## Align text around a specific character. If a user agent doesn't support character alignment, behavior in the presence of this value is unspecified.
+      "char"
+  }?
+  & 
+    ## This attribute specifies a single character within a text fragment to act as an axis for alignment. The default value for this attribute is the decimal point character for the current language as set by the lang attribute (e.g., the period in English and the comma in French). User agents are not required to support this attribute.
+    attribute char { text }?
+  & 
+    ## When present, this attribute specifies the offset to the first occurrence of the alignment character on each line. If a line doesn't include the alignment character, it should be horizontally shifted to end at the alignment position. When charoff is used to set the offset of an alignment character, the direction of offset is determined by the current text direction (set by the dir attribute). In left-to-right texts (the default), offset is from the left margin. In right-to-left texts, offset is from the right margin. User agents are not required to support this attribute.
+    attribute charoff {
+      xsd:integer >> a:documentation [ "An explicit offset." ]
+      | xsd:string { pattern = "[0-9]+%" }
+        >> a:documentation [ "A percentage offset." ]
+    }?
+db.html.cellvalign =
+  
+  ## Specifies the vertical position of data within a cell.
+  attribute valign {
+    
+    ## Cell data is flush with the top of the cell.
+    "top"
+    | 
+      ## Cell data is centered vertically within the cell. This is the default value.
+      "middle"
+    | 
+      ## Cell data is flush with the bottom of the cell.
+      "bottom"
+    | 
+      ## All cells in the same row as a cell whose valign attribute has this value should have their textual data positioned so that the first text line occurs on a baseline common to all cells in the row. This constraint does not apply to subsequent text lines in these cells.
+      "baseline"
+  }?
+db.html.table.attributes =
+  
+  ## Provides a summary of the table's purpose and structure for user agents rendering to non-visual media such as speech and Braille.
+  attribute summary { text }?
+  & 
+    ## Specifies the desired width of the entire table and is intended for visual user agents. When the value is a percentage value, the value is relative to the user agent's available horizontal space. In the absence of any width specification, table width is determined by the user agent.
+    attribute width {
+      xsd:integer >> a:documentation [ "An explicit width." ]
+      | xsd:string { pattern = "[0-9]+%" }
+        >> a:documentation [ "A percentage width." ]
+    }?
+  & 
+    ## Specifies the width (in pixels only) of the frame around a table.
+    attribute border { xsd:nonNegativeInteger }?
+  & 
+    ## Specifies which sides of the frame surrounding a table will be visible.
+    attribute frame {
+      
+      ## No sides. This is the default value.
+      "void"
+      | 
+        ## The top side only.
+        "above"
+      | 
+        ## The bottom side only.
+        "below"
+      | 
+        ## The top and bottom sides only.
+        "hsides"
+      | 
+        ## The left-hand side only.
+        "lhs"
+      | 
+        ## The right-hand side only.
+        "rhs"
+      | 
+        ## The right and left sides only.
+        "vsides"
+      | 
+        ## All four sides.
+        "box"
+      | 
+        ## All four sides.
+        "border"
+    }?
+  & 
+    ## Specifies which rules will appear between cells within a table. The rendering of rules is user agent dependent.
+    attribute rules {
+      
+      ## No rules. This is the default value.
+      "none"
+      | 
+        ## Rules will appear between row groups (see thead, tfoot, and tbody) and column groups (see colgroup and col) only.
+        "groups"
+      | 
+        ## Rules will appear between rows only.
+        "rows"
+      | 
+        ## Rules will appear between columns only.
+        "cols"
+      | 
+        ## Rules will appear between all rows and columns.
+        "all"
+    }?
+  & 
+    ## Specifies how much space the user agent should leave between the left side of the table and the left-hand side of the leftmost column, the top of the table and the top side of the topmost row, and so on for the right and bottom of the table. The attribute also specifies the amount of space to leave between cells.
+    attribute cellspacing {
+      xsd:integer >> a:documentation [ "An explicit spacing." ]
+      | xsd:string { pattern = "[0-9]+%" }
+        >> a:documentation [ "A percentage spacing." ]
+    }?
+  & 
+    ## Specifies the amount of space between the border of the cell and its contents. If the value of this attribute is a pixel length, all four margins should be this distance from the contents. If the value of the attribute is a percentage length, the top and bottom margins should be equally separated from the content based on a percentage of the available vertical space, and the left and right margins should be equally separated from the content based on a percentage of the available horizontal space.
+    attribute cellpadding {
+      xsd:integer >> a:documentation [ "An explicit padding." ]
+      | xsd:string { pattern = "[0-9]+%" }
+        >> a:documentation [ "A percentage padding." ]
+    }?
+db.html.tablecell.attributes =
+  
+  ## Provides an abbreviated form of the cell's content and may be rendered by user agents when appropriate in place of the cell's content. Abbreviated names should be short since user agents may render them repeatedly. For instance, speech synthesizers may render the abbreviated headers relating to a particular cell before rendering that cell's content.
+  attribute abbr { text }?
+  & 
+    ## This attribute may be used to place a cell into conceptual categories that can be considered to form axes in an n-dimensional space. User agents may give users access to these categories (e.g., the user may query the user agent for all cells that belong to certain categories, the user agent may present a table in the form of a table of contents, etc.). Please consult an HTML reference for more details.
+    attribute axis { text }?
+  & 
+    ## Specifies the list of header cells that provide header information for the current data cell. The value of this attribute is a space-separated list of cell names; those cells must be named by setting their id attribute. Authors generally use the headers attribute to help non-visual user agents render header information about data cells (e.g., header information is spoken prior to the cell data), but the attribute may also be used in conjunction with style sheets.
+    attribute headers { text }?
+  & 
+    ## Specifies the set of data cells for which the current header cell provides header information. This attribute may be used in place of the headers attribute, particularly for simple tables.
+    attribute scope {
+      
+      ## The current cell provides header information for the rest of the row that contains it
+      "row"
+      | 
+        ## The current cell provides header information for the rest of the column that contains it.
+        "col"
+      | 
+        ## The header cell provides header information for the rest of the row group that contains it.
+        "rowgroup"
+      | 
+        ## The header cell provides header information for the rest of the column group that contains it.
+        "colgroup"
+    }?
+  & 
+    ## Specifies the number of rows spanned by the current cell. The default value of this attribute is one (1
+    ## ). The value zero (0
+    ## ) means that the cell spans all rows from the current row to the last row of the table section (thead
+    ## , tbody
+    ## , or tfoot
+    ## ) in which the cell is defined.
+    attribute rowspan { xsd:nonNegativeInteger }?
+  & 
+    ## Specifies the number of columns spanned by the current cell. The default value of this attribute is one (1
+    ## ). The value zero (0
+    ## ) means that the cell spans all columns from the current column to the last column of the column group (colgroup
+    ## ) in which the cell is defined.
+    attribute colspan { xsd:nonNegativeInteger }?
+db.html.table.info = db._info.title.forbidden
+db.html.table.model =
+  db.html.table.info?,
+  db.html.caption,
+  (db.html.col* | db.html.colgroup*),
+  db.html.thead?,
+  db.html.tfoot?,
+  (db.html.tbody+ | db.html.tr+)
+db.html.informaltable.info = db._info.title.forbidden
+db.html.informaltable.model =
+  db.html.informaltable.info?,
+  (db.html.col* | db.html.colgroup*),
+  db.html.thead?,
+  db.html.tfoot?,
+  (db.html.tbody+ | db.html.tr+)
+div {
+  db.html.table.role.attribute = attribute role { text }
+  db.html.table.label.attribute = db.label.attribute
+  db.html.table.attlist =
+    db.html.attrs
+    & db.html.table.attributes
+    & db.html.table.role.attribute?
+    & db.html.table.label.attribute?
+    & db.orient.attribute?
+    & db.pgwide.attribute?
+    & db.tabstyle.attribute?
+    & db.floatstyle.attribute?
+  db.html.table =
+    
+    ## A formal (captioned) HTML table in a document
+    element table { db.html.table.attlist, db.html.table.model }
+}
+div {
+  db.html.informaltable.role.attribute = attribute role { text }
+  db.html.informaltable.label.attribute = db.label.attribute
+  db.html.informaltable.attlist =
+    db.html.attrs
+    & db.html.table.attributes
+    & db.html.informaltable.role.attribute?
+    & db.html.informaltable.label.attribute?
+    & db.orient.attribute?
+    & db.pgwide.attribute?
+    & db.tabstyle.attribute?
+    & db.floatstyle.attribute?
+  db.html.informaltable =
+    
+    ## An HTML table without a title
+    element informaltable {
+      db.html.informaltable.attlist, db.html.informaltable.model
+    }
+}
+div {
+  db.html.caption.attlist = db.html.attrs
+  db.html.caption =
+    
+    ## An HTML table caption
+    element caption { db.html.caption.attlist, db.all.inlines* }
+}
+div {
+  db.html.col.attlist =
+    db.html.attrs
+    & 
+      ## This attribute, whose value must be an integer > 0, specifies the number of columns spanned
+      ##  by the col
+      ##  element; the col
+      ##  element shares its attributes with all the columns it spans. The default value for this attribute is 1 (i.e., a single column). If the span attribute is set to N > 1, the current col
+      ##  element shares its attributes with the next N-1 columns.
+      attribute span { xsd:nonNegativeInteger }?
+    & 
+      ## Specifies a default width for each column spanned by the current col
+      ##  element. It has the same meaning as the width
+      ##  attribute for the colgroup
+      ##  element and overrides it.
+      attribute width { text }?
+    & db.html.cellhalign
+    & db.html.cellvalign
+  db.html.col =
+    
+    ## Specifications for a column in an HTML table
+    element col { db.html.col.attlist, empty }
+}
+div {
+  db.html.colgroup.attlist =
+    db.html.attrs
+    & 
+      ## This attribute, which must be an integer > 0, specifies the number of columns in a column group. In the absence of a span attribute, each colgroup
+      ##  defines a column group containing one column. If the span attribute is set to N > 0, the current colgroup
+      ##  element defines a column group containing N columns. User agents must ignore this attribute if the colgroup
+      ##  element contains one or more col
+      ##  elements.
+      attribute span { xsd:nonNegativeInteger }?
+    & 
+      ## This attribute specifies a default width for each column in the current column group. In addition to the standard pixel, percentage, and relative values, this attribute allows the special form 0*
+      ##  (zero asterisk) which means that the width of the each column in the group should be the minimum width necessary to hold the column's contents. This implies that a column's entire contents must be known before its width may be correctly computed. Authors should be aware that specifying 0*
+      ##  will prevent visual user agents from rendering a table incrementally. This attribute is overridden for any column in the column group whose width is specified via a col
+      ##  element.
+      attribute width { text }?
+    & db.html.cellhalign
+    & db.html.cellvalign
+  db.html.colgroup =
+    
+    ## A group of columns in an HTML table
+    element colgroup { db.html.colgroup.attlist, db.html.col* }
+}
+div {
+  db.html.thead.attlist =
+    db.html.attrs & db.html.cellhalign & db.html.cellvalign
+  db.html.thead =
+    
+    ## A table header consisting of one or more rows in an HTML table
+    element thead { db.html.thead.attlist, db.html.tr+ }
+}
+div {
+  db.html.tfoot.attlist =
+    db.html.attrs & db.html.cellhalign & db.html.cellvalign
+  db.html.tfoot =
+    
+    ## A table footer consisting of one or more rows in an HTML table
+    element tfoot { db.html.tfoot.attlist, db.html.tr+ }
+}
+div {
+  db.html.tbody.attlist =
+    db.html.attrs & db.html.cellhalign & db.html.cellvalign
+  db.html.tbody =
+    
+    ## A wrapper for the rows of an HTML table or informal HTML table
+    element tbody { db.html.tbody.attlist, db.html.tr+ }
+}
+div {
+  db.html.tr.attlist =
+    db.html.attrs & db.html.cellhalign & db.html.cellvalign
+  db.html.tr =
+    
+    ## A row in an HTML table
+    element tr { db.html.tr.attlist, (db.html.th | db.html.td)+ }
+}
+div {
+  db.html.th.attlist =
+    db.html.attrs
+    & db.html.tablecell.attributes
+    & db.html.cellhalign
+    & db.html.cellvalign
+  db.html.th =
+    
+    ## A table header entry in an HTML table
+    element th {
+      db.html.th.attlist, (db.all.inlines* | db.all.blocks*)
+    }
+}
+div {
+  db.html.td.attlist =
+    db.html.attrs
+    & db.html.tablecell.attributes
+    & db.html.cellhalign
+    & db.html.cellvalign
+  db.html.td =
+    
+    ## A table entry in an HTML table
+    element td {
+      db.html.td.attlist, (db.all.inlines* | db.all.blocks*)
+    }
+}
+div {
+  db.msgset.role.attribute = attribute role { text }
+  db.msgset.attlist =
+    db.msgset.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.msgset.info = db._info.title.only
+  db.msgset =
+    
+    ## A detailed set of messages, usually error messages
+    element msgset {
+      db.msgset.attlist,
+      db.msgset.info,
+      (db.msgentry+ | db.simplemsgentry+)
+    }
+}
+div {
+  db.msgentry.role.attribute = attribute role { text }
+  db.msgentry.attlist =
+    db.msgentry.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.msgentry =
+    
+    ## A wrapper for an entry in a message set
+    element msgentry {
+      db.msgentry.attlist, db.msg+, db.msginfo?, db.msgexplan*
+    }
+}
+div {
+  db.simplemsgentry.role.attribute = attribute role { text }
+  db.simplemsgentry.msgaud.attribute =
+    
+    ## The audience to which the message relevant
+    attribute msgaud { text }
+  db.simplemsgentry.msgorig.attribute =
+    
+    ## The origin of the message
+    attribute msgorig { text }
+  db.simplemsgentry.msglevel.attribute =
+    
+    ## The level of importance or severity of a message
+    attribute msglevel { text }
+  db.simplemsgentry.attlist =
+    db.simplemsgentry.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.simplemsgentry.msgaud.attribute?
+    & db.simplemsgentry.msgorig.attribute?
+    & db.simplemsgentry.msglevel.attribute?
+  db.simplemsgentry =
+    
+    ## A wrapper for a simpler entry in a message set
+    element simplemsgentry {
+      db.simplemsgentry.attlist, db.msgtext, db.msgexplan+
+    }
+}
+div {
+  db.msg.role.attribute = attribute role { text }
+  db.msg.attlist =
+    db.msg.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.msg.info = db._info.title.only
+  db.msg =
+    
+    ## A message in a message set
+    element msg {
+      db.msg.attlist, db.msg.info, db.msgmain, (db.msgsub | db.msgrel)*
+    }
+}
+div {
+  db.msgmain.role.attribute = attribute role { text }
+  db.msgmain.attlist =
+    db.msgmain.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.msgmain.info = db._info.title.only
+  db.msgmain =
+    
+    ## The primary component of a message in a message set 
+    element msgmain { db.msgmain.attlist, db.msgmain.info, db.msgtext }
+}
+div {
+  db.msgsub.role.attribute = attribute role { text }
+  db.msgsub.attlist =
+    db.msgsub.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.msgsub.info = db._info.title.only
+  db.msgsub =
+    
+    ## A subcomponent of a message in a message set
+    element msgsub { db.msgsub.attlist, db.msgsub.info, db.msgtext }
+}
+div {
+  db.msgrel.role.attribute = attribute role { text }
+  db.msgrel.attlist =
+    db.msgrel.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.msgrel.info = db._info.title.only
+  db.msgrel =
+    
+    ## A related component of a message in a message set
+    element msgrel { db.msgrel.attlist, db.msgrel.info, db.msgtext }
+}
+div {
+  db.msgtext.role.attribute = attribute role { text }
+  db.msgtext.attlist =
+    db.msgtext.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.msgtext =
+    
+    ## The actual text of a message component in a message set
+    element msgtext { db.msgtext.attlist, db.all.blocks+ }
+}
+div {
+  db.msginfo.role.attribute = attribute role { text }
+  db.msginfo.attlist =
+    db.msginfo.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.msginfo =
+    
+    ## Information about a message in a message set
+    element msginfo {
+      db.msginfo.attlist, (db.msglevel | db.msgorig | db.msgaud)*
+    }
+}
+div {
+  db.msglevel.role.attribute = attribute role { text }
+  db.msglevel.attlist =
+    db.msglevel.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.msglevel =
+    
+    ## The level of importance or severity of a message in a message set
+    element msglevel { db.msglevel.attlist, db._text }
+}
+div {
+  db.msgorig.role.attribute = attribute role { text }
+  db.msgorig.attlist =
+    db.msgorig.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.msgorig =
+    
+    ## The origin of a message in a message set
+    element msgorig { db.msgorig.attlist, db._text }
+}
+div {
+  db.msgaud.role.attribute = attribute role { text }
+  db.msgaud.attlist =
+    db.msgaud.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.msgaud =
+    
+    ## The audience to which a message in a message set is relevant
+    element msgaud { db.msgaud.attlist, db._text }
+}
+div {
+  db.msgexplan.role.attribute = attribute role { text }
+  db.msgexplan.attlist =
+    db.msgexplan.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.msgexplan.info = db._info.title.only
+  db.msgexplan =
+    
+    ## Explanatory material relating to a message in a message set
+    element msgexplan {
+      db.msgexplan.attlist, db.msgexplan.info, db.all.blocks+
+    }
+}
+div {
+  db.qandaset.role.attribute = attribute role { text }
+  db.qandaset.defaultlabel.enumeration =
+    
+    ## No labels
+    "none"
+    | 
+      ## Numeric labels
+      "number"
+    | 
+      ## "Q:" and "A:" labels
+      "qanda"
+  db.qandaset.defaultlabel.attribute =
+    
+    ## Specifies the default labelling
+    attribute defaultlabel { db.qandaset.defaultlabel.enumeration }
+  db.qandaset.attlist =
+    db.qandaset.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.qandaset.defaultlabel.attribute?
+  db.qandaset.info = db._info.title.only
+  db.qandaset =
+    
+    ## A question-and-answer set
+    element qandaset {
+      db.qandaset.attlist,
+      db.qandaset.info,
+      db.all.blocks*,
+      (db.qandadiv+ | db.qandaentry+)
+    }
+}
+div {
+  db.qandadiv.role.attribute = attribute role { text }
+  db.qandadiv.attlist =
+    db.qandadiv.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.qandadiv.info = db._info.title.only
+  db.qandadiv =
+    
+    ## A titled division in a qandaset
+    element qandadiv {
+      db.qandadiv.attlist,
+      db.qandadiv.info,
+      db.all.blocks*,
+      (db.qandadiv+ | db.qandaentry+)
+    }
+}
+div {
+  db.qandaentry.role.attribute = attribute role { text }
+  db.qandaentry.attlist =
+    db.qandaentry.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.qandaentry.info = db._info.title.only
+  db.qandaentry =
+    
+    ## A question/answer set within a qandaset
+    element qandaentry {
+      db.qandaentry.attlist, db.qandaentry.info, db.question, db.answer*
+    }
+}
+div {
+  db.question.role.attribute = attribute role { text }
+  db.question.attlist =
+    db.question.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.question =
+    
+    ## A question in a qandaset
+    element question { db.question.attlist, db.label?, db.all.blocks+ }
+}
+div {
+  db.answer.role.attribute = attribute role { text }
+  db.answer.attlist =
+    db.answer.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.answer =
+    
+    ## An answer to a question posed in a qandaset
+    element answer { db.answer.attlist, db.label?, db.all.blocks+ }
+}
+div {
+  db.label.role.attribute = attribute role { text }
+  db.label.attlist =
+    db.label.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.label =
+    
+    ## A label on a question or answer
+    element label { db.label.attlist, db._text }
+}
+db.math.inlines = db.inlineequation
+db.equation.content = (db.mediaobject+ | db.mathphrase+) | db._any.mml+
+db.inlineequation.content =
+  (db.inlinemediaobject+ | db.mathphrase+) | db._any.mml+
+div {
+  db.equation.role.attribute = attribute role { text }
+  db.equation.label.attribute = db.label.attribute
+  db.equation.attlist =
+    db.equation.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.equation.label.attribute?
+    & db.pgwide.attribute?
+    & db.floatstyle.attribute?
+  db.equation.info = db._info.title.only
+  db.equation =
+    
+    ## A displayed mathematical equation
+    element equation {
+      db.equation.attlist,
+      db.equation.info,
+      db.alt?,
+      db.equation.content,
+      db.caption?
+    }
+}
+div {
+  db.informalequation.role.attribute = attribute role { text }
+  db.informalequation.attlist =
+    db.informalequation.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.informalequation.info = db._info.title.forbidden
+  db.informalequation =
+    
+    ## A displayed mathematical equation without a title
+    element informalequation {
+      db.informalequation.attlist,
+      db.informalequation.info,
+      db.alt?,
+      db.equation.content,
+      db.caption?
+    }
+}
+div {
+  db.inlineequation.role.attribute = attribute role { text }
+  db.inlineequation.attlist =
+    db.inlineequation.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.inlineequation =
+    
+    ## A mathematical equation or expression occurring inline
+    element inlineequation {
+      db.inlineequation.attlist, db.alt?, db.inlineequation.content
+    }
+}
+div {
+  db.mathphrase.role.attribute = attribute role { text }
+  db.mathphrase.attlist =
+    db.mathphrase.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.mathphrase =
+    
+    ## A mathematical phrase that can be represented with ordinary text and a small amount of markup
+    element mathphrase {
+      db.mathphrase.attlist,
+      (db._text | db.ubiq.inlines | db._emphasis)*
+    }
+}
+div {
+  db.imagedata.mathml.role.attribute = attribute role { text }
+  db.imagedata.mathml.attlist =
+    db.imagedata.mathml.role.attribute?
+    & db.common.attributes
+    & 
+      ## Specifies that the format of the data is MathML
+      attribute format {
+        
+        ## Specifies MathML.
+        "mathml"
+      }?
+    & db.imagedata.align.attribute?
+    & db.imagedata.valign.attribute?
+    & db.imagedata.width.attribute?
+    & db.imagedata.contentwidth.attribute?
+    & db.imagedata.scalefit.attribute?
+    & db.imagedata.scale.attribute?
+    & db.imagedata.depth.attribute?
+    & db.imagedata.contentdepth.attribute?
+  db.imagedata.mathml.info = db._info.title.forbidden
+  db.imagedata.mathml =
+    
+    ## A MathML expression in a media object
+    element imagedata {
+      db.imagedata.mathml.attlist,
+      db.imagedata.mathml.info,
+      db._any.mml+
+    }
+}
+div {
+  db._any.mml =
+    
+    ## Any element from the MathML namespace
+    element mml:* { (db._any.attribute | text | db._any)* }
+}
+div {
+  db.imagedata.svg.role.attribute = attribute role { text }
+  db.imagedata.svg.attlist =
+    db.imagedata.svg.role.attribute?
+    & db.common.attributes
+    & 
+      ## Specifies that the format of the data is SVG
+      attribute format {
+        
+        ## Specifies SVG.
+        "svg"
+      }?
+    & db.imagedata.align.attribute?
+    & db.imagedata.valign.attribute?
+    & db.imagedata.width.attribute?
+    & db.imagedata.contentwidth.attribute?
+    & db.imagedata.scalefit.attribute?
+    & db.imagedata.scale.attribute?
+    & db.imagedata.depth.attribute?
+    & db.imagedata.contentdepth.attribute?
+  db.imagedata.svg.info = db._info.title.forbidden
+  db.imagedata.svg =
+    
+    ## An SVG drawing in a media object
+    element imagedata {
+      db.imagedata.svg.attlist, db.imagedata.svg.info, db._any.svg+
+    }
+}
+div {
+  db._any.svg =
+    
+    ## Any element from the SVG namespace
+    element svg:* { (db._any.attribute | text | db._any)* }
+}
+db.markup.inlines =
+  db.tag
+  | db.markup
+  | db.token
+  | db.symbol
+  | db.literal
+  | db.code
+  | db.constant
+  | db.email
+  | db.uri
+div {
+  db.markup.role.attribute = attribute role { text }
+  db.markup.attlist =
+    db.markup.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.markup =
+    
+    ## A string of formatting markup in text that is to be represented literally
+    element markup { db.markup.attlist, db._text }
+}
+div {
+  db.tag.role.attribute = attribute role { text }
+  db.tag.class.enumeration =
+    
+    ## An attribute
+    "attribute"
+    | 
+      ## An attribute value
+      "attvalue"
+    | 
+      ## An element
+      "element"
+    | 
+      ## An empty element tag
+      "emptytag"
+    | 
+      ## An end tag
+      "endtag"
+    | 
+      ## A general entity
+      "genentity"
+    | 
+      ## The local name part of a qualified name
+      "localname"
+    | 
+      ## A namespace
+      "namespace"
+    | 
+      ## A numeric character reference
+      "numcharref"
+    | 
+      ## A parameter entity
+      "paramentity"
+    | 
+      ## A processing instruction
+      "pi"
+    | 
+      ## The prefix part of a qualified name
+      "prefix"
+    | 
+      ## An SGML comment
+      "comment"
+    | 
+      ## A start tag
+      "starttag"
+    | 
+      ## An XML processing instruction
+      "xmlpi"
+  db.tag.class.attribute =
+    
+    ## Identifies the nature of the tag content
+    attribute class { db.tag.class.enumeration }
+  db.tag.namespace.attribute =
+    
+    ## Identifies the namespace of the tag content
+    attribute namespace { xsd:anyURI }
+  db.tag.attlist =
+    db.tag.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.tag.class.attribute?
+    & db.tag.namespace.attribute?
+  db.tag =
+    
+    ## A component of XML (or SGML) markup
+    element tag { db.tag.attlist, db._text }
+}
+div {
+  db.symbol.class.attribute =
+    
+    ## Identifies the class of symbol
+    attribute class {
+      
+      ## The value is a limit of some kind
+      "limit"
+    }
+  db.symbol.role.attribute = attribute role { text }
+  db.symbol.attlist =
+    db.symbol.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.symbol.class.attribute?
+  db.symbol =
+    
+    ## A name that is replaced by a value before processing
+    element symbol { db.symbol.attlist, db._text }
+}
+div {
+  db.token.role.attribute = attribute role { text }
+  db.token.attlist =
+    db.token.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.token =
+    
+    ## A unit of information
+    element token { db.token.attlist, db._text }
+}
+div {
+  db.literal.role.attribute = attribute role { text }
+  db.literal.attlist =
+    db.literal.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.literal =
+    
+    ## Inline text that is some literal value
+    element literal { db.literal.attlist, db._text }
+}
+div {
+  code.language.attribute =
+    
+    ## Identifies the (computer) language of the code fragment
+    attribute language { text }
+  db.code.role.attribute = attribute role { text }
+  db.code.attlist =
+    db.code.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & code.language.attribute?
+  db.code =
+    
+    ## An inline code fragment
+    element code {
+      db.code.attlist, (db.programming.inlines | db._text)*
+    }
+}
+div {
+  db.constant.class.attribute =
+    
+    ## Identifies the class of constant
+    attribute class {
+      
+      ## The value is a limit of some kind
+      "limit"
+    }
+  db.constant.role.attribute = attribute role { text }
+  db.constant.attlist =
+    db.constant.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.constant.class.attribute?
+  db.constant =
+    
+    ## A programming or system constant
+    element constant { db.constant.attlist, db._text }
+}
+div {
+  db.productname.role.attribute = attribute role { text }
+  db.productname.class.enumeration =
+    
+    ## A name with a copyright
+    "copyright"
+    | 
+      ## A name with a registered copyright
+      "registered"
+    | 
+      ## A name of a service
+      "service"
+    | 
+      ## A name which is trademarked
+      "trade"
+  db.productname.class.attribute =
+    
+    ## Specifies the class of product name
+    attribute class { db.productname.class.enumeration }
+  db.productname.attlist =
+    db.productname.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.productname.class.attribute?
+  db.productname =
+    
+    ## The formal name of a product
+    element productname { db.productname.attlist, db._text }
+}
+div {
+  db.productnumber.role.attribute = attribute role { text }
+  db.productnumber.attlist =
+    db.productnumber.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.productnumber =
+    
+    ## A number assigned to a product
+    element productnumber { db.productnumber.attlist, db._text }
+}
+div {
+  db.database.class.enumeration =
+    
+    ## An alternate or secondary key
+    "altkey"
+    | 
+      ## A constraint
+      "constraint"
+    | 
+      ## A data type
+      "datatype"
+    | 
+      ## A field
+      "field"
+    | 
+      ## A foreign key
+      "foreignkey"
+    | 
+      ## A group
+      "group"
+    | 
+      ## An index
+      "index"
+    | 
+      ## The first or primary key
+      "key1"
+    | 
+      ## An alternate or secondary key
+      "key2"
+    | 
+      ## A name
+      "name"
+    | 
+      ## The primary key
+      "primarykey"
+    | 
+      ## A (stored) procedure
+      "procedure"
+    | 
+      ## A record
+      "record"
+    | 
+      ## A rule
+      "rule"
+    | 
+      ## The secondary key
+      "secondarykey"
+    | 
+      ## A table
+      "table"
+    | 
+      ## A user
+      "user"
+    | 
+      ## A view
+      "view"
+  db.database.class.attribute =
+    
+    ## Identifies the class of database artifact
+    attribute class { db.database.class.enumeration }
+  db.database.role.attribute = attribute role { text }
+  db.database.attlist =
+    db.database.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.database.class.attribute?
+  db.database =
+    
+    ## The name of a database, or part of a database
+    element database { db.database.attlist, db._text }
+}
+div {
+  db.application.class.enumeration =
+    
+    ## A hardware application
+    "hardware"
+    | 
+      ## A software application
+      "software"
+  db.application.class.attribute =
+    
+    ## Identifies the class of application
+    attribute class { db.application.class.enumeration }
+  db.application.role.attribute = attribute role { text }
+  db.application.attlist =
+    db.application.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.application.class.attribute?
+  db.application =
+    
+    ## The name of a software program
+    element application { db.application.attlist, db._text }
+}
+div {
+  db.hardware.role.attribute = attribute role { text }
+  db.hardware.attlist =
+    db.hardware.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.hardware =
+    
+    ## A physical part of a computer system
+    element hardware { db.hardware.attlist, db._text }
+}
+db.gui.inlines =
+  db.guiicon
+  | db.guibutton
+  | db.guimenuitem
+  | db.guimenu
+  | db.guisubmenu
+  | db.guilabel
+  | db.menuchoice
+  | db.mousebutton
+div {
+  db.guibutton.role.attribute = attribute role { text }
+  db.guibutton.attlist =
+    db.guibutton.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.guibutton =
+    
+    ## The text on a button in a GUI
+    element guibutton {
+      db.guibutton.attlist,
+      (db._text | db.accel | db.superscript | db.subscript)*
+    }
+}
+div {
+  db.guiicon.role.attribute = attribute role { text }
+  db.guiicon.attlist =
+    db.guiicon.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.guiicon =
+    
+    ## Graphic and/or text appearing as a icon in a GUI
+    element guiicon {
+      db.guiicon.attlist,
+      (db._text | db.accel | db.superscript | db.subscript)*
+    }
+}
+div {
+  db.guilabel.role.attribute = attribute role { text }
+  db.guilabel.attlist =
+    db.guilabel.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.guilabel =
+    
+    ## The text of a label in a GUI
+    element guilabel {
+      db.guilabel.attlist,
+      (db._text | db.accel | db.superscript | db.subscript)*
+    }
+}
+div {
+  db.guimenu.role.attribute = attribute role { text }
+  db.guimenu.attlist =
+    db.guimenu.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.guimenu =
+    
+    ## The name of a menu in a GUI
+    element guimenu {
+      db.guimenu.attlist,
+      (db._text | db.accel | db.superscript | db.subscript)*
+    }
+}
+div {
+  db.guimenuitem.role.attribute = attribute role { text }
+  db.guimenuitem.attlist =
+    db.guimenuitem.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.guimenuitem =
+    
+    ## The name of a terminal menu item in a GUI
+    element guimenuitem {
+      db.guimenuitem.attlist,
+      (db._text | db.accel | db.superscript | db.subscript)*
+    }
+}
+div {
+  db.guisubmenu.role.attribute = attribute role { text }
+  db.guisubmenu.attlist =
+    db.guisubmenu.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.guisubmenu =
+    
+    ## The name of a submenu in a GUI
+    element guisubmenu {
+      db.guisubmenu.attlist,
+      (db._text | db.accel | db.superscript | db.subscript)*
+    }
+}
+div {
+  db.menuchoice.role.attribute = attribute role { text }
+  db.menuchoice.attlist =
+    db.menuchoice.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.menuchoice =
+    
+    ## A selection or series of selections from a menu
+    element menuchoice {
+      db.menuchoice.attlist,
+      db.shortcut?,
+      (db.guibutton
+       | db.guiicon
+       | db.guilabel
+       | db.guimenu
+       | db.guimenuitem
+       | db.guisubmenu)+
+    }
+}
+div {
+  db.mousebutton.role.attribute = attribute role { text }
+  db.mousebutton.attlist =
+    db.mousebutton.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.mousebutton =
+    
+    ## The conventional name of a mouse button
+    element mousebutton { db.mousebutton.attlist, db._text }
+}
+db.keyboard.inlines =
+  db.keycombo
+  | db.keycap
+  | db.keycode
+  | db.keysym
+  | db.shortcut
+  | db.accel
+div {
+  db.keycap.function.enumeration =
+    
+    ## The "Alt" key
+    "alt"
+    | 
+      ## The "Backspace" key
+      "backspace"
+    | 
+      ## The "Command" key
+      "command"
+    | 
+      ## The "Control" key
+      "control"
+    | 
+      ## The "Delete" key
+      "delete"
+    | 
+      ## The down arrow
+      "down"
+    | 
+      ## The "End" key
+      "end"
+    | 
+      ## The "Enter" or "Return" key
+      "enter"
+    | 
+      ## The "Escape" key
+      "escape"
+    | 
+      ## The "Home" key
+      "home"
+    | 
+      ## The "Insert" key
+      "insert"
+    | 
+      ## The left arrow
+      "left"
+    | 
+      ## The "Meta" key
+      "meta"
+    | 
+      ## The "Option" key
+      "option"
+    | 
+      ## The page down key
+      "pagedown"
+    | 
+      ## The page up key
+      "pageup"
+    | 
+      ## The right arrow
+      "right"
+    | 
+      ## The "Shift" key
+      "shift"
+    | 
+      ## The spacebar
+      "space"
+    | 
+      ## The "Tab" key
+      "tab"
+    | 
+      ## The up arrow
+      "up"
+  db.keycap.function-enum.attribute =
+    
+    ## Identifies the function key
+    attribute function { db.keycap.function.enumeration }?
+  db.keycap.function-other.attributes =
+    
+    ## Identifies the function key
+    attribute function {
+      
+      ## Indicates a non-standard function key
+      "other"
+    }?,
+    
+    ## Specifies a keyword that identifies the non-standard key
+    attribute otherfunction { text }
+  db.keycap.function.attrib =
+    db.keycap.function-enum.attribute
+    | db.keycap.function-other.attributes
+  db.keycap.role.attribute = attribute role { text }
+  db.keycap.attlist =
+    db.keycap.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.keycap.function.attrib
+  db.keycap =
+    
+    ## The text printed on a key on a keyboard
+    element keycap { db.keycap.attlist, db._text }
+}
+div {
+  db.keycode.role.attribute = attribute role { text }
+  db.keycode.attlist =
+    db.keycode.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.keycode =
+    
+    ## The internal, frequently numeric, identifier for a key on a keyboard
+    element keycode { db.keycode.attlist, db._text }
+}
+db.keycombination.contentmodel =
+  (db.keycap | db.keycombo | db.keysym) | db.mousebutton
+div {
+  db.keycombo.action.enumeration =
+    
+    ## A (single) mouse click.
+    "click"
+    | 
+      ## A double mouse click.
+      "double-click"
+    | 
+      ## A mouse or key press.
+      "press"
+    | 
+      ## Sequential clicks or presses.
+      "seq"
+    | 
+      ## Simultaneous clicks or presses.
+      "simul"
+  db.keycombo.action-enum.attribute =
+    
+    ## Identifies the nature of the action taken. If keycombo
+    ##  contains more than one element, simul
+    ##  is the default, otherwise there is no default.
+    attribute action { db.keycombo.action.enumeration }?
+  db.keycombo.action-other.attributes =
+    
+    ## Identifies the nature of the action taken
+    attribute action {
+      
+      ## Indicates a non-standard action
+      "other"
+    }?,
+    
+    ## Identifies the non-standard action in some unspecified way.
+    attribute otheraction { text }
+  db.keycombo.action.attrib =
+    db.keycombo.action-enum.attribute
+    | db.keycombo.action-other.attributes
+  db.keycombo.role.attribute = attribute role { text }
+  db.keycombo.attlist =
+    db.keycombo.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.keycombo.action.attrib
+  db.keycombo =
+    
+    ## A combination of input actions
+    element keycombo {
+      db.keycombo.attlist, db.keycombination.contentmodel+
+    }
+}
+div {
+  db.keysym.role.attribute = attribute role { text }
+  db.keysym.attlist =
+    db.keysym.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.keysym =
+    
+    ## The symbolic name of a key on a keyboard
+    element keysym { db.keysym.attlist, db._text }
+}
+div {
+  db.accel.role.attribute = attribute role { text }
+  db.accel.attlist =
+    db.accel.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.accel =
+    
+    ## A graphical user interface (GUI) keyboard shortcut
+    element accel { db.accel.attlist, db._text }
+}
+div {
+  db.shortcut.action.attrib = db.keycombo.action.attrib
+  db.shortcut.role.attribute = attribute role { text }
+  db.shortcut.attlist =
+    db.shortcut.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.shortcut.action.attrib
+  db.shortcut =
+    
+    ## A key combination for an action that is also accessible through a menu
+    element shortcut {
+      db.shortcut.attlist, db.keycombination.contentmodel+
+    }
+}
+db.os.inlines =
+  db.prompt
+  | db.envar
+  | db.filename
+  | db.command
+  | db.computeroutput
+  | db.userinput
+db.computeroutput.inlines =
+  (text | db.ubiq.inlines | db.os.inlines | db.technical.inlines)
+  | db.co
+  | db.markup.inlines
+db.userinput.inlines =
+  (text | db.ubiq.inlines | db.os.inlines | db.technical.inlines)
+  | db.co
+  | db.markup.inlines
+  | db.gui.inlines
+  | db.keyboard.inlines
+db.prompt.inlines = db._text | db.co
+div {
+  db.prompt.role.attribute = attribute role { text }
+  db.prompt.attlist =
+    db.prompt.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.prompt =
+    
+    ## A character or string indicating the start of an input field in a  computer display
+    element prompt { db.prompt.attlist, db.prompt.inlines* }
+}
+div {
+  db.envar.role.attribute = attribute role { text }
+  db.envar.attlist =
+    db.envar.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.envar =
+    
+    ## A software environment variable
+    element envar { db.envar.attlist, db._text }
+}
+div {
+  db.filename.class.enumeration =
+    
+    ## A device
+    "devicefile"
+    | 
+      ## A directory
+      "directory"
+    | 
+      ## A filename extension
+      "extension"
+    | 
+      ## A header file (as for a programming language)
+      "headerfile"
+    | 
+      ## A library file
+      "libraryfile"
+    | 
+      ## A partition (as of a hard disk)
+      "partition"
+    | 
+      ## A symbolic link
+      "symlink"
+  db.filename.class.attribute =
+    
+    ## Identifies the class of filename
+    attribute class { db.filename.class.enumeration }
+  db.filename.path.attribute =
+    
+    ## Specifies the path of the filename
+    attribute path { text }
+  db.filename.role.attribute = attribute role { text }
+  db.filename.attlist =
+    db.filename.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.filename.path.attribute?
+    & db.filename.class.attribute?
+  db.filename =
+    
+    ## The name of a file
+    element filename { db.filename.attlist, db._text }
+}
+div {
+  db.command.role.attribute = attribute role { text }
+  db.command.attlist =
+    db.command.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.command =
+    
+    ## The name of an executable program or other software command
+    element command { db.command.attlist, db._text }
+}
+div {
+  db.computeroutput.role.attribute = attribute role { text }
+  db.computeroutput.attlist =
+    db.computeroutput.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.computeroutput =
+    
+    ## Data, generally text, displayed or presented by a computer
+    element computeroutput {
+      db.computeroutput.attlist, db.computeroutput.inlines*
+    }
+}
+div {
+  db.userinput.role.attribute = attribute role { text }
+  db.userinput.attlist =
+    db.userinput.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.userinput =
+    
+    ## Data entered by the user
+    element userinput { db.userinput.attlist, db.userinput.inlines* }
+}
+div {
+  db.cmdsynopsis.role.attribute = attribute role { text }
+  db.cmdsynopsis.sepchar.attribute =
+    
+    ## Specifies the character that should separate the command and its top-level arguments
+    attribute sepchar { text }
+  db.cmdsynopsis.cmdlength.attribute =
+    
+    ## Indicates the displayed length of the command; this information may be used to intelligently indent command synopses which extend beyond one line
+    attribute cmdlength { text }
+  db.cmdsynopsis.label.attribute = db.label.attribute
+  db.cmdsynopsis.attlist =
+    db.cmdsynopsis.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.cmdsynopsis.sepchar.attribute?
+    & db.cmdsynopsis.cmdlength.attribute?
+    & db.cmdsynopsis.label.attribute?
+  db.cmdsynopsis.info = db._info.title.forbidden
+  db.cmdsynopsis =
+    
+    ## A syntax summary for a software command
+    element cmdsynopsis {
+      db.cmdsynopsis.attlist,
+      db.cmdsynopsis.info,
+      (db.command | db.arg | db.group | db.sbr)+,
+      db.synopfragment*
+    }
+}
+db.rep.enumeration =
+  
+  ## Can not be repeated.
+  "norepeat"
+  | 
+    ## Can be repeated.
+    "repeat"
+db.rep.attribute =
+  
+  ## Indicates whether or not repetition is possible.
+  [ a:defaultValue = "norepeat" ] attribute rep { db.rep.enumeration }
+db.choice.enumeration =
+  
+  ## Formatted to indicate that it is optional.
+  "opt"
+  | 
+    ## Formatted without indication.
+    "plain"
+  | 
+    ## Formatted to indicate that it is required.
+    "req"
+db.choice.opt.attribute =
+  
+  ## Indicates optionality.
+  [ a:defaultValue = "opt" ] attribute choice { db.choice.enumeration }
+db.choice.req.attribute =
+  
+  ## Indicates optionality.
+  [ a:defaultValue = "req" ] attribute choice { db.choice.enumeration }
+div {
+  db.arg.role.attribute = attribute role { text }
+  db.arg.rep.attribute = db.rep.attribute
+  db.arg.choice.attribute = db.choice.opt.attribute
+  db.arg.attlist =
+    db.arg.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.arg.rep.attribute?
+    & db.arg.choice.attribute?
+  db.arg =
+    
+    ## An argument in a cmdsynopsis
+    element arg {
+      db.arg.attlist,
+      (db._text
+       | db.arg
+       | db.group
+       | db.option
+       | db.synopfragmentref
+       | db.sbr)*
+    }
+}
+div {
+  db.group.role.attribute = attribute role { text }
+  db.group.rep.attribute = db.rep.attribute
+  db.group.choice.attribute = db.choice.opt.attribute
+  db.group.attlist =
+    db.group.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.group.rep.attribute?
+    & db.group.choice.attribute?
+  db.group =
+    
+    ## A group of elements in a cmdsynopsis
+    element group {
+      db.group.attlist,
+      (db.arg
+       | db.group
+       | db.option
+       | db.synopfragmentref
+       | db.replaceable
+       | db.sbr)+
+    }
+}
+div {
+  db.sbr.role.attribute = attribute role { text }
+  db.sbr.attlist = db.sbr.role.attribute? & db.common.attributes
+  db.sbr =
+    
+    ## An explicit line break in a command synopsis
+    element sbr { db.sbr.attlist, empty }
+}
+div {
+  db.synopfragment.role.attribute = attribute role { text }
+  db.synopfragment.attlist =
+    db.synopfragment.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.synopfragment =
+    
+    ## A portion of a cmdsynopsis broken out from the main body of the synopsis
+    element synopfragment {
+      db.synopfragment.attlist, (db.arg | db.group)+
+    }
+}
+div {
+  db.synopfragmentref.role.attribute = attribute role { text }
+  db.synopfragmentref.attlist =
+    db.synopfragmentref.role.attribute?
+    & db.common.attributes
+    & db.linkend.attribute
+  db.synopfragmentref =
+    
+    ## A reference to a fragment of a command synopsis
+    element synopfragmentref { db.synopfragmentref.attlist, text }
+}
+db.programming.inlines =
+  db.function
+  | db.parameter
+  | db.varname
+  | db.returnvalue
+  | db.type
+  | db.classname
+  | db.exceptionname
+  | db.interfacename
+  | db.methodname
+  | db.modifier
+  | db.initializer
+  | db.oo.inlines
+db.oo.inlines = db.ooclass | db.ooexception | db.oointerface
+db.synopsis.blocks =
+  (db.funcsynopsis
+   | db.classsynopsis
+   | db.methodsynopsis
+   | db.constructorsynopsis
+   | db.destructorsynopsis
+   | db.fieldsynopsis)
+  | db.cmdsynopsis
+div {
+  db.synopsis.role.attribute = attribute role { text }
+  db.synopsis.label.attribute = db.label.attribute
+  db.synopsis.attlist =
+    db.synopsis.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.verbatim.attributes
+    & db.synopsis.label.attribute?
+  db.synopsis =
+    
+    ## A general-purpose element for representing the syntax of commands or functions
+    element synopsis { db.synopsis.attlist, db.verbatim.contentmodel }
+}
+div {
+  db.funcsynopsis.role.attribute = attribute role { text }
+  db.funcsynopsis.attlist =
+    db.funcsynopsis.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.language.attribute?
+  db.funcsynopsis.info = db._info.title.forbidden
+  db.funcsynopsis =
+    
+    ## The syntax summary for a function definition
+    element funcsynopsis {
+      db.funcsynopsis.attlist,
+      db.funcsynopsis.info,
+      (db.funcsynopsisinfo | db.funcprototype)+
+    }
+}
+div {
+  db.funcsynopsisinfo.role.attribute = attribute role { text }
+  db.funcsynopsisinfo.attlist =
+    db.funcsynopsisinfo.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.verbatim.attributes
+  db.funcsynopsisinfo =
+    
+    ## Information supplementing the funcdefs of a funcsynopsis
+    element funcsynopsisinfo {
+      db.funcsynopsisinfo.attlist, db.verbatim.contentmodel
+    }
+}
+div {
+  db.funcprototype.role.attribute = attribute role { text }
+  db.funcprototype.attlist =
+    db.funcprototype.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.funcprototype =
+    
+    ## The prototype of a function
+    element funcprototype {
+      db.funcprototype.attlist,
+      db.modifier*,
+      db.funcdef,
+      (db.void
+       | db.varargs
+       | ((db.paramdef | db.group.paramdef)+, db.varargs?)),
+      db.modifier*
+    }
+}
+div {
+  db.funcdef.role.attribute = attribute role { text }
+  db.funcdef.attlist =
+    db.funcdef.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.funcdef =
+    
+    ## A function (subroutine) name and its return type
+    element funcdef {
+      db.funcdef.attlist, (db._text | db.type | db.function)*
+    }
+}
+div {
+  db.function.role.attribute = attribute role { text }
+  db.function.attlist =
+    db.function.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.function =
+    
+    ## The name of a function or subroutine, as in a programming language
+    element function { db.function.attlist, db._text }
+}
+div {
+  db.void.role.attribute = attribute role { text }
+  db.void.attlist =
+    db.void.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.void =
+    
+    ## An empty element in a function synopsis indicating that the function in question takes no arguments
+    element void { db.void.attlist, empty }
+}
+div {
+  db.varargs.role.attribute = attribute role { text }
+  db.varargs.attlist =
+    db.varargs.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.varargs =
+    
+    ## An empty element in a function synopsis indicating a variable number of arguments
+    element varargs { db.varargs.attlist, empty }
+}
+div {
+  db.group.paramdef.role.attribute = attribute role { text }
+  db.group.paramdef.choice.attribute = db.choice.opt.attribute
+  db.group.paramdef.attlist =
+    db.group.paramdef.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.group.paramdef.choice.attribute?
+  db.group.paramdef =
+    
+    ## A group of parameters
+    element group {
+      db.group.paramdef.attlist, (db.paramdef | db.group.paramdef)+
+    }
+}
+div {
+  db.paramdef.role.attribute = attribute role { text }
+  db.paramdef.choice.enumeration =
+    
+    ## Formatted to indicate that it is optional.
+    "opt"
+    | 
+      ## Formatted to indicate that it is required.
+      "req"
+  db.paramdef.choice.attribute =
+    
+    ## Indicates optionality.
+    [ a:defaultValue = "opt" ]
+    attribute choice { db.paramdef.choice.enumeration }
+  db.paramdef.attlist =
+    db.paramdef.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.paramdef.choice.attribute?
+  db.paramdef =
+    
+    ## Information about a function parameter in a programming language
+    element paramdef {
+      db.paramdef.attlist,
+      (db._text
+       | db.initializer
+       | db.type
+       | db.parameter
+       | db.funcparams)*
+    }
+}
+div {
+  db.funcparams.role.attribute = attribute role { text }
+  db.funcparams.attlist =
+    db.funcparams.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.funcparams =
+    
+    ## Parameters for a function referenced through a function pointer in a synopsis
+    element funcparams { db.funcparams.attlist, db._text }
+}
+div {
+  db.classsynopsis.role.attribute = attribute role { text }
+  db.classsynopsis.class.enumeration =
+    
+    ## This is the synopsis of a class
+    "class"
+    | 
+      ## This is the synopsis of an interface
+      "interface"
+  db.classsynopsis.class.attribute =
+    
+    ## Specifies the nature of the synopsis
+    attribute class { db.classsynopsis.class.enumeration }
+  db.classsynopsis.attlist =
+    db.classsynopsis.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.language.attribute?
+    & db.classsynopsis.class.attribute?
+  db.classsynopsis =
+    
+    ## The syntax summary for a class definition
+    element classsynopsis {
+      db.classsynopsis.attlist,
+      db.oo.inlines+,
+      (db.classsynopsisinfo
+       | db.methodsynopsis
+       | db.constructorsynopsis
+       | db.destructorsynopsis
+       | db.fieldsynopsis)*
+    }
+}
+div {
+  db.classsynopsisinfo.role.attribute = attribute role { text }
+  db.classsynopsisinfo.attlist =
+    db.classsynopsisinfo.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.verbatim.attributes
+  db.classsynopsisinfo =
+    
+    ## Information supplementing the contents of a classsynopsis
+    element classsynopsisinfo {
+      db.classsynopsisinfo.attlist, db.verbatim.contentmodel
+    }
+}
+div {
+  db.ooclass.role.attribute = attribute role { text }
+  db.ooclass.attlist =
+    db.ooclass.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.ooclass =
+    
+    ## A class in an object-oriented programming language
+    element ooclass {
+      db.ooclass.attlist, (db.package | db.modifier)*, db.classname
+    }
+}
+div {
+  db.oointerface.role.attribute = attribute role { text }
+  db.oointerface.attlist =
+    db.oointerface.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.oointerface =
+    
+    ## An interface in an object-oriented programming language
+    element oointerface {
+      db.oointerface.attlist,
+      (db.package | db.modifier)*,
+      db.interfacename
+    }
+}
+div {
+  db.ooexception.role.attribute = attribute role { text }
+  db.ooexception.attlist =
+    db.ooexception.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.ooexception =
+    
+    ## An exception in an object-oriented programming language
+    element ooexception {
+      db.ooexception.attlist,
+      (db.package | db.modifier)*,
+      db.exceptionname
+    }
+}
+db.modifier.xml.space.attribute =
+  
+  ## Can be used to indicate that whitespace in the modifier should be preserved (for multi-line annotations, for example).
+  attribute xml:space {
+    
+    ## Extra whitespace and line breaks must be preserved.
+    [
+      # Ideally the definition of xml:space used on modifier would be
+      # different from the definition used on the verbatim elements. The
+      # verbatim elements forbid the use of xml:space="default" which
+      # wouldn't be a problem on modifier. But doing that causes the
+      # generated XSD schemas to be broken so I'm just reusing the existing
+      # definition for now. It won't be backwards incompatible to fix this
+      # problem in the future.
+      #    | ## Extra whitespace and line breaks are not preserved.
+      #      "default"
+      
+    ]
+    "preserve"
+  }
+div {
+  db.modifier.role.attribute = attribute role { text }
+  db.modifier.attlist =
+    db.modifier.xml.space.attribute?
+    & db.modifier.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.modifier =
+    
+    ## Modifiers in a synopsis
+    element modifier { db.modifier.attlist, db._text }
+}
+div {
+  db.interfacename.role.attribute = attribute role { text }
+  db.interfacename.attlist =
+    db.interfacename.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.interfacename =
+    
+    ## The name of an interface
+    element interfacename { db.interfacename.attlist, db._text }
+}
+div {
+  db.exceptionname.role.attribute = attribute role { text }
+  db.exceptionname.attlist =
+    db.exceptionname.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.exceptionname =
+    
+    ## The name of an exception
+    element exceptionname { db.exceptionname.attlist, db._text }
+}
+div {
+  db.fieldsynopsis.role.attribute = attribute role { text }
+  db.fieldsynopsis.attlist =
+    db.fieldsynopsis.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.language.attribute?
+  db.fieldsynopsis =
+    
+    ## The name of a field in a class definition
+    element fieldsynopsis {
+      db.fieldsynopsis.attlist,
+      db.modifier*,
+      db.type?,
+      db.varname,
+      db.initializer?
+    }
+}
+div {
+  db.initializer.role.attribute = attribute role { text }
+  db.initializer.attlist =
+    db.initializer.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.initializer.inlines = db._text | db.mathphrase | db.markup.inlines
+  db.initializer =
+    
+    ## The initializer for a fieldsynopsis
+    element initializer {
+      db.initializer.attlist, db.initializer.inlines*
+    }
+}
+div {
+  db.constructorsynopsis.role.attribute = attribute role { text }
+  db.constructorsynopsis.attlist =
+    db.constructorsynopsis.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.language.attribute?
+  db.constructorsynopsis =
+    
+    ## A syntax summary for a constructor
+    element constructorsynopsis {
+      db.constructorsynopsis.attlist,
+      db.modifier*,
+      db.methodname?,
+      ((db.methodparam | db.group.methodparam)+ | db.void?),
+      db.exceptionname*
+    }
+}
+div {
+  db.destructorsynopsis.role.attribute = attribute role { text }
+  db.destructorsynopsis.attlist =
+    db.destructorsynopsis.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.language.attribute?
+  db.destructorsynopsis =
+    
+    ## A syntax summary for a destructor
+    element destructorsynopsis {
+      db.destructorsynopsis.attlist,
+      db.modifier*,
+      db.methodname?,
+      ((db.methodparam | db.group.methodparam)+ | db.void?),
+      db.exceptionname*
+    }
+}
+div {
+  db.methodsynopsis.role.attribute = attribute role { text }
+  db.methodsynopsis.attlist =
+    db.methodsynopsis.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.language.attribute?
+  db.methodsynopsis =
+    
+    ## A syntax summary for a method
+    element methodsynopsis {
+      db.methodsynopsis.attlist,
+      db.modifier*,
+      (db.type | db.void)?,
+      db.methodname,
+      ((db.methodparam | db.group.methodparam)+ | db.void),
+      db.exceptionname*,
+      db.modifier*
+    }
+}
+div {
+  db.methodname.role.attribute = attribute role { text }
+  db.methodname.attlist =
+    db.methodname.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.methodname =
+    
+    ## The name of a method
+    element methodname { db.methodname.attlist, db._text }
+}
+div {
+  db.methodparam.role.attribute = attribute role { text }
+  db.methodparam.rep.attribute = db.rep.attribute
+  db.methodparam.choice.attribute = db.choice.req.attribute
+  db.methodparam.attlist =
+    db.methodparam.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.methodparam.rep.attribute?
+    & db.methodparam.choice.attribute?
+  db.methodparam =
+    
+    ## Parameters to a method
+    element methodparam {
+      db.methodparam.attlist,
+      db.modifier*,
+      db.type?,
+      ((db.modifier*, db.parameter, db.initializer?) | db.funcparams),
+      db.modifier*
+    }
+}
+div {
+  db.group.methodparam.role.attribute = attribute role { text }
+  db.group.methodparam.choice.attribute = db.choice.opt.attribute
+  db.group.methodparam.attlist =
+    db.group.methodparam.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.group.methodparam.choice.attribute?
+  db.group.methodparam =
+    
+    ## A group of method parameters
+    element group {
+      db.group.methodparam.attlist,
+      (db.methodparam | db.group.methodparam)+
+    }
+}
+div {
+  db.varname.role.attribute = attribute role { text }
+  db.varname.attlist =
+    db.varname.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.varname =
+    
+    ## The name of a variable
+    element varname { db.varname.attlist, db._text }
+}
+div {
+  db.returnvalue.role.attribute = attribute role { text }
+  db.returnvalue.attlist =
+    db.returnvalue.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.returnvalue =
+    
+    ## The value returned by a function
+    element returnvalue { db.returnvalue.attlist, db._text }
+}
+div {
+  db.type.role.attribute = attribute role { text }
+  db.type.attlist =
+    db.type.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.type =
+    
+    ## The classification of a value
+    element type { db.type.attlist, db._text }
+}
+div {
+  db.classname.role.attribute = attribute role { text }
+  db.classname.attlist =
+    db.classname.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.classname =
+    
+    ## The name of a class, in the object-oriented programming sense
+    element classname { db.classname.attlist, db._text }
+}
+div {
+  db.programlisting.role.attribute = attribute role { text }
+  db.programlisting.width.attribute = db.width.characters.attribute
+  db.programlisting.attlist =
+    db.programlisting.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.verbatim.attributes
+    & db.programlisting.width.attribute?
+  db.programlisting =
+    
+    ## A literal listing of all or part of a program
+    element programlisting {
+      db.programlisting.attlist, db.verbatim.contentmodel
+    }
+}
+db.admonition.blocks =
+  db.caution | db.important | db.note | db.tip | db.warning
+db.admonition.contentmodel = db._info.title.only, db.all.blocks+
+div {
+  db.caution.role.attribute = attribute role { text }
+  db.caution.attlist =
+    db.caution.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.caution =
+    
+    ## A note of caution
+    element caution { db.caution.attlist, db.admonition.contentmodel }
+}
+div {
+  db.important.role.attribute = attribute role { text }
+  db.important.attlist =
+    db.important.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.important =
+    
+    ## An admonition set off from the text
+    element important {
+      db.important.attlist, db.admonition.contentmodel
+    }
+}
+div {
+  db.note.role.attribute = attribute role { text }
+  db.note.attlist =
+    db.note.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.note =
+    
+    ## A message set off from the text
+    element note { db.note.attlist, db.admonition.contentmodel }
+}
+div {
+  db.tip.role.attribute = attribute role { text }
+  db.tip.attlist =
+    db.tip.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.tip =
+    
+    ## A suggestion to the user, set off from the text
+    element tip { db.tip.attlist, db.admonition.contentmodel }
+}
+div {
+  db.warning.role.attribute = attribute role { text }
+  db.warning.attlist =
+    db.warning.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.warning =
+    
+    ## An admonition set off from the text
+    element warning { db.warning.attlist, db.admonition.contentmodel }
+}
+db.error.inlines =
+  db.errorcode | db.errortext | db.errorname | db.errortype
+div {
+  db.errorcode.role.attribute = attribute role { text }
+  db.errorcode.attlist =
+    db.errorcode.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.errorcode =
+    
+    ## An error code
+    element errorcode { db.errorcode.attlist, db._text }
+}
+div {
+  db.errorname.role.attribute = attribute role { text }
+  db.errorname.attlist =
+    db.errorname.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.errorname =
+    
+    ## An error name
+    element errorname { db.errorname.attlist, db._text }
+}
+div {
+  db.errortext.role.attribute = attribute role { text }
+  db.errortext.attlist =
+    db.errortext.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.errortext =
+    
+    ## An error message.
+    element errortext { db.errortext.attlist, db._text }
+}
+div {
+  db.errortype.role.attribute = attribute role { text }
+  db.errortype.attlist =
+    db.errortype.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.errortype =
+    
+    ## The classification of an error message
+    element errortype { db.errortype.attlist, db._text }
+}
+db.systemitem.inlines = db._text | db.co
+div {
+  db.systemitem.class.enumeration =
+    
+    ## A daemon or other system process (syslogd)
+    "daemon"
+    | 
+      ## A domain name (example.com)
+      "domainname"
+    | 
+      ## An ethernet address (00:05:4E:49:FD:8E)
+      "etheraddress"
+    | 
+      ## An event of some sort (SIGHUP)
+      "event"
+    | 
+      ## An event handler of some sort (hangup)
+      "eventhandler"
+    | 
+      ## A filesystem (ext3)
+      "filesystem"
+    | 
+      ## A fully qualified domain name (my.example.com)
+      "fqdomainname"
+    | 
+      ## A group name (wheel)
+      "groupname"
+    | 
+      ## An IP address (127.0.0.1)
+      "ipaddress"
+    | 
+      ## A library (libncurses)
+      "library"
+    | 
+      ## A macro
+      "macro"
+    | 
+      ## A netmask (255.255.255.192)
+      "netmask"
+    | 
+      ## A newsgroup (comp.text.xml)
+      "newsgroup"
+    | 
+      ## An operating system name (Hurd)
+      "osname"
+    | 
+      ## A process (gnome-cups-icon)
+      "process"
+    | 
+      ## A protocol (ftp)
+      "protocol"
+    | 
+      ## A resource
+      "resource"
+    | 
+      ## A security context (a role, permission, or security token, for example)
+      "securitycontext"
+    | 
+      ## A server (mail.example.com)
+      "server"
+    | 
+      ## A service (ppp)
+      "service"
+    | 
+      ## A system name (hephaistos)
+      "systemname"
+    | 
+      ## A user name (ndw)
+      "username"
+  db.systemitem.class-enum.attribute =
+    
+    ## Identifies the nature of the system item
+    attribute class { db.systemitem.class.enumeration }?
+  db.systemitem.class-other.attribute =
+    
+    ## Identifies the nature of the non-standard system item
+    attribute otherclass { xsd:NMTOKEN }
+  db.systemitem.class-other.attributes =
+    
+    ## Identifies the kind of systemitemgraphic identifier
+    attribute class {
+      
+      ## Indicates that the system item is some 'other' kind.
+      "other"
+    }
+    & db.systemitem.class-other.attribute
+  db.systemitem.class.attribute =
+    db.systemitem.class-enum.attribute
+    | db.systemitem.class-other.attributes
+  db.systemitem.role.attribute = attribute role { text }
+  db.systemitem.attlist =
+    db.systemitem.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.systemitem.class.attribute?
+  db.systemitem =
+    
+    ## A system-related item or term
+    element systemitem { db.systemitem.attlist, db.systemitem.inlines* }
+}
+div {
+  db.option.role.attribute = attribute role { text }
+  db.option.attlist =
+    db.option.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.option =
+    
+    ## An option for a software command
+    element option { db.option.attlist, db._text }
+}
+div {
+  db.optional.role.attribute = attribute role { text }
+  db.optional.attlist =
+    db.optional.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.optional =
+    
+    ## Optional information
+    element optional { db.optional.attlist, db._text }
+}
+div {
+  db.property.role.attribute = attribute role { text }
+  db.property.attlist =
+    db.property.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+  db.property =
+    
+    ## A unit of data associated with some part of a computer system
+    element property { db.property.attlist, db._text }
+}
+div {
+  db.topic.status.attribute = db.status.attribute
+  db.topic.role.attribute = attribute role { text }
+  db.topic.type.attribute =
+    
+    ## Identifies the topic type
+    attribute type { text }
+  db.topic.attlist =
+    db.topic.role.attribute?
+    & db.topic.type.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.label.attribute?
+    & db.topic.status.attribute?
+  db.topic.info = db._info.title.req
+  db.topic =
+    
+    ## A modular unit of documentation not part of any particular narrative flow
+    element topic {
+      db.topic.attlist,
+      db.topic.info,
+      db.navigation.components*,
+      db.toplevel.blocks.or.sections,
+      db.navigation.components*
+    }
+}
diff --git a/contrib/samples/assembly/sample/Makefile b/contrib/samples/assembly/sample/Makefile
new file mode 100644 (file)
index 0000000..ebafae9
--- /dev/null
@@ -0,0 +1,20 @@
+# Makefile to demonstrate how to disassemble an existing
+# DocBook 5 book into an assembly with topics,
+# and then reassemble that into a book.
+
+disassemble:
+       -mkdir topics
+       xsltproc \
+       -o myassembly.xml \
+       --stringparam base.dir topics/ \
+       ../topic-maker-chunk.xsl \
+       originalbook.xml
+
+
+assemble:
+       xsltproc \
+       -o reassembled.xml \
+       ../assemble.xsl \
+       myassembly.xml
+
+
diff --git a/contrib/samples/assembly/sample/originalbook.xml b/contrib/samples/assembly/sample/originalbook.xml
new file mode 100755 (executable)
index 0000000..0a62110
--- /dev/null
@@ -0,0 +1,649 @@
+<?xml version="1.0"?>
+<book xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0"
+    xml:id="user.guide">
+    <info>
+        <title>DocBook XSL: The Incomplete Sample</title>
+        <author>
+            <personname>
+                <firstname>Bob</firstname>
+                <surname>Stayton</surname>
+            </personname>
+        </author>
+        <publishername>Sagehill Enterprises</publishername>
+        <copyright>
+            <year>2002</year>
+            <year>2003</year>
+            <year>2004</year>
+            <year>2005</year>
+            <year>2006</year>
+            <year>2007</year>
+            <holder>Sagehill
+Enterprises</holder>
+        </copyright>
+        <biblioid class="isbn">ISBN: 978-0-9741521-3-4</biblioid>
+        <edition>Fourth</edition>
+        <pubdate>September, 2007</pubdate>
+        <releaseinfo>A PDF version of this document is available for purchase
+from <link
+            xlink:href="http://www.sagehill.net">Sagehill Enterprises</link>.
+</releaseinfo>
+        <legalnotice>
+            <para>All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording, or by any information storage and retrieval system, without written permission from the publisher, except for the inclusion of brief quotations in a review.</para>
+        </legalnotice>
+        <legalnotice>
+            <title>Warning and Disclaimer</title>
+            <para>Every effort has been made to make this book as complete and accurate as possible, but Sagehill Enterprises makes no warranties, either express or implied, regarding the content or its fitness for any particular purpose.  The information is provided on an as-is basis. The author and Sagehill Enterprises shall have neither liability nor responsibility to any person or entity with respect to any loss or damages arising from the information contained in this book.</para>
+            <para>This guide contains links to third-party Web sites that are not under the control of Sagehill Enterprises, and Sagehill Enterprises and the author are not responsible for the content of any linked site. If you access a third-party website mentioned in this guide, then you do so at your own risk. Sagehill Enterprises provides these links only as a convenience, and the inclusion of the link does not imply that Sagehill Enterprises or the author endorses or accepts any responsibility for the content of those third-party sites.</para>
+        </legalnotice>
+        <legalnotice>
+            <title>Trademarks</title>
+            <para>All terms mentioned in this book that are known to be trademarks or service marks have been appropriately capitalized. Use of a term in this book should not be regarded as affecting the validity of any trademark or service mark.</para>
+        </legalnotice>
+        <publisher>
+            <publishername>Sagehill
+Enterprises</publishername>
+            <address><street>PO Box 2911</street>
+<city>Santa Cruz</city> <state>CA</state>
+<postcode>95063-2911</postcode>
+<otheraddr>Website: 
+<link xlink:href="http://www.sagehill.net"/></otheraddr>
+<email>info@sagehill.net</email></address>
+        </publisher>
+
+
+    </info>
+    <preface xml:id="preface">
+        <title>Preface</title>
+        <para>The nature of publishing has changed so much over the last twenty years that anybody
+    can be a publisher these days. Now you can reach a world-wide audience by putting a few
+    HTML pages up on your website. Or you can use desktop publishing software to produce
+    beautifully typeset material that can be printed on demand or downloaded to a printer
+    anywhere in the world. With DocBook, you can publish both ways from the same source
+    material.</para>
+        <section xml:id="WhatIsDocbook">
+            <title>What is DocBook?</title>
+            <para>DocBook is a collection of standards and tools for technical publishing. DocBook
+        was originally created by a consortium of software companies as a standard for
+        computer documentation. But the basic <quote>book</quote> features of DocBook can be
+        used for other kinds of content, so it has been adapted to many purposes.</para>
+            <para>The core DocBook standard is the <glossterm>DocBook Document Type Definition
+            (DTD)</glossterm> maintained by the DocBook Technical Committee in <indexterm>
+                <primary>OASIS</primary> </indexterm><link
+                xmlns:xlink="http://www.w3.org/1999/xlink"
+                xlink:href="http://www.oasis-open.org/docbook"
+                >OASIS</link>. The DTD
+        defines the vocabulary of content elements that an author can use and how they
+        relate to each other. For example, a <literal>book</literal> element can contain a
+            <literal>title</literal> element, any number of <literal>para</literal> elements
+        for paragraphs, and any number of <literal>chapter</literal> elements. Using the DTD
+        and XML syntax, authors mark up their text content with tag names enclosed in angle
+        brackets like <literal>&lt;chapter&gt;</literal>. The markup is similar to
+        HTML, but with more tags and tighter rules.</para>
+            <para>Text that is marked up in this standard way can be processed by any number of
+        software tools. A major advantage of DocBook is the availability of DocBook tools
+        from many sources, not just from a single vendor of a proprietary file format. You
+        can mix and match components for editing, typesetting, version control, and HTML
+        conversion. You can assemble a custom system that is well suited to your needs, and
+        many of the components are available for free.</para>
+            <para>The other major advantage of DocBook is the set of free stylesheets that are
+        available for it. Written by Norman Walsh in the Extensible Stylesheet Language
+        (XSL), these stylesheets enable anyone to publish their DocBook content in print and
+        HTML. The stylesheets are now developed and maintained as an open-source project on
+        <link
+                xmlns:xlink="http://www.w3.org/1999/xlink"
+                xlink:href="http://sourceforge.net/projects/docbook">SourceForge</link><indexterm>
+                <primary>SourceForge</primary>
+                </indexterm>. An active community of users and contributors keeps up the development
+        of the stylesheets and answers questions.</para>
+            <para>As a publishing system, DocBook is best suited for any of these situations:</para>
+            <itemizedlist>
+                <listitem>
+                    <para>Large quantities of content.</para>
+                </listitem>
+                <listitem>
+                    <para>Highly structured content.</para>
+                </listitem>
+                <listitem>
+                    <para>Content that needs to be interchanged among otherwise incompatible
+                systems.</para>
+                </listitem>
+                <listitem>
+                    <para>Content that needs automated batch processing.</para>
+                </listitem>
+                <listitem>
+                    <para>Content to be rendered in multiple output forms and versions.</para>
+                </listitem>
+            </itemizedlist>
+            <para>DocBook is not a WYSIWYG word processor (although graphical editors are available
+        for DocBook). DocBook is hardly worth the trouble for short or one-off documents.
+        And since the formatting is strictly by batch process with stylesheets, DocBook is
+        not well matched to highly designed layout-driven content like magazines.</para>
+            <para>DocBook is well suited to any collection of technical documentation that is
+        regularly maintained and published. Because you are not locked into a single vendor,
+        you have flexibility in your choice of processes and tools, both now and in the
+        future. Multiple authors can contribute, and their content can easily be merged
+        because all the authors are using a standard markup language. The files are plain
+        text, not binary, so they also work well with most version control systems.</para>
+            <para>Setting up a DocBook system will take some time and effort. But the payoff will be
+        an efficient, flexible, and inexpensive publishing system that can grow with your
+        needs.</para>
+        </section>
+        <section xml:id="Audience">
+            <title>Audience</title>
+            <para>This book is for people who want to publish DocBook XML files using the DocBook
+        XSL stylesheets. It is a "how to" guide that gets you up and running quickly, and
+        then provides the details you need to gain access to the full power of DocBook. The
+        book covers:</para>
+            <itemizedlist>
+                <listitem>
+                    <para>Obtaining and setting up XSL tools and the DocBook XSL stylesheets.</para>
+                </listitem>
+                <listitem>
+                    <para>Using the built-in options to control the XSL stylesheets.</para>
+                </listitem>
+                <listitem>
+                    <para>Customizing the XSL stylesheets to match your design needs.</para>
+                </listitem>
+            </itemizedlist>
+            <para>(This book does not cover the SGML version of DocBook, nor the DocBook DSSSL
+        stylesheets.) </para>
+            <para>You do not need to be an XML expert to use DocBook XSL. You will need to know
+        about XML elements and attributes, since you will be working with DocBook XML files.
+        And you will need to know how to execute commands by typing them on a command line
+        rather than through a point-and-click interface. If you know nothing about XSL, you
+        can still use the stylesheets to generate high-quality output. You can also
+        customize to a degree using the built-in stylesheet parameters. Learning some XSL
+        will enable you to more fully customize the output. This book can teach you basic
+        XSL, and provides dozens of examples that you can use and learn from.</para>
+            <para>This book will not show you how to write DocBook documents. The best reference for
+        writing in DocBook is <citetitle>DocBook: The Definitive Guide</citetitle> by Norman
+        Walsh. That book has been made available by O'Reilly Books for reading from the web
+        at <link
+                xmlns:xlink="http://www.w3.org/1999/xlink"
+                xlink:href="http://docbook.org/tdg/en/html/docbook.html"
+                />. Keep that link
+        bookmarked for future reference. A printed and bound version of the book is also
+        available from O'Reilly Books, but it is a bit out of date now. The online book
+        documents the most recent version of the DTD.</para>
+        </section>
+    </preface>
+    <part xml:id="ToolsPart">
+        <title>Setting up the tools</title>
+        <chapter xml:id="introchapter">
+            <title>Introduction</title>
+            <para>The <link xmlns:xlink="http://www.w3.org/1999/xlink"
+                xlink:href="http://www.w3.org/Style/XSL/">
+                <citetitle>Extensible Stylesheet Language (XSL)</citetitle>
+                </link> is a formal Recommendation put forward by the <link
+                xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.w3.org"
+                >World Wide Web Consortium (W3C)</link> as a language
+        for expressing stylesheets. It complements the <link
+                xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.w3.org/XML/">
+                <citetitle>Extensible Markup Language (XML)</citetitle>
+                </link> by providing the methods for formatting content written in XML. One of the
+        major goals of XML was keeping content and its semantic markup separate from its
+        formatting, so that formatting could be applied independently. An XSL stylesheet
+        describes the formatting that can be applied to XML files using an XSL processor.
+        The XSL standard and XSL processors are described more fully in <xref
+                linkend="XSLprocessors"/>.</para>
+            <para>The DocBook XSL stylesheets were written by Norman Walsh to help people publish
+        their DocBook content with XSL. The stylesheets are now an open-source project
+        maintained on <link
+                xmlns:xlink="http://www.w3.org/1999/xlink"
+                xlink:href="http://sourceforge.net/projects/docbook/"
+                >SourceForge</link>. The stylesheet distribution consists of a collection of
+        modular XSL files that are assembled into several complete XSL stylesheets. There is
+        a stylesheet for generating a single HTML file, and one for generating multiple
+        smaller HTML files from a single DocBook document. There are stylesheets for print
+        output, XHTML output, HTML Help output, and JavaHelp output. The stylesheet
+        collection is freely available for download. Since there are XSL processors for all
+        major computer types, you can use DocBook on Unix, Linux, Windows, and Macintosh
+        computers.</para>
+            <para>This book shows you how to use and customize the DocBook XSL stylesheets. It
+        unlocks the power of these stylesheets by documenting all of their features and
+        making them easy to use.</para>
+            <section xml:id="HowOrganized">
+                <title>How this book is organized</title>
+                <para>Applying an XSL stylesheet to an XML file is a very straightforward process,
+        once you get the tools working. <emphasis
+                    role="bold"
+                    >Part I</emphasis> of this
+        book tells you how to obtain and set up the XSL tools. It covers several XSL
+        processors, and provides essential details for each one. It also covers XML
+        Catalogs, which are used to map file references to actual directory locations on
+        your system. XML Catalogs make the tools more versatile and portable.</para>
+                <para> Once you have the tools working, you can generate formatted print and HTML
+        output from your DocBook XML documents. As you use the stylesheets, you will
+        probably want to change certain aspects about the format or processing. The
+        DocBook stylesheets provide a large number of options. The options are in the
+        form of stylesheet parameters, which let you assign a value to a named variable
+        that is used in the stylesheet. You can do quite a bit of customization of your
+        output using just the parameters. <emphasis
+                    role="bold"
+                    >Part II</emphasis> of
+        this book describes the various stylesheet parameters and how to use them. </para>
+                <para>You will turn to <emphasis role="bold"
+                    >Part III</emphasis> when you want to
+        change something but you cannot find a parameter to do it. At that point you
+        will need to do some stylesheet customization, which is done using the XSL
+        language. You'll need to learn the syntax and methods of XSL, so that you can
+        write a customization file with it. The chapters in Part III describe the
+        methods of customization, as well as many applications for HTML and print
+        output. You can use the appendix introducing XSL  to get started with XSL, but it
+        is beyond the scope of this book to teach you all about XSL. You will need a
+        good XSL reference book to create extensive customization. You can also use
+            the appendix on debugging XSL  for help with debugging your
+        customizations.</para>
+                <para><emphasis role="bold"
+                    >Part IV</emphasis> of this book covers all of the
+        special features of DocBook that require extra attention. That part is an
+        encyclopedia of special topics, from bibliographies to websites. Use it as a
+        reference when you need to process a certain feature, or browse it for new
+        possibilities that you did not know DocBook could do.</para>
+                <note>
+                    <title>Note on examples</title>
+                    <para><indexterm> <primary>backslash</primary>
+                        <secondary>in examples</secondary>
+                        </indexterm>Some examples of commands and code in this book are too long to
+            fit on one line. Where a long line is broken to fit, the line will end with
+            a backslash character "\". If you are using Microsoft Windows, you should
+            omit the backslash character and join such a line to the following line. If
+            you are using a Unix shell, you can use the example "as is".</para>
+                </note>
+            </section>
+            <section xml:id="OnlineResources">
+                <title>Online resources for finding solutions to problems</title>
+                <para><indexterm> <primary>online resources</primary>
+                    </indexterm>If you run into problems with the DocBook XSL stylesheets that are
+            not addressed anywhere in this guide, you can use a number of online resources
+            to find solutions. <itemizedlist>
+                    <listitem> <para><indexterm> <primary>mailing lists</primary>
+                    </indexterm><indexterm> <primary>docbook-apps mailing list</primary>
+                    </indexterm>First try searching the archives of the <systemitem
+                    role="mailinglist"
+                    >docbook-apps</systemitem> mailing list for
+                        keywords related to the problem. There is a good chance that someone
+                        else has run into something similar. Archives of the list are
+                        available at two different sites: an <link
+                    xmlns:xlink="http://www.w3.org/1999/xlink"
+                    xlink:href="http://lists.oasis-open.org/archives/docbook-apps/"
+                    >archive
+                            at OASIS</link> (which also hosts the actual mailing list) and
+                        an <link
+                    xmlns:xlink="http://www.w3.org/1999/xlink"
+                    xlink:href="http://sources.redhat.com/ml/docbook-apps/"
+                    >archive
+                            at Red Hat</link>.</para>
+                    <para>If, for example, you are seeing a specific error message, trying
+                        cutting and pasting the error message (or some part of it) into the
+                        search form for the mailing list archives.</para>
+                    </listitem> <listitem> <para><indexterm> <primary>chat channel</primary>
+                    </indexterm><indexterm> <primary>IRC channel</primary>
+                    </indexterm>You can get help in real time on the <systemitem role="channel"
+                    >#docbook</systemitem> channel on <systemitem class="fqdomainname"
+                    >irc.openprojects.net</systemitem>. If your
+                        browser supports IRC URLs (or, like Mozilla, has a built-in IRC
+                        client), you can access the channel by entering the following URL in
+                        your browser: <blockquote>
+                    <simpara> <link xmlns:xlink="http://www.w3.org/1999/xlink"
+                    xlink:href="irc://irc.openprojects.net#docbook"/> </simpara> </blockquote>
+                    </para> </listitem> <listitem>
+                    <para>If you cannot find a solution in the <systemitem role="mailinglist"
+                    >docbook-apps</systemitem> or on the
+                            <systemitem
+                    role="channel"
+                    >#docbook</systemitem>, you should try
+                        posting a question to <systemitem
+                    role="mailinglist"
+                    >docbook-apps</systemitem>. To subscribe to the list, send a
+                        message from your email account to: <blockquote>
+                    <simpara> <email>docbook-apps-subscribe@lists.oasis-open.org</email> </simpara>
+                    </blockquote> To post a message to the list, send it to: <blockquote> <simpara>
+                    <email>docbook-apps@lists.oasis-open.org</email> </simpara> </blockquote>
+                    </para> <para>Please read the <link xmlns:xlink="http://www.w3.org/1999/xlink"
+                    xlink:href="http://www.oasis-open.org/docbook/mailinglist/guidelines.html"
+                    >list guidelines</link> first, and to include examples of your
+                        DocBook source document and your output (for example, HTML or FO
+                        output) along with details about the tools you're using (including
+                        version numbers of the tools). <note>
+                    <simpara>Do not include attachments when you post to <systemitem
+                    role="mailinglist"
+                    >docbook-apps</systemitem>—the mailing
+                                list management software automatically strips out
+                                attachments. If you have a long example or an output format
+                                that you cannot paste into your message, post it to a Web
+                                site, and then include the URL in your message to the
+                                list.</simpara>
+                    </note> </para> </listitem> <listitem> <para>The <link
+                    xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://wiki.docbook.org"
+                    >DocBook Wiki</link>
+                        website collects contributions from DocBook users and makes them
+                        available to the world.</para>
+                    </listitem> <listitem> <para><indexterm> <primary>SourceForge</primary>
+                    </indexterm><indexterm> <primary>DocBook</primary>
+                    <secondary>SourceForge</secondary>
+                    </indexterm>If you find something that seems to be a legitimate bug
+                        in the DocBook XSL stylesheets, you can file a bug report from the
+                            <link
+                    xmlns:xlink="http://www.w3.org/1999/xlink"
+                    xlink:href="http://sourceforge.net/tracker/?group_id=21935"
+                    >Tracker page</link> at the <link xmlns:xlink="http://www.w3.org/1999/xlink"
+                    xlink:href="https://sourceforge.net/projects/docbook/"
+                    >DocBook Open
+                            Repository</link> site at SourceForge. If instead you want to
+                        request an enhancement to the stylesheets, file a <emphasis>feature
+                            request</emphasis> from the same Tracker page at the SourceForge
+                        site. <note>
+                    <simpara>You will need to have a SourceForge user account to
+                                file a bug report or feature request. This requirement makes
+                                it easier follow up on bug reports. If the DocBook XSL
+                                stylesheet developers need to get more details about a
+                                specific bug report, it's difficult to follow up on it if it
+                                was submitted anonymously.</simpara>
+                    <simpara>You can <link xmlns:xlink="http://www.w3.org/1999/xlink"
+                    xlink:href="https://sourceforge.net/account/registration"
+                    >register for an account</link> at the SourceForge
+                                site.</simpara>
+                    </note> </para> </listitem> </itemizedlist> </para>
+            </section>
+        </chapter>
+        <chapter xml:id="XSLprocessors">
+            <title>XSL processors</title>
+            <para><indexterm> <primary>XSL</primary> <secondary>processors</secondary>
+                </indexterm>An <emphasis>XSL processor</emphasis> is the software that transforms an
+        XML file into formatted output. There is a growing list of XSL processors to choose
+        from. Each tool implements parts or all of the XSL standard, which actually has
+        several components: <variablelist>
+                <title>The XSL Standards</title> <varlistentry>
+                <term>Extensible Stylesheet Language (XSL)</term> <listitem>
+                <para>A language for expressing stylesheets written in XML. It includes
+                        the XSL formatting objects (XSL-FO) language, but refers to separate
+                        documents for the transformation language and the path
+                        language.</para>
+                </listitem> </varlistentry> <varlistentry> <term>XSL Transformation (XSLT)</term>
+                <listitem>
+                <para>The part of XSL for transforming XML documents into other XML
+                        documents, HTML, or text. It can be used to rearrange the content
+                        and generate new content.</para>
+                </listitem> </varlistentry> <varlistentry> <term>XML Path Language (XPath)</term>
+                <listitem>
+                <para>A language for addressing parts of an XML document. It is used to
+                        find the parts of your document to apply different styles to. All
+                        XSL processors use this component.</para>
+                </listitem> </varlistentry> </variablelist></para>
+            <para>To publish HTML from your XML documents, you just need an XSLT processor. It will include the XPath
+        language since that is used extensively in XSLT. To get to print, you need an XSLT
+        processor to produce an intermediate formatting objects (FO) file, and then you need
+        an XSL-FO processor to produce
+        PostScript or PDF output from the FO file. A diagram of the <link
+                xmlns:xlink="http://www.w3.org/1999/xlink"
+                xlink:href="http://nwalsh.com/docbook/procdiagram/index.html"
+                >DocBook Publishing
+            Model</link> <indexterm>
+                <primary>publishing model</primary>
+                </indexterm>is available if you want to see how all the components flow
+        together.</para>
+            <section xml:id="XSLTprocessors">
+                <title>XSLT processors</title>
+                <para><indexterm> <primary>XSLT processor</primary>
+                    </indexterm>Currently there are three processors that are widely used for XSLT
+        processing because they most closely conform to the XSLT specification: <variablelist>
+                    <varlistentry> <term>Saxon</term> <listitem> <para><indexterm>
+                    <primary>Saxon</primary> </indexterm>Saxon (<link
+                    xmlns:xlink="http://www.w3.org/1999/xlink"
+                    xlink:href="http://saxon.sourceforge.net/"
+                    />)
+                        was written by Michael Kay, the author of <citetitle>XSLT
+                            Reference</citetitle>, one of the best books on XSLT. Saxon
+                        is a free processor written in Java, so it can be run on any
+                        operating system with a modern Java interpreter. Saxon now comes
+                        in two flavors: Saxon 6 which handles the XSLT 1.0 standard, and
+                        Saxon 8 which handles the newly emerging XSLT 2.0 and other new
+                        XML standards.</para>
+                    </listitem> </varlistentry> <varlistentry> <term>Xalan</term> <listitem>
+                    <para><indexterm> <primary>Xalan</primary> </indexterm>Xalan (<link
+                    xmlns:xlink="http://www.w3.org/1999/xlink"
+                    xlink:href="http://xml.apache.org/xalan-j/index.html"
+                    />) is part of
+                        the Apache XML Project. It has versions written in both Java and
+                        C++, both of them free. The Java version is described in this
+                        book because it is highly portable and easier to set up.
+                        Generally Xalan is used with the Xerces XML parser, also
+                        available from the Apache XML Project.</para>
+                    </listitem> </varlistentry> <varlistentry> <term>xsltproc</term> <listitem>
+                    <indexterm> <primary>xsltproc</primary> </indexterm> <para>The xsltproc (<link
+                    xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://xmlsoft.org/XSLT/"
+                    />)
+                        processor is written in C by Daniel Veillard. It is free, as
+                        part of the open source libxml2 library from the Gnome
+                        development project. It is considered the fastest of the
+                        processors, and is highly conformant to the specification. It is
+                        much faster than either of the Java processors. It also
+                        processes XIncludes.</para>
+                    </listitem> </varlistentry> </variablelist></para>
+                <para>There are a few other XSLT processors that should also be mentioned: <variablelist>
+                    <varlistentry> <term>XT</term> <listitem> <para>James Clark's XT (<link
+                    xmlns:xlink="http://www.w3.org/1999/xlink"
+                    xlink:href="http://www.blnz.com/xt/index.html"
+                    />) was the first
+                        useful XSLT engine, and it is still in use. It is written in
+                        Java, so it runs on many platforms, and it is free. XT comes
+                        with James Clark's nonvalidating parser XP, but you can
+                        substitute a different Java parser.</para>
+                    </listitem> </varlistentry> <varlistentry> <term>MSXML</term> <listitem>
+                    <para>Microsoft's MSXML (<link xmlns:xlink="http://www.w3.org/1999/xlink"
+                    xlink:href="http://msdn.microsoft.com/xml/"
+                    />) engine includes an XSLT processor. It is reported to be
+                        fast, but only runs on Windows.</para>
+                    </listitem> </varlistentry> <varlistentry> <term>Sablotron</term> <listitem>
+                    <para>Sablotron (<link xmlns:xlink="http://www.w3.org/1999/xlink"
+                    xlink:href="http://www.gingerall.com/charlie/ga/xml/p_sab.xml"
+                    />),
+                        written in C++, from Ginger Alliance.</para>
+                    </listitem> </varlistentry> <varlistentry> <term>4XSLT</term> <listitem>
+                    <para>4XSLT (<link xmlns:xlink="http://www.w3.org/1999/xlink"
+                    xlink:href="http://sourceforge.net/projects/foursuite/"
+                    />), written in Python, now an open project on
+                        SourceForge.</para>
+                    </listitem> </varlistentry> </variablelist></para>
+            </section>
+            <section xml:id="FOprocessors">
+                <title>XSL-FO processors</title>
+                <para><indexterm> <primary>XSL-FO processor</primary>
+                    </indexterm>XSL-FO processors are really typesetting engines. An XSL-FO file is
+        a mixture of text from your XML source document and XSL-FO tags that suggest how
+        the text should be formatted. It is the XSL-FO processor that actually creates
+        the typeset lines of text and lays them out on pages. An XSL-FO processor
+        typically generates a PDF or PostScript file which can be fed to a printer to
+        produce hardcopy output.</para>
+                <para>Currently there are many XSL-FO processors, but few of them have completely
+        implemented the standard. There are at least three reasons for this: <itemizedlist>
+                    <listitem>
+                    <para>The XSL-FO standard was finalized almost two years after the XSLT
+                    standard.</para>
+                    </listitem> <listitem> <para>The XSL-FO standard is big and complicated.</para>
+                    </listitem> <listitem> <para>Typesetting is hard.</para> </listitem>
+                    </itemizedlist></para>
+                <para>The authors of the XSL-FO standard recognized how difficult it would be to
+        implement, and so divided it into three levels of conformance: basic, extended,
+        and complete. That way a processor can claim conformance to the lower
+        conformance levels and produce useful output, while still be under development
+        for the higher conformance levels.</para>
+                <para>Here are some of the currently available XSL-FO processors, listed in
+        alphabetical order. FOP, PassiveTeX, and xmlroff are the free processors, but
+        the commercial products implement more of the XSL-FO standard.</para>
+                <variablelist>
+                    <varlistentry>
+                        <term>E3</term>
+                        <listitem>
+                            <para><indexterm> <primary>E3 FO processor</primary>
+                                </indexterm><indexterm> <primary>Arbortext</primary>
+                                </indexterm>High end publishing server from Arbortext, Inc. (<link
+                                xmlns:xlink="http://www.w3.org/1999/xlink"
+                                xlink:href="http://www.arbortext.com"
+                                />). It runs on Windows and
+                    Unix.</para>
+                        </listitem>
+                    </varlistentry>
+                    <varlistentry>
+                        <term>FOP</term>
+                        <listitem>
+                            <para><indexterm> <primary>FOP</primary>
+                                </indexterm>FOP is a Java-based processor available free from the
+                    Apache XML Project (<link
+                                xmlns:xlink="http://www.w3.org/1999/xlink"
+                                xlink:href="http://xml.apache.org/fop/"
+                                />). FOP
+                    can produce usable output, but it is still under development and has
+                    some limitations. </para>
+                        </listitem>
+                    </varlistentry>
+                    <varlistentry>
+                        <term>PassiveTeX</term>
+                        <listitem>
+                            <para><indexterm> <primary>PassiveTeX</primary>
+                                </indexterm>PassiveTeX from Sebastian Rahtz (<link
+                                xmlns:xlink="http://www.w3.org/1999/xlink"
+                                xlink:href="http://www.tei-c.org.uk/Software/passivetex/"
+                                />) is a free
+                    XSL-FO processor based on TeX. It has fallen behind in its
+                    implementation of the XSL-FO specification, and many features of
+                    DocBook XSL do not work in PassiveTeX. Not recommended.</para>
+                        </listitem>
+                    </varlistentry>
+                    <varlistentry>
+                        <term>Unicorn Formatting Objects</term>
+                        <listitem>
+                            <para><indexterm> <primary>Unicorn Formatting Objects</primary>
+                                </indexterm>A commercial product from Unicorn Enterprises SA (<link
+                                xmlns:xlink="http://www.w3.org/1999/xlink"
+                                xlink:href="http://www.unicorn-enterprises.com"
+                                />). Implements only a
+                    subset of the XSL-FO standard. For Windows only.</para>
+                        </listitem>
+                    </varlistentry>
+                    <varlistentry>
+                        <term>XEP</term>
+                        <listitem>
+                            <para><indexterm> <primary>XEP</primary>
+                                </indexterm>A commercial product from RenderX <indexterm>
+                                <primary>RenderX</primary> </indexterm>(<link
+                                xmlns:xlink="http://www.w3.org/1999/xlink"
+                                xlink:href="http://www.renderx.com"
+                                />). It is a
+                    Java-based product that runs on most platforms.</para>
+                        </listitem>
+                    </varlistentry>
+                    <varlistentry>
+                        <term>Xinc</term>
+                        <listitem>
+                            <para><indexterm> <primary>Xinc FO processor</primary>
+                                </indexterm>A commercial product from Lunasil LTD (<link
+                                xmlns:xlink="http://www.w3.org/1999/xlink"
+                                xlink:href="http://www.lunasil.com/"
+                                />). It is a Java-based product
+                    that runs on Linux and Windows. </para>
+                        </listitem>
+                    </varlistentry>
+                    <varlistentry>
+                        <term>XML2PDF</term>
+                        <listitem>
+                            <para><indexterm> <primary>XML2PDF</primary>
+                                </indexterm>A commercial product from Altsoft (<link
+                                xmlns:xlink="http://www.w3.org/1999/xlink"
+                                xlink:href="http://www.alt-soft.com/"/>). For Windows only.</para>
+                        </listitem>
+                    </varlistentry>
+                    <varlistentry>
+                        <term> XML Professional Publisher (XPP)</term>
+                        <listitem>
+                            <para><indexterm> <primary>XPP FO processor</primary>
+                                </indexterm>A high-end XML publishing environment from XyEnterprise
+                        (<link
+                                xmlns:xlink="http://www.w3.org/1999/xlink"
+                                xlink:href="http://www.xyenterprise.com/"
+                                />). It runs on
+                    Windows and Unix.</para>
+                        </listitem>
+                    </varlistentry>
+                    <varlistentry>
+                        <term>xmlroff</term>
+                        <listitem>
+                            <para><indexterm> <primary>xmlroff</primary> </indexterm>xmlroff (<link
+                                xmlns:xlink="http://www.w3.org/1999/xlink"
+                                xlink:href="http://xmlroff.sourceforge.net/"
+                                />)
+                    is a free open source project based on libxml2 and other GNOME
+                    libraries. It is written in C.</para>
+                        </listitem>
+                    </varlistentry>
+                    <varlistentry>
+                        <term>XSL Formatter</term>
+                        <listitem>
+                            <para><indexterm> <primary>XSL Formatter</primary>
+                                <see>Antenna House</see> </indexterm><indexterm>
+                                <primary>Antenna House</primary>
+                                </indexterm>A commercial product from Antenna House (<link
+                                xmlns:xlink="http://www.w3.org/1999/xlink"
+                                xlink:href="http://www.antennahouse.com"
+                                />). It runs on Windows, Unix,
+                    and Linux.</para>
+                        </listitem>
+                    </varlistentry>
+                    <varlistentry>
+                        <term>other</term>
+                        <listitem>
+                            <para>Other XSL-FO processors are listed on the <link
+                                xmlns:xlink="http://www.w3.org/1999/xlink"
+                                xlink:href="http://www.w3.org/Style/XSL/"
+                                >W3C's XSL information
+                        page</link>. </para>
+                        </listitem>
+                    </varlistentry>
+                </variablelist>
+                <para>A useful method for evaluating an XSL-FO processor is to review its compliance
+        to the XSL-FO standard. Most processor vendors can provide a summary of which
+        XSL-FO elements and properties their processor supports. Scan the list for
+        features you need to see if they are supported. Such summaries are also useful
+        in comparing different processors.</para>
+            </section>
+            <section xml:id="Portability">
+                <title>Portability considerations</title>
+                <para><indexterm> <primary>portability</primary>
+                    </indexterm>If you need to be able to process XML files on more than one
+            operating system, you need to consider how portable the XSL processors
+            are.</para>
+                <itemizedlist>
+                    <listitem>
+                        <para>Java-based processors are highly portable, as long as each platform
+                    has a modern Java interpreter. (How modern depends on the individual
+                    processor and version. Check the processor's requirements list.) With
+                    Saxon, Xalan-Java, FOP, and other Java-based processors, you can install
+                    a few Java archives without any compiling and produce identical results
+                    on Linux, Unix, Windows, and Macintosh.</para>
+                    </listitem>
+                    <listitem>
+                        <para>Processors written in C such as xsltproc and Sablotron are less
+                    portable. You need a version compiled for each platform you want to run
+                    it on. Many are available in precompiled packages, such as RPMs for
+                    Linux or Zip files for Windows. But the packaged versions can lag behind
+                    the latest version, so you may need to compile it yourself for a given
+                    platform. The C code is written to be portable, but there are always
+                    issues that come up when you have to compile.</para>
+                    </listitem>
+                    <listitem>
+                        <para>The PassiveTeX FO processor is unique in that it is written in TeX, a
+                    typesetting language. TeX is also very portable, but it is currently
+                    difficult to get PassiveTeX to work properly with the DocBook XSL
+                    stylesheets</para>
+                    </listitem>
+                </itemizedlist>
+                <para>Another portability consideration is file permissions. Some packages may try
+            to install files into areas of a filesystem controlled by a system
+            administrator. If you do not have the necessary permissions, you may not be able
+            to install a given package. All of the processors can be installed elsewhere,
+            but you may need to spend time figuring out how to do so.</para>
+            </section>
+        </chapter>
+    </part>
+</book>
diff --git a/contrib/samples/assembly/topic-maker-chunk.xsl b/contrib/samples/assembly/topic-maker-chunk.xsl
new file mode 100644 (file)
index 0000000..d227454
--- /dev/null
@@ -0,0 +1,200 @@
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+                xmlns:exsl="http://exslt.org/common"
+                xmlns:xlink="http://www.w3.org/1999/xlink"
+                xmlns:d="http://docbook.org/ns/docbook"
+                xmlns="http://docbook.org/ns/docbook"
+               version="1.0"
+                exclude-result-prefixes="exsl">
+
+<!-- ********************************************************************
+     $Id: topic-maker-chunk.xsl,v 1.6 2011-08-18 19:16:28 bobs Exp $
+     ********************************************************************
+-->
+
+<xsl:import href="topic-maker.xsl"/>
+
+<xsl:import href="file:///c:/xml/docbook-xsl-ns-1.75.2/xhtml/chunk-common.xsl"/>
+
+<xsl:include href="file:///c:/xml/docbook-xsl-ns-1.75.2/xhtml/chunk-code.xsl"/>
+
+<xsl:param name="root.filename">frontmatter</xsl:param>
+<xsl:param name="root.id.suffix">-info</xsl:param>
+
+<xsl:template match="/" priority="1">
+  <xsl:apply-templates select="/" mode="process.root"/>
+
+  <xsl:call-template name="make.assembly"/>
+
+</xsl:template>
+
+<xsl:template name="chunk-element-content">
+  <xsl:param name="content">
+    <xsl:apply-imports/>
+  </xsl:param>
+
+  <xsl:copy-of select="$content"/>
+</xsl:template>
+
+<xsl:template name="make.assembly">
+  <xsl:variable name="content">
+    <assembly xmlns:xlink="http://www.w3.org/1999/xlink">
+      <xsl:call-template name="make.resources"/>
+      <xsl:call-template name="make.structure"/>
+    </assembly>
+  </xsl:variable>
+
+  <xsl:variable name="filename">
+    <xsl:if test="$manifest.in.base.dir != 0">
+      <xsl:value-of select="$base.dir"/>
+    </xsl:if>
+    <xsl:value-of select="$assembly.filename"/>
+  </xsl:variable>
+
+  <xsl:call-template name="write.chunk">
+    <xsl:with-param name="content" select="$content"/>
+    <xsl:with-param name="filename" select="$filename"/>
+    <xsl:with-param name="indent">yes</xsl:with-param>
+  </xsl:call-template>
+
+</xsl:template>
+
+<xsl:template name="make.structure">
+  <xsl:param name="root" select="/*[1]"/>
+
+  <xsl:param name="root.resourceref">
+    <xsl:call-template name="object.id">
+      <xsl:with-param name="object" select="$root"/>
+    </xsl:call-template>
+  </xsl:param>
+
+  <structure>
+    <xsl:attribute name="type">
+      <xsl:value-of select="local-name($root)"/>
+    </xsl:attribute>
+    <xsl:attribute name="xml:id">
+      <xsl:value-of select="$root.resourceref"/>
+    </xsl:attribute>
+
+    <xsl:copy-of select="($root/d:title | $root/d:info/d:title)[1]"/>
+
+    <!-- Put the title and info stuff in a content-only module -->
+    <module resourceref="{$root.resourceref}{$root.id.suffix}" contentonly="true"/>
+    <xsl:apply-templates select="$root/*" mode="module.list"/>
+  </structure>
+</xsl:template>
+
+<xsl:template match="*" mode="module.list">
+  <xsl:variable name="is.chunk">
+    <xsl:call-template name="chunk">
+      <xsl:with-param name="node" select="."/>
+    </xsl:call-template>
+  </xsl:variable>
+
+  <!-- generate an output element for renderas? -->
+  <xsl:variable name="src.element" select="concat(' ', local-name(.), ' ')"/>
+
+  <xsl:variable name="is.topic">
+    <xsl:choose>
+      <xsl:when test="contains($topic.list, $src.element)">1</xsl:when>
+      <xsl:otherwise>0</xsl:otherwise>
+    </xsl:choose>
+  </xsl:variable>
+
+  <xsl:if test="$is.chunk = 1">
+    <module>
+      <xsl:attribute name="resourceref">
+        <xsl:call-template name="object.id"/>
+      </xsl:attribute>
+
+      <xsl:if test="$is.topic = 1">
+        <output renderas="{local-name()}"/>
+      </xsl:if>
+
+      <xsl:apply-templates select="*" mode="module.list"/>
+    </module>
+  </xsl:if>
+</xsl:template>
+
+<xsl:template name="make.resources">
+  <resources>
+    <!-- Add xml:base from $base.dir if manifest not in base.dir -->
+    <xsl:if test="string-length($base.dir) != 0 and
+                  $manifest.in.base.dir = 0">
+      <xsl:attribute name="xml:base">
+        <!-- strip off trailing slash for xml:base -->
+        <xsl:choose>
+          <xsl:when test="substring($base.dir, string-length($base.dir),1) = '/'">
+            <xsl:value-of select="substring($base.dir, 1, string-length($base.dir) -1)"/>
+          </xsl:when>
+          <xsl:otherwise>
+            <xsl:value-of select="$base.dir"/>
+          </xsl:otherwise>
+        </xsl:choose>
+      </xsl:attribute>
+    </xsl:if>
+    <xsl:apply-templates select="/*[1]" mode="resource.list"/>
+  </resources>
+</xsl:template>
+
+<xsl:template match="*" mode="resource.list">
+  <xsl:variable name="is.chunk">
+    <xsl:call-template name="chunk">
+      <xsl:with-param name="node" select="."/>
+    </xsl:call-template>
+  </xsl:variable>
+
+  <xsl:if test="$is.chunk = 1">
+    <resource>
+      <xsl:attribute name="fileref">
+        <!--
+        <xsl:if test="$manifest.in.base.dir = 0">
+          <xsl:value-of select="$base.dir"/>
+        </xsl:if>
+        -->
+        <xsl:apply-templates select="." mode="chunk-filename"/>
+      </xsl:attribute>
+
+      <xsl:attribute name="xml:id">
+        <xsl:call-template name="object.id"/>
+      </xsl:attribute>
+
+      <xsl:variable name="title">
+        <xsl:apply-templates select="." mode="title.markup"/>
+      </xsl:variable>
+      <xsl:if test="string-length($title) != 0">
+        <description>
+          <xsl:value-of select="$title"/>
+        </description>
+      </xsl:if>
+
+    </resource>
+  </xsl:if>
+
+  <xsl:apply-templates select="*" mode="resource.list"/>
+</xsl:template>
+
+<!-- special case for root id on structure element -->
+<xsl:template match="/*" mode="resource.list">
+  <xsl:param name="root.resourceref">
+    <xsl:call-template name="object.id">
+      <xsl:with-param name="object" select="."/>
+    </xsl:call-template>
+  </xsl:param>
+
+  <resource>
+    <xsl:attribute name="fileref">
+      <xsl:apply-templates select="." mode="chunk-filename"/>
+    </xsl:attribute>
+    <xsl:attribute name="xml:id">
+      <xsl:value-of select="concat($root.resourceref,$root.id.suffix)"/>
+    </xsl:attribute>
+  </resource>
+  <xsl:apply-templates select="*" mode="resource.list"/>
+</xsl:template>
+
+<!-- This one must be here because of the template in chunk-code.xsl -->
+<xsl:template match="@fileref" priority="1">
+    <xsl:copy-of select="."/>
+</xsl:template>
+
+</xsl:stylesheet>
diff --git a/contrib/samples/assembly/topic-maker.xsl b/contrib/samples/assembly/topic-maker.xsl
new file mode 100644 (file)
index 0000000..22d4441
--- /dev/null
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xsl:stylesheet 
+  xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
+  xmlns:exsl="http://exslt.org/common"
+  xmlns="http://docbook.org/ns/docbook"
+  xmlns:d="http://docbook.org/ns/docbook"
+  exclude-result-prefixes="exsl"
+  version="1.0">
+
+<!-- $Id: topic-maker.xsl,v 1.2 2010-08-24 00:46:20 bobs Exp $ -->
+
+<!-- This stylesheet convert DocBook elements into topic element.
+     The chunking takes place elsewhere.  -->
+
+<xsl:import href="file:///c:/xml/docbook-xsl-ns-1.75.2/xhtml/docbook.xsl"/>
+    
+    
+<xsl:param name="assembly.filename">myassembly.xml</xsl:param>
+<xsl:param name="chunk.section.depth" select="3"/>
+<xsl:param name="chunk.first.sections" select="1"/>
+<xsl:param name="use.id.as.filename" select="1"/>
+<xsl:param name="html.ext">.xml</xsl:param> 
+<xsl:param name="base.dir">topics/</xsl:param>
+<xsl:param name="root.filename">index</xsl:param>
+<xsl:param name="html.extra.head.links" select="0"/>
+<xsl:param name="stylesheet.result.type">xhtml</xsl:param>
+<xsl:param name="navig.showtitles" select="0"/>
+<xsl:param name="suppress.navigation" select="1"/>
+<xsl:param name="chunk.append"/>
+<xsl:param name="chunk.quietly" select="0"/>
+<xsl:param name="chunker.output.method" select="'xml'"/>
+<xsl:param name="chunker.output.encoding" select="'UTF-8'"/>
+<xsl:param name="chunker.output.indent" select="'no'"/>
+<xsl:param name="chunker.output.omit-xml-declaration" select="'no'"/>
+<xsl:param name="chunker.output.standalone" select="'no'"/>
+<xsl:param name="chunker.output.doctype-public" select="''"/>
+<xsl:param name="chunker.output.doctype-system" select="''"/>
+<xsl:param name="namespace">http://docbook.org/ns/docbook</xsl:param>
+
+<!-- These elements are converted to topic elements -->
+<xsl:param name="topic.elements">preface chapter section</xsl:param>
+<xsl:variable name="topic.list"
+              select="concat(' ', normalize-space($topic.elements), ' ')"/>
+
+<!-- Default behavior is identity copy -->
+<xsl:template match="node()|@*">
+    <xsl:copy>
+      <xsl:apply-templates select="@*"/>
+      <xsl:apply-templates/>
+   </xsl:copy>
+</xsl:template>
+
+<xsl:template match="d:preface|d:chapter|d:appendix|d:section">
+  <xsl:variable name="element.name">
+    <xsl:call-template name="element.name"/>
+  </xsl:variable>
+
+  <xsl:element name="{$element.name}" namespace="{$namespace}">
+    <xsl:apply-templates select="@*"/>
+    <xsl:apply-templates/>
+  </xsl:element>
+</xsl:template>
+
+<xsl:template name="element.name">
+  <xsl:param name="node" select="."/>
+
+  <xsl:variable name="src.element" select="concat(' ', local-name($node), ' ')"/>
+  <xsl:choose>
+    <xsl:when test="contains($topic.list, $src.element)">
+      <xsl:text>topic</xsl:text>
+    </xsl:when>
+    <xsl:otherwise>
+      <xsl:value-of select="local-name($node)"/>
+    </xsl:otherwise>
+  </xsl:choose>
+</xsl:template>
+
+</xsl:stylesheet>
+