Re: Attempt at HTML 2.1 (tables)

Paul Grosso (paul@arbortext.com)
Thu, 22 Jun 95 10:46:00 EDT

> From: Bert Bos <bert@let.rug.nl>
> To: Multiple recipients of list <html-wg@oclc.org>
> Subject: Attempt at HTML 2.1 (tables)
>
> 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.
>

I agree with the idea of an HTML 2.1 that equals 2.0 plus tables.
Thanks for doing this, Bert.

I know lots of folks have spent a lot of time discussing tables in
email and face-to-face, and I am initially concerned that this proposal
seems to ignore much of the results of that conversation. Despite the
fact that the table model in some of the latest HTML 3.0 drafts has
features that I don't like, I'm willing to consider it the result of
the closest thing we have to date to at least quasi-consensus. I
suspect you thought that subsetting the latest 3.0 model would make
it easier to accept for 2.1, but I think this may have been a
mis-calculation.

However, I particularly wanted to make more of a meta-comment on the
approach to a 2.1. I think it would be better and easier all around
if what actually went into the 2.1 spec (DTD and text-wise) minimized
duplicating 2.0. I especially wanted to highlight this issue DTD-wise.

I note there are only two places in the DTD where you added TABLEs:

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

and

<!ELEMENT ADDRESS - - (%text|P|TABLE)*>

First, I would suggest that we don't need to allow tables in addresses.
However, even if we decide to do that, it doesn't change the thrust of
my comments.

Given that we are only adding TABLE in one (or two) place in the DTD,
we should NOT reproduce the entire DTD in the 2.1 spec. This just
opens to door to all sorts of possible inconsistencies and version
management issues, and it will make the spec unnecessarily longer
to process, download, review, etc.

Instead, let 2.1 merely reference the 2.0 DTD and point out that the
parameter entity %block; is being redefined to add TABLE to the OR group.
That, and of course include the declarations for the TABLE and related
elements and attributes. Period. You can even give an SGML-valid
definition of the 2.1 DTD in terms of the 2.0 one by defining the 2.1
DTD with some such structure as [note: example not verified with parser]:

<!-- html.dtd

...
Defines HTML 2.1
...
-->

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

<!ENTITY % HTML2.0 PUBLIC "-//IETF//DTD HTML 2.0//EN">

<!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.Forms "INCLUDE"
-- Use this feature test entity to validate that a document
contains no forms, which may not be supported in minimal
implementations
-->

<![ %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">

%HTML2.1;

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

<!ELEMENT TABLE - O (CAPTION?, TR+)>

. . . [the rest of the table element declarations]

<!-- THE END -->

A great proportion of the bulk turns out to be due to the fact that
the declaration of %block contains references to other parameter
entities. If we could still get a change to the 2.0 DTD to have
it declare:

<!ENTITY % block.additions "">

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

then we could simply define the 2.1 DTD as follows:

<!-- html.dtd

...
Defines HTML 2.1
...
-->

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

<!ENTITY % HTML2.0 PUBLIC "-//IETF//DTD HTML 2.0//EN">

<!ENTITY % block.additions "| TABLE">

%HTML2.1;

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

<!ELEMENT TABLE - O (CAPTION?, TR+)>

. . . [the rest of the table element declarations]

<!-- THE END -->