Setting up sgmls isn't easy, as you noticed. Especially when an SGML
declaration references an external file (as for the character
entities), you have to do quite a lot of work. (Btw. the character
entities can be found e.g., on ifi.uio.no)
The error with the <H1> tag is easily explained: before the <H1> tag
there must be a <DIV1> tag.
When designing the HTML+ DTD, Dave Raggett had to make a compromise:
on the one hand, we wanted to be able to mark "sections" of a
document, because it is expected that HTML document will be used more
and more in conjunction with other SGML tools, for example to retrieve
*parts* of document; on the other hand there was the restriction in
SGML, that in that case the start tag <DIV1>, could not be
omitted. (For some technical reasons, which I wouldn't like to explain
There is a comment to that effect in the DTD:
Browsers *must* tolerate missing DIVn tags, e.g. the presence of an
<H1> tag implies a DIV1 element enclosing it and the following text.
The SGML standard unfortunately doesn't permit such inferences due
to a decision made to simplify writing general SGML parsers.
So, browsers are encouraged to gracefully handle the missing tags, but
sgmls simply checks according to the SGML standard, and therefore
produces an error message.
It is not that much extra work to put in the <DIV1> tags. And it will
only be temporary. There are commercial SGML wordprocessors that will
handle this automatically, but unfortunately, they are rather
Btw. if you are only testing, you can call sgmls with the -s option.
Otherwise you will get the parser's output on your screen, which is
not very human-friendly (but very useful when piping the output to a
-- _________________________________ / _ Bert Bos <email@example.com> | () |/ \ Alfa-informatica, | \ |\_/ Rijksuniversiteit Groningen | \_____/| Postbus 716 | | 9700 AS GRONINGEN | | Nederland | \_________________________________|