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

<!ENTITY % Character "CDATA" >
<!-- a single character from [ISO10646]. -->

<!ENTITY % Charset "CDATA" >
<!-- a character encoding, as per [RFC2045]. -->

<!ENTITY % ContentType "CDATA" >
<!-- media type, as per [RFC2046]. -->

<!--HB: 2004-03-25 Changed reference from RFC1766 to its revison, RFC 3066. -->

<!ENTITY % LanguageCode "NMTOKEN" >
<!-- a language code, per [RFC3066]. -->

<!ENTITY % Number "CDATA" >
<!-- one or more digits. -->

<!ENTITY % LinkTypes "CDATA" >
<!-- space-separated list of link types. -->

<!ENTITY % MediaDesc "CDATA" >
<!-- single or comma-separated list of media descriptors;
possible values include BRAILLE, PRINT, PROJECTION, SPEECH, ALL,
or the default SCREEN. -->

<!ENTITY % Text "CDATA" >
<!-- used for titles etc. -->

<!ENTITY % URI "CDATA" >
<!-- a Uniform Resource Identifier, see [RFC2396]. -->

<!--================== dtbook External Module Inclusion ===================-->

<!ENTITY % externalblock "" >
<!-- placeholder for block element expansion from external modules;
if changed, string in external subset begins " | blockelementname". -->

<!ENTITY % externalinline "" >
<!-- 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 -->

<!ENTITY % externalFlow "" >
<!-- 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 -->

<!ENTITY % externalNamespaces "" >
<!-- 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;-->

<!ENTITY % dtbookblock
"author | prodnote | sidebar | note | imggroup |
annotation %externalblock; %externalFlow;" >
<!-- block elements unique to dtbook. -->

<!ENTITY % dtbookblocknoimggroup
"author | prodnote | sidebar | note |
annotation %externalblock;" >
<!-- block elements unique to dtbook without imggroup. -->

<!--HB: 2004-03-25 36f: caption: removed from % inlineinblock. -->

<!ENTITY % inlineinblock
"a | cite | samp | kbd | pagenum" >
<!-- 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;-->

<!ENTITY % block
"p | list | dl | div | blockquote | img | imggroup |
poem | linegroup | byline | dateline | epigraph |
table | address | line | %dtbookblocknoimggroup; %externalFlow;" >

<!-- 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.-->
<!ENTITY % blocknoimggroup
"p | list | dl | div | blockquote |
poem | linegroup | byline | dateline | epigraph |
table | address | line | %dtbookblocknoimggroup;" >

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

<!ENTITY % docblockorinline
"doctitle | docauthor | covertitle | bridgehead |
%block; | %inlineinblock;">
<!-- 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; -->

<!ENTITY % coreattrs
"id ID #IMPLIED
class CDATA #IMPLIED
title %Text; #IMPLIED
xml:space (default|preserve) #IMPLIED
%externalNamespaces;"
>

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

<!ENTITY % i18n
"xml:lang %LanguageCode; #IMPLIED
dir (ltr|rtl) #IMPLIED" >

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

<!ENTITY % showin
"showin (xxx|xxp|xlx|xlp|bxx|bxp|blx|blp) #IMPLIED" >
<!-- 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.
-->

<!ENTITY % attrs
"%coreattrs;
%i18n;
smilref CDATA #IMPLIED
%showin;" >

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

<!ENTITY % attrsrqd
"id ID #REQUIRED
class CDATA #IMPLIED
title %Text; #IMPLIED
xml:space (default|preserve) #IMPLIED
smilref CDATA #IMPLIED
%i18n;
%showin;
%externalNamespaces; " >
<!-- %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 ==========================-->

<!ENTITY % dtbookcontent
"head, book" >
<!-- 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>.
-->

<!ELEMENT dtbook (%dtbookcontent;) >

<!--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; -->
<!ATTLIST dtbook
version CDATA #FIXED '2005-2'
xmlns %URI; #FIXED 'http://www.daisy.org/z3986/2005/dtbook/'
%i18n;
%externalNamespaces;
>

<!--======================== Document Head Metadata =======================-->

<!--HB: 2004-03-25 36: % headmisc: removed style. -->

<!ENTITY % headmisc
"meta | link " >
<!-- 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 -->

<!ELEMENT head (%headmisc;)* >

<!--Attuse: head
"profile" gives one or more
whitespace-separated profile URI targets that may provide
additional information about the current document.
-->

<!ATTLIST head
%i18n;
profile %URI; #IMPLIED
>

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

<!ELEMENT link EMPTY >

<!--Attuse: link

Each attribute use indicated by a parameter entity is
defined in the comment following its definition.
-->

<!ATTLIST link
%attrs;
charset %Charset; #IMPLIED
href %URI; #IMPLIED
hreflang %LanguageCode; #IMPLIED
type %ContentType; #IMPLIED
rel %LinkTypes; #IMPLIED
rev %LinkTypes; #IMPLIED
media %MediaDesc; #IMPLIED
>

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

<!ELEMENT meta EMPTY >

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

<!ATTLIST meta
%i18n;
http-equiv NMTOKEN #IMPLIED
name NMTOKEN #IMPLIED
content CDATA #REQUIRED
scheme CDATA #IMPLIED
>

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

<!ELEMENT book (frontmatter?, bodymatter?, rearmatter?) >

<!ATTLIST book
%attrs;
>

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

<!ELEMENT frontmatter (doctitle, covertitle?, docauthor*, (level | level1)*) >

<!ATTLIST frontmatter
%attrs;
>

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

<!ELEMENT bodymatter (level | level1)+ >

<!ATTLIST bodymatter
%attrs;
>

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

<!ELEMENT rearmatter (level | level1)+ >

<!ATTLIST rearmatter
%attrs;
>

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

<!ELEMENT level ((hd, (%docblockorinline; | level)+) |
((%docblockorinline; | level)+, (hd, (%docblockorinline; | level)+)?))
>

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

<!ATTLIST level
%attrs;
depth CDATA #IMPLIED
>

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

<!ELEMENT level1 ((h1, (%docblockorinline; | level2)+) |
((%docblockorinline; | level2)+, (h1, (%docblockorinline; | level2)+)?))
>

<!ATTLIST level1
%attrs;
>

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

<!ELEMENT level2 ((h2, (%docblockorinline; | level3)+) |
((%docblockorinline; | level3)+, (h2, (%docblockorinline; | level3)+)?))
>

<!ATTLIST level2
%attrs;
>

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

<!ELEMENT level3 ((h3, (%docblockorinline; | level4)+) |
((%docblockorinline; | level4)+, (h3, (%docblockorinline; | level4)+)?))
>

<!ATTLIST level3
%attrs;
>

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

<!ELEMENT level4 ((h4, (%docblockorinline; | level5)+) |
((%docblockorinline; | level5)+, (h4, (%docblockorinline; | level5)+)?))
>

<!ATTLIST level4
%attrs;
>

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

<!ELEMENT level5 ((h5, (%docblockorinline; | level6)+) |
((%docblockorinline; | level6)+, (h5, (%docblockorinline; | level6)+)?))
>

<!ATTLIST level5
%attrs;
>

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

<!ELEMENT level6 ((h6, (%docblockorinline;)+) |
((%docblockorinline;)+, (h6, (%docblockorinline;)+)?))
>

<!ATTLIST level6
%attrs;
>

<!--============================= Text Markup =============================-->

<!ENTITY % phrase
"em | strong | dfn | code | samp | kbd | cite | abbr | acronym" >
<!-- inline text elements -->

<!--HB: 2004-04-23 % special: eliminated linenum from % special,
linenum only appears within line. -->

<!ENTITY % special
"a | img | imggroup | br | q | sub | sup | span | bdo " >
<!-- special inline text elements -->

<!--HB: 2004-04-23 % specialnoa: eliminated linenum from % specialnoa,
linenum only appears within line. -->

<!ENTITY % specialnoa
"img | imggroup | br | q | sub | sup | span | bdo " >
<!-- specialnoa inline text elements for anchor <a> -->

<!--=========================== Inline Entities ===========================-->

<!--jpritchett@rfbd.org: 2006-08-11. Add %externalFlow to %dtbookinline; -->

<!ENTITY % dtbookinline
"sent | w | pagenum | prodnote | annoref | noteref %externalinline; %externalFlow;" >
<!-- dtbook added inline text elements -->

<!ENTITY % inline
"#PCDATA | %phrase; | %special; | %dtbookinline;" >
<!-- inline text elements -->

<!--HB: 2004-03-25 36h: to % inlinenoa add %dtbookinline;. -->
<!--MM: 2004-07-23 Remove %externalinline; since already present
via %dtbookinline;.-->

<!ENTITY % inlinenoa
"#PCDATA | %phrase; | %specialnoa; | %dtbookinline;" >
<!-- inlinenoa excludes nested <a> -->

<!--jpritchett@rfbd.org: 2006-07-07. Added %externalFlow %inlines;, %inlinew; -->

<!ENTITY % inlines
"#PCDATA | %phrase; | %special; | pagenum | w | prodnote | annoref |
noteref %externalinline; %externalFlow;" >
<!-- inlines excludes direct nesting of sentences <sent> -->

<!ENTITY % inlinew
"#PCDATA | %phrase; | %special; %externalinline; %externalFlow;" >
<!-- inlinew for word <w> excludes any of the %dtbookinline; -->

<!ENTITY % inlinenopagenum
"#PCDATA | %phrase; | %special; |
sent | w | annoref | noteref %externalinline;" >
<!-- inlinenopagenum excludes direct <pagenum> in <table> <th> and <td>. -->

<!ENTITY % inlinenoprodnote
"#PCDATA | %phrase; | %special; |
sent | w | pagenum | annoref | noteref %externalinline;" >
<!-- 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; -->

<!ENTITY % flow
"%inlinenoprodnote; | %blocknoimggroup; %externalFlow;" >
<!-- flow elements add inlinenoprodnote to block -->

<!ENTITY % flownopagenum
"%inlinenopagenum; | %blocknoimggroup; %externalFlow; " >
<!-- 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.
-->

<!ELEMENT br EMPTY >

<!--Attuse: br

The %coreattrs; only appear, as there is no content
to which the more general %attrs; apply.
-->

<!ATTLIST br
%coreattrs;
>

<!--Use: line marks a single logical line of text. Often used in
conjunction with <linenum> in documents with numbered lines.
-->

<!ELEMENT line (%inline; | linenum)* >

<!ATTLIST line
%attrs;
>

<!--HB: 2004-03-30 poem: added linenum use. -->

<!--Use: linenum contains a line number, for example in legal text, or <poem>.
-->

<!ELEMENT linenum (#PCDATA) >

<!ATTLIST linenum
%attrs;
>

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

<!ELEMENT address (%inline; | line)* >

<!ATTLIST address
%attrs;
>

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

<!ELEMENT div (%docblockorinline;)+ >

<!--Attuse: div

"class" value can identify the
actual name (e.g., part, chapter, letter) of the structure it marks.
-->

<!ATTLIST div
%attrs;
>

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

<!ELEMENT title (#PCDATA) >

<!ATTLIST title
%i18n;
%coreattrs;
>

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

<!ELEMENT author (%inline;)* >

<!ATTLIST author
%attrs;
>

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

<!ELEMENT prodnote (%flow;)* >

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

<!ATTLIST prodnote
%attrs;
imgref IDREFS #IMPLIED
render (required | optional) #REQUIRED
>

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

<!ELEMENT sidebar (%flow; | hd)* >

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

<!ATTLIST sidebar
%attrs;
render (required | optional) #REQUIRED
>

<!--Use: note marks a footnote, endnote, etc. Any local reference to
<note id="yyy"> is by <noteref idref="#yyy">.
-->

<!ELEMENT note (%block; | %inlineinblock;)+ >

<!ATTLIST note
%attrsrqd;
>

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

<!ELEMENT annotation (%block; | %inlineinblock;)+ >

<!ATTLIST annotation
%attrsrqd;
>

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

<!ELEMENT epigraph (%flow;)* >

<!ATTLIST epigraph
%attrs;
>

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

<!ELEMENT byline (%inline;)* >

<!ATTLIST byline
%attrs;
>

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

<!ELEMENT dateline (%inline;)* >

<!ATTLIST dateline
%attrs;
>

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

<!ELEMENT linegroup
(hd | dateline | epigraph | byline | linegroup | line | pagenum | prodnote |
noteref | annoref | note | annotation | p | blockquote | img | imggroup)* >

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

<!ATTLIST linegroup
%attrs;
>

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

<!ELEMENT poem (title | author | hd | dateline | epigraph | byline |
linegroup | line | pagenum | img | imggroup | sidebar)* >

<!ATTLIST poem
%attrs;
>

<!--========================= The Anchor Element ==========================-->

<!--Use: a contains an anchor, which is used to reference another
location, within the same or another <dtbook>.
-->

<!ELEMENT a (%inlinenoa;)* >

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

<!ATTLIST a
%attrs;
type %ContentType; #IMPLIED
href %URI; #IMPLIED
hreflang %LanguageCode; #IMPLIED
rel %LinkTypes; #IMPLIED
rev %LinkTypes; #IMPLIED
accesskey %Character; #IMPLIED
tabindex %Number; #IMPLIED
external (true | false) 'false'
>

<!--=========================== Inline Elements ===========================-->

<!--Use: em indicates emphasis. Usually <em> is rendered in italics.
Compare with <strong>.
-->

<!ELEMENT em (%inline;)* >

<!ATTLIST em
%attrs;
>

<!--Use: strong marks stronger emphasis than <em>. Visually <strong> is
usually rendered bold.
-->

<!ELEMENT strong (%inline;)* >

<!ATTLIST strong
%attrs;
>

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

<!ELEMENT dfn (%inline;)* >

<!ATTLIST dfn
%attrs;
>

<!--Use: kbd designates information that the reader is to input
directly into a computer using the keyboard.
-->

<!ELEMENT kbd (%inline;)* >

<!ATTLIST kbd
%attrs;
>

<!--Use: code designates a fragment of computer code.
-->

<!ELEMENT code (%inline;)* >

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

<!ATTLIST code
id ID #IMPLIED
class CDATA #IMPLIED
title %Text; #IMPLIED
xml:space (default|preserve) 'preserve'
%externalNamespaces;
%i18n;
smilref CDATA #IMPLIED
%showin;
>

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

<!ELEMENT samp (%inline;)* >

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

<!ATTLIST samp
id ID #IMPLIED
class CDATA #IMPLIED
title %Text; #IMPLIED
xml:space (default|preserve) 'preserve'
%externalNamespaces;
%i18n;
smilref CDATA #IMPLIED
%showin;
>

<!--Use: cite marks a reference (or citation) to another document.
-->

<!--HB: 2004-03-25 35a: cite: allow title and author. -->

<!ELEMENT cite (%inline; | title | author)* >

<!ATTLIST cite
%attrs;
>

<!--Use: abbr designates an abbreviation, a shortened form of a
word. For examples: Mr., approx., lbs., rec'd.
Contrast with <acronym>.
-->

<!ELEMENT abbr (%inline;)* >

<!--Attuse: abbr

"title" value may expand that abbreviation.
-->

<!ATTLIST abbr
%attrs;
>

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

<!ELEMENT acronym (%inline;)* >

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

<!ATTLIST acronym
%attrs;
pronounce (yes | no) #IMPLIED
>

<!--Use: sub indicates a subscript character (printed below a
character's normal baseline). Can be used recursively and/or
intermixed with <sup>.
-->

<!ELEMENT sub (%inline;)* >

<!ATTLIST sub
%attrs;
>

<!--Use: sup marks a superscript character (printed above a
character's normal baseline). Can be used recursively and/or
intermixed with <sub>.
-->

<!ELEMENT sup (%inline;)* >

<!ATTLIST sup
%attrs;
>

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

<!ELEMENT span (%inline;)* >

<!ATTLIST span
%attrs;
>

<!--Use: bdo is used in special cases where the automatic actions
of the bi-directional algorithm would result in incorrect display.
-->

<!ELEMENT bdo (%inline;)* >

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

<!ATTLIST bdo
%coreattrs;
xml:lang %LanguageCode; #IMPLIED
dir (ltr | rtl) #REQUIRED
>

<!--=================== dtbook Inline Sentence and Word ===================-->

<!--Use: sent marks a sentence.
-->

<!ELEMENT sent (%inlines;)* >

<!ATTLIST sent
%attrs;
>

<!--Use: w marks a word.
-->

<!ELEMENT w (%inlinew;)* >

<!ATTLIST w
%attrs;
>

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

<!ELEMENT pagenum (#PCDATA) >

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

<!ATTLIST pagenum
%attrsrqd;
page (front | normal | special) 'normal'
>

<!--Use: noteref marks one or more characters that reference a footnote
or endnote <note>. Contrast with <annoref>. <noteref> and <note>
are independently skippable.
-->

<!ELEMENT noteref (#PCDATA) >

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

<!ATTLIST noteref
%attrs;
idref %URI; #REQUIRED
type %ContentType; #IMPLIED
>

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

<!ELEMENT annoref (#PCDATA) >

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

<!ATTLIST annoref
%attrs;
idref %URI; #REQUIRED
type %ContentType; #IMPLIED
>

<!--============================ Inline Quotes ============================-->

<!--Use: q contains a short, inline quotation. Compare with
<blockquote>, which marks a longer quotation set off from the
surrounding text.
-->

<!ELEMENT q (%inline;)* >

<!--Attuse: q

"cite" may provide a URI reference.
-->

<!ATTLIST q
%attrs;
cite %URI; #IMPLIED
>

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

<!ENTITY % Length "CDATA" >
<!-- measured in pixels, percent (nn%) -->

<!ENTITY % MultiLength "CDATA" >
<!-- 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. -->

<!ENTITY % Pixels "CDATA" >
<!-- 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">.
-->

<!ELEMENT img EMPTY >

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

<!ATTLIST img
%attrs;
src %URI; #REQUIRED
alt %Text; #REQUIRED
longdesc %URI; #IMPLIED
height %Length; #IMPLIED
width %Length; #IMPLIED
>

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

<!ELEMENT imggroup (prodnote | img | caption)+ >

<!ATTLIST imggroup
%attrs;
>

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

<!ELEMENT p (%inline; | list | dl)* >

<!ATTLIST p
%attrs;
>

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

<!ELEMENT doctitle (%inline;)* >

<!ATTLIST doctitle
%attrs;
>

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

<!ELEMENT docauthor (%inline;)* >

<!ATTLIST docauthor
%attrs;
>

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

<!ELEMENT covertitle (%inline;)* >

<!ATTLIST covertitle
%attrs;
>

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

<!ELEMENT h1 (%inline;)* >

<!ATTLIST h1
%attrs;
>

<!--Use: h2 contains the text of the heading for a <level2> structure.
-->

<!ELEMENT h2 (%inline;)* >

<!ATTLIST h2
%attrs;
>

<!--Use: h3 contains the text of the heading for a <level3> structure.
-->

<!ELEMENT h3 (%inline;)* >

<!ATTLIST h3
%attrs;
>

<!--Use: h4 contains the text of the heading for a <level4> structure.
-->

<!ELEMENT h4 (%inline;)* >
<!ATTLIST h4
%attrs;
>

<!--Use: h5 contains the text of the heading for a <level5> structure.
-->

<!ELEMENT h5 (%inline;)* >

<!ATTLIST h5
%attrs;
>

<!--Use: h6 contains the text of the heading for a <level6> structure.
-->

<!ELEMENT h6 (%inline;)* >

<!ATTLIST h6
%attrs;
>

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

<!ELEMENT bridgehead (%inline;)* >

<!ATTLIST bridgehead
%attrs;
>

<!--Use: hd marks the text of a heading in <level>, <poem>, <list>, <linegroup>,
or <sidebar>. -->

<!ELEMENT hd (%inline;)* >

<!ATTLIST hd
%attrs;
>

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

<!ELEMENT blockquote (pagenum | %block;)* >

<!--Attuse: blockquote

"cite" permits inclusion of the
URI from which the <blockquote> came.
-->

<!ATTLIST blockquote
%attrs;
cite %URI; #IMPLIED
>

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

<!ELEMENT dl (dt | dd | pagenum)+ >

<!ATTLIST dl
%attrs;
>

<!--Use: dt marks a term in a definition list <dl> for which a
definition <dd> follows.
-->

<!ELEMENT dt (%inline;)* >

<!ATTLIST dt
%attrs;
>

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

<!ELEMENT dd (%flow;)* >

<!ATTLIST dd
%attrs;
>

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

<!ELEMENT list (hd | prodnote | li | 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. -->

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

<!ATTLIST list
%attrs;
type (ol | ul | pl) #REQUIRED
depth CDATA #IMPLIED
enum (1 | a | A | i | I) #IMPLIED
start CDATA #IMPLIED
>

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

<!ELEMENT li (%flow; | lic)* >

<!ATTLIST li
%attrs;
>

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

<!ELEMENT lic (%inline;)* >

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

<!ATTLIST lic
%attrs;
>

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

<!ENTITY % Scope
"(row | col | rowgroup | colgroup)" >
<!-- Scope specifies a set of data cells for which the <th> provides
header information. -->

<!ENTITY % TFrame
"(void | above | below | hsides | lhs | rhs | vsides | box | border)" >
<!-- TFrame identifies the sides that are visually framed. -->

<!ENTITY % TRules
"(none | groups | rows | cols | all)" >
<!-- %TRules identifies where visual rulings appear.
If no Trules is present then assume:
'none' if border is absent or border='0' otherwise 'all'. -->

<!ENTITY % cellhalign
"align (left|center|right|justify|char) #IMPLIED
char %Character; #IMPLIED
charoff %Length; #IMPLIED" >
<!-- % 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.
-->

<!ENTITY % cellvalign
"valign (top|middle|bottom|baseline) #IMPLIED" >
<!-- % 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.
-->

<!ELEMENT table (caption?, (col* | colgroup*), thead?, tfoot?, (tbody+| tr+)) >

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

<!ATTLIST table
%attrs;
summary %Text; #IMPLIED
width %Length; #IMPLIED
border %Pixels; #IMPLIED
frame %TFrame; #IMPLIED
rules %TRules; #IMPLIED
cellspacing %Length; #IMPLIED
cellpadding %Length; #IMPLIED
>
<!--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.
-->

<!ELEMENT caption (%flow;)* >

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

<!ATTLIST caption
%attrs;
imgref IDREFS #IMPLIED
>

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

<!ELEMENT thead (tr)+ >

<!ATTLIST thead
%attrs;
%cellhalign;
%cellvalign;
>

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

<!ELEMENT tfoot (tr)+ >

<!ATTLIST tfoot
%attrs;
%cellhalign;
%cellvalign;
>

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

<!ELEMENT tbody (tr)+ >

<!ATTLIST tbody
%attrs;
%cellhalign;
%cellvalign;
>

<!--Use: colgroup groups adjacent columns <col> that are semantically
related.
-->

<!ELEMENT colgroup (col)* >

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

<!ATTLIST colgroup
%attrs;
span NMTOKEN '1'
width %MultiLength; #IMPLIED
%cellhalign;
%cellvalign;
>

<!--Use: col elements define the alignment properties for cells in
one or more columns.
-->

<!ELEMENT col EMPTY >

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

<!ATTLIST col
%attrs;
span NMTOKEN '1'
width %MultiLength; #IMPLIED
%cellhalign;
%cellvalign;
>

<!--Use: tr marks one row of a <table> containing <th> or <td> cells.
-->

<!ELEMENT tr (th | td)+ >

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

-->

<!ATTLIST tr
%attrs;
%cellhalign;
%cellvalign;
>

<!--Use: th indicates a table cell containing header information.
-->

<!ELEMENT th (%flownopagenum;)* >

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

<!ATTLIST th
%attrs;
abbr %Text; #IMPLIED
axis CDATA #IMPLIED
headers IDREFS #IMPLIED
scope %Scope; #IMPLIED
rowspan NMTOKEN '1'
colspan NMTOKEN '1'
%cellhalign;
%cellvalign;
>

<!--Use: td indicates a table cell containing data.
-->

<!ELEMENT td (%flownopagenum;)* >

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

<!ATTLIST td
%attrs;
abbr %Text; #IMPLIED
axis CDATA #IMPLIED
headers IDREFS #IMPLIED
scope %Scope; #IMPLIED
rowspan NMTOKEN '1'
colspan NMTOKEN '1'
%cellhalign;
%cellvalign;
>

<!-- End dtbook-2005-2.dtd -->