This page lists the history of the Kinder, Gentler HTML Validator.
W3C HTML validator announced, based on the KGV's code. (I started working for W3C in Sep 1997.)
Updated SP to the most recent version, 1.2.1. This version fixes a bug with URL-based system identifiers for DTDs served from HTTP/1.1-capable HTTP servers (like Apache, which is used by W3C.)
Updated the DTDs for HTML 4.0 to the most recent version, dated "1997/09/17 11:45:33".
Note: I couldn't get the HTML declaration included with this package to work with my version of SP, so I am still using the decl from the 970708 distribution.
Added the DTD for HTML 4.0.
Updated the Cougar DTD to the most recent version, dated "1997/05/14 09:54:36".
Added the DTD for HTML Level "Cougar."
Updated my version of SP to 1.1.1, with support for multibyte character sets (such as Unicode, the document character set used in Cougar.)
Added the DTD for HTML 3.2 + Style.
Updated the DTD for HTML Pro, to version 0 revision 11. I had to remove the entities "zwnj", "zwj", "lrm", and "rlm", because they were causing errors since I'm not using HTML Pro's SGML declaration. (I can't use that one because my nsgmls doesn't yet have multibyte support.)
Updated the HTML 3.2 DTD to the most recent version (the Final version, as it appears in the HTML 3.2 Reference Specification.)
Added the DTD for Microsoft Internet Explorer 3.0 (and miscellaneous supplementary files) to the SGML catalog.
Added the DTD for Spyglass HTML 2.0 Extended.
Added the DTD for HTML Pro (version 0 revision 8).
Updated the HTML 3.2 DTD to the most recent version (dated "Tuesday August 21st 1996" [sic] in the file, but "Sun, 08 Sep 1996 16:09:34 GMT" on the HTTP server.)
This version of the HTML 3.2 DTD fixes the problems people were
having with empty
Updated the HTML 3.2 DTD to to the most recent version (dated "13-August-96".)
Updated the HTML 3.2 DTD to to the most recent version (dated "25-June-96".)
Updated the HTML 3.2 DTD to to the most recent version (dated "31-May-96".)
Updated Weblint to version 1.016.
Updated the Netscape DTD maintained by WebTechs.
Added the Softquad DTD to the SGML catalog.
Changed the blurb given when no DOCTYPE is present to recommend using HTML 3.2 and WebTechs public identifiers rather than HTML 3.0 and the old DOCTYPE for Netscape (since the DTD isn't published by Netscape.)
Added an icon for HTML 3.2, thanks to Lars Balker Rasmussen.
Added an icon for HTML 1996-01, thanks to Cyril Slobin.
Updated Weblint to version 1.015.
Added the HTML 3.2 DTD (a.k.a. Wilbur) to the SGML catalog.
Added the O'Reilly HTML Extended DTD 1.0 (and miscellaneous supplementary files) to the SGML catalog.
Added the DTD for Microsoft Internet Explorer 2.0 (and miscellaneous supplementary files) to the SGML catalog.
Added Dan Connolly's "HTML 1996-01" modular DTD (in a directory of its own) to the SGML catalog.
OVERRIDE YES to the SGML
catalog, to prevent errors with system identifiers. For more
information, see the
man page for nsgmls or TR 9401:1995 -
Entity Management (SGML Open Technical Resolution 9401:1995.)
(Actually, this stuff was gradually added over the last while; today's just the day I finished these changes and made this new version the default one.)
Started displaying icons for successful validation runs.
Added a Weblint option, along with a "use Weblint in pedantic mode" option.
Added the "show outline" option, to teach people how to use headings properly.
Added the "don't show attributes" option to the "show parser output" option.
Added some signal-trapping stuff to clean up temporary files if the process gets killed prematurely because of impatient people.
Started intercepting a couple special validator errors ("cannot generate system identifier for entity ..." and "cannot open ..."), calling them "Fatal errors" and printing out an appropriate error message (and not displaying the cascade of errors from the confused parser.)
Started doing the Right Thing when a URL isn't supplied (printing the welcome page.)
Started nagging people to update their links if they're still pointing to the "validate.cgi" URL.
Fixed the appearance of line numbers in the "show source" listing (added leading whitespace).
Fixed the output format slightly, to clearly separate different sections of the validation results page.
Fixed the behavior of line numbers in the source listing and validator output when a DOCTYPE is inserted because it was missing: now the inserted DOCTYPE appears as line "0", so the other line numbers are the "true" line numbers in the actual file.
Changed the User-Agent: used for URL fetches to "KGValidator/1.3" to reflect a new "version" of the validator.
Changed the output format back to a
version, after realizing that it was possible to make a valid
by putting an extra tag around each
<IMG> to change
the content model in effect.
(For more info, see the discussion on
Started splitting error messages in half if they seem to be too long for the line with the arrow on it.
The "explanation..." links next to error messages only appear if an explanation actually exists in the unofficial KGV FAQ.
Changed the User-Agent: used for URL fetches to "KGValidator/1.2" to reflect a new "version" of the validator.
Made links from each error message to the appropriate explanation in the unofficial KGV FAQ.
Fixed up the intro page somewhat.
Added the DTD used by AdvaSoft's HTML editors, and the appropriate entry in the SGML catalog.
Started logging the results of validation runs (in a very simple format, so far.)
Endorsed by Dan Connolly on Usenet (HTML activity lead at W3C, co-author of the original HalSoft HTML validator)
Fixed up the intro page somewhat.
Created this list of changes.
Upgraded nsgmls from version 0.4 to version 1.0.1 (and updated my post-processing code to compensate for a small change in nsgmls' output format).
Added the DTD for
<EMBED>, and the appropriate
entry in the SGML catalog.
Changed the User-Agent: used for URL fetches to "KGValidator/1.1" to reflect a new "version" of the validator.
Fixed up the input form slightly, and added the ``show parser output'' option.
Figured out a new, not-quite-as-friendly way to display the error messages
(but this one doesn't use
<PRE>-formatted text, which
doesn't allow images inside of it):
Unfortunately, the HTML used to accomplish this is pretty ugly, but
it's the best I could come up (without resorting to using tables or
using some intermediate hack to figure out the size of the user's
monospace font or something). I'm going to ask the HTML Working Group
<IMG> can't appear inside
and try to get this changed for a future version of HTML: I can't think
of any good reason for this rule, and I've never seen a browser that
doesn't support it...
Was informed that my validator output itself does not validate, due to
the use of
<IMG>s within a
Started truncating `longer' HTML source lines (i.e., those that are too wide to fit within a typical browser window). Why can't people just format their HTML source nicely?
The validator output now looks like this:
(If you hadn't noticed, this is an inline image; I can't include the HTML source here, because it's --gasp-- invalid!)
Updated all the SGML stuff to the most recent versions (by stealing them from HAL's directory of SGML stuff.) I think I might have also changed these a bit based on the HTML specifications; I can't remember.
I replaced the carets (`^') used to point out errors with inline
images with red arrows on them, blissfully ignorant that
you can't have
After making this change, I tried validating the output of a validation
run by prepending the URL for the CGI script in front of the URL for a
validation run with errors (i.e., calling the validator with itself), but
I didn't realize the double-query would confuse the HTTP server, so it
ended up validating the ``welcome page'' instead. I didn't find out
that my validator output was invalid until December 16, when Harold Driscoll
tried to use the
output of my validator in an article he was
After noticing that `nsgmls' has slightly more useful output than its predecessor, `sgmls', I decide to make a groovy new validation service with the problematic markup displayed along with the error messages.
The first version of this program had output like this:
Error at line 380: </TD> ^ end tag for element `TD' which is not open Error at line 382: </TR> ^ end tag for element `TR' which is not open Error at line 384: </TABLE> ^ end tag for element `TABLE' which is not open