XHTMLの全体像:成立背景からHTML5との関係と配信 MIMEタイプの影響まで解説
XHTMLとは:概要と成立の背景
XHTML(Extensible HyperText Markup Language)は、HTMLをXML(eXtensible Markup Language)のルールに従って定義し直したマークアップ言語です。1998年から2000年代初頭にかけて、ウェブ標準化団体であるW3CがHTML 4.01の後継として策定したもので、HTMLの表現力を保ちながら、XMLの厳格な構文チェックや拡張性を取り入れることを目的としていました。代表的な仕様にはXHTML 1.0(W3C勧告、2000年)とXHTML 1.1(2001年)があります。
なぜXHTMLが作られたのか
従来のHTMLは「タグの省略」や「大文字・小文字の混在」など寛容(lenient)な記述をブラウザが許容することで発展しました。しかし、それが原因で文書構造が曖昧になり、ツールによる解析や再利用、XMLを利用したデータ連携が難しくなっていました。XHTMLはXMLの「Well-formed(厳密な整形式)」という利点を取り入れることで、以下のようなメリットを期待していました。
- 構文エラーを早期発見できる(厳密なパースでエラーが即座に判明する)
- 他のXMLベース技術(XSLT、XPath、XML名前空間など)と相互運用しやすい
- マシン処理・変換が容易になることでアクセシビリティや再利用が向上する
主な技術的特徴
XHTMLにはHTMLと異なるいくつかの厳格なルールがあります。代表的なものは次の通りです。
- タグと属性名は小文字で書く(XMLの識別子は大文字小文字を区別するため)
- 全ての開始タグに対して終了タグを記述するか、空要素は自己終了形式で書く(例:<br />、<img src="..." alt="..." />)
- 全ての属性値は引用符で囲む(例:class="foo")
- 属性名の重複や未対応のエスケープ文字があるとパーサがエラーとなる
- XML名前空間を利用できる(例:XHTML文書要素は通常 "http://www.w3.org/1999/xhtml" 名前空間)
文書の配信(MIMEタイプ)とブラウザの扱い
XHTMLは、シリアライズ(送出)方法によって振る舞いが大きく変わります。特に重要なのはContent-Type(MIMEタイプ)です。
- application/xhtml+xml:XMLとして正しく処理されるため、ブラウザはXMLパーサで解析します。厳密な整形式が要求され、エラーがあると文書全体が表示されない(多くのブラウザはエラーページを出す)。
- text/html:従来のHTMLとしてパースされるため、ブラウザは寛容に解析します。結果的にXHTMLであってもHTMLパーサの挙動に委ねられ、XML固有の利点(厳密なエラー検出など)は失われますが、互換性は高い。
歴史的には、Internet Explorerの一部バージョンがapplication/xhtml+xmlをサポートしていなかったため、多くのサイトが互換性を優先してtext/htmlで配信することが多く、これがXHTML本来の恩恵を限定する一因となりました。
スクリプトとスタイルの扱い(XMLとして配信する場合の注意)
application/xhtml+xmlで配信する場合、内部の<script>や<style>要素の中身はXMLパーサの対象になるため、特殊文字(例:<や&)が問題を起こしやすくなります。対策としては以下が一般的です。
- 外部ファイルにスクリプトやスタイルを置く(最も安全)
- 内部に書く場合はCDATAセクションで囲む:<script type="text/javascript">/*<![CDATA[*/ JavaScript /*]]></script>(ただしHTML側でtext/htmlとして扱うとCDATAがそのまま出力されるので注意)
- JS中の<や&を適切にエスケープする
バージョンと歴史的経緯
主要な仕様とその経緯は次の通りです。
- XHTML 1.0(W3C勧告、2000年):HTML 4.01をXML化したもので、Strict/Transitional/Framesetの3つのDTDが存在。
- XHTML 1.1(W3C勧告、2001年):モジュール化された仕様で、より厳密に整理されたもの。
- XHTML 2.0:より革新的な変更を伴う次期仕様として開発が進められましたが、互換性の問題や実装の困難さなどから2009年頃までに事実上中止され、W3Cはその後HTMLの改良(HTML5/WHATWGの流れ)を重視するようになりました。
XHTMLとHTML5(現代の推奨)との関係
現在は多くの開発者がHTML5(WHATWGのLiving Standard)を用いています。HTML5は伝統的なHTMLシンタックスを維持しつつ、XHTMLライクなXMLシリアライズ(XHTML5)も定義しています。つまり、HTML5は2つの書き方を許容します:
- HTMLシンタックス(text/htmlで配信、寛容なパーサ)
- XHTMLシンタックス(application/xhtml+xmlで配信、XMLパーサ)
実務的には、互換性やツールの対応を考えるとHTMLシンタックスでHTML5を書くケースが圧倒的に多く、XHTMLを新規採用するよりHTML5で必要な要件を満たす方が現実的です。
よくある誤解と落とし穴
- 「XHTMLは単にタグの書き方を厳しくしたHTMLだ」という認識は部分的に正しいが、配信方法次第でブラウザの処理が全く異なる点に注意。
- application/xhtml+xmlで配信すれば自動的に全ブラウザで同じ表示になる、というのは誤り。XMLパーサに強制されるため表示エラーにつながる場合があり、また古いブラウザや一部実装は対応が不十分。
- XML宣言()はapplication/xhtml+xmlで使えるが、text/htmlで配信する場合に問題(特にIEの一部バージョンで互換表示のトリガ)を引き起こすことがある。
実運用での判断基準(推奨)
- 既存のサイト運用や幅広いブラウザ互換性を最優先するなら、HTML5(text/html)を採用するのが現実的。
- XMLの恩恵(XSLTやXMLツールとの連携、厳密な整形式チェック)を強く活かしたい場合は、application/xhtml+xmlでの配信を検討。ただし、スクリプトやブラウザ対応に関する十分なテストが必須。
- 新規開発でXHTML風の文法を好む場合でも、HTML5のXHTMLシリアライズ(XHTML5)やHTML5の仕様をベースにするほうが将来性がある。
具体例(DOCTYPEと簡単なXHTMLスニペット)
XHTML 1.0 StrictのDOCTYPEと冒頭例(application/xhtml+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" lang="ja">
<head><meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" /><title>例</title></head>
<body><p>XHTMLの例文。<br />空要素は自己終了。</p></body>
</html>
まとめ(現状の位置づけ)
XHTMLは「構文が厳格で拡張性のあるHTML」として重要な役割を果たしてきましたが、配信方法によっては本来の効用を享受できないこと、またブラウザ互換性の問題が運用面での障害となることが多く、近年はHTML5が実運用で主流となっています。もしXMLベースの厳密性が不可欠であればapplication/xhtml+xmlで正しく配信する選択肢は有効ですが、多くのケースではHTML5(必要ならXHTMLライクな書き方で)を採用する方が利便性・互換性ともに優れます。
参考文献
- W3C: Extensible HyperText Markup Language (XHTML) 1.0
- W3C: XHTML™ 1.1 – Module-based XHTML
- W3C: XHTML2(アーカイブ/開発状況)
- IETF RFC 7303 — XML Media Types(application/xhtml+xml を含む)
- MDN Web Docs(日本語): XHTML
- WHATWG: HTML Living Standard(HTML5 と XHTML シリアライズの関係)
- W3C Markup Validation Service(バリデーションツール)


