<!--
html3.dtd
Document Type Definition for the HyperText Markup Language (HTML DTD)
Draft: Thu 19-Jan-95 12:02:46
Author: Dave Raggett <dsr@hplb.hpl.hp.com>
W3O is developing a testbed browser to provide practical
experience with HTML 3.0 before it becomes a standard.
See: http://www.w3.org/hypertext/WWW/Arena/
This is an open process and comments are welcomed on the
www-html mailing list.
While HTML 3.0 is being discussed, please use text/x-html3
as a temporary MIME content type, as this will allow clients
to distinguish html 3 from current html documents.
The entity HTML.Recommended can be used to give a more rigorous
version of the DTD suitable for use with SGML authoring tools.
The default version of the DTD offers a laxer interpretation,
e.g. allowing authors to omit leading <P> elements. You can
switch on the more rigorous version of the DTD by including
the following at the start of your HTML document.
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 3.0//EN//"
[ <!ENTITY % HTML.Recommended "INCLUDE"> ] >
Design Objectives:
o Backwards compatibility with 2.0
o Tightening up HTML.Recommended and
moving more things to HTML.Deprecated
o Keep HTML - simple don't compete with CALS
o Make it practical for people to edit HTML 3.0
documents directly, i.e. avoid long names.
o Tables, figures and math from HTML+
with tweaks based on recent experience
o Add limited presentational controls with
a view to use of linked style sheets
(style overrides are supported)
o Compatibility with ICADD as per Yuri's suggestions
An (incomplete) list of issues:
We need to pin down an explicit set of RELation values
for <A> and <LINK>. Should these include "Chapter",
"Section", etc. or just generic relationships?
Should we support graphical selection menus with SELECT?
These would process clicks locally rather than at the server.
How should we support font selection in math for
tensors, vectors, physical constants etc?
HTML 3.0 relies on linked style info to give authors
control over the appearence of documents. Such info is
placed in a linked style sheet, or as overrides in the
HTML document head, using the STYLE element. The generic
CLASS attribute can be used to subclass elements when
you want to use a different style from normal, e.g. you
might use <h2 class=bigcaps> for headers with enlarged
capital letters. Note that the class attribute has a
wider scope than just style changes, e.g. browsers could
provide means for searching through documents, taking
into account the class values.
The DTD contains a small number of attributes for direct
control of basic alignment parameters; column widths for
tables; support for custom bullets, label styles for lists
and text flow. It may be cleaner to drop these and force
authors to use the style sheet mechanism instead.
How far should we go to support HyTime?
The extension to BASE caters for multiple scopes for
resolving relative references, while indirect references
can be resolved by servers. One area, where HyTime
could help us, is with location ladders for affixing
annotations: e.g. 3rd H2, 2nd para, 4th word, but this
could also be handled via refining the URL syntax.
I have added three attributes to every element that uses a URL
for a hypertext link, or to name an inlined image. The BASE
attribute is used to name a BASE element that defines the
base URL for resolving relative links (defaults to document URL).
The URN attribute is used to check if the desired object is
present in a cache under a different URL. This will be a common
case for images which are frequently copied around. The MD attribute
specifies a message digest such as MD5 for the linked object and is
needed to ensure someone hasn't tampered with a linked document.
-->
<!DOCTYPE HTML [
<!ENTITY % HTML.Version
"-//IETF//DTD HTML 3.0//EN//"
-- Typical usage:
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 3.0//EN//">
<html>
...
</html>
--
>
<!--================== Flags for Marked Sections ==========================-->
<!ENTITY % HTML.Recommended "IGNORE"
-- Certain features of the language are necessary for compatibility
with widespread usage, but they may compromise the structural
integrity of a document. This feature test entity enables
a more prescriptive document type definition that eliminates
the above features.
-->
<![ %HTML.Recommended [
<!ENTITY % HTML.Deprecated "IGNORE">
]]>
<!ENTITY % HTML.Deprecated "INCLUDE"
-- Certain features of the language are necessary for compatibility
with earlier versions of the specification, but they tend
to be used an implemented inconsistently, and their use is
deprecated. This feature test entity enables a document type
definition that eliminates these features.
-->
<!--================== Imported Names =====================================-->
<!ENTITY % Content-Type "CDATA"
-- meaning a MIME content type, as per RFC1521
-->
<!ENTITY % HTTP-Method "GET | POST"
-- as per HTTP specification
-->
<!ENTITY % URI "CDATA"
-- The term URI means a CDATA attribute
whose value is a Uniform Resource Identifier,
as defined by
"Uniform Resource Identifiers" by Tim Berners-Lee
aka http://info.cern.ch/hypertext/WWW/Addressing/URL/URI_Overview.html
aka RFC 1630
Note that CDATA attributes are limited by the LITLEN
capacity (1024 in the current version of html.decl),
so that URIs in HTML have a bounded length.
-->
<!ENTITY % FLOAT "CDATA" -- floating point numbers (not in SGML) -->
<!ENTITY % SHAPE "CDATA"
-- Shape of hotzone in image.
All coordinates are assumed to be numbers in the range 0 to 1
and interpreted as fractional width/height and measured from
the top left corner of the associated image.
The attribute value is a string taking one of the following forms:
"circle x, y, r"
(x, y) define the center and r the radius.
"rect x, y, w, h"
(x, y) defines upper left, and w and h the width and height.
"polygon n : x1, y1, x2, y2, ..."
n is the number of distinct points in the polygon, and is
followed by n pairs of x, y coordinates. The polygon is
closed by a line linking the n'th point to the first.
Intersecting polygons use the non-zero-winding-number
rule to determine if a point lies inside the polygon.
--
>
<!-- 3.0 Parameter Entities -->
<!ENTITY % heading "H1|H2|H3|H4|H5|H6">
<![ %HTML.Deprecated [
<!ENTITY % list "UL | OL | DIR | MENU">
<!ENTITY % blockquote "BLOCKQUOTE | BQ">
<!ENTITY % preformatted "PRE | XMP | LISTING">
]]>
<!ENTITY % list "UL | OL">
<!ENTITY % blockquote "BQ">
<!ENTITY % preformatted "PRE">
<!-- The style attribute is used to subclass HTML elements for
rendering purposes, when used with style sheets, e.g. DSSSL lite -->
<!ENTITY % attrs -- common attributes for elements --
'id ID #IMPLIED -- as target for hrefs (link ends) --
lang CDATA "en_us" -- ISO languages, e.g. en_uk, fr, ... --
class NMTOKEN #IMPLIED -- for subclassing elements --'>
<!-- SGML standard forces different NAMES for all attribute values
in the same element, regardless of the attribute name! As a result
CDATA is used for CLEAR attribute to avoid clash with ALIGN attribute.-->
<!ENTITY % needs -- Attributes for controlling text flow. Used in headers
and other elements to guarantee sufficient room --
'clear CDATA "no" -- (left|right|all|no) move down past figures --
needs CDATA #IMPLIED -- minimum width needed in em"s or pixels --
-- e.g. "40 em" or "100 pixels" --'>
<!--
The following attributes are included where ever a URL can be given:
base the id of a <BASE> element for use in resolving relative links
this defaults to the HTML 2.0 definition.
url location independent name (uniform resource name), and useful
for checking local caches for copies of objects with different URLs
md message digest e.g. md="md5:jV2OfH+nnXHU8bnkPAad/mSQlTDZ"
where the digest is base64 encoded and preceded by a prefix
denoting the algorithm (in this case MD5).
-->
<!ENTITY % url.link -- Attributes associated with URL based links --
"base IDREF #IMPLIED -- which <BASE> to resolve relative links --
urn CDATA #IMPLIED -- location independent name for object --
md CDATA #IMPLIED -- message digest for linked object --">
<!--================ Character mnemonic entities ==========================-->
<!-- The HTML list of Latin-1 entities includes the full range
of characters in widely available Latin-1 fonts, and as such
is a mixture of ISOlat1 and other ISO publishing symbols -->
<!ENTITY % HTMLlat1 PUBLIC
"-//IETF//ENTITIES Added Latin 1 for HTML//EN">
%HTMLlat1;
<!--================ Entities for special symbols =========================-->
<!ENTITY emsp SDATA "[emsp ]" -- em space -->
<!ENTITY ensp SDATA "[ensp ]" -- en space (1/2-em) -->
<!ENTITY mdash SDATA "[ndash ]" -- em dash -->
<!ENTITY ndash SDATA "[ndash ]" -- en dash (1/2-em) -->
<!ENTITY nbsp SDATA "[nbsp ]" -- non breaking space -->
<!ENTITY shy SDATA "[shy ]" -- soft hyphen -->
<!ENTITY copy SDATA "[copy ]" -- copyright sign -->
<!ENTITY trade SDATA "[trade ]" -- trade mark sign -->
<!ENTITY reg SDATA "[reg ]" -- registered sign -->
<!--================ Entities for standard icons ==========================-->
<!-- a range of standard icons such as &folder; for use
in speeding up display of directory listings etc. -->
<!ENTITY % HTMLicons PUBLIC
"-//IETF//ENTITIES icons for HTML//EN">
%HTMLicons;
<!--================ Entities for math symbols ============================-->
<!-- ISO subset chosen for use with the widely available Adobe math font -->
<!ENTITY % HTMLmath PUBLIC
"-//IETF//ENTITIES Math and Greek for HTML//EN">
%HTMLmath;
<!--=================== Text Markup =======================================-->
<!ENTITY % font " U | S | TT | B | I | BIG | SMALL">
<!ENTITY % phrase "EM | STRONG | CODE | SAMP | KBD | VAR | CITE">
<!ENTITY % misc "Q | LANG | AU | DFN | PERSON | ACRONYM | ABBREV">
<!ENTITY % special "TAB | MATH | A | IMG | BR | FN">
<!ENTITY % notmath "%font | %phrase | %special | %misc">
<!ENTITY % text "#PCDATA | SUB | SUP | %notmath">
<!ENTITY % pre.content "#PCDATA | A | IMG | HR | BR | Q | LANG | %font | %phrase">
<!ELEMENT (%font|%phrase|%misc) - - (%text)+>
<!ATTLIST (%font|%phrase|%misc) %attrs;>
<!-- Subscripts and superscripts. The ALIGN attribute is used for math -->
<!ELEMENT (SUB|SUP) - - (%text)+>
<!ATTLIST (SUB|SUP)
%attrs;
align (left|center|right) #IMPLIED
>
<!-- Forced line break. Use ALIGN attribute to align text before line break -->
<!ELEMENT BR - O EMPTY>
<!ATTLIST BR
%attrs;
align (left|center|right|justify) #IMPLIED
%needs; -- for control of text flow --
>
<!-- Named left, center and right tab stops (independent of '\t' char) -->
<!ELEMENT TAB - O EMPTY>
<!ATTLIST TAB
id ID #IMPLIED -- defines named tab stop --
to IDREF #IMPLIED -- jump to named tab stop --
before NUMBER 0 -- em units before new tab stop --
after NUMBER 0 -- em units after new tab stop --
center (center) #IMPLIED -- center following text --
right (right) #IMPLIED -- right-align following text --
>
<!--================== Link Markup ========================================-->
<!--
With HTML 3.0 you can use ID attributes on most elements for named
link ends. The use of the NAME attribute on anchors is deprecated.
Do we want to support arbitrary elements for link starts? This would
involve adding HREF and related attributes to most elements.
-->
<![ %HTML.Deprecated [
<!ENTITY % linkName "name CDATA #IMPLIED -- named link end --">
]]>
<!ENTITY % linkName "">
<!ENTITY % linkType "NAME"
-- A list of these will be specified at a later date.
They are used
a) by stylesheets to control how collections of
html nodes are rendered into printed documents
b) for document specific toolbars/menus
c) for hypertext paths or guided tours,
with REL=NODE and REL=PATH.
d) to make a link to a style sheet, e.g. rel=style
(used only with the LINK element).
-->
<!ENTITY % linkExtraAttributes -- URN moved to %url.link --
"rel %linkType #IMPLIED -- forward relationship type --
rev %linkType #IMPLIED -- reversed relationship type
to referent data --
title CDATA #IMPLIED -- advisory only --
methods NAMES #IMPLIED -- supported public methods of the object:
TEXTSEARCH, GET, HEAD, ... --
">
<![ %HTML.Deprecated [
<!ENTITY % A.content "(%heading|%text)+">
]]>
<!ENTITY % A.content "(%text)+">
<!ELEMENT A - - %A.content -(A)>
<!ATTLIST A
%attrs;
href %URI; #IMPLIED
%url.link; -- standard link attributes --
%linkName; -- name attribute is deprecated; use ID instead --
shape %SHAPE; #IMPLIED -- for shaped hotzones in FIGs --
%linkExtraAttributes;
>
<!--=================== Images ============================================-->
<!-- Desired widths are used for negotiating image size
with the module responsible for painting the image. -->
<!ELEMENT IMG - O EMPTY -- Embedded image -->
<!ATTLIST IMG
%attrs;
src %URI; #REQUIRED -- URI of image to embed --
%url.link; -- standard link attributes --
alt CDATA #IMPLIED -- for display in place of image --
align (top|middle|bottom) top -- relative to baseline --
baseline NUMBER #IMPLIED -- height of baseline above image bottom --
width NUMBER #IMPLIED -- desired width in em's or pixels --
height NUMBER #IMPLIED -- desired height in em's or pixels --
units (em|pixels) pixels -- units for width and height --
ismap (ismap) #IMPLIED -- pass clicks to server --
>
<!--=================== Paragraphs=========================================-->
<!ELEMENT P - O (%text)+>
<!ATTLIST P
%attrs;
align (left|center|right|justify) #IMPLIED
%needs; -- for control of text flow --
nowrap (nowrap) #IMPLIED -- disable wordwrap --
nofold (nofold) #IMPLIED -- disable space folding --
>
<!--=================== Headings, Titles, Sections ========================-->
<!ELEMENT HR - O EMPTY -- customizable horizontal rule -->
<!ATTLIST HR
align (left|center|right) #IMPLIED
width NUMBER 100 -- % width of current margins --
src %URI; #IMPLIED -- URI of custom rule graphic --
%url.link; -- standard link attributes --
%needs; -- for control of text flow --
>
<!ELEMENT ( %heading ) - - (%text;)+>
<!ATTLIST ( %heading )
%attrs;
align (left|center|right|justify) #IMPLIED
%needs; -- for control of text flow --
nowrap (nowrap) #IMPLIED -- disable wordwrap --
nofold (nofold) #IMPLIED -- disable space folding --
>
<!ELEMENT TITLE - - (#PCDATA)
-- The TITLE element is not considered part of the flow of text.
It should be displayed, for example as the page header or
window title.
-->
<!--=================== Text Flows ========================================-->
<!ENTITY % block
"P | %list | DL
| %preformatted
| %blockquote
| FORM | ISINDEX
| TABLE | FIG | NOTE">
<![ %HTML.Recommended [
<!ENTITY % flow "((%text)* | (%block)*)">
]]>
<!ENTITY % flow "(%text | %block)*">
<!ELEMENT PRE - - (%pre.content)+>
<!ATTLIST PRE
%attrs;
width NUMBER #implied
%needs; -- for control of text flow --
>
<![ %HTML.Deprecated [
<!ENTITY % literal "CDATA"
-- special non-conforming parsing mode where
the only markup signal is the end tag
in full
-->
<!ELEMENT XMP - - %literal>
<!ELEMENT LISTING - - %literal>
<!ELEMENT PLAINTEXT - O %literal>
]]>
<!-- simple footnotes -->
<!ELEMENT FN - - (%block)+>
<!ATTLIST FN
%attrs;
>
<!--=================== Lists =============================================-->
<!ELEMENT DL - - (LH?, (DT|DD)+) -- this is perhaps too lax? -->
<!ATTLIST DL
%attrs;
%needs; -- for control of text flow --
compact (compact) #IMPLIED -- more compact style --
>
<!ELEMENT DT - O (%text)+>
<!ELEMENT DD - O %flow;>
<!ATTLIST (DT|DD)
%attrs;
%needs; -- for control of text flow --
>
<!ELEMENT (OL|UL) - - (LH?, LI+) -- should we allow a list header ? -->
<!-- sequence number style, where "local" gives numbers in local language -->
<!ENTITY % ol.li "arabic|upperalpha|loweralpha|upperroman|lowerroman|local">
<!ATTLIST OL
%attrs;
%needs; -- for control of text flow --
type (%ol.li) #IMPLIED -- rendering style for numbers --
inherit (inherit) #IMPLIED -- prefix from parent, eg "3.1.b" --
continue (continue) #IMPLIED -- don't restart sequence number --
start NUMBER #IMPLIED -- starting sequence number --
compact (compact) #IMPLIED -- reduced interitem spacing --
>
<!-- Unordered lists:
o single or multicolumn with
horizontal or vertical wrapping
o plain or bulletted list items
o bullets can be customised via:
- entities (dingbats in HTMLicons)
- external graphic via URL
- individual attributes on LI tags
-->
<!ATTLIST UL
%attrs;
%needs; -- for control of text flow --
wrap (vert|horiz|none) none -- multicolumn list style --
plain (plain) #IMPLIED -- suppress bullets --
dingbat ENTITY #IMPLIED -- dingbat entity from HTMLicons --
src (%URI;) #IMPLIED -- bullet defined by graphic --
%url.link; -- standard link attributes --
compact (compact) #IMPLIED -- reduced interitem spacing --
>
<!ELEMENT LH - O (%text;)+ -- list header -->
<!ATTLIST LH %attrs;>
<!--
For unordered lists, you can override the standard bullet with
a custom graphic specified via a URI e.g. src="splash.gif" or
a reference to one of the HTMLicons graphics e.g. dingbat=folder
The skip attribute is used with ordered lists to skip over sequence
numbers for items which have been left out of the list, e.g. skip=3
advances the sequence number past 3 omitted items.
-->
<!ELEMENT LI - O %flow; -- list item -->
<!ATTLIST LI
%attrs;
%needs; -- for control of text flow --
dingbat ENTITY #IMPLIED -- dingbat entity from HTMLicons --
src (%URI;) #IMPLIED -- custom bullet graphic --
%url.link; -- standard link attributes --
skip NUMBER 0 -- skip seq nums for missing items --
>
<!-- DIR and MENU are now subsumed by UL with type=plain. Use the
wrap attribute to control wrapping style for multicolumn lists -->
<![ %HTML.Deprecated [
<!ELEMENT (DIR|MENU) - - (LI)+ -(%block)>
<!ATTLIST (DIR|MENU)
compact (compact) #IMPLIED>
]]>
<!--=================== Document Body =====================================-->
<!--
Note that multiple body sections are permitted and that you can specify
whether the section floats (as hitherto) or is fixed to one of the window
sides. How should the extent of fixed body sections be specified?
The idea here is to allow authors to divide the browser window up into
one or more fixed panes which don't scroll with the rest of the document.
These can be used for navigation elements, for copyright and security
messages (e.g. company confidential) or for brand messages/icons.
-->
<![ %HTML.Recommended [
<!ENTITY % body.content "(%heading|%block|HR|ADDRESS)*"
-- <h1>Heading</h1>
<p>Text ...
is preferred to
<h1>Heading</h1>
Text ...
-->
]]>
<!ENTITY % body.content "(%heading | %text | %block | HR | ADDRESS)*">
<!ELEMENT BODY O O %body.content>
<!ATTLIST BODY
%attrs;
position (left|right|top|bottom|float) float
background %URI; #IMPLIED -- texture tile for document background --
>
<!ELEMENT (%blockquote) - - %body.content>
<!ATTLIST (%blockquote)
%attrs;
%needs; -- for control of text flow --
>
<!ENTITY % address.content "((%text;)* | P*)">
<!ELEMENT ADDRESS - - %address.content>
<!ATTLIST ADDRESS
%attrs;
%needs; -- for control of text flow --
>
<!--================ Forms ===============================================-->
<!--
As HTML 2.0 plus a few extensions:
a) A RANGE control which varies between pair of values
specified with the size attribute, e.g. SIZE="1, 10"
b) FILE widget for uploading one or more files to a server
c) SCRIBBLE on image widget that sends the "ink" to the server
d) AUDIO widget for playing and recording audio samples
e) SUBMIT/RESET buttons can now be customised with an image.
This subsumes the IMAGE type which is now deprecated.
f) Graphical SELECTion menus are now supported, using
the new SHAPE attribute on OPTION elements.
Further extensions are in the pipeline (e.g. table entry,
multiple data formats for textarea fields and client-side
scripts with custom widgets) but will have to wait until
the backlog of implementation work diminishes.
-->
<!ELEMENT FORM - - %body.content -(FORM) +(INPUT|SELECT|TEXTAREA)>
<!ATTLIST FORM
action %URI #REQUIRED
method (%HTTP-Method) GET
enctype %Content-Type; "application/x-www-form-urlencoded"
>
<![ %HTML.Deprecated [
<!ENTITY % InputType "(TEXT | PASSWORD | CHECKBOX | RADIO | SUBMIT | RESET
| RANGE | AUDIO | FILE | SCRIBBLE | HIDDEN | IMAGE)">
]]>
<!ENTITY % InputType "(TEXT | PASSWORD | CHECKBOX | RADIO | SUBMIT | RESET
| RANGE | AUDIO | FILE | SCRIBBLE | HIDDEN)">
<!ELEMENT INPUT - O EMPTY>
<!ATTLIST INPUT
%attrs;
type %InputType TEXT
name CDATA #IMPLIED -- required for all but submit and reset --
value CDATA #IMPLIED
src %URI #IMPLIED -- for fields with background images --
%url.link; -- standard link attributes --
checked (checked) #IMPLIED -- for radio buttons and check boxes --
size CDATA #IMPLIED -- like NUMBERS,
but delimited with comma, not space --
maxlength NUMBER #IMPLIED
align (top|middle|bottom) top -- relative to baseline --
>
<!-- SRC, BASE and URN attributes added for graphical menus -->
<!ELEMENT SELECT - - (OPTION+) -(INPUT|TEXTAREA|SELECT)>
<!ATTLIST SELECT
%attrs;
name CDATA #REQUIRED
size NUMBER #IMPLIED
multiple (multiple) #IMPLIED
src %URI #IMPLIED -- for graphical selection menus --
%url.link; -- standard link attributes --
>
<!ELEMENT OPTION - O (#PCDATA)>
<!ATTLIST OPTION
%attrs;
selected (selected) #IMPLIED
value CDATA #IMPLIED -- default to element content --
shape %SHAPE; #IMPLIED -- for graphical selection menus --
>
<!ELEMENT TEXTAREA - - (#PCDATA) -(INPUT|TEXTAREA|SELECT)>
<!ATTLIST TEXTAREA
%attrs;
name CDATA #REQUIRED
rows NUMBER #REQUIRED
cols NUMBER #REQUIRED
>
<!--======================= Captions ======================================-->
<!ELEMENT CAPTION - - (%text;)+ -- table or figure caption -->
<!ATTLIST CAPTION
%attrs;
align (top|bottom) #IMPLIED
>
<!--======================= Tables ========================================-->
<!--
Tables and figures can be aligned in several ways:
bleedleft flush left with the left (window) border
left flush left with the left text margin
center centered (text flow is disabled for this mode)
right flush right with the right text margin
bleedright flush right with the right (window) border
justify when applicable the table/figure should stretch
to fill space between the text margins
Note: text will flow around the table or figure if the browser
judges there is enough room and the alignment is not centered
or justified. The table or figure may itself be part of of the
text flow around some earlier figure. You can in this case use
the clear or needs attributes to move the new table or figure
down the page beyond the obstructing earlier figure. Similarly,
you can use the clear or needs attributes with other elements
such as headers and lists to move them further down the page.
-->
<!ENTITY % block.align
"align (bleedleft|left|center|right|bleedright|justify) center">
<!--
The HTML 3.0 table model has been chosen for its simplicity
and the ease in writing filters from common DTP packages.
By default the table is automatically sized according to the
cell contents and the current window size. Specifying the columns
widths using the colspec attribute allows browsers to start
displaying the table without having to wait for last row.
The colspec attribute is a list of column widths and alignment
specifications. The columns are listed from left to right with a
letter followed by a number, e.g. COLSPEC="L20C8L40". The letter
is L for left, C for center and R for right alignment of cell
contents. The number specifies the width in em's, pixels or as
a fractional value of the table width, as according to the
associated units attribute. This approach is more compact than
used with most SGML table models and chosen to speed hand entry.
To assist with rendering to speech, row and column headers
can be given short names using the AXIS attribute. The AXES
attribute is used to explicitly specify the row and column
names for use with each cell. Otherwise browsers can follow
up columns and left along rows (right for some languages)
to find the corresponding header cells.
Table content model: To avoid wide cells, Braille needs some
kind of note element. The cell content is moved to a note,
and a reference to this is placed in the cell in question.
Couldn't we just use foot notes (FN) here?
To assist with formatting tables to paged media, we probably
want to differentiate leading and trailing rows that are to
be duplicated when splitting tables across page boundaries.
A possible content model is:
<!ELEMENT TABLE - - (CAPTION?, (TR* | (THEAD, TBODY, TFOOT?)))>
<!ELEMENT (THEAD|TFOOT) - O TR*>
Conventional scrolling browsers simply ignore THEAD and TFOOT.
Paged browsers insert TFOOT rows at the bottom of the current
page and THEAD rows at the top of the new page, followed by the
remaining rows from TBODY.
-->
<!ELEMENT TABLE - - (CAPTION?, TR*) -- mixed headers and data -->
<!ATTLIST TABLE
%attrs;
border (border) #IMPLIED -- draw borders --
colspec CDATA #IMPLIED -- column widths and alignment --
units (em|pixels|relative) em -- units for column widths --
%block.align; -- horizontal alignment --
%needs; -- for control of text flow --
>
<!ENTITY % cell "TH | TD">
<!--
Browsers should tolerate an omission of the first <TR>
tag as it is implied by the context. Missing trailing
<TR>s implied by rowspans should be ignored.
The alignment attributes act as defaults for rows
overriding the colspec attribute and being in turn
overridden by alignment attributes on cell elements.
-->
<!ELEMENT TR - O (%cell)* -- acts like row separator -->
<!ATTLIST TR
%attrs;
align (left|center|right|justify) #IMPLIED
valign (top|middle|bottom) top -- vertical alignment -->
<!--
Note that table cells can include nested tables.
Missing cells are considered to be empty, while
missing rows should be ignored.
-->
<!ELEMENT (%cell) - O %body.content>
<!ATTLIST (%cell)
%attrs;
colspan NUMBER 1 -- columns spanned --
rowspan NUMBER 1 -- rows spanned --
align (left|center|right|justify) #IMPLIED
valign (top|middle|bottom) top -- vertical alignment --
nowrap (nowrap) #IMPLIED -- don't wrap words --
axis CDATA #IMPLIED -- axis name, defaults to element content --
axes CDATA #IMPLIED -- comma separated list of axis names --
>
<!--====================== Figures ========================================-->
<!--
The element contains text for use in non-graphical displays. Note that
you can use the shape attribute in anchors to specify hotzones on images.
This provides for local processing of pointer clicks and a unified method
for dealing with graphical and non-graphical displays.
Text is flowed around figures when the figure is left or right aligned.
You can request the browser to move down until there is enough room for
the next element, see the CLEAR and NEED attributes (in %needs)
Figures offer a path towards embedding arbitrary information formats
via some kind of OLE/OpenDoc mechanism.
-->
<!ELEMENT FIG - - (OVERLAY*, CAPTION?, %flow;)>
<!ATTLIST FIG
%attrs;
%needs; -- for control of text flow --
src %URI; #REQUIRED -- URI of document to embed --
%url.link; -- standard link attributes --
%block.align; -- horizontal alignment --
width NUMBER #IMPLIED -- desired width in units --
height NUMBER #IMPLIED -- desired height in units --
hspace NUMBER #IMPLIED -- whitespace above/below fig in units --
vspace NUMBER #IMPLIED -- whitespace to left/right in units --
ismap (ismap) #IMPLIED -- pass clicks to server --
units (em|pixels) pixels -- specifies units as em's or pixels --
>
<!--
Figure overlays can be drawn immediately or held in a
sequence for subsequent display. When combined with local
caching, overlays provide a cheap way of modifying a larger
base image sent as part of a previous page.
-->
<!ELEMENT OVERLAY - O EMPTY -- image overlay -->
<!ATTLIST OVERLAY
seq NUMBER 0 -- display order, 0 is immediate --
src %URI; #REQUIRED -- URI of image overlay --
%url.link; -- standard link attributes --
x %FLOAT; 0 -- offset (0 - 1.0) from left --
y %FLOAT; 0 -- offset (0 - 1.0) from top --
width NUMBER #IMPLIED -- desired width in units --
height NUMBER #IMPLIED -- desired height in units --
units (em|pixels) pixels -- specifies units as em's or pixels --
ismap (ismap) #IMPLIED -- pass clicks to server --
>
<!--======================== Notes ========================================-->
<!ELEMENT NOTE - - %flow; -- admonishment -->
<!ATTLIST NOTE
%attrs;
src %URI; #IMPLIED -- URI of custom graphic --
%url.link; -- standard link attributes --
role (Simple|Note|Caution|Warning) Simple
%needs; -- for control of text flow --
>
<!--======================== Math ========================================-->
<!-- Use     etc for greater control of spacing. -->
<!-- Subscripts and Superscripts
<SUB> and <SUP> are used for subscripts and superscripts.
i j
X <SUP>i</SUP>Y<SUP>j</SUP> is X Y
i.e. the space following the X disambiguates the binding.
The align attribute can be used for horizontal alignment,
e.g. to explicitly place an index above an element:
i
X<sup align=center>i</sup> produces X
Short references are defined for superscripts, subscripts and boxes
to save typing when manually editing HTML math, e.g.
x^2^ is mapped to x<sup>2</sup>
y_z_ is mapped to y<sub>z</sub>
{a+b} is mapped to <box>a + b</box>
Note that these only apply within the MATH element and can't be
used in normal text!
-->
<!ENTITY REF1 STARTTAG "SUP">
<!ENTITY REF2 ENDTAG "SUP">
<!ENTITY REF3 STARTTAG "SUB">
<!ENTITY REF4 ENDTAG "SUB">
<!ENTITY REF5 STARTTAG "BOX">
<!ENTITY REF6 ENDTAG "BOX">
<!USEMAP MAP1 MATH>
<!USEMAP MAP2 SUP>
<!USEMAP MAP3 SUB>
<!USEMAP MAP4 BOX>
<!SHORTREF MAP1 "^" REF1
"_" REF3
"{" REF5 >
<!SHORTREF MAP2 "^" REF2
"_" REF3
"{" REF5 >
<!SHORTREF MAP3 "_" REF4
"^" REF1
"{" REF5 >
<!SHORTREF MAP4 "}" REF6
"^" REF1
"_" REF3
"{" REF5 >
<!--
The inclusion of %formula and exclusion of %text is used here
to alter the content model for the SUB and SUP elements so as
to limit them to formulae rather than general text elements.
Special entities %math and %notmath are needed to avoid attempting
to include and exclude the same elements (or #PCDATA).
-->
<!ENTITY % math "BOX|ABOVE|BELOW|ROOT|ARRAY|SUB|SUP">
<!ENTITY % formula "#PCDATA|%math">
<!ELEMENT MATH - - (#PCDATA)* -(%notmath) +(%math)>
<!ATTLIST MATH
id ID #IMPLIED
model CDATA #IMPLIED>
<!-- The BOX element acts as brackets. Delimiters are optional and
stretch to match the height of the box. The OVER element is used
when you want a line between numerator and denominator. This line
is suppressed with the alternative ATOP element.
1 + X
<BOX>1 + X<OVER>Y</BOX> is _______
Y
a + b
<BOX>a + b<ATOP>c - d</BOX> is
c - d
<BOX delim="(]">a</BOX> is (a]
<BOX delim="|| ||">a</BOX> is || a ||
The delimiters are represented using the LEFT and RIGHT
elements as in:
<BOX>[<LEFT>x + y<RIGHT>]</BOX> is [ x + y ]
This is useful with definite integrals when you want the integral
sign to stretch to match the integrand, e.g.
<BOX>∫<SUB>0</SUB><SUP>N</SUP><LEFT>f(x) dx</BOX>
Note the complex content model for BOX is a work around
for the absence of support by SGML for infix operators.
You can get oversize delimiters with the SIZE attribute.
-->
<!ELEMENT BOX - - ((%formula)*, (LEFT, (%formula)*)?,
((OVER|ATOP), (%formula)*)?,
(RIGHT, (%formula)*)?)>
<!ATTLIST BOX
delim CDATA #IMPLIED -- optional stretchy delimiters --
size (normal|medium|large|huge) normal -- oversize delims -->
<!ELEMENT (OVER|ATOP|LEFT|RIGHT) - O EMPTY>
<!ATTLIST OVER symbol ENTITY #IMPLIED>
<!-- Horizontal line drawn ABOVE contents
The symbol attribute allows authors to
supply an entity name for an arrow symbol etc.
-->
<!ELEMENT ABOVE - - (%formula)+>
<!ATTLIST ABOVE symbol ENTITY #IMPLIED>
<!-- Horizontal line drawn BELOW contents
The symbol attribute allows authors to
supply an entity name for an arrow symbol etc.
-->
<!ELEMENT BELOW - - (%formula)+>
<!ATTLIST BELOW symbol ENTITY #IMPLIED>
<!-- Roots - default to square root. This model may be
extended in future to use explicit radix and radicand
elements, to allow markup to be used within the radix -->
<!ELEMENT ROOT - - (%formula)*>
<!ATTLIST ROOT root CDATA #IMPLIED -- e.g. "3" for cube root -->
<!-- LaTeX like arrays. The coldef attribute specifies
a single letter for each column, which also determines
how the column should be aligned, e.g. coldef"=ccc"
"l" left
"c" center
"r" right
The DELIM attribute behaves the same as for BOX.
When the LABELS attribute is present, the array
is displayed with the first row and the first
column as labels displaced from the other elements.
In this case, the first element of the first row
should normally be left blank.
Use &vdots; &vdots; and &ddots; for vertical, horizontal
and diagonal ellipsis dots. Use &dotfill; to fill an array
cell with horizontal dots.
-->
<!ELEMENT ARRAY - - (AROW)+>
<!ATTLIST ARRAY
coldef CDATA #REQUIRED
delim CDATA #IMPLIED -- optional stretchy delimiters --
labels (labels) #IMPLIED -- TeX's \bordermatrix style -->
<!ELEMENT AROW - O (ITEM)*>
<!ELEMENT ITEM - O (%formula)*>
<!ATTLIST ITEM
align CDATA #IMPLIED -- overide coldef alignment --
colspan NUMBER 1 -- merge columns as per TABLE --
rowspan NUMBER 1 -- merge rows as per TABLE -->
<!--================ Document Head ========================================-->
<![ %HTML.Deprecated [
<!ENTITY % head.nextid "& NEXTID?">
]]>
<!ENTITY % head.nextid "">
<!ENTITY % head.content "TITLE & ISINDEX? & BASE? & STYLES?
& META* & LINK* %head.nextid">
<!ELEMENT HEAD O O (%head.content)>
<!ELEMENT LINK - O EMPTY>
<!ATTLIST LINK
href %URI #REQUIRED
%linkExtraAttributes; >
<!ELEMENT ISINDEX - O EMPTY>
<!ATTLIST ISINDEX
href %URI #IMPLIED -- server handling queries --
prompt CDATA #IMPLIED -- prompt message -->
<!--
Relative references reduce the maintenance burden when moving
a set of related nodes to a new location. This isn't quite
enough though, as sometimes you will want to move say the
html nodes, but not the image nodes. In such cases, you would
be forced to alter each of the links to the images. What is
needed is a way of explicitly stating a scope for resolving
a group of relative links. The BASE element has been extended
to allow its use in defining multiple scopes.
<BASE id=images "http://foo.com/images">
...
<IMG SRC="bar.gif" base=images>
-->
<!ELEMENT BASE - O EMPTY>
<!ATTLIST BASE
id ID #IMPLIED
href %URI; #REQUIRED
>
<![ %HTML.Deprecated [
<!ELEMENT NEXTID - O EMPTY>
<!ATTLIST NEXTID N CDATA #REQUIRED>
]]>
<!ELEMENT META - O EMPTY -- Generic Metainformation -->
<!ATTLIST META
http-equiv NAME #IMPLIED -- HTTP response header name --
name NAME #IMPLIED -- metainformation name --
content CDATA #REQUIRED -- associated information --
>
<!--
A style sheet can be associated with the document using the
LINK element, e.g. <LINK rel=stylesheet href="housestyle.dsssl">.
Style overrides can be placed in the document head using the
STYLES element, e.g.
<styles notation=dsssl-lite>
<style id=bigcaps>(dsssl-lite-stuff)
<style id=para17>(more dsssl-lite-stuff)
</styles>
Later on in the document you can use:
<h2 style=bigcaps>Header with bigger than normal capitals</h2>
<p style=para17>A paragraph with a unique style of its own
...
-->
<!ENTITY % style-notations "dsssl-lite">
<!NOTATION dsssl-lite PUBLIC "-//ISO//DSSSL Lite ??//EN//">
<!ELEMENT STYLES - - (STYLE*)>
<!ATTLIST STYLES
notation NOTATION (%style-notations;) #REQUIRED
>
<!ELEMENT STYLE - O (#PCDATA)>
<!ATTLIST STYLE id NMTOKEN #REQUIRED>
<!--================ Document Structure ===================================-->
<!ENTITY % html.content "HEAD, BODY+">
<!ELEMENT HTML O O (%html.content)>
<!ENTITY % version.attr 'VERSION CDATA #FIXED "%HTML.Version;"'>
<!-- suggested roles are: TOC, DOC, DOCPART, HITLIST, DIALOG -->
<!ATTLIST HTML
%version.attr;-- report DTD version to application --
urn CDATA #IMPLIED -- Universal resource name for this document --
role NMTOKEN #IMPLIED -- role of this document, eg table of contents --
>
<!-- The END -->
]>