## News for the W3C Markup Validator

This page lists recent changes to the W3C Markup Validation Service. For minor changes and bug fixes that aren't listed on this page, see the Mercurial log.

News for this service are also available as an Atom feed.

Want to know not just the latest news but see the future and read about what's next? Check out the development Roadmap and TODO list.

2010-07-07 — 1.1 release:

  The 1.1 release of the markup validator is an enhancement and bug fix release. Changes include:

  - Enhancement: XML wellformedness check is now run only if other stages of the validation process report no errors. This is to further mitigate a performance issue related to the XML wellformedness check.
  - Enhancement: improved error output performance.
  - Enhancement: error/warning location information now makes it clearer whether the error occurred in the validated document or an external resource related to it.
  - Enhancement: improved heuristics for incomplete input URLs.
  - … and as usual, assorted minor spelling, code cleanup, link and the like fixes.
2010-06-14 — 1.0 release:

  The 1.0 release of the markup validator is an enhancement and bug fix release. Changes include:

  - Enhancement: when passing its internal transcoded document to external validators, validator now reflects the transcoding by modifying character encoding information included in the passed document.
  - Enhancement: updates to validator's internal DTD library.
  - Enhancement: XML wellformedness check now supports external entities instead of just suppressing error messages about them internally. As a side effect, this should work around a specific case of a certain performance problem with XML::LibXML 1.70.
  - Bug fix: doctype override could place a malformed comment in the modified document.
  - Bug fix: error messages were not properly HTML escaped when "show source" was selected.
  - Dependency changes: new minimum required versions: HTML-Parser 3.60, XML-LibXML 1.70.
  - … and a whole slew of minor spelling, code cleanup, link and the like fixes here and there.
2010-03-01 — 0.8.6 release:

  The 0.8.6 release of the markup validator is an enhancement and bugfix release. Changes include:

  - Removed feature: the "fuzzy matching" feature introduced in 0.8.5 has been removed because it produced too many confusing and invalid suggestions.
  - Removed feature: the proprietary XML output option has been removed (finally, it was supposed to be gone already in 2006).
  - Enhancement: improved error handling and diagnostics for problems occurred when decoding Content-Encodings, when cleaning up markup with Tidy, and when interfacing with the HTML5 validator.
  - Enhancement: recognition of more (non-recommended) aliases for various character encodings.
  - Enhancement: the document outline feature is now available for invalid documents as well, and its layout has been improved.
  - Enhancement: a direct link for validating an error page has been added to the "this document can not be checked" error page.
  - Enhancement: updated Unicorn output.
  - Enhancement: several updates to validator's internal DTD library and catalog, most notably switching to use/reuse more modular DTDs rather than flat ones than before.
  - Enhancement: validator can now be configured to do file based caching of its templates, resulting in noticeable performance improvement in non-mod_perl environments.
  - Enhancement: the EARL/RDF output format has been updated to version 1.0 (20091029 Working Draft).
  - Enhancement: the inactivity timeout when retrieving documents has been lowered to 45 seconds.
  - Enhancement: support for charsets specified with `<meta charset="...">` in HTML5 documents has been added (provided that HTML::HeadParser >= 3.60 is installed).
  - Bug fix: full document doctype was incorrectly in effect when validating a document fragment wrapped in a doctype template.
  - Bug fix: recommended system identifier for XHTML 1.1 plus MathML 2.0 documents was incorrect.
  - Bug fix: HTML5 validator error messages were doubly escaped.
  - Bug fix: direct input when overriding doctype or charset passed an invalid Content-Type header to the HTML5 validator.
  - Bug fix: "wide characters" in Tidy's output caused an error which prevented the whole Tidy output from being displayed.
  - Bug fix: there were several errors in the JSON output.
  - Bug fix: the description for missing xmlns errors contained an example for XHTML documents that was not valid XHTML 1.1.
  - Bug fix: bad DC terms namespace prefix in the XHTML+RDFa "badge" example code.
  - Bug fix: the state of the "validate error pages", verbosity, error grouping, and "clean up with Tidy" options were not always preserved.
  - Bug fix: several issues in error message locators in shown source snippets as well as showing the actual portion of a line with errors on it have been fixed.
  - Bug fix: HTTP responses containing lines longer than 4k bytes could not be processed.
  - Bug fix: an error was not issued for standalone XML documents containing external entities.
  - Bug fix: the SOAP API produced invalid XML when giving character encoding suggestions.
  - Bug fix: various fatal validation errors resulted in internal server errors in non-HTML output modes.
  - Dependency changes: new dependency: JSON >= 2.00; new minimum required versions: libwww-perl 5.802, Config-General 2.32, SGML-Parser-OpenSP 0.991; String-Approx is no longer required.
  - … and a whole slew of minor spelling, code cleanup, server error log warning trash, minor performance and the like fixes here and there. Kudos to perltidy and perlcritic for many of these.
2009-03-26 — 0.8.5 release:

  The 0.8.5 release of the markup validator is a feature and bugfix release. Changes include:

  - UI fix: many of our users were confused by the behaviour of the "More options" arrow. A small UI change should make the user experience less confusing.
  - New Feature: fuzzy matching used to suggest corrected markup. Analysis of many invalid pages shows that the most common error comes from invalid (typo or non standard) elements and attributes used. The new feature will help by suggesting possible (valid) alternatives.
  - Bug Fix: issues with SVG were creating very large log output when validating SVG documents. The validator code has been amended to limit this log flood.
  - Bug Fix: the HTML5 validator integration broke some of the validator's “document type override” functionalities in version 0.8.4. This is fixed in 0.8.5.
  - New: the validator icon code, which one can add to web pages, now includes XHTML+RDFa when applicable.
  - Bug Fix / New: implementing XML::LibXML Structured Errors. The validator uses libxml2 and the XML::LibXML for well-formedness check. Recent versions of the Perl library had bugs that made in backward incompatible, causing the validator to not output all well-formedness errors reliably. Some code was added to the validator to work with all future versions of that library, but we recommend not using XML::LibXML between versions 1.67 and 1.69 inclusive (see how).
  - Experimental: validation of SVG documents is now passed to the validator.nu engine. At the time of this release, neither validator.nu nor the DTD engine previously used are perfect for the validation of SVG, but the technologies used in the validator.nu engine (nvdl and relaxNG) makes it more promising.
  - UI Fix: accessibility improvements for screen readers.
  - Documentation: updated the Why Validate? document.
  - Usability: the way in which the validator has to handle direct input and character encodings has long been confusing to many. Improvements have been made that explain in clearer ways what the validator does.
  - New: the validator now recommends to declare character encoding in the document itself, especially if there is a chance that the document will be read from or saved to disk, CD, etc - in accordance with internationalization recommendations.
2008-11-20 — 0.8.4 release:

  0.8.4 may sound like a very minor step from the version 0.8.3 released in August, but this new release of the W3C Markup Validator brings some very important change: in addition to checking documents against established standards such as HTML 4.01 and XHTML 1.0, the validator can now check documents for conformance to HTML5, thanks to the integration with the Validator.nu html5 engine.

  HTML5 is still work in progress and support for this next generation of the publishing language of the World Wide Web will remain experimental, but this integration should provide experimentation grounds for those interested in trying on authoring in this new version of HTML, as well as a feedback channel for the group working on building a stable, open standard.

  Other bug fixes and improvement in this version include:

  - Bug Fix: version 0.8.3 came with a programming mistake that would not affect validation, but would flood the validator servers' logs with warnings.
  - Bug Fix - Document type support. A Typo in the machine-readable grammar published with the latest specification for XHTML 1.1 caused spurrious validation errors when checking documents against XHTML 1.1. Fixing the typo solves the issue. Another fixed typo now makes the validation against the historical HTML i18n document type functional.
  - Documentation updates and fixes: the installation documentation used a misspelled option for the installation of the OpenSP parser. The correction should make installation of the validator a little easier. Also relevant to installing the validator, the sample validator configuration now includes documentation of environment variables affecting connectivity.
2008-08-08 — 0.8.3 release:

  The 0.8.3 release of the W3C Markup Validator is a bug fix release, with a few small additional features. Changes include:

  - Bug Fix: in version 0.8.2, revalidation of an uploaded file was broken (missing markup in the HTML form).
  - Updates: Added support for XHTML Basic 1.1, XHTML Mobile Profiles (1.0, 1.1 and 1.2) and the historical HTML i18n.
  - Bug Fix: the validator won't override a given document type with itself.
  - Conformance: The validator now warns about inconsistent public/system identifiers combinations.
  - API: The custom HTTP headers in validator responses now also include the number of warnings.
  - Experimental Feature: added the new option to send specific `Accept-Charset` and `User-Agent` headers, in addition to `Accept` and `Accept-Language` in version 0.8.2.
  - Experimental Feature: the validator can output its results as JSON.
  - Documentation: Some documentation updates.
  - Development: New automated support and regression test suite.
2007-10-11 — 0.8.2 release:

  The 0.8.2 release of the W3C Markup Validator is a bug fix, performance and usability release, addressing the following issues:

  - Bug Fix: processing of documents through HTML Tidy would be triggered even when not requested. The fix should provide a noticeable performance boost.
  - Bug Fix: forcing or overriding the Doctype declaration would not work with documents using an XML Declaration (Bug 857). The fix should make it much easier to validate e.g. SVG documents.
  - Bug Fix: Making sure that the validator requests a fresh version of the online resources, when an older cached version could be returned. (Bug 4998)
  - Usability: when using file upload or direct input modes, the result page will now include a text area filled with the validated source, for easy fixing and revalidation. (Bug 4342)
  - Accessibility: the main interface was made friendlier to screen readers. (Bug 4959)
  - Experimental Feature: new options were added to trigger Format and Language negotiation.
  - New Feature: automatic detection of the document type for SVG documents, even without a DOCTYPE declaration. Validation of SVG only supported for standalone SVG documents, up to SVG 1.1.
  - Documentation updates.
2007-08-08 — 0.8.1 Release:

  The 0.8.1 release of the W3C Markup Validator is a bug fix release, addressing the following issues:

  - Bug Fix: changed set up of parser responsible for checking XML well-formedness, which would retrieve schemas for entities each time the validator would run.
  - Bug Fix: the validator would incorrectly complain about HTML/XML named entities (such as &copy;).
  - Bug Fix: fixing referer checking when running with Apache and mod_perl2.
  - Bug Fix: the validator would crash when called from browsers with rare language preference settings.
  - … and small performance and code cleanup fixes.
2007-07-25 — 0.8.0 Release:

  Releasing version 0.8.0 of the W3C Markup Validator, a major milestone in the development of the validator, including changes in its architecture, UI, new features and fewer bugs, for a better, more accurate and helpful quality process.

  This release includes all the changes and bug reports of the 0.8.0 Beta 1 and 0.8.0 Beta 2.

2007-06-01 — 0.8.0 Beta 2:

  Testing the second beta revision of the validator version 0.8.0. This new version builds upon the 0.8.0 Beta 1, and adds bug fixes, documentation updates and a polished UI with improved style and interaction. Changes include:

  - Revised main UI. Cleaner design. Improved tabbing between validation methods. Adding toggled option visibility.
  - Bug Fix: Fixing transcoding issues, encoding of source display.
  - Bug Fix: For XML document types, not reporting xmlns:* attributes as an error.
  - New Feature: Adding error message id to the SOAP API, error context (source snippet), added error message explanation.
  - Bug Fix: Fixed fatal error display in SOAP API.
  - Bug Fix: Fixed line number display in case of broken encoding.
  - Usability: more usable fatal error displays, removed "reset form" button, rewordings, error message explanations...
  - Bug Fix: Fixed outline for non-xml document types.
  - New Feature: Added support for XHTML + RDFa.
  - New Feature: For non-xhtml XML documents without document type, the validator will not try to perform validation and will only check well-formedness.
  - Code cleanup, other bug fixes.

  Participate in this Beta Test! Read the instructions and start testing.

2007-04-19 — 0.8.0 Beta 1:

  Testing version 0.8.0 Beta #1 of the Markup Validator; a new version including important changes in architecture, performance, reliability of validation for XML-based languages, improvements to the user interface, and a number of new features. Changes include:

  - New architecture, faster and more reliable, scaling better to the growing usage of the validator.
  - Improved interface for better usability, accessibility.
  - New feature: automatic cleanup of markup (with Tidy).
  - New feature: additional XML-Well-Formedness check, for more reliable validation of XML-based languages.
  - Back by popular demand: document outline feature.
  - New feature: checking that the documents are sent with proper Internet Media Type (MIME type).
  - New feature: for XML documents, checking that the xmlns is present, and properly set.
  - New feature: grouped messages, an alternate view to the sequential display of errors.
  - New feature: Direct Input validation can check full documents AND HTML fragments.
  - Added support for SMIL 2.1, and XHTML Basic 1.1.
  - Bug fixes.
2006-11-14 — 0.7.4 Release:

  Releasing version 0.7.4 of the W3C Markup Validator, a maintenance release including bug fixes and documentation updates.

  Changes include:

  - Bug fixes to the validator's API.
  - The proprietary XML output format is (still) deprecated, and will be removed in version 0.8.0.
  - The outline feature, broken in version 0.7.3, is back.
  - Local installations of the validator can be configured to enable or disable the API.
  - "Validation icons" are now available in two colors and 4 file formats, including PNG and SVG.
  - Documentation updates.
2006-10-23 — 0.7.3 Release:

  Releasing version 0.7.3 of the W3C Markup Validator, a maintenance release including fixes, updates, and includes an experimental API to interface the validator with other programs and services.

  Changes include:

  - A new (experimental) Web Services API.
  - The proprietary (and experimental) XML output format is deprecated.
  - New Document type supported: XHTML-Print.
  - New Character Encoding supported: ISO-8859-11 (Thai).
  - Usability fix: better error messages for documents with no character encoding declared, and for which the encoding fallback fails.
  - HTTP Fix: Be more lenient about whitespace and linefeeds in Content-Type.
  - Usability Fix: Adding the possibility of Doctype Override for SVG Document Types.
  - Compatibility Fix for OpenSP 1.5.2.
  - Documentation updates and improvements.
  - Improved Feedback mechanisms.
2006-02-20 — 0.7.2 Release:

  Releasing version 0.7.2 of the Markup Validator, a maintenance release including minor fixes as described below:

  - Update for compatibility with new version of Config::General module.
  - Fixed the recognized root element for XHTML 1.1 plus MathML 2.0 (plus SVG).
  - Avoid Text::Wrap error with deeply nested documents.
  - Documentation fixes (typos, broken link).
  - Avoid trailing comma in failed validation results if number of errors is unknown.
  - Consistency fixes for character encoding selection.
  - Fixed support for ISO-8859-3 and ISO-8859-4 encodings, added support for ISO-IR-111.
2005-10-18 — 0.7.1 Release:

  Releasing version 0.7.1 of the Markup Validator, a maintenance release introducing performance enhancements and including minor fixes in the user interface and in the "Direct Input" validation results.

2005-08-08 — 0.7.0 Release:

  Stable release including all the fixes and improvements made in consecutive beta versions 0.7.0 Beta #2 and 0.7.0 Beta #1.

2005-07-28 — 0.7.0 Beta #2:

  Testing version 0.7.0 Beta #2 of the Markup Validator, the second phase of beta test of a new version, including the results of feedback during the first phase of beta testing.

  Most bugs and issues resolved were recorded in our Bugzilla database. Changes from version 0.7.0 Beta#1 include:

  - Improvements in the way the results and errors number is displayed, with a bug fix in error count.
  - Bug fixes:
    - The error number count in results now only counts errors, not warnings or other messages.
    - A missing entry in the SGML catalog was added.
    - The direct input interface now handles cases where no content is set properly.
  - Running the validator under mod_perl is no longer supported.
  - Simplified configuration sample for an installation on the Apache server.
  - Documentation updates.
2005-07-12 — 0.7.0 Beta #1:

  Testing version 0.7.0 Beta #1 of the Markup Validator; a new version including small architectural changes, improvements to the user interface, documentation and user-friendliness, as well as a number of bug fixes.

  Most bugs and issues resolved were recorded in our Bugzilla database. Changes include:

  - Templates for the XHTML output of validation results:
    - Less inline markup.
    - Easier for multi-format output.
    - Getting close to the possibility of localization.
  - Better feedback mechanisms
    - Integration of the feedback page with validation results for better error message feedback.
    - The feedback page now allows direct search of the mailing-list and bug database.
  - Additional and improved error messages explanations and documentation.
  - Variants of HTML2, MathML and SVG added to the bundled SGML and/or XML catalogs.
  - Better support for validation of non-W3C document types, including custom DTDs.
  - User interface and style changes for a user-friendlier experience, including
    - New print stylesheet, handheld stylesheets.
    - Style differentiating errors, warnings and information in validation results.
  - (re-)Added the possibility of validating markup by direct input.
  - Simplified configuration syntax (for local installations).
  - Made easier to run on Windows platform (still needs testing and documentation).
  - Global updates to the documentation.
  - Simplified, documented and checked the consistency of our usage of Access Keys.
2004-07-23 — 0.6.7 Release:

  A maintenance release that fixes a few minor bugs, improves authentication proxying, and makes some slight tweaks to the website style and markup.

  This version also more completely fixes the bug mentioned at the end of the previous version's release notes. See the v0.6.6 release notes for details.

2004-05-21 — 0.6.6 Release:

  A maintenance release that fixes a few minor bugs, resurrects the whitespace-preserving source display, adds explanations for additional error messages, and makes some slight tweaks to the website style.

  This version also tentatively fixes a bug where, for document instances with a document type name of "html", but with an incorrect Formal Public Identifier, the Validator would fall back to HTML 4.01 Transitional and, if no other errors were found, silently ignore the erroneous FPI.

2004-05-07 — 0.6.5 Release:

  Stable release including all the fixes and improvements made in consecutive beta versions 0.6.5 Beta #3, 0.6.5 Beta #2, 0.6.5 Beta #1, 0.6.2 beta #2, and 0.6.2 beta #1

2004-04-30 — 0.6.5 Beta #3:

  Testing version 0.6.5 Beta #3 of the Markup Validator; an intermediary version including further layout, style and documentation improvements over version 0.6.5 Beta #2, based on discussion and comments during the testing phase of that version. Changes include:

  - Simpler navigation system - removed the "links" navigation bar.
  - More consistent layout.
  - A few issues with the way some agents were dealing with our style sheets were fixed. Other minor style fixes were also applied.
  - Cleanup of grammar issues and typos in a large part of the documentation.
2004-04-15 — 0.6.5 Beta #2:

  Testing version 0.6.5 Beta #2 of the Markup Validator; an intermediary version addressing comments received for the version 0.6.5 Beta #1 and adding significant user interface and documentation improvements. Changes include:

  - More explanations for most of the validation error messages.
  - New documentation on installing the Markup Validator locally.
  - The "fussy" parsing mode is no longer available and will be drastically improved before it comes back - if ever.
  - The W3C Link Checker has now been spun off into a standalone product and is no longer bundled with the Markup Validator.
  - Stylesheets have been updated, with a more pleasant look.
  - Easier navigation, more accessible documentation.
  - More "Quality Tips" have been added.
2003-08-26 — 0.6.5 Beta #1:

  Testing version 0.6.5 Beta #1 of the Markup Validator; an intermediary version addressing various issues and add requested features. Changes include:

  - Stylesheets updated to work around browser issues.
  - Added a pointer to contributed RPMs courtesy of Ville Skyttä.
  - Fixed broken links in Copyright statement.
  - Added current version number in page headings.
  - Detect proxies stripping the Referer header.
  - Added "Comma Tools".
  - Minor accessibility fixes.
  - A few new Webmaster Tips for the Tip of The Day.
  - The Link Checker now sends Accept, and Accept-Language headers.
  - The Link Checker supports more HTTP status codes.
  - The documentation has seen much improvement.
  - The RPM spec file is now available in the download.
  - Update ISO-HTML DTD to TC1.
  - Update SVG 1.0 DTD to current errata.
  - Added support for ISO-8859-16 encoding.
  - Added support for the data: URL scheme.
  - The Link Checker in command-line mode now supports bundling of options.
  - The Validator RPMs now try to integrate with the system catalog.
  - Added options to make the DOCTYPE and Charset Override behave like Fallbacks. i.e. With these options enabled, the Override will only insert the relevant new value iff one was not already present.
  - No longer treat missing DOCTYPE or Charset as a fatal error.
  - Much improved error messages for several error situations.
  - Updated and expanded error explanations.
  - Use passive (PASV) FTP by default.
  - Updated experimental mod_perl support to work with Apache/mod_perl 2.
  - Added support for the Big5-HKSCS encoding.
  - The MathML2 DTDs were updated to the 20030620 errata version.
  - Add option to restrict access to private IP addresses.
  - Added custom, inline, verbose error messages.
  - Tweaked markup and style for source display.
  - Tweaked markup and style for indicating position of error.
  - Changes in output mandated by W3C Legal.
  - Verbose output is now the default from the home page.
  - Added new "fussy" parse mode (enabled by default from the home page) that should make it easier to locate SHORTTAGS-related problems (such as implied end tags).
  - Valid Badge usage guidelines are now available.
  - Various internal restructuring to make way for future (post-0.6.5) features.
  - "/referer" is now deprecated in favor of "?uri=referer"; this allows us to preserve additional options in referer links.
2002-12-01 — 0.6.1 Release:
  - Maintenance release to fix various minor issues reported against the November 26 release. Stylesheet updates, ability to turn on verbose output, and bug fixes.
2002-11-26 — 0.6.0 Release:
  - Improved design of layout, including for Validation results.
  - Added "beefed up" Tip-of-the-Day.
  - Many accessibility fixes, both to the web site and the Result page.
  - Major internal restructuring. The code has undergone significant refactoring with many benefits. It is more readable and easier to understand, much more robust, much improved security, more modular, and performance should be significantly better. There is tentative support for running under mod_perl (leading to even greater performance enhancements) and memory consumption should be much improved.
  - Many new document types are supported and support for some existing document types has been improved. Notable changes and additions include:
    - Support for `application/xhtml+xml`.
    - Support for XHTML+MathML and XHTML+MathML+SVG.
    - Support for SVG and `image/svg+xml`.
    - XHTML 1.0 Second Edition and XHTML 1.1.
  - Output has been reworked to be easier to understand.
  - And a whole bunch of bugfixes... :-)
2001-10-06:
  - Finished redesign and use consistent style for all pages..
  - Added Tip-of-the-Day.
2001-09-24:
  - Added experimental support for SVG 1.0.
  - Added experimental support for `spec-prod` 2.0.
  - ...and several minor bug fixes.
2001-09-13:
  - Added support for XHTML 1.1 and XHTML Basic 1.0.
  - Added experimental support for MathML 2.0.
  - You can now tweak options from results page.
  - Added option to override Character Encoding.
  - Various bug fixes and minor changes.
2001-06-22:
  - Various bug fixes; notably two related to the file upload feature.
  - Some changes to make local installations easier.
  - Support for more character encodings (e.g. `ISO-8859-8-I`).
  - Generally improved handling of character encodings.
  - Documentation donated by Scott Bigham (Thanks Scott!).
2000-10-18:

  Added support for ISO/IEC 15445:2000 (ISO-HTML). See also: User's Guide to ISO-HTML.

2000-06-30:

  The service now checks XHTML documents for validity as well as XML well-formedness.

2000-04-28:

  Added the file upload feature.

  Created the www-validator-cvs mailing list.

  Updated the home page, moved some things to another page.

2000-01-26:

  Updated the DTDs and added icons for XHTML 1.0, HTML 4.01.

1999-08-24:

  Added the DTDs for HTML 4.01.

  Updated the DTDs for XHTML 1.0.

1999-04-08:

  Added username/password proxying for validation of documents protected by HTTP Basic Authentication, thanks to patches from Renaud Bruyeron.

  This revision also includes patches to use the Perl5 version of libwww-perl.

1999-03-04:

  Added support for XHTML, using the DTDs from the 19990304 working draft.

1999-02-25:

  Added support for `ISO-2022-JP` and `Shift_JIS` character encodings. Thanks to Takuya Asada, Masayasu Ishikawa, and Martin Dürst for their patches and advice.

  Updated the SGML declaration according to the HTML 4.0 spec errata.

1998-08-26:

  Put a tarred and gzipped version of the SGML library files (DTDs etc.) on the Web.

1998-08-05:

  Posted some new documents on the Web:

  - information on the source code
  - the to-do list for the service
  - a page explaining how to give feedback (including information on the new www-validator mailing list)
1998-07-24:

  Made the source code available via W3C's public CVS tree.

  Upgraded the HTTP server to Apache 1.3.1.

1998-06-19:

  Added a page about the hardware/network behind this service.

1998-04-20:

  Added support for a parameter to check the referring Web page for mistakes. To use it, just link to the following URL when linking to the service <http://validator.w3.org/check/referer> (you can try the link to see how it works).

1997-12-18:

  Updated HTML 4.0 materials to match the HTML 4.0 Recommendation.