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 "&"     -- ampersand          -->
<!ENTITY gt CDATA ">"      -- greater than       -->
<!ENTITY lt CDATA "<"      -- less than          -->
<!ENTITY quot CDATA """    -- 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   -->