XHTMLの文章型はどれを選ぶべき?

XHTMLに存在する3つのバージョン形式

XHTMLのバージョンにはStrict/Transitional/Framesetという3つのバージョン形式があります。これらは「文章中で利用できるHTML要素や属性のルールを定義したもの」と言い換えても良いでしょう。

実際にドキュメントを制作する際には、この3形式の中から1つを選択し、ドキュメントの先頭付近で「文章型宣言」として明記する必要があります。

Strictでドキュメントを制作する際の記述例:

HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
        "http://www.w3.org/TR/html4/strict.dtd">

Transitionalでドキュメントを制作する際の記述例:

HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
        "http://www.w3.org/TR/html4/loose.dtd">

Framesetでドキュメントを制作する際の記述例:

HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
        "http://www.w3.org/TR/html4/frameset.dtd">

3つの形式とその特徴

Strict推奨しないこととなった要素や属性(主に視覚的効果に関係するもの)を含まず、またフレーム設定用の要素・属性をも含まない。
TransitionalStrictの全ての要素・属性に加えて、推奨しない要素や属性も含む。
FramesetStrictの全ての要素・属性に加えて、推奨しない要素や属性も含む。

3つの形式から、どれを選択するべきか?

Transitionalを選ぼう

ユーザビリティやアクセシビリティの観点から現在ではフレームの利用は推奨されていません。そのためFramesetは選択肢から除外して良いでしょう。HTML5でもフレーム関連要素(frameset/frame/noframes)は仕様から削除されています。

では、StrictとTransitionalのどちらを選ぶべきでしょうか。個人的には「Transitionalの選択」を勧めます。

理由は「メンテナンス性・リスク回避」です。制作したWebサイトを長く運用保守していく場合、何らかの変更・修正が求められます。その際にStrictルールに合わない要望が出る可能性は否定できません。具体的にはa要素のtarget属性「_blank」を利用した新規windowでの表示や、iframeを利用した外部htmlドキュメントの表示などです。「Strictルールに反するので修正できません」という説明で上司や顧客を納得させることは難しいでしょう。

Transitionalのルールを定義ファイル(loose.dtd)に、次のようなコメントが記述されています。

Authors should use the Strict DTD unless they need the
presentation control for user agents that don’t (adequately)
support style sheets.

意訳:スタイルシートをサポートしていないユーザエージェントブラウザ(ブラウザなど)のために視覚的調整が必要な場合を除いて、ドキュメント記述者はStrict DTDを使うべきである。

このような記述がありますが、ルール違反となる可能性を避けるためにもTransitionalを採用し、実際のドキュメント構築ではStrictルールに従った記述を心がけるのが良いでしょう。

Transitionalと比較したStrictでの制限事項

TransitionalとStrictの定義ファイルを比較し相違点を抽出しました。
記載内容には注意を払っていますが間違いがある可能性があります。情報の正確性を求める方は定義ファイルを直接参照するよう願います。

Strict 定義ファイル http://www.w3.org/TR/html4/strict.dtd

Transitional 定義ファイル http://www.w3.org/TR/html4/loose.dtd

  • 以下の要素の定義が無い(利用できない)
    dir menu u s strike applet font basefont iframe frameset frame noframes basefont font center isindex
  • 以下の属性の定義が無い(利用できない)
    target align color bgcolor border hspace vspace nowrap clear noshade size width
  • list関連
    type属性(disc square circleの指定)などが利用できない
  • 要素の内容に関する変更
    • body要素
      直下にinlineレベル要素を持つことができない
    • address要素
      直下にp要素を持つことができない inlineレベル要素のみ可
    • blockquote要素
      直下にinline要素を持つことができない blockレベル要素、またはscript要素のみ可
    • form要素
      直下にinline要素を持つことができない blockレベル要素、またはscript要素のみ可
    • noscript要素
      直下にinline要素を持つことができない blockレベル要素のみ