文書型を選択しよう WD

草稿です。今後内容は大幅に変わる可能性があります。

文書型とは

最終更新
2003-02-25T02:03:04+09:00

HTMLといっても、若干異なる文法を持った複数のタイプがあります。これを文書型と呼び、一般的には:

  • 文書型宣言(DOCTYPE宣言)

をHTML文書の先頭に記述することでそれを示します(XHTML文書ではあるいはXML宣言の次)。例えばHTML 4.01 strictでは、文書の先頭に次のような文書型宣言を記述します。

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

何故文書型宣言をしなければならないのか

最終更新
2003-02-25T02:03:04+09:00

建前としては、User Agent(ブラウザ等のこと)がそのHTML文書がどのバージョンのHTMLに従って書かれているのかを判別する為です。しかしそのような「判別」を行うUser Agentが少ないためか、多くの一般製作者はこれを記述しません。

しかし皆がやっていなかろうと、私は絶対に文書型宣言を記述します。何故ならこれを記述しない場合、そのHTML文書を「適当な文法で解釈してくれて構わない」と宣言するようなものだからです。そんないい加減なことでは困ります。

現状ではHTMLを独自の文法に基づいて解釈してしまうブラウザが多いわけですが、本来なら、文書型宣言のないHTML文書を解析することは不可能です。何故なら、例えばどのタグが省略可能なのかをHTMLブラウザは知ることが出来ないからです。

<link rel="stylesheet" href="style/style.css">

このようなlink要素があったとして、このlink要素の終了タグが省略可能であることを知らなければ、以下登場する全ての要素はlink要素の子供として解釈されてしまうかもしれません。

確かにそのような酷い解釈をするブラウザは私は知りません。しかし考えてみてください。ブラウザが独自の勝手な文法でHTML文書を解釈するということは、HTMLの自由な発展が阻害されていることを意味します。極めて不自由な世界です。

「HTMLはもう腐ってしまったフォーマットだ」、と言う方もいます。しかしHTMLを「腐らせて」しまったのは、勝手な文法で解釈するブラウザと、それに甘え、依存してしまったHTML文書の製作者達なのです。ちなみにHTMLは今後の発展が無いというだけで、別に腐ってなんかいません。XML関連規格で一儲けしようという方々が既成事実としてでっち上げようとしているだけです。

XMLですが、まあHTML文書も碌に書かなかった(「腐らせて」しまった)人達が、HTMLを捨ててXMLに移行したところで、また同じ事の繰り返しでしょう。XMLはHTML程鷹揚にはできていません(文法がシンプルであるということは、鷹揚ではないことを意味します)。HTMLの時代のように「楽をしたい」人達は、文法の依存度の低い独自のXMLパーサーを開発するでしょう(実際にRSS方面でこの動きを見ました)。そして歴史は繰り返すわけです。

HTMLやXMLといった規格を腐らせる一役を担うつもりが無いのであれば、文書型宣言を行ってください。「文書型宣言なんて信者の自己満足だ」などと言う人達は短期的な視点しか持つことの出来ない盲目の羊です。無視してください。

野崎さんの書かれた文書型宣言に就いてでは、その他の理由が述べられています。是非参考にしてください。

実質的なメリット - 文法チェック -

文書型宣言を記述する実質的な利点も存在します。それが文法チェックです。文書型宣言をすることによって、文法チェッカはその文書が従っている文法を知ることが出来ます。

とても便利な検証方法を紹介します。

この文法チェッカは、複数のHTML文書を一括してチェックしてくれます。そのサイト内の文書のリンク集、つまりHTML形式のサイトマップを用意してWWWサーバに公開し、この文法チェッカにかけると、そのサイト内の全てのHTML文書をチェックしてくれます。100個までの制限つきです。

  1. サイトマップのURLを記入
  2. Validate entire siteにチェックを入れる
  3. ボタンを押す

どの文書型を選ぶべきか

最終更新
2003-10-16T13:05:19+09:00

製作者は、適切な文書型を選択する為に色々な文書型の性質について知らなければなりません。しかしそれはあまりにも大変ですので、私なりに各文書型の特徴と、どういった製作者が使うべきなのかを纏めてみましたので、宜しければ参考にしてください。

HTMLかXHTMLか

2003年2月現在HTMLは大きく分けて、SGML応用であるHTMLと、SGML応用でありかつXML応用でもあるHTML(XHTML)に分かれます。まずこの違いを知っておくべきです。

HTML
  • XHTMLではないHTMLでは、一部のタグや属性値を省略することができます。むしろ省略しなければならないものもあったりします。記述せずとも存在するものと見なされるわけですが、問題は、HTML文書の製作者が一々それらの省略文法を学ばなければならないことです。
  • エラーを補正してくれるHTMLブラウザが多いので、万が一大きな文法ミスを犯しても読めなくなる危険は少ないしょう。
  • 規格としての歴史が長く、比較的古いブラウザでも問題なく閲覧が可能です。あるいはそのように設計されています。
  • テキストエディタでHTML文書を制作し、文法チェックもせずそのまま公開する人はHTMLを選んでください。それでもXHTMLを利用したい方は、各XHTMLのバージョンの性質を見て後方互換性の高いものを選んでください。
XHTML
  • タグの省略は許されませんが、省略しなければ良いだけですから非XMLなHTMLよりも学ぶ基礎は少なくなります。
  • 専用のXMLエディタを使ったり、あるいは必ず整形性や妥当性を検証(文法チェック)してから公開する人向けです。
  • テキストエディタでHTML文書を書き、何も経由せず、あるいは文法チェックをせず、そのまま公開する人には向きません。
  • 文書の再利用性が高いので、私的な財産に近いものを公開する場合には止めておいた方が無難です(しかしそもそも自由な個人利用を望まないような私物をWWWに公開するのは異常です)。
  • 一部のバージョン(1.1や2.0以降)は後方互換性があまり考慮されていません(または全く考慮されていません)ので、HTMLブラウザでの閲覧に支障がでるか、閲覧ができません。
  • 後方互換性を考慮に入れたバージョン(1.0)なら、かなりのHTMLブラウザで閲覧が可能です。言い換えると、最新のSGMLに対応したHTMLブラウザなら問題無く閲覧が可能です。そうでなくとも、エラー処理に頼ることで閲覧は可能です。
  • XML関連のパーサーやプロセッサで解析、処理が可能です。

HTMLとXHTMLのどちらを選択するかを決めたなら、次に各バージョンを選択できます。

HTMLの各バージョン

HTMLを選択した方は次の中から文書型を選ぶことが出来ます。

HTML 4.01 strict
文書型宣言
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
 "http://www.w3.org/TR/html4/strict.dtd">
説明
非推奨とされる要素型を使うことの出来ない文書型です。何故非推奨なのかが良く分からない場合それらを無闇に使用せず、この文書型に従うべきかと思われます。
参考になるサイト等
HTML 4.01 transitional
文書型宣言
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd">
説明
ここで紹介している文書型の中で最も制約の緩いものです。非推奨とされる要素型を利用したい場合にはこの文書型に従います。
参考になるサイト等
ISO-HTML
文書型宣言
<!DOCTYPE HTML PUBLIC "ISO/IEC 15445:2000//DTD HTML//EN">
説明
HTML4.01 strictの制約に加え、文書構造の妥当性を保つための色々な制約のある文書型です。div要素による見出しを含めたセクションのグループ化ができない等の副作用を承知の上で利用しましょう。
参考になるサイト等
HTML2.0、HTML3.2
日本語でHTML文書を書く場合使用するべきではありません

HTML 4.01 framesetについて

HTML 4.01 framesetは、FRAMESET要素でフレームを定義する際に必ず使用する文書型です。FRAMESET要素の登場しない文書ではこの文書型を宣言してはいけません。

また、FRAMESET要素はたとえプロフェッショナルであっても9割方は屑のような使い方しかできていません。この文書型を利用するのは、まず、まず止めておいた方が良いでしょう。使いこなすのは極めて難しく、大抵使い勝手の悪いへんてこりんな「ほーむぺーじ」を後押しする原因となります。しかし、自信のある方はやってみましょう。

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

XHTMLの各バージョン

XHTMLを選択した方は、次の中から文書型を選ぶことが出来ます。

XHTML 1.0 strict
文書型宣言
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
説明
HTMLをXMLで再定義したもので、互換性ガイドラインに従えば、XMLとしてXHTMLを解析できないHTMLブラウザでも閲覧ができます。廃止予定であったfont要素などの見栄えを定義する為の要素型が廃止されています。文書を構成している要素の中に「font」なんて要素がありますか? そういった不自然な、本来ありもしない要素をマークアップして明示する手段が禁じられています。
参考文献
XHTML 1.0 transitional
文書型宣言
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
説明
XHTML 1.0 strictとほぼ同じですが、廃止予定であったfont要素やiframe要素等を明示することが禁じられていません。止むを得ない事情がある場合にこの文書型に従います。
参考文献
XHTML 1.1
文書型宣言
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
 "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
説明
比較的後方互換性が低くなっています。また、ルビ(漢字の読み仮名)をふるためのruby要素等を明示することが出来ます。若干の後方互換性を犠牲にしてもルビをふったりしたい場合にはこの文書型に従います。他のXML応用言語と組み合わせたりする際のベースとするのに便利なDTDを持っているのが大きな特徴です。
参考になるサイト
XHTML Basic 1.0
文書型宣言
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Basic 1.0//EN"
 "http://www.w3.org/TR/xhtml-basic/xhtml-basic10.dtd">
説明
軽量コンパクトなXHTMLです。そのため複数のCSSスタイルシートを用意するだけで多様なメディアに対応させることが出来ます。その分、表現力は少し乏しいかもしれません。
参考になるサイト
XHTML Primary
文書型宣言
<!DOCTYPE html PUBLIC "+//IDN purl.org/net/lena//DTD XHTML Primary 1.0//EN"
  "http://purl.org/net/lena/xhtml-lena10.dtd">
説明
div要素等による階層構造化をする必要無く、見出しレベルに基づく文書構造についての検証を行える文書型です。またXHTML Basic 1.0のサブセットになっている(未確認)とのことで、拡張は一切無い筈ですから同様の特徴を継承している筈であり、無論HTMLブラウザでの閲覧も可能な筈です。多種多様なメディアに対応させ、後方互換性に配慮し、かつきちんとした文書構造を保ちたい方にお勧めの文書型です。
参考になるサイト
XHTML 2.0
文書型宣言
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 2.0//EN"
 "http://www.w3.org/TR/xhtml2/DTD/xhtml2.dtd">
説明
2003年2月現在、草案段階です。後方互換性は全く考慮されませんので、完全にXML対応ブラウザ向けです。XHTML2.0に対応したブラウザもまだ存在しないため、この文書型を選択するのは時期尚早ですが、クライアントサイドのXSLT変換を利用することによって、ある程度閲覧可能な文書にすることはできます。閲覧者からのコメントを貰うために実験的に利用、公開するのは面白いかもしれません。因みに名前空間はhttp://www.w3.org/2002/06/xhtml2になっています。http://www.w3.org/1999/xhtmlではないので注意が必要です。また将来変更される可能性もあります。
参考文献

XHTML 1.0 framesetについて

XHTML 1.0 framesetは、frameset要素でフレームを定義する際に必ず使用する文書型です。frameset要素の登場しない文書ではこの文書型を宣言してはいけません。

また、frameset要素はたとえプロフェッショナルであっても9割方は屑のような使い方しかできていません。この文書型を利用するのはまず、まず止めておいた方が良いでしょう。使いこなすのは極めて難しいのです。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">

補足: XHTMLについての勘違い

最終更新
2003-02-25T02:03:04+09:00

独自要素?

XMLは独自の「タグ」を定義できると思っている人が沢山います。しかし、XHTMLで「独自のタグ」もとい「独自の要素型」を定義することは出来ません。そのようなことをした時点でXHTML文書では無くなります。パース不能にならないというだけです。XHTMLに対応したブラウザは、製作者が独自に定義した要素型を「不明な要素型」としてしか解釈しません。

名前空間を使おうと同じ事です。ある名前空間を使った場合、XHTML対応ブラウザは、その名前空間を知っていなければなりません。例えばMathMLの名前空間を使ってXHTML文書にMathMLを組み込む場合、ブラウザはMathMLも実装している必要があります。その可能性はあるでしょう。しかし、個人製作者が独自に作った名前空間を、XHTMLブラウザは知り得ません。

一つ例を挙げます。

<div class="section"   />
<ns:section   />

製作者にとって「セクション」を意味するであろうこれらの要素は、XHTMLブラウザにとってはセクションではありません。しかし、ブロック要素であることを伝えることが出来るという意味で、div要素型を使った前者の方が「マシ」です(ユーザースタイルシートを利用することを考えてみてください)。ns:section要素は、ブロックであるかインラインであるかさえ分からない、全く不明な要素に過ぎません。

「XHTMLでは要素を自由に拡張できる」というのはとんでもない嘘っぱちですので、十分に気をつけてください。もし勝手に名前空間を使って要素型を拡張するのが是とされたならば、Netscape社による独自拡張に端を発した悪しきHTML時代の二の舞になるかも知れません。これ(ユーザー固有の名前空間)が効力を発揮するのは、事前の取り決めに基づいたローカルなネットワークにおいてです。もしくは、特殊なメディア向けの規格としてXHTML Basicを元に拡張要素型が定義されることは有り得ます。その拡張要素を解釈できるUser Agentの存在があるからです。

色々と書きましたが、実は私は名前空間による拡張を利用しています。ただしそれはローカルで使用する為のものであり、そのままXHTML文書として公開することはしません。

つまり、XHTMLという文書型を使うからといって、何か高度な拡張を行わないと意味が無いと考えるのは大きな間違いです。XHTMLの文法はHTMLよりもシンプルなものであり、そのシンプルな文法にのっとって形式的に文書をマークアップすればそれで立派なXHTML文書です。

そしてその「立派なXHTML文書」は、XMLパーサで解析することが可能であり、さまざまな関連規格を利用して比較的簡単に再利用することが可能です。例えばXHTML 1.0 strictの文書型に従って記述していたものを、XHTML 2.0 の文書型に従ったものに変換することなどは極めて容易です。

推奨記事

最終更新
2004-06-10T18:14:28+09:00