Extensible HyperText Markup Language

Extensible HyperText Markup Language（エクステンシブル ハイパーテキスト マークアップ ランゲージ）、略記・略称：XHTML （エックスエイチティーエムエル）は、SGMLで定義されていたHTMLをXMLの文法で定義しなおしたマークアップ言語である。その仕様はHTMLと同じくW3Cによって勧告されていた。しかし2007年にW3C HTML WGを設立するとWHATWGとの共同作業を行い、2009年、W3Cは開発を正式に中止した。HTML5はXMLの書式に従わずともMathMLやSVGなどを埋め込むことが可能である。
上述の通りXHTMLは開発が中止されており、この記事には古い内容を多分に含んでいる。しかしながら、HTMLを解釈するユーザーエージェント（Webブラウザなど）は、引き続きサポートしている。
なお、「eXtensible HyperText Markup Language の略である」とされることがあるが、これは間違いであり、XはExの発音を表している。
HTMLとの相違点.
XHTMLはXMLアプリケーションである。よって、XMLの文法に従うために、HTMLと異なる部分が存在する。以下は、主な文法上の相違点とソースのサンプルである。
メディアタイプがapplication/xhtml+xmlの場合、meta要素のhttp-equiv属性の使用は非推奨となる。代わりにHTTPのヘッダでメディアタイプを指示することが必要となる。
HTML要素#HTML構文とXML構文との違いも参照されたし。
歴史.
XHTML 1.0.
HTML 4.01をXMLにて再定義したもので、HTML 4.01と同様にStrict、Transitional、Framesetという3種類のDTDが存在する。
2000年1月26日に勧告となり、2002年8月1日に改訂版であるSecond Editionが勧告された。
XHTML Basic.
XHTMLのサブセットで、PDAや携帯電話などの小規模な端末を含む、より広域の環境のための仕様である。2000年12月19日にXHTML Basic 1.0が勧告された。
その後、OMAが策定するXHTML Mobile Profileとの不整合を解消する目的で策定された XHTML Basic 1.1が2008年7月29日に勧告された。
Basic1.1では、Basic1.0から次のような変更が行われている。
XHTML Modularization (Modularization of XHTML, M12n).
XHTMLをその要素の目的や役割ごとに分割し、フレームワーク化したもの。XHTML 1.1やXHTML 2.0は、M12nをベースに構築されている。バージョン1.0が2001年4月10日に、バージョン1.1が2008年10月にそれぞれ勧告された。2009年7月現在、バージョン2.0が草案の段階にある。
1.0から1.1ではXML Schemaへの対応などが変更点となった。
XHTML 1.1.
機能がモジュール化されたXHTML。XHTML 1.0からの主な違いは、次の通りである。
2001年5月31日に仕様が勧告となった。
2010年11月23日にXHTML 1.1 Second Editionが勧告された。エラッタの修正とXML Schemaへの対応が主な変更点となる。
XHTML 1.2.
策定中であるXHTML Role ModuleやAccess Module、WAI-ARIAの語彙を組み込んだ新しいプロファイルとして策定予定。
XHTML 2.0.
XHTML Familyの次期バージョンとして策定されていたが、W3Cは2009年07月03日に策定の打ち切りを決定し、今後はHTML5にリソースを注ぐものとした。理由として、XHTML 2.0の市場はHTML5に比べて非常に小さいことがあげられている。
HTML5のXML構文.
HTML5をXML構文で記述したものは、しばしばXHTML5と呼ばれるが、WHATWG の標準仕様の中ではこの語は用いないことが明言されている。
HTML5をXML構文で記述するための仕様も、HTML5仕様の中で定義されている。そのため、HTML5のXML構文はHTML5の一部である。しかし、HTML5の仕様ではXML構文とHTML構文の間には違いが多く、単に「HTML5」「HTML5ドキュメント」と言う場合には、HTML構文によるもののみを指すことが多い。そのため、実用上はHTML5のXML構文はHTML5と別のものとして扱われることがある。
以下にHTML構文とXML構文の違いをいくつか挙げる。
上記のような違いによってHTML構文と見た目が大きく異なるXML構文の文書として、以下のような例が考えられる。
<?xml version="1.0" encoding="UTF-8"?>
<!-- これは妥当なHTML5のXML構文。ただしHTML構文との互換性はない -->
<?xml-stylesheet type="text/css" href="test.css"?><!-- 左のようなXML処理命令も書ける -->
<!-- この場合、ルート要素がxhtml:htmlのため、通常のHTML5のように "<!DOCTYPE html>" という文書型宣言は行えない -->
<xhtml:html xmlns:xhtml="http://www.w3.org/1999/xhtml" xml:lang="ja">
 <xhtml:head>
 <xhtml:title xml:id="title">XML名前空間を用いた拡張例（xml:id）</xhtml:title>
 <xhtml:script><![CDATA[ ... ]]></xhtml:script>
 </xhtml:head>
 <xhtml:body>
 <xhtml:p> ... </xhtml:p>
 </xhtml:body>
</xhtml:html>