SITEMAP [初めてのホームページ講座] [XHTML1.0]

XHTML1.0

XHTML1.0とは?

次期HTML仕様として新たに制定されるもので、HTML5.0に位置付けられます。 XMLを組み込むことを前提として、HTML4.0に対して若干の変更を施したものです。 全体的なDTDはHTML4.0と殆ど変わりがありませんので、タグが知りたい方は HTML4.0 Reference をご覧下さい。

当文書は私が個人的見解で解釈したものであり、正当性の保証はありません。 正式な文書についてはW3Cの英語版のみですので、正確なことが知りたい方は、 「http://www.w3.org/TR/xhtml1/」をご覧下さい。

[Go To Top]

XHTML1.0の必要性

以下がW3Cの言うXHTMLの必要性といわれるものを勝手に解釈した要約です。

DTDの拡張性
SGMLベースのDTDでは新たな要素の追加に対応するためには全体を修正する必要があります。 しかし、XMLベースのDTDに対応しておくことで、これらに対して柔軟に対応でき開発工数の低減が可能です。 つまり、拡張性に優れることを意味します。
マルチプラットフォーム対応
今後のWWWへのアクセス環境は非デスクトップが増えていき、多様性を増していくでしょう。 (2002年には75%に達すると見込まれている[W3C]) これらの環境では非力な場合が多く、デスクトップ並の処理能力を持っていない場合が多いものです。 この場合、表示エンジンやパーサは単純な構成のものしか搭載できないことが予想され、 それらは複雑な文法のHTMLを表示できないかもしれません。

特に2番目の「マルチプラットフォーム」に関しては今現在でも「iMODE」や「ドリキャス」などが存在し、今後もますます増えていく予感がします。 XHTMLにしたからといって、必ずしも全てに対応することは困難なのでしょうが、 表示できなくなるなどの不具合の回避には役立つものとなるでしょう。

[Go To Top]

HTML4.0からの変更点

全10点の変更があるようです。 大きな変更は無いですし、今から直ぐにでも対応する必要があるというものでもありません。 が、頭に入れておいて損はない項目も多数あります。これらに対しては今から実践しておいた方が良いとも言えます。

1. 文書はより厳密に

タグは必ず入れ子構造をとります。 エンプティタグを除いて終了タグが存在するため、開始タグと終了タグは必ずセットに扱われるわけですが、 これらを入れ子にする場合、中に入れ子は外の入れ子を飛び出てはなりません。

これまでのHTML(当然SGMLが)でもこの構造は認められていないのですが、寛容なブラウザのお陰で案外助けられていました。 言葉では分かり難いのですが、下記サンプルをじっくりと眺めて下さい。(サンプルはW3Cより引用。以下同様)

正解
<p>here is an emphasized <em>paragraph</em>.</p>
誤り
<p>here is an emphasized <em>paragraph.</p></em>

これは、XMLでは致命的なエラーともなりかねないし、本来のSGMLから考えれば論外です。是正して当然とも考えらるし、これを書くこと自体に疑問を感じます。

2. タグは必ず小文字で

これまでのHTMLではタグは大文字でも小文字でも問題なりませんでした。 事実、当サイトでも大文字が殆どですが、XHTML1.0では全て小文字で記述しなければならなくなりました。

SGMLでは、大文字小文字の区別が存在することを考えれば、その1つのサブセットであるHTMLも本来区別されてしかるべきだったでしょう。

CSSの要素名についても同様に小文字での記述が推奨されています。

3. 終了タグは必須

これまでの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ファイルを必要としなくなったときに初めてその効力を発揮できるようになるとも思えます。 また、マルチプラットフォーム対応の一環でもあります。

4. 属性値は必ずダブルクォートで囲む

HTMLでは属性値に記号などが含まれる場合に限ってダブルクォートで囲む必要がありましたが、 それ以外は省略可能でした。しかし、XHTMLでは必ず囲む必要があるそうです。(シングルクォートでも可)

正解
<table rows="3">
誤り
<table rows=3>

これまでも出来れば囲んだ方が良いとされていた項目であり、それほど取り沙汰するほどのことでも無さそうですが、 現場はそうはいきそうにもない...(自分自身を含む)

5. 属性値の省略は許さない

一部の論理型のような属性があります。これらの属性は属性値を省略できましたが、XHTMLでは省略不可となりました。

正解
<dl compact="compact">
誤り
<dl compact>

ダブルクォートの話と同様に省略を許さなくなったのですが、これも現場レベルでは大変そうです。

6. エンプティ要素にも終了タグが必要

エンプティ要素と呼ばれる終了タグの無い要素がありました。(HR,BRなど) これらにも終了タグや<hr />などと記述する必要があります。

正解
<br /><hr />
誤り
<br><hr>

スラッシュ1本入れるだけで済むのですが、修正は大変そうです。

XMLでは<br></br>でも良いのですが、ブラウザの挙動が一定でないため、上記正解例が最も推奨できるようです。

7. 属性値の空白類文字列の取り扱い

XMLに準じます(詳細は http://www.w3.org/TR/REC-xml 参照)。 属性値中の先頭、末尾の空白類文字列は無視し、途中の2個以上の空白については属性値区切りとして扱ういます。

属性値無いの重複した空白、改行は避けた方が良いようです。 ブラウザによっては挙動が異なるためです。

8. スタイルやスクリプト

XHTMLではSTYLE要素やSCRIPT要素は#PCDATAを持つものとして宣言され、&ltなどの実体参照を<として展開されます。 これを回避するため、CDATA部分の中に包含する必要があります。 また、外部スクリプトや外部スタイルを用いることも代替案として有効です。

<script>
  <![CDATA[
    ... エスケープされていないスクリプト内容 ...
  ]]>
</script>

< , & , ]]> , -- を使っている場合は、外部ファイルを使った方が良いようです。 <!-- などでスクリプトをHTMLコメント化する方法はXMLでは正常に働かないことがあるためです。

9. SGMLに対する例外

ある要素中にある要素を入れてはいけないような、特別な例外がこれまでのHTMLでも存在しました。 例えば、A要素を入れ子にしてはいけないなど。 これらはDTDで記述できませんが、例外はこれまで通り存在します。 が、DTDの中では明示できません。

A要素
A要素をネストできない
PRE要素
IMG , OBJECT , BIG , SMALL , SUB , SUP要素をネストできない
BUTTON要素
INPUT , SELECT , TEXTAREA , LABEL , BUTTON , FORM , FIELDSET , IFRAME , ISINDEX要素をネストできない
LABEL要素
LABEL要素をネストできない
FORM要素
FORM要素をネストできない

10. ID属性とNAME属性

HTML4.0から新たにID属性が登場しましたが、これはA要素などではNAME属性の代わりになります。 今後のHTMLではNAME属性は廃止する方向にあるため、今後の使用は控えるべきとされています。

[Go To Top]

これから配慮すべき点

XHTML1.0が正式に勧告され、その後にブラウザが対応して、それから一般へという流れになっていくでしょう。 が、この順番が回ってきてから全てを対応しようとすると大変な労力を生む可能性があります。 その面を考えると以下のような点については今からでも対応していった方が良いものと考えられます。

ただし、これまでのHTMLが消え去るわけではなく、当分の間はサポートされていくことでしょう。 それほど神経質になる必要はないのですが、情報発信をしている立場と責任を考えると、 基礎的な部分である当内容については意識していく必要はあると考えます。

[Go To Top]

DOCTYPE

XHTML1.0のDOCTYPEは以下のようになります。 これらの内容はHTML4.0から継承されています。 詳しくはHTML4.0 DOCTYPEをご覧下さい。

XHTML1.0 Strict DTD
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN">
XHTML1.0 Transitional DTD
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN">
XHTML1.0 Frameset DTD
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN">
[Go To Top]

Media type

いわゆる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)では何れも有効です。

[Go To Top]

Last modified Mar,2002
E-Mail: web@hajimeteno.ne.jp
Copyright(C)1999 Miyazaki , All Rights Reserved.