次章からはHTML 4.0仕様の正式なSGML定義に入ります。それぞれ、SGML宣言(SGML declaration)、文書型定義(Document Type Definition) (DTDと略称)、文字実体参照(Character entity references)、そしてサンプルSGMLカタログ(sample SGML catalog)となっています。
各々、ASCII形式で符号化されたファイルが、下記の通り入手可能となっています。
HTML文書を作る多くの人が、限られた数のブラウザでマークづけの検証を行い、ブラウザで表示されていれば間違いないと判断しているようです。けれども、マークづけの正しさを検証する手段としては、この方法はあまり意味がありません。なぜならブラウザは適正なマークづけがなされていないHTML文書でも何とか表示できるようにしようとの思想で設計されているからです。
もっと真面目に検証しようとするなら、「nsgmls」などのSGMLパーザ( [SP]を参照のこと)を使って、HTML4.0のDTD に適合しているかどうかを確認する必要があります。検証作業に、文書型宣言にURIを含むシステム識別子を認識するSGMLパーザを使った場合、文書型宣言にURIを含めて記述してあれば、パーザはそのURIにあるDTDを直接参照することで検証を行ってくれます。それ以外の場合は、下記のサンプルSGMLカタログを利用することになります。このカタログでは、DTDを記した書類のファイル名が「strict.dtd」、文字実体参照のファイル名が「HTMLlat1.ent」「HTMLsymbol.ent」「HTMLspecial.ent」として保存されているものと見なしています。また、使おうとするSGMLパーザを、Unicodeを扱える状態に設定しておく必要があります。設定方法に関しては検証ツールのマニュアルを確認して下さい。
こうした検証を行うことは、便利でもあり、また強く推奨もされますが、検証した文書がHTML 4.0仕様に完璧に適合するかどうかを保証するものではないことにご注意下さい。なぜなら、SGMLパーザは、指定されたSGML DTD に従ってチェックを行うのみで、HTML 4.0の適正さに関してあらゆる項目をチェックできるわけではないからです。つまり、SGMLパーザはマーク付けの前後関係や文章構造や利用可能な要素・属性のみを用いているかどうかなどについては検証できますが、例えばIMG要素のwidth属性に不適切な値(例えば「foo」とか「12.5」など)がつけられていたりするといったミスについては検証できないのです。仕様書ではその値が「ピクセル数を表す自然数」でなければならないと説明してあるにも関わらず、DTD中では単にCDATAとなっているため、このDTDだと前述の間違った値もSGML的に許容されてしまうのです。[汎用のツールではなく] HTML 4.0の検証用に特別な設定を施されたプログラムのみが、完全な検証を可能にします。
とはいえやはり、汎用ツールによるものであっても、検証作業は強く要請されます。ついついやってしまう多くのミスを発見できるからです。
以下のカタログには、nsgmlsなどのパーザに対して、システム識別子よりも公開識別子を優先して参照させるための上書き命令文を含みます。つまり、DTD等を記録したファイル実体を確認しようとする際に、わざわざURIを辿って [W3Cのサイトまで] 確認しに出かける必要がないようにしようと意図したカタログなのです。
OVERRIDE YES PUBLIC "-//W3C//DTD HTML 4.0//EN" strict.dtd PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" loose.dtd PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN" frameset.dtd PUBLIC "-//W3C//ENTITIES Latin1//EN//HTML" HTMLlat1.ent PUBLIC "-//W3C//ENTITIES Special//EN//HTML" HTMLspecial.ent PUBLIC "-//W3C//ENTITIES Symbols//EN//HTML" HTMLsymbol.ent