W3C では、 HTML を XML 応用系として再構築するため、 XHTML を策定しました。
XHTML は XML であるが故に、従来の HTML としての機能を保持しつつも、他の XML 応用系への組込みや、XSLT などによるデータの再加工、独自のサブセットやスーパーセットの製作など、従来の HTML では困難だったことが容易に、かつ低コストで出来るようになりました。
また、 XHTML は XML であるが故に、 XML 宣言や名前空間という概念、 lang
, space
などの予約属性や終了タグ省略の禁止など、 XML に特化した記法が必要になります。
XHTML 文書を text/html
として認識させることは可能ですし、現状 XHTML 準拠を歐っているサイトであっても、 text/html
として認識させている場合が殆んどです。
しかし、以下の理由により、 XHTML 文書を text/html
として認識させることは好ましくありません。
text/html
として認識させた場合、文書が「壊れている」かどうかに関係無く、レンダリングを続行してしまいます。lang
などの予約属性や名前空間宣言などに代表される「XML 文書に特化された記述」は、全く生かされません。単なる text/html
として認識させている限りは、それらは「仕様に従うための余計な記述」でしかありません。text/html
として認識させた場合、意図通りの挙動を示さないばかりか、思わぬ不具合やエラーを引き起こす原因にもなり得ます。xml-stylesheet
処理命令の埋め込みによる XSLT を用いた「RDF メタデータの提供」も実現可能ですが、 text/html
と認識している以上は、これらの記述は全く役に立ちません。text/html
の文書では、 CDATA
区間や、内部サブセットに記述された実体参照が、殆んど認識されません。また DOCTYPE 宣言は、せいぜい Validator で利用されるか、もしくは CSS 挙動スイッチとしての役割を果たすのみでしかありません。application/xhtml+xml
の規格は比較的まだ新しいので、実装が追い附いていないのは、仕方の無いことかも知れません。application/xhtml+xml
を HTML 文書として認識させる方法があります。ただし、あくまで「HTMLとして」認識させるだけであり、本来の「XML 文書としての役割」は殺されたままです。良く言って「裏技」でしかありません。text/html
版と application/xhtml+xml
両方の文書を用意し、 コンテントネゴシエーションを用いる方法があります。極めて真っ当な手段と言えますが、後者を(自発的に)選択する User agent はごく限られていること、受け手の環境に応じて、同じ内容の複数の文書を用意しなければならないことが、欠点と言えば欠点です。繰り返します。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 と見倣されます)。
少なくとも、上記に示した方法は、現時点で技術的に最も全うで、現在の仕様で実現可能な最も増しな解決法の一つであることは、間違い無いかと思われます。