「via Internet」談義

/HTML文書のチェックのススメ/

(1998年1月記す:2000年1月1日補足)

主にDOCTYPE宣言について。


本論

/HTML4.0 Recomandation /

HTML 4.0が1997年12月18日にW3C Recommendationに昇格した。HEADの中にOBJECTが入れられるようになっていてビックリ。IMGのALTは結局正式に「必須」になった。

/HTML4.0は3.2を否定しない /

ところで、ZdNETの相当記事では「4.0は3.2をリプレースする」と書いてあるが、W3Cの仕様書にはそんな事は書いていない。それどころか、「4.0の実装を始めるWWWブラウザのベンダは、引き続き2.0も3.2もサポートして欲しい」と書かれている。

当然だ。2.0も3.2も4.0もすべて独立した別の仕様であり、打ち消しあうものではない。4.0が制定されたから2.0が無くなるわけではない。(ただし、3.2は3.0のリプレースとして出された。正確には、3.0を破棄して3.2にした。)

(ZdNETなどマスメディアには、きちんとした知識と調査に基づいた記事を書いて欲しいものだ!)

4.0では過去に採用されていたいくつかの要素(XMPなど)が「破棄」されたが、だからといってHTML3.2や2.0からこれらの要素が破棄されたわけではない。3.2の仕様や2.0の仕様にしたがって文書を記述するならば、今後もXMPを用いたって構わない。ここのところを誤解しないようにして欲しい。(ただし、XMPに関しては、2.0の時点から削除の計画が明示されていた。こういう要素は「使ってもいいが、お勧めできない」ものだ。)

/DOCTYPE宣言 /

HTML文書(より一般的にはSGML文書)には、その文書がどのDTDにしたがっているのかを明示するDOCTYPE宣言を付けなければならない。HTMLの場合、DTDの違いはバージョンの違いに相当する。これさえ適切に宣言していれば、4.0を使おうが2.0を使おうが、それは書き手の自由だ。

ただし、DOCTYPE宣言で「2.0だよ」と宣言しているのに、2.0に含まれていない仕様、たとえばFRAME要素を使用するのは矛盾なので許されない。DOCTYPE宣言を省略している場合は「2.0を用いている」と解釈されるのが一般的であるため、もしFRAMEが使いたければ、必ず相当のDOCTYPE宣言を行わなければならない。

もし自分が3.2の文書を書くならば、3.2の仕様を指すDOCTYPE宣言を付けておけばそれでよい。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">

<HTML>

<HEAD><TITLE>「おとぎ話を考える」</TITLE>

…(以下略)

一般形:
<!DOCTYPE DTD名 PUBLICかSYSTEM "DTDファイルの位置を示すもの">
HTML2.0:
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
あるいは <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
HTML3.2:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
HTML4.0-strict:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
HTML4.0-transitional:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
HTML4.0-frameset:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN">

補足:2000年1月1日)

1999年12月、HTML4.01が制定され、HTML4.0を上書きした。HTML4.0文書は今後も正当なHTML文書として認められるが、以降に新しいHTML文書を書くならば、HTML4.01に従うほうが望ましい。

もちろん、ふつうのHTML4.0文書であれば、そのままHTML4.01文書として通用するだろう。いちおうHTMLチェッカー/パーサで確認して、Doctype宣言を4.01にしよう。


/実際のWWWブラウザの対応 /

とはいえ、mozillaもieもmosaicもDOCTYPE宣言など気にしていない。そもそもDTDが守られているかどうかすらほとんど気にしていない。DOCTYPE宣言がなかろうが、その仕様にはないはずの要素が入っていようが、PREの中にH1が入っていようが、お構い無しに表示してくれたりする。これは、「ちっとくらい間違っているからって、いちいちnetworkingに水を差していられるかい!」という思想から来ているのだろう。

/各自でHTML文書をチェックしよう /

しかし、だからといって「DOCTYPE宣言などどうでもよい」という訳ではない。HTML文書は文法を守ってかかれなければいけない。

Internetは紳士協定によって成立するnetworkingだと考えられる。転送プロトコルしかり。文字コードしかり。WWWにおける文書公開でも、文書作成者が自らの責任で自らの文書が仕様に沿っていることを保証するべきだ。

では、どのようにチェックすればよいのだろうか。

まずは、文法チェッカーを利用することだろう。「HTML概説」の中で紹介しているので参考にして欲しい。HTML文法チェッカー(SGMLパーサ)は、文書中のDOCTYPE宣言を判断し、そのバージョンの定義に沿った文章になっているかどうかをチェックしてくれるはずだ。

しかし、文法だけでは正しい意味を持つ文書になっているかどうかは検証できない。本当は、各自が仕様をある程度以上正しく理解していることが望ましい。そのためには、私が出版した「スタイルシートWebデザイン」という本をぜひ読んで欲しい。そのなかで、HTML文書を正しく書くためにページを割いている。

お金を出すのはもったいないと考えている方は、「HTML概説」を読んで欲しい。このなかで、いくつかの参考になるURLをあげてあるし、これを読んだ後はW3Cの公開する本物の仕様書を各自で読めばよい。英語さえ読めればそんなに難しい文書ではないので、ぜひ多くの方に読んでいただきたい。(ちなみに、HTML3.2は簡潔でそっけないが、内容を把握しやすい。HTML4.0は丁寧に説明してあるが文章量が膨大だ。実は4.0よりも3.2の方が文章が理解しやすかったりする^^;)

オマケ

1998年4月24日

/ニセのDTDはいやーん/

*本論*

最近よくみかけるニセのDOCYTPE宣言で、こういうのがある。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD W3 HTML//EN">

W3CはそんなDTD(文書型定義)は公開していません。"-//W3C//DTD HTML VERSION(3.2とか4.0とか)//EN"が公開されているDTDです。(なお、それぞれにサブバージョンがありますので、念の為。)「DOCTYPE宣言」とは、「対応するDTD(文書型定義)を守っています」という宣言であるので、存在しないDTDを指すDOCTYPE宣言は「偽札」みたいなものだ(? ? )。

もっとも、変なDOCTYPE宣言はたくさん存在する。中でも強烈だったのは、<!DOCTYPE HTML PUBLIC "HTML3.2">だ。ただし、この「変」はお馬鹿なWYSIWYGのHTMLエディタ(IBM^^;)が自動生成したものなので「知らぬまに入り込んでしまったもの」であることが多いと思われる。では、冒頭のものは何だ? これが今のところ不明である。

なお、正規のDOCTYPE宣言をしているからといって、安心してはいけない。なぜかといえば、「DOCTYPE宣言」とは、「対応するDTD(文書型定義)を守っています」という宣言であるからだ(ちょっと語弊あり)。だから、HTML2.0だと宣言したからには、FRAMEやTABLEは使っちゃだめ。BODYのCOLOR属性やFONTすらだめ。あるいは、Pの中にHRが入ってはいけないし、PREの中にIMGが入ってもいけない。これが守れないのにDOCTYPE宣言をしているのは「脱税」のようなものだ(??)。

でも、多くの(80%以上の)HTML入門書や解説書は、DOCTYPE宣言やDTDには言及しない。残りの20%だって、単に「DOCTYPE宣言を付けなさい」というだけで、それとDTDの関係を説明しない。どうなってるんだ、といえば、何も分かっていないのだろう。こんど僕が出すはずの本では、この当たりにもきっちり決着を付けるので、読んでください。(なお、縮小版を「via Internet談義」でも公開したい、と思っています。)

じゃあ、「内容が怪しい場合はDOCTYPE宣言をつけない」でいいのか、といえば、本当はだめ。DOCTYPE宣言の無いHTML文書(厳密にはSGML文書)は切手の貼ってない葉書のようなもので(? ? )、それを受け取ったHTMLパーサ(WWWブラウザ内部のHTML解析部分)は消化不良を起こすだろう。

でも、MozillaもIEも不真面目なHTML解析しかしないので、なんともない、というか、平気。まじめなlynxなどだけが損をしている。これじゃあ、一般の人はDOCTYPE宣言に注意を払わなくても仕方ない。ああ、まじめな人は損をする。

とはいっても、僕は間違った宣言をするよりは書かないほうが好き。偽札や脱税よりも、無賃飲食のほうが罪が軽い(? ? )、たぶん。

*後日談*

(5月1日)

4月24日分【自己顕示録】でお知らせしたニセのDOCTYPE宣言だが、その発生源をつきとめた。なんと、驚くべきところに犯人はいた。

実は、IE4.0が犯人だ。ブラウズしたHTMLファイルを文字コード変換を指定して「Save As」すると、勝手にDOCTYPE宣言を書き換えていたのである。「ソース表示」や「編集」でソースを見たときにまともだったDOCTYPE宣言が、「Save As」するとおじゃんに。






ご意見ご要望及び苦情はE-MAILにて

e-mail to : jy3k-sm#!#!asahi-net.or.jp