HTML 4

HTML4 (Web)

[12] HTML 4 は、 HTML 3.2 の次に W3C標準化した一連の HTML 規格群です。 90年代末から00年代中頃まで使われていました。 WHATWG により HTML5 (現在の HTML Standard) が出版されるまで、HTML の標準仕様として用いられていました。

[26] HTML4 には HTML 4.0HTML 4.01 の2つの版がありました。 HTML 4.0 は1997年と1998年に計2回、HTML 4.01 は1999年に1回 W3C勧告となりました。

[57] 00年代半ばに HTML5 (現在の HTML Standard) が出版されたことで、 HTML4 は標準仕様としての実効性を失って久しいですが、なぜか W3C勧告としては廃止されず、 現行版の1つという扱いになっています (>>56)。

W3C ではよくあることなので、深く気にしてはいけなそうです。

呼称

[82] HTML 4.0HTML 4.01 の総称で HTML4 と呼ぶことが多いです。

[27] HTML 4.01 はしばしば「HTML 4.1」とも表記されますが、誤りです。

仕様書

[13] W3C の正式な勧告としての HTML 4 は、3種類ありました。

  1. [14] 1997年12月18日版 HTML 4.0 <http://www.w3.org/TR/REC-html40-971218>
  2. [15] 1998年4月24日版 HTML 4.0 <http://www.w3.org/TR/1998/REC-html40-19980424>
  3. [16] 1999年12月24日版 HTML 4.01 <http://www.w3.org/TR/1999/REC-html401-19991224>

[54] >>15>>14 の改訂版ですが、編集上の修正のみを含んでいます。 (最近の W3C 仕様なら Second Edition と呼ばれるでしょう。)

HTML 4.01 は HTML 4.0 の改訂版ですが、技術的な変更も含まれています。 厳密には 4.0 と 4.01 は互換でないのです。 HTML 4.0 は HTML 4.01 により廃止されています。

[17] HTML 4.01 仕様書にも幾つかの誤りが見つかっています。

HTML4 世代の仕様一覧

[46] HTML4 世代の仕様には次のものがあります。

XHTML1 系の仕様は XHTML1 を参照。

[18] ISO-HTML は、最終的には HTML 4.01 の部分集合となっています。 広義には HTML 4 の一種とみることもできますが、 少々毛色が異なるところがありましてねぇ。

[19] W3C Note として HTML 4.0 Guidelines for Mobile Access <http://www.w3.org/TR/NOTE-html40-mobile> があります。

XHTML1

[59] XHTML1 は、 HTML 4 の語彙をほぼそのまま XML にしたものですから、 これもより広義には HTML 4 の一種と言えますが、それもちょっとなんとなく。

[41] HTML4SGML に基づくマーク付け言語ですが、 これを XML に移植したものが XHTML1 (XHTML 1.0XHTML m12n) でした。

XHTML1 を参照。

[42] なお XHTML1XML に基づく構文やモジュールの構成のみ規定する差分仕様書で、 要素属性の意味は HTML4 を (曖昧に) 参照する不完全なものでした。

[58] HTML WG (当時) は XHTML2HTML4意味 (を改めたもの) と XML ベースの構文の両方を規定した後継仕様とするつもりだったようです。

HTML 4 DTD

[1] 仕様書の本文中の DTD 片は Strict DTD の属性しか載ってないから要注意。

[10] >>1 Transitional (loose) DTD と Frameset DTD はおまけですからね。ちなみに Transitional と Frameset が別々なのは、技術的に (DTD の能力的に) 統一することができなかったからです。だから、 Strict Frameset DTD 的なものはありません。

REC-html4

[2] HTML4 の文書型定義 (DTD) の URI を間違って示しているサイトが大量にあります。

間違った方の URI には DTD は存在しません。 検索で探した限りでは、 W3C 文書で間違った方の URI は登場せず、間違いが蔓延した理由は不明です。

[3] >>2 HTML 4.0 の DTD <http://www.w3.org/TR/REC-html40/loose.dtd> から類推した可能性があります。

[4] >>2-3 W3C の ML の記録を見ると、1998年・1999年には <http://www.w3.org/TR/REC-html4/> 以下が存在していたらしいです。 (現在は Not Found で、 Internet Archive にもないので、実在していたかは分からないんですが、複数の W3C の list の記録に登場するので、あったのかも。)

[5] Strict-HTML スレッド10 <http://pc2.2ch.net/test/read.cgi/hp/1045493217/75-86>

[20] HTML 4.0 仕様書に、一箇所誤って /TR/REC-html4/ と書いている場所があります。 DTD の URI ではありませんが・・・。 もしかすると、当時は本当にあったのかもしれません。でもその間違った部分の直前は正しい URI になってるしなー。

参考: <IW:HTML4:"intro/intro.html#h-2.1.1"> <IW:HTML4:"appendix/changes.html#h-A.1.3">

構文

[61] HTML4SGML応用とされていました。すなわち構文SGML により規定されるものとされ、 HTML 仕様側には (解説はありますが) 規定がありませんでした。現実の大多数の文書SGML に適合していませんでしたが、それらをどう処理するべきかは HTML4 でも SGML でもまったく規定がありませんでした。それどころか、 現実の文書やそれを処理する Webブラウザー構文解析器の動作は、 SGML とは矛盾していました。

[62] HTML4 は、参考としてそうした違いが生じる構文をいくつか例示し、 著者にそれらを避けるように求めていました。 (本来なら禁止するべきでしょうが、 禁止すること自体を SGML が禁止していました。)

[63] こうした矛盾は HTML4 時代には解決されないどころか裸の王様のように無視されていました。

HTML5 との差異

[47] HTML5WHATWG により全面改訂されており、仕様書としては HTML4 とまったく異なります。

[48] 技術的には、 HTML4SGML に基づく空想上の仕様だったのに対し、 HTML5 は独自の仕様となっており、互換性はありません。

[49] HTML4マーク付け言語に限定された仕様であるのに対し、 HTML5API も含んでおり、範囲が遥かに広がっています。 更に HTML5 には XHTML の仕様も含まれています。

[50] WHATWGHTML5 やそれ以降の仕様の HTML4 からの変更点をまとめています >>51

HTML4 のバグ

[32] まあ枚挙に暇がないけど。

[68] HTML 4.0 第2版や HTML 4.01 で多くの不具合が修正されていますが、 それでもなお未修正のまま残っている問題が多く存在します。

[60] 正誤表もありますが、いつからかメンテナンスされなくなりました。 そもそも www-html などで報告されていた不具合のほとんどは、 修正されずに放置されていました。 (当時の HTML WG は本当にひどかった。)

[69] なお、明確な不具合だけでもいくつかありますが、 曖昧な点はそれ以上にたくさんあります。

適合性

[65] HTML4適合性に関する規定は破綻していることが、 かなり早い時期から指摘されていましたが、 ずっと放置されていました。

[24] HTML4 Implementation Requirements from Ian Hickson on 1999-02-05 (www-html@w3.org from February 1999) (Ian Hickson (py8ieh@bath.ac.uk) 著, 版) <http://lists.w3.org/Archives/Public/www-html/1999Feb/0010.html>

[66] Webブラウザー事業者達からは、 「 (table) 引用符を描けば、HTML に適合した実装となる」 と呆れられていました。

[21] IRC Log for #whatwg on irc.freenode.net, collected by WhatBot (2007-01-27 01:58:34 +09:00 版) <http://whatbot.charlvn.za.net/index.php?date=2007-01-25>

たしかにこれ: <http://www.w3.org/TR/html4/conform.html#conformance> は面白いなw

A conforming user agent for HTML 4 is one that observes the mandatory conditions ("must") set forth in this specification, including the following points:

  • A user agent should avoid ...
  • A user agent must ensure ...
  • For reasons of backwards compatibility, we recommend ...


[70] HTML4 仕様書の第1章から第3章の位置付けは謎です。

[72] 第1章には、第2章と第3章が紹介であり、第4章以降が定義であるとの説明があります >>71。 また第4章冒頭には、 「In this section, we begin the specification of HTML 4」 >>73 とあり、第3章までは「specification」ではないとの説明があります。 しかし第1章から第3章が規定の一部ではないとする明確な記述がありません。

[74] 第2章と第3章の本文中には、「should」が使われた文が含まれています。 これらが規定の一部であるなら、第4章の規定に従い RFC 2119SHOULD と解釈され、適合性の規定を構成することになります。

[76] その場合、第3章で SGML の色々な機能が「should be avoided」 とされている >>75 ことから、 HTML文書で当該機能を利用することが原則として HTML4 に適合しないと解釈されることになります。 ところが、第4章で HTML適合SGML応用である >>77 とされています。 SGML によれば、SGML応用SGMLマーク付けの機能の利用を (SGML で認められた範囲を超えて) 制限することは禁止されています >>77

[78] これは仕様書の細かな表現上の矛盾や理論上の整合性の問題というわけではなく、 現実に悪影響を与えています。例えば SGML注釈宣言構文において --注釈の開始や終了と解釈されるため、 -- を含めるべきではない (should) との記述があります >>75HTML 2.0 では、 SGML注釈宣言中に複数の注釈を書けることを明確に示していました >>79。そのため HTML4 では注釈- を書けなくなったというような解説がなされたり、 <!----------------------------> のような広く (問題なく) 用いられていたソースコード上の区切り線としての用法が不適切であると言われるようになったりしました。 しかしそのような主張が正しいのか、誤りなのか、断言できるほど HTML4 は厳密に記述されていません。

rel=alternate

[67] 異なる言語の版へのリンクについて、 lang 属性を使うとの説明と hreflang 属性を使うとの説明が混在していました。

[33] <http://www.w3.org/TR/html4/types.html#type-links>

Alternate
Designates substitute versions for the document in which the link occurs. When used together with the lang attribute, it implies a translated version of the document. When used together with the media attribute, it implies a version designed for a different medium (or media).

[34] <http://www.w3.org/TR/html4/struct/links.html#search>

In the following example, we use the hreflang attribute to tell search engines where to find Dutch, Portuguese, and Arabic versions of a document. Note the use of the charset attribute for the Arabic manual. Note also the use of the lang attribute to indicate that the value of the title attribute for the LINK element designating the French manual is in French.

その他

[23] HTML 4 の要素索引、属性索引で iframeフレーム集合DTDにだけ存在するかのように書かれていますが、 実際には移行用DTDにも存在します。

最小の HTML4 文書

処理

[22] Webブラウザーには、「HTML4 モード」や「HTML5 モード」 のようなものはありません。 HTML4 で書かれた文書も、 現在の HTML Standard に従って書かれた文書も、 等しく HTML Standard に従って処理されます。

[64] この意味で、現在も (そして今後もずっと) HTML4文書は数多く残っていますが、 HTML4 仕様書には歴史的価値以外は残っていません。

歴史

Cougar

[28] HTML4 は当初 Cougar というコード名で開発されていました。

HTML4

[53] HTML 4 は、 HTML+, HTML3.0 から Cougar の流れと HTML3.2 を併合し、更に洗練した SGML base の HTML の集大成ともいわれていました。

00年代

[43] HTML4/XHTML1 は90年代後半から00年代中頃まで長く使われていましたが、 これは HTML4 の完成度が高かったからというよりは、 W3CHTML の開発を放棄して XHTML2XForms など XML ベースの言語に注力していたことや、 IE が市場を占有し Netscape が力を失ったことで Webブラウザーの進化が停滞したことに原因があります。

[44] この時代にも HTML4/XHTML1 の仕様の不備やそれに対する W3C HTML WG の無関心さ、あるいは HTML と互換性のない XHTML2 の是非、 仕様と現実の乖離など様々な議論がありました。その中から、当時の仕様の枠内で、 あるいは当時の仕様への素直な拡張によって不足する機能を追加したり曖昧な規定を明確化したり、 乖離を解消しようと試みたりする動きが次のようにいくつも現れました。

[45] こうした動きの中から WHATWG が設立され、 HTML5 へとつながります。

[56] WHATWG HTML Standard により HTML4 は標準仕様としての実効性を失い、 更に W3C HTML 5.0 W3C勧告により W3C の立場でも既に旧仕様となって久しいですが、 なぜか手続き上は現行勧告のまま >>55 残されているようです。 (更に古い HTML 3.2 も現行勧告のまま廃止されていないようです。)

関連

[29] ISO-HTMLHTML4部分集合となっています。

[30] XHTML 1.0 は元々 HTML4XML 移植版という位置付けで作られました。

[31] HTML4 に対してはいくつもの拡張が提案されました。 Web Forms 2.0Web Applications 1.0 もそうで、後に HTML5 となりました。

メモ

[11] HTML 3.0 と HTML 4.0 をつなぐ規格案 (DTD) は Cougar と呼ばれていました。もっとも、 Cougar の時点では、まだ HTML 3.3 になるのか 3.5 になるのか 4.0 になるのか (そもそも規格化されるのかすら) 未定でした。

[35] IRC logs: freenode / #whatwg / 20090909 ( 版) <http://krijnhoetmer.nl/irc-logs/whatwg/20090909#l-362>

[36] IRC logs: freenode / #whatwg / 20090909 ( 版) <http://krijnhoetmer.nl/irc-logs/whatwg/20090909#l-406>

[37] HTML4 Testable Assertions: Prologue ( 版) <http://www.w3.org/MarkUp/Test/HTML401/current/assertions/prologue.html>

[38] IRC logs: freenode / #whatwg / 20110722 ( ( 版)) <http://krijnhoetmer.nl/irc-logs/whatwg/20110722>

[39] Fwd: note: HTML 4.01 analysis for conformance ( (Karl Dubost 著, 版)) <http://lists.w3.org/Archives/Public/www-archive/2014Jan/0007.html>

[40] IRC logs: freenode / #whatwg / 20140627 ( ( 版)) <http://krijnhoetmer.nl/irc-logs/whatwg/20140627#l-893>

[80] HTML4/CSS2 Accessibility Recommendations () <https://www.w3.org/WAI/PF/report.html>

[81] CFC: Make previous versions of HTML and XHTML obsoleteCFC: Make previous versions of HTML and XHTML obsolete · Issue #86 · w3c/WebPlatformWG () <https://github.com/w3c/WebPlatformWG/issues/86>

[83] Proposal to Republish Previous Versions of HTML and XHTML as Obsolete Recommendations (Wide Review until 2017-09-07) (Xueyuan著, ) <https://lists.w3.org/Archives/Public/public-review-announce/2017Aug/0004.html>