次期HTML仕様として新たに制定されるもので、HTML5.0に位置付けられます。 XMLを組み込むことを前提として、HTML4.0に対して若干の変更を施したものです。 全体的なDTDはHTML4.0と殆ど変わりがありませんので、タグが知りたい方は HTML4.0 Reference をご覧下さい。
当文書は私が個人的見解で解釈したものであり、正当性の保証はありません。 正式な文書についてはW3Cの英語版のみですので、正確なことが知りたい方は、 「http://www.w3.org/TR/xhtml1/」をご覧下さい。
以下がW3Cの言うXHTMLの必要性といわれるものを勝手に解釈した要約です。
2002年には75%に達すると見込まれている[W3C]) これらの環境では非力な場合が多く、デスクトップ並の処理能力を持っていない場合が多いものです。 この場合、表示エンジンやパーサは単純な構成のものしか搭載できないことが予想され、 それらは複雑な文法のHTMLを表示できないかもしれません。
特に2番目の「マルチプラットフォーム」に関しては今現在でも「iMODE」や「ドリキャス」などが存在し、今後もますます増えていく予感がします。 XHTMLにしたからといって、必ずしも全てに対応することは困難なのでしょうが、 表示できなくなるなどの不具合の回避には役立つものとなるでしょう。
全10点の変更があるようです。 大きな変更は無いですし、今から直ぐにでも対応する必要があるというものでもありません。 が、頭に入れておいて損はない項目も多数あります。これらに対しては今から実践しておいた方が良いとも言えます。
タグは必ず入れ子構造をとります。 エンプティタグを除いて終了タグが存在するため、開始タグと終了タグは必ずセットに扱われるわけですが、 これらを入れ子にする場合、中に入れ子は外の入れ子を飛び出てはなりません。
これまでのHTML(当然SGMLが)でもこの構造は認められていないのですが、寛容なブラウザのお陰で案外助けられていました。 言葉では分かり難いのですが、下記サンプルをじっくりと眺めて下さい。(サンプルはW3Cより引用。以下同様)
<p>here is an emphasized <em>paragraph</em>.</p>
<p>here is an emphasized <em>paragraph.</p></em>
これは、XMLでは致命的なエラーともなりかねないし、本来のSGMLから考えれば論外です。是正して当然とも考えらるし、これを書くこと自体に疑問を感じます。
これまでのHTMLではタグは大文字でも小文字でも問題なりませんでした。 事実、当サイトでも大文字が殆どですが、XHTML1.0では全て小文字で記述しなければならなくなりました。
SGMLでは、大文字小文字の区別が存在することを考えれば、その1つのサブセットであるHTMLも本来区別されてしかるべきだったでしょう。
CSSの要素名についても同様に小文字での記述が推奨されています。
これまでのHTMLでは、終了タグの省略可能な要素は結構存在しました。 例えば、お馴染みのTDやTR、LIなどもそうです。 また、エンプティ要素であるBRやHRなどは別扱いです。
<p>here is a paragraph.</p><p>here is another paragraph.</p>
<p>here is a paragraph.<p>here is another paragraph.
終了タグの省略はSGMLでは認められている(HTMLのDTDで認めている)のですが、XMLでは省略できる要素は存在しません。 HTMLはSGMLベースだったのに対してXHTMLはXMLベースであるため、このようなことになったようです。
省略が無くなることで、パーサの機能を簡略化することが可能で、正確で汎用性の高いパーサを用いることができます。 これにより、ブラウザ間で処理の異なった部分が同一になる可能性があり、 ブラウザごとに記述していた部分を統一することが可能になるかも知れない、とのこと。
この約束事がしっかりと守られて、これまでに作られてきたHTMLファイルを必要としなくなったときに初めてその効力を発揮できるようになるとも思えます。 また、マルチプラットフォーム対応の一環でもあります。
HTMLでは属性値に記号などが含まれる場合に限ってダブルクォートで囲む必要がありましたが、 それ以外は省略可能でした。しかし、XHTMLでは必ず囲む必要があるそうです。(シングルクォートでも可)
<table rows="3">
<table rows=3>
これまでも出来れば囲んだ方が良いとされていた項目であり、それほど取り沙汰するほどのことでも無さそうですが、 現場はそうはいきそうにもない...(自分自身を含む)
一部の論理型のような属性があります。これらの属性は属性値を省略できましたが、XHTMLでは省略不可となりました。
<dl compact="compact">
<dl compact>
ダブルクォートの話と同様に省略を許さなくなったのですが、これも現場レベルでは大変そうです。
エンプティ要素と呼ばれる終了タグの無い要素がありました。(HR,BRなど) これらにも終了タグや<hr />などと記述する必要があります。
<br /><hr />
<br><hr>
スラッシュ1本入れるだけで済むのですが、修正は大変そうです。
XMLでは<br></br>でも良いのですが、ブラウザの挙動が一定でないため、上記正解例が最も推奨できるようです。
XMLに準じます(詳細は http://www.w3.org/TR/REC-xml 参照)。 属性値中の先頭、末尾の空白類文字列は無視し、途中の2個以上の空白については属性値区切りとして扱ういます。
属性値無いの重複した空白、改行は避けた方が良いようです。 ブラウザによっては挙動が異なるためです。
XHTMLではSTYLE要素やSCRIPT要素は#PCDATAを持つものとして宣言され、<などの実体参照を<として展開されます。 これを回避するため、CDATA部分の中に包含する必要があります。 また、外部スクリプトや外部スタイルを用いることも代替案として有効です。
<script> <![CDATA[ ... エスケープされていないスクリプト内容 ... ]]> </script>
< , & , ]]> , -- を使っている場合は、外部ファイルを使った方が良いようです。 <!-- などでスクリプトをHTMLコメント化する方法はXMLでは正常に働かないことがあるためです。
ある要素中にある要素を入れてはいけないような、特別な例外がこれまでのHTMLでも存在しました。 例えば、A要素を入れ子にしてはいけないなど。 これらはDTDで記述できませんが、例外はこれまで通り存在します。 が、DTDの中では明示できません。
HTML4.0から新たにID属性が登場しましたが、これはA要素などではNAME属性の代わりになります。 今後のHTMLではNAME属性は廃止する方向にあるため、今後の使用は控えるべきとされています。
XHTML1.0が正式に勧告され、その後にブラウザが対応して、それから一般へという流れになっていくでしょう。 が、この順番が回ってきてから全てを対応しようとすると大変な労力を生む可能性があります。 その面を考えると以下のような点については今からでも対応していった方が良いものと考えられます。
ただし、これまでのHTMLが消え去るわけではなく、当分の間はサポートされていくことでしょう。 それほど神経質になる必要はないのですが、情報発信をしている立場と責任を考えると、 基礎的な部分である当内容については意識していく必要はあると考えます。
XHTML1.0のDOCTYPEは以下のようになります。 これらの内容はHTML4.0から継承されています。 詳しくはHTML4.0 DOCTYPEをご覧下さい。
いわゆるMIMEタイプもHTMLから変更になります。
MIMEタイプは「text/xhtml」です。
この指定をした場合(<meta http-equiv="Content-Type" content="text/xhtml">)は、
DTDがXHTMLに添っている必要があるかもしれません(ブラウザによる)。
MIMEタイプはHTMLとの互換を保つため、「text/html」と暫定的に定められていました。
正しくは「application/xhtml+xml」
(RFC 3236)に決まりましたが、
現時点(2002.3)では何れも有効です。