Jump to content

XHTML: Difference between revisions

From Wikipedia, the free encyclopedia
Content deleted Content added
Replaced content with ' |No one loves you '
m Reverted 1 edit by 216.74.212.194 (talk) to last revision by ClueBot NG. (TW)
Tag: nowiki added
Line 1: Line 1:
{{Infobox file format
| name = XHTML
| icon =
| logo =
| caption =
| extension = .xhtml, .xht,<br /> .xml, .html, .htm
| mime = application/xhtml+xml
| type code =
| uniform type =
| magic =
| owner = [[World Wide Web Consortium]]
| released = {{Start date|2000|01|26|df=yes}}
| latest release version = 5.0
| latest release date = {{Start date and age|2014|10|28|df=yes}}
| creatorcode =
| genre = [[Markup language]]
| screenshot =
| container for =
| contained by =
| extended from = [[XML]], [[HTML]]
| extended to =
| free = Yes
| standard = [http://www.w3.org/TR/html5/ W3C HTML5 (Recommendation)]
| url =
}}
{{Html series}}


'''Extensible Hypertext Markup Language''' ('''XHTML''') is part of the family of [[XML]] [[markup language]]s. It mirrors or extends versions of the widely used [[Hypertext Markup Language]] (HTML), the language in which [[Web page]]s are formulated.
|No one loves you

While HTML, prior to [[HTML5]], was defined as an application of [[Standard Generalized Markup Language]] (SGML), a flexible markup language framework, XHTML is an application of [[XML]], a more restrictive subset of SGML. XHTML documents are [[XML#Well-formedness and error-handling|well-formed]] and may therefore be parsed using standard XML parsers, unlike HTML, which requires a lenient HTML-specific parser.<ref>{{cite web|last1=Graff|first1=Eliot|title=Polyglot Markup: A robust profile of the HTML5 vocabulary|url=http://dev.w3.org/html5/html-polyglot/html-polyglot.html|publisher=[[W3C]]|date=7 May 2014}}</ref>

XHTML 1.0 became a [[World Wide Web Consortium]] (W3C) [[W3C recommendation|Recommendation]] on January 26, 2000. XHTML 1.1 became a W3C Recommendation on May 31, 2001. The standard known as XHTML5 is being developed as an XML adaptation of the HTML5 specification.<ref>{{cite web|url=http://wiki.whatwg.org/wiki/HTML_vs._XHTML|title=HTML vs. XHTML|work=whatwg.org}}</ref><ref>{{cite web|url=http://blog.whatwg.org/xhtml5-in-a-nutshell|title=The WHATWG Blog|work=whatwg.org}}</ref>

== Overview ==
XHTML 1.0 is "a reformulation of the three HTML 4 document types as applications of XML 1.0".<ref name="W3cWhatIsXhtml">{{cite web
|url=http://www.w3.org/TR/xhtml1/#xhtml
|title=XHTML 1.0 Specification, Section 1: What is XHTML?
|publisher=[[World Wide Web Consortium]]
|date=2000-01-26
|accessdate=2007-06-16}}</ref> The [[World Wide Web Consortium]] (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 commented 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."<ref name="W3cWhatIsXhtml"/>

However, in 2005, the [[Web Hypertext Application Technology Working Group]] (WHATWG) formed, independently of the W3C, to work on advancing ordinary HTML not based on XHTML. The WHATWG eventually began working on a standard that supported both XML and non-XML [[serialization]]s, [[HTML5]], in parallel to W3C standards such as XHTML 2. In 2007, the W3C's HTML working group voted to officially recognize HTML5 and work on it as the next-generated HTML standard.<ref>{{cite web|url=http://lists.w3.org/Archives/Public/public-html/2007May/0909.html|title=results of HTML 5 text, editor, name questions|work=w3.org}}</ref> In 2009, the W3C allowed the XHTML 2 Working Group's charter to expire, acknowledging that HTML5 would be the sole next-generation HTML standard, including both XML and non-XML serializations.<ref name="XHTML FAQ"/> Of the two serializations, the W3C suggests that most authors use the HTML syntax, rather than the XHTML syntax.<ref>{{cite web
|url=http://www.w3.org/TR/html5/introduction.html#html-vs-xhtml
|title=HTML5 Working Draft, Section 1.6: HTML vs XHTML
|publisher=[[World Wide Web Consortium]]
|date=2011-01-13
|accessdate=2011-02-16}}</ref>

=== Motivation ===
XHTML was developed to make HTML more [[extensible]] and increase [[interoperability]] with other data formats.<ref name="xhtml-1.0-w3c-rec">{{cite web
|url=http://www.w3.org/TR/xhtml1/#why
|title=XHTML 1.0 Specification, Section 1.1: Why the need for XHTML?
|publisher=[[World Wide Web Consortium]]
|date=2000-01-26
|accessdate=2007-06-16}}</ref> In addition, browsers were forgiving of errors in HTML, and most websites were displayed despite technical errors in the markup; XHTML introduced stricter error handling.<ref>{{Cite web|url=http://diveintohtml5.info/past.html|title=How Did We Get Here? - Dive Into HTML5|last=Pilgrim|first=Mark|website=diveintohtml5.info|access-date=2016-06-11}}</ref> HTML 4 was ostensibly an application of [[Standard Generalized Markup Language]] (SGML); however the specification for SGML was complex, and neither web browsers nor the HTML 4 Recommendation were fully conformant to it.<ref name="normative-ref-to-sgml">{{cite web
|url=http://markmail.org/message/drvncr3f6yscveeg
|title=Dropping the Normative Reference to SGML (was: I-D ACTION.)
|author=Arjun Ray
|date=1999-10-06
|accessdate=2008-12-29
|quote=… However, since ISO 8879 does not afford applications the leeway to prohibit internal subsets, it follows that the letter of the HTML [4] spec automatically disentitles it to be a conforming SGML application…}}</ref> The XML standard, approved in 1998, provided a simpler data format closer in simplicity to HTML 4.<ref name="xhtml-myths-reality">{{cite web
|url=http://www.dev-archive.net/articles/xhtml.html
|title=XHTML—Myths and Reality
|author=Tina Holmboe
|publisher=The Developer’s Archive
|date=2008-10-06
|accessdate=2008-12-29
|quote=… Since the design goals of XML itself partially mirrored those of the original HTML, it was logical for work to begin on formulating an XML–based markup language…}}</ref> By shifting to an XML format, it was hoped HTML would become compatible with common XML tools;<ref name="xml-tools">{{cite web
|url=http://www.xml.com/pub/a/2000/01/10/perlwebtools.html
|title=Creating Web Utilities Using XML::XPath
|author=Kip Hampton
|publisher=XML.com
|date=2001-01-10
|accessdate=2008-12-29
|quote=… The problem: You want to take advantage of the power and simplicity that XML tools can offer, but you face a site full of aging HTML documents. The solution: Convert your documents to XHTML and put Perl and <code>XML::XPath</code> to work…}}</ref> servers and proxies would be able to transform content, as necessary, for constrained devices such as mobile phones.<ref name="wireless-content-using-xhtml">{{cite web
|url=http://www.xml.com/pub/a/2004/04/14/mobile.html
|title=Developing Wireless Content using XHTML Mobile
|author=Jean-Luc David
|publisher=XML.com
|date=2004-04-14
|accessdate=2008-12-29
|quote=… A useful feature of XHTML is that it can be manipulated as XML. Extensible Stylesheet Language Templates can be used to transform XHTML into WML or any other proprietary mobile formats…}}</ref>
By using [[XML namespace|namespaces]], XHTML documents could provide extensibility by including fragments from other XML-based languages such as [[Scalable Vector Graphics]] and [[MathML]].<ref name="namespaces-course">{{cite web
|url=https://developer.mozilla.org/En/SVG:Namespaces_Crash_Course
|title=Namespaces Crash Course
|publisher=Mozilla Developer Center
|accessdate=2008-12-29
|quote=… It has been a long standing goal of the W3C to make it possible for different types of XML based content to be mixed together in the same XML file. For example, SVG and MathML might be incorporated directly into an XHTML based scientific document…}}</ref> Finally, the renewed work would provide an opportunity to divide HTML into reusable components ([[XHTML Modularization]]) and clean up untidy parts of the language.<ref name="xhtml-faq">{{cite web
|url=http://www.w3.org/MarkUp/2004/xhtml-faq
|title=HTML and XHTML Frequently Answered Questions
|author=Steven Pemberton
|publisher=[[World Wide Web Consortium]]
|date=2004-07-21
|accessdate=2008-12-29
|quote=… with an XML-based HTML other XML languages could include bits of XHTML, and XHTML documents could include bits of other markup languages. We could also take advantage of the redesign to clean up some of the more untidy parts of HTML, and add some new needed functionality, like better forms…}}</ref>

=== {{Visible anchor|Relationship to HTML}} ===<!-- NOTE: this header is referenced in other articles, if you change it, make sure you do not break anything, thank you -->
There are various differences between XHTML and HTML. The [[Document Object Model]] (DOM) is a tree structure that represents the page internally in applications, and XHTML and HTML are two different ways of representing that in markup (serializations). Both are less expressive than the DOM (for example, "--" may be placed in comments in the DOM, but cannot be represented in a comment in either XHTML or HTML), and generally XHTML's XML syntax is a little more expressive than HTML (for example, arbitrary namespaces are not allowed in HTML). First off, one source of differences is immediate: XHTML uses an XML syntax, while HTML uses a pseudo-[[SGML]] syntax (officially SGML for HTML&nbsp;4 and under, but never in practice, and standardised away from SGML in HTML5). Secondly however, because the expressible contents of the DOM in syntax are slightly different, there are some changes in actual behavior between the two models.

First, there are some differences in syntax:<ref>{{cite web|url=http://www.w3.org/TR/NOTE-sgml-xml-971215|first=James|last=Clark|title=Comparison of SGML and XML|publisher=World Wide Web Consortium Note|date=1997-12-15}}</ref>
* Broadly, the XML rules require that all [[HTML element|elements]] be closed, either by a separate closing tag or using self-closing syntax (e.g. <code>&lt;br&nbsp;/></code>), while HTML syntax permits some elements to be unclosed because either they are always empty (e.g. <code>&lt;input></code>) or their end can be determined implicitly ("omissibility", e.g. <code>&lt;p></code>).
* XML is case-sensitive for element and [[HTML attribute|attribute]] names, while HTML is not.
* Some shorthand features in HTML are omitted in XML, such as (1) ''attribute minimization'', where attribute values or their quotes may be omitted (e.g. <code>&lt;option selected></code> or <code>&lt;option selected=selected></code>, while in XML this must be expressed as {{code|lang=xml|code=<option selected="selected">}}); (2) ''element minimization'' may be used to remove elements entirely (such as <code>&lt;tbody></code> inferred in a table if not given); and (3) the rarely used SGML syntax for element minimization ("shorttag"), which most browsers do not implement.<ref>{{cite web|title=Shorthand markup|url=http://www.w3.org/TR/REC-html40/appendix/notes.html#h-B.3.7|work=HTML 4, Appendix B: Performance, Implementation, and Design Notes|publisher=W3C|accessdate=30 September 2011}}</ref>
* There are numerous other technical requirements surrounding namespaces and precise parsing of whitespace and certain characters and elements. The exact parsing of HTML in practice has been undefined until recently; see the HTML5 specification ([http://www.whatwg.org/specs/web-apps/current-work/multipage/ <nowiki>[HTML5]</nowiki>]) for full details, or the working summary ([http://wiki.whatwg.org/wiki/HTML_vs._XHTML HTML vs. XHTML]).

Second, in contrast to these minor syntactical differences, there are some behavioral differences, mostly arising from the underlying differences in serialization. For example:
* Most prominently, behavior on parse errors differ. A fatal parse error in XML (such as an incorrect tag structure) causes document processing to be aborted.
* Most content requiring namespaces will not work in HTML, except the built-in support for SVG and MathML in the HTML5 parser along with certain magic prefixes such as <code>xlink</code>.
* JavaScript processing is a little different in XHTML, with minor changes in case sensitivity to some functions, and further precautions to restrict processing to well-formed content. Scripts must not use the {{code|lang=javascript|code=document.write()}} method; it is not available for XHTML. The <code>innerHTML</code> property is available, but will not insert non-well-formed content. On the other hand, it can be used to insert well-formed namespaced content into XHTML.
* [[Cascading Style Sheets]] (CSS) is also applied slightly differently. Due to XHTML's case-sensitivity, all CSS selectors become case sensitive for XHTML documents.<ref>{{cite web|title=Case Sensitivity|url=http://reference.sitepoint.com/css/casesensitivity|publisher=SitePoint Pty. Ltd|accessdate=30 September 2011}}</ref> Some CSS properties, such as backgrounds, set on the <code>&lt;body></code> element in HTML are 'inherited upwards' into the <code>&lt;html></code> element; this appears not to be the case for XHTML.<ref>For a non-authoritative summary, see {{cite web|url=http://www.nicholaswilson.me.uk/2010/05/css-differences-between-xhtml-and-html|title=CSS differences between XHTML and HTML|last=Wilson|first=Nicholas}}</ref>

=== Adoption ===
The similarities between HTML 4.01 and XHTML 1.0 led many web sites and [[content management system]]s 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.<ref name="appendix_c">{{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}}</ref><ref name="media_types">{{cite web
|url=http://www.w3.org/TR/xhtml-media-types
|title=XHTML Media Types, W3C Working Group Note
|publisher=[[World Wide Web Consortium]]
|date=2002-08-01
|accessdate=2008-06-12}}</ref>

Such "HTML-compatible" content is sent using the HTML media type (<code>text/html</code>) rather than the official Internet media type for XHTML (<code>application/xhtml+xml</code>). 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.<ref>[https://support.google.com/webmasters/answer/79812?hl=en]</ref><ref>Greta de Groat (2002). "Perspectives on the Web and Google: [[Monika Henzinger]], Director of Research, Google", ''Journal of Internet Cataloging'', Vol. 5(1), pp. 17-28, 2002.</ref>

Most web browsers have mature support<ref name="mature_support">Early 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.</ref> for all of the possible XHTML media types.<ref>{{cite web|url=http://www.w3.org/People/mimasa/test/xhtml/media-types/results|title=XHTML media type test - results|work=w3.org}}</ref> The notable exception is [[Internet Explorer]] versions 8 and earlier by [[Microsoft]]; rather than rendering <code>application/xhtml+xml</code> content, a dialog box invites the user to save the content to disk instead. Both Internet Explorer 7 (released in 2006) and Internet Explorer 8 (released in March 2009) exhibit this behavior.<ref name="wilson-XML">{{cite web
|url=http://blogs.msdn.com/ie/archive/2005/09/15/467901.aspx
|title=The <?xml> prolog, strict mode, and XHTML in IE
|author=Chris Wilson
|date=2005-09-15
|accessdate=2007-06-16
|quote=I’ve also been reading comments for some time in the IEBlog asking for support for the “application/xml+xhtml” MIME type in IE. I should say that IE7 will not add support for this MIME type – we will, of course, continue to read XHTML when served as “text/html”, presuming it follows the HTML compatibility recommendations.}}</ref> Microsoft developer [[Chris Wilson (open web advocate)|Chris Wilson]] explained in 2005 that IE7’s priorities were improved [[browser security]] and [[Cascading Style Sheet|CSS]] support, and that proper XHTML support would be difficult to graft onto IE’s compatibility-oriented HTML parser;<ref name="wilson">{{cite web
|url=http://blogs.msdn.com/ie/archive/2005/09/15/467901.aspx
|title=The <?xml> 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…}}</ref> however, [[Microsoft]] added support for true XHTML in [[Internet Explorer 9|IE9]].<ref>{{cite web
|url=http://blogs.msdn.com/ie/archive/2010/03/16/html5-hardware-accelerated-first-ie9-platform-preview-available-for-developers.aspx
|title=HTML5, Hardware Accelerated: First IE9 Platform Preview Available for Developers
|date=2010-03-16
|publisher=[[Microsoft]]
|first=Dean
|last=Hachamovitch
|work=IEBlog on [[Microsoft Developer Network]]
|accessdate=2010-03-22
|quote=…At this time, we’re looking for developer feedback on our implementation of HTML5’s parsing rules, Selection APIs, XHTML support, and inline SVG. Within CSS3, we’re looking for developer feedback on IE9’s support for Selectors, Namespaces, Colors, Values, Backgrounds and Borders, and Fonts.…}}</ref>

As long as support is not widespread, most web developers avoid using XHTML that is not HTML-compatible,<ref name="the_x-philes">{{cite web
|url=http://www.goer.org/Markup/TheXPhiles/
|title=List of XHTML Sites (the X-Philes)
|accessdate=2008-08-26}}</ref> so advantages of XML such as namespaces, faster parsing and smaller-footprint browsers do not benefit the user.<ref>[http://sangers.nu/blog/tech/20080909-the-meta-tag-attribute--keywords "In 2007, 37 leaders in search engine optimisation concluded that having keywords in the keywords attribute is little to none." Sanger.nu blog, September 9 2008, retrieved August 2 2011] {{wayback|url=http://sangers.nu/blog/tech/20080909-the-meta-tag-attribute--keywords |date=20090221001513 }}</ref><ref>{{cite web|url= http://nettrafficacademy.com/blog/meta-for-seo/ |title=Meta used for SEO|accessdate=March 18, 2016 | archiveurl= http://www.webcitation.org/6g61WP6zh|archivedate=March 18, 2016 |deadurl=no}}</ref><ref>[[Danny Sullivan (technologist)|Danny Sullivan]], [http://searchenginewatch.com/showPage.html?page=2167931 How To Use HTML Meta Tags], [[Search Engine Watch]], December 5, 2002</ref>

=== Criticism ===
In the early 2000s, some Web developers began to question why Web authors ever made the leap into authoring in XHTML.<ref name="hickson">{{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}}</ref><ref name="avk">{{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}}</ref><ref name="stachowiak">{{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}}</ref> 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 [[Internet Explorer 6]].<ref>{{cite web |url=http://h3h.net/2005/12/xhtml-harmful-to-feelings/
|title=Sending XHTML as text/html Considered Harmful to Feelings
|author=Brad Fults
|date=2005-12-21
|accessdate=2008-09-13
|quote=There are not nearly as many disadvantages (if any) to sending XHTML as text/html as [Ian Hickson] claims and the advantages I mentioned above make it well worth using in my humble opinion. There are some subtle footnotes and parentheticals [in Hickson's article] indicating that the harmfulness only applies to authors that don't know the pitfalls of this practice, but much like the "Do not eat" label on the little packets of silica gel, Ian's advisory seems to be common sense and not worth mentioning to any author who actually knows what XHTML is and how to write it.}}</ref><ref>{{cite web
|url=http://www.layouts4free.com/articles/view-article/49/3/0/
|title=The case for XHTML
|author=Paul McDonald
|date=2007-06-30
|accessdate=2008-09-13
|quote=Some people say XHTML on the Web has failed, but I say it is our biggest success in the fight for Web Standards. … XHTML is a good thing for the web, though, and it's a shame that people are trying to make a case against it. To prove this, I'll flesh out the myth for you and then show you why XHTML is the best thing since sliced bread, when it comes to our fight for Web Standards. … So to conclude, sending XHTML as text/html causes no damage or harm anywhere today, as long as your XHTML does validate. And, if you want Web Standards to become more and more widespread, stick to using XHTML and validate your pages.}}</ref> 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 a new HTML specification, 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."<ref>{{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
|quote=Some things are clearer with hindsight of several years. It is necessary to evolve HTML incrementally. 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. Some large communities did shift and are enjoying the fruits of well-formed systems, but not all. It is important to maintain HTML incrementally, as well as continuing a transition to [a] well-formed world, and developing more power in that world.<br /> "The plan is to charter a completely new HTML group. Unlike the previous one, this one will be chartered to do incremental improvements to HTML, as also in parallel xHTML. It will have a different chair and staff contact. It will work on HTML and xHTML together. We have strong support for this group, from many people we have talked to, including browser makers.
}}</ref> The current HTML5 working draft says "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]], editor of the HTML5 specification criticising the improper use of XHTML in 2002,<ref name="hickson"/> is a member of the group developing this specification and is listed as one of the co-editors of the current working draft.<ref name="html5-WD">{{cite web
|url=http://www.w3.org/TR/html5/
|title=HTML5: A vocabulary and associated APIs for HTML and XHTML
|author1 =Ian Hickson |author2 =David Hyatt
|date=2011-01-13
|accessdate=2011-02-16}}</ref>

Simon Pieters researched the XML-compliance of mobile browsers<ref name="zcorpan">{{cite web
|url=http://simon.html5.org/articles/mobile-results
|title=Results of mobile tests
|author=Simon Pieters
|accessdate=2009-10-31}}</ref> and concluded “the claim that XHTML would be needed for mobile devices is simply a myth”.

== Versions of XHTML ==

=== XHTML 1.0 ===
[[Image:Wikipedia main page XHTML source.png|thumb|300px|In earlier times{{when|date=March 2013}}, [[Wikipedia]] used the XHTML 1.0 Transitional doctype and syntax, though it was not served as XHTML]]
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 name of the specification had changed to ''XHTML 1.0: The Extensible HyperText Markup Language'', and in January 2000 it was officially adopted as a W3C Recommendation.<ref name="xhtml-1.0">{{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}}</ref> 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 XML equivalent to strict HTML 4.01, and includes elements and attributes that have not been marked deprecated in the HTML 4.01 specification. {{As of|2015|11}}, XHTML 1.0 Strict is the document type used for the homepage of the website of the [[World Wide Web Consortium]].
* '''XHTML 1.0 Transitional''' is the XML equivalent of HTML 4.01 Transitional, and includes the presentational elements (such as <code>center</code>, <code>font</code> and <code>strike</code>) excluded from the strict version.
* '''XHTML 1.0 Frameset''' is the XML 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.<ref name="xhtml-1.0-se">{{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}}</ref>

=== Modularization of XHTML ===
[[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 its reach onto emerging platforms, such as mobile devices and Web-enabled televisions. The initial draft of ''Modularization of XHTML'' became available in April 1999, and reached Recommendation status in April 2001.<ref name="modularization-1.0">{{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}}</ref>

The first modular XHTML variants were XHTML 1.1 and XHTML Basic 1.0.

In October 2008 ''Modularization of XHTML'' was superseded by ''XHTML Modularization 1.1'', which adds an [[XML Schema (W3C)|XML Schema]] implementation. It was itself superseded by a second edition in July 2010.<ref name="modularization-1.1">{{cite web
|url=http://www.w3.org/TR/2010/REC-xhtml-modularization-20100729
|title=XHTML Modularization 1.1 - Second Edition, W3C Recommendation 29 July 2010
|publisher=[[World Wide Web Consortium]]
|date=2010-07-29
|accessdate=2010-12-31}}</ref>

=== 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.<ref name="xhtml-1.1">{{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}}</ref> The modules combined within XHTML 1.1 effectively recreate XHTML 1.0 Strict, with the addition of [[ruby character|ruby annotation]] elements (<code>ruby</code>, <code>rbc</code>, <code>rtc</code>, <code>rb</code>, <code>rt</code> and <code>rp</code>) to better support East-Asian languages. Other changes include removal of the <code>name</code> attribute from the <code>a</code> and <code>map</code> elements, and (in the first edition of the language) removal of the <code>lang</code> attribute in favour of <code>xml:lang</code>.

Although XHTML 1.1 is largely compatible with XHTML 1.0 and HTML 4, in August 2002 the Working Group issued a formal Note advising that it should not be transmitted with the HTML media type.<ref name="xhtml-media-2002">{{cite web
|url=http://www.w3.org/TR/2002/NOTE-xhtml-media-types-20020801
|title=XHTML Media Types, W3C Working Group Note 1 August 2002
|publisher=[[World Wide Web Consortium]]
|date=2002-08-01
|accessdate=2008-07-19}}</ref> With limited browser support for the alternate <code>application/xhtml+xml</code> media type, XHTML 1.1 proved unable to gain widespread use. In January 2009 a second edition of the document (''XHTML Media Types - Second Edition'') was issued, relaxing this restriction and allowing XHTML 1.1 to be served as <code>text/html</code>.<ref name="xhtml-media-2009">{{cite web
|url=http://www.w3.org/TR/2009/NOTE-xhtml-media-types-20090116
|title=XHTML Media Types - Second Edition, W3C Working Group Note 16 January 2009
|publisher=[[World Wide Web Consortium]]
|date=2009-01-16
|accessdate=2009-01-28}}
This document supersedes the HTML Compatibility Guidelines originally found in XHTML 1.0 Appendix C.</ref>

A second edition of XHTML 1.1 was issued on 23 November 2010, which addresses various errata and adds an XML Schema implementation not included in the original specification.<ref>{{cite web|title=XHTML 1.1, XHTML Basic 1.1, XHTML Print Recommendations Revised|url=http://www.w3.org/News/2010.html#entry-8962|work=W3C NEWS ARCHIVE: 2010|publisher=[[World Wide Web Consortium]]|accessdate=12 December 2010}}</ref> (It was first released briefly on 7 May 2009 as a "Proposed Edited Recommendation"<ref name="xhtml-1.1-se">{{cite web
|url=http://www.w3.org/TR/2009/PER-xhtml11-20090507/
|title=XHTML 1.1 - Module-based XHTML - Second Edition
|publisher=[[World Wide Web Consortium]]
|date=2009-05-07
|accessdate=2009-05-25}}</ref> before being rescinded on 19 May due to unresolved issues.)<ref nam

=== XHTML Basic===
{{main|XHTML Basic}}
Since [[information appliance]]s may lack the [[Resource (computer science)|system resources]] to implement all XHTML abstract modules, the W3C defined a feature-limited XHTML specification called XHTML Basic. It provides a minimal feature subset sufficient for the most common content-authoring. The specification became a [[W3C recommendation]] on December 2000.<ref name="xhtml-basic-1.0">{{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}}</ref>

Of all the versions of XHTML, XHTML Basic 1.0 provides the fewest features. With XHTML 1.1, it is one of the two first implementations of modular XHTML. In addition to the Core Modules (Structure, Text, Hypertext, and List), it implements the following abstract modules: Base, Basic Forms, Basic Tables, Image, Link, Metainformation, Object, Style Sheet, and Target.<ref>{{cite web
|url=http://www.w3.org/2007/09/dtd-comparison.html |title=XHTML Flavors comparisons
|publisher=[[World Wide Web Consortium]] |date=2007-01-09 |accessdate=2013-01-30}}</ref><ref>[http://www.w3.org/TR/2000/REC-xhtml-basic-20001219/ XHTML Basic]. W3.org. Retrieved on 2013-07-17.</ref>

XHTML Basic 1.1 replaces the Basic Forms Module with the Forms Module, and adds the Intrinsic Events, Presentation, and Scripting modules. It also supports additional tags and attributes from other modules. This version became a W3C recommendation on 29 July 2008.<ref>[http://www.w3.org/TR/2008/REC-xhtml-basic-20080729/ XHTML™ Basic 1.1]. W3.org. Retrieved on 2013-07-17.</ref>

The current version of XHTML Basic is 1.1 Second Edition (23 November 2010), in which the language is re-implemented in the W3C's [[XML Schema (W3C)|XML Schema]] language. This version also supports the <code>lang</code> attribute.<ref>{{cite web|url=http://www.w3.org/TR/2010/REC-xhtml-basic-20101123|title=XHTML™ Basic 1.1 - Second Edition|work=w3.org}}</ref>

====XHTML-Print====
XHTML-Print, which became a W3C Recommendation in September 2006, is a specialized version of XHTML Basic designed for documents printed from information appliances to low-end [[Printer (computing)|printers]].<ref name="xhtml-print">{{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}}</ref>

===XHTML Mobile Profile===
{{main|XHTML Mobile Profile}}
XHTML Mobile Profile (abbreviated XHTML MP or XHTML-MP) is a third-party variant of the W3C's XHTML Basic specification. Like XHTML Basic, XHTML was developed for information appliances with limited system resources.

In October 2001, a [[limited company]] called the Wireless Application Protocol Forum began adapting XHTML Basic for [[WAP 2.0]], the second major version of the [[Wireless Application Protocol]]. WAP Forum based their DTD on the W3C's Modularization of XHTML, incorporating the same modules the W3C used in XHTML Basic 1.0&mdash;except for the Target Module. Starting with this foundation, the WAP Forum replaced the Basic Forms Module with a partial implementation of the Forms Module, added partial support for the Legacy and Presentation modules, and added full support for the Style Attribute Module.

In 2002, the WAP Forum was subsumed into the [[Open Mobile Alliance]] (OMA), which continued to develop XHTML Mobile Profile as a component of their OMA Browsing Specification.

====XHTML Mobile Profile 1.1====
To this version, finalized in 2004, the OMA added partial support for the Scripting Module, and partial support for Intrinsic Events. XHTML MP 1.1 is part of v2.1 of the OMA Browsing Specification (1 November 2002).<ref name="oma-browsing-archive">{{cite web |url=http://www.openmobilealliance.org/Technical/release_program/browsing_archive.aspx |title=OMA Browsing Archive |author= |date=26 September 2011 |work=[http://www.openmobilealliance.org/Technical/current_releases.aspx OMA Releases] |publisher=[[Open Mobile Alliance|Open Mobile Alliance Ltd.]]}}</ref>

====XHTML Mobile Profile 1.2====
This version, finalized 27 February 2007, expands the capabilities of XHTML MP 1.1 with full support for the Forms Module and OMA Text Input Modes. XHTML MP 1.2 is part of v2.3 of the OMA Browsing Specification (13 March 2007).<ref name="oma-browsing-archive"/>

====XHTML Mobile Profile 1.3====
XHTML MP 1.3 (finalized on 23 September 2008) uses the XHTML Basic 1.1 [[document type definition]], which includes the Target Module. Events in this version of the specification are updated to DOM Level 3 specifications (i.e., they are platform- and language-neutral).

=== XHTML 1.2 ===
The XHTML 2 Working Group considered the creation of a new language based on XHTML 1.1.<ref>{{cite web|url=http://lists.w3.org/Archives/Public/public-xhtml2/2008Jul/0010.html|title=[XHTML] Agenda: 2008-07-09|work=w3.org}}</ref> If XHTML 1.2 was created, it would include [[WAI-ARIA]] and <code>role</code> attributes to better support accessible web applications, and improved [[Semantic Web]] support through [[RDFa]]. The <code>inputmode</code> attribute from XHTML Basic 1.1, along with the <code>target</code> attribute (for specifying [[Framing (World Wide Web)|frame]] targets) might also be present. The XHTML2 WG had not been chartered to carry out the development of XHTML1.2. Since the W3C announced that it does not intend to recharter the XHTML2 WG,<ref name="XHTML FAQ">{{cite web|url=http://www.w3.org/2009/06/xhtml-faq.html|title=Frequently Asked Questions (FAQ) about the future of XHTML|work=w3.org}}</ref> and closed the WG in December 2010, this means that XHTML 1.2 proposal would not eventuate.

=== XHTML 2.0 ===
Between August 2002 and July 2006, the W3C released 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.<ref name="xhtml-2.0-criticism">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 <code>style</code> attribute and the <code>cite</code> 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 <code>ins</code> and <code>del</code> elements.</ref> Some parts of the language (such as the <code>role</code> 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 was expected to appear in 2009, but on July 2, 2009, the W3C decided to let the XHTML2 Working Group charter expire by that year's end, effectively halting any further development of the draft into a standard.<ref name="XHTML FAQ"/> Instead, XHTML 2.0 and its related documents were released as [[W3C#Recommendations and Certifications|W3C Notes]].<ref name="xhtml-2.0-note">{{cite web
|url=http://www.w3.org/TR/2010/NOTE-xhtml2-20101216
|title=XHTML 2.0, W3C Working Group Note 16 December 2010
|publisher=[[World Wide Web Consortium]]
|date=2010-12-16
|accessdate=2010-12-31}}</ref><ref name="xhtml2-wg-notes">{{cite web
|url=http://www.w3.org/News/2010#entry-8982
|title=XHTML2 Working Group Documents Published as W3C Notes
|publisher=[[World Wide Web Consortium]]
|date=2010-12-16
|accessdate=2010-12-31}}</ref>

New features to have been introduced by XHTML 2.0 included:
* HTML forms were to be replaced by [[XForms]], an XML-based user input specification allowing forms to be displayed appropriately for different rendering devices.
* HTML frames were to be replaced by [[XFrames]].
* The [[DOM Events]] were to be replaced by [[XML Events]], which uses the XML [[Document Object Model]].
* A new list element type, the <code>nl</code> element type, were to be included to specifically designate a list as a navigation list. This would have been 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 was to be able to act as a [[hyperlink]], e.&nbsp;g., <code><nowiki><li href="articles.html">Articles</li></nowiki></code>, similar to [[XLink]]. However, XLink itself is not compatible with XHTML due to design differences.
* Any element was to be able to reference alternative media with the <code><nowiki>src</nowiki></code> attribute, e.&nbsp;g., <code><nowiki><p src="lbridge.jpg" type="image/jpeg">London Bridge</p></nowiki></code> is the same as <code><nowiki><object src="lbridge.jpg" type="image/jpeg"><p>London Bridge</p></object></nowiki></code>.
* The <code>alt</code> attribute of the <code>img</code> element was removed: alternative text was to be given in the content of the <code>img</code> element, much like the <code>object</code> element, e.&nbsp;g., <code><nowiki><img src="hms_audacious.jpg">HMS <span class="italic">Audacious</span></img></nowiki></code>.
* A single heading element (<code>h</code>) was added. The level of these headings was determined by the depth of the nesting. This would have allowed the use of headings to be infinite, rather than limiting use to six levels deep.
* The remaining presentational elements <code>i</code>, <code>b</code> and <code>tt</code>, still allowed in XHTML 1.x (even Strict), were to be absent from XHTML 2.0. The only somewhat presentational elements remaining were to be <code>sup</code> and <code>sub</code> for superscript and subscript respectively, because they have significant non-presentational uses and are required by certain languages. All other tags were meant to be [[Semantic HTML|semantic]] instead (e.&nbsp;g. <code>strong</code> for <strong>strong emphasis</strong>) while allowing the user agent to control the presentation of elements via CSS (e.g. rendered as boldface text in most visual browsers, but possibly rendered with changes of tone in a text-to-speech reader, larger + italic font per rules in a user-end stylesheet, etc.).
* The addition of RDF triple with the <code>property</code> and <code>about</code> attributes to facilitate the conversion from XHTML to RDF/XML.

=== XHTML5 ===
{{Main|HTML5}}
[[HTML5]] 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 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 [[internet forum]] sites or online shops.<ref name="html-5.0-relationship">{{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…}}</ref>

HTML5 has both a regular <code>text/html</code> serialization and an XML serialization, which is also known as [[XHTML5]].<ref>{{cite web|url=http://www.w3.org/TR/html5/the-xhtml-syntax.html#xhtml|title=9 The XHTML syntax — HTML5|work=w3.org}}</ref> The language is 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 <code>section</code> and <code>aside</code> tags.

== Semantic content in XHTML ==
[[XHTML+RDFa]] is an extended version of the XHTML markup language for supporting [[Resource Description Framework|RDF]] through a collection of attributes and processing rules in the form of [[Well-formed XML#Well-formedness and error-handling|well-formed XML]] documents. This host language is one of the techniques used to develop [[Semantic Web]] content by embedding rich semantic markup.

== Valid XHTML documents ==
{{unreferenced section|date=July 2013}}
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 <code>html</code>, and must contain an <code>xmlns</code> attribute to associate it with the XHTML [[XML namespace|namespace]]. The namespace URI for XHTML is <code><nowiki>http://www.w3.org/1999/xhtml</nowiki></code>. The example tag below additionally features an <code>xml:lang</code> attribute to identify the document with a [[natural language]]:

<source lang="xml">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
</source>

=== DOCTYPEs ===
{{Main|DOCTYPE}}
In order to validate an XHTML document, a [[Document Type Declaration]], or ''DOCTYPE'', may be used. A DOCTYPE declares to the browser the [[Document Type Definition]] (DTD) to which the document conforms. 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.

=== XML declaration ===
{{See also|Processing Instruction}}
A [[character encoding]] may be specified at the beginning of an XHTML document in the XML declaration when the document is served using the <code>application/xhtml+xml</code> [[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:

: <code>&lt;?xml version="1.0" encoding="UTF-8" ?&gt;</code>

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 <code>text/html</code>.

=== Common errors ===
Some of the most common errors in the usage of XHTML are:
* Not closing empty elements (elements without closing tags in HTML4)
** Incorrect: <code><nowiki><br></nowiki></code>
** Correct: <code><nowiki><br /></nowiki></code><br/>Note that any of these is acceptable in XHTML: <code>&lt;br&gt;&lt;/br&gt;</code>, <code>&lt;br/&gt;</code>, and <code>&lt;br&nbsp;/&gt;</code>. Older HTML-only browsers interpreting it as HTML will generally accept <code>&lt;br&gt;</code> and <code>&lt;br&nbsp;/&gt;</code>.
* [[Tag omission|Omitting end tags]]
** Incorrect: <code><nowiki><p>This is a paragraph.<p>This is another paragraph.</nowiki></code>
** Correct: <code><nowiki><p>This is a paragraph.</p><p>This is another paragraph.</p></nowiki></code>
* Improperly nesting elements (Note that this would also be invalid in [[HTML]])
** Incorrect: <code><nowiki><em><strong>This is some text.</em></strong></nowiki></code>
** Correct: <code><nowiki><em><strong>This is some text.</strong></em></nowiki></code>
* Not putting quotation marks around attribute values
** Incorrect: <code><nowiki><td rowspan=3></nowiki></code>
** Incorrect: <code><nowiki><td rowspan='3"></nowiki></code>
** Correct: <code><nowiki><td rowspan="3"></nowiki></code>
** Correct: <code><nowiki><td rowspan='3'></nowiki></code>
* Using the ampersand character outside entities (Note that this would also be invalid in [[HTML]])
** Incorrect: <code><nowiki><title>Cars &amp; Trucks</title></nowiki></code>
** Correct: <code><nowiki><title>Cars &amp;amp; Trucks</title></nowiki></code>
** Incorrect: <code><nowiki><a href="index.php?page=news&amp;id=5">News</a></nowiki></code>
** Correct: <code><nowiki><a href="index.php?page=news&amp;amp;id=5">News</a></nowiki></code>
* Failing to recognize that XHTML elements and attributes are case sensitive
** Incorrect: <code><nowiki><BODY><P ID="ONE">The Best Page Ever</P></BODY></nowiki></code>
** Correct: <code><nowiki><body><p id="ONE">The Best Page Ever</p></body></nowiki></code>
* Using attribute minimization
** Incorrect: <code><nowiki><textarea readonly>READ-ONLY</textarea></nowiki></code>
** Correct: <code><nowiki><textarea readonly="readonly">READ-ONLY</textarea></nowiki></code>
* Misusing [[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 <code>head</code> element.
<source lang="xml">
<link rel="stylesheet" href="/style/screen.css" type="text/css" />
<script type="text/javascript" src="/script/site.js"></script>
</source>

::Note: The format <code>&lt;script …&gt;&lt;/script&gt;</code>, rather than the more concise <code>&lt;script … /&gt;</code>, is required for HTML compatibility when served as MIME type <code>text/html</code>.
:* 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 as <code>application/xhtml+xml</code> and target only fully conformant browsers, or serve the page as <code>text/html</code> 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 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 <code>role</code> attribute, [[RDFa]] and [[WAI-ARIA]] degrade gracefully in a similar manner.

XHTML 2.0 is 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 “<code>document.createElement()</code>” to register a new HTML element within Internet Explorer, or complete JavaScript frameworks, such as the [[FormFaces]] implementation of [[XForms]].)

=== Examples ===
The following are examples of XHTML 1.0 Strict, with both having the same visual output. The former one follows the HTML Compatibility Guidelines of the XHTML Media Types Note while the latter one breaks backward compatibility, but provides cleaner markup.<ref name="xhtml-media-2009" />

{| class="wikitable"
|+ style="text-align: left;" | Media type recommendation (in RFC 2119 terms) for the examples:
|-
! style="width:250px; height:28px;"| Media type
! style="width:100px; height:28px;"| Example 1
! style="width:100px; height:28px;"| Example 2
|-
! style="width:250px; height:25px;"| application/xhtml+xml
| style="width:100px; height:25px;"| SHOULD || style="width:100px; height:25px;"| SHOULD
|-
! style="width:250px; height:25px;"| application/xml
| style="width:100px; height:25px;"| MAY || style="width:100px; height:25px;"| MAY
|-
! style="width:250px; height:25px;"| text/xml
| style="width:100px; height:25px;"| MAY || style="width:100px; height:25px;"| MAY
|-
! style="width:250px; height:25px;"| text/html
| style="width:100px; height:25px;"| MAY
| style="width:100px; height:25px;"| SHOULD NOT
|}

Example 1.
<source lang="xml">
<!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 Strict 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>
</source>

Example 2.
<source lang="xml">
<?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 Strict 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"
type="application/pdf"
data="http://www.w3.org/TR/xhtml1/xhtml1.pdf"
width="100%"
height="500"/>
</p>
</body>
</html>
</source>

Notes:
# The "loadpdf" function is actually a workaround for Internet Explorer. It can be replaced by adding <code><nowiki><param name="src" value="http://www.w3.org/TR/xhtml1/xhtml1.pdf" /></nowiki></code> within <code><nowiki><object></nowiki></code>.
# The <code>img</code> element does not get a <code>name</code> attribute in the [http://www.w3.org/TR/xhtml1/dtds.html#a_dtd_XHTML-1.0-Strict XHTML 1.0 Strict DTD]. Use <code>id</code> instead.

==Cross-compatibility of XHTML and HTML==

HTML5 and XHTML5 serializations are largely inter-compatible if adhering to the stricter XHTML5 syntax, but there are some cases in which XHTML will not work as valid HTML5 (e.g., [[Processing Instruction|processing instructions]] are deprecated in {{clarify span|HTML|date=March 2013}}, are treated as comments, and close on the first ">", whereas they are fully allowed in XML, are treated as their own type, and close on "<code>{{nowrap|?>}}</code>").<ref>[http://wiki.whatwg.org/wiki/HTML_vs._XHTML HTML vs. XHTML], WHATWG Wiki</ref>

== See also ==
* [[Extensible User Interface Protocol]]
* [[HTML]]
* [[List of XML and HTML character entity references]]

== References ==
{{Reflist|colwidth=30em}}

== 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/xhtml11/ XHTML 1.1 Recommendation]
* [http://www.w3.org/TR/xhtml2/ XHTML 2.0 Working Group Note]
* [http://www.w3.org/TR/xhtml-basic/ XHTML Basic]
* [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 <code>application/xhtml+xml</code> using [[PHP]], [[Python (programming language)|Python]], and [[Apache HTTP Server|Apache]] (via [[URL rewriting]]).
** [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/how-to-make-a-web-page.htm Heptagrama's Basic XHTML 1.0 Strict Tutorial]
* [http://validator.w3.org/ W3C's Markup Validator]
* [http://corsis.sourceforge.net/index.php/Html2Xhtml HTML to XHTML conversion library for .NET]

{{Document markup languages}}
{{W3C Standards}}
{{Web browsers}}

{{Authority control}}

{{DEFAULTSORT:Xhtml}}
[[Category:XHTML| ]]
[[Category:HTML]]
[[Category:Markup languages]]
[[Category:World Wide Web Consortium standards]]
[[Category:XML-based standards]]

Revision as of 17:24, 22 August 2016

XHTML
Filename extension
.xhtml, .xht,
.xml, .html, .htm
Internet media type
application/xhtml+xml
Developed byWorld Wide Web Consortium
Initial release26 January 2000 (2000-01-26)
Latest release
5.0
28 October 2014; 10 years ago (2014-10-28)
Type of formatMarkup language
Extended fromXML, HTML
StandardW3C HTML5 (Recommendation)
Free format?Yes

Extensible Hypertext Markup Language (XHTML) is part of the family of XML markup languages. It mirrors or extends versions of the widely used Hypertext Markup Language (HTML), the language in which Web pages are formulated.

While HTML, prior to HTML5, was defined as an application of Standard Generalized Markup Language (SGML), a flexible markup language framework, XHTML is an application of XML, a more restrictive subset of SGML. XHTML documents are well-formed and may therefore be parsed using standard XML parsers, unlike HTML, which requires a lenient HTML-specific parser.[1]

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. The standard known as XHTML5 is being developed as an XML adaptation of the HTML5 specification.[2][3]

Overview

XHTML 1.0 is "a reformulation of the three HTML 4 document types as applications of XML 1.0".[4] The World Wide Web Consortium (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 commented 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."[4]

However, in 2005, the Web Hypertext Application Technology Working Group (WHATWG) formed, independently of the W3C, to work on advancing ordinary HTML not based on XHTML. The WHATWG eventually began working on a standard that supported both XML and non-XML serializations, HTML5, in parallel to W3C standards such as XHTML 2. In 2007, the W3C's HTML working group voted to officially recognize HTML5 and work on it as the next-generated HTML standard.[5] In 2009, the W3C allowed the XHTML 2 Working Group's charter to expire, acknowledging that HTML5 would be the sole next-generation HTML standard, including both XML and non-XML serializations.[6] Of the two serializations, the W3C suggests that most authors use the HTML syntax, rather than the XHTML syntax.[7]

Motivation

XHTML was developed to make HTML more extensible and increase interoperability with other data formats.[8] In addition, browsers were forgiving of errors in HTML, and most websites were displayed despite technical errors in the markup; XHTML introduced stricter error handling.[9] HTML 4 was ostensibly an application of Standard Generalized Markup Language (SGML); however the specification for SGML was complex, and neither web browsers nor the HTML 4 Recommendation were fully conformant to it.[10] The XML standard, approved in 1998, provided a simpler data format closer in simplicity to HTML 4.[11] By shifting to an XML format, it was hoped HTML would become compatible with common XML tools;[12] servers and proxies would be able to transform content, as necessary, for constrained devices such as mobile phones.[13] By using namespaces, XHTML documents could provide extensibility by including fragments from other XML-based languages such as Scalable Vector Graphics and MathML.[14] Finally, the renewed work would provide an opportunity to divide HTML into reusable components (XHTML Modularization) and clean up untidy parts of the language.[15]

Relationship to HTML

There are various differences between XHTML and HTML. The Document Object Model (DOM) is a tree structure that represents the page internally in applications, and XHTML and HTML are two different ways of representing that in markup (serializations). Both are less expressive than the DOM (for example, "--" may be placed in comments in the DOM, but cannot be represented in a comment in either XHTML or HTML), and generally XHTML's XML syntax is a little more expressive than HTML (for example, arbitrary namespaces are not allowed in HTML). First off, one source of differences is immediate: XHTML uses an XML syntax, while HTML uses a pseudo-SGML syntax (officially SGML for HTML 4 and under, but never in practice, and standardised away from SGML in HTML5). Secondly however, because the expressible contents of the DOM in syntax are slightly different, there are some changes in actual behavior between the two models.

First, there are some differences in syntax:[16]

  • Broadly, the XML rules require that all elements be closed, either by a separate closing tag or using self-closing syntax (e.g. <br />), while HTML syntax permits some elements to be unclosed because either they are always empty (e.g. <input>) or their end can be determined implicitly ("omissibility", e.g. <p>).
  • XML is case-sensitive for element and attribute names, while HTML is not.
  • Some shorthand features in HTML are omitted in XML, such as (1) attribute minimization, where attribute values or their quotes may be omitted (e.g. <option selected> or <option selected=selected>, while in XML this must be expressed as <option selected="selected">); (2) element minimization may be used to remove elements entirely (such as <tbody> inferred in a table if not given); and (3) the rarely used SGML syntax for element minimization ("shorttag"), which most browsers do not implement.[17]
  • There are numerous other technical requirements surrounding namespaces and precise parsing of whitespace and certain characters and elements. The exact parsing of HTML in practice has been undefined until recently; see the HTML5 specification ([HTML5]) for full details, or the working summary (HTML vs. XHTML).

Second, in contrast to these minor syntactical differences, there are some behavioral differences, mostly arising from the underlying differences in serialization. For example:

  • Most prominently, behavior on parse errors differ. A fatal parse error in XML (such as an incorrect tag structure) causes document processing to be aborted.
  • Most content requiring namespaces will not work in HTML, except the built-in support for SVG and MathML in the HTML5 parser along with certain magic prefixes such as xlink.
  • JavaScript processing is a little different in XHTML, with minor changes in case sensitivity to some functions, and further precautions to restrict processing to well-formed content. Scripts must not use the document.write() method; it is not available for XHTML. The innerHTML property is available, but will not insert non-well-formed content. On the other hand, it can be used to insert well-formed namespaced content into XHTML.
  • Cascading Style Sheets (CSS) is also applied slightly differently. Due to XHTML's case-sensitivity, all CSS selectors become case sensitive for XHTML documents.[18] Some CSS properties, such as backgrounds, set on the <body> element in HTML are 'inherited upwards' into the <html> element; this appears not to be the case for XHTML.[19]

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.[20][21]

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.[22][23]

Most web browsers have mature support[24] for all of the possible XHTML media types.[25] The notable exception is Internet Explorer versions 8 and earlier 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 Internet Explorer 8 (released in March 2009) exhibit this behavior.[26] Microsoft developer Chris Wilson explained in 2005 that IE7’s priorities were improved browser security and CSS support, and that proper XHTML support would be difficult to graft onto IE’s compatibility-oriented HTML parser;[27] however, Microsoft added support for true XHTML in IE9.[28]

As long as support is not widespread, most web developers avoid using XHTML that is not HTML-compatible,[29] so advantages of XML such as namespaces, faster parsing and smaller-footprint browsers do not benefit the user.[30][31][32]

Criticism

In the early 2000s, some Web developers began to question why Web authors ever made the leap into authoring in XHTML.[33][34][35] 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 Internet Explorer 6.[36][37] 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 a new HTML specification, 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."[38] The current HTML5 working draft says "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, editor of the HTML5 specification criticising the improper use of XHTML in 2002,[33] is a member of the group developing this specification and is listed as one of the co-editors of the current working draft.[39]

Simon Pieters researched the XML-compliance of mobile browsers[40] and concluded “the claim that XHTML would be needed for mobile devices is simply a myth”.

Versions of XHTML

XHTML 1.0

In earlier times[when?], Wikipedia used the XHTML 1.0 Transitional doctype and syntax, though it was not served as XHTML

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 name of the specification had changed to XHTML 1.0: The Extensible HyperText Markup Language, and in January 2000 it was officially adopted as a W3C Recommendation.[41] There are three formal DTDs for XHTML 1.0, corresponding to the three different versions of HTML 4.01:

  • XHTML 1.0 Strict is the XML equivalent to strict HTML 4.01, and includes elements and attributes that have not been marked deprecated in the HTML 4.01 specification. As of November 2015, XHTML 1.0 Strict is the document type used for the homepage of the website of the World Wide Web Consortium.
  • XHTML 1.0 Transitional is the XML 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 XML 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.[42]

Modularization of XHTML

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 initial draft of Modularization of XHTML became available in April 1999, and reached Recommendation status in April 2001.[43]

The first modular XHTML variants were XHTML 1.1 and XHTML Basic 1.0.

In October 2008 Modularization of XHTML was superseded by XHTML Modularization 1.1, which adds an XML Schema implementation. It was itself superseded by a second edition in July 2010.[44]

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.[45] 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 name attribute from the a and map elements, and (in the first edition of the language) removal of the lang attribute in favour of xml:lang.

Although XHTML 1.1 is largely compatible with XHTML 1.0 and HTML 4, in August 2002 the Working Group issued a formal Note advising that it should not be transmitted with the HTML media type.[46] With limited browser support for the alternate application/xhtml+xml media type, XHTML 1.1 proved unable to gain widespread use. In January 2009 a second edition of the document (XHTML Media Types - Second Edition) was issued, relaxing this restriction and allowing XHTML 1.1 to be served as text/html.[47]

A second edition of XHTML 1.1 was issued on 23 November 2010, which addresses various errata and adds an XML Schema implementation not included in the original specification.[48] (It was first released briefly on 7 May 2009 as a "Proposed Edited Recommendation"[49] before being rescinded on 19 May due to unresolved issues.)Cite error: The <ref> tag has too many names (see the help page).

Of all the versions of XHTML, XHTML Basic 1.0 provides the fewest features. With XHTML 1.1, it is one of the two first implementations of modular XHTML. In addition to the Core Modules (Structure, Text, Hypertext, and List), it implements the following abstract modules: Base, Basic Forms, Basic Tables, Image, Link, Metainformation, Object, Style Sheet, and Target.[50][51]

XHTML Basic 1.1 replaces the Basic Forms Module with the Forms Module, and adds the Intrinsic Events, Presentation, and Scripting modules. It also supports additional tags and attributes from other modules. This version became a W3C recommendation on 29 July 2008.[52]

The current version of XHTML Basic is 1.1 Second Edition (23 November 2010), in which the language is re-implemented in the W3C's XML Schema language. This version also supports the lang attribute.[53]

XHTML-Print

XHTML-Print, which became a W3C Recommendation in September 2006, is a specialized version of XHTML Basic designed for documents printed from information appliances to low-end printers.[54]

XHTML Mobile Profile

XHTML Mobile Profile (abbreviated XHTML MP or XHTML-MP) is a third-party variant of the W3C's XHTML Basic specification. Like XHTML Basic, XHTML was developed for information appliances with limited system resources.

In October 2001, a limited company called the Wireless Application Protocol Forum began adapting XHTML Basic for WAP 2.0, the second major version of the Wireless Application Protocol. WAP Forum based their DTD on the W3C's Modularization of XHTML, incorporating the same modules the W3C used in XHTML Basic 1.0—except for the Target Module. Starting with this foundation, the WAP Forum replaced the Basic Forms Module with a partial implementation of the Forms Module, added partial support for the Legacy and Presentation modules, and added full support for the Style Attribute Module.

In 2002, the WAP Forum was subsumed into the Open Mobile Alliance (OMA), which continued to develop XHTML Mobile Profile as a component of their OMA Browsing Specification.

XHTML Mobile Profile 1.1

To this version, finalized in 2004, the OMA added partial support for the Scripting Module, and partial support for Intrinsic Events. XHTML MP 1.1 is part of v2.1 of the OMA Browsing Specification (1 November 2002).[55]

XHTML Mobile Profile 1.2

This version, finalized 27 February 2007, expands the capabilities of XHTML MP 1.1 with full support for the Forms Module and OMA Text Input Modes. XHTML MP 1.2 is part of v2.3 of the OMA Browsing Specification (13 March 2007).[55]

XHTML Mobile Profile 1.3

XHTML MP 1.3 (finalized on 23 September 2008) uses the XHTML Basic 1.1 document type definition, which includes the Target Module. Events in this version of the specification are updated to DOM Level 3 specifications (i.e., they are platform- and language-neutral).

XHTML 1.2

The XHTML 2 Working Group considered the creation of a new language based on XHTML 1.1.[56] If XHTML 1.2 was created, it would 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) might also be present. The XHTML2 WG had not been chartered to carry out the development of XHTML1.2. Since the W3C announced that it does not intend to recharter the XHTML2 WG,[6] and closed the WG in December 2010, this means that XHTML 1.2 proposal would not eventuate.

XHTML 2.0

Between August 2002 and July 2006, the W3C released 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.[57] 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 was expected to appear in 2009, but on July 2, 2009, the W3C decided to let the XHTML2 Working Group charter expire by that year's end, effectively halting any further development of the draft into a standard.[6] Instead, XHTML 2.0 and its related documents were released as W3C Notes.[58][59]

New features to have been introduced by XHTML 2.0 included:

  • HTML forms were to be replaced by XForms, an XML-based user input specification allowing forms to be displayed appropriately for different rendering devices.
  • HTML frames were to be replaced by XFrames.
  • The DOM Events were to be replaced by XML Events, which uses the XML Document Object Model.
  • A new list element type, the nl element type, were to be included to specifically designate a list as a navigation list. This would have been 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 was to 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 was to 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 was removed: alternative text was to be given in the content of the img element, much like the object element, e. g., <img src="hms_audacious.jpg">HMS <span class="italic">Audacious</span></img>.
  • A single heading element (h) was added. The level of these headings was determined by the depth of the nesting. This would have allowed 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), were to be absent from XHTML 2.0. The only somewhat presentational elements remaining were to 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 were meant to be semantic instead (e. g. strong for strong emphasis) while allowing the user agent to control the presentation of elements via CSS (e.g. rendered as boldface text in most visual browsers, but possibly rendered with changes of tone in a text-to-speech reader, larger + italic font per rules in a user-end stylesheet, etc.).
  • The addition of RDF triple with the property and about attributes to facilitate the conversion from XHTML to RDF/XML.

XHTML5

HTML5 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 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 internet forum sites or online shops.[60]

HTML5 has both a regular text/html serialization and an XML serialization, which is also known as XHTML5.[61] The language is 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 tags.

Semantic content in XHTML

XHTML+RDFa is an extended version of the XHTML markup language for supporting RDF through a collection of attributes and processing rules in the form of well-formed XML documents. This host language is one of the techniques used to develop Semantic Web content by embedding rich semantic markup.

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. 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" xml:lang="en">

DOCTYPEs

In order to validate an XHTML document, a Document Type Declaration, or DOCTYPE, may be used. A DOCTYPE declares to the browser the Document Type Definition (DTD) to which the document conforms. 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.

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:

  • Not closing empty elements (elements without closing tags in HTML4)
    • Incorrect: <br>
    • Correct: <br />
      Note that any of these is acceptable in XHTML: <br></br>, <br/>, and <br />. Older HTML-only browsers interpreting it as HTML will generally accept <br> and <br />.
  • Omitting end tags
    • Incorrect: <p>This is a paragraph.<p>This is another paragraph.
    • Correct: <p>This is a paragraph.</p><p>This is another paragraph.</p>
  • Improperly nesting elements (Note that this would also be invalid in HTML)
    • Incorrect: <em><strong>This is some text.</em></strong>
    • Correct: <em><strong>This is some text.</strong></em>
  • Not putting quotation marks around attribute values
    • Incorrect: <td rowspan=3>
    • Incorrect: <td rowspan='3">
    • Correct: <td rowspan="3">
    • Correct: <td rowspan='3'>
  • Using the ampersand character outside entities (Note that this would also be invalid in HTML)
    • Incorrect: <title>Cars & Trucks</title>
    • Correct: <title>Cars &amp; Trucks</title>
    • Incorrect: <a href="index.php?page=news&id=5">News</a>
    • Correct: <a href="index.php?page=news&amp;id=5">News</a>
  • Failing to recognize that XHTML elements and attributes are case sensitive
    • Incorrect: <BODY><P ID="ONE">The Best Page Ever</P></BODY>
    • Correct: <body><p id="ONE">The Best Page Ever</p></body>
  • Using attribute minimization
    • Incorrect: <textarea readonly>READ-ONLY</textarea>
    • Correct: <textarea readonly="readonly">READ-ONLY</textarea>
  • Misusing 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 as shown in the examples below, 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 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.

XHTML 2.0 is 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 following are examples of XHTML 1.0 Strict, with both having the same visual output. The former one follows the HTML Compatibility Guidelines of the XHTML Media Types Note while the latter one breaks backward compatibility, but provides cleaner markup.[47]

Media type recommendation (in RFC 2119 terms) for the examples:
Media type Example 1 Example 2
application/xhtml+xml SHOULD SHOULD
application/xml MAY MAY
text/xml MAY MAY
text/html MAY SHOULD NOT

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 Strict 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 Strict 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"
    type="application/pdf"
    data="http://www.w3.org/TR/xhtml1/xhtml1.pdf"
    width="100%"
    height="500"/>
 </p>
 </body>
</html>

Notes:

  1. The "loadpdf" function is actually a workaround for Internet Explorer. It can be replaced by adding <param name="src" value="http://www.w3.org/TR/xhtml1/xhtml1.pdf" /> within <object>.
  2. The img element does not get a name attribute in the XHTML 1.0 Strict DTD. Use id instead.

Cross-compatibility of XHTML and HTML

HTML5 and XHTML5 serializations are largely inter-compatible if adhering to the stricter XHTML5 syntax, but there are some cases in which XHTML will not work as valid HTML5 (e.g., processing instructions are deprecated in HTML[clarify], are treated as comments, and close on the first ">", whereas they are fully allowed in XML, are treated as their own type, and close on "?>").[62]

See also

References

  1. ^ Graff, Eliot (7 May 2014). "Polyglot Markup: A robust profile of the HTML5 vocabulary". W3C.
  2. ^ "HTML vs. XHTML". whatwg.org.
  3. ^ "The WHATWG Blog". whatwg.org.
  4. ^ a b "XHTML 1.0 Specification, Section 1: What is XHTML?". World Wide Web Consortium. 2000-01-26. Retrieved 2007-06-16.
  5. ^ "results of HTML 5 text, editor, name questions". w3.org.
  6. ^ a b c "Frequently Asked Questions (FAQ) about the future of XHTML". w3.org.
  7. ^ "HTML5 Working Draft, Section 1.6: HTML vs XHTML". World Wide Web Consortium. 2011-01-13. Retrieved 2011-02-16.
  8. ^ "XHTML 1.0 Specification, Section 1.1: Why the need for XHTML?". World Wide Web Consortium. 2000-01-26. Retrieved 2007-06-16.
  9. ^ Pilgrim, Mark. "How Did We Get Here? - Dive Into HTML5". diveintohtml5.info. Retrieved 2016-06-11.
  10. ^ Arjun Ray (1999-10-06). "Dropping the Normative Reference to SGML (was: I-D ACTION.)". Retrieved 2008-12-29. … However, since ISO 8879 does not afford applications the leeway to prohibit internal subsets, it follows that the letter of the HTML [4] spec automatically disentitles it to be a conforming SGML application…
  11. ^ Tina Holmboe (2008-10-06). "XHTML—Myths and Reality". The Developer’s Archive. Retrieved 2008-12-29. … Since the design goals of XML itself partially mirrored those of the original HTML, it was logical for work to begin on formulating an XML–based markup language…
  12. ^ Kip Hampton (2001-01-10). "Creating Web Utilities Using XML::XPath". XML.com. Retrieved 2008-12-29. … The problem: You want to take advantage of the power and simplicity that XML tools can offer, but you face a site full of aging HTML documents. The solution: Convert your documents to XHTML and put Perl and XML::XPath to work…
  13. ^ Jean-Luc David (2004-04-14). "Developing Wireless Content using XHTML Mobile". XML.com. Retrieved 2008-12-29. … A useful feature of XHTML is that it can be manipulated as XML. Extensible Stylesheet Language Templates can be used to transform XHTML into WML or any other proprietary mobile formats…
  14. ^ "Namespaces Crash Course". Mozilla Developer Center. Retrieved 2008-12-29. … It has been a long standing goal of the W3C to make it possible for different types of XML based content to be mixed together in the same XML file. For example, SVG and MathML might be incorporated directly into an XHTML based scientific document…
  15. ^ Steven Pemberton (2004-07-21). "HTML and XHTML Frequently Answered Questions". World Wide Web Consortium. Retrieved 2008-12-29. … with an XML-based HTML other XML languages could include bits of XHTML, and XHTML documents could include bits of other markup languages. We could also take advantage of the redesign to clean up some of the more untidy parts of HTML, and add some new needed functionality, like better forms…
  16. ^ Clark, James (1997-12-15). "Comparison of SGML and XML". World Wide Web Consortium Note.
  17. ^ "Shorthand markup". HTML 4, Appendix B: Performance, Implementation, and Design Notes. W3C. Retrieved 30 September 2011.
  18. ^ "Case Sensitivity". SitePoint Pty. Ltd. Retrieved 30 September 2011.
  19. ^ For a non-authoritative summary, see Wilson, Nicholas. "CSS differences between XHTML and HTML".
  20. ^ "XHTML 1.0 Specification, Appendix C: HTML Compatibility Guidelines". World Wide Web Consortium. 2000-01-26. Retrieved 2007-06-16.
  21. ^ "XHTML Media Types, W3C Working Group Note". World Wide Web Consortium. 2002-08-01. Retrieved 2008-06-12.
  22. ^ [1]
  23. ^ Greta de Groat (2002). "Perspectives on the Web and Google: Monika Henzinger, Director of Research, Google", Journal of Internet Cataloging, Vol. 5(1), pp. 17-28, 2002.
  24. ^ Early 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 Mozilla Web Author FAQ. Later browsers such as Opera 9.0, Safari 3.0 and Firefox 3.0 do not have this issue.
  25. ^ "XHTML media type test - results". w3.org.
  26. ^ Chris Wilson (2005-09-15). "The <?xml> prolog, strict mode, and XHTML in IE". Retrieved 2007-06-16. I've also been reading comments for some time in the IEBlog asking for support for the "application/xml+xhtml" MIME type in IE. I should say that IE7 will not add support for this MIME type – we will, of course, continue to read XHTML when served as "text/html", presuming it follows the HTML compatibility recommendations.
  27. ^ Chris Wilson (2005-09-15). "The <?xml> prolog, strict mode, and XHTML in IE". Retrieved 2007-06-16. …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…
  28. ^ Hachamovitch, Dean (2010-03-16). "HTML5, Hardware Accelerated: First IE9 Platform Preview Available for Developers". IEBlog on Microsoft Developer Network. Microsoft. Retrieved 2010-03-22. …At this time, we're looking for developer feedback on our implementation of HTML5's parsing rules, Selection APIs, XHTML support, and inline SVG. Within CSS3, we're looking for developer feedback on IE9's support for Selectors, Namespaces, Colors, Values, Backgrounds and Borders, and Fonts.…
  29. ^ "List of XHTML Sites (the X-Philes)". Retrieved 2008-08-26.
  30. ^ "In 2007, 37 leaders in search engine optimisation concluded that having keywords in the keywords attribute is little to none." Sanger.nu blog, September 9 2008, retrieved August 2 2011 Archived 2009-02-21 at the Wayback Machine
  31. ^ "Meta used for SEO". Archived from the original on March 18, 2016. Retrieved March 18, 2016. {{cite web}}: Unknown parameter |deadurl= ignored (|url-status= suggested) (help)
  32. ^ Danny Sullivan, How To Use HTML Meta Tags, Search Engine Watch, December 5, 2002
  33. ^ a b Ian Hickson, a former developer of the Opera browser and cofounder of the WHATWG (2002-09-08). "Sending XHTML as text/html Considered Harmful". Retrieved 2007-06-16.
  34. ^ Anne van Kesteren, a developer of the Opera browser (2004-06-13). "XHTML is invalid HTML". Retrieved 2007-06-16.
  35. ^ Maciej Stachowiak, a developer of Apple's Safari browser (2006-09-20). "Understanding HTML, XML and XHTML". Retrieved 2007-06-16.
  36. ^ Brad Fults (2005-12-21). "Sending XHTML as text/html Considered Harmful to Feelings". Retrieved 2008-09-13. There are not nearly as many disadvantages (if any) to sending XHTML as text/html as [Ian Hickson] claims and the advantages I mentioned above make it well worth using in my humble opinion. There are some subtle footnotes and parentheticals [in Hickson's article] indicating that the harmfulness only applies to authors that don't know the pitfalls of this practice, but much like the "Do not eat" label on the little packets of silica gel, Ian's advisory seems to be common sense and not worth mentioning to any author who actually knows what XHTML is and how to write it.
  37. ^ Paul McDonald (2007-06-30). "The case for XHTML". Retrieved 2008-09-13. Some people say XHTML on the Web has failed, but I say it is our biggest success in the fight for Web Standards. … XHTML is a good thing for the web, though, and it's a shame that people are trying to make a case against it. To prove this, I'll flesh out the myth for you and then show you why XHTML is the best thing since sliced bread, when it comes to our fight for Web Standards. … So to conclude, sending XHTML as text/html causes no damage or harm anywhere today, as long as your XHTML does validate. And, if you want Web Standards to become more and more widespread, stick to using XHTML and validate your pages.
  38. ^ Tim Berners-Lee (2006-10-27). "Reinventing HTML". Retrieved 2007-06-16. Some things are clearer with hindsight of several years. It is necessary to evolve HTML incrementally. 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. Some large communities did shift and are enjoying the fruits of well-formed systems, but not all. It is important to maintain HTML incrementally, as well as continuing a transition to [a] well-formed world, and developing more power in that world.
    "The plan is to charter a completely new HTML group. Unlike the previous one, this one will be chartered to do incremental improvements to HTML, as also in parallel xHTML. It will have a different chair and staff contact. It will work on HTML and xHTML together. We have strong support for this group, from many people we have talked to, including browser makers.
  39. ^ Ian Hickson; David Hyatt (2011-01-13). "HTML5: A vocabulary and associated APIs for HTML and XHTML". Retrieved 2011-02-16.
  40. ^ Simon Pieters. "Results of mobile tests". Retrieved 2009-10-31.
  41. ^ "XHTML 1.0: The Extensible HyperText Markup Language, W3C Recommendation 26 January 2000". World Wide Web Consortium. 2000-01-26. Retrieved 2008-07-19.
  42. ^ "XHTML 1.0 The Extensible HyperText Markup Language (Second Edition)". World Wide Web Consortium. 2002-08-01. Retrieved 2008-07-19.
  43. ^ "Modularization of XHTML, W3C Recommendation 10 April 2001". World Wide Web Consortium. 2001-04-10. Retrieved 2008-07-19.
  44. ^ "XHTML Modularization 1.1 - Second Edition, W3C Recommendation 29 July 2010". World Wide Web Consortium. 2010-07-29. Retrieved 2010-12-31.
  45. ^ "XHTML 1.1 - Module-based XHTML, W3C Recommendation 31 May 2001". World Wide Web Consortium. 2001-05-31. Retrieved 2008-07-19.
  46. ^ "XHTML Media Types, W3C Working Group Note 1 August 2002". World Wide Web Consortium. 2002-08-01. Retrieved 2008-07-19.
  47. ^ a b "XHTML Media Types - Second Edition, W3C Working Group Note 16 January 2009". World Wide Web Consortium. 2009-01-16. Retrieved 2009-01-28. This document supersedes the HTML Compatibility Guidelines originally found in XHTML 1.0 Appendix C.
  48. ^ "XHTML 1.1, XHTML Basic 1.1, XHTML Print Recommendations Revised". W3C NEWS ARCHIVE: 2010. World Wide Web Consortium. Retrieved 12 December 2010.
  49. ^ "XHTML 1.1 - Module-based XHTML - Second Edition". World Wide Web Consortium. 2009-05-07. Retrieved 2009-05-25.
  50. ^ "XHTML Flavors comparisons". World Wide Web Consortium. 2007-01-09. Retrieved 2013-01-30.
  51. ^ XHTML Basic. W3.org. Retrieved on 2013-07-17.
  52. ^ XHTML™ Basic 1.1. W3.org. Retrieved on 2013-07-17.
  53. ^ "XHTML™ Basic 1.1 - Second Edition". w3.org.
  54. ^ "XHTML-Print, W3C Recommendation 20 September 2006". World Wide Web Consortium. 2006-09-20. Retrieved 2008-07-19.
  55. ^ a b "OMA Browsing Archive". OMA Releases. Open Mobile Alliance Ltd. 26 September 2011. {{cite web}}: External link in |work= (help)
  56. ^ "[XHTML] Agenda: 2008-07-09". w3.org.
  57. ^ See both XHTML 2.0 Considered Harmful and 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 similar criticism, but also shows support for some backward-incompatible changes such as the decision to remove the ins and del elements.
  58. ^ "XHTML 2.0, W3C Working Group Note 16 December 2010". World Wide Web Consortium. 2010-12-16. Retrieved 2010-12-31.
  59. ^ "XHTML2 Working Group Documents Published as W3C Notes". World Wide Web Consortium. 2010-12-16. Retrieved 2010-12-31.
  60. ^ Ian Hickson (2008-01-22). "HTML 5, 1.1.2. Relationship to XHTML2". World Wide Web Consortium. Retrieved 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…
  61. ^ "9 The XHTML syntax — HTML5". w3.org.
  62. ^ HTML vs. XHTML, WHATWG Wiki