<?xml version="1.0" encoding="UTF-8"?>
<!--
  DTBook DTD v2005-2  2006-09-08
  file: dtbook-2005-2.dtd   
  
  The following identifiers apply to this DTD:    
    "-//NISO//DTD dtbook 2005-2//EN"
    "http://www.daisy.org/z3986/2005/dtbook-2005-2.dtd">
-->
<!--
  jpritchett@rfbd.org:  2006-09-08  Changes that update to version 2005-2, per committee decisions 
  Issue numbers noted in change log below refer to Z39.86 issue tracker at 
  http://www.daisy.org/z3986/issues/ 
-->
<!--
  HB: 2004-03-25 - 2004-04-28 Changes that update dtbook 1.1.0 Document
  Type Declaration: 
  When the change date is followed by "nn:" or "nna" that represents the
  number/letter code on the change list supplied from Michael Moodie on
  that date. Additional changes not so noted have been made in discussion
  with Michael Moodie.
  These changes have been made by Harvey Bingham.
-->
<!-- HB: 2004-04-15 Editorial revisions made at the group meeting 2004-04-15 -->
<!--
  Original authors:
  
  Harvey Bingham 
  George Kerscher 
  Michael Moodie 
  David Pawson 
  
  Assisted by DAISY Consortium and NISO DTB Committee work teams.
  
  1. Purpose
  
  The Digital Talking Book Document Type Definition (DTD) provides
  the means to mark up the text of a document to permit support for
  the combination of professional narration and navigation into that
  narration. It also facilitates the output of a document's content in
  a variety of accessible formats. The markup tags in the book convey
  its content in structure, and contain some metadata about the book
  content and its structure.
  
  The Document Type Definition names and defines the allowable element
  types, their allowable content, and their attributes. Correct markup
  of the text of the book permits the textual material to be synchronized
  using SMIL [SMIL2.0] files with the professionally narrated version of
  that book. The synchronization can permit concurrent display of the
  text being narrated. The textual content can be searched in context to
  locate material desired for narration.
  
  More detailed documentation of this dtbook dtd [DTBOOKV20052DTD] is
  available as an html document. See [DTBOOKV20052DOC].
  
  1.1. Prior Related Work
  
  The DAISY (Digital Accessible Information SYstem) Consortium
  contributed substantially to the development of this DTD.
  This application of XML is the next generation after several DAISY
  versions of 2.X specifications, see [DAISY202].
  
  The DAISY Statement of Principles for the Creation and Production
  of Accessible Books and Materials [DAISY-2-GUIDELINES] represents
  the minimum standard to be met by Libraries of the Blind and producers
  of alternative format materials.
  
  Its Navigation Control Center (NCC) provided for synchronizing
  document structure with narration.
  
  The NCC evolved into an XML application called the "Navigation Control
  File for XML applications" (NCX). Its content is derived from
  the markup of documents tagged using the dtbook DTD. Richer
  structuring capability is one of the objectives of that DTD. The
  Synchronized Multimedia Integration Language [SMIL2.0] is used
  to provide synchronized narrations and text. The NCX provides
  navigation using the identified elements of documents tagged to this DTD.
  
  The dtbook DTD includes many, but not all, of the element types found
  in both the [HTML401STRICT] and [XHTML11STRICT] strict DTDs. HTML
  authoring tools permit those additional element tags, and may ignore
  the additional tags that are dtbook-specific. The lowercase names
  from XHTML are used, rather than the uppercase names from HTML.
  
  1.2. Evolution from HTML and XHTML
  
  
  Dtbook-2005-2 has 83 element types. It shares 46 element types with the
  HTML4.0 Strict DTD [HTML401STRICT] (as adjusted to use the lower-case
  names consonant with the XHTML Strict DTD [XHTML11STRICT]). It omits
  31 element types from them, and has 32 unique element types.
  
  Endtag markup is sometimes optional in HTML. It is required for use with
  xhtml and dtbook. Any XML application [XML12] requires endtags, or their
  abbreviated form for empty elements, such as "<link />". The benefit of
  including endtags is that the tagged document has dependable structure
  that can be validated against the dtbook dtd.
  
  Some tools available for browsing HTML may be used with dtbook
  material, at the expense of their discarding or ignoring some specific
  tagging and attributes that are not part of HTML 4.0. A CSS-based
  stylesheet [CSS1] or [CSS2] that identifies the presentation expectations
  for the HTML and non-HTML tags, or a filter to map those tags onto
  suitable HTML tags can provide appropriate visual presentation.
  
  2. Document Prolog
  
  A Digital Talking Book document is an XML application. Therefore, it
  must begin with the XML declaration, followed by the DOCTYPE
  declaration.
  
  2.1. XML Declaration
  
  The XML declaration identifies the version of XML, and the
  optional character set encoding for the document:
  
      <?xml version="1.0" encoding="UTF-8" ?>
  
  
  
  2.2. Character Set Encodings (removed as redundant; unicode suffices)
  
  
  
  
  2.3. DOCTYPE Declaration
  
  The document type declaration, the DOCTYPE, follows. It has several forms.
  The simpler form assumes that the proper version of the dtbook DTD
  is in the same directory as the dtbook file itself.
  
      <!DOCTYPE dtbook SYSTEM
          "dtbook-2005-2.dtd">
  
  A more general form provides the PUBLIC URI from which the SYSTEM
  filename can be substituted, should that system copy be missing:
  
      <!DOCTYPE dtbook PUBLIC
          "http://www.daisy.org/z3986/2005/dtbook-2005-2.dtd"
          "dtbook-2005-2.dtd">
  
  That assumes the URI can be reached, which may not be true for
  portable dtbook players.
  
  The still more general form recommended for xml applications [XML12] is:
  
      <!DOCTYPE dtbook PUBLIC
          "-//NISO//DTD dtbook 2005-2//EN"
          "http://www.daisy.org/z3986/2005/dtbook-2005-2.dtd">
  
  where the Formal Public Identifier (FPI) on the second line is converted
  to the URI where it may be publicly found:
  
  http://www.daisy.org/z3986/2005/dtbook-2005-2.dtd
  
  The [OASIS-TR9401] Entity Management Catalog provides an indirect
  means to provide that mapping from FPI to the dtd.
  
  That catalog is more generally useful to provide the mapping from
  any external entity names (such as modules) to URIs where they may
  be found.
  
  Note that the reference above is to a particular version of the DTD,
  distinguished by the string "2005-2".
  
  2.4. Digital Talking Book File MIME Type
  
  A Digital Talking Book document is tagged to the dtbook XML
  application. Its MIME media-type is "text/xml". The tagged book
  filename should have suffix ".xml". See [RFC2045].
  
  3. Modular Extension to the DTD
  
  The dtbook DTD has four parameter entities defined that provide means
  to allow an individual book to modularly extend the content models:
  
      <!ENTITY % externalblock "">
      <!ENTITY % externalinline "">
      <!ENTITY % externalFlow "">
      <!ENTITY % externalNamespaces "">
  
  These parameter entities appear in corresponding block and inline
  content models. With this "" content they have no effect on books
  tagged to the dtbook DTD. In a book that needs a modular extension,
  values are given by redefinition in the internal subset of that book.
  This extends the dtbook DTD without having to change it.
  
  A book can augment the dtbook DTD by including other declarations
  or parameter entity references in the internal subset of declarations.
  The internal subset may occur in square brackets following the
  ExternalID and before the concluding ">" of the initial DOCTYPE
  declaration that identifies the dtbook DTD.
  
  Those additional markup declarations in the internal subset
  take preference over any in the dtbook DTD itself. The effective
  DTD is thereby augmented by the parameter entity values and any other
  declarations of the book's internal subset. When a given parameter
  entity declaration appears more than once in the external modules and
  the dtbook DTD, the first occurrence of that declaration is the one
  that takes effect, with modules in the internal subset being processed
  in order, before the DTD itself.
  
  For example:
  
      <!DOCTYPE dtbook SYSTEM
      "dtbook.dtd"
      [
          <!ENTITY % dramaModule SYSTEM "drama.dtd">
          %dramaModule;
          <!ENTITY % externalblock "| d:drama">
          <!ENTITY % externalinline "| d:character">
          <!ENTITY % externalFlow "| d:stagedir">
          <!ENTITY % externalNamespaces "xmlns:d CDATA #FIXED 'http://www.sample.org/drama'">
      ]>
  
  The "%dramaModule;" invocation causes all declarations made within
  dramaModule to become the initial part of the dtbook DTD. Within the
  book, the empty entity declarations for % externalblock, 
  % externalinline, % externalFlow, and %externalNamespaces
  are replaced by these new definitions. Thus the
  block element d:drama can appear wherever block elements may occur in
  dtbook, d:character can appear wherever inline elements may occur, and
  d:stagedir can appear in either block or inline contexts.  Note that
  each extension element must appear in no more than one of these three
  entities. The namespace attribute xmlns:d can occur on any element with 
  the fixed value of "http://www.sample.org/drama".
  
  More than one module may be needed and included in a book, for example
  both poem and drama can appear in the internal subset of the book.
  For example, the internal subset of the book could contain:
  
      <!DOCTYPE dtbook SYSTEM
      "dtbook.dtd"
      [
          <!ENTITY % poemModule SYSTEM "poem.dtd">
          %poemModule;
          <!ENTITY % dramaModule SYSTEM "drama.dtd">
          %dramaModule;
          <!ENTITY % externalblock "| poem | stanza | verse | drama">
          <!ENTITY % externalinline "| stagedir">
      ]>
  
  Such external modules need to include the definitions of any parameter
  entities that are used in the modules since their definitions are needed
  before they can be expanded in their references. They cannot depend
  on parameter entities in the SystemLiteral or PubidLiteral.
  
  Note that arbitrary external modules from other sources may not have
  all the needed attributes. XML allows augmentation of ATTLISTs in the
  internal subset. Additional attribute names can be added to an
  associated element type. Any redefinitions of a particular named
  attribute resulting from presence in the internal subset have
  precedence.
  
  Note that tools and players processing any extended markup that affects
  navigation structure will need to know of those modular extensions.
  
  The form above for augmenting the dtbook dtd through the document's
  internal subset does not require the XML namespace mechanism, with
  its namespace-specific prefix on element and attribute names to
  disambiguate any potential name collisions. However, use of XML
  namespaces [XML-NAMES] is recommended.
  
  4. References
  
  These references are informative. The bracketed names here are targets for
  indirect reference from the corresponding bracketed names in other parts
  of this document or in descriptions within this section.
  
  [CSS1] Cascading Style Sheets, Level 1. Rec-CSS1-1999011 Revised 11 Jan 1999
  
      http://www.w3.org/TR/REC-CSS1
  
  [CSS2] Cascading Style Sheets, Level 2 CSS2 Specification REC-CSS2-19980512
  
      http://www.w3.org/TR/REC-CSS2
  
  [DAISY202] The DAISY 2.02 Specification for the DAISY Digital Talking
  Book (DTB) format, which enables navigation within a sequential
  and hierarchical structure consisting of (marked-up) text synchronized
  with audio.
  
      http://www.daisy.org/dtbook/spec/2/final/d202/daisy_202.html
  
  [DAISY-2-GUIDELINES] The DAISY 2.02 Specification for
  the Creation and Production of Accessible Books and Materials,
  Version 0.99 1999-09-23 represents minimum standard to be met by
  Libraries for the Blind and producers of alternative format materials:
  
      http://www.daisy.org/dtbook/guidelines/draft/principles.htm
  
  [DTBOOKV20052DTD] The dtbook DTD version 2005-2 (this DTD) is available at:
  
      http://www.daisy.org/z3986/2005/dtbook-2005-2.dtd
  
  Note that some browsers do not permit downloading a file with suffix dtd.
  
  [DTBOOKV20052DOC] Digital Talking Book Expanded Document Type Definition
  Documentation for Version 2005-2 of this DTD is available as an
  HTML 4.0 document:
  
      http://www.daisy.org/z3986/2005/dtbook/dtbookdoc.html
  
  Should revisions occur, a new directory with node named for the year
  of change will contain the revisions.
  
  Any prior specific version of the dtbook dtd and its documentation will
  persist.
  
  [DTBOOK3] The last public beta version was dtbook3-07.dtd (2001-01-31).
  
      http://www.loc.gov/nls/z3986/background/dtbk3_old_dtds/dtbk3-07.dtd
  
  and its expanded documentation:
  
      http://www.loc.gov/nls/z3986/background/dtbk3_old_dtds/dtbk3-07doc.htm
  
  Those and prior versions are available at:
  
      http://www.loc.gov/nls/z3986/background/dtbk3_old_dtds/index.html
  
  The history of changes prior to this version, including those
  in internal drafts through dtbk110.dtd and before is in:
  
      http://www.loc.gov/nls/z3986/background/dtbook-dtd-changes.txt
  
  In that directory also are the old dtdbk3 dtds, some of which have
  been used for test markup,  and their documentation. See its
  index.html for the list. (Caution: some browsers may not
  permit downloading DTDs.)
  
      http://www.loc.gov/nls/z3986/background/index.html
  
  [HTML401STRICT] "HTML 4.0 Strict DTD," 1999-12-24, Dave Raggett,
  Arnaud Le hors, and Ian Jacobs. Dtbook110 was originally based on
  the HTML 4.0 Strict DTD with design adaptation for dtbook110.
  A principal adaptation is to use lower-case names for element types
  and attribute names. For expanded discussion, see [HTML401].
  
      http://www.w3.org/TR/1999/REC-html401-19991224/strict.dtd
  
  [HTML401] "HTML 4.01 Specification" W3C Recommendation 24 December 1999
  Documentation of the element types that come from the HTML 4.0 Strict
  DTD [HTML401STRICT] is available at:
  
      http://www.w3.org/TR/1999/REC-html401-19991224/
  
  Dtbook110 (and now Dtbook122) is partially harmonized with the
  [XHTML11STRICT] DTD.
  
  The XHTML camelCase parameter entity names are retained, and comments
  and references following those parameter entities explain them. The
  lower-case element and attribute names are used. The simplified table
  content model of just table rows is included.
  
  [ISO10646] "Information Technology - Universal Multiple-Octet Coded
  Character Set (UCS) - Part 1: Architecture and Basic Multilingual
  Plane", ISO/IEC 10646-1:1993. The current specification also takes
  into consideration the first five amendments to ISO/IEC 10646-1:1993.
  
  [ISO8859] "Information Processing - 8-bit single-byte coded graphic
  character sets - Part 1: Latin alphabet No. 1," ISO 8859-1:1987.
  Other suffixes "-2 through -9" correspond to other character sets
  in the family.
  
  [JIS] "JIS Character Sets" describes the history of JIS, and the
  several character sets for KANJI, KANA and other characters.
  
      http://www.io.com/~kazushi/encoding/jis.html
  
  [ANSINISOZ39-86-2002] Specifications for the Digital Talking Book.
  
      http://www.niso.org
  
  [ANSINISOZ39-86-2005] Specifications for the Digital Talking Book.
  
      http://www.niso.org    
  
  [NLS-Z3986] Development of ANSI/NISO Z39.86
  Contains links to the DTDs developed for ANSI/NISO Z39.86,
  Specifications for the Digital Talking Book
  
      http://www.loc.gov/nls/z3986/index.html
  
  [OASIS-TR9401] Entity Management, OASIS Technical Resolution 9401:1997
  (Amendment 2 to TR 9401). Paul Grosso, 1997 September 10.
  
      http://www.oasis-open.org/specs/tr9401.html
  
  [RFC1556] "Handling of Bi-directional Texts in MIME," H. Nussbacher,
  December 1993.
  
      http://www.cis.ohio-state.edu/cgi-bin/rfc/rfc1556.html
  
  [RFC1942] "HTML Tables", D. Raggett, May 1996
  
      http://www.ietf.org/rfc/rfc1942.txt
  
  Contains detailed descriptions of table elements and their
  inheritance of attribute values. Adjustment for XML application is
  required: end-tags are necessary, not optional, attribute values
  must be quoted.
  
  [RFC2045] "Multipurpose Internet Mail Extensions (MIME) Part One:
  Format of Internet Message Bodies", N. Freed and N. Borenstein,
  November 1996. Note that this RFC obsoletes RFC1521, RFC1522, and RFC1590.
  The %ContentType; and %ContentTypes; media types and the
  %Charset; and %Charsets; character encoding values are from [RFC2045].
  
      http://www.cis.ohio-state.edu/cgi-bin/rfc/rfc2045.html
  
  [RFC2046] "Multipurpose Internet Mail Extensions (MIME) Part Two:
  Media Types," N. Freed, November 1996. Source for %ContentType; and
  %ContentTypes; permitted values:
  
      http://www.cis.ohio-state.edu/cgi-bin/rfc/rfc2046.html
  
  [RFC2396] "Uniform Resource Identifiers (URI): Generic Syntax,"
  T. Berners-Lee, R. Fielding, L. Masinter, August 1998. Note that this RFC
  revises and replaces the generic definitions in RFC 1738 and RFC 1808.
  
      http://www.cis.ohio-state.edu/cgi-bin/rfc/rfc2396.html
  
  
  
  [RFC3066] "Tags for the Identification of Languages,"
  H. Alvestrand, January 2001
  
      http://www.faqs.org/rfcs/rfc3066.html
  
  
  [SMIL2.0] The Synchronized Multimedia Integration Language SMIL 2.0
  W3C Recommendation 07 August 2001 is available at:
  
      http://www.w3.org/TR/2001/REC-smil20-20010807/smil20.html
  
  [XHTML11] "XHTML (tm) 1.0: The Extensible HyperText Markup Language,"
  W3C Recommendation 26 January 2000, A reformulation of HTML4 in XML 1.0
  includes case-sensitive names, lower-case for elements and their
  attributes (but not parameter entity names) and in some cases
  equivalent content models that do not require SGML inclusions
  and exclusion exceptions (as occurred in the HTML4.0 strict
  DTD [HTML401STRICT]) is available at:
  
      http://www.w3.org/TR/xhtml/
  
  [XML-NAMES] "Namespaces in XML 1.1" World Wide Web Consortium
  W3C Recommendation 4-Febrary-2004
  
      http://www.w3.org/TR/REC-xml-names11-20040204
  
  
  [XHTML11STRICT] Expanded documentation of the element types that come
  from the XHTML11 strict.dtd and its other DTDs is available within
  the zip file:
  
      http://www.w3.org/TR/xhtml1/DTD/xhtml1/xhtml1.zip
  
  Note: some browsers cannot download a dtd directly.
  
  
  
  [XML12] This dtbook-2005-2.dtd is an application of the Extensible Markup
  Language XML 1.0 (Second Edition) W3C Recommendation 6 October 2000.
  It is available at:
  
      http://www.w3.org/TR/REC-xml
  
-->
<!-- ======================= Change Log Summary ============================ -->
<!-- HB: 2004-04-28 changed all version references from 1.1.2 to 1.2.0 -->
<!--
  HB: 2004-03-25 - 2004-04-28 Changes that update dtbook 1.1.0 Document
  Type Declaration: 
  When the change date is followed by "nn:" or "nna" that represents the
  number/letter code on the change list supplied from Michael Moodie on
  that date. Additional changes not so noted have been made in discussion
  with Michael Moodie.
  These changes have been made by Harvey Bingham.
-->
<!-- HB: 2004-04-15 Editorial revisions made at the group meeting 2004-04-15 -->
<!--
  HB: 2004-03-25 32: Drop section 2.2 on Character Set Encoding, retained
  number so external references won't break to subsequent sections.
-->
<!--
  HB: 2004-04-02 dtbook: updated public identifier
  fro:  "http://www.loc.bov/nls/z3986/v100"
  to:   "http://www.loc.gov/nls/z3986/2004".
-->
<!--
  HB: 2004-04-02 dtbook: updated public identifier 
  from: "http://www.loc.bov/nls/z3986/v100/dtbook110.dtd"
  to:   "http://www.loc.gov/nls/z3986/2004/dtbook.dtd".
-->
<!-- HB: 2004-03-25 Changed reference from RFC1766 to its revison, RFC 3066. -->
<!-- HB: 2004-03-25 Changed reference from RFC1766 to its revison, RFC 3066. -->
<!-- HB: 2004-04-05 % list removed: as content reduced to contain only <list>. -->
<!-- HB: 2004-03-25 36f: caption: removed from % inlineinblock. -->
<!-- HB: 2004-03-25 30: hr: eliminated, so dropped from % block. -->
<!--
  HB: 2004-03-29 % block additions:
  poem | linegroup | byline | dateline | epigraph.
-->
<!-- HB: 2004-03-25 30: hr: eliminated, dropped from % blocknoimggroup. -->
<!--
  HB: 2004-03-29 % blocknoimggroup additions:
  poem | linegroup | byline | dateline | epigraph.
-->
<!--
  HB: 2004-03-29 % docblockorinline additions:
  poem | linegroup | byline | dateline | epigraph.
-->
<!-- HB: 2004-04-08 covertitle: added to % docblockorinline -->
<!-- HB: 2004-04-27 blockhead: added to % docblockorinline; -->
<!--
  HB: 2004-03-25 33: % coreattrs: dropped mention of character
  mnemonic entities, as use unicode.
-->
<!--
  HB: 2004-03-25 36a: % i18n: removed lang attribute,
  as redundant with xml:lang.
-->
<!--
  HB: 2004-04-05 dtbook: added attribute xmlns with FIXED value 
  'http://www.loc.gov/nls/z3986/2004/dtbook'
  Also updated version value from 1.1.0' to '1.1.1'.
-->
<!--
  HB: 2004-04-05 version: updated from '1.1.0' to '1.1.1'.
  added value for xmlns: 
  %URI #FIXED 'http://www.loc.gov/nls/z3986/2004/dtbook/'.
-->
<!-- HB: 2004-03-25 36: % headmisc: removed style. -->
<!--
  HB: 2004-04-02 title: element removed from head,
  now only used for cite and poem.
-->
<!--
  HB: 2004-03-29 Dublin Core: minimum requirement 
  name="dc:title" content="book title"; encourage use of
  additional name/content pairs from Dublin Core 
  name="dc:..." and from Digital Talking Book name="dtb:..."
  Encourage inclusion of additional Dublin Core and Dtbook metadata
  attributes to make more useful the dtbook as stand-alone content.
-->
<!-- HB: 2004-03-25 36: head: drop th removed element style. -->
<!--
  HB: 2004-03-25 29: frontmatter: eliminate %block;
  level or level1 container is required.
-->
<!-- HB: 2004-04-08 frontmatter: added covertitle. -->
<!--
  HB: 2004-03-25 29: bodymatter: eliminate %block;
  level or level1 container is required.
-->
<!--
  HB: 2004-03-25 29: rearmatter: eliminate %block;
  level or level1 container is required.
-->
<!--
  HB: 2004-03-25 28: level: add constraint - at most one <levelhd> (later 
  changed to <hd>) per <level>.
-->
<!-- HB: 2004-03-26 34: level: make contentmodel (...)+, rather than (...)*. -->
<!--
  HB: 2004-03-25 28: level1: added constraint - at most one <h1> 
  per <level1>.
-->
<!-- HB: 2004-03-26 34: level1: make contentmodel (...)+, rather than (...)*. -->
<!--
  HB: 2004-03-25 28: level2: added constraint - at most one <h2> 
  per <level2>.
-->
<!-- HB: 2004-03-26 34: level2: make contentmodel (...)+, rather than (...)*. -->
<!--
  HB: 2004-03-25 28: level3: added constraint - at most one <h3> 
  per <level3>.
-->
<!--
  HB: 2004-03-25 28: level4: added constraint - at most one <h4> 
  per <level4>.
-->
<!--
  HB: 2004-03-25 28: level5: added constraint - at most one <h5> 
  per <level5>.
-->
<!--
  HB: 2004-03-25 28: level6: added constraint - at most one <h6> 
  per <level6>.
-->
<!--
  HB: 2004-04-23 % special: eliminated linenum from % special,
  linenum only appears within line.
-->
<!--
  HB: 2004-04-23 % specialnoa: eliminated linenum from % specialnoa,
  linenum only appears within line.
-->
<!-- HB: 2004-03-25 36h: to % inlinenoa add %dtbookinline;. -->
<!-- HB: 2004-03-30 poem: added linenum use. -->
<!-- HB: 2004-04-08 div: added covertitle. -->
<!-- HB: 2004-04-04 35b  title: added <title> for use in <poem> or <cite>. -->
<!--
  HB: 2004-03-25 35d: notice element dropped: its purpose is sufficiently
  achieved with sidebar with attribute render="required." This provides
  sufficient capability for admonitions like warning, hazard, 
  danger, or caution.
-->
<!--
  HB: 2004-03-25 35g: prodnote: use render="required" to achieve the explicit
  admonition such as caution, warning, danger, or hazard, from the
  text. Optionally put the specific admonition in the class attribute
  value, repeating it from the text.
-->
<!--
  HB: 2004-03-25 35g: sidebar: use render="required" to achieve the explicit
  admonition such as caution, warning, danger, or hazard, from the
  text. Optionally put the specific admonition in the class attribute
  value, repeating it from the text.
-->
<!-- HB: 2004-03-30 epigraph: element added. -->
<!-- HB: 2004-30-30 byline: element added. -->
<!-- HB: 2004-30-30 dateline: element added. -->
<!--
  HB: 2004-03-30 linegroup: The class attribute value can identify the
  kind of linegroup, such as "stanza", "chorus", or "canto".
-->
<!-- HB: 2004-03-30 poem: removed notice and hr from content model. -->
<!-- HB: 2004-03-30 poem: added title and author to content model. -->
<!-- HB: 2004-03-25 35a: cite: allow title and author. -->
<!-- HB: 2004-03-25 30: hr: element dropped horizontal rule as purely visual. -->
<!-- HB: 2004-04-08 covertitle: element added -->
<!-- HB: 2004-04-02 bridgehead: element added. -->
<!-- HB: 2004-03-25 36i: blockquote allow pagenum. -->
<!--
  HB: 2004-03-25 36d: list: added start attribute to indicate initial
  ordinal of a numbered list.
-->
<!--
  HB: 2004-03-31 list: changed enum from 'U' to 'A' for uppercase, and
  "X" to 'I' for uppercase Roman.
-->
<!--
  HB: 2004-03-31 list: changed enum value choices from "U" to "A" for
  uppercase, and "X" to "I" for uppercase Roman for compatibility
  with xhtml.
-->
<!-- HB: 2004-04-02 list: expanded discussion on enum attribute. -->
<!--
  HB: 2004-04-27 list: added type "pl" to indicate that the list is 
  preformatted so no bullets or enumerations should be added.
-->
<!--
  HB: 2004-04-22 list: removed bullet attribute, It is up to a style-sheet to
  make any needed visual distinction for nested unordered lists, or if the
  list type is "pl" preformatted the bullet form may be there.
-->
<!-- HB: 2004-03-25 36f: caption: removed use for <img>. -->
<!-- MM: 2004-07-08 Various editorial changes. -->
<!-- MM: 2004-07-08 34: level3: make contentmodel (...)+, rather than (...)*. -->
<!-- MM: 2004-07-08 34: level4: make contentmodel (...)+, rather than (...)*. -->
<!-- MM: 2004-07-08 34: level5: make contentmodel (...)+, rather than (...)*. -->
<!-- MM: 2004-07-08 34: level6: make contentmodel (...)+, rather than (...)*. -->
<!--
  MM: 2004-07-23 In %docblockorinline: changed blockhead to bridgehead; 
  eliminated poem, linegroup, byline, dateline, and epigraph since already
  present via %block
-->
<!--
  MM: 2004-07-23 In %inlinenoa: removed %externalinline; since already present
  via %dtbookinline;.
-->
<!--
  MM: 2004-07-23 34: level6: replaced "%block | %inlineinblock" with 
  "%docblockorinline;" per other leveln models.
-->
<!--
  MM: 2004-07-30  Changed content models of level and level1 - level6 to 
  eliminate ambiguity. Changed version to 1.1.5a
-->
<!--
  MM: 2004-07-30 Dropped 'level' attribute from element div. Revised 
  description of page types for 'page' attribute on element pagenum.  
  Dropped recommendation to use page number as id. Copied recent change 
  comments to text. Removed comments explaining amp, lt, gt, etc. Changed 
  version to 1.1.5b
-->
<!--
  MM, DP: 2004-08-17 Corrected typos in content models of level and level1 - 
  level6. Added missing exclamation point in previous change message.
-->
<!--
  MM: 2004-08-17 Added %dtbookblocknoimggroup; to % blocknoimggroup, from 
  which it had been accidentally dropped. Deleted section on 
  character entities.
-->
<!-- MM: 2004-09-15: caption: changed content model to %flow;. -->
<!--
  MM: 2004-09-15 Deleted element levelhd, replacing it with hd in content 
  model of level.
-->
<!--
  MM: 2004-09-15 bridgehead: changed content model to (%inline;)*, to match 
  hd, and h1-h6.
-->
<!-- MM: 2004-09-16 Changed version to 1.2.0 -->
<!--
  MM: 2005-03-10 level, level1 - level6: Reverted to 2004-08-17 content model 
  as simplified content model was not valid.
-->
<!-- MM: 2005-03-10 Changed version to 1.2.1 -->
<!--
  MM: 2005-03-11 changed value for xmlns to: 
  %URI; #FIXED 'http://www.loc.gov/nls/z3986/2005/dtbook/'.
-->
<!-- MM: 2005-04-22 epigraph - changed ATTLIST to %attrs; -->
<!-- MM: 2005-04-22 byline - changed ATTLIST to %attrs; -->
<!-- MM: 2005-04-22 dateline - changed ATTLIST to %attrs; -->
<!-- MM: 2005-04-22 linegroup - changed ATTLIST to %attrs; -->
<!-- MM: 2005-04-22 poem - changed ATTLIST to %attrs; -->
<!-- MM: 2005-04-22 dtbook - changed version to 1.2.1a -->
<!-- MM: 2005-04-26 version: updated from 1.2.1a to 1.2.2 -->
<!-- MG: 2005-05-03 fixed malformed comments (double hyphen) -->
<!-- NB: 2005-06-22 wrapped all lines at 80 columns -->
<!-- 2005-06-26 M. Gylling. Changed pid, sid, ns uri, and filename for Z3986-2005 -->
<!-- jpritchett@rfbd.org:  2006-07-06.  Changed pid, sid, version, and filename for 2005-2 throughout -->
<!-- jpritchett@rfbd.org:  2006-07-06.  (Issue 45) Changed div model to %docblockorinline to include bridgehead -->
<!-- jpritchett@rfbd.org:  2006-07-06.  (Issue 51) Changed content model for frontmatter.  doctitle now required, order of doctitle, covertitle, docauthor fixed. -->
<!-- jpritchett@rfbd.org:  2006-07-06.  (Issue 129) Removed @style from %coreattrs and %attrsrqd -->
<!-- jpritchett@rfbd.org:  2006-07-06.  Removed definition of %StyleSheet, since it is no longer needed -->
<!-- jpritchett@rfbd.org:  2006-07-06.  (Issues 50/68)  Added xml:space to %coreattrs and %attrsrqd -->
<!-- jpritchett@rfbd.org:  2006-07-06.  (Issue 52) Added %coreattrs (id, class, title, xml:space) to title attribute list -->
<!-- jpritchett@rfbd.org:  2006-07-07.  (Issue 102) Changed @idref type for noteref/annoref to %URI to clarify usage -->
<!-- jpritchett@rfbd.org:  2006-07-07.  (Issue 102) Modified comments in noteref/annoref ATTLISTs to clarify @idref usage -->
<!-- jpritchett@rfbd.org:  2006-07-07.  (Issue 119) Changed @lang to @xml:lang in bdo -->
<!-- jpritchett@rfbd.org:  2006-07-07.  (Issue 48) Corrected reference to RFC2046 in comments regarding @type for a, annoref, noteref -->
<!-- jpritchett@rfbd.org:  2006-07-07.  (Issue 65) Corrected usage comment for meta -->
<!-- jpritchett@rfbd.org:  2006-07-07.  (Issue 120) Corrected terminology in section 2 of general documentation comment -->
<!-- jpritchett@rfbd.org:  2006-07-07.  (Issue 92) Added comment deprecating @showin -->
<!-- jpritchett@rfbd.org:  2006-07-07.  (Issue 113) Created new entity %externalFlow; for extension elements that are both block and inline -->
<!-- jpritchett@rfbd.org:  2006-07-07.  (Issue 113) Added %externalFlow to %flow;, %flownopagenum;, %inlines;, %inlinew;, %dtbookblock;, %block; -->
<!-- jpritchett@rfbd.org:  2006-07-07.  (Issue 117) Created new entity %externalNamespaces; for extension namespace attributes -->
<!-- jpritchett@rfbd.org:  2006-07-07.  (Issue 117) Added %externalNamespaces; to %coreattrs;, %attrsrqd;, and dtbook -->
<!-- jpritchett@rfbd.org:  2006-08-11.  (Issue 113) Added %externalFlow; to %dtbookinline; -->
<!-- jpritchett@rfbd.org:  2006-09-08.  (Issues 50/68) Rewrote attribute lists of code and samp to prevent duplication of @xml:lang -->
<!-- ================= Comment Classification Conventions ================== -->
<!--
  Some comments start with a pattern followed by a colon:
  
      Use: element type and its use.
  
      Attuse: attribute use for associated element type.
  
      HB: date object comment on change by Michael Moodie.
  
  Other comments without such a pattern are dividing lines,
  details about the DTD structure, or about dtbook objects.
-->
<!-- =================== Imported Parameter Entity Names =================== -->
<!-- Many parameter entities come from the [XHTML11STRICT] strict DTD. -->
<!-- jpritchett@rfbd.org:  2006-07-06.  Removed definition of %StyleSheet, since it is no longer needed -->
<grammar ns="http://www.daisy.org/z3986/2005/dtbook/" xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
  <define name="Character">
    <data type="string" datatypeLibrary=""/>
  </define>
  <!-- a single character from [ISO10646]. -->
  <define name="Charset">
    <data type="string" datatypeLibrary=""/>
  </define>
  <!-- a character encoding, as per [RFC2045]. -->
  <define name="ContentType">
    <data type="string" datatypeLibrary=""/>
  </define>
  <!-- media type, as per [RFC2046]. -->
  <!-- HB: 2004-03-25 Changed reference from RFC1766 to its revison, RFC 3066. -->
  <define name="LanguageCode">
    <data type="NMTOKEN"/>
  </define>
  <!-- a language code, per [RFC3066]. -->
  <define name="Number">
    <data type="string" datatypeLibrary=""/>
  </define>
  <!-- one or more digits. -->
  <define name="LinkTypes">
    <data type="string" datatypeLibrary=""/>
  </define>
  <!-- space-separated list of link types. -->
  <define name="MediaDesc">
    <data type="string" datatypeLibrary=""/>
  </define>
  <!--
    single or comma-separated list of media descriptors;
    possible values include BRAILLE, PRINT, PROJECTION, SPEECH, ALL,
    or the default SCREEN.
  -->
  <define name="Text">
    <data type="string" datatypeLibrary=""/>
  </define>
  <!-- used for titles etc. -->
  <define name="URI">
    <data type="string" datatypeLibrary=""/>
  </define>
  <!-- a Uniform Resource Identifier, see [RFC2396]. -->
  <!-- ================== dtbook External Module Inclusion =================== -->
  <define name="externalblock">
    <notAllowed/>
  </define>
  <!--
    placeholder for block element expansion from external modules;
    if changed, string in external subset begins " | blockelementname".
  -->
  <define name="externalinline">
    <notAllowed/>
  </define>
  <!--
    placeholder for inline element expansion from external modules;
    if changed, string in external subset begins " | inlineelementname".
  -->
  <!-- jpritchett@rfbd.org:  2006-07-07.  Created new entity %externalFlow; for extension elements that are both block and inline -->
  <define name="externalFlow">
    <notAllowed/>
  </define>
  <!--
    placeholder for elements that can be either block or inline from 
    external modules; if changed, string in external subset begins 
    " | flowelementname".
  -->
  <!-- jpritchett@rfbd.org:  2006-07-07.  Created new entity %externalNamespaces; for extension namespace attributes -->
  <define name="externalNamespaces">
    <empty/>
  </define>
  <!--
    placeholder for namespace attributes for external modules.  These 
    attributes will be available on all elements.  If changed, string
    in external subset is in format 
       "xmlns:sample   CDATA #FIXED 'http://www.sample.org/example'"
  -->
  <!-- ======================== dtbook Content Models ======================== -->
  <!-- HB: 2004-04-05 % list removed: as content reduced to contain only <list>. -->
  <!-- jpritchett@rfbd.org:  2006-07-07.  Added %externalFlow; to %dtbookblock; -->
  <!-- block elements unique to dtbook. -->
  <define name="dtbookblocknoimggroup">
    <choice>
      <ref name="author"/>
      <ref name="prodnote"/>
      <ref name="sidebar"/>
      <ref name="note"/>
      <ref name="annotation"/>
      <ref name="externalblock"/>
    </choice>
  </define>
  <!-- block elements unique to dtbook without imggroup. -->
  <!-- HB: 2004-03-25 36f: caption: removed from % inlineinblock. -->
  <define name="inlineinblock">
    <choice>
      <ref name="a"/>
      <ref name="cite"/>
      <ref name="samp"/>
      <ref name="kbd"/>
      <ref name="pagenum"/>
    </choice>
  </define>
  <!-- inlines that may alternatively be in block elements. -->
  <!-- HB: 2004-03-25 30: hr: eliminated, so dropped from % block. -->
  <!--
    HB: 2004-03-29 % block additions:
    poem | linegroup | byline | dateline | epigraph.
  -->
  <!-- jpritchett@rfbd.org:  2006-07-07.  Added %externalFlow; to %block; -->
  <define name="block">
    <choice>
      <ref name="p"/>
      <ref name="list"/>
      <ref name="dl"/>
      <ref name="div"/>
      <ref name="blockquote"/>
      <ref name="img"/>
      <ref name="imggroup"/>
      <ref name="poem"/>
      <ref name="linegroup"/>
      <ref name="byline"/>
      <ref name="dateline"/>
      <ref name="epigraph"/>
      <ref name="table"/>
      <ref name="address"/>
      <ref name="line"/>
      <ref name="dtbookblocknoimggroup"/>
      <ref name="externalFlow"/>
    </choice>
  </define>
  <!--
    block elements from [HTML401STRICT] dtd augmented by dtbook-unique
    elements (note: list container difers from html ol and ul.)
  -->
  <!-- HB: 2004-03-25 30: hr: eliminated, dropped from % blocknoimggroup. -->
  <!--
    HB: 2004-03-29 % blocknoimggroup additions:
    poem | linegroup | byline | dateline | epigraph.
  -->
  <!--
    MM: 2004-08-17 Added %dtbookblocknoimggroup; to % blocknoimggroup, 
    from which it had been accidentally dropped.
  -->
  <define name="blocknoimggroup">
    <choice>
      <ref name="p"/>
      <ref name="list"/>
      <ref name="dl"/>
      <ref name="div"/>
      <ref name="blockquote"/>
      <ref name="poem"/>
      <ref name="linegroup"/>
      <ref name="byline"/>
      <ref name="dateline"/>
      <ref name="epigraph"/>
      <ref name="table"/>
      <ref name="address"/>
      <ref name="line"/>
      <ref name="dtbookblocknoimggroup"/>
    </choice>
  </define>
  <!--
    block elements from [HTML401STRICT] dtd augmented by dtbook-unique
    elements.
  -->
  <!--
    HB: 2004-03-29 % docblockorinline additions:
    poem | linegroup | byline | dateline | epigraph.
  -->
  <!-- HB: 2004-04-08 covertitle: added to % docblockorinline -->
  <!-- HB: 2004-04-27 blockhead: added to % docblockorinline; -->
  <!--
    MM: 2004-07-23 changed blockhead to bridgehead; eliminated poem, linegroup, 
    byline, dateline, and epigraph since already present via %block
  -->
  <define name="docblockorinline">
    <choice>
      <ref name="doctitle"/>
      <ref name="docauthor"/>
      <ref name="covertitle"/>
      <ref name="bridgehead"/>
      <ref name="block"/>
      <ref name="inlineinblock"/>
    </choice>
  </define>
  <!-- common non-head elements for use with level or levelN -->
  <!-- ========================= Generic Attributes ========================== -->
  <!--
    HB: 2004-03-25 33: % coreattrs: dropped mention of character
    mnemonic entities, as use unicode.
  -->
  <!-- jpritchett@rfbd.org:  2006-07-06.  Removed @style -->
  <!-- jpritchett@rfbd.org:  2006-07-06 Added @xml:space -->
  <!-- jpritchett@rfbd.org:  2006-07-07.  Added %externalNamespaces; -->
  <define name="coreattrs">
    <optional>
      <attribute name="id">
        <data type="ID"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="class"/>
    </optional>
    <optional>
      <attribute name="title">
        <ref name="Text"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="xml:space">
        <choice>
          <value>default</value>
          <value>preserve</value>
        </choice>
      </attribute>
    </optional>
    <ref name="externalNamespaces"/>
  </define>
  <!--
    coreattrs are attributes permissible for most elements
    
    id       document-wide unique id
    class    space separated list of classes used for rendering
    title    advisory title/amplification
    xml:space	whitespace handling (see http://www.w3.org/TR/xml11/#sec-white-space)
  -->
  <!--
    HB: 2004-03-25 36a: % i18n: removed lang attribute,
    as redundant with xml:lang.
  -->
  <define name="i18n">
    <optional>
      <attribute name="xml:lang">
        <ref name="LanguageCode"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="dir">
        <choice>
          <value>ltr</value>
          <value>rtl</value>
        </choice>
      </attribute>
    </optional>
  </define>
  <!--
    i18n internationalization attributes
        xml:lang    language code (as per XML 1.0 spec)
        dir         direction for weak/neutral text
                    ltr=left to right
                    rtl=right to left
    
    xhtml recommendation: use xml:lang such as "en-US", on the major
    containing block, to provide source language for
    the #IMPLIED values of its descendent elements.
    See [RFC1556] for handling bi-directional text in MIME.
  -->
  <!-- jpritchett@rfbd.org:  2006-07-07  Added comment deprecating @showin -->
  <define name="showin">
    <optional>
      <attribute name="showin">
        <choice>
          <value>xxx</value>
          <value>xxp</value>
          <value>xlx</value>
          <value>xlp</value>
          <value>bxx</value>
          <value>bxp</value>
          <value>blx</value>
          <value>blp</value>
        </choice>
      </attribute>
    </optional>
  </define>
  <!--
    NOTE:
    With version 2005-2 of the DTD, the use of the showin attribute is deprecated.
    Following more modern conventions that have evolved since showin was
    originally added, the Z39.86 Maintenance Committee's intention is to use
    namespaces to distinguish output-format-specific information via extension
    modules
  -->
  <!--
    showin attribute applies for text elements to permit identification
    of the kinds of display appropriate for the element, so presentation
    choice by the reader among alternative readings can be provided, when
    appropriate. Values of showin are coded with three letters in order:
    "b"=Braille, "l"=Largeprint, and "p"=Print; or "x"=inappropriate:
    
        Value  Braille  Largeprint Print   Interpretation
    
        "xxx"                              hide
        "xxp"                      p       print only
        "xlx"           l                  largeprint only
        "xlp"           l          p       largeprint and print
        "bxx"   b                          braille only
        "bxp"   b                  p       braille and print
        "blx"   b       l                  braille and largeprint
        "blp"   b       l          p       braille, largeprint, and print
    
    There is no default value; this attribute value is implied
    from the most immediate ancestor that specifies a value.
    The usual default for showin is 'blp'. If only one showin
    value is needed it should be included with <book>.
    
    Different content for the same element (usually <prodnote>) meeting
    different needs is possible, with showin serving as a switch to
    differentiate among them. Both largeprint and print are appropriate
    for screen rendering as well as printing. Different corresponding
    styles may be appropriate.
    
    It is possible to include equivalent content from any major structure
    below <book> to provide the different content suitable for different
    media. These would be independent, sharing no direct content, possibly
    having common references to images, with different accompanying text
    descriptions.
  -->
  <define name="attrs">
    <ref name="coreattrs"/>
    <ref name="i18n"/>
    <optional>
      <attribute name="smilref"/>
    </optional>
    <ref name="showin"/>
  </define>
  <!--
    %attrs; is part of most attribute lists. It includes
    
    %coreattrs; from which come the four #IMPLIED attributes:
        id, class, title, and xml:space
    
    %i18n; from which come the implied attributes: xml:lang, and dir
    
    smilref is a pointer to a [SMIL2.0] file, normally to the time container
        (SMIL <par> or <seq>) containing the media object that references this
        element. However, in a text-only DTB consisting of a sequence of
        text media objects, smilref points to the media object that
        references this element. smilref allows resumption of SMIL
        presentation at the proper location after navigation via dtbook file.
        All smilref values are expected to be added to an augmented
        version of the <dtbook> during production.
    
    %showin; (See entity declaration.)
  -->
  <!-- jpritchett@rfbd.org:  2006-07-06.  Removed @style -->
  <!-- jpritchett@rfbd.org:  2006-07-06.  Added xml:space.  This allows control of whitespace handling on any element. -->
  <!-- jpritchett@rfbd.org:  2006-07-07.  Added %externalNamespaces; -->
  <define name="attrsrqd">
    <attribute name="id">
      <data type="ID"/>
    </attribute>
    <optional>
      <attribute name="class"/>
    </optional>
    <optional>
      <attribute name="title">
        <ref name="Text"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="xml:space">
        <choice>
          <value>default</value>
          <value>preserve</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="smilref"/>
    </optional>
    <ref name="i18n"/>
    <ref name="showin"/>
    <ref name="externalNamespaces"/>
  </define>
  <!--
    %attrsrqd; includes required id and implied class,
        title, and xml:space (see %coreattrs above)
    
    %i18n; from which come the implied attributes: xml:lang, and dir
    
    smilref is a pointer to a [SMIL2.0] file, normally to the time container
        (SMIL <par> or <seq>) containing the media object that references this
        element. However, in a text-only DTB consisting of a sequence of
        text media objects, smilref points to the media object that
        references this element. smilref allows resumption of SMIL
        presentation at the proper location after navigation via dtbook file.
        All smilref values are expected to be added to an augmented
        version of the <dtbook> during production.
    
    %externalnamespace; (See entity declaration)
    
    %showin; (See entity declaration.)
  -->
  <!-- ========================= Document Structure ========================== -->
  <define name="dtbookcontent">
    <ref name="head"/>
    <ref name="book"/>
  </define>
  <!--
    dtbookContent designates that each dtbook has a <head> of
    metainformation preceding the <book> content.
  -->
  <!--
    Use: dtbook is the root element in the Digital Talking Book DTD.
    <dtbook> contains metadata in <head> and the contents itself
    in <book>.
  -->
  <define name="dtbook">
    <element name="dtbook">
      <ref name="attlist.dtbook"/>
      <ref name="dtbookcontent"/>
    </element>
  </define>
  <!--
    HB: 2004-04-05 dtbook: added attribute xmlns with FIXED value 
    'http://www.loc.gov/nls/z3986/2004/dtbook'
    Also updated version value from 1.1.0' to '1.1.1'.
  -->
  <!--
    Attuse: dtbook
    
    "version" is required, and contains the specific
    version of the dtd, so that the dtd version for any dtbook can
    be recognized.
    
    "xmlns" is the URL where this dtd and its related materials can
    be found.
    
    "%i18n;" internationalization attributes characterize the <book>.
    Those values may be adjusted for language changes within it.
  -->
  <!--
    HB: 2004-04-05 version: updated from '1.1.0' to '1.1.1'.
    added value for xmlns: 
    %URI; #FIXED 'http://www.loc.gov/nls/z3986/2004/dtbook/'.
  -->
  <!--
    MM: 2005-03-11 changed value for xmlns to: 
    %URI; #FIXED 'http://www.loc.gov/nls/z3986/2005/dtbook/'.
  -->
  <!-- MM: 2005-04-26 version: updated to 1.2.2 -->
  <!-- MG: 2005-06-26 version: updated to 2005-1 -->
  <!-- jpritchett@rfbd.org:  2006-07-07  updated @version to 2005-2 -->
  <!-- jpritchett@rfbd.org:  2006-07-07.  Added %externalNamespaces; -->
  <define name="attlist.dtbook" combine="interleave">
    <optional>
      <attribute name="version" a:defaultValue="2005-2">
        <value type="string" datatypeLibrary="">2005-2</value>
      </attribute>
    </optional>
    <ref name="i18n"/>
    <ref name="externalNamespaces"/>
  </define>
  <!-- ======================== Document Head Metadata ======================= -->
  <!-- HB: 2004-03-25 36: % headmisc: removed style. -->
  <define name="headmisc">
    <choice>
      <ref name="meta"/>
      <ref name="link"/>
    </choice>
  </define>
  <!-- optional head elements -->
  <!--
    Use: head contains metainformation about the book but no
    actual content of the book itself, which is placed in <book>.
    This information is consonant with the <head> information
    in xhtml, see [XHTML11STRICT].
  -->
  <!-- HB: 2003-03-25 head: element drop title -->
  <define name="head">
    <element name="head">
      <ref name="attlist.head"/>
      <zeroOrMore>
        <ref name="headmisc"/>
      </zeroOrMore>
    </element>
  </define>
  <!--
    Attuse: head
    "profile" gives one or more
    whitespace-separated profile URI targets that may provide
    additional information about the current document.
  -->
  <define name="attlist.head" combine="interleave">
    <ref name="i18n"/>
    <optional>
      <attribute name="profile">
        <ref name="URI"/>
      </attribute>
    </optional>
  </define>
  <!--
    HB: 2004-04-02 title: element removed from head,
    now only used for cite and poem.
  -->
  <!--
    Use: link is an empty element appearing in the <head> section
    of a document that establishes a connection between the current
    document and another document. The <link> element conveys
    relationship information (for example, "next" and "previous") that
    may be rendered by user agents in a variety of ways.
  -->
  <define name="link">
    <element name="link">
      <ref name="attlist.link"/>
      <empty/>
    </element>
  </define>
  <!--
    Attuse: link
    
    Each attribute use indicated by a parameter entity is
    defined in the comment following its definition.
  -->
  <define name="attlist.link" combine="interleave">
    <ref name="attrs"/>
    <optional>
      <attribute name="charset">
        <ref name="Charset"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="href">
        <ref name="URI"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="hreflang">
        <ref name="LanguageCode"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="type">
        <ref name="ContentType"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="rel">
        <ref name="LinkTypes"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="rev">
        <ref name="LinkTypes"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="media">
        <ref name="MediaDesc"/>
      </attribute>
    </optional>
  </define>
  <!--
    HB: 2004-03-29 Dublin Core: minimum requirement 
    name="dc:title" content="book title"; encourage use of
    additional name/content pairs from Dublin Core 
    name="dc:..." and from Digital Talking Book name="dtb:..."
    Encourage inclusion of additional Dublin Core and Dtbook metadata
    attributes to make more useful the dtbook as stand-alone content.
  -->
  <!-- jpritchett@rfbd.org:  2006-07-07  Corrected usage comment -->
  <!--
    Use: meta indicates metadata about the book. It is an empty
    element that may appear repeatedly only in <head>.
    Meta is the container for the Dublin Core attributes, 
    and the additional DTBook attributes.
    As a minumum the dc:Title and dtb:uid meta are required.
    Inclusion of the full range of applicable Dublin Core elements is 
    recommended, to make a DTBook document more useful as stand-alone 
    content.
    The Dublin Core specification is available at:
        http://purl.org/dc/
  -->
  <define name="meta">
    <element name="meta">
      <ref name="attlist.meta"/>
      <empty/>
    </element>
  </define>
  <!--
    Attuse: meta
    
    "http-equiv" connects the content attribute
    value to an http header field.
    
    "name" value identifies the specific kind of
    content value.
    
    "content" indicates the value for that "name",
    possibly constrained by the semantics for the individual names.
    
    "scheme" indicates a predetermined format for interpreting
    the content value, such as the Dublin Core.
  -->
  <define name="attlist.meta" combine="interleave">
    <ref name="i18n"/>
    <optional>
      <attribute name="http-equiv">
        <data type="NMTOKEN"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="name">
        <data type="NMTOKEN"/>
      </attribute>
    </optional>
    <attribute name="content"/>
    <optional>
      <attribute name="scheme"/>
    </optional>
  </define>
  <!-- HB: 2004-03-25 36: head: removed element style. -->
  <!-- ============================ Book Content ============================= -->
  <!--
    Use: book surrounds the actual content of the document, which
    is divided into <frontmatter>, <bodymatter>, and <rearmatter>.
    <head>, which contains metadata, precedes <book>.
  -->
  <define name="book">
    <element name="book">
      <ref name="attlist.book"/>
      <optional>
        <ref name="frontmatter"/>
      </optional>
      <optional>
        <ref name="bodymatter"/>
      </optional>
      <optional>
        <ref name="rearmatter"/>
      </optional>
    </element>
  </define>
  <define name="attlist.book" combine="interleave">
    <ref name="attrs"/>
  </define>
  <!-- ======================== Book Major Structures ======================== -->
  <!--
    Use: frontmatter usually contains <doctitle> and <docauthor>, as
    well as preliminary material that is often enclosed in appropriate
    <level> or <level1>. Content may include copyright notice, foreword,
    acknowledgments, table of contents, etc. <frontmatter> serves as a
    guide to the content and nature of a <book>.
  -->
  <!--
    HB: 2004-03-25 29: frontmatter: eliminate %block;
    level or level1 container is required.
  -->
  <!-- HB: 2004-04-08 frontmatter: added covertitle. -->
  <!-- jpritchett@rfbd.org:  2006-07-06 doctitle now required, order of doctitle, covertitle, docauthor fixed. -->
  <define name="frontmatter">
    <element name="frontmatter">
      <ref name="attlist.frontmatter"/>
      <ref name="doctitle"/>
      <optional>
        <ref name="covertitle"/>
      </optional>
      <zeroOrMore>
        <ref name="docauthor"/>
      </zeroOrMore>
      <zeroOrMore>
        <choice>
          <ref name="level"/>
          <ref name="level1"/>
        </choice>
      </zeroOrMore>
    </element>
  </define>
  <define name="attlist.frontmatter" combine="interleave">
    <ref name="attrs"/>
  </define>
  <!--
    Use: bodymatter consists of the text proper of a book, as contrasted
    with preliminary material <frontmatter> or supplementary information
    in <rearmatter>.
  -->
  <!--
    HB: 2004-03-25 29: bodymatter: eliminate %block;
    level or level1 container is required.
  -->
  <define name="bodymatter">
    <element name="bodymatter">
      <ref name="attlist.bodymatter"/>
      <oneOrMore>
        <choice>
          <ref name="level"/>
          <ref name="level1"/>
        </choice>
      </oneOrMore>
    </element>
  </define>
  <define name="attlist.bodymatter" combine="interleave">
    <ref name="attrs"/>
  </define>
  <!--
    Use: rearmatter contains supplementary material such as
    appendices, glossaries, bibliographies, and indices. It follows
    the <bodymatter> of the book.
  -->
  <!--
    HB: 2004-03-25 29: rearmatter: eliminate %block;
    level or level1 container is required.
  -->
  <define name="rearmatter">
    <element name="rearmatter">
      <ref name="attlist.rearmatter"/>
      <oneOrMore>
        <choice>
          <ref name="level"/>
          <ref name="level1"/>
        </choice>
      </oneOrMore>
    </element>
  </define>
  <define name="attlist.rearmatter" combine="interleave">
    <ref name="attrs"/>
  </define>
  <!-- ================== dtbook Recursive Structure level =================== -->
  <!--
    HB: 2004-03-25 28: level: add constraint - at most one <levelhd> 
    (later changed to <hd>) per <level>.
  -->
  <!--
    Use: level is an alternative tag for marking the major
    structures in a book. It may be used recursively, i.e., repeated
    indefinitely with each successive occurrence nesting within the
    previous. It may also be included in a subsequent higher level.
    At most one <hd> heading child may be used.
    Subordinate levels have greater depth. Contrast with the explicit
    <level1>...<level6> elements, which may not be intermixed with
    <level>.
  -->
  <!-- HB: 2004-03-26 34: level: make contentmodel (...)+, rather than (...)*. -->
  <!-- MM: 2004-07-30 level: Changed content model to eliminate ambiguity. -->
  <!--
    MM, DP: 2004-08-17 Corrected typos in content models of level 
    and level1-level6.
  -->
  <!-- MM: 2004-09-15 level: Simplified content model. -->
  <!--
    MM: 2005-03-10 level: Reverted to 2004-08-17 content model as simplified 
    content model was not valid.
  -->
  <define name="level">
    <element name="level">
      <ref name="attlist.level"/>
      <choice>
        <group>
          <ref name="hd"/>
          <oneOrMore>
            <choice>
              <ref name="docblockorinline"/>
              <ref name="level"/>
            </choice>
          </oneOrMore>
        </group>
        <group>
          <oneOrMore>
            <choice>
              <ref name="docblockorinline"/>
              <ref name="level"/>
            </choice>
          </oneOrMore>
          <optional>
            <ref name="hd"/>
            <oneOrMore>
              <choice>
                <ref name="docblockorinline"/>
                <ref name="level"/>
              </choice>
            </oneOrMore>
          </optional>
        </group>
      </choice>
    </element>
  </define>
  <!--
    Attuse: level
    
    "class" identifies the actual name (e.g., part,
    chapter, section, subsection) of the structure it marks.
    "depth" indicates the nesting depth, starting at 1.
  -->
  <define name="attlist.level" combine="interleave">
    <ref name="attrs"/>
    <optional>
      <attribute name="depth"/>
    </optional>
  </define>
  <!-- ============ dtbook Hierarchic Structure level1 ... level6 ============ -->
  <!--
    Use: level1 is the highest-level container of major divisions of
    a book. Used in <frontmatter>, <bodymatter>, and <rearmatter> to
    mark the largest divisions of the book (usually parts or chapters),
    inside which level2 subdivisions (often sections) may nest.
    The class attribute identifies the actual name (e.g., part, chapter)
    of the structure it marks. Contrast with <level>.
    At most one heading <h1> may be used.
  -->
  <!--
    HB: 2004-03-25 28: level1: added constraint - at most one <h1> 
    per <level1>.
  -->
  <!-- HB: 2004-03-26 34: level1: make contentmodel (...)+, rather than (...)*. -->
  <!-- MM: 2004-07-30 level1: Changed content model to eliminate ambiguity. -->
  <!--
    MM, DP: 2004-08-17 Corrected typos in content models of level 
    and level1-level6.
  -->
  <!-- MM: 2004-09-15 level1: Simplified content model. -->
  <!--
    MM: 2005-03-10 level1: Reverted to 2004-08-17 content model as simplified 
    content model was not valid.
  -->
  <define name="level1">
    <element name="level1">
      <ref name="attlist.level1"/>
      <choice>
        <group>
          <ref name="h1"/>
          <oneOrMore>
            <choice>
              <ref name="docblockorinline"/>
              <ref name="level2"/>
            </choice>
          </oneOrMore>
        </group>
        <group>
          <oneOrMore>
            <choice>
              <ref name="docblockorinline"/>
              <ref name="level2"/>
            </choice>
          </oneOrMore>
          <optional>
            <ref name="h1"/>
            <oneOrMore>
              <choice>
                <ref name="docblockorinline"/>
                <ref name="level2"/>
              </choice>
            </oneOrMore>
          </optional>
        </group>
      </choice>
    </element>
  </define>
  <define name="attlist.level1" combine="interleave">
    <ref name="attrs"/>
  </define>
  <!--
    Use: level2 contains subdivisions that nest within <level1>
    divisions. The class attribute identifies the actual name (e.g.,
    subpart, chapter, subsection) of the structure it marks.
    At most one heading <h2> may be used.
  -->
  <!--
    HB: 2004-03-25 28: level2: added constraint - at most one <h2> 
    per <level2>.
  -->
  <!-- HB: 2004-03-26 34: level2: make contentmodel (...)+, rather than (...)*. -->
  <!-- MM: 2004-07-30 level2: Changed content model to eliminate ambiguity. -->
  <!--
    MM, DP: 2004-08-17 Corrected typos in content models of level 
    and level1-level6.
  -->
  <!-- MM: 2004-09-15 level2: Simplified content model. -->
  <!--
    MM: 2005-03-10 level2: Reverted to 2004-08-17 content model as simplified 
    content model was not valid.
  -->
  <define name="level2">
    <element name="level2">
      <ref name="attlist.level2"/>
      <choice>
        <group>
          <ref name="h2"/>
          <oneOrMore>
            <choice>
              <ref name="docblockorinline"/>
              <ref name="level3"/>
            </choice>
          </oneOrMore>
        </group>
        <group>
          <oneOrMore>
            <choice>
              <ref name="docblockorinline"/>
              <ref name="level3"/>
            </choice>
          </oneOrMore>
          <optional>
            <ref name="h2"/>
            <oneOrMore>
              <choice>
                <ref name="docblockorinline"/>
                <ref name="level3"/>
              </choice>
            </oneOrMore>
          </optional>
        </group>
      </choice>
    </element>
  </define>
  <define name="attlist.level2" combine="interleave">
    <ref name="attrs"/>
  </define>
  <!--
    HB: 2004-03-25 28: level3: added constraint - at most one <h3> 
    per <level3>.
  -->
  <!-- MM: 2004-07-08 34: level3: make contentmodel (...)+, rather than (...)*. -->
  <!-- MM: 2004-07-30 level3: Changed content model to eliminate ambiguity. -->
  <!--
    MM, DP: 2004-08-17 Corrected typos in content models of level 
    and level1-level6.
  -->
  <!-- MM: 2004-09-15 level3: Simplified content model. -->
  <!--
    MM: 2005-03-10 level3: Reverted to 2004-08-17 content model as simplified 
    content model was not valid.
  -->
  <!--
    Use: level3 contains sub-subdivisions that nest within <level2>
    subdivisions (e.g., sub-subsections within subsections). The class
    attribute identifies the actual name (e.g., section, subpart,
    subsubsection) of the subordinate structure it marks.
    At most one heading <h3> may be used.
  -->
  <define name="level3">
    <element name="level3">
      <ref name="attlist.level3"/>
      <choice>
        <group>
          <ref name="h3"/>
          <oneOrMore>
            <choice>
              <ref name="docblockorinline"/>
              <ref name="level4"/>
            </choice>
          </oneOrMore>
        </group>
        <group>
          <oneOrMore>
            <choice>
              <ref name="docblockorinline"/>
              <ref name="level4"/>
            </choice>
          </oneOrMore>
          <optional>
            <ref name="h3"/>
            <oneOrMore>
              <choice>
                <ref name="docblockorinline"/>
                <ref name="level4"/>
              </choice>
            </oneOrMore>
          </optional>
        </group>
      </choice>
    </element>
  </define>
  <define name="attlist.level3" combine="interleave">
    <ref name="attrs"/>
  </define>
  <!--
    HB: 2004-03-25 28: level4: added constraint - at most one <h4> 
    per <level4>.
  -->
  <!-- MM: 2004-07-08 34: level4: make contentmodel (...)+, rather than (...)*. -->
  <!-- MM: 2004-07-30 level4: Changed content model to eliminate ambiguity. -->
  <!--
    MM, DP: 2004-08-17 Corrected typos in content models of level 
    and level1-level6.
  -->
  <!-- MM: 2004-09-15 level4: Simplified content model. -->
  <!--
    MM: 2005-03-10 level4: Reverted to 2004-08-17 content model as simplified 
    content model was not valid.
  -->
  <!--
    Use: level4 contains further subdivisions that nest within <level3>
    subdivisions. The class attribute identifies the actual name
    of the subordinate structure it marks.
    At most one heading <h4> may be used.
  -->
  <define name="level4">
    <element name="level4">
      <ref name="attlist.level4"/>
      <choice>
        <group>
          <ref name="h4"/>
          <oneOrMore>
            <choice>
              <ref name="docblockorinline"/>
              <ref name="level5"/>
            </choice>
          </oneOrMore>
        </group>
        <group>
          <oneOrMore>
            <choice>
              <ref name="docblockorinline"/>
              <ref name="level5"/>
            </choice>
          </oneOrMore>
          <optional>
            <ref name="h4"/>
            <oneOrMore>
              <choice>
                <ref name="docblockorinline"/>
                <ref name="level5"/>
              </choice>
            </oneOrMore>
          </optional>
        </group>
      </choice>
    </element>
  </define>
  <define name="attlist.level4" combine="interleave">
    <ref name="attrs"/>
  </define>
  <!--
    HB: 2004-03-25 28: level5: added constraint - at most one <h5> 
    per <level5>.
  -->
  <!-- MM: 2004-07-08 34: level5: make contentmodel (...)+, rather than (...)*. -->
  <!-- MM: 2004-07-30 level5: Changed content model to eliminate ambiguity. -->
  <!--
    MM, DP: 2004-08-17 Corrected typos in content models of level 
    and level1-level6.
  -->
  <!-- MM: 2004-09-15 level5: Simplified content model. -->
  <!--
    MM: 2005-03-10 level5: Reverted to 2004-08-17 content model as simplified 
    content model was not valid.
  -->
  <!--
    Use: level5 contains further subdivisions that nest within <level4>
    subdivisions. The class attribute identifies the actual name
    of the subordinate structure it marks.
    At most one heading <h5> may be used.
  -->
  <define name="level5">
    <element name="level5">
      <ref name="attlist.level5"/>
      <choice>
        <group>
          <ref name="h5"/>
          <oneOrMore>
            <choice>
              <ref name="docblockorinline"/>
              <ref name="level6"/>
            </choice>
          </oneOrMore>
        </group>
        <group>
          <oneOrMore>
            <choice>
              <ref name="docblockorinline"/>
              <ref name="level6"/>
            </choice>
          </oneOrMore>
          <optional>
            <ref name="h5"/>
            <oneOrMore>
              <choice>
                <ref name="docblockorinline"/>
                <ref name="level6"/>
              </choice>
            </oneOrMore>
          </optional>
        </group>
      </choice>
    </element>
  </define>
  <define name="attlist.level5" combine="interleave">
    <ref name="attrs"/>
  </define>
  <!--
    HB: 2004-03-25 28: level6: added constraint - at most one <h6> 
    per <level6>.
  -->
  <!-- MM: 2004-07-08 34: level6: make contentmodel (...)+, rather than (...)*. -->
  <!--
    MM: 2004-07-23 34: level6: replaced "%block | %inlineinblock" 
    with "%docblockorinline;" per other leveln models.
  -->
  <!-- MM: 2004-07-30 level6: Changed content model to eliminate ambiguity. -->
  <!--
    MM, DP: 2004-08-17 Corrected typos in content models of level 
    and level1-level6.
  -->
  <!-- MM: 2004-09-15 level6: Simplified content model. -->
  <!--
    MM: 2005-03-10 level6: Reverted to 2004-08-17 content model as simplified 
    content model was not valid.
  -->
  <!--
    Use: level6 contains further subdivisions that nest within <level5>
    subdivisions. The class attribute identifies the actual name
    of the subordinate structure it marks.
    At most one heading <h6> may be used.
  -->
  <define name="level6">
    <element name="level6">
      <ref name="attlist.level6"/>
      <choice>
        <group>
          <ref name="h6"/>
          <oneOrMore>
            <ref name="docblockorinline"/>
          </oneOrMore>
        </group>
        <group>
          <oneOrMore>
            <ref name="docblockorinline"/>
          </oneOrMore>
          <optional>
            <ref name="h6"/>
            <oneOrMore>
              <ref name="docblockorinline"/>
            </oneOrMore>
          </optional>
        </group>
      </choice>
    </element>
  </define>
  <define name="attlist.level6" combine="interleave">
    <ref name="attrs"/>
  </define>
  <!-- ============================= Text Markup ============================= -->
  <define name="phrase">
    <choice>
      <ref name="em"/>
      <ref name="strong"/>
      <ref name="dfn"/>
      <ref name="code"/>
      <ref name="samp"/>
      <ref name="kbd"/>
      <ref name="cite"/>
      <ref name="abbr"/>
      <ref name="acronym"/>
    </choice>
  </define>
  <!-- inline text elements -->
  <!--
    HB: 2004-04-23 % special: eliminated linenum from % special,
    linenum only appears within line.
  -->
  <define name="special">
    <choice>
      <ref name="a"/>
      <ref name="img"/>
      <ref name="imggroup"/>
      <ref name="br"/>
      <ref name="q"/>
      <ref name="sub"/>
      <ref name="sup"/>
      <ref name="span"/>
      <ref name="bdo"/>
    </choice>
  </define>
  <!-- special inline text elements -->
  <!--
    HB: 2004-04-23 % specialnoa: eliminated linenum from % specialnoa,
    linenum only appears within line.
  -->
  <define name="specialnoa">
    <choice>
      <ref name="img"/>
      <ref name="imggroup"/>
      <ref name="br"/>
      <ref name="q"/>
      <ref name="sub"/>
      <ref name="sup"/>
      <ref name="span"/>
      <ref name="bdo"/>
    </choice>
  </define>
  <!-- specialnoa inline text elements for anchor <a> -->
  <!-- =========================== Inline Entities =========================== -->
  <!-- jpritchett@rfbd.org:  2006-08-11.  Add %externalFlow to %dtbookinline; -->
  <define name="dtbookinline">
    <choice>
      <ref name="sent"/>
      <ref name="w"/>
      <ref name="pagenum"/>
      <ref name="prodnote"/>
      <ref name="annoref"/>
      <ref name="noteref"/>
      <ref name="externalinline"/>
      <ref name="externalFlow"/>
    </choice>
  </define>
  <!-- dtbook added inline text elements -->
  <define name="inline">
    <choice>
      <text/>
      <ref name="phrase"/>
      <ref name="special"/>
      <ref name="dtbookinline"/>
    </choice>
  </define>
  <!-- inline text elements -->
  <!-- HB: 2004-03-25 36h: to % inlinenoa add %dtbookinline;. -->
  <!--
    MM: 2004-07-23 Remove %externalinline; since already present 
    via %dtbookinline;.
  -->
  <define name="inlinenoa">
    <choice>
      <text/>
      <ref name="phrase"/>
      <ref name="specialnoa"/>
      <ref name="dtbookinline"/>
    </choice>
  </define>
  <!-- inlinenoa excludes nested <a> -->
  <!-- jpritchett@rfbd.org:  2006-07-07.  Added %externalFlow %inlines;, %inlinew; -->
  <define name="inlines">
    <choice>
      <text/>
      <ref name="phrase"/>
      <ref name="special"/>
      <ref name="pagenum"/>
      <ref name="w"/>
      <ref name="prodnote"/>
      <ref name="annoref"/>
      <ref name="noteref"/>
      <ref name="externalinline"/>
      <ref name="externalFlow"/>
    </choice>
  </define>
  <!-- inlines excludes direct nesting of sentences <sent> -->
  <define name="inlinew">
    <choice>
      <text/>
      <ref name="phrase"/>
      <ref name="special"/>
      <ref name="externalinline"/>
      <ref name="externalFlow"/>
    </choice>
  </define>
  <!-- inlinew for word <w> excludes any of the %dtbookinline; -->
  <define name="inlinenopagenum">
    <choice>
      <text/>
      <ref name="phrase"/>
      <ref name="special"/>
      <ref name="sent"/>
      <ref name="w"/>
      <ref name="annoref"/>
      <ref name="noteref"/>
      <ref name="externalinline"/>
    </choice>
  </define>
  <!-- inlinenopagenum excludes direct <pagenum> in <table> <th> and <td>. -->
  <define name="inlinenoprodnote">
    <choice>
      <text/>
      <ref name="phrase"/>
      <ref name="special"/>
      <ref name="sent"/>
      <ref name="w"/>
      <ref name="pagenum"/>
      <ref name="annoref"/>
      <ref name="noteref"/>
      <ref name="externalinline"/>
    </choice>
  </define>
  <!-- inlinenoprodnote excludes direct <prodnote>, as they shouldn't nest -->
  <!-- =================== Flow (Block or Inline) Entities =================== -->
  <!-- jpritchett@rfbd.org:  2006-07-07.  Added %externalFlow to %flow;, %flownopagenum; -->
  <define name="flow">
    <choice>
      <ref name="inlinenoprodnote"/>
      <ref name="blocknoimggroup"/>
      <ref name="externalFlow"/>
    </choice>
  </define>
  <!-- flow elements add inlinenoprodnote to block -->
  <define name="flownopagenum">
    <choice>
      <ref name="inlinenopagenum"/>
      <ref name="blocknoimggroup"/>
      <ref name="externalFlow"/>
    </choice>
  </define>
  <!--
    flownopagenum ideally excludes pagenum though can get in
    indirectly through elements of %blocknoimggroup;
  -->
  <!-- ========= Br, Line, Linenum, Address, and Div Content Models ========== -->
  <!-- Use: br marks a forced line break. -->
  <define name="br">
    <element name="br">
      <ref name="attlist.br"/>
      <empty/>
    </element>
  </define>
  <!--
    Attuse: br
    
    The %coreattrs; only appear, as there is no content
    to which the more general %attrs; apply.
  -->
  <define name="attlist.br" combine="interleave">
    <ref name="coreattrs"/>
  </define>
  <!--
    Use: line marks a single logical line of text. Often used in
    conjunction with <linenum> in documents with numbered lines.
  -->
  <define name="line">
    <element name="line">
      <ref name="attlist.line"/>
      <zeroOrMore>
        <choice>
          <ref name="inline"/>
          <ref name="linenum"/>
        </choice>
      </zeroOrMore>
    </element>
  </define>
  <define name="attlist.line" combine="interleave">
    <ref name="attrs"/>
  </define>
  <!-- HB: 2004-03-30 poem: added linenum use. -->
  <!-- Use: linenum contains a line number, for example in legal text, or <poem>. -->
  <define name="linenum">
    <element name="linenum">
      <ref name="attlist.linenum"/>
      <text/>
    </element>
  </define>
  <define name="attlist.linenum" combine="interleave">
    <ref name="attrs"/>
  </define>
  <!--
    Use: address contains a location at which a person or agency
    may be contacted. By use of <line> to contain content of the
    individual lines, the class attribute can be used to identify
    the content of that <line>. For example, class values might include:
    name, address, region (state. province, etc.), country, location
    code (such as zipcode, provincial code), phone, fax, email, etc.
  -->
  <define name="address">
    <element name="address">
      <ref name="attlist.address"/>
      <zeroOrMore>
        <choice>
          <ref name="inline"/>
          <ref name="line"/>
        </choice>
      </zeroOrMore>
    </element>
  </define>
  <define name="attlist.address" combine="interleave">
    <ref name="attrs"/>
  </define>
  <!--
    Use: div is a generic container for subdivisions of a book. The
    <level1> ... <level6> hierarchy, or the <level> tag used recursively,
    should mark the major hierarchical structures of a book, while <div>
    is used in less formal circumstances or when for production purposes
    it is desired that a structure should be treated differently.
    Compare with <span>, which is used in inline settings.
  -->
  <!-- HB: 2004-04-08 div: added covertitle. -->
  <!-- MM: 2004-07-30 Dropped 'level' attribute from element div. -->
  <!-- jpritchett@rfbd.org:  2006-07-06 Changed model to %docblockorinline to include bridgehead -->
  <define name="div">
    <element name="div">
      <ref name="attlist.div"/>
      <oneOrMore>
        <ref name="docblockorinline"/>
      </oneOrMore>
    </element>
  </define>
  <!--
    Attuse: div
    
    "class" value can identify the
    actual name (e.g., part, chapter, letter) of the structure it marks.
  -->
  <define name="attlist.div" combine="interleave">
    <ref name="attrs"/>
  </define>
  <!-- === dtbook Block Elements: Title, Author, Prodnote, Sidebar === -->
  <!-- HB: 2004-04-04 35b  title: added <title> for use in <poem> or <cite>. -->
  <!-- Use: title contains the title of a <poem> or <cite> (citation) -->
  <!-- jpritchett@rfbd.org:  2006-07-06 Added %coreattrs (id, class, title, xml:space) to attribute list -->
  <define name="title">
    <element name="title">
      <ref name="attlist.title"/>
      <text/>
    </element>
  </define>
  <define name="attlist.title" combine="interleave">
    <ref name="i18n"/>
    <ref name="coreattrs"/>
  </define>
  <!--
    Use: author identifies the writer of a work other than this one.
    Contrast with <docauthor>,  which identifies the author of this work.
    <author> typically occurs within <poem>, <blockquote> or <cite>.
  -->
  <define name="author">
    <element name="author">
      <ref name="attlist.author"/>
      <zeroOrMore>
        <ref name="inline"/>
      </zeroOrMore>
    </element>
  </define>
  <define name="attlist.author" combine="interleave">
    <ref name="attrs"/>
  </define>
  <!--
    HB: 2004-03-25 35d: notice element dropped: its purpose is sufficiently
    achieved with sidebar with attribute render="required." This provides
    sufficient capability for admonitions like warning, hazard, 
    danger, or caution.
  -->
  <!--
    Use: prodnote contains language added to the alternative-format
    version by the producer; commonly used to:
    1) provide descriptions of one or more visual elements such
        as charts, graphs, etc.
    2) supply operating instructions
    3) describe differences between the print book and the audio
    version.
  -->
  <define name="prodnote">
    <element name="prodnote">
      <ref name="attlist.prodnote"/>
      <zeroOrMore>
        <ref name="flow"/>
      </zeroOrMore>
    </element>
  </define>
  <!--
    Attuse: prodnote
    
    "imgref" identifies the space-separated id value(s)
    on pertinent images <img>.
    
    "render" indicates that the content is
    'required' or 'optional' for the user. If optional, some user
    preference may allow skipping over the content. But <prodnote
    render='required'> is essential content for the user. An
    audible cue could announce the presence of the <prodnote>.
  -->
  <!--
    HB: 2004-03-25 35g: prodnote: use render="required" to achieve the explicit
    admonition such as caution, warning, danger, or hazard, from the
    text. Optionally put the specific admonition in the class attribute
    value, repeating it from the text.
  -->
  <define name="attlist.prodnote" combine="interleave">
    <ref name="attrs"/>
    <optional>
      <attribute name="imgref">
        <data type="IDREFS"/>
      </attribute>
    </optional>
    <attribute name="render">
      <choice>
        <value>required</value>
        <value>optional</value>
      </choice>
    </attribute>
  </define>
  <!--
    Use: sidebar contains information supplementary to the main
    text and/or narrative flow and is often boxed and printed apart
    from the main text block on a page. It may have a heading <hd>.
  -->
  <define name="sidebar">
    <element name="sidebar">
      <ref name="attlist.sidebar"/>
      <zeroOrMore>
        <choice>
          <ref name="flow"/>
          <ref name="hd"/>
        </choice>
      </zeroOrMore>
    </element>
  </define>
  <!--
    HB: 2004-03-25 35g: sidebar: use render="required" to achieve the explicit
    admonition such as caution, warning, danger, or hazard, from the
    text. Optionally put the specific admonition in the class attribute
    value, repeating it from the text.
  -->
  <define name="attlist.sidebar" combine="interleave">
    <ref name="attrs"/>
    <attribute name="render">
      <choice>
        <value>required</value>
        <value>optional</value>
      </choice>
    </attribute>
  </define>
  <!--
    Use: note marks a footnote, endnote, etc. Any local reference to
    <note id="yyy"> is by <noteref idref="#yyy">.
  -->
  <define name="note">
    <element name="note">
      <ref name="attlist.note"/>
      <oneOrMore>
        <choice>
          <ref name="block"/>
          <ref name="inlineinblock"/>
        </choice>
      </oneOrMore>
    </element>
  </define>
  <define name="attlist.note" combine="interleave">
    <ref name="attrsrqd"/>
  </define>
  <!--
    Use: annotation is a comment on or explanation of a portion of
    a printed book. It differs from <note> in that an <annotation>
    is usually set in the margin or on a facing page, often with
    no explicit reference to it inserted in the text. Any local
    reference to <annotation id="xxx"> is by <annoref idref="#xxx">.
  -->
  <define name="annotation">
    <element name="annotation">
      <ref name="attlist.annotation"/>
      <oneOrMore>
        <choice>
          <ref name="block"/>
          <ref name="inlineinblock"/>
        </choice>
      </oneOrMore>
    </element>
  </define>
  <define name="attlist.annotation" combine="interleave">
    <ref name="attrsrqd"/>
  </define>
  <!-- ====================== Byline, Epigraph, Dateline ===================== -->
  <!--
    Addenda module for dtbook
    M. Moodie and J. Pritchett
    9 July 2003
    This module defines the <epigraph>, <dateline>, and <byline> elements.
  -->
  <!-- HB: 2004-03-30 epigraph: element added. -->
  <!--
    Use: epigraph marks a quotation placed at the beginnihg of a work
    or a division of a work.
  -->
  <!-- MM: 2005-04-22 epigraph - changed ATTLIST to %attrs; -->
  <define name="epigraph">
    <element name="epigraph">
      <ref name="attlist.epigraph"/>
      <zeroOrMore>
        <ref name="flow"/>
      </zeroOrMore>
    </element>
  </define>
  <define name="attlist.epigraph" combine="interleave">
    <ref name="attrs"/>
  </define>
  <!-- HB: 2004-30-30 byline: element added. -->
  <!--
    Use: byline contains information about the creator of or contributor
    to a work. 
  -->
  <!-- MM: 2005-04-22 byline - changed ATTLIST to %attrs; -->
  <define name="byline">
    <element name="byline">
      <ref name="attlist.byline"/>
      <zeroOrMore>
        <ref name="inline"/>
      </zeroOrMore>
    </element>
  </define>
  <define name="attlist.byline" combine="interleave">
    <ref name="attrs"/>
  </define>
  <!-- HB: 2004-30-30 dateline: element added. -->
  <!--
    Use: dateline contains information about the time and/or place at which
    a work was authored. 
  -->
  <!-- MM: 2005-04-22 dateline - changed ATTLIST to %attrs; -->
  <define name="dateline">
    <element name="dateline">
      <ref name="attlist.dateline"/>
      <zeroOrMore>
        <ref name="inline"/>
      </zeroOrMore>
    </element>
  </define>
  <define name="attlist.dateline" combine="interleave">
    <ref name="attrs"/>
  </define>
  <!-- ============================= Poem, Linegroup ========================= -->
  <!--
    dtbook poetry module
    M. Moodie and J. Pritchett
    9 July 2003
    This module defines the <linegroup> and <poem> elements.
  -->
  <!-- Use: linegroup provides means to group a set of lines of a <poem>. -->
  <define name="linegroup">
    <element name="linegroup">
      <ref name="attlist.linegroup"/>
      <zeroOrMore>
        <choice>
          <ref name="hd"/>
          <ref name="dateline"/>
          <ref name="epigraph"/>
          <ref name="byline"/>
          <ref name="linegroup"/>
          <ref name="line"/>
          <ref name="pagenum"/>
          <ref name="prodnote"/>
          <ref name="noteref"/>
          <ref name="annoref"/>
          <ref name="note"/>
          <ref name="annotation"/>
          <ref name="p"/>
          <ref name="blockquote"/>
          <ref name="img"/>
          <ref name="imggroup"/>
        </choice>
      </zeroOrMore>
    </element>
  </define>
  <!--
    HB: 2004-03-30 linegroup: The class attribute value can identify the
    kind of linegroup, such as "stanza", "chorus", or "canto".
  -->
  <!-- MM: 2005-04-22 linegroup - changed ATTLIST to %attrs; -->
  <define name="attlist.linegroup" combine="interleave">
    <ref name="attrs"/>
  </define>
  <!-- HB: 2004-03-30 poem: removed notice and hr from content model. -->
  <!-- HB: 2004-03-30 poem: added title and author to content model. -->
  <!-- Use: poem is a complete <poem> or fragment thereof. -->
  <!-- MM: 2005-04-22 poem - changed ATTLIST to %attrs; -->
  <define name="poem">
    <element name="poem">
      <ref name="attlist.poem"/>
      <zeroOrMore>
        <choice>
          <ref name="title"/>
          <ref name="author"/>
          <ref name="hd"/>
          <ref name="dateline"/>
          <ref name="epigraph"/>
          <ref name="byline"/>
          <ref name="linegroup"/>
          <ref name="line"/>
          <ref name="pagenum"/>
          <ref name="img"/>
          <ref name="imggroup"/>
          <ref name="sidebar"/>
        </choice>
      </zeroOrMore>
    </element>
  </define>
  <define name="attlist.poem" combine="interleave">
    <ref name="attrs"/>
  </define>
  <!-- ========================= The Anchor Element ========================== -->
  <!--
    Use: a contains an anchor, which is used to reference another
    location, within the same or another <dtbook>.
  -->
  <define name="a">
    <element name="a">
      <ref name="attlist.a"/>
      <zeroOrMore>
        <ref name="inlinenoa"/>
      </zeroOrMore>
    </element>
  </define>
  <!-- jpritchett@rfbd.org:  2006-07-07  Corrected reference to RFC2046 in comment regarding @type -->
  <!--
    Attuse: a
    
    "href" value may have three forms:
    
    1) '#idref', in the <dtbook>, to the element type having the
        referenced id value;
    
    2) 'uri', a uniform resource identifier to a resource, typically a
        document, see [RFC2396], possibly restricted to work with only
        the <dtbook> document content, as referenced content is
        expected to be available on the same media, and off-media
        references may not be available;
    
    3) 'uri#xxx', in the resource uri, the element with id='xxx'.
    
    Uses of the remaining attributes other than %attrs; are:
    
        "type" is advisory content MIME type of the target, see [RFC2046];
    
        "hreflang" is the language code of the href target, see [RFC3066];
    
        "rel" is a list of forward link type(s), the relationship(s)
            expressed by the href value to the target, space-separated
            if multiple;
    
        "rev" is a list of reverse link types, the relationship(s)
            to this location from the href target, space-separated
            if multiple;
    
        "accesskey"=accessibility key character shortcut;
    
        "tabindex"=tabbing order.
    
        "external" An external link points to media content that is not part 
            of the DTB.  The external media content must be rendered by an 
            external application, whether or not that content is renderable by 
            the DTB player.
  -->
  <define name="attlist.a" combine="interleave">
    <ref name="attrs"/>
    <optional>
      <attribute name="type">
        <ref name="ContentType"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="href">
        <ref name="URI"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="hreflang">
        <ref name="LanguageCode"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="rel">
        <ref name="LinkTypes"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="rev">
        <ref name="LinkTypes"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="accesskey">
        <ref name="Character"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="tabindex">
        <ref name="Number"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="external" a:defaultValue="false">
        <choice>
          <value>true</value>
          <value>false</value>
        </choice>
      </attribute>
    </optional>
  </define>
  <!-- =========================== Inline Elements =========================== -->
  <!--
    Use: em indicates emphasis. Usually <em> is rendered in italics.
    Compare with <strong>.
  -->
  <define name="em">
    <element name="em">
      <ref name="attlist.em"/>
      <zeroOrMore>
        <ref name="inline"/>
      </zeroOrMore>
    </element>
  </define>
  <define name="attlist.em" combine="interleave">
    <ref name="attrs"/>
  </define>
  <!--
    Use: strong marks stronger emphasis than <em>. Visually <strong> is
    usually rendered bold.
  -->
  <define name="strong">
    <element name="strong">
      <ref name="attlist.strong"/>
      <zeroOrMore>
        <ref name="inline"/>
      </zeroOrMore>
    </element>
  </define>
  <define name="attlist.strong" combine="interleave">
    <ref name="attrs"/>
  </define>
  <!--
    Use: dfn marks the first occurrence of a word or term that is
    defined or explained there or elsewhere in <book>. Often
    <dfn> is rendered in italics, sometimes in parentheses.
  -->
  <define name="dfn">
    <element name="dfn">
      <ref name="attlist.dfn"/>
      <zeroOrMore>
        <ref name="inline"/>
      </zeroOrMore>
    </element>
  </define>
  <define name="attlist.dfn" combine="interleave">
    <ref name="attrs"/>
  </define>
  <!--
    Use: kbd designates information that the reader is to input
    directly into a computer using the keyboard.
  -->
  <define name="kbd">
    <element name="kbd">
      <ref name="attlist.kbd"/>
      <zeroOrMore>
        <ref name="inline"/>
      </zeroOrMore>
    </element>
  </define>
  <define name="attlist.kbd" combine="interleave">
    <ref name="attrs"/>
  </define>
  <!-- Use: code designates a fragment of computer code. -->
  <define name="code">
    <element name="code">
      <ref name="attlist.code"/>
      <zeroOrMore>
        <ref name="inline"/>
      </zeroOrMore>
    </element>
  </define>
  <!-- jpritchett@rfbd.org: 2006-09-08  Expanded %attrs; to prevent duplication of @xml:space -->
  <!--
    Attuse: code
    
    See http://www.w3.org/TR/xml11/#sec-white-space for information on xml:space.
  -->
  <define name="attlist.code" combine="interleave">
    <optional>
      <attribute name="id">
        <data type="ID"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="class"/>
    </optional>
    <optional>
      <attribute name="title">
        <ref name="Text"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="xml:space" a:defaultValue="preserve">
        <choice>
          <value>default</value>
          <value>preserve</value>
        </choice>
      </attribute>
    </optional>
    <ref name="externalNamespaces"/>
    <ref name="i18n"/>
    <optional>
      <attribute name="smilref"/>
    </optional>
    <ref name="showin"/>
  </define>
  <!--
    Use: samp contains a sample of work created by the author for
    use as an example or template. For example, a sample business
    letter, resume, computer program output, or form.
  -->
  <define name="samp">
    <element name="samp">
      <ref name="attlist.samp"/>
      <zeroOrMore>
        <ref name="inline"/>
      </zeroOrMore>
    </element>
  </define>
  <!-- jpritchett@rfbd.org: 2006-09-08  Expanded %attrs; to prevent duplication of @xml:space -->
  <!--
    Attuse: samp
    
    See http://www.w3.org/TR/xml11/#sec-white-space for information on xml:space.
  -->
  <define name="attlist.samp" combine="interleave">
    <optional>
      <attribute name="id">
        <data type="ID"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="class"/>
    </optional>
    <optional>
      <attribute name="title">
        <ref name="Text"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="xml:space" a:defaultValue="preserve">
        <choice>
          <value>default</value>
          <value>preserve</value>
        </choice>
      </attribute>
    </optional>
    <ref name="externalNamespaces"/>
    <ref name="i18n"/>
    <optional>
      <attribute name="smilref"/>
    </optional>
    <ref name="showin"/>
  </define>
  <!-- Use: cite marks a reference (or citation) to another document. -->
  <!-- HB: 2004-03-25 35a: cite: allow title and author. -->
  <define name="cite">
    <element name="cite">
      <ref name="attlist.cite"/>
      <zeroOrMore>
        <choice>
          <ref name="inline"/>
          <ref name="title"/>
          <ref name="author"/>
        </choice>
      </zeroOrMore>
    </element>
  </define>
  <define name="attlist.cite" combine="interleave">
    <ref name="attrs"/>
  </define>
  <!--
    Use: abbr designates an abbreviation, a shortened form of a
    word. For examples: Mr., approx., lbs., rec'd.
    Contrast with <acronym>.
  -->
  <define name="abbr">
    <element name="abbr">
      <ref name="attlist.abbr"/>
      <zeroOrMore>
        <ref name="inline"/>
      </zeroOrMore>
    </element>
  </define>
  <!--
    Attuse: abbr
    
    "title" value may expand that abbreviation.
  -->
  <define name="attlist.abbr" combine="interleave">
    <ref name="attrs"/>
  </define>
  <!--
    Use: acronym marks a word formed from key letters (usually
    initials) of a group of words. For examples: UNESCO, NATO, XML, US.
    Contrast with <abbr>.
  -->
  <define name="acronym">
    <element name="acronym">
      <ref name="attlist.acronym"/>
      <zeroOrMore>
        <ref name="inline"/>
      </zeroOrMore>
    </element>
  </define>
  <!--
    Attuse: acronym
    
    "title" value may expand that acronym.
    "pronounce" value 'yes' indicates that the
    acronym is pronounceable as a word (for example, NATO);
    'no' that the acronym is best presented as a sequence
    of letters (for examples, "XML" or  "US").
  -->
  <define name="attlist.acronym" combine="interleave">
    <ref name="attrs"/>
    <optional>
      <attribute name="pronounce">
        <choice>
          <value>yes</value>
          <value>no</value>
        </choice>
      </attribute>
    </optional>
  </define>
  <!--
    Use: sub indicates a subscript character (printed below a
    character's normal baseline). Can be used recursively and/or
    intermixed with <sup>.
  -->
  <define name="sub">
    <element name="sub">
      <ref name="attlist.sub"/>
      <zeroOrMore>
        <ref name="inline"/>
      </zeroOrMore>
    </element>
  </define>
  <define name="attlist.sub" combine="interleave">
    <ref name="attrs"/>
  </define>
  <!--
    Use: sup marks a superscript character (printed above a
    character's normal baseline). Can be used recursively and/or
    intermixed with <sub>.
  -->
  <define name="sup">
    <element name="sup">
      <ref name="attlist.sup"/>
      <zeroOrMore>
        <ref name="inline"/>
      </zeroOrMore>
    </element>
  </define>
  <define name="attlist.sup" combine="interleave">
    <ref name="attrs"/>
  </define>
  <!--
    Use: span is a generic container for use in inline settings
    when no specific tag exists for a given situation. The class
    attribute may describe the nature of the text it marks (e.g.,
    a typographical error). May be used to mark a class of items
    to which styles are to be applied. Compare with <div>, which
    is used in a block settings.
  -->
  <define name="span">
    <element name="span">
      <ref name="attlist.span"/>
      <zeroOrMore>
        <ref name="inline"/>
      </zeroOrMore>
    </element>
  </define>
  <define name="attlist.span" combine="interleave">
    <ref name="attrs"/>
  </define>
  <!--
    Use: bdo is used in special cases where the automatic actions
    of the bi-directional algorithm would result in incorrect display.
  -->
  <define name="bdo">
    <element name="bdo">
      <ref name="attlist.bdo"/>
      <zeroOrMore>
        <ref name="inline"/>
      </zeroOrMore>
    </element>
  </define>
  <!-- jpritchett@rfd.org:  2006-07-07  Changed @lang to @xml:lang -->
  <!--
    Attuse: bdo
    
    "lang" indicates the language of the content.
    
    "dir" indicates the writing direction: 'ltr' is
    left-to-right, 'rtl' is right-to-left.
  -->
  <define name="attlist.bdo" combine="interleave">
    <ref name="coreattrs"/>
    <optional>
      <attribute name="xml:lang">
        <ref name="LanguageCode"/>
      </attribute>
    </optional>
    <attribute name="dir">
      <choice>
        <value>ltr</value>
        <value>rtl</value>
      </choice>
    </attribute>
  </define>
  <!-- =================== dtbook Inline Sentence and Word =================== -->
  <!-- Use: sent marks a sentence. -->
  <define name="sent">
    <element name="sent">
      <ref name="attlist.sent"/>
      <zeroOrMore>
        <ref name="inlines"/>
      </zeroOrMore>
    </element>
  </define>
  <define name="attlist.sent" combine="interleave">
    <ref name="attrs"/>
  </define>
  <!-- Use: w marks a word. -->
  <define name="w">
    <element name="w">
      <ref name="attlist.w"/>
      <zeroOrMore>
        <ref name="inlinew"/>
      </zeroOrMore>
    </element>
  </define>
  <define name="attlist.w" combine="interleave">
    <ref name="attrs"/>
  </define>
  <!-- ======== Inline Page Number, Footnote and Annotation Reference ======== -->
  <!--
    MM: 2004-07-30 Revised description of page types for 'page' attribute on 
    element pagenum.  Dropped recommendation to use page number as id.
  -->
  <!--
    Use: pagenum contains one page number as it appears from the print
    document, usually inserted at the point within the file immediately
    preceding the first item of content on a new page.
  -->
  <define name="pagenum">
    <element name="pagenum">
      <ref name="attlist.pagenum"/>
      <text/>
    </element>
  </define>
  <!--
    Attuse: pagenum
    
    "page" allows three kinds of page numbering
    schemes to be identified:
    "front" (for roman-numeral pages at the start of a book), 
    "normal" (for pages identified by arabic numerals),
    or "special" (for all other kinds of pages)
    For multi-page continuous content,
    such as large <img> or <table>, put the sequence of <pagenum> on
    the page where that content starts.
  -->
  <define name="attlist.pagenum" combine="interleave">
    <ref name="attrsrqd"/>
    <optional>
      <attribute name="page" a:defaultValue="normal">
        <choice>
          <value>front</value>
          <value>normal</value>
          <value>special</value>
        </choice>
      </attribute>
    </optional>
  </define>
  <!--
    Use: noteref marks one or more characters that reference a footnote
    or endnote <note>. Contrast with <annoref>. <noteref> and <note>
    are independently skippable.
  -->
  <define name="noteref">
    <element name="noteref">
      <ref name="attlist.noteref"/>
      <text/>
    </element>
  </define>
  <!-- jpritchett@rfbd.org:  2006-07-07  Changed @idref type to %URI to clarify usage -->
  <!-- jpritchett@rfbd.org:  2006-07-07  Modified comments to clarify @idref usage -->
  <!-- jpritchett@rfbd.org:  2006-07-07  Corrected reference to RFC2046 in comment regarding @type -->
  <!--
    Attuse: noteref
    
    "idref" is a URI pointing to the target note, either within
    same document or in another document.  For example:
    <noteref idref='#yyy'> refers to <note id='yyy'> within same document.
    <noteref idref='foobar.xml#xxx'> refers to <note id='xxx'> in document foobar.xml
    
    "type" provides advisory content MIME type of
    the target, see [RFC2046].
  -->
  <define name="attlist.noteref" combine="interleave">
    <ref name="attrs"/>
    <attribute name="idref">
      <ref name="URI"/>
    </attribute>
    <optional>
      <attribute name="type">
        <ref name="ContentType"/>
      </attribute>
    </optional>
  </define>
  <!--
    Use: annoref marks a text segment that references an <annotation>.
    Each <annoref> is usually a word, phrase, or whole line that
    is part of the surrounding text (identified in the original
    print book by bolding, italics, etc.). It should not normally
    be allowed to be turned off in a DTB application.
  -->
  <define name="annoref">
    <element name="annoref">
      <ref name="attlist.annoref"/>
      <text/>
    </element>
  </define>
  <!-- jpritchett@rfbd.org:  2006-07-07  Changed @idref type to %URI to clarify usage -->
  <!-- jpritchett@rfbd.org:  2006-07-07  Modified comments to clarify @idref usage -->
  <!-- jpritchett@rfbd.org:  2006-07-07  Corrected reference to RFC2046 in comment regarding @type -->
  <!--
    Attuse: annoref
    
    "idref" is a URI pointing to the target annotation, either within
    same document or in another document.  For example:
    <annoref idref='#yyy'> refers to <annotation id='yyy'> within same document.
    <annoref idref='foobar.xml#xxx'> refers to <annotation id='xxx'> in document foobar.xml
    
    "type" provides advisory content MIME
    type of the targeted id, see [RFC2046].
  -->
  <define name="attlist.annoref" combine="interleave">
    <ref name="attrs"/>
    <attribute name="idref">
      <ref name="URI"/>
    </attribute>
    <optional>
      <attribute name="type">
        <ref name="ContentType"/>
      </attribute>
    </optional>
  </define>
  <!-- ============================ Inline Quotes ============================ -->
  <!--
    Use: q contains a short, inline quotation. Compare with
    <blockquote>, which marks a longer quotation set off from the
    surrounding text.
  -->
  <define name="q">
    <element name="q">
      <ref name="attlist.q"/>
      <zeroOrMore>
        <ref name="inline"/>
      </zeroOrMore>
    </element>
  </define>
  <!--
    Attuse: q
    
    "cite" may provide a URI reference.
  -->
  <define name="attlist.q" combine="interleave">
    <ref name="attrs"/>
    <optional>
      <attribute name="cite">
        <ref name="URI"/>
      </attribute>
    </optional>
  </define>
  <!-- =============================== Images ================================ -->
  <!--
    Image <img> comes from HTML. An <img> may be grouped
    using <imggroup>, with <caption>, and special
    usage instructions or description with <prodnote>. The <imggroup>
    element may contain one or more <img> and any associated
    <caption> and <prodnote>. Multiple <img> may share a single
    caption, or multiple <caption> may apply if several captions
    refer to a single <img>. Multiple <prodnote> may apply if
    different versions are needed for different media.
  -->
  <define name="Length">
    <data type="string" datatypeLibrary=""/>
  </define>
  <!-- measured in pixels, percent (nn%) -->
  <define name="MultiLength">
    <data type="string" datatypeLibrary=""/>
  </define>
  <!--
    measured in integer pixels "n", percent "nn%" of display width,
    "0*" indicating minimum appropriate width based on column
    content, or "nn*" the relative proportional width (".5*" is
    half the available width after any explicit widths have been
    consumed). The lengths are separated by commas or whitespace.
  -->
  <define name="Pixels">
    <data type="string" datatypeLibrary=""/>
  </define>
  <!--
    0 for no <table> border, positive integer for <table> border width
    in pixels.
  -->
  <!--
    Use: img marks a visual image. An <img> will always contain an alt and
    generally contain a longdesc, a pointer to a related <prodnote>. The
    <img> may be referenced by a <caption> or <prodnote>, using, for
    example, the form <caption imgref="#yyy">the Caption</caption> for
    the <img id="yyy">.
  -->
  <define name="img">
    <element name="img">
      <ref name="attlist.img"/>
      <empty/>
    </element>
  </define>
  <!--
    Attuse: img
    
    "src" specifies by URI the location of the image file.
    
    "alt" is used to supply a short description of the <img>.
    
    "longdesc" generally contains a pointer to a related
    <prodnote> that contains a detailed description of the <img>.
    
    The attributes "height" and "width" provide visual sizing
    information, measured in pixels.
  -->
  <define name="attlist.img" combine="interleave">
    <ref name="attrs"/>
    <attribute name="src">
      <ref name="URI"/>
    </attribute>
    <attribute name="alt">
      <ref name="Text"/>
    </attribute>
    <optional>
      <attribute name="longdesc">
        <ref name="URI"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="height">
        <ref name="Length"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="width">
        <ref name="Length"/>
      </attribute>
    </optional>
  </define>
  <!--
    Use: imggroup provides a container for one or more <img> and associated
    <caption>(s) and <prodnote>(s). A <prodnote> may contain a description
    of the image. The content model allows:
    
    1) multiple <img> if they share a caption, with the ids of
    each <img> in the <caption imgref="id1 id2 ...">,
    
    2) multiple <caption> if several captions refer to a single
    <img id="xxx"> where each caption has the same
    <caption imgref="xxx">,
    
    3) multiple <prodnote> if different versions are needed for different
    media (e.g., large print, braille, or print).  If several <prodnote>
    refer to a single <img id="xxx">, each prodnote has the same <prodnote
    imgref="xxx">.
  -->
  <define name="imggroup">
    <element name="imggroup">
      <ref name="attlist.imggroup"/>
      <oneOrMore>
        <choice>
          <ref name="prodnote"/>
          <ref name="img"/>
          <ref name="caption"/>
        </choice>
      </oneOrMore>
    </element>
  </define>
  <define name="attlist.imggroup" combine="interleave">
    <ref name="attrs"/>
  </define>
  <!-- HB: 2004-03-25 30: hr: element dropped horizontal rule as purely visual. -->
  <!-- ============================= Paragraphs ============================== -->
  <!-- Use: p contains a paragraph, which may contain subsidiary <list> or <dl>. -->
  <define name="p">
    <element name="p">
      <ref name="attlist.p"/>
      <zeroOrMore>
        <choice>
          <ref name="inline"/>
          <ref name="list"/>
          <ref name="dl"/>
        </choice>
      </zeroOrMore>
    </element>
  </define>
  <define name="attlist.p" combine="interleave">
    <ref name="attrs"/>
  </define>
  <!-- =========== Doctitle, Docauthor, Covertitle, and Headings  ============ -->
  <!--
    Use: doctitle marks the full title of the book, including any
    subtitles,  <frontmatter>. By convention <doctitle> should appear
    Contrast with covertitle.
  -->
  <define name="doctitle">
    <element name="doctitle">
      <ref name="attlist.doctitle"/>
      <zeroOrMore>
        <ref name="inline"/>
      </zeroOrMore>
    </element>
  </define>
  <define name="attlist.doctitle" combine="interleave">
    <ref name="attrs"/>
  </define>
  <!--
    Use: docauthor marks each author or editor of this work. Compare with
    <author>, used to mark the author of another work, within <blockquote>
    or <cite>.
  -->
  <define name="docauthor">
    <element name="docauthor">
      <ref name="attlist.docauthor"/>
      <zeroOrMore>
        <ref name="inline"/>
      </zeroOrMore>
    </element>
  </define>
  <define name="attlist.docauthor" combine="interleave">
    <ref name="attrs"/>
  </define>
  <!--
    Use: covertitle is the short title of a book, often found on the
    spine. It may be the same as the doctitle.
  -->
  <!-- HB: 2004-04-08 covertitle: element added -->
  <define name="covertitle">
    <element name="covertitle">
      <ref name="attlist.covertitle"/>
      <zeroOrMore>
        <ref name="inline"/>
      </zeroOrMore>
    </element>
  </define>
  <define name="attlist.covertitle" combine="interleave">
    <ref name="attrs"/>
  </define>
  <!--
    MM: 2004-09-15 Deleted element levelhd, replacing it with hd in content 
    model of level.
  -->
  <!-- Use: h1 contains the text of the heading for a <level1> structure. -->
  <define name="h1">
    <element name="h1">
      <ref name="attlist.h1"/>
      <zeroOrMore>
        <ref name="inline"/>
      </zeroOrMore>
    </element>
  </define>
  <define name="attlist.h1" combine="interleave">
    <ref name="attrs"/>
  </define>
  <!-- Use: h2 contains the text of the heading for a <level2> structure. -->
  <define name="h2">
    <element name="h2">
      <ref name="attlist.h2"/>
      <zeroOrMore>
        <ref name="inline"/>
      </zeroOrMore>
    </element>
  </define>
  <define name="attlist.h2" combine="interleave">
    <ref name="attrs"/>
  </define>
  <!-- Use: h3 contains the text of the heading for a <level3> structure. -->
  <define name="h3">
    <element name="h3">
      <ref name="attlist.h3"/>
      <zeroOrMore>
        <ref name="inline"/>
      </zeroOrMore>
    </element>
  </define>
  <define name="attlist.h3" combine="interleave">
    <ref name="attrs"/>
  </define>
  <!-- Use: h4 contains the text of the heading for a <level4> structure. -->
  <define name="h4">
    <element name="h4">
      <ref name="attlist.h4"/>
      <zeroOrMore>
        <ref name="inline"/>
      </zeroOrMore>
    </element>
  </define>
  <define name="attlist.h4" combine="interleave">
    <ref name="attrs"/>
  </define>
  <!-- Use: h5 contains the text of the heading for a <level5> structure. -->
  <define name="h5">
    <element name="h5">
      <ref name="attlist.h5"/>
      <zeroOrMore>
        <ref name="inline"/>
      </zeroOrMore>
    </element>
  </define>
  <define name="attlist.h5" combine="interleave">
    <ref name="attrs"/>
  </define>
  <!-- Use: h6 contains the text of the heading for a <level6> structure. -->
  <define name="h6">
    <element name="h6">
      <ref name="attlist.h6"/>
      <zeroOrMore>
        <ref name="inline"/>
      </zeroOrMore>
    </element>
  </define>
  <define name="attlist.h6" combine="interleave">
    <ref name="attrs"/>
  </define>
  <!-- HB: 2004-04-02 bridgehead: element added. -->
  <!--
    MM: 2004-09-15 bridgehead: changed content model to (%inline;)*, to match 
    hd, and h1-h6.
  -->
  <!--
    Use: bridgehead is a free-floating heading that is not associated with the
    hierarchical structure of a document. It may occur only subsidiary to one
    of the hierarchic elements. <hd> and <h1> ... <h6> are
    restricted to one occurrence per level or <level1> ... <level6>,
    respectively. <bridgehead> has no such restriction, but should be used
    only when it is clear that none of the structural headings is appropriate.
    See also <hd>.
  -->
  <define name="bridgehead">
    <element name="bridgehead">
      <ref name="attlist.bridgehead"/>
      <zeroOrMore>
        <ref name="inline"/>
      </zeroOrMore>
    </element>
  </define>
  <define name="attlist.bridgehead" combine="interleave">
    <ref name="attrs"/>
  </define>
  <!--
    Use: hd marks the text of a heading in <level>, <poem>, <list>, <linegroup>,
    or <sidebar>.
  -->
  <define name="hd">
    <element name="hd">
      <ref name="attlist.hd"/>
      <zeroOrMore>
        <ref name="inline"/>
      </zeroOrMore>
    </element>
  </define>
  <define name="attlist.hd" combine="interleave">
    <ref name="attrs"/>
  </define>
  <!-- ========================== Preformatted Text ========================== -->
  <!--
    HTML or XHTML preformatted text is omitted, as inappropriate for
    narrated material.
  -->
  <!-- ========================== Block-like Quotes ========================== -->
  <!--
    Use: blockquote indicates a block of quoted content that is set
    off from the surrounding text by paragraph breaks. Compare with
    <q>, which marks short, inline quotations.
  -->
  <!-- HB: 2004-03-25 36i: blockquote allow pagenum. -->
  <define name="blockquote">
    <element name="blockquote">
      <ref name="attlist.blockquote"/>
      <zeroOrMore>
        <choice>
          <ref name="pagenum"/>
          <ref name="block"/>
        </choice>
      </zeroOrMore>
    </element>
  </define>
  <!--
    Attuse: blockquote
    
    "cite" permits inclusion of the
    URI from which the <blockquote> came.
  -->
  <define name="attlist.blockquote" combine="interleave">
    <ref name="attrs"/>
    <optional>
      <attribute name="cite">
        <ref name="URI"/>
      </attribute>
    </optional>
  </define>
  <!-- ================== Definition List, and Other Lists =================== -->
  <!--
    Use: dl contains a definition list, usually consisting of pairs of
    terms <dt> and definitions <dd>. Any definition can contain another
    definition list.
  -->
  <define name="dl">
    <element name="dl">
      <ref name="attlist.dl"/>
      <oneOrMore>
        <choice>
          <ref name="dt"/>
          <ref name="dd"/>
          <ref name="pagenum"/>
        </choice>
      </oneOrMore>
    </element>
  </define>
  <define name="attlist.dl" combine="interleave">
    <ref name="attrs"/>
  </define>
  <!--
    Use: dt marks a term in a definition list <dl> for which a
    definition <dd> follows.
  -->
  <define name="dt">
    <element name="dt">
      <ref name="attlist.dt"/>
      <zeroOrMore>
        <ref name="inline"/>
      </zeroOrMore>
    </element>
  </define>
  <define name="attlist.dt" combine="interleave">
    <ref name="attrs"/>
  </define>
  <!--
    Use: dd marks a definition of the preceding term <dt> within a
    definition list <dl>. A definition without a preceding <dt> has
    no semantic interpretation, but is visually presented aligned
    with other <dd>.
  -->
  <define name="dd">
    <element name="dd">
      <ref name="attlist.dd"/>
      <zeroOrMore>
        <ref name="flow"/>
      </zeroOrMore>
    </element>
  </define>
  <define name="attlist.dd" combine="interleave">
    <ref name="attrs"/>
  </define>
  <!--
    Use: list contains some form of list, ordered, unordered, or preformatted.
    The list may have intermixed heading <hd> (generally only one,
    possibly with <prodnote>) and an intermixture of list items <li>
    and <pagenum>. If bullets and outline enumerations are part of
    the preformatted print content, they are expected to prefix those list
    items in content, rather than be implicitly generated. Note: XHTML
    has explicitly distinguished list element types: ol for ordered,
    and ul for unordered, but not pl for preformatted.
  -->
  <define name="list">
    <element name="list">
      <ref name="attlist.list"/>
      <oneOrMore>
        <choice>
          <ref name="hd"/>
          <ref name="prodnote"/>
          <ref name="li"/>
          <ref name="pagenum"/>
        </choice>
      </oneOrMore>
    </element>
  </define>
  <!--
    HB: 2004-03-25 36d: list: added start attribute to indicate initial
    ordinal of a numbered list.
  -->
  <!--
    HB: 2004-03-31 list: changed enum from 'U' to 'A' for uppercase, and
    "X" to 'I' for uppercase Roman.
  -->
  <!--
    HB: 2004-03-31 list: changed enum value choices from "U" to "A" for
    uppercase, and "X" to "I" for uppercase Roman for compatibility
    with xhtml.
  -->
  <!-- HB: 2004-04-02 list: expanded discussion on enum attribute. -->
  <!--
    HB: 2004-04-27 list: added type "pl" to indicate that the list is 
    preformatted so no bullets or enumerations should be added.
  -->
  <!--
    Attuse: list
    
    "type" indicates whether the list items
    <li> are ordered 'ol' or 
             unordered 'ul' or
             preformatted 'pl'.
    
    "depth" indicates nesting depth of lists within list items <li>
    of ancestor lists, starting at 1.
    
    "enum" indicates the kind of enumeration:
        '1'=integer,
        'a'=lowercase,
        'A'=uppercase,
        'i'=lowercase Roman, or
        'I'=uppercase Roman.
    
    "start" value indicates the ordered list integer ordinal, impllcitly 1,
    to denote the first ordered list item. Its value is determined for the
    indicated enum type. A start value is useful when there is an injection
    of a different element type, such as <pageno>.
  -->
  <!--
    HB: 2004-04-22 list: removed bullet attribute, It is up to a style-sheet to
    make any needed visual distinction for nested unordered lists, or if the
    list type is "pl" preformatted the bullet form may be there.
  -->
  <define name="attlist.list" combine="interleave">
    <ref name="attrs"/>
    <attribute name="type">
      <choice>
        <value>ol</value>
        <value>ul</value>
        <value>pl</value>
      </choice>
    </attribute>
    <optional>
      <attribute name="depth"/>
    </optional>
    <optional>
      <attribute name="enum">
        <choice>
          <value>1</value>
          <value>a</value>
          <value>A</value>
          <value>i</value>
          <value>I</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="start"/>
    </optional>
  </define>
  <!--
    Use: li marks each list item in a <list>. <li> content may be
    either inline or block and may include other nested
    lists. Alternatively it may contain a sequence of list item
    components, <lic>, that identify regularly occurring content,
    such as the heading and page number of each entry in a
    table of contents.
  -->
  <define name="li">
    <element name="li">
      <ref name="attlist.li"/>
      <zeroOrMore>
        <choice>
          <ref name="flow"/>
          <ref name="lic"/>
        </choice>
      </zeroOrMore>
    </element>
  </define>
  <define name="attlist.li" combine="interleave">
    <ref name="attrs"/>
  </define>
  <!--
    Use: lic ("list item component") allows ordered substructure
    within a list item <li>. Used when a list item is made up of
    two or more components, as in a table of contents entry.
    The same number of <lic> should occur in each <li>. If not,
    correspondence of <lic> in different <li> is in order of
    occurrence for the current writing direction of the <li>.
  -->
  <define name="lic">
    <element name="lic">
      <ref name="attlist.lic"/>
      <zeroOrMore>
        <ref name="inline"/>
      </zeroOrMore>
    </element>
  </define>
  <!--
    Attuse: lic
    
    class attribute may be used to identify the particular
    component of a list item <li>. For example, in a table of contents
    class values might include "section", and "pagenumber".
  -->
  <define name="attlist.lic" combine="interleave">
    <ref name="attrs"/>
  </define>
  <!-- =============================== Tables ================================ -->
  <!--
    The XHTML <table> model is used, including the presentational
    attributes that have little meaning in Digital Talking Books,
    but may be useful for concurrent display in different media.
    That model is derived from IETF HTML table standard, see [RFC1942].
    
    Note: The XHTML <table> model has been enhanced from HTML to allow
    a simple <table> of one or more rows <tr>.
  -->
  <define name="Scope">
    <choice>
      <value>row</value>
      <value>col</value>
      <value>rowgroup</value>
      <value>colgroup</value>
    </choice>
  </define>
  <!--
    Scope specifies a set of data cells for which the <th> provides
    header information.
  -->
  <define name="TFrame">
    <choice>
      <value>void</value>
      <value>above</value>
      <value>below</value>
      <value>hsides</value>
      <value>lhs</value>
      <value>rhs</value>
      <value>vsides</value>
      <value>box</value>
      <value>border</value>
    </choice>
  </define>
  <!-- TFrame identifies the sides that are visually framed. -->
  <define name="TRules">
    <choice>
      <value>none</value>
      <value>groups</value>
      <value>rows</value>
      <value>cols</value>
      <value>all</value>
    </choice>
  </define>
  <!--
    %TRules identifies where visual rulings appear.
    If no Trules is present then assume:
    'none' if border is absent or border='0' otherwise 'all'.
  -->
  <define name="cellhalign">
    <optional>
      <attribute name="align">
        <choice>
          <value>left</value>
          <value>center</value>
          <value>right</value>
          <value>justify</value>
          <value>char</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="char">
        <ref name="Character"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="charoff">
        <ref name="Length"/>
      </attribute>
    </optional>
  </define>
  <!--
    % cellhalign
    cellhalign sets horizontal alignment of content in
    a table cell.
    
    char indicates a character expected in each table
    cell of a column that text should align on. The default is
    the decimal point for the current language.
    
    charoff sets the alignment offset of the first character
    to align on, as specified with char.
    
    Inheritance order for horizontal alignment is <th>|<td>,
    <tr>, <thead>|<tfoot>|<tbody>, <col>, <colgroup>, default. The
    default value is from the user agent, and may be affected
    by user preference. The recommended default alignment for
    <th> is center, and for <td> is left.
  -->
  <define name="cellvalign">
    <optional>
      <attribute name="valign">
        <choice>
          <value>top</value>
          <value>middle</value>
          <value>bottom</value>
          <value>baseline</value>
        </choice>
      </attribute>
    </optional>
  </define>
  <!--
    % cellvalign
    valign sets vertical alignment of content in a table cell.
    
    Inheritance order for vertical alignment is <th>|<td>, <col>,
    <colgroup>, <tr>, <thead>|<tfoot>|<tbody>, default. The
    default value is from the user agent, and may be affected
    by user preference. The recommended default is middle.
  -->
  <!--
    Use: table contains cells of tabular data arranged in rows and
    columns. A <table> may have a <caption>. It may have descriptions of
    the columns in <col>s or groupings of several <col> in <colgroup>.
    A simple <table> may be made up of just rows <tr>. A long table
    crossing several pages of the print book should have separate
    <pagenum> values for each of the pages containing that <table>
    indicated on the page where it starts. Note the logical order of
    optional <thead>, optional <tfoot>, then one or more of either
    <tbody> or just rows <tr>. This order accommodates simple or large,
    complex tables. The <thead> and <tfoot> information usually helps
    identify content of the <tbody> rows, For a multiple-page print
    <table> the <thead> and <tfoot> are repeated on each page, but
    not redundantly tagged.
  -->
  <define name="table">
    <element name="table">
      <ref name="attlist.table"/>
      <optional>
        <ref name="caption"/>
      </optional>
      <choice>
        <zeroOrMore>
          <ref name="col"/>
        </zeroOrMore>
        <zeroOrMore>
          <ref name="colgroup"/>
        </zeroOrMore>
      </choice>
      <optional>
        <ref name="thead"/>
      </optional>
      <optional>
        <ref name="tfoot"/>
      </optional>
      <choice>
        <oneOrMore>
          <ref name="tbody"/>
        </oneOrMore>
        <oneOrMore>
          <ref name="tr"/>
        </oneOrMore>
      </choice>
    </element>
  </define>
  <!--
    Attuse: table
    
    "summary" value provides a textual summary.
    
    The attributes: "width", "border", "frame", "rules", "cellspacing",
    and "cellpadding" provide visual presentation guidance. See their
    explanation in the comment following those parameter entity
    declarations.
  -->
  <define name="attlist.table" combine="interleave">
    <ref name="attrs"/>
    <optional>
      <attribute name="summary">
        <ref name="Text"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="width">
        <ref name="Length"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="border">
        <ref name="Pixels"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="frame">
        <ref name="TFrame"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="rules">
        <ref name="TRules"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="cellspacing">
        <ref name="Length"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="cellpadding">
        <ref name="Length"/>
      </attribute>
    </optional>
  </define>
  <!-- HB: 2004-03-25 36f: caption: removed use for <img>. -->
  <!-- MM: 2004-09-15: caption: changed content model to %flow;. -->
  <!--
    Use: caption describes a <table>, or <imggroup>. If used with
    <table> it must follow immediately after the <table> start tag. If used
    with <imggroup> it is not so constrained.
  -->
  <define name="caption">
    <element name="caption">
      <ref name="attlist.caption"/>
      <zeroOrMore>
        <ref name="flow"/>
      </zeroOrMore>
    </element>
  </define>
  <!--
    Attuse: caption
    
    "imgref" value (or space-separated
    id values) identifies the id values of the <img>(s) to which the
    caption applies. Any internal id reference is preceded by '#id'.
    Note: imgref is an extension for dtbook.
  -->
  <define name="attlist.caption" combine="interleave">
    <ref name="attrs"/>
    <optional>
      <attribute name="imgref">
        <data type="IDREFS"/>
      </attribute>
    </optional>
  </define>
  <!--
    Use: thead marks header information in a <table>, consisting of
    one or more rows <tr> of <th> cells. Use <thead> to duplicate
    headers when breaking table across page boundaries, or for static
    headers when <tbody> sections are rendered in scrolling panel.
  -->
  <define name="thead">
    <element name="thead">
      <ref name="attlist.thead"/>
      <oneOrMore>
        <ref name="tr"/>
      </oneOrMore>
    </element>
  </define>
  <define name="attlist.thead" combine="interleave">
    <ref name="attrs"/>
    <ref name="cellhalign"/>
    <ref name="cellvalign"/>
  </define>
  <!--
    Use: tfoot marks footer information in a <table>, consisting of
    one or more rows <tr>, usually of <th> cells. Use <tfoot> to
    duplicate footers when breaking table across page boundaries,
    or for static footers when <tbody> sections are rendered in
    scrolling panel.
  -->
  <define name="tfoot">
    <element name="tfoot">
      <ref name="attlist.tfoot"/>
      <oneOrMore>
        <ref name="tr"/>
      </oneOrMore>
    </element>
  </define>
  <define name="attlist.tfoot" combine="interleave">
    <ref name="attrs"/>
    <ref name="cellhalign"/>
    <ref name="cellvalign"/>
  </define>
  <!--
    Use: tbody marks a group of rows in the main body of a <table>. If
    the <table> is divided into several sections, each consisting of a
    number of rows, each section would be separately tagged with <tbody>.
    The same <thead> and <tfoot> apply to every <tbody> section.
    Use multiple <tbody> sections when rules are needed between groups
    of table rows.
  -->
  <define name="tbody">
    <element name="tbody">
      <ref name="attlist.tbody"/>
      <oneOrMore>
        <ref name="tr"/>
      </oneOrMore>
    </element>
  </define>
  <define name="attlist.tbody" combine="interleave">
    <ref name="attrs"/>
    <ref name="cellhalign"/>
    <ref name="cellvalign"/>
  </define>
  <!--
    Use: colgroup groups adjacent columns <col> that are semantically
    related.
  -->
  <define name="colgroup">
    <element name="colgroup">
      <ref name="attlist.colgroup"/>
      <zeroOrMore>
        <ref name="col"/>
      </zeroOrMore>
    </element>
  </define>
  <!--
    Attuse: colgroup
    
    "span" causes the attributes of one
    col element to apply to more than one column, extending in the
    writing direction for the language. Span is ignored if
    any <col> are present.
    
    "width" specifies the width of the columns, e.g.
    
        width='64'        width in screen pixels
        width='0.5*'      relative width of 0.5
    
    "width" may contain a space- or comma-separated list of widths
    for each <col>, or percentages if values end in '%', or relative
    'nn*' to indicate a fractional portion of the remaining
    widths after more explicit forms have been specified for other
    columns in the colgroup (presumably the sum encompasses all
    the columns). '0*' indicates minimal acceptable width based
    on column content.
    
    The <col> in a <colgroup> may inherit attribute values
    from it, or the closest enclosing ancestor element:
    <thead>|<tfoot>|<tbody>. If none, then the values are up to the
    user agent, possibly by user preference.
  -->
  <define name="attlist.colgroup" combine="interleave">
    <ref name="attrs"/>
    <optional>
      <attribute name="span" a:defaultValue="1">
        <data type="NMTOKEN"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="width">
        <ref name="MultiLength"/>
      </attribute>
    </optional>
    <ref name="cellhalign"/>
    <ref name="cellvalign"/>
  </define>
  <!--
    Use: col elements define the alignment properties for cells in
    one or more columns.
  -->
  <define name="col">
    <element name="col">
      <ref name="attlist.col"/>
      <empty/>
    </element>
  </define>
  <!--
    Attuse: col
    "span" indicates how many columns the <col>
    extends, in the writing direction of the <table>. The
    attribute values apply to <th> and <td> that start in the
    column, even if they extend into the next column(s), by
    span value more than 1, and that next <col> may have different
    attribute values.
    
    "width" may contain a space- or comma-separated list of widths
    for each <col> of the span, or percentages if values end in '%',
    or relative 'nn*' to indicate a fractional portion of the remaining
    widths after more explicit forms have been specified for other
    columns in the span (presumably the sum encompasses all
    the columns of this span, and of other <colgroup>s). '0*' indicates
    minimal acceptable width based on individual <col> content.
    
    <col> may inherit attribute values from the most immediate
    enclosing ancestor element: <colgroup>, <thead>|<tbody>|<tfoot>.
    If none, it is up to the user agent, possibly by user preference.
  -->
  <define name="attlist.col" combine="interleave">
    <ref name="attrs"/>
    <optional>
      <attribute name="span" a:defaultValue="1">
        <data type="NMTOKEN"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="width">
        <ref name="MultiLength"/>
      </attribute>
    </optional>
    <ref name="cellhalign"/>
    <ref name="cellvalign"/>
  </define>
  <!-- Use: tr marks one row of a <table> containing <th> or <td> cells. -->
  <define name="tr">
    <element name="tr">
      <ref name="attlist.tr"/>
      <oneOrMore>
        <choice>
          <ref name="th"/>
          <ref name="td"/>
        </choice>
      </oneOrMore>
    </element>
  </define>
  <!--
    Attuse: tr
    
    %cellvalign; values provide default vertical alignment
    values for <th> and <td> in the row, overriding any from
        <thead>|<tbody>|<tfoot>, <col>, <colgroup>
    If none, it is up to the user agent, possibly by user preference.
    
    %cellhalign; values provide default horizontal alignment from
        <thead>|<tbody>|<tfoot>
    If none, it is up to the user agent, possibly by user preference.
    
  -->
  <define name="attlist.tr" combine="interleave">
    <ref name="attrs"/>
    <ref name="cellhalign"/>
    <ref name="cellvalign"/>
  </define>
  <!-- Use: th indicates a table cell containing header information. -->
  <define name="th">
    <element name="th">
      <ref name="attlist.th"/>
      <zeroOrMore>
        <ref name="flownopagenum"/>
      </zeroOrMore>
    </element>
  </define>
  <!--
    Attuse: th
    
    The uses of attributes other than %attrs; %cellvalign; and %cellhalign;
    are shown below. See [HTML401STRICT] for details and examples.
    
    "abbr" provides an abbreviated name for a <th> cell that can be used
    when referring to that <th> cell. Its default value is the cell content.
    
    "axis" is used to place cells into conceptual categories in order to
    provide improved access to information.
    
    "headers" provides the id value(s), used with <td> cells, to reference
    one or more cells with <th id="xxx"> that contain headings that
    collectively describe or qualify the content of the cell, for example
    <td headers="id1 id2">.
    
    "scope" identifies one of
        (row | rowgroup | column | colgroup)
    to which the header information applies.
    
    "rowspan" indicates the total number of rows that the cell extends, by
    default 1. All spanned cells share these attributes.
    
    "colspan" indicates the total number of columns the cell extends,
    by default 1, in the writing direction of the table. All spanned
    cells share these attributes.
  -->
  <define name="attlist.th" combine="interleave">
    <ref name="attrs"/>
    <optional>
      <attribute name="abbr">
        <ref name="Text"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="axis"/>
    </optional>
    <optional>
      <attribute name="headers">
        <data type="IDREFS"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="scope">
        <ref name="Scope"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="rowspan" a:defaultValue="1">
        <data type="NMTOKEN"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="colspan" a:defaultValue="1">
        <data type="NMTOKEN"/>
      </attribute>
    </optional>
    <ref name="cellhalign"/>
    <ref name="cellvalign"/>
  </define>
  <!-- Use: td indicates a table cell containing data. -->
  <define name="td">
    <element name="td">
      <ref name="attlist.td"/>
      <zeroOrMore>
        <ref name="flownopagenum"/>
      </zeroOrMore>
    </element>
  </define>
  <!--
    Attuse: td
    
    The uses of attributes other than %attrs; %cellhalign; and %cellvalign;
    are shown below.  See [HTML401STRICT] for details and examples.
    
    "abbr" provides an abbreviated name for a <th> cell that can be used
    when referring to that <th> cell. Its default value is the cell content.
    
    "axis" is used to place cells into conceptual categories in order to
    provide improved access to information.
    
    "headers" provides the id value(s), used with <td> cells, to reference
    one or more cells with <th id="xxx"> that contain headings that
    collectively describe or qualify the content of the cell, for example
    <td headers="id1 id2">.
    
    "scope" identifies one of
        (row | rowgroup | column | colgroup)
    to which the header information applies.
    
    "rowspan" indicates the total number of rows that the cell extends, by
    default 1. All spanned cells share these attributes.
    
    "colspan" indicates the total number of columns the cell extends,
    by default 1, in the writing direction of the table. All spanned
    cells share these attributes.
  -->
  <define name="attlist.td" combine="interleave">
    <ref name="attrs"/>
    <optional>
      <attribute name="abbr">
        <ref name="Text"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="axis"/>
    </optional>
    <optional>
      <attribute name="headers">
        <data type="IDREFS"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="scope">
        <ref name="Scope"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="rowspan" a:defaultValue="1">
        <data type="NMTOKEN"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="colspan" a:defaultValue="1">
        <data type="NMTOKEN"/>
      </attribute>
    </optional>
    <ref name="cellhalign"/>
    <ref name="cellvalign"/>
  </define>
  <start>
    <choice>
      <ref name="dtbook"/>
    </choice>
  </start>
</grammar>
<!-- End dtbook-2005-2.dtd -->
