Attempt at HTML 2.1 (tables)

Bert Bos (bert@let.rug.nl)
Thu, 22 Jun 95 09:31:28 EDT

The current consensus seems to be that between HTML 2.0 and 3.0 there
ought to be small, incremental steps, so that eventually nothing
controversial remains for HTML 3.0.

So here is my attempt at defining such a small, incremental step. The
only thing it does is to allow a TABLE element everywhere that a P is
allowed, bringing HTML to version 2.1.

The table syntax is very simple, with even less attributes than the
ones in HTML 3.0, but that may well be enough for HTML.

Would this be suitable as an Internet Draft?

Bert

Jun 22 15:21 1995 Tabular material in HTML Page 1

.. Bert Bos
.. June 21, 1995
..

Tabular material in HTML

(HyperText Markup Language 2.1)

Status of this Memo

[...]

Abstract

This memo defines a document format called HyperText Markup Language
2.1 (HTML 2.1), a format for storing hypertext documents that is
portable across platforms. It is a superset of HTML 2.0 (see ????);
the addition consists of syntax to allow the encoding of tabular
material. This memo only describes the additions.

Like HTML 2.0, this format is an application of SGML (ISO Standard
8879:1986) and its syntax is defined with a formal grammar, a
so-called Document Type Definition (DTD), which is included as an
appendix.

0. Structure of this memo

The main part of the memo explains the TABLE element and its
components, and ends with a description of the differences between
HTML 2.0 and HTML 2.1. Apart from these differences, HTML 2.1 is the
same as HTML 2.0 and one should refer to ???? for its definition.

The appendix contains the complete DTD (Document Type Definition, as
defined by ISO IS 8879:1986). Although it differs very little from
the HTML 2.0 DTD, it is included in its entirety for ease of
reference.

Familiarity with HTML 2.0 is assumed.

1. Terms

The technical terms used in this text are defined either in ???? or

Jun 22 15:21 1995 Tabular material in HTML Page 2

in ISO IS 8879:1986 (SGML). Some of the most important ones are
explained below:

Attribute

An attribute is a key/value pair associated with an `element'
(see below). The `DTD' (see below) defines which keys and
values each element may/must have.

DTD, Document Type Definition

A formal grammar for a document format, using the notation
defined in ISO IS 8879:1986 (SGML).

Element

(SGML) A hierarchical part of a document, starting with a start
`tag' (see below) and ending with an end tag, although either or
both tags may be absent from the document in some cases. An
element may contain text and/or other elements.

Tag

(SGML) Descriptive markup. There are two kinds: start-tags and
end-tags. Tags mark the start and end of elements. A start-tag
consists of the character `<' (left angle bracket), followed by
the generic identifier of some element, optional attributes, and
the character '>' (right angle bracket). An end-tag consists of
the characters `</' (left angle bracket, forward slash),
followed by the generic identifier of an element, followed by
`>' (right angle bracket).

UA, User Agent

A piece of software that processes HTML 2.1 on behalf of a
user. It may be a browser that displays formatted documents on
screen, a dedicated editor, or any other software that acts on
the specific information encoded in HTML 2.1.

2. The TABLE element

The TABLE element contains a table, consisting of an optional
caption and one or more rows of header and data cells. It can occur
in the document everywhere that a P (paragraph) can, including
inside a cell of another table. Tables are usually displayed with
whitespace above and below to separate them from the previous and
next paragraphs.

Jun 22 15:21 1995 Tabular material in HTML Page 3

A TABLE element contains an optional CAPTION element, followed by
one or more TR elements.

The rules for determining how many columns a table has can be rather
subtle, because cells can span several rows and columns. Section 6
contains an explanation of the layout algorithm.

The table and the elements it contains have attributes that specify
how the table should be layed out. However, these attributes should
be taken as hints only, since the UA may have other, better means of
establishing a layout (style sheets, for example).

Here is an example of a typical table. End-tags are omitted and
attributes are abbreviated where possible:

<TABLE BORDER COLWIDTH="2 1 1">
<CAPTION>Start and ending dates
<TR><TH><TH ROWSPAN=2 MIDDLE>names <TH COLSPAN=2>dates
<TR><TH>start <TH>end
<TR><TD>ABC project <TD>Jan 7 <TD>Mar 8
<TR><TD>1st review <TD>Mar 1 <TD>Apr 7
<TR><TD>ABC II <TD>Apr 1 <TD> Aug 15
<TR><TD>2nd review <TD>Jul 15 <TD>Sep 15
</TABLE>

Which could be presented approximately like this:

+-----------------+-------------------+
| | dates |
| names +---------+---------+
| | start | end |
+-----------------+---------+---------+
| ABC project | Jan 7 | Mar 8 |
+-----------------+---------+---------+
| 1st review | Mar 1 | Apr 7 |
+-----------------+---------+---------+
| ABC II | Apr 1 | Aug 15 |
+-----------------+---------+---------+
| 2nd review | Jul 15 | Sep 15 |
+-----------------+---------+---------+

The TABLE element can have several attributes:

BORDER

This attribute can have only one value: BORDER. Under the rules
of SGML, the expression `BORDER=BORDER' may be abbreviated to

Jun 22 15:21 1995 Tabular material in HTML Page 4

just `BORDER'. If this attribute is present, the table is meant
to be presented with horizontal and vertical rules between the
rows and columns and around the whole table. If it is absent,
the table is meant to be shown without such rules.

COMPACT

This attribute also has only one possible value: COMPACT. If it
is present, a UA should present the table with less space
between the cells than when it is absent.

COLWIDTH

The value of this attribute must be a list of one or more
positive numbers, separated by spaces. Each number represents a
column of the table and the number specifies the width of the
column relative to other columns. I.e., if one columns has the
number p and another q, then the former column is p/q times as
wide as the latter. E.g., `COLWIDTH="2 2 3"' says that columns 1
and 2 have the same width and column 3 is 50% wider.

If the table has more columns than there are numbers in
COLWIDTH, the last number is repeated as often as needed.

Conversely, if there are more numbers than columns, the excess
numbers are ignored.

If the COLWIDTH attribute is not present, the UA is free to
choose column widths.

COLALIGN

The value of COLALIGN is a list of one or more letters from the
set L, R, C and D (upper or lower case). Whitespace is allowed
but meaningless. Each letter represents a column and specifies
how data in that column is to be aligned.

An L means that data is to be put against the left edge of its
cell, if possible. An R puts the data against the right edge. A
C centers the data. A D causes all decimal points in the column
to line up.

Note that each row (TR element) can override the COLALIGN
attribute for cells in that row and each cell can also override
the alignment for that cell only. Note further that a cell that
contains other elements instead of just text may not be amenable
to alignment at all.


Jun 22 15:21 1995 Tabular material in HTML Page 5

If there are more columns than letters, the last letter is
repeated as often as needed. If there are more letters than
columns, the excess letters are ignored.

If the COLALIGN attribute is absent, the alignment of each cell
depends on its type (TD or TH, see below).

DP

The value of DP (for `Decimal Point') must be a single letter,
which assumes the role of the decimal point in all cells in the
table that have alignment of type `D'.

HTML 2.1 has no way of specifying a language, but the UA may
have its own ways of finding a default for DP. If not, the
default should be `.' (a dot).

Note that TR, TH and TD elements may also have a DP attribute,
that overrides the DP of TABLE for the scope of the respective
elements.

ROWALIGN

This attribute can have three values: TOP, MIDDLE and BOTTOM
(case is not important). As with BORDER and COMPACT, the
expression `ROWALIGN=TOP' (or middle or bottom) may be
abbreviated to just `TOP' (or middle or bottom).

The contents of each cell are aligned vertically with the top,
middle or bottom of their cell, depending on this attribute. If
the attribute is absent, the default is `top'. Note that
individual rows and cells can override the alignment within
their scope.

3. The CAPTION element

The CAPTION element is used to label a table. It can contain only
text, including phrase-level elements, such as EM, A and BR. The UA
is free to put the caption above, below, or at the side of the
table.

4. The TR element

The TR element contains zero or more TD or TH elements, viz. for
those cells that have their top left corner in this row. See below
under TH and TD for an explanation of the exact layout of cells

Jun 22 15:21 1995 Tabular material in HTML Page 6

within rows.

The TR element can have the following attibutes:

COLALIGN

This attribute has the same syntax and meaning as the attribute
in the TABLE element, but it applies only to the cells in this
row. If present, it overrides the COLALIGN attribute of TABLE.

DP

This attribute also has the same meaning as the attribute of
this name in TABLE. If present, it overrides the DP attribute of
TABLE for the cells within the TR element.

ROWALIGN

If present, this attribute overrides the ROWALIGN attribute of
TABLE, for the cells inside the TR element.

5. The TD and TH elements

The cells inside the table can be of two types: data (TD) or headers
(TH). The UA normally renders the two slightly differently, for
example TH elements can be centered and in bold face, TD elements
are left aligned in a normal face.

Cells can contain text as well as block-like elements, such as
paragraphs, lists and other tables.

Cells can span multiple rows and columns, thereby pushing other
cells aside. See the rules for positioning cells below.

TH and TD elements can have the following attributes:

COLSPAN

The value must be a positive number. The number specifies how
many columns this cell occupies. If the attribute is absent, the
cell will span one column (equivalent to `COLSPAN=1').

ROWSPAN

The value must be a positive number. It tells the UA how many
rows the cell occupies. If the value is greater than one, the
cell spans its own row plus the ROWSPAN - 1 rows below it. If

Jun 22 15:21 1995 Tabular material in HTML Page 7

there are fewer than ROWSPAN - 1 rows below the current one, the
cell spans as many rows as are available. If the attribute is
absent, the value is assumed to be `ROWSPAN=1'.

COLALIGN

The value must be a single letter, either L, R, C or D (upper or
lower case). An L means that the contents of the cell are to be
aligned against the left edge of the cell, an R means the right
edge, a C centers the contents horizontally, and a D aligns the
first decimal point in the contents with other decimal points in
the same column (if there is no decimal point, data is aligned
as if there was a decimal point after the last letter).

If this attribute is present, it overrides the alignment that
may have been specified for this cell in the enclosing TR or
TABLE element. If no alignment has been specified at all, a TD
cell is aligned left (`L') and a TH cell is centered (`C').

Note that a cell that contains other elements instead of just
text may not be able to be aligned.

DP

The value of DP must be a single letter, which is used to align
the contents of the cell if its alignment is of type `D'. If the
attribute is present, it overrides the DP attribute of the
enclosing TR or TABLE.

ROWALIGN

The value can be either TOP, MIDDLE or BOTTOM, meaning,
respectively that the contents are to be aligned against the top
of the cell, centered vertically, or aligned against the bottom
of the cell. If the attribute is absent, the alignment specified
in the enclosing TR or TABLE is used. If none of these exist,
the contents are aligned as if `TOP' had been specified.

AXIS

This defines an abbreviated name for a header cell, which can be
used when rendering to speech. It defaults to the cell's
content.

AXES

This is a space-separated list of axis names which together
identify the row and column headers that pertain to this

Jun 22 15:21 1995 Tabular material in HTML Page 8

cell. It is used when rendering to speech to identify the cell's
position in the table. If missing the user agent can try to
follow up columns and left along rows (right for some languages)
to find the corresponding header cells.

Note: a subheader cell may include both attributes - using AXIS
to name itself and AXES to name the parent header cell. When
data cells refer to header cells with both attributes, the
parent header cells are found by following back the head-subhead
relationships.

6. Rules for the layout of cells within a table

The rules for finding the number of rows and columns of a table and
the positions for each cell are as follows:

1. A table has as many rows as there are TR elements. That means
that if a cell spans more rows than there are TR elements, the
cell's ROWSPAN attribute is reduced to fit within the table.

2. It is not necessary to declare all cells, empty cells may be
omitted if they can be inferred from the other rules below.

3. The upper left corner of a cell is in the row in which the cell
is declared, cells span to the right (COLSPAN) and down
(ROWSPAN) from that position.

4. If a cell would overlap a cell in the same or an earlier row
(because the earlier cell spanned several rows and/or columns),
the new cell is shifted to the right inside its row until a
place is found where it fits. This may cause empty cells to be
left in the row.

5. The number of columns in the table is defined as the number of
columns in the longest row. Other, shorter rows are
automatically extended with empty cells at the right.

Here is an example of a table with several automatically inserted
empty cells:

<table border>
<tr><td rowspan=2>1<td>2<td>3<td>4<td>5
<tr><td rowspan=2>6
<tr><td colspan=2>7<td>8
</table>

which looks something like:

Jun 22 15:21 1995 Tabular material in HTML Page 9

+---+---+---+---+---+
| 1 | 2 | 3 | 4 | 5 |
| +---+---+---+---|
| | 6 | | | |
+---+ +---+---+---+
| | | 7 | 8 |
+---+---+-------+---+

Note that cell 6 starts in column 2 and cell 7 starts in column 3,
even though they are the first cells in their rows. Four empty cells
are created automatically.

If a UA displays the table in some way, it is free to use any
algorithm to compute the size of the table and hence of the columns
and rows, except that the relative width of the columns given by the
COLWIDTH attribute, if present, should be hounoured. For example, a
UA can use a multi-pass algorithm to find the maximum and minimum
width of the table and then use the minimum if the minimum is wider
than the available space or the maximum if the maximum fits, or the
available width in all other cases.

Note that the COMPACT attribute does not affect the size of the
cells, only of the space between the cells.

7. Differences between HTML 2.0 and HTML 2.1

Block structuring elements (see 5.5 in ????) include not only
paragraphs, lists and block quotes, but also tables. Among these,
tables are the only ones that may include heading elements.

A form (see 8 in ????) can contain a table, which in turn can
contain form elements. This gives considerable freedom in designing
the layout of forms, more than is possible with the PRE element.

In HTML 2.1, every element that can contain a P (paragraph) can also
contain a TABLE. Elements for which this holds are: DD, LI, BODY,
BLOCKQUOTE, and FORM.

8. Other versions of HTML 2.x

(This section is not part of the definition of HTML 2.1; it is
informational only.)

Other additions to HTML 2.0 are expected. Here is an overview of the
development of HTML that is currently being worked on.

Jun 22 15:21 1995 Tabular material in HTML Page 10

1. HTML 2.0; ready; will become an RFC in July 1995.

2. HTML 2.1, or HTML 2.0 + tables (this document); expected to
become and RFC in 1996Q1.

3. HTML 2.2, or HTML 2.0 + mathematical formulas; expected to become
an RFC in 1996Q1.

4. An open-ended model of typed hyperlinks and other relations
between documents; independent of HTML in principle, but allowing
richer semantics; expected 1996Q2.

5. A document format for style sheets for HTML and SGML documents,
possibly accompanied by small additions to the HTML syntax;
expected 1996Q3.

6. Possibly more small additions to HTML 2.0, such as footnotes,
floating figures, banners/toolbars.

7. HTML 3.0, a new format to replace all 2.x formats; will also add
hierarchical divisions, new hyperlink target anchors, and
internationalization; expected 1996Q4.

Jun 22 15:21 1995 Tabular material in HTML Page 11

Appendix: The HTML 2.1 DTD

<!-- html.dtd

Document Type Definition for the HyperText Markup Language
(HTML DTD)

Defines HTML 2.1
HTML 2.1 modifications by Bert Bos <bert@let.rug.nl>
Date: 21 June 1995
Based on the following HTML 2.0 DTD:

$Id: html.dtd,v 1.27 1995/06/15 20:17:03 connolly Exp $

Author: Daniel W. Connolly <connolly@w3.org>
See Also: html.decl, html-1.dtd
http://www.w3.org/hypertext/WWW/MarkUp/MarkUp.html
-->

<!ENTITY % HTML.Version
"-//IETF//DTD HTML 2.1//EN"

-- Typical usage:

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
...
</html>
--
>

<!--============ Feature Test Entities ========================-->

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

<![ %HTML.Recommended [
<!ENTITY % HTML.Deprecated "IGNORE">
]]>


Jun 22 15:21 1995 Tabular material in HTML Page 12

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

<!ENTITY % HTML.Highlighting "INCLUDE"
-- Use this feature test entity to validate that a
document uses no highlighting tags, which may be
ignored on minimal implementations.
-->

<!ENTITY % HTML.Forms "INCLUDE"
-- Use this feature test entity to validate that a document
contains no forms, which may not be supported in minimal
implementations
-->

<!--============== Imported Names ==============================-->

<!ENTITY % Content-Type "CDATA"
-- meaning an internet media type
(aka MIME content type, as per RFC1521)
-->

<!ENTITY % HTTP-Method "GET | POST"
-- as per HTTP specification, in progress
-->

<!ENTITY % URI "CDATA"
-- The term URI means a CDATA attribute
whose value is a Uniform Resource Identifier,
as defined by
"Universal Resource Identifiers" by Tim Berners-Lee
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.

-->

<!--========= DTD "Macros" =====================-->


Jun 22 15:21 1995 Tabular material in HTML Page 13

<!ENTITY % heading "H1|H2|H3|H4|H5|H6">

<!ENTITY % list " UL | OL | DIR | MENU " >

<!--======= Character mnemonic entities =================-->

<!ENTITY % ISOlat1 PUBLIC
"ISO 8879-1986//ENTITIES Added Latin 1//EN//HTML">
%ISOlat1;

<!ENTITY amp CDATA "&#38;" -- ampersand -->
<!ENTITY gt CDATA "&#62;" -- greater than -->
<!ENTITY lt CDATA "&#60;" -- less than -->
<!ENTITY quot CDATA "&#34;" -- double quote -->

<!--========= SGML Document Access (SDA) Parameter Entities =====-->

<!-- HTML 2.1 contains SGML Document Access (SDA) fixed attributes
in support of easy transformation to the International Committee
for Accessible Document Design (ICADD) DTD
"-//EC-USA-CDA/ICADD//DTD ICADD22//EN".
ICADD applications are designed to support usable access to
structured information by print-impaired individuals through
Braille, large print and voice synthesis. For more information on
SDA & ICADD:
- ISO 12083:1993, Annex A.8, Facilities for Braille,
large print and computer voice
- ICADD ListServ
<ICADD%ASUACAD.BITNET@ARIZVM1.ccit.arizona.edu>
- Usenet news group bit.listserv.easi
- Recording for the Blind, +1 800 221 4792
-->

<!ENTITY % SDAFORM "SDAFORM CDATA #FIXED"
-- one to one mapping -->
<!ENTITY % SDARULE "SDARULE CDATA #FIXED"
-- context-sensitive mapping -->
<!ENTITY % SDAPREF "SDAPREF CDATA #FIXED"
-- generated text prefix -->
<!ENTITY % SDASUFF "SDASUFF CDATA #FIXED"
-- generated text suffix -->
<!ENTITY % SDASUSP "SDASUSP NAME #FIXED"
-- suspend transform process -->

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

Jun 22 15:21 1995 Tabular material in HTML Page 14

<![ %HTML.Highlighting [

<!ENTITY % font " TT | B | I ">

<!ENTITY % phrase "EM | STRONG | CODE | SAMP | KBD | VAR | CITE ">

<!ENTITY % text "#PCDATA | A | IMG | BR | %phrase | %font">

<!ELEMENT (%font;|%phrase) - - (%text)*>
<!ATTLIST ( TT | CODE | SAMP | KBD | VAR )
%SDAFORM; "Lit"
>
<!ATTLIST ( B | STRONG )
%SDAFORM; "B"
>
<!ATTLIST ( I | EM | CITE )
%SDAFORM; "It"
>

<!-- <TT> Typewriter text -->
<!-- <B> Bold text -->
<!-- <I> Italic text -->

<!-- <EM> Emphasized phrase -->
<!-- <STRONG> Strong emphais -->
<!-- <CODE> Source code phrase -->
<!-- <SAMP> Sample text or characters -->
<!-- <KBD> Keyboard phrase, e.g. user input -->
<!-- <VAR> Variable phrase or substituable -->
<!-- <CITE> Name or title of cited work -->

<!ENTITY % pre.content "#PCDATA | A | HR | BR | %font | %phrase">

]]>

<!ENTITY % text "#PCDATA | A | IMG | BR">

<!ELEMENT BR - O EMPTY>
<!ATTLIST BR
%SDAPREF; "&#RE;"
>

<!-- <BR> Line break -->

<!--========= Link Markup ======================-->


Jun 22 15:21 1995 Tabular material in HTML Page 15

<!ENTITY % linkExtraAttributes
"REL %linkType #IMPLIED
REV %linkType #IMPLIED
URN CDATA #IMPLIED
TITLE CDATA #IMPLIED
METHODS NAMES #IMPLIED
">

<![ %HTML.Recommended [
<!ENTITY % A.content "(%text)*"
-- <H1><a name="xxx">Heading</a></H1>
is preferred to
<a name="xxx"><H1>Heading</H1></a>
-->
]]>

<!ENTITY % A.content "(%heading|%text)*">

<!ELEMENT A - - %A.content -(A)>
<!ATTLIST A
HREF %URI #IMPLIED
NAME CDATA #IMPLIED
%linkExtraAttributes;
%SDAPREF; "<Anchor: #AttList>"
>
<!-- <A> Anchor; source/destination of link -->
<!-- <A NAME="..."> Name of this anchor -->
<!-- <A HREF="..."> Address of link destination -->
<!-- <A URN="..."> Permanent address of destination -->
<!-- <A REL=...> Relationship to destination -->
<!-- <A REV=...> Relationship of destination to this -->
<!-- <A TITLE="..."> Title of destination (advisory) -->
<!-- <A METHODS="..."> Operations on destination (advisory) -->

<!--========== Images ==========================-->

<!ELEMENT IMG - O EMPTY>
<!ATTLIST IMG
SRC %URI; #REQUIRED
ALT CDATA #IMPLIED
ALIGN (top|middle|bottom) #IMPLIED
ISMAP (ISMAP) #IMPLIED
%SDAPREF; "<Fig><?SDATrans Img: #AttList>#AttVal(Alt)</Fig>"
>

<!-- <IMG> Image; icon, glyph or illustration -->
<!-- <IMG SRC="..."> Address of image object -->

Jun 22 15:21 1995 Tabular material in HTML Page 16

<!-- <IMG ALT="..."> Textual alternative -->
<!-- <IMG ALIGN=...> Position relative to text -->
<!-- <IMG ISMAP> Each pixel can be a link -->

<!--========== Paragraphs=======================-->

<!ELEMENT P - O (%text)*>
<!ATTLIST P
%SDAFORM; "Para"
>

<!-- <P> Paragraph -->

<!--========== Headings, Titles, Sections ===============-->

<!ELEMENT HR - O EMPTY>
<!ATTLIST HR
%SDAPREF; "&#RE;&#RE;"
>

<!-- <HR> Horizontal rule -->

<!ELEMENT ( %heading ) - - (%text;)*>
<!ATTLIST H1
%SDAFORM; "H1"
>
<!ATTLIST H2
%SDAFORM; "H2"
>
<!ATTLIST H3
%SDAFORM; "H3"
>
<!ATTLIST H4
%SDAFORM; "H4"
>
<!ATTLIST H5
%SDAFORM; "H5"
>
<!ATTLIST H6
%SDAFORM; "H6"
>

<!-- <H1> Heading, level 1 -->
<!-- <H2> Heading, level 2 -->
<!-- <H3> Heading, level 3 -->
<!-- <H4> Heading, level 4 -->
<!-- <H5> Heading, level 5 -->

Jun 22 15:21 1995 Tabular material in HTML Page 17

<!-- <H6> Heading, level 6 -->

<!--========== Text Flows ======================-->

<![ %HTML.Forms [
<!ENTITY % block.forms "BLOCKQUOTE | FORM | ISINDEX">
]]>

<!ENTITY % block.forms "BLOCKQUOTE">

<![ %HTML.Deprecated [
<!ENTITY % preformatted "PRE | XMP | LISTING">
]]>

<!ENTITY % preformatted "PRE">

<!ENTITY % block "P | %list | DL | TABLE
| %preformatted
| %block.forms">

<!ENTITY % flow "(%text|%block)*">

<!ENTITY % pre.content "#PCDATA | A | HR | BR">
<!ELEMENT PRE - - (%pre.content)*>
<!ATTLIST PRE
WIDTH NUMBER #implied
%SDAFORM; "Lit"
>

<!-- <PRE> Preformatted text -->
<!-- <PRE WIDTH=...> Maximum characters per line -->

<![ %HTML.Deprecated [

<!ENTITY % literal "CDATA"
-- historical, non-conforming parsing mode where
the only markup signal is the end tag
in full
-->

<!ELEMENT (XMP|LISTING) - - %literal>
<!ATTLIST XMP
%SDAFORM; "Lit"
%SDAPREF; "Example:&#RE;"
>
<!ATTLIST LISTING
%SDAFORM; "Lit"

Jun 22 15:21 1995 Tabular material in HTML Page 18

%SDAPREF; "Listing:&#RE;"
>

<!-- <XMP> Example section -->
<!-- <LISTING> Computer listing -->

<!ELEMENT PLAINTEXT - O %literal>
<!-- <PLAINTEXT> Plain text passage -->

<!ATTLIST PLAINTEXT
%SDAFORM; "Lit"
>
]]>

<!--========== Lists ==================-->

<!ELEMENT DL - - (DT | DD)+>
<!ATTLIST DL
COMPACT (COMPACT) #IMPLIED
%SDAFORM; "List"
%SDAPREF; "Definition List:"
>

<!ELEMENT DT - O (%text)*>
<!ATTLIST DT
%SDAFORM; "Term"
>

<!ELEMENT DD - O %flow>
<!ATTLIST DD
%SDAFORM; "LItem"
>

<!-- <DL> Definition list, or glossary -->
<!-- <DL COMPACT> Compact style list -->
<!-- <DT> Term in definition list -->
<!-- <DD> Definition of term -->

<!ELEMENT (OL|UL) - - (LI)+>
<!ATTLIST OL
COMPACT (COMPACT) #IMPLIED
%SDAFORM; "List"
>
<!ATTLIST UL
COMPACT (COMPACT) #IMPLIED
%SDAFORM; "List"
>

Jun 22 15:21 1995 Tabular material in HTML Page 19

<!-- <UL> Unordered list -->
<!-- <UL COMPACT> Compact list style -->
<!-- <OL> Ordered, or numbered list -->
<!-- <OL COMPACT> Compact list style -->

<!ELEMENT (DIR|MENU) - - (LI)+ -(%block)>
<!ATTLIST DIR
COMPACT (COMPACT) #IMPLIED
%SDAFORM; "List"
%SDAPREF; "<LHead>Directory</LHead>"
>
<!ATTLIST MENU
COMPACT (COMPACT) #IMPLIED
%SDAFORM; "List"
%SDAPREF; "<LHead>Menu</LHead>"
>

<!-- <DIR> Directory list -->
<!-- <DIR COMPACT> Compact list style -->
<!-- <MENU> Menu list -->
<!-- <MENU COMPACT> Compact list style -->

<!ELEMENT LI - O %flow>
<!ATTLIST LI
%SDAFORM; "LItem"
>

<!-- <LI> List item -->

<!--========== Document Body ===================-->

<![ %HTML.Recommended [
<!ENTITY % body.content "(%heading|%block|HR|ADDRESS|IMG)*"
-- <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>

<!-- <BODY> Document body -->

Jun 22 15:21 1995 Tabular material in HTML Page 20

<!ELEMENT BLOCKQUOTE - - %body.content>
<!ATTLIST BLOCKQUOTE
%SDAFORM; "BQ"
>

<!-- <BLOCKQUOTE> Quoted passage -->

<!ELEMENT ADDRESS - - (%text|P|TABLE)*>
<!ATTLIST ADDRESS
%SDAFORM; "Lit"
%SDAPREF; "Address:&#RE;"
>

<!-- <ADDRESS> Address, signature, or byline -->

<!--======= Forms ====================-->

<![ %HTML.Forms [

<!ELEMENT FORM - - %body.content -(FORM) +(INPUT|SELECT|TEXTAREA)>
<!ATTLIST FORM
ACTION %URI #IMPLIED
METHOD (%HTTP-Method) GET
ENCTYPE %Content-Type; "application/x-www-form-urlencoded"
%SDAPREF; "<Para>Form:</Para>"
%SDASUFF; "<Para>Form End.</Para>"
>

<!-- <FORM> Fill-out or data-entry form -->
<!-- <FORM ACTION="..."> Address for completed form -->
<!-- <FORM METHOD=...> Method of submitting form -->
<!-- <FORM ENCTYPE="..."> Representation of form data -->

<!ENTITY % InputType "(TEXT | PASSWORD | CHECKBOX |
RADIO | SUBMIT | RESET |
IMAGE | HIDDEN )">
<!ELEMENT INPUT - O EMPTY>
<!ATTLIST INPUT
TYPE %InputType TEXT
NAME CDATA #IMPLIED
VALUE CDATA #IMPLIED
SRC %URI #IMPLIED
CHECKED (CHECKED) #IMPLIED
SIZE CDATA #IMPLIED
MAXLENGTH NUMBER #IMPLIED
ALIGN (top|middle|bottom) #IMPLIED

Jun 22 15:21 1995 Tabular material in HTML Page 21

%SDAPREF; "Input: "
>

<!-- <INPUT> Form input datum -->
<!-- <INPUT TYPE=...> Type of input interaction -->
<!-- <INPUT NAME=...> Name of form datum -->
<!-- <INPUT VALUE="..."> Default/initial/selected value -->
<!-- <INPUT SRC="..."> Address of image -->
<!-- <INPUT CHECKED> Initial state is "on" -->
<!-- <INPUT SIZE=...> Field size hint -->
<!-- <INPUT MAXLENGTH=...> Data length maximum -->
<!-- <INPUT ALIGN=...> Image alignment -->

<!ELEMENT SELECT - - (OPTION+) -(INPUT|SELECT|TEXTAREA)>
<!ATTLIST SELECT
NAME CDATA #REQUIRED
SIZE NUMBER #IMPLIED
MULTIPLE (MULTIPLE) #IMPLIED
%SDAFORM; "List"
%SDAPREF;
"<LHead>Select #AttVal(Multiple)</LHead>"
>

<!-- <SELECT> Selection of option(s) -->
<!-- <SELECT NAME=...> Name of form datum -->
<!-- <SELECT SIZE=...> Options displayed at a time -->
<!-- <SELECT MULTIPLE> Multiple selections allowed -->

<!ELEMENT OPTION - O (#PCDATA)*>
<!ATTLIST OPTION
SELECTED (SELECTED) #IMPLIED
VALUE CDATA #IMPLIED
%SDAFORM; "LItem"
%SDAPREF;
"Option: #AttVal(Value) #AttVal(Selected)"
>

<!-- <OPTION> A selection option -->
<!-- <OPTION SELECTED> Initial state -->
<!-- <OPTION VALUE="..."> Form datum value for this option-->

<!ELEMENT TEXTAREA - - (#PCDATA)* -(INPUT|SELECT|TEXTAREA)>
<!ATTLIST TEXTAREA
NAME CDATA #REQUIRED
ROWS NUMBER #REQUIRED
COLS NUMBER #REQUIRED
%SDAFORM; "Para"
%SDAPREF; "Input Text -- #AttVal(Name): "

Jun 22 15:21 1995 Tabular material in HTML Page 22

>

<!-- <TEXTAREA> An area for text input -->
<!-- <TEXTAREA NAME=...> Name of form datum -->
<!-- <TEXTAREA ROWS=...> Height of area -->
<!-- <TEXTAREA COLS=...> Width of area -->

]]>

<!--======= Tables ======================-->

<!ELEMENT TABLE - O (CAPTION?, TR+)>
<!ATTLIST TABLE
BORDER (border) #IMPLIED
COMPACT (compact) #IMPLIED
COLWIDTH NUMBERS #IMPLIED
COLALIGN CDATA #IMPLIED
DP CDATA #IMPLIED
ROWALIGN (top, middle, bottom) top
%SDAFORM "Table"
>
<!ELEMENT CAPTION - O (%text)*>
<!ATTLIST CAPTION
%SDAFORM "Caption"
>
<!ELEMENT TR - O (TH | TD)*>
<!ATTLIST TR
COLALIGN CDATA #IMPLIED
DP CDATA #IMPLIED
ROWALIGN (top, middle, bottom) #IMPLIED
%SDAFORM "Row"
>
<!ELEMENT (TH, TD) - O (%flow)*>
<!ATTLIST (TH, TD)
COLSPAN NUMBER 1
ROWSPAN NUMBER 1
COLALIGN CDATA #IMPLIED
DP CDATA #IMPLIED
ROWALIGN (top, middle, bottom) #IMPLIED
%SDAFORM "Cell"
AXIS CDATA #IMPLIED
AXES CDATA #IMPLIED
>

<!-- <TABLE> Displayed tabular material -->
<!-- BORDER Rules around each cell -->
<!-- COMPACT Compact layout -->

Jun 22 15:21 1995 Tabular material in HTML Page 23

<!-- COLWIDTH= Relative width of columns -->
<!-- COLALIGN= Horizontal alignment of cells -->
<!-- DP= Char. to use as decimal point -->
<!-- ROWALIGN= Vertical alignment of cells -->

<!-- <TR> Table row -->
<!-- <TH> Header cell -->
<!-- <TD> Data cell -->
<!-- COLSPAN= Span multiple columns -->
<!-- ROWSPAN= Span multiple rows -->
<!-- AXIS= Symbolic axis name -->
<!-- AXES= Symbolic axes names -->

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

<![ %HTML.Recommended [
<!ENTITY % head.extra "">
]]>
<!ENTITY % head.extra "& NEXTID?">

<!ENTITY % head.content "TITLE & ISINDEX? & BASE? %head.extra">

<!ELEMENT HEAD O O (%head.content) +(META|LINK)>

<!-- <HEAD> Document head -->

<!ELEMENT TITLE - - (#PCDATA)*>
<!ATTLIST TITLE
%SDAFORM; "Ti" >

<!-- <TITLE> Title of document -->

<!ELEMENT LINK - O EMPTY>
<!ATTLIST LINK
HREF %URI #REQUIRED
%linkExtraAttributes;
%SDAPREF; "Linked to : #AttVal (TITLE) (URN) (HREF)>" >

<!-- <LINK> Link from this document -->
<!-- <LINK HREF="..."> Address of link destination -->
<!-- <LINK URN="..."> Lasting name of destination -->
<!-- <LINK REL=...> Relationship to destination -->
<!-- <LINK REV=...> Relationship of destination to this -->
<!-- <LINK TITLE="..."> Title of destination (advisory) -->
<!-- <LINK METHODS="..."> Operations allowed (advisory) -->

<!ELEMENT ISINDEX - O EMPTY>

Jun 22 15:21 1995 Tabular material in HTML Page 24

<!ATTLIST ISINDEX
%SDAPREF;
"<Para>[Document is indexed/searchable.]</Para>">

<!-- <ISINDEX> Document is a searchable index -->

<!ELEMENT BASE - O EMPTY>
<!ATTLIST BASE
HREF %URI; #REQUIRED >

<!-- <BASE> Base context document -->
<!-- <BASE HREF="..."> Address for this document -->

<!ELEMENT NEXTID - O EMPTY>
<!ATTLIST NEXTID
N CDATA #REQUIRED >

<!-- <NEXTID> Next ID to use for link name -->
<!-- <NEXTID N=...> Next ID to use for link name -->

<!ELEMENT META - O EMPTY>
<!ATTLIST META
HTTP-EQUIV NAME #IMPLIED
NAME NAME #IMPLIED
CONTENT CDATA #REQUIRED >

<!-- <META> Generic Metainformation -->
<!-- <META HTTP-EQUIV=...> HTTP response header name -->
<!-- <META NAME=...> Metainformation name -->
<!-- <META CONTENT="..."> Associated information -->

<!--======= Document Structure =================-->

<![ %HTML.Deprecated [
<!ENTITY % html.content "HEAD, BODY, PLAINTEXT?">
]]>
<!ENTITY % html.content "HEAD, BODY">

<!ELEMENT HTML O O (%html.content)>
<!ENTITY % version.attr "VERSION CDATA #FIXED '%HTML.Version;'">

<!ATTLIST HTML
%version.attr;
%SDAFORM; "Book"
>

<!-- <HTML> HTML Document -->