class
attribute in an [[HTML element]], but with fewer restrictions. Some W3C XML namespaces/schema that can be mixed with XHTML include [[MathML]] for semantic math markup, [[Scalable Vector Graphics]] for markup of vector graphics, and [[RDFa]] for embedding [[Resource Description Framework|RDF]] data.
=== 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 element|well-formed]] and that all [[HTML element|elements]] must be explicitly closed as required in XML.{{Fact|date=May 2008}} 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.{{Fact|date=May 2008}} 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 [[Document Object Model|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.[http://www.w3.org/TR/xhtml1/#diffs XHTML 1.0: The Extensible HyperText Markup Language (Second Edition)]. The WHATWG wiki similarly considers differences that arise with the use of (X)HTML5.[http://wiki.whatwg.org/wiki/HTML_vs._XHTML Html Vs. Xhtml - Whatwg Wiki].
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.For examples of this, see: http://jigsaw.w3.org/css-validator/ http://www.adobe.com/devnet/dreamweaver/articles/css_best_practices_pt2.html http://www.ukoln.ac.uk/web-focus/papers/www2003/poster-1/dcmeta.doc
=== 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.{{cite web
|url=http://www.w3.org/TR/xhtml1/#guidelines
|title=XHTML 1.0 Specification, Appendix C: HTML Compatibility Guidelines
|publisher=[[World Wide Web Consortium]]
|date=[[2000-01-26]]
|accessdate=2007-06-16}}{{cite web
|url=http://www.w3.org/TR/xhtml-media-types
|title=XHTML Media Types, W3C Note
|publisher=[[World Wide Web Consortium]]
|date=[[2002-08-01]]
|accessdate=2008-06-12}}
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 supportEarly implementations (such as Mozilla 0.7 and Opera 6.0, both released in 2001) do not incrementally render XHTML as it is received over the network, giving a degraded user experience; see the [http://www.mozilla.org/docs/web-developer/faq.html#xhtmldiff Mozilla Web Author FAQ]. Later browsers such as Opera 9.0, Safari 3.0 and Firefox 3.0 do not have this issue. for all of the possible XHTML media types.[http://www.w3.org/People/mimasa/test/xhtml/media-types/results XHTML Media Type Tests – Results] 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 initial beta version of Internet Explorer 8 (released in March 2008) exhibit this behaviour, and it is unclear whether this will be resolved in a future release. Whilst this remains the case, most web developers avoid using XHTML that isn’t HTML-compatible{{Fact|date=July 2008}}, 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 [[Cascading Style Sheet|CSS]] support, and that proper XHTML support would be difficult to graft onto IE’s compatibility-oriented HTML parser.{{cite web
|url=http://blogs.msdn.com/ie/archive/2005/09/15/467901.aspx
|title=The prolog, strict mode, and XHTML in IE
|author=Chris Wilson
|date=[[2005-09-15]]
|accessdate=2007-06-16
|quote=…If we tried to support real XHTML in IE 7 we would have ended up using our existing HTML parser (which is focused on compatibility) and hacking in XML constructs. It is highly unlikely we could support XHTML well in this way; in particular, we would certainly not detect a few error cases here or there, and we would silently support invalid cases. This would, of course, cause compatibility problems based on parser error handling in the future, which XML is explicitly trying to avoid; we don’t want to cause another mess like the one with current HTML error handling (rooted in compatibility with earlier browsers – you can blame me for that personally somewhat, but not IE). I would much rather take the time to implement XHTML properly after IE 7, and have it be truly interoperable…}}
Recently, notable developers have begun to question why Web authors ever made the leap into authoring in XHTML.{{cite web
|url=http://www.hixie.ch/advocacy/xhtml
|title=Sending XHTML as text/html Considered Harmful
|author=Ian Hickson, a former developer of the Opera browser and cofounder of the [[WHATWG]]
|date=[[2002-09-08]]
|accessdate=2007-06-16}}{{cite web
|url=http://annevankesteren.nl/2004/06/invalid-html
|title=XHTML is invalid HTML
|author=Anne van Kesteren, a developer of the Opera browser
|date=[[2004-06-13]]
|accessdate=2007-06-16}}{{cite web
|url=http://webkit.org/blog/?p=68
|title=Understanding HTML, XML and XHTML
|author=Maciej Stachowiak, a developer of Apple's Safari browser
|date=[[2006-09-20]]
|accessdate=2007-06-16}} In October 2006, HTML inventor and W3C chair [[Tim Berners-Lee]], explaining the motivation for the resumption of HTML (not XHTML) development, posted in his blog: "The attempt to get the world to switch to XML, including quotes around attribute values and slashes in empty tags and namespaces all at once didn't work. The large HTML-generating public did not move, largely because the browsers didn't complain."{{cite web
|url=http://dig.csail.mit.edu/breadcrumbs/node/166
|title=Reinventing HTML
|author=Tim Berners-Lee
|date=[[2006-10-27]]
|accessdate=2007-06-16}}
== Versions of XHTML ==
=== XHTML 1.0 ===
[[Image:Wikipedia main page XHTML source.png|thumb|300px|[[Wikipedia]] uses XHTML 1.0 Transitional]]
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.{{cite web
|url=http://www.w3.org/TR/2000/REC-xhtml1-20000126
|title=XHTML™ 1.0: The Extensible HyperText Markup Language, W3C Recommendation 26 January 2000
|publisher=[[World Wide Web Consortium]]
|date=[[2000-01-26]]
|accessdate=2008-07-19}} There are three formal [[Document Type Definition|DTDs]] for XHTML 1.0, corresponding to the three different versions of HTML 4.01:
* '''XHTML 1.0 Strict''' is the equivalent to strict HTML 4.01, and includes elements and attributes that have not been marked deprecated in the HTML 4.01 specification.
* '''XHTML 1.0 Transitional''' is the equivalent of HTML 4.01 Transitional, and includes the presentational elements (such as 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|frameset documents]]—a common Web feature in the late 1990s.
The second edition of XHTML 1.0 became a W3C Recommendation in August 2002.{{cite web
|url=http://www.w3.org/TR/2002/REC-xhtml1-20020801
|title= XHTML™ 1.0 The Extensible HyperText Markup Language (Second Edition)
|publisher=[[World Wide Web Consortium]]
|date=[[2002-08-01]]
|accessdate=2008-07-19}}
=== Modularization of XHTML ===
The initial draft of ''Modularization of XHTML'' became available in April 1999, and reached Recommendation status in April 2001.{{cite web
|url=http://www.w3.org/TR/2001/REC-xhtml-modularization-20010410
|title=Modularization of XHTML™, W3C Recommendation 10 April 2001
|publisher=[[World Wide Web Consortium]]
|date=[[2001-04-10]]
|accessdate=2008-07-19}} [[XHTML Modularization|Modularization]] provides an abstract collection of components through which XHTML can be subsetted and extended. The feature is intended to help XHTML extend it’s 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.{{cite web
|url=http://www.w3.org/TR/2006/REC-xhtml-print-20060920/
|title=XHTML-Print, W3C Recommendation 20 September 2006
|publisher=[[World Wide Web Consortium]]
|date=[[2006-09-20]]
|accessdate=2008-07-19}}
In 2008 ''Modularization of XHTML'' is expected to be superseded by ''XHTML Modularization 1.1'', which adds an [[XML Schema (W3C)|XML Schema]] implementation.{{cite web
|url=http://www.w3.org/TR/2008/PR-xhtml-modularization-20080611
|title=XHTML™ Modularization 1.1, W3C Proposed Recommendation 11 June 2008
|publisher=[[World Wide Web Consortium]]
|date=[[2008-06-11]]
|accessdate=2008-07-19}}
=== 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.{{cite web
|url=http://www.w3.org/TR/2001/REC-xhtml11-20010531
|title=XHTML™ 1.1 - Module-based XHTML, W3C Recommendation 31 May 2001
|publisher=[[World Wide Web Consortium]]
|date=[[2001-05-31]]
|accessdate=2008-07-19}} The modules combined within XHTML 1.1 effectively recreate XHTML 1.0 Strict, with the addition of [[ruby character|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.{{cite web
|url=http://www.w3.org/TR/2002/NOTE-xhtml-media-types-20020801
|title=XHTML Media Types, W3C Note 1 August 2002
|publisher=[[World Wide Web Consortium]]
|date=[[2002-08-01]]
|accessdate=2008-07-19}} 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 third quarter of 2008.{{cite web
|url=http://www.w3.org/TR/2007/WD-xhtml11-20070216
|title=XHTML™ 1.1 - Module-based XHTML - Second Edition, W3C Working Draft 16 February 2007
|publisher=[[World Wide Web Consortium]]
|date=[[2007-02-16]]
|accessdate=2008-07-19}}
=== XHTML Basic and XHTML-MP ===
To support constrained devices, ''[[XHTML Basic]]'' was created by the W3C; it reached Recommendation status in December 2000.{{cite web
|url=http://www.w3.org/TR/2000/REC-xhtml-basic-20001219
|title=XHTML™ Basic, W3C Recommendation 19 December 2000
|publisher=[[World Wide Web Consortium]]
|date=[[2000-12-19]]
|accessdate=2008-07-19}} 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 it’s 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 phone|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 Proposed Recommendation in June 2008, superseding XHTML-MP 1.2.{{cite web
|url=http://www.w3.org/TR/2008/PR-xhtml-basic-20080611
|title=XHTML™ Basic 1.1, W3C Proposed Recommendation 11 June 2008
|publisher=[[World Wide Web Consortium]]
|date=[[2008-06-11]]
|accessdate=2008-07-19}} 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 ===
{{future software|section=1}}
The XHTML 2 Working Group is considering the creation a new language based on XHTML 1.1.http://lists.w3.org/Archives/Public/public-xhtml2/2008Jul/0010.html 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 [[Framing (World Wide Web)|frame]] targets) may also be present.
=== XHTML 2.0 ===
{{future software|section=1}}
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.See both ''[http://lists.w3.org/Archives/Public/www-html/2003Jan/0123.html XHTML 2.0 Considered Harmful]'' and ''[http://tantek.com/log/2003/05.html#L20030508t1620 XHTML 2.0 Considered Hopeful]'' by browser developer Tantek Çelik, who criticises early drafts of XHTML 2.0 for the absence of the style
attribute and the cite
element. Developer Daniel Glazman offers [http://lists.w3.org/Archives/Public/www-html/2002Dec/0113.html similar criticism], but also shows support for some backward-incompatible changes such as the decision to remove the ins
and del
elements. 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:
* HTML forms will be replaced by [[XForms]], an XML-based user input specification allowing forms to be displayed appropriately for different rendering devices.
* HTML frames will be replaced by [[XFrames]].
* The [[DOM Events]] will be replaced by [[XML Events]], which uses the XML [[Document Object Model]].
* A new list element type, the 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., Articles
, 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., London Bridge
is the same as
.
* 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., HMS Audacious
.
* 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.
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 ===
{{Main|HTML 5}}
{{future software|section=1}}
[[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.”[http://www.whatwg.org/news/start WHAT open mailing list announcement] 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.{{cite web
|url=http://www.w3.org/TR/2008/WD-html5-20080122/#relationship0
|title=HTML 5, 1.1.2. Relationship to XHTML2
|author=Ian Hickson
|date=2008-01-22
|publisher=[[World Wide Web Consortium]]
|accessdate= 2008-07-19
|quote=… 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…}}
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.[http://lists.w3.org/Archives/Public/public-html/2007Apr/0429.html Proposal to Adopt HTML5] The group resolved to do this the following month,[http://lists.w3.org/Archives/Public/public-html/2007May/0909.html results of HTML 5 text, editor, name questions] 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.{{cite web
|url=http://www.w3.org/TR/2008/WD-html5-20080610/
|title=HTML 5, W3C Working Draft 10 June 2008
|publisher=[[World Wide Web Consortium]]
|date=[[2008-06-10]]
|accessdate=2008-07-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 and .)
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, or be limited just to [[microformats]].
== 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 such as [[Dreamweaver]] provide code validation based on the [[W3C]] standards.
=== 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 [[Uniform Resource Locator|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 ">
;HTML 5
HTML5 does not require a doctype, and HTML 5 validation is not DTD-based.
;XHTML 2.0
XHTML 2.0, [[As of April 2008]], 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 ">
A placeholder DTD schema exists at the corresponding URI, though it currently only includes the character reference entities from previous recommendations. XHTML 2 contemplates both a version
attribute and an xsi:schemalocation
attribute on the root HTML element that could possibly serve as a substitute for any DOCTYPE declaration.
==== XML namespaces and schemas ====
In addition to the DOCTYPE, all XHTML elements must be in the appropriate [[XML namespace]] for the version being used. This is usually done by declaring a default namespace on the root element using xmlns="namespace"
as in the example below.
For XHTML 1.0, XHTML 1.1 and HTML5, this is
:<html xmlns="http://www.w3.org/1999/xhtml" >
XHTML 2.0 requires both a namespace and an [[W3C XML Schema|XML Schema]] instance declaration. These might be declared as
:<html xmlns="http://www.w3.org/2002/06/xhtml2/ "
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance "
xsi:schemaLocation="http://www.w3.org/2002/06/xhtml2/ http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd ">
This example for XHTML 2.0 also demonstrates the use of multiple namespaces within a document. The first xmlns
default namespace declaration indicates that elements and attributes whose names have no XML namespace prefix fall within the XHTML 2.0 namespace. The second namespace prefix declaration xmlns:xsi
indicates that any elements or attributes prefixed with the xsi:
refer to the XMLSchema-Instance namespace. Through this namespace mechanism XML documents allow the use of a mixture of elements and attributes taken from various XML vocabularies while avoiding the potential for clashes of naming between items from independently developed vocabularies.
Similar to the case of DOCTYPE above, the actual URL to the [[W3C XML Schema|XML Schema]] file can be changed, as long as the [[Universal Resource Identifier]] (URI) before it (which indicates the XHTML 2.0 namespace) remains the same. The namespace URI is intended to be a persistent and universally unique identifier for the particular version of the specification. If treated as a URL, the actual content located at the site is of no significance.
==== 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:
:
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:
* Failing to realize that documents won’t be treated as XHTML unless they are served with an appropriate XML [[Internet media type|MIME type]]
* Not closing empty elements (elements without closing tags in HTML4)
** Incorrect:
** Correct:
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 />
.
* Not closing non-empty elements
** Incorrect: This is a paragraph.
This is another paragraph.
** Correct: This is a paragraph.
This is another paragraph.
* Improperly nesting elements (Note that this would also be invalid in [[HTML]])
** Incorrect: This is some text.
** Correct: This is some text.
* Not putting quotation marks around attribute values
** Incorrect:
** Correct:
** Correct:
* Using the ampersand character outside of entities
** Incorrect: Cars & Trucks
** Correct: Cars & Trucks
* Using the ampersand outside of entities in [[Uniform Resource Locator|URL]]s (Note that this would also be invalid in [[HTML]])
** Incorrect: News
** Correct: News
* Failing to recognize that XHTML elements and attributes are case sensitive
** Incorrect: The Best Page Ever
** Correct: The Best Page Ever
* Using attribute minimization
** Incorrect:
** Correct:
* Mis-using CDATA, script-comments and xml-comments when embedding scripts and stylesheets.
** This problem can be avoided altogether by putting all script and stylesheet information into separate files and referring to them as follows in the XHTML 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 type text/html
.
** If an author chooses to include script or style data inline within an XHTML document, different approaches are recommended depending whether the author intends to serve the page as application/xhtml+xml
and target only fully conformant browsers, or serve the page as text/html
and try to obtain usability in Internet Explorer 6 and other non-conformant browsers.
== 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 character|ruby annotiation]] 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 [http://www.w3.org/TR/xhtml1/#guidelines HTML Compatibility Guidelines] in Appendix C of the XHTML 1.0 Specification while the latter one breaks backward compatibility but provides cleaner codes.
{| class="wikitable"
|+ style="text-align: left;" | Media type recommendation for the examples:
|-----
! width="250" height="28" | Media type
! width="100" height="28" | Example 1
! width="100" height="28" | Example 2
|-----
! width="250" height="25" | application/xhtml+xml
| width="100" height="25" | SHOULD || width="100" height="25" | SHOULD
|-----
! width="250" height="25" | application/xml
| width="100" height="25" | MAY || width="100" height="25" | MAY
|-----
! width="250" height="25" | text/xml
| width="100" height="25" | MAY || width="100" height="25" | MAY
|-----
! width="250" height="25" | text/html
| width="100" height="25" | MAY
| width="100" height="25" | SHOULD NOT
|}
Example 1.
Example 2.
Notes:
# For further information on the media type recommendation, please refer to [http://www.w3.org/TR/2002/NOTE-xhtml-media-types-20020801/ XHTML Media Types], a W3C Note issued on 2002-08-01.
# The "loadpdf" function is actually a workaround for Internet Explorer. It can be replaced by adding
within
.
# The img
element does not get a name
attribute in the [http://www.w3.org/TR/xhtml1/dtds.html#a_dtd_XHTML-1.0-Strict XHTML 1.0 Strict DTD]. Use id
instead.
== Notes ==
{{reflist|2}}
== External links ==
{{wikibooks|XHTML}}
* [http://www.w3.org/MarkUp/ W3C's Markup Home Page]
* [http://www.w3.org/TR/xhtml1/ XHTML 1.0 Recommendation]
* [http://www.w3.org/TR/2001/REC-xhtml11-20010531/ XHTML 1.1 Recommendation]
* [http://www.w3.org/TR/xhtml11/ XHTML 1.1 Second Edition Working Draft]
* [http://www.w3.org/TR/xhtml2/ XHTML 2.0 Working Draft]
* [http://xhtml.com/en/xhtml/reference/ XHTML 1.0 Strict / 1.1 Online Reference]
* Links dealing with the [[Internet media type|MIME type]] of XHTML documents:
** [http://www.webdevout.net/articles/beware-of-xhtml Beware of XHTML]
** [http://hixie.ch/advocacy/xhtml Sending XHTML as text/html Considered Harmful]
** [http://keystonewebsites.com/articles/mime_type.php Serving up XHTML with the correct MIME type]
** [http://www.xml.com/pub/a/2003/03/19/dive-into-xml.html The Road to XHTML 2.0: MIME Types] - Mark Pilgrim (3/19/2003). Includes examples for conditionally serving application/xhtml+xml
using [[PHP]], [[Python (programming language)|Python]], and [[Apache HTTP Server|Apache]] ([[mod rewrite]]).
** [http://www.mozilla.org/docs/web-developer/faq.html#xhtmldiff 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
* [http://www.cs.tut.fi/~jkorpela/html/empty.html Empty elements in SGML, HTML, XML, and XHTML]
* [http://heptagrama.com/en/i_ref_pcs_0014.htm Heptagrama's Basic XHTML 1.0 Strict Tutorial]
=== Validators ===
* [http://validator.w3.org/ W3C's Markup Validator]
* [https://addons.mozilla.org/firefox/249/ Firefox page validator] Extension to [[Mozilla Firefox]] browser
* [http://www.htmlhelp.com/tools/validator/ WDG HTML Validator]
* [http://www.hermish.com/ Hermish Web Accessibility Validator]
* [http://www.tuke.sk/podlubny/ov.html Off-line HTML Validator] A clipbook for [http://www.notetab.com/ NoteTab] text editor
* [http://www.thejoyofcode.com/validator_module.aspx XHTML Validator Module] for ASP.NET 2.0
* [http://www.emacswiki.org/cgi-bin/wiki/NxmlMode Validating XML/XHTML Editor]
* [http://www.validator.ca/ Multipage Validator]
* [http://www.totalvalidator.com/ Total Validator]
{{W3C Standards}}
[[Category:HTML]]
[[Category:Markup languages]]
[[Category:World Wide Web Consortium standards]]
[[Category:XML-based standards]]
[[ar:لغة النصوص التشعبية القابلة للتمديد]]
[[ca:Extensible HyperText Markup Language]]
[[cs:Extensible HyperText Markup Language]]
[[da:XHTML]]
[[de:Extensible Hypertext Markup Language]]
[[et:XHTML]]
[[es:XHTML]]
[[eo:XHTML]]
[[eu:XHTML]]
[[fa:زبان امتدادپذیر نشانهگذاری فرامتن]]
[[fr:XHTML]]
[[gl:XHTML]]
[[ko:XHTML]]
[[id:XHTML]]
[[ia:XHTML]]
[[is:XHTML]]
[[it:XHTML]]
[[he:XHTML]]
[[lv:XHTML]]
[[lt:XHTML]]
[[lmo:XHTML]]
[[nl:Extensible HyperText Markup Language]]
[[ja:Extensible HyperText Markup Language]]
[[no:XHTML]]
[[pl:XHTML]]
[[pt:XHTML]]
[[ro:XHTML]]
[[ru:XHTML]]
[[simple:XHTML]]
[[sk:XHTML]]
[[sl:XHTML]]
[[fi:XHTML]]
[[sv:XHTML]]
[[th:XHTML]]
[[vi:XHTML]]
[[tr:XHTML]]
[[uk:XHTML]]
[[ur:توسیعی وراۓ متن زبان تدوین]]
[[zh:XHTML]]