HTMLには、さまざまな規格があります。
当サイトでは、PC向けには現行推奨規格であるXHTML 1.0 ストリクトを推奨しておりますが、他にも幾つかの規格があります。
インターネットエクスプローラで見れればいいじゃん(「見られれば」では無い)と嘯いているような者が作ったウェブは、しばしば標準規格準拠度の高いもじらやオペラでの閲覧で問題が生じます。
どの文書型を撰ぶべきか? (平成16年12月18日)
XHTMLが策定されるまでのHTMLは、XHTMLと較べると大きな違いが幾つかあります。
一言で言えば、ベースとなる記述言語が旧来のHTMLではSGMLと呼ばれる言語である事に対し、XHTMLのベースとなる言語はXMLとなっている事が大きな違いです。
HTMLは、XHTMLと以下の点で異なります。
こうして見ると、旧来のHTMLはXHTMLより自由度が高いように見えるかも知れませんが、実際には旧来のHTMLは却って自由度を下げているといえます。
HTMLの、と言うよりSGML応用言語の欠点として、以下のようなものがありました。
このため、必要な要素が無い場合もあり、その際には既存の要素を拡大解釈して使うしかありません。
一方XHTMLのベースとなっているXMLでは、これらの問題点が全て解消されております。
自由な拡張や他規格の言語との同居を可能にするには、マークアップでのタグの省略を禁じなければなりません。
要素名・属性名を小文字で書かなければならないのは、XMLでは大文字小文字を区別する仕様になっているからですが、これはパーサ(文法解析プログラム)の負担を減らす事もあるのでしょう。
XML宣言の導入は、文字コードの正確な判断に役立ちます。
このように、XHTMLでの制約は、より高度な機能を実現する為のものと言えるのです。
旧来のHTML規格には、以下のものがありますが、XHTMLが策定された今日ではわざわざ覚える事も無いと思われます。
HTML初の公式規格で、現在はどちらも正式に廃止され、現行規格ではありません。
従って、ウェブ制作者は新たなウェブを作る際にはHTML 3.2以降を利用しなければなりません。
HTML 2.0とHTML 2.xの違いは、lang属性(XHTMLでのxml:lang属性)があるか無いかです。
HTML 4.01はHTML 2.xをベースに拡張したものです。
尚、HTML 2.0/2.xはW3C(ワールド・ワイド・ウェブ・コンソーシアム)ではなく、IETF(インターネット技術推進機構)が策定したものです。この規格が策定された当時、まだW3Cは設立されていませんでした。
破棄された規格のため、文書型宣言については割愛させていただきます。
主にネットスケープとインターネットエクスプローラに搭載された独自仕様タグの中で汎用性が高いものを標準規格として追認したものです。
当時、ネットスケープとマイクロソフトは、シェアを奪うために独自仕様の物理要素を多数追加して、その結果あるブラウザ向けに書かれたウェブページが他のブラウザでは満足に見られないと言うような弊害が多発しました。
これでは、ウェブの相互運用性に問題が生じると言う事で、設立間も無い標準化団体・W3Cは物理要素を標準化する事としたのです。
その結果勧告されたのがこのHTML 3.2と言うものです。
尚、HTML 3.2は厳密にはlang属性(XHTMLでのxml:lang属性)による言語指定が出来ないため、日本語文書には使えない規格です。実際には日本語文字を用いたと言うだけで文法エラーにはしませんが。
また、HTML 3.2は現在でも推奨はされないものの、現行規格として存続しております。
HTML 3.2の文書型宣言は以下の通りです。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
現行推奨規格のXHTML 1.0のベースとなった規格です。
HTML 3.2が現状の物理要素を追認したものに対して、HTML 4.0(HTML 4.01の旧版)ではより本来のHTMLのあり方に近い物になりました。
そもそも、HTMLと言う言語は、ウェブ文書のフォーマットを特定のソフトに依存させない事に主眼が置かれていました。
どんなヴューワを用いていても、ウェブ文書を適切に利用出来るようになるからです(相互運用性の確保)。
その後、ウェブが爆発的に普及して一般社会にも浸透して行く上で、この相互運用性と言う考え方は「障碍のある閲覧者でも問題無く利用出来るようにする事」などと言ったより一般的な問題に対する考え方に発展して行きました。
その答えとして、特定の環境に依存しない仕様を目指した訳です。
この他、相互運用性を高めるために以下のような措置が執られました。
物理要素は、音声ブラウザや点字出力では適切な表現が出来ません(例えば「赤い文字」を音声や点字ではどう表現すべきでしょうか? 無理ですね)。
そこで、<font>要素など特に相互運用性を奪う物理要素を排除し、CSS(カスケーディングスタイルシート)などのユーザ定義スタイルシートを利用する事で物理要素を使わない方向に持って行きました。
ウェブが国際化するにつれて、当然、外国語文書なども多数出廻る事になります。
言語に合わせたブラウザのスタイルシートにどう対応するか, 将来の実現を目指している自動翻訳のサポートをどうやって実現するかなど、外国語文書でも問題無く利用出来るようにするには、仕様でも配慮が必要でした。
HTML 4.0ではlang属性(XHTMLでのxml:lang属性)などが追加され、日本語文書でも問題無く使えます。
とは言え、物理マークアップが主流だった当時、この新しい方向に一般のウェブ制作者が即座に対応出来るとは思えず、またウェブブラウザのメーカにとってもこれらの仕様に即座に対応する事は困難でした。
そこで、旧来のウェブ文書で多用されていた排除すべき要素を排除すべきと言いながらも残しておいた移行期間中の規格も合わせて用意されたのです。
この他、HTML 3.2で導入を見送られたフレームについても、別文書型で対応する事にしました。
以上の理由から、HTML 4.01には大きく分けて以下の三つの規格があります。
HTML 3.2でやむを得ず導入した物理要素タグ・物理属性の大半を排除した、いわば正式版の規格です。
HTML 4.01 ストリクトの文書型宣言は以下の通りです。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
HTML 3.2でやむを得ず導入した物理要素タグ・物理属性などの大半を残した、いわば移行期間中の規格です。
排除すべき要素・属性の大半はCSSや他の要素で置換えが出来ますし、実はその方が便利なのですが、どうしてもCSSに対応していない(グラフィカルな)旧型ブラウザにも対応したい場合などはこの文書型を使う事が許されます。
HTML 4.01 トランジッショナルの文書型宣言は以下の通りです。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
フレーム文書に対応した規格です。
フレーム以外はトランジッショナルと同じです。
実際問題として、フレームを利用しないのであればトランジッショナル規格で充分です。
HTML 4.01 フレームセットの文書型宣言は以下の通りです。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">
正式にはISO/IEC 15445:2000と言う国際規格です。
日本でもJISが標準規格として採用しております。
基本的にはHTML 4.01 ストリクトを更に厳しくしたものです。
具体的には、
などと言った規制があります。
文書型宣言は以下の通りです(二つありますがどちらを用いても構いません)。
<!DOCTYPE HTML PUBLIC "ISO/IEC 15445:2000//DTD HyperText Markup Language//EN"><!DOCTYPE HTML PUBLIC "ISO/IEC 15445:2000//DTD HTML//EN">文書型宣言は仕様上は二つあるうちのどちらを用いても構わないのですが、インターネットエクスプローラでのCSSの処理を考えると、前者の方が宜しいようです。
SGMLが持つさまざまな欠点を改善した規格がXMLです。
そのXMLの元でHTMLを再定義した規格がXHTMLとなります。
現在、W3Cが現行推奨規格として指定しているものです。
HTML 4.01をXML化したもので、従ってストリクト・トランジッショナル・フレームセットの三つの型があります。
本来はストリクトが望ましいのですが、CSSに対応していない(グラフィカルな)ウェブブラウザの事を配慮して物理要素や属性などを用いたい場合はストリクトで無い文書型を採る事が許されます。
各文書型の文書型宣言はそれぞれ以下の通りとなります。
HTML 4.01 ストリクトをXML化したもので、XHTML 1.0の正式版と言えます。
CSSに対応したグラフィカルなPC向けウェブブラウザが現在ほぼ十割を占めている現状からすれば、最も使い易い仕様と言えます。
XHTML 1.0 ストリクトの文書型宣言は以下の通りです。
<?xml version="1.0" encoding="文字コード"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
HTML 4.01 トランジッショナルをXML化したもので、HTML 3.2でやむを得ず導入している物理要素などが残されております。
旧式のグラフィカルなウェブブラウザでもある程度の見栄えを確保したい場合などに利用しても良いとの事ですが、現在ではそう言う旧式のブラウザは殆ど残っていないので、わざわざこの仕様を用いる必然性もないでしょう。
XHTML 1.0 トランジッショナルの文書型宣言は以下の通りです。
<?xml version="1.0" encoding="文字コード"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
HTML 4.01 フレームセットをXML化したもので、フレーム機能を利用するための文書型です。
フレーム以外に関しては、HTML 4.01 トランジッショナルと全く同じ文書型となります。
フレーム機能を使いたい場合はこの文書型を撰べば良いでしょう。
XHTML 1.0 フレームセットの文書型宣言は以下の通りです。
<?xml version="1.0" encoding="文字コード"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
XHTMLの最新の規格です。W3Cはまだ現行推奨規格にはしていませんが、現在ではもう現行規格にしても問題は余り無いと思われます。
XHTML 1.0策定後にXHTMLの要素をカテゴリー分けし(正式にはモジュール化といいます)、その中で標準的なモジュールを集めた規格です。
XHTML 1.0 ストリクトと大差ありませんが、幾つかの属性の扱いが変更になっています。また、XHTML 1.0と違って
が特に大きいと思われます。
文書型宣言は以下の通りです。
<?xml version="1.0" encoding="文字コード"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
XHTML 1.1で解説したXHTMLのモジュールの中で、最小限必要と思われるものだけを集めた規格です。
主に携帯電話などの低スペック端末向けに考案されたものですが、PC向けサイトに使う事も出来ます。
文書型宣言は以下の通りです。
<?xml version="1.0" encoding="文字コード"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Basic 1.0//EN" "http://www.w3.org/TR/xhtml-basic/xhtml-basic10.dtd">
OMA(携帯電話向けウェブの規格を定める団体)の内部組織「WAPフォーラム」が策定したXHTMLです。
XHTML ベーシックを若干拡張したものですが、XHTML 1.0 トランジッショナルにも完全に含まれるものです。従って、モバイル向けとはいえ、PC向けサイトに使う事も出来ます。
文書型宣言は以下の通りです。
<?xml version="1.0" encoding="文字コード"?> <!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.0//EN" "http://www.wapforum.org/DTD/xhtml-mobile10.dtd">
この規格は私的な規格なのですが、興味深いものなので解説しておきます。
ISO-HTML(JIS-HTML)とXHTML ベーシックは性質が全く異なるものですが、無駄の無いシンプルな仕様であるという点ではどちらも良く似た規格と言えます。
XHTML プライマリはXHTML ベーシックのサブセットにISO-HTMLの構造的な意味付けを加えた規格で、空要素タグの表記を代えるなどするだけでISO-HTML準拠の文書にもなります。
現在ヴァージョンは1.1となっており、その文書型宣言は以下の通りとなります。
<?xml version="1.0" encoding="文字コード"?> <!DOCTYPE html PUBLIC "+//IDN purl.org/net/lena//DTD XHTML Primary 1.1//EN" "http://purl.org/net/lena/xhtml-primary11.dtd">
文書型が沢山あると、その内のどれを撰べば良いのか分からなくなるかも知れません。
ここでは、どの文書型が適切かを考えて見ましょう。
実のところ、XHTMLで問題は無いでしょう。
ただ、XML宣言が問題になる事があり(これは実はサーヴァが文書を送出する際に文字コードを指定するようにしていれば、UTF-8コードで無くても省略する事が出来ます)、その為HTMLを用いた方がいい場合があるかも知れません。
また、ISO-HTMLのような徹底した構造化文法を導入している仕様は、XHTMLでは私的規格のXHTML プライマリぐらいしか無く、このためにISO-HTMLを選択すると言う事もあります。
この場合、携帯端末向けのXHTML ベーシックかXHTML モバイル・プロファイルを用いると良いでしょう。
どちらも、現在のところPCでも問題無い仕様ですが、PCと共有するならXHTML ベーシックの方が良いかも知れません。
また、在来機ではCSSが使えないため、やむを得ずXHTML 1.0 トランジッショナルを用いると言う手もあるでしょう。
参考(「携帯電話向けコンテンツの書き方」より)。
JAVAスクリプトを用いる場合、文書型はXHTML 1.0, XHTML 1.1かHTML 4.01のいずれかとなります。
その他の文書型には、<script>要素が定義されていないからです。
逆にJAVAスクリプトを一切用いない場合、文書型としてXHTML ベーシックやISO-HTMLを撰ぶ事も出来ます。
特に文章をしっかり公開出来れば充分だ(小説や日記など)と言う方には、これらの文書型には無駄なものが一切無いので検討に値するでしょう。
HTML文書中にルビ付きテキストを含めたい場合は、XHTML 1.1以外の文書型は使えません。
旧来のブラウザのためにサポートされてきた要素や属性の中には、XHTML 1.1, XHTML ベーシック及びISO-HTMLなどでは削除されているものがあります。
例えば、<a>要素などのname属性はXHTML 1.1及びXHTML ベーシックではサポートされません。
これらに関してはid属性を用いれば良いのですが、ネットスケープ 4.xなどid属性を認識しないブラウザもあります。
もっとも、<a>要素のname属性をid属性に置換えても、当該箇所にフォーカスが移らないだけでページが全く見られなくなる訳ではありません。
この場合、配慮としては以下の二段階のレヴェルがあると思います。
この場合は、name属性を排除していないXHTML 1.0, HTML 4.01またはISO-HTMLを撰べば良いでしょう。
この場合は、XHTML 1.1やXHTML ベーシックを用いる事も出来ます。
この他にも、ブラウザの実装に配慮して排除勧告が出ている要素や属性を用いざるを得ない場合があるでしょう。
そう言った場合にはXHTML 1.0 トランジッショナルやHTML 4.01 トランジッショナルを用いざるを得ません。
いろいろ意見があると思いますが、制作者は思うに必要以上に大きな仕様は必要無いと言う事です。
例えばXHTMLなら仕様の小さい順に、
となり、HTMLだったら同様に小さい順に、
となります。
実際にどんなウェブを作りたいのかを考えた上で、目的に合った文書型を撰ぶようにして下さい。
実際のところ、各ウェブページが同一サイトに属しているからと言って、文書型を統一する必要はありません。
各文書は独立したウェブページとなっている筈ですので、あるページでは<a>要素にname属性を使いたいからXHTML 1.0 ストリクトにして、他のページではそう言ったものが一切要らないからXHTML ベーシックと言うような使い分けも全く問題はありません。
こだわる方もいるかも知れませんが、文書型を必要に応じて撰ぶ事自体には全く問題はありません。