<!-- dtbk3-06.dtd revision 3-06 1999-09-24 Harvey Bingham --> <!--dtbook3 XML Document Type Definition implementing the NISO Digital Talking Book Version 3-06. Harvey Bingham <hbingham@acm.org> George Kerscher <kerscher@montana.com> Michael Moodie <mmoo@loc.gov> Markup Specification Team <daisy-wt-must@svb.nl> Copyright (c) 1999 National Information Standards Organization 1. Purpose The Digital Talking Book 3.0 provides the means to package a published book with the combination of professional narration, navigation into that narration, and the text of the book marked with tags to convey its structure, content, and metadata about the book and its structure. The Document Type Definition (DTD) defines the allowable element types and their attributes that can be used to markup the text of the book sufficiently that textual material can be synchronized with the professionally narrated version of that book. The synchronization can permit concurrent display of the text being narrated, and the textual material can be searched to locate material desired for narration. This application of XML is the next generation after the DAISY 2.0 DTD, for the Digital Audio-based Information SYstem. That application developed a Navigation Control Center (NCC) for synchronizing document structure with narration. The NCC will become another XML application derived from the markup of documents tagged using the dtbook3 DTD. Richer structuring capability is one of the objectives of this DTD. The Synchronized Multimedia Integration Language (SMIL) 1.0 will be used. Some HTML elements are omitted from dtbook3. HTML authoring tools may include many of the additional tags that are left out of dtbook3. Endtag markup, sometimes optional in HTML, are required for use with dtbook3, as any XML application requires endtags. The benefit of including endtags is that the tagged document has dependable structure. The tools available for browsing HTML may be used with dtbook3 material, at the expense of discarding some specific tagging and attributes that are not part of HTML 4.0. 2. Document Tagging Content A Digital Talking Book 3 document should begin with the XML processing instruction identifying the version of XML, and encoding, such as: <?xml version="1.0" encoding="ISO-8859-1" ?> The alternative encoding="UTF-8" is appropriate for supporting UNICODE, as is expected for systems supporting XML applications. This is followed by the document type declaration, the DOCTYPE: <!DOCTYPE dtbook3 PUBLIC "-//NISO//DTD dtbook3.dtd//EN" "http://www.loc.gov/nls/niso/dtbook3.dtd" "dtbook3.dtd"> It identifies dtbook3 as the name of the root element, the first to occur in any document. Note that the reference above is to the latest version of the DTD. When a document is tagged to a particular version of the DTD, the following is the alternative, here referring to version 3-06. <!DOCTYPE dtbook3 PUBLIC "-//NISO//DTD dtbook3.dtd Version 3-06 1999-09-24//EN" "http://www.loc.gov/nls/niso/dtbk3-06.dtd" "dtbk3-06.dtd"> The ExternalID begins with PUBLIC and is followed by the formal public identifier, indicating -// unregistered NISO// owning organization DTD kind of external entity dtbook3.dtd possibly with version 3-06 and date. //EN the public text language is English. Then comes the PUBLIC URI for the DTD, where it may be found on the internet. Note that the URI pointing to the public version is to this abbreviated version, not the extended version. The third string identifies the SYSTEM (local) version of the DTD, in this form it is expected to be found in the same directory as this dtbook3 document, else find from the PUBLIC URI. XML allows an internal subset of declarations (in "[...]" before the concluding ">" of the DOCTYPE declaration) that override or extend those of this DTD. Future modularization will likely use these to enable otherwise disabled marked sections for modules such as drama. 3. References The latest version of the dtbook3 DTD is available at http://www.loc.gov/nls/niso/dtbook3.dtd Earlier individual versions are available, differentiated by suffix: This version is dtbk3-06.dtd. http://www.loc.gov/nls/niso/dtbk3-06.dtd Expanded DTD documentation of the DTD is available as an HTM 4.0 page at: http://www.loc.gov/nls/niso/dtbook3doc.htm That tracks the current version of the documentation. A specific version documentation is available, of the form http://www.loc.gov/nls/niso/dtbook3-06doc.htm The SMIL 1.0 specification is available at: http://www.w3.org/TR/REC-smil This dtbook3.dtd is an application of the Extensible Markup Language (XML) 1.0. The XML specification is available at: http://www.w3.org/TR/REC-xml It is based on an XML version of the HTML 4.0 Strict DTD, with design adaptation for dtbook3. That HTML DTD and more detailed documentation of the element types that come from that DTD is available at: http://www.w3.org/TR/REC-html40 --> <!--hb: change record: 1998-10-08 original by Harvey Bingham 1998-10-19 restored object and param into %special; and %head.misc; 1998-10-19 restored character entities for lt, gt, amp, apos, quot 1998-10-19 repaired % flow to "%inline; | %block;" % flownopagenum to "inlinenopagenum; | %block;" 1998-11-12 fixed days of prior three change entries (were 22, 27, 28) added lang="en" to initial xml processing instruction added word w to inline substituted content for dtbook3 specific entities used once added linenum to poem lin added prodnote to poem added lin and linenum to speech added act, scene, and prodnote to drama added hd for generic head in drama, play, act, scene, linegroup, div replaced poemtitle and dramatitle by hd added usage (required | optional) #IMPLIED to prodnote eliminated pre, preformatted block 1999-01-23 Changes requested by Michael Moodie, George Kerscher, Tom McCartney, and David Pawson, 1999-01-12. 1. renamed note to notice for any admonition 2. renamed footnote to note for out-of-line material other than sidebar, and renamed attribute to "idref" (4.) eliminate symbol attribute as it is part of content (6.) make the id attribute #REQUIRED 3. rename fnref to noteref (4.) and eliminate the symbol attribute (5.) rename attribute footnote to idref, make it #REQUIRED (7.) and added type CDATA #IMPLIED with expected values "source" or "explanation" 8. rename element (not attribute) cite to citation 9. allow inline elements: a, img, code, samp, kbd, pagenum to also be block elements, Do by using attribute class="block" when used in block context, otherwise inline is implied. Allow block element prodnote to also be inline. Do by adding element prodinl that serves the same purpose. 10. in tables, only the first pagenum is needed 11. comment on prodnote eliminate its use as container for pagenum. 12. change attribute page for pagenum declared value from "regular" to "normal" 1999-01-23 Editorial reordering and comment clarification Moved prodinl out of block section into new section 1999-06-25 Changes requested by Michael Moodie, George Kerscher, 1999-06-22, with some editorial comment clarifications and spelling corrections. 1. XML declaration: initial line removed lang="en". It goes on the root element dtbook3 of each document instead. 2. Amplified initial comments to include how to start a document and reference the dtd dtbk3-01.dtd 3. book: made bodymatter optional. 4. frontmatter: added required initial doctitle, clarified in Use comment that for any kinds of information with levels, level1 is appropriate instead of div. Note this is the only incompatible change to the prior version of this DTD. 5. prodnote: clarified comment about inline prodinl and the block form prodnote. 6. div: made content model consistent with levelN and expanded comments to allow recursive divs to any level. 7. note: content model made repeatable to allow multiple block elements, such as paragraphs or lists. 8. note: comment changed to replace 'url' by 'idref' with CDATA content that would allow it to contain a URL. Note that this injects a semantic confusion, where IDREF in XML is only allowed to contain name characters, so could not include the local separator of a URL: ...#... . Since most noterefs will be into the current document, that "#" will not be required. 9. acronym: added attribute pronounce (yes|no) #IMPLIED. 10. doctitle: element added as required first element of frontmatter. 11. dl: added pagenum for cases where pagebreak occurs between definition list terms or definitions. As an inline, pagenum can still occur within either dt or dd. The text below in Use is extended to identify expected order, how to nest definitions, and placement of pagenum 12. ol: added pagenum for cases where pagebreak occurs between list items, within which pagenum can occur as an inline. 13. ul: added pagenum for cases where pagebreak occurs between list items, within which pagenum can occur as an inline. 14. Removed unused parameter entity head.content. 15. title: extended comment to differentiate title from doctitle. 16. meta: added Dublin Core description to dtbk3-01.dtd from expanded version dtbke301.dtd. 1999-07-05 1. fixed typo in var Usage. 1999-07-15 1. Made editorial changes to comments, no changes to syntax. 2. Changed comment on local subsets to allow them as future means to enable modules such as drama or math. 3. Updated version number to 3-02. 1999-07-19 1. Added missing = to meta 2. Made meta content description for Dublin Core consistent. 3. Updated version number to 3-03. 1999-07-20 1. Reorganized initial comments, added references. 2. Updated version number to 3-04. 1999-09-16 1. Updated the usage notes and definitions in the Use: comments with those supplied by Michael Moodie. 2. Added recursive level alternative to level1, ... level6. 3. Added levelhd with level corresponding to h1, ... h6. 4. Added attribute depth CDATA #IMPLIED to level and levelhd. 5. Added citation in content models that include %inlineinblock; 6. Added linenum as part of %special; allowing it wherever <br> can occur, more general than only in poetry. 7. Removed inline prodinl replacing it by prodnote. Assumes that in the inline contexts, the block element options will not be used that would destroy the inline model. 8. Typographic changes to copyright notice. 9. Updated version number to 3-05. 1999-09-24 1. Changed element name s to sent (sentence), to avoid the conflict in use of s in the transitional HTML 4.0 dtd as a synonym for strike fontstyle, and so display by default using current browsers. 2. Added comma to Use: abbreviation. 3. Adjusted reference URI for dtbook3doc.htm, 4. Eliminated multiple occurrence of prodnote in %flow by adding % inlinenoprodnote. 5. Eliminated multiple occurrences of prodnote in % flownopagenum by eliminating it in % inlinenopagenum. 6. Added attlist for levelhd. 7. Replaced double-dash by comma in the midst of the comment Use: script. 8. Updated version number to 3-06. --> <!-- Comment Classification Conventions Some comments start with a pattern followed by a colon: Use: element type and its use. hb: Explanation by Harvey Bingham. HB: yyyy-mm-dd is dated revision comment by Harvey Bingham. Other comments without such a pattern are details about the DTD structure, or about dtbook3 objects. --> <!--===================== Character Entities =============================--> <!--hb: Characters for interoperability. A few characters may have special markup meaning, so are expressed as character entities in text, preceded by "&" and followed by ";". "lt" < "gt" > "amp" & "apos" neutral single quote The notation below #decimal indicates the character code position, for unicode or ascii. Note that the < and & characters in the declarations of "lt" and "amp" are doubly escaped to meet the requirement that entity replacement be well-formed. --> <!ENTITY lt "&#38;#60;"> <!ENTITY gt "&#62;"> <!ENTITY amp "&#38;#38;"> <!ENTITY apos "&#39;"> <!ENTITY quot "&#34;"> <!-- Three larger character sets included in HTML 4.0 are omitted here: HTMLlat1.ent, HTMLsymbol.ent, and HTMLspecial.ent. Unicode is available to XML applications, so these characters are available.--> <!--======================= Imported Names ===============================--> <!ENTITY % contenttype "CDATA"> <!ENTITY % contenttypes "CDATA"> <!ENTITY % charset "CDATA"> <!ENTITY % charsets "CDATA"> <!ENTITY % languagecode "NMTOKEN"> <!ENTITY % character "CDATA"> <!ENTITY % linktypes "CDATA"> <!ENTITY % mediadesc "CDATA"> <!ENTITY % uri "CDATA"> <!ENTITY % datetime "CDATA"> <!ENTITY % script "CDATA"> <!ENTITY % scriptcm "#PCDATA"> <!ENTITY % stylesheet "CDATA"> <!ENTITY % stylesheetcontent "#PCDATA"> <!ENTITY % text "CDATA"> <!--================== dtbook3 Content Models ============================--> <!ENTITY % head.misc "meta | link | style | script | object"> <!ENTITY % list "ul | ol"> <!--HB: 1999-01-23 Renamed note to notice and footnote to note --> <!ENTITY % dtbook3block "author | notice | prodnote | sidebar | note | poem | drama"> <!--HB: 1999-01-23 Added %inlineinblock; a subset of %inline; for use as block elements without surrounding block parent. --> <!--HB: 1999-09-16 Added citation, omitted reference above about inline version of prodnote. Note there is no way to inject #PCDATA in this use. --> <!ENTITY % inlineinblock "a | citation | img | code | samp | kbd | var | pagenum"> <!ENTITY % block "p | %list; | dl | div | blockquote | hr | table | address | noscript | %dtbook3block;"> <!--================ Character mnemonic entities =========================--> <!-- Omitted as XML uses Unicode, so doesn't need them --> <!--=================== Generic Attributes ===============================--> <!ENTITY % coreattrs "id ID #IMPLIED class CDATA #IMPLIED style %stylesheet; #IMPLIED title %text; #IMPLIED "> <!ENTITY % i18n "lang %languagecode; #IMPLIED dir (ltr|rtl) #IMPLIED "> <!--HB: 1999-09-16 events in HTML 4.0 deal with click, mouse, or key actions. Events are ignored in dtbook3. --> <!ENTITY % events ""> <!ENTITY % attrs "%coreattrs; %i18n; %events;"> <!--HB: 1999-01-23 Changed from use of attrs to make id required --> <!ENTITY % attrsrqd "id ID #REQUIRED class CDATA #IMPLIED style %stylesheet; #IMPLIED title %text; #IMPLIED %i18n; %events;"> <!--================ Document Structure ==================================--> <!ENTITY % dtbook3.content "head, book"> <!--Use: dtbook3 is the root element in the Digital Talking Book 3.0 DTD. Contains metadata in <head> and the document itself in <book>. --> <!ELEMENT dtbook3 (%dtbook3.content;) > <!ATTLIST dtbook3 %i18n; > <!--==================== Book Content ====================================--> <!--HB: 1999-06-25 book: made bodymatter optional. --> <!--Use: book surrounds the entire content of the document, divided into frontmatter, bodymatter, and rearmatter. Metadata is not included in <book>, but is placed in <head>. --> <!ELEMENT book (frontmatter, bodymatter?, rearmatter?) > <!ATTLIST book %attrs; onload %script; #IMPLIED onunload %script; #IMPLIED > <!--======================= Book Major Structures ========================--> <!--HB: 1999-06-25 frontmatter: added required initial doctitle, clarified in Use that for any kinds of information with levels, level1 is appropriate instead of div. --> <!--HB: 1999-09-16 Added level to allow recursive levels in place of the explicitly nested level1, level2, ... level6 and the use of recursive div and hd for deeper levels of nesting. --> <!--Use: frontmatter contains preliminary material such as the copyright notice, foreword, acknowledgments, table of contents, etc. which serves as a guide to the contents and nature of a book. --> <!ELEMENT frontmatter (doctitle, (level | level1 | %block; | script)+) > <!ATTLIST frontmatter %attrs; > <!--HB: 1999-09-16 Added level to allow recursive levels in place of the explicitly nested level1, level2, ... level6 and the use of recursive div and hd for deeper levels of nesting. --> <!--Use: bodymatter consists of the text proper of a book, as opposed to preliminary material (frontmatter) or supplementary information (rearmatter). --> <!ELEMENT bodymatter (level | level1 | %block; | script)+ > <!ATTLIST bodymatter %attrs; > <!--HB: 1999-09-16 Added level to allow recursive levels in place of the explicitly nested level1, level2, ... level6 and the use of recursive div and hd for deeper levels of nesting. --> <!--Use: rearmatter contains supplementary material such as appendices, glossaries, bibliographies, and indices following the text of the book. --> <!ELEMENT rearmatter (level | level1 | %block; | script)+ > <!ATTLIST rearmatter %attrs; > <!--================== dtbook3 Recursive Structure level ================--> <!--HB: 1999-09-16 Added level to allow recursive levels in place of the explicitly nested level1, level2, ... level6 and the use of recursive div and hd for deeper levels of nesting. --> <!--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. The class attribute identifies the actual name (e.g., part, chapter, letter) of the structure it marks. --> <!ELEMENT level ((levelhd | %block; | %inlineinblock; | level)*) > <!--HB: attlist level has a depth attribute, with values 1, 2, ... indicating the depth of nesting. The highest level is 1, analogous to level1. As depth can be determined for any book by algorithm, its value is not required. When omitted, reuse of material in larger compilations that have their own higher levels may be possible if no reuse of id values occurs. --> <!ATTLIST level %attrs; depth CDATA #IMPLIED > <!--============ dtbook3 Hierarchic Structure level1 ... level6 ==========--> <!--HB: 1999-09-16 augmented use description of level 1 to indicate alternative use of recursive level instead. --> <!--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 (often chapters), inside which level2 subdivisions (often sections) may nest. The class attribute identifies the actual name (e.g., part, chapter, letter) of the structure it marks. --> <!ELEMENT level1 ((h1 | level2 | %block; | %inlineinblock;)*) > <!--Use: level2 contains subdivisions that nest within level1 divisions. The class attribute identifies the actual name (e.g., part, chapter, letter) of the structure it marks. --> <!ELEMENT level2 ((h2 | level3 | %block; | %inlineinblock;)*) > <!--Use: level3 contains subdivisions that nest within level2 subdivisions (e.g., subsections within sections). The class attribute identifies the actual name (e.g., part, chapter, letter) of the structure it marks. --> <!ELEMENT level3 ((h3 | level4 | %block; | %inlineinblock;)*) > <!--Use: level4 contains subdivisions that nest within level3 subdivisions. The class attribute identifies the actual name (e.g., part, chapter, letter) of the structure it marks. --> <!ELEMENT level4 ((h4 | level5 | %block; | %inlineinblock;)*) > <!--Use: level5 contains subdivisions that nest within level4 subdivisions. The class attribute identifies the actual name (e.g., part, chapter, letter) of the structure it marks. --> <!ELEMENT level5 ((h5 | level6 | %block; | %inlineinblock;)*) > <!--Use: level6 contains subdivisions that nest within level5 subdivisions. The class attribute identifies the actual name (e.g., part, chapter, letter) of the structure it marks. --> <!ELEMENT level6 ((h6 | %block; | %inlineinblock;)*) > <!ATTLIST level1 %attrs; > <!ATTLIST level2 %attrs; > <!ATTLIST level3 %attrs; > <!ATTLIST level4 %attrs; > <!ATTLIST level5 %attrs; > <!ATTLIST level6 %attrs; > <!--=================== Text Markup ======================================--> <!--HB: 1999-01-23 Renamed cite to citation. --> <!ENTITY % phrase "em | strong | dfn | code | samp | kbd | var | citation | abbr | acronym"> <!--HB: 1999-09-16 Added linenum to %special; --> <!ENTITY % special "a | img | object | br | script | q | sub | sup | span | bdo | linenum"> <!--HB: 1999-09-16 Added linenum to %speciala; --> <!ENTITY % speciala "img | object | br | script | q | sub | sup | span | bdo | linenum"> <!--========================= Inline Entities ============================--> <!--HB: 1999-01-23 Renamed fnref to noteref, added prodinl as inline rather than need to use the block form, prodnote. --> <!--HB: 1999-09-16 Replaced prodinl by prodnote, with the expectation that when used in an inline context it does not inject block elements. --> <!ENTITY % dtbook3inline "sent | w | pagenum | prodnote | noteref"> <!ENTITY % inline "#PCDATA | %phrase; | %special; | %dtbook3inline;"> <!-- %inlinea; for a excludes nested a --> <!ENTITY % inlinea "#PCDATA | %phrase; | %speciala; | %dtbook3inline;"> <!--HB: 1999-09-16 Replaced prodinl by prodnote, with the expectation that when used in an inline context it does not inject block elements --> <!-- %inlines; excludes direct nesting of sentences sent. --> <!ENTITY % inlines "#PCDATA | %phrase; | %special; | pagenum | w | prodnote | noteref"> <!-- %inlinew; for word w excludes any of the %dtbook3inline;. --> <!ENTITY % inlinew "#PCDATA | %phrase; | %special;"> <!-- %inlinenopagenum; excludes pagenum in table th and td directly. --> <!--HB: 1999-01-23 Renamed fnref to noteref added prodinl as inline version of prodnote. --> <!ENTITY % inlinenopagenum "#PCDATA | %phrase; | %special; | sent | w | noteref" > <!--HB: 1999-09-16 Replaced prodinl by prodnote, with the expectation that when used in an inline context it does not inject block elements. --> <!ENTITY % inlinenoprodnote "#PCDATA | %phrase; | %special; | sent | w | pagenum | noteref" > <!--==================== Flow (Block or Inline) Entities =================--> <!--HB: 1999-09-24 Changed % flow to removed prodnote from the former %inline;, as already in %block; --> <!ENTITY % flow "%inlinenoprodnote; | %block;"> <!-- ideally excludes pagenum though can get in through %block; --> <!ENTITY % flownopagenum "%inlinenopagenum; | %block;"> <!--============= Br, Linenum, Address, and Div Content Models ===========--> <!--Use: br marks a forced line break. --> <!ELEMENT br EMPTY > <!ATTLIST br %coreattrs; > <!--HB: 1999-09-16 linenum generalized to occur where br can. --> <!--Use: linenum contains a line number in a poem, play, legal text, etc. When using linenum, it usually appears at the start of a block element, or adjacent to <br> within a block element. --> <!ELEMENT linenum (#PCDATA) > <!ATTLIST linenum %attrs; > <!--Use: address contains a location at which a person or agency may be contacted. --> <!ELEMENT address (%inline;)* > <!ATTLIST address %attrs; > <!--HB: 1999-06-25 div: made content model consistent with levelN and expanded comments to allow recursive divs to any level. --> <!--HB: 1999-09-16 div: replaced the use of div as recursive container by level, the explicitly recursive element, with nesting depth indicated by the implied depth attribute. Removed hd element from content model. --> <!--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. The class attribute identifies the actual name (e.g., part, chapter, letter) of the structure it marks. Compare with <span> which is used in inline settings. --> <!ELEMENT div (%block; | %inlineinblock;)* > <!--div level attribute that may extend or augment explicit levels, to indicate nesting level, with 1 corresponding to h1, and values 1, 2, ... . --> <!ATTLIST div %attrs; level CDATA #IMPLIED > <!--====== dtbook3 Block Elements Author, Notice, Prodnote, Sidebar ======--> <!--Use: author identifies the writer of a given work. --> <!ELEMENT author (%inline;)* > <!ATTLIST author %attrs; > <!--HB: 1999-01-23 Changed name from note to notice. --> <!--Use: notice contains a warning, caution, or other type of admonition normally found in the margin of a book. Differs from a sidebar in that a notice must be presented at a specific location within the text and is not optional (may not be turned off by the end user). --> <!ELEMENT notice (%inline;)* > <!ATTLIST notice %attrs; > <!--HB: 1999-09-16 prodnote can occur inline. In such use, it should contain inline material, not injecting block tags that might distort the inline context where it occurs. --> <!--Use: prodnote contains language added to the alternative-format version by the producing organization; commonly used to provide verbal descriptions of visual elements such as charts, graphs, etc., supply operating instructions, or describe differences between the print book and the audio version. --> <!ELEMENT prodnote (%flow;)* > <!--hb: prodnote may be specified to be required or optional for the user. If optional, some user preference may allow skipping over the content. but prodnote render="required" is essential for user to hear, An audible cue could announce the presence of the prodnote. --> <!ATTLIST prodnote %attrs; render (required | optional) #IMPLIED > <!--HB: 1999-01-23 sidebar: changed description to refer to note, not footnote, and noteref rather than fnref. --> <!--HB: 1999-06-25 sidebar: changed description to refer to pagenum, not pgnum. --> <!--Use: sidebar contains information supplementary to the main text and/or narrative flow and is often boxed and "floating" apart from the main text. --> <!ELEMENT sidebar (%flow;)* > <!-- sidebar with id="xxx" is referenced in text via an a HREF="#xxx" --> <!ATTLIST sidebar %attrs; > <!--HB: 1999-01-23 Generalized from footnote to allow any out-of-line material other than sidebar. It is not expected to be a container for table, object, or img, though they are allowed. --> <!--HB: 1999-06-25 note: content model made repeatable to allow multiple block elements, such as paragraphs or lists. --> <!--Use: note marks a footnote, endnote, annotation, etc. The position of the note within the text is marked with a note reference (<noteref>). --> <!--HB: 1999-09-16 note can contain citation through %inlineinblock; --> <!ELEMENT note (%block; | %inlineinblock;)+ > <!--hb: note with id="yyy" is referenced in text by noteref idref="#yyy" --> <!--HB: 1999-06-25 note: comment changed replacing 'url' by 'idref' with CDATA content that would allow it to contain a URL. Caution: this can inject semantic confusion, where IDREF in XML is only allowed to contain name characters, so could not include the local prefix of a URL: "source#localid". Since most noterefs will be into the current document, the source is omissible, and the localid is indicated by the "#" prefix. The prefix "#" could be omitted if only internal references were allowed, and if the more restricted XML idref attribute type IDREF were used. --> <!--HB: 1999-01-23 Changed to make id attribute required. The id values need to be unique across all external entities that comprise the book. --> <!ATTLIST note %attrsrqd; > <!--========================== dtbook3 Poem ==============================--> <!--Use: poem contains a poem --> <!ELEMENT poem ((hd | author)*, (linegroup | p | prodnote)+) > <!ATTLIST poem %attrs; > <!--Use: linegroup contains a logical group of lines within a poem, e.g., a stanza. --> <!ELEMENT linegroup (lin)+ > <!ATTLIST linegroup %attrs; > <!--HB: Moved linenum into %inline, omit from lin --> <!--Use: lin marks one line of a poem --> <!ELEMENT lin (%inline;)* > <!ATTLIST lin %attrs; > <!--======================== dtbook3 Drama ===============================--> <!--Use: drama is dtbook3 container for play. --> <!ELEMENT drama ((hd | author)*, (act | scene | stage | speaker | speech | prodnote)+) > <!ATTLIST drama %attrs; > <!--Use: act is possible dtbook3 top-level of drama. --> <!ELEMENT act (hd | scene | stage | speaker | speech | prodnote)+ > <!ATTLIST act %attrs; > <!--Use: scene is possible dtbook3 second-level of drama. --> <!ELEMENT scene (hd | stage | speaker | speech | prodnote)+ > <!ATTLIST scene %attrs; > <!--Use: stage is dtbook3 stage instructions. --> <!ELEMENT stage (%flow;)* > <!ATTLIST stage %attrs; > <!--Use: speaker is dtbook3 container for speaker identification. --> <!ELEMENT speaker (%inline;)* > <!ATTLIST speaker %attrs; > <!--Use: speech is dtbook3 container for speech by speaker. --> <!ELEMENT speech (%inline;)* > <!ATTLIST speech %attrs; > <!--================== The Anchor Element ================================--> <!ENTITY % shape "(rect | circle | poly | default)"> <!ENTITY % coords "CDATA"> <!--Use: a contains an anchor, which is used in two ways: A name anchor identifies an exact position in a given document. A link anchor, when activated, "links to" (takes the user to) another place within that document or another document. --> <!ELEMENT a (%inlinea;)* > <!ATTLIST a %attrs; charset %charset; #IMPLIED type %contenttype; #IMPLIED name CDATA #IMPLIED href %uri; #IMPLIED hreflang %languagecode; #IMPLIED rel %linktypes; #IMPLIED rev %linktypes; #IMPLIED accesskey %character; #IMPLIED shape %shape; "rect" coords %coords; #IMPLIED tabindex NMTOKEN #IMPLIED onfocus %script; #IMPLIED onblur %script; #IMPLIED > <!--========================= Inline Elements ============================--> <!--Use: em indicates emphasis. Compare with <strong>. --> <!ELEMENT em (%inline;)* > <!--Use: strong marks stronger emphasis than <em>. --> <!ELEMENT strong (%inline;)* > <!--Use: dfn marks the first occurrence of a word or term that is defined or explained elsewhere in a book. --> <!ELEMENT dfn (%inline;)* > <!--Use: code designates a fragment of computer code. --> <!ELEMENT code (%inline;)* > <!--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;)* > <!--Use: kbd designates information that the reader is to input directly into a computer using the keyboard. --> <!ELEMENT kbd (%inline;)* > <!--Use: var indicates an instance of a variable or program argument. Commonly used as a placeholder for text to be entered by the user. --> <!ELEMENT var (%inline;)* > <!--HB: 1999-01-23 Renamed cite to citation. --> <!--Use: citation marks a reference to another document. --> <!ELEMENT citation (%inline;)* > <!--HB: 1999-07-15 abbr clarified use. --> <!--HB: 1999-09-24 added comma to Use: text. --> <!--Use: abbr designates an abbreviation, a shortened form of a word. --> <!ELEMENT abbr (%inline;)* > <!--HB: 1999-07-15 acronym clarified use. --> <!--Use: acronym marks a word formed from key letters (usually initials) of a group of words. For example: UNESCO, NATO, XML. --> <!ELEMENT acronym (%inline;)* > <!ATTLIST em %attrs; > <!ATTLIST strong %attrs; > <!ATTLIST dfn %attrs; > <!ATTLIST code %attrs; > <!ATTLIST samp %attrs; > <!ATTLIST kbd %attrs; > <!ATTLIST var %attrs; > <!--HB: 1999-01-23 Renamed cite to citation. --> <!ATTLIST citation %attrs; > <!ATTLIST abbr %attrs; > <!--HB: 1999-06-25 acronym: added attribute pronounce (yes | no) #IMPLIED. --> <!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;)* > <!--HB: 1999-01-23 Changed comment from fnref to noteref. --> <!--Use: sup marks a superscript character (printed above a character's normal baseline). Can be used recursively and/or intermixed with <sub>. --> <!ATTLIST sub %attrs; > <!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 block settings. --> <!ELEMENT span (%inline;)* > <!ATTLIST span %attrs; > <!--Use: bdo is used in special cases where the automatic actions of the bidirectional algorithm would result in incorrect display. --> <!ELEMENT bdo (%inline;)* > <!ATTLIST bdo %coreattrs; lang %languagecode; #IMPLIED dir (ltr|rtl) #REQUIRED > <!--==================== dtbook3 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; > <!--========= dtbook3 Inline Page Number, and Footnote Reference =========--> <!--Use: pagenum contains a page number from the print document, recorded as the first text object on a page. The"page" attribute allows three types of page numbering schemes to be identified: "normal" arabic numbering in the body of the book., "front" pages (from the frontmatter), and "special" pagination scheme such as hyphenated numbers in appendices. --> <!ELEMENT pagenum (#PCDATA) > <!--pagenum unique id value is expected, by convention derived from the actual pagenumber. The value of the page attribute indicates kind of pagenumber. --> <!--HB: 1999-01-23 Changed the page attribute "regular" to "normal". --> <!ATTLIST pagenum %attrs; page (front | normal | special) #IMPLIED > <!--HB: 1999-01-23 Renamed fnref to noteref --> <!--Use: noteref marks a character(s) that references a footnote, endnote, or annotation. --> <!ELEMENT noteref (#PCDATA) > <!--HB: 1999-01-23 Renamed fnref to noteref, and attributes: Renamed attribute footnote to idref, it is a reference to material in this book, Changed IDREF declared value to CDATA, to allow noterefs via URL instead, useful when the book has disjoint parts. Added attribute type, with value typically "source" or "explanatory". Eliminated symbol as it is part of content in the book. --> <!ATTLIST noteref %attrs; idref CDATA #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;)* > <!ATTLIST q %attrs; cite %uri; #IMPLIED > <!--================== Client-side image maps ============================--> <!--============= The link element in head ===============================--> <!--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(s). The &lt;link&gt; element conveys relationship information (for example, "next" and "previous") that may be rendered by user agents in a variety of ways. --> <!ELEMENT link EMPTY > <!ATTLIST link %attrs; charset %charset; #IMPLIED href %uri; #IMPLIED hreflang %languagecode; #IMPLIED type %contenttype; #IMPLIED rel %linktypes; #IMPLIED rev %linktypes; #IMPLIED media %mediadesc; #IMPLIED > <!--============================ Images ==================================--> <!ENTITY % length "CDATA"> <!ENTITY % multilength "CDATA"> <!ENTITY % multilengths "CDATA"> <!ENTITY % pixels "CDATA"> <!--Use: img marks a visual image. The "src" attribute specifies the location of the image file. The "alt" and "longdesc" attributes may be used to supply short and long descriptions, respectively. --> <!ELEMENT img EMPTY > <!ATTLIST img %attrs; src %uri; #REQUIRED alt %text; #REQUIRED longdesc %uri; #IMPLIED height %length; #IMPLIED width %length; #IMPLIED usemap %uri; #IMPLIED ismap (ismap) #IMPLIED > <!--======================== Object ======================================--> <!-- object is used to embed objects as part of HTML pages param elements should precede other content. XML mixed content model technicality precludes specifying this formally ... --> <!--Use: object marks an embedded object, which may consist of scripts, applets, images, etc. --> <!ELEMENT object (%flow; | param)* > <!ATTLIST object %attrs; declare (declare) #IMPLIED classid %uri; #IMPLIED codebase %uri; #IMPLIED data %uri; #IMPLIED type %contenttype; #IMPLIED codetype %contenttype; #IMPLIED archive %uri; #IMPLIED standby %text; #IMPLIED height %length; #IMPLIED width %length; #IMPLIED usemap %uri; #IMPLIED name CDATA #IMPLIED tabindex NMTOKEN #IMPLIED > <!--Use: param provides a named property for <object>. --> <!ELEMENT param EMPTY > <!ATTLIST param id ID #IMPLIED name CDATA #REQUIRED value CDATA #IMPLIED valuetype (data|ref|object) "data" type %contenttype; #IMPLIED > <!--=================== Horizontal Rule ==================================--> <!--Use: hr is an empty element indicating a horizontal rule. May be used to indicate a break in the text where only blank lines, a row of asterisks, a horizontal line, etc. are used in the print book. --> <!ELEMENT hr EMPTY > <!ATTLIST hr %coreattrs; > <!--======================= Paragraphs ===================================--> <!--HB: 1998-06-25 p: added %list; and dl inside p. This models the enclosing paragraph that has subsidiary lists. This is inconsistent with the HTML 4.0 DTD.--> <!--Use: p contains a paragraph. --> <!ELEMENT p (%inline; | %list; | dl)* > <!ATTLIST p %attrs; > <!--==================== Doctitle and Headings ==========================--> <!--HB: 1999-06-25 doctitle: element added as required first element of frontmatter. --> <!--Use: doctitle marks the title of the book, as printed on the cover and spine, as the first tag within <frontmatter>. It is used to quickly identify the book. --> <!ELEMENT doctitle (%inline;)* > <!--HB: 1999-09-16 levelhd added to provide header for recursive level. --> <!--Use: levelhd contains the text of a heading within <level>. --> <!ELEMENT levelhd (%inline;)* > <!--Use: h1 contains the text of the heading for a level1 structure. --> <!ELEMENT h1 (%inline;)* > <!--Use: h2 contains the text of the heading for a level2 structure. --> <!ELEMENT h2 (%inline;)* > <!--Use: h3 contains the text of the heading for a level3 structure. --> <!ELEMENT h3 (%inline;)* > <!--Use: h4 contains the text of the heading for a level4 structure. --> <!ELEMENT h4 (%inline;)* > <!--Use: h5 contains the text of the heading for a level5 structure. --> <!ELEMENT h5 (%inline;)* > <!--Use: h6 contains the text of the heading for a level6 structure. --> <!ELEMENT h6 (%inline;)* > <!--HB: 1999-06-25 hd: expanded description about use with div. --> <!--HB: 1999-09-16 hd: eliminated description of use with div. --> <!--Use: hd marks the text of a heading within <div>, <act>, or <scene> and the title of the work within <poem> and <drama>. --> <!ELEMENT hd (%inline;)* > <!--HB: 1999-06-25 doctitle: attributes added for new element. --> <!ATTLIST doctitle %attrs; > <!--HB: 1999-09-24 levelhd: attributes added for new element. --> <!ATTLIST levelhd %attrs; depth CDATA #IMPLIED > <!ATTLIST h1 %attrs; > <!ATTLIST h2 %attrs; > <!ATTLIST h3 %attrs; > <!ATTLIST h4 %attrs; > <!ATTLIST h5 %attrs; > <!ATTLIST h6 %attrs; > <!-- hd level may be explicit: 1, 2, ... 6 ... when the corresponding container in the document occurs parallel with level1, ... level6, or may be omitted, in which case the parent element div or a mapping to it, will take the level of nesting in the containing document. --> <!ATTLIST hd %attrs; level CDATA #IMPLIED > <!--=================== Preformatted Text ================================--> <!-- Removed as inappropriate for narrated material by consensus 1998-10-20 --> <!--=================== Block-like Quotes ================================--> <!--Use: blockquote indicates a quotation that is set off from the surrounding text by paragraph breaks. Compare with <q> which marks short, inline quotations. --> <!ELEMENT blockquote (%block; | %inlineinblock; | script)+ > <!ATTLIST blockquote %attrs; cite %uri; #IMPLIED > <!--=================== Inserted/Deleted Text ============================--> <!--=================== Lists ============================================--> <!--HB: 1999-06-25 dl: added pagenum for cases where pagebreak occurs between definition list terms or definitions. As an inline, pagenum can still occur within either dt or dd. The text below in Use is extended to identify expected order, how to nest definitions, and placement of pagenum. --> <!--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. --> <!ELEMENT dt (%inline;)* > <!ATTLIST dt %attrs; > <!--Use: dd marks a definition of a term within a definition list. --> <!ELEMENT dd (%flow;)* > <!ATTLIST dd %attrs; > <!--HB: 1999-06-25 ol: added pagenum for cases where pagebreak occurs between list items, within which pagenum can occur as an inline. --> <!--Use: ol contains an ordered list (list items are numbered or lettered). --> <!ELEMENT ol (li | pagenum)+ > <!ATTLIST ol %attrs; > <!--HB: 1999-06-25 ul: added pagenum for cases where pagebreak occurs between list items, within which pagenum can occur as an inline. --> <!--Use: ul marks an unordered list (list items are unnumbered and usually marked with a bullet or other typographical device.) --> <!ELEMENT ul (li | pagenum)+ > <!ATTLIST ul %attrs; > <!--Use: li marks a list item in an ordered or unordered list. Content may be either inline or block and may include other nested lists. --> <!ELEMENT li (%flow;)* > <!ATTLIST li %attrs; > <!--================ Forms ===============================================--> <!--======================= Tables =======================================--> <!ENTITY % tframe "(void | above | below | hsides | lhs | rhs | vsides | box | border)"> <!ENTITY % trules "(none | groups | rows | cols | all)"> <!ENTITY % talign "(left | center | right)"> <!ENTITY % cellhalign "align (left|center|right|justify|char) #IMPLIED char %character; #IMPLIED charoff %length; #IMPLIED "> <!ENTITY % cellvalign "valign (top|middle|bottom|baseline) #IMPLIED"> <!--Use: table contains a table data arranged in rows and columns. --> <!ELEMENT table (caption?, (col*|colgroup*), thead?, tfoot?, tbody+) > <!--HB: 1999-01-23 Caption can contain the pagenum for the start of a table at the top of a page. For a multi-page table, no pagenum should occur otherwise in the table. --> <!--Use: caption describes a table. If used, it must follow immediately after the table start tag. --> <!ELEMENT caption (%inline;)* > <!--Use: thead marks header information in a table, consisting of one or more rows (each marked with the tr tag) of <th> cells. --> <!ELEMENT thead (tr)+ > <!--Use: tfoot marks table footer information, consisting of one or more rows (each marked with the tr tag). --> <!ELEMENT tfoot (tr)+ > <!--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. --> <!ELEMENT tbody (tr)+ > <!--Use: colgroup is a group of columns that may share attribute values within a table. --> <!ELEMENT colgroup (col)* > <!--Use: col is a means to apply attribute values to table columns. --> <!ELEMENT col EMPTY > <!--Use: tr marks one row of a table containing <th> or <td> cells. --> <!ELEMENT tr (th|td)+ > <!--Use: th indicates a table cell containing header information. --> <!ELEMENT th (%flownopagenum;)* > <!--Use: td indicates an individual data cell in the body of a table. --> <!ELEMENT td (%flownopagenum;)* > <!ATTLIST table %attrs; summary %text; #IMPLIED width %length; #IMPLIED border %pixels; #IMPLIED frame %tframe; #IMPLIED rules %trules; #IMPLIED cellspacing %length; #IMPLIED cellpadding %length; #IMPLIED datapagesize CDATA #IMPLIED > <!ENTITY % calign "(top | bottom | left | right)"> <!ATTLIST caption %attrs; > <!ATTLIST colgroup %attrs; span NMTOKEN "1" width %multilength; #IMPLIED %cellhalign; %cellvalign; > <!ATTLIST col %attrs; span NMTOKEN "1" width %multilength; #IMPLIED %cellhalign; %cellvalign; > <!ATTLIST thead %attrs; %cellhalign; %cellvalign; > <!ATTLIST tbody %attrs; %cellhalign; %cellvalign; > <!ATTLIST tfoot %attrs; %cellhalign; %cellvalign; > <!ATTLIST tr %attrs; %cellhalign; %cellvalign; > <!ENTITY % scope "(row | col | rowgroup | colgroup)"> <!ATTLIST th %attrs; abbr %text; #IMPLIED axis CDATA #IMPLIED headers IDREFS #IMPLIED scope %scope; #IMPLIED rowspan NMTOKEN "1" colspan NMTOKEN "1" %cellhalign; %cellvalign; > <!ATTLIST td %attrs; abbr %text; #IMPLIED axis CDATA #IMPLIED headers IDREFS #IMPLIED scope %scope; #IMPLIED rowspan NMTOKEN "1" colspan NMTOKEN "1" %cellhalign; %cellvalign; > <!--================ Document Head =======================================--> <!--HB: 1999-06-25 Removed unused parameter entity head.content. --> <!--Use: head contains metainformation about the book but no actual content of the book itself, which is placed in <book>. --> <!ELEMENT head (title, (%head.misc; | base)*) > <!ATTLIST head %i18n; profile %uri; #IMPLIED > <!--HB: 1999-06-25 title: extended comment to differentiate title from doctitle. --> <!--Use: title contains the title of the book but is used only as metainformation in <head>. Use <doctitle> within <book>. --> <!ELEMENT title (#PCDATA) > <!ATTLIST title %i18n; > <!--Use: base contains the base URI from which local references start. It acts as an absolute URI that serves as the base URI for resolving relative URIs found within the document. It is an empty element that may appear only in <head>. --> <!ELEMENT base EMPTY > <!ATTLIST base href %uri; #REQUIRED > <!--Use: meta indicates metadata about the book. It is an empty element that may appear only in <head>. --> <!ELEMENT meta EMPTY > <!--HB: 1999-06-25 meta: added comment describing Dublin Core from long dtbook3 version. --> <!--hb: The reference for the Dublin Core Version 1.0 is Dublin Core Metadata for Resource Discovery IETF RFC 2413 dated September 1998 http://info.internet.isi.edu/in-notes/rfc/files/rfc2413.txt The Dublin Core is a metadata element set intended to facilitate discovery of electronic resources. Originally conceived for author-generated description of Web resources, it has attracted the attention of formal resource description communities such as museums, libraries, government agencies, and commercial organizations. Name Content DC.Title Name of the resource. DC.Creator Person or organization primarily responsible for the intellectual content of the resource. DC.Subject Topic or keywords addressed by the work. DC.Description Textual description of content of the resource. DC.Publisher Agent or agency responsible for making the resource available. DC.Contributor Person or organization other than Creator(s) who have made other significant but secondary intellectual contributions to the work. DC.Date Publication date, using one of the forms (yyyy, yyyy-mm, yyyy-mm-dd). DC.Type Category of the resource, such as home page, novel, poem, or dictionary, selected from enumerated list. DC.Format Physical manifestation of the resource, such as Postscript file or Windows executable file. DC.Identifier String or number used to uniquely identify the resource. DC.Source Objects, either print or electronic, from which this resource is derived, if applicable. DC.Language Language of the intellectual content. DC.Relation Relationship to other resources. DC.Coverage Spatial locations and temporal durations characteristic of the resource. DC.Rights A rights-management statement or linking identifier to it or service providing it. The meta element in HTML 4.0 absorbs the Dublin Core elements, by using the attributes: name="DC.xxx" content="...". The name has the prefix "DC." and no embedded spaces. For example: &lt;meta name="DC.Title" content="The Bible"&gt; During transition to the single form, a browser should accept the alternative prefixes: "DC:", "dc:", or "dc." Include as many separate meta elements as are appropriate, and repeat the same Name for each distinct and appropriate content. For a repeated name, the source order should be preserved in their contents. The http-equiv attribute can replace name for use when documents are retrieved using HTTP. Servers can use the value to create a header in the HTTP response sent back to the browser. The HTML meta attribute: name="keywords" content="keyword1,keyword 2, ..." is an HTML convention to aid search engines. Dublin Core does not recognize this use. Instead it uses separate meta: name="DC.Subject" content="keyword1" name="DC.Subject" content="keyword 2" name="DC.Subject" content="..." The HTML meta lang attribute can be used to identify the language for the content, say of an author's name. The scheme attribute may further qualify the content, as to indicate the kind of DC.Identifier, such as scheme="ISSN", scheme="ISBN", scheme="L/C", etc. Note that Version 1.1 of the Dublin Core now exists that includes a common set of six additional attributes for each of the elements. See: http://purl.oclc.org/dc/documetns/rec-dces-19990702 The additional attributes and their respective values are: Attribute Fixed Value Version 1.1 RegistrationAuthority Dublin Core Metadata Initiative Language en Obligation Optional Datatype Character String MaximumOccurrence Unlimited As these values are apparently fixed for this use, there is little value added in adaptation to add each of those attributes to the associated attribute list for meta. --> <!ATTLIST meta %i18n; http-equiv NMTOKEN #IMPLIED name NMTOKEN #IMPLIED content CDATA #REQUIRED scheme CDATA #IMPLIED > <!--Use: style is means to include styling information that applies to the book. It may appear only in <head>. --> <!ELEMENT style (%stylesheetcontent;) > <!ATTLIST style %i18n; type %contenttype; #REQUIRED media %mediadesc; #IMPLIED title %text; #IMPLIED > <!--19990923 HB: repaired comment below --> <!--Use: script contains a script, a program that may accompany a document or be embedded directly in it. The program executes on the client's machine when the document loads, or at some other time such as when a link is activated. See <noscript>. --> <!ELEMENT script (%scriptcm;) > <!ATTLIST script charset %charset; #IMPLIED type %contenttype; #REQUIRED language CDATA #IMPLIED src %uri; #IMPLIED defer (defer) #IMPLIED event CDATA #IMPLIED for %uri; #IMPLIED > <!--Use: noscript identifies an alternate method for carrying out a function when a playback device cannot execute a script. See <script>. --> <!ELEMENT noscript (%block; | %inlineinblock;)+ > <!ATTLIST noscript %attrs; >