XHTML
From Wikipedia, the free encyclopedia
.xhtml, .xht, .html, .htmapplication/xhtml+xmlThe Extensible Hypertext Markup Language, or XHTML, is a markup language that has the same depth of expression as HTML, but also conforms to XML syntax.
While HTML prior to HTML 5 was defined as an application of Standard Generalized Markup Language (SGML), a very flexible markup language, XHTML is an application of XML, a more restrictive subset of SGML. Because they need to be well-formed, true XHTML documents allow for automated processing to be performed using standard XML tools—unlike HTML, which requires a relatively complex, lenient, and generally custom parser. XHTML can be thought of as the intersection of HTML and XML in many respects, since it is a reformulation of HTML in XML. XHTML 1.0 became a World Wide Web Consortium (W3C) Recommendation on January 26, 2000. XHTML 1.1 became a W3C Recommendation on May 31, 2001.
Contents
Overview
XHTML is "a reformulation of the three HTML 4 document types as applications of XML 1.0".[1] The W3C also continues to maintain the HTML 4.01 Recommendation and the specifications for HTML5 and XHTML5 are being actively developed. In the current XHTML 1.0 Recommendation document, as published and revised to August 2002, the W3C comments that, "The XHTML family is the next step in the evolution of the Internet. By migrating to XHTML today, content developers can enter the XML world with all of its attendant benefits, while still remaining confident in their content's backward and future compatibility."[1]
Motivation
According to the W3C XHTML 1.0 recommendation document,[2] with which the standards body introduced XHTML to the web community in January 2000, HTML had originally been designed for authoring relatively simple, technical documents. It quickly outgrew this original purpose, leading to the rapid invention of new elements and adaptations to specialized uses, which in turn led to interoperability problems on different platforms.
XML, as a restricted subset of SGML, preserves most of SGML's power but removes much of its complexity. In doing so, it reduces both the costs and the complexity of producing suitable authoring software.
XHTML combines the benefits of XML with those of HTML. For example, to express ideas using new markup, the XHTML family accommodates extensions as described in the XHTML Modularization specification. XHTML also maximizes interoperability: servers, proxies, and user agents can transform content into whatever format is most appropriate for various requesting agents, such as mobile users with limited capabilities, robotic agents that are mainly interested in indexable text, or home users who wish to make the most of broadband or interactive multimedia.
Relationship to HTML
HTML is the antecedent technology to XHTML. The changes from HTML to first-generation XHTML 1.0 are minor and are mainly to achieve conformance with XML. The most important change is the requirement that the document must be well-formed and that all elements must be explicitly closed as required in XML.[3] In XML, all element and attribute names are case-sensitive, so the XHTML approach has been to define all tag names to be lowercase.
This contrasts with some earlier established traditions which began around the time of HTML 2.0, when many used uppercase tags. In XHTML, all attribute values must be enclosed by quotes; either single (') or double (") quotes may be used. In contrast, this was sometimes optional in SGML-based HTML, where numeric or boolean attributes can omit quotes.[citation needed] All elements must also be explicitly closed, including empty (aka singleton) elements such as img and br. This can be done by adding a closing slash to the start tag, e.g., <img /> and <br />. Attribute minimization (e.g., <option selected>) is also prohibited, as the attribute selected contains no explicit value; instead this would be written as <option selected="selected">.
HTML elements which are optional in the content model will not appear in the DOM tree unless they are explicitly specified. For example, an XHTML page must have a <body> element, and a table will not have a <tbody> element unless the author specifies one.
The XHTML 1.0 recommendation devotes a section to differences between HTML and XHTML.[4]. The WHATWG wiki similarly considers differences that arise with the use of (X)HTML5.[5].
Because XHTML and HTML are closely related technologies, sometimes they are written about and documented in parallel. In such circumstances, some authors conflate the two names by using a parenthetical notation, such as (X)HTML. This indicates that the documentation and principles can be considered to apply generally to both standards.[6]
Adoption
The similarities between HTML 4.01 and XHTML 1.0 led many web sites and content management systems to adopt the initial W3C XHTML 1.0 Recommendation. To aid authors in the transition, the W3C provided guidance on how to publish XHTML 1.0 documents in an HTML-compatible manner, and serve them to browsers that were not designed for XHTML.[7][8]
Such "HTML-compatible" content is sent using the HTML media type (text/html) rather than the official Internet media type for XHTML (application/xhtml+xml). When measuring the adoption of XHTML to that of regular HTML, therefore, it is important to distinguish whether it is media type usage or actual document contents that is being compared.
Most web browsers have mature support[9] for all of the possible XHTML media types.[10] The notable exception is Internet Explorer by Microsoft; rather than rendering application/xhtml+xml content, a dialog box invites the user to save the content to disk instead. Both Internet Explorer 7 (released in 2006) and the second beta version of Internet Explorer 8 (released in August 2008) exhibit this behavior, and it is unclear whether this will be resolved in a future release. As long as this remains the case, most web developers avoid using XHTML that isn’t HTML-compatible[11], so advantages of XML such as namespaces, faster parsing and smaller-footprint browsers do not benefit the user. Microsoft developer Chris Wilson explained in 2005 that IE7’s priorities were improved security and CSS support, and that proper XHTML support would be difficult to graft onto IE’s compatibility-oriented HTML parser.[12]
In the early 2000s, some web developers began to question why Web authors ever made the leap into authoring in XHTML.[13][14][15] Others countered that the problems ascribed to the use of XHTML could mostly be attributed to two main sources: the production of invalid XHTML documents by some Web authors and the lack of support for XHTML built into IE6.[16][17] They went on to describe the benefits of XML-based Web documents (i.e. XHTML) regarding searching, indexing and parsing as well as future-proofing the Web itself.
In October 2006, HTML inventor and W3C chair Tim Berners-Lee, introducing a major W3C effort to develop new XHTML 5 and HTML 5 specifications, posted in his blog that, "The attempt to get the world to switch to XML ... all at once didn't work. The large HTML-generating public did not move ... Some large communities did shift and are enjoying the fruits of well-formed systems ... The plan is to charter a completely new HTML group."[18] In the current HTML and XHTML 5 working draft, its authors say that, "special attention has been given to defining clear conformance criteria for user agents in an effort to improve interoperability", "...while at the same time updating the HTML specifications to address issues raised in the past few years." Ian Hickson, author of the important paper criticising the use of XHTML in 2002, is a member of the group developing this specification and is listed as one of the co-authors of the current working draft.[19]
Versions of XHTML
XHTML 1.0
December 1998 saw the publication of a W3C Working Draft entitled Reformulating HTML in XML. This introduced Voyager, the codename for a new markup language based on HTML 4 but adhering to the stricter syntax rules of XML. By February 1999 the specification had changed name to XHTMLâ„¢ 1.0: The Extensible HyperText Markup Language, and in January 2000 it was officially adopted as a W3C Recommendation.[20] There are three formal DTDs for XHTML 1.0, corresponding to the three different versions of HTML 4.01:
center, font and strike) excluded from the strict version. XHTML 1.0 Frameset is the equivalent of HTML 4.01 Frameset, and allows for the definition of frameset documents—a common Web feature in the late 1990s.The second edition of XHTML 1.0 became a W3C Recommendation in August 2002.[21]
Modularization of XHTML
The initial draft of Modularization of XHTML became available in April 1999, and reached Recommendation status in April 2001.[22]Modularization provides an abstract collection of components through which XHTML can be subsetted and extended. The feature is intended to help XHTML extend its reach onto emerging platforms, such as mobile devices and Web-enabled televisions.
The first XHTML Family Markup Languages to be developed with this technique were XHTML 1.1 and XHTML Basic 1.0. Another example is XHTML-Print (W3C Recommendation, September 2006), a language designed for printing from mobile devices to low-cost printers.[23]
In October 2008 Modularization of XHTML was superseded by XHTML Modularization 1.1, which adds an XML Schema implementation.[24]
XHTML 1.1—Module-based XHTML
XHTML 1.1 evolved out of the work surrounding the initial Modularization of XHTML specification. The W3C released a first draft in September 1999; Recommendation status was reached in May 2001.[25] The modules combined within XHTML 1.1 effectively recreate XHTML 1.0 Strict, with the addition of ruby annotation elements (ruby, rbc, rtc, rb, rt and rp) to better support East-Asian languages. Other changes include removal of the lang attribute (in favour of xml:lang), and removal of the name attribute from the a and map elements.
Although XHTML 1.1 is largely compatible with XHTML 1.0 and HTML 4, in August 2002 the W3C issued a formal Note advising that it should not be transmitted with the HTML media type.[26] With limited browser support for the alternate application/xhtml+xml media type, XHTML 1.1 has so far proven unable to gain widespread use.
XHTML 1.1 Second Edition is expected in the fourth quarter of 2008.[27]
XHTML Basic and XHTML-MP
To support constrained devices, XHTML Basic was created by the W3C; it reached Recommendation status in December 2000.[28] XHTML Basic 1.0 is the most restrictive version of XHTML, providing a minimal set of features that even the most limited devices can be expected to support.
The Open Mobile Alliance and its predecessor the WAP Forum released three specifications between 2001 and 2006 that extended XHTML Basic 1.0. Known as XHTML Mobile Profile or XHTML-MP, they were strongly focussed on uniting the differing markup languages used on mobile handsets at the time. All provide richer form controls than XHTML Basic 1.0, along with varying levels of scripting support.
XHTML Basic 1.1 became a W3C Recommendation in July 2008, superseding XHTML-MP 1.2.[29] XHTML Basic 1.1 is almost but not quite a subset of regular XHTML 1.1. The most notable addition over XHTML 1.1 is the inputmode attribute—also found in XHTML-MP 1.2—which provides hints to help browsers improve form entry.
XHTML 1.2—Meaningful, Accessible XHTML
The XHTML 2 Working Group is considering the creation a new language based on XHTML 1.1.[30] If XHTML 1.2 is created, it will include WAI-ARIA and role attributes to better support accessible web applications, and improved Semantic Web support through RDFa. The inputmode attribute from XHTML Basic 1.1, along with the target attribute (for specifying frame targets) may also be present.
XHTML 2.0
Between August 2002 and July 2006 the W3C released the first eight Working Drafts of XHTML 2.0, a new version of XHTML able to make a clean break from the past by discarding the requirement of backward compatibility. This lack of compatibility with XHTML 1.x and HTML 4 caused some early controversy in the web developer community.[31] Some parts of the language (such as the role and RDFa attributes) were subsequently split out of the specification and worked on as separate modules, partially to help make the transition from XHTML 1.x to XHTML 2.0 smoother. A ninth draft of XHTML 2.0 is expected to appear in 2008.
New features introduced by XHTML 2.0 include:
nl element type, will be included to specifically designate a list as a navigation list. This will be useful in creating nested menus, which are currently created by a wide variety of means like nested unordered lists or nested definition lists. Any element will be able to act as a hyperlink, e.g., <li href="articles.html">Articles</li>, similar to XLink. However, XLink itself is not compatible with XHTML due to design differences. Any element will be able to reference alternative media with the src attribute, e.g., <p src="lbridge.jpg" type="image/jpeg">London Bridge</p> is the same as <object src="lbridge.jpg" type="image/jpeg"><p>London Bridge</p></object>. The alt attribute of the img element has been removed: alternative text will be given in the content of the img element, much like the object element, e.g., <img src="hms_audacious.jpg">HMS <em>Audacious</em></img>. A single heading element (h) will be added. The level of these headings are determined by the depth of the nesting. This allows the use of headings to be infinite, rather than limiting use to six levels deep. The remaining presentational elements i, b and tt, still allowed in XHTML 1.x (even Strict), will be absent from XHTML 2.0. The only somewhat presentational elements remaining will be sup and sub for superscript and subscript respectively, because they have significant non-presentational uses and are required by certain languages. All other tags are meant to be semantic instead (e.g. <strong> for strong or bolded text) while allowing the user agent to control the presentation of elements via CSS. The addition of RDF triple with the property and about attributes to facilitate the conversion from XHTML to RDF/XML.HTML 5—Vocabulary and APIs for HTML and XHTML
HTML 5 initially grew independently of the W3C, through a loose group of browser manufacturers and other interested parties calling themselves the WHATWG, or Web Hypertext Application Technology Working Group. The WHATWG announced the existence of an open mailing list in June 2004, along with a website bearing the strapline “Maintaining and evolving HTML since 2004.â€[32] The key motive of the group was to create a platform for dynamic web applications; they considered XHTML 2.0 to be too document-centric, and not suitable for the creation of forum sites or online shops.[33]
In April 2007, the Mozilla Foundation and Opera Software joined Apple in requesting that the newly rechartered HTML Working Group of the W3C adopt the work, under the name of HTML 5.[34] The group resolved to do this the following month,[35] and the First Public Working Draft of HTML 5 was issued by the W3C in January 2008. The most recent W3C Working Draft was published in June 2008.[19]
HTML 5 has both a regular text/html serialization and an XML serialization, which is known as XHTML 5. In addition to the markup language, the specification includes a number of application programming interfaces. The Document Object Model is extended with APIs for editing, drag-and-drop, data storage and network communication.
The language can be considered more compatible with HTML 4 and XHTML 1.x than XHTML 2.0, due to the decision to keep the existing HTML form elements and events model. It adds many new elements not found in XHTML 1.x, however, such as section and aside. (The XHTML 1.2 equivalent of these structural elements would be <div role="region"> and <div role="complementary">.)
The specification is expected to add WAI-ARIA support in a future draft. There is currently no indication as to whether HTML 5 will support RDFa.
Valid XHTML documents
An XHTML document that conforms to an XHTML specification is said to be valid. Validity assures consistency in document code, which in turn eases processing, but does not necessarily ensure consistent rendering by browsers. A document can be checked for validity with the W3C Markup Validation Service. In practice, many web development programs provide code validation based on the W3C standards.
Root element
The root element of an XHTML document must be html, and must contain an xmlns attribute to associate it with the XHTML namespace. The namespace URI for XHTML is http://www.w3.org/1999/xhtml. For XHTML 1.1 and later there should also ideally be a version attribute to clearly identify the version of XHTML being used. The example tag below additionally features an xml:lang attribute to identify the document with a natural language:
<html xmlns="http://www.w3.org/1999/xhtml" version="XHTML 1.2" xml:lang="en">
For XHTML 1.1 and 2.0 an optional schemaLocation attribute can be added, to associate the namespace with an XML Schema. The example below is for XHTML 2.0:
<html xmlns="http://www.w3.org/1999/xhtml" version="XHTML 2.0" xml:lang="en"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3.org/1999/xhtml
http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd">
This example also demonstrates the use of multiple namespaces within a document. The xmlns:xsi declaration indicates that any elements or attributes prefixed with xsi: fall within the XML Schema instance namespace rather than the XHTML namespace. This mechanism of prefixes allows elements and attributes from different XML vocabularies to be mixed together in the same document, without the potential for naming clashes.
DOCTYPEs
In order to validate an XHTML document, a Document Type Declaration, or DOCTYPE, may be used. A DOCTYPE declares to the browser which Document Type Definition (DTD) the document conforms to. A Document Type Declaration should be placed before the root element.
The system identifier part of the DOCTYPE, which in these examples is the URL that begins with http://, need only point to a copy of the DTD to use if the validator cannot locate one based on the public identifier (the other quoted string). It does not need to be the specific URL that is in these examples; in fact, authors are encouraged to use local copies of the DTD files when possible. The public identifier, however, must be character-for-character the same as in the examples.
These are the most common XHTML Document Type Declarations:
- XHTML 1.0 Strict
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">- XHTML 1.0 Transitional
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">- XHTML 1.0 Frameset
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">- XHTML 1.1
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">- XHTML Basic 1.1
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Basic 1.1//EN" "http://www.w3.org/TR/xhtml-basic/xhtml-basic11.dtd">- XHTML 2.0
XHTML 2.0, as of April 2008[update], is in a draft phase. If an XHTML 2.0 Recommendation is published with the same document type declaration as in the current Working Draft, the declaration will appear as:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 2.0//EN" "http://www.w3.org/MarkUp/DTD/xhtml2.dtd">- HTML 5
XHTML5—the XML serialization of HTML5 served as application/xhtml+xml—does not require a doctype. (The text/html serialization requires the doctype <!DOCTYPE html>.)
XML declaration
A character encoding may be specified at the beginning of an XHTML document in the XML declaration when the document is served using the application/xhtml+xml MIME type. (If an XML document lacks encoding specification, an XML parser assumes that the encoding is UTF-8 or UTF-16, unless the encoding has already been determined by a higher protocol.)
For example:
<?xml version="1.0" encoding="UTF-8"?>
The declaration may be optionally omitted because it declares as its encoding the default encoding. However, if the document instead makes use of XML 1.1 or another character encoding, a declaration is necessary. Internet Explorer prior to version 7 enters quirks mode if it encounters an XML declaration in a document served as text/html.
Common errors
Some of the most common errors in the usage of XHTML are:
<br> Correct: <br />Note that any of these are acceptable in XHTML:
<br></br>, <br/> and <br />. Older HTML-only browsers interpreting it as HTML will generally accept <br> and <br />.<p>This is a paragraph.<p>This is another paragraph. Correct: <p>This is a paragraph.</p><p>This is another paragraph.</p><em><strong>This is some text.</em></strong> Correct: <em><strong>This is some text.</strong></em><td rowspan=3> Correct: <td rowspan="3"> Correct: <td rowspan='3'><title>Cars & Trucks</title> Correct: <title>Cars & Trucks</title> Incorrect: <a href="index.php?page=news&id=5">News</a> Correct: <a href="index.php?page=news&id=5">News</a><BODY><P ID="ONE">The Best Page Ever</P></BODY> Correct: <body><p id="ONE">The Best Page Ever</p></body><textarea readonly>READ-ONLY</textarea> Correct: <textarea readonly="readonly">READ-ONLY</textarea>head element.<link rel="stylesheet" href="/style/screen.css" type="text/css" /> <script type="text/javascript" src="/script/site.js"></script>
-
- Note: The format
<script …></script>, rather than the more concise<script … />, is required for HTML compatibility when served as MIME typetext/html.
If an author chooses to include script or style data inline within an XHTML document, different approaches are recommended as shown in the examples below, depending whether the author intends to serve the page asapplication/xhtml+xmland target only fully conformant browsers, or serve the page astext/htmland try to obtain usability in Internet Explorer 6 and other non-conformant browsers. - Note: The format
Backward compatibility
XHTML 1.x documents are mostly backward compatible with HTML 4 user agents when the appropriate guidelines are followed. XHTML 1.1 is essentially compatible, although the elements for ruby annotation are not part of the HTML 4 specification and thus generally ignored by HTML 4 browsers. Later XHTML 1.x modules such as those for the role attribute, RDFa and WAI-ARIA degrade gracefully in a similar manner.
HTML 5 and XHTML 2 are significantly less compatible, although this can be mitigated to some degree through the use of scripting. (This can be simple one-liners, such as the use of “document.createElement()†to register a new HTML element within Internet Explorer, or complete JavaScript frameworks, such as the FormFaces implementation of XForms.)
Examples
The followings are examples of XHTML 1.0 Strict. Both of them have the same visual output. The former one follows the HTML Compatibility Guidelines in Appendix C of the XHTML 1.0 Specification while the latter one breaks backward compatibility but provides cleaner markup.
Example 1.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>XHTML 1.0 Example</title> <script type="text/javascript"> <!--//--><![CDATA[//><!-- function loadpdf() { document.getElementById("pdf-object").src="http://www.w3.org/TR/xhtml1/xhtml1.pdf"; } //--><!]]> </script> </head> <body onload="loadpdf()"> <p>This is an example of an <abbr title="Extensible HyperText Markup Language">XHTML</abbr> 1.0 Strict document.<br /> <img id="validation-icon" src="http://www.w3.org/Icons/valid-xhtml10" alt="Valid XHTML 1.0 Strict" /><br /> <object id="pdf-object" name="pdf-object" type="application/pdf" data="http://www.w3.org/TR/xhtml1/xhtml1.pdf" width="100%" height="500"> </object> </p> </body> </html>
Example 2.
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> <head> <title>XHTML 1.0 Example</title> <script type="application/javascript"> <![CDATA[ function loadpdf() { document.getElementById("pdf-object").src="http://www.w3.org/TR/xhtml1/xhtml1.pdf"; } ]]> </script> </head> <body onload="loadpdf()"> <p>This is an example of an <abbr title="Extensible HyperText Markup Language">XHTML</abbr> 1.0 Strict document.<br/> <img id="validation-icon" src="http://www.w3.org/Icons/valid-xhtml10" alt="Valid XHTML 1.0 Strict"/><br/> <object id="pdf-object" name="pdf-object" type="application/pdf" data="http://www.w3.org/TR/xhtml1/xhtml1.pdf" width="100%" height="500"/> </p> </body> </html>
Notes:
<param name="src" value="http://www.w3.org/TR/xhtml1/xhtml1.pdf" /> within <object>. The img element does not get a name attribute in the XHTML 1.0 Strict DTD. Use id instead.Notes
style attribute and the cite element. Developer Daniel Glazman offers similar criticism, but also shows support for some backward-incompatible changes such as the decision to remove the ins and del elements. ^ WHAT open mailing list announcement ^ Ian Hickson (2008-01-22). "HTML 5, 1.1.2. Relationship to XHTML2". World Wide Web Consortium. Retrieved on 2008-07-19. "… XHTML2… defines a new HTML vocabulary with better features for hyperlinks, multimedia content, annotating document edits, rich metadata, declarative interactive forms, and describing the semantics of human literary works such as poems and scientific papers… However, it lacks elements to express the semantics of many of the non-document types of content often seen on the Web. For instance, forum sites, auction sites, search engines, online shops, and the like, do not fit the document metaphor well, and are not covered by XHTML2… This specification aims to extend HTML so that it is also suitable in these contexts…" ^ Proposal to Adopt HTML5 ^ results of HTML 5 text, editor, name questionsExternal links
application/xhtml+xml using PHP, Python, and Apache (mod rewrite). Mozilla Web Author FAQ: How is the treatment of application/xhtml+xml documents different from the treatment of text/html documents? - summarizes one web browser's XHTML processing mode