Benjamin Hawkes-Lewis wrote:
> The HTML 3.2 specification includes an example of a "minimal HTML 3.2
> document":
>
> > <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
> > <TITLE>A study of population dynamics</TITLE>
>
> http://www.w3.org/TR/REC-html32#html
>
> If I paste that markup into the validator, it recognizes the document
> as HTML 3.2 but offers the following error:
>
> 'Line 2, Column 45: "HTML" not finished but document ended.'
I remember vaguely having discussed the empty body element issue
somewhere years ago. Anyway, the issue exists in HTML 4.01 too. For
example, the following fails validation with the same error message:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title></title>
</head>
> Unlike in HTML 4.01, the content of BODY is optional in the DTD:
The content of BODY is optional in HTML 4.01 Transitional, too, and my
test document above validates if you append e.g.
<body></body>
(Mere <body> will suffice too.)
My SGML is rusty, but I think the problem here is that the missing start
and end tags cannot be inferred when the element content is empty. If
there is just one nonspace character after </head>, it will be
recognized as starting the body, implying <body> before it, but where
there is no content, you cannot infer that this nothing is the content
of an element.
> (Before anybody asks, I'm not using HTML 3.2! Just curious why this
> doesn't validate.)
The issue has little if any practical value, though sometimes we want to
generate very small HTML documents programmatically, perhaps even with
empty body. Then it is best to include <body></body> to stay on the safe
side.
Jukka K. Korpela ("Yucca")
http://www.cs.tut.fi/~jkorpela/