「XHTML文書」を text/html として認識させるべからず

text/html と認識された XHTML 文書は XHTML 文書ではない

XHTML の理念

W3C では、 HTML を XML 応用系として再構築するため、 XHTML を策定しました。

XHTML は XML であるが故に、従来の HTML としての機能を保持しつつも、他の XML 応用系への組込みや、XSLT などによるデータの再加工、独自のサブセットやスーパーセットの製作など、従来の HTML では困難だったことが容易に、かつ低コストで出来るようになりました。

また、 XHTML は XML であるが故に、 XML 宣言や名前空間という概念、 lang, space などの予約属性や終了タグ省略の禁止など、 XML に特化した記法が必要になります。

text/html として扱われた場合

XHTML 文書を text/html として認識させることは可能ですし、現状 XHTML 準拠を歐っているサイトであっても、 text/html として認識させている場合が殆んどです。

しかし、以下の理由により、 XHTML 文書を text/html として認識させることは好ましくありません。

現状と従来の方法

User agent の現状

具体的な方法

レジストリの操作
WinIE では、レジストリを操作して、 application/xhtml+xml を HTML 文書として認識させる方法があります。ただし、あくまで「HTMLとして」認識させるだけであり、本来の「XML 文書としての役割」は殺されたままです。良く言って「裏技」でしかありません。
コンテントネゴシエーション
text/html 版と application/xhtml+xml 両方の文書を用意し、 コンテントネゴシエーションを用いる方法があります。極めて真っ当な手段と言えますが、後者を(自発的に)選択する User agent はごく限られていること、受け手の環境に応じて、同じ内容の複数の文書を用意しなければならないことが、欠点と言えば欠点です。

個人的な見解

大前提は「XHTML 文書は XML 文書」であること

繰り返します。XHTML 文書を単なる HTML 文書として認識させた場合、 XML に特化した記述が無駄になり、 XML 応用系としての利点を享受出来ないばかりか、将来、場合によっては、 User agent の誤動作を引き起こす原因にもなり得ます。 XHTML 文書は、 application/xhtml+xml もしくは application/xml と認識させねばなりません。

私が提案する方法…現状の実装との兼ね合いより

XHTML を text/html として認識させている理由として「User Agent のサポートが極めて御粗末だから」ということを良く聞きます。しかし、それは厳密には正しいとは言えません。現在出回っている多くの Web ブラウザ (MSIE, Mozilla, Opera など)でも、 XML の理念に則った形で、 XHTML を本来の XML 応用言語として認識させる事は、全く不可能という訳ではありません。

XHTML 文書を XML 文書として認識させることで、 XML に特化した記述を最大限に生かし、他の XML 処理系との親和性を高める…。これが現在、 W3C が提唱する XHTML の理念でありましょう。私はその理念に従う形で、XML 応用言語としての認識が実現可能であることを、「the Lena's Fan Club」の全文書で示していました。 サーバーサイドスクリプトや CGI を応用し、 WinIE においても、 XHTML 文書を XML 文書 (application/xml)として認識させるよう、工夫をしているのです。

慥かに、 MSIE 対策として一部の要素で html 接頭辞を使わねばならず、現在 W3C で公開されている DTD では対処が出来ません。しかし XML という立場から見れば、接頭辞が違っても URI が同一ならば、それらは同じ仲間に属する要素であり、本質的には、現行の XHTML の仕様からかけ離れた記述とはなりません(例えば RELAX-NG を用いれば、MSIE 用の XHTML 文書であっても、通常の XHTML 1.x 用のスキーマで Valid と見倣されます)。

少なくとも、上記に示した方法は、現時点で技術的に最も全うで、現在の仕様で実現可能な最も増しな解決法の一つであることは、間違い無いかと思われます。

外部リンク

Media Types に附いて

XHTML の応用に附いて