We're all aware of the anarchy that has crept into the web browser world since Mosaic appeared in 1994. One extension or proprietary technology on top of another has led us to a point where it's entirely possible to build an HTML document that may be found to be valid by one browser (such as Microsoft Internet Explorer) while another browser (such as Netscape Navigator) may refuse the document entirely. In fact, not only is it possible, it can even be probable that you will be limited at some point by the fragmenting of HTML. Many advanced web designers spend much of their time working on browser-specific "features" within their pages, proving yet again how important standards are on the web. (Of course, the astute reader will point out that HTML itself is a standard managed by the W3C.) However, virtually since their first versions, the web browser vendors have allotted ever-growing amounts of "breathing room" for their products' embedded HTML parsers, eventually reaching a point where the average web page pays little respect to the actual HTML 4.0 standard.
You've probably done your own "self-validation" of an HTML document by simply testing it in Microsoft's Internet Explorer and Netscape's Navigator web browsers. While it's true that these browsers account for the vast majority of web traffic, however, this may not always be the case. Wireless web devices are now predicted to outnumber "wired" web devices by 2005, widening required browser support from today's two to dozens—maybe even hundreds!—of browser types. Because the W3C can't force browser vendors to strictly implement the HTML standard, they have simply chosen to build around another standard that is strictly enforceable. That standard, XML, is the basis for the W3C's new markup language known as XHTML. Like all XML documents, XHTML documents are validated at runtime against a valid document type definition (DTD), ensuring that the document strictly complies with the definition. For programmers, this is akin to a comparison between a strongly typed language (such as Java) and a weakly typed language (such as pre-.NET Visual Basic).