Section 10 : SGML としての HTML(1)

 HTML が ISO で標準化された SGML を具体化させたアプリケーションであることは前にもお話ししたとおりである。ここでは,HTML を SGML の観点からもう一度見直してみよう。

DOCTYPE 宣言と HTML のバージョン

 このチュートリアルのいちばん最初に,“HTML は全体を <HTML>...</HTML> でくくる”と述べたが,正式には,<HTML> の前に,その HTML のバージョン情報を宣言するべきである。

 HTML のバージョン情報の宣言には,DOCTYPE 宣言を用いる。DOCTYPE 宣言は HTML ファイルの先頭に書かれる。HTML 4.01 Strict(厳格な HTML 4.01)を用いる場合の宣言は次のようになる。

<!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">

<FRAMESET> を使ってフレーム分割を行う場合は,

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

となる。

 本チュートリアルでは,HTML 4.01 Strict を中心に話を進めてきたが,現在の WWW の現状では,HTML 4.01 Transitional に相当する HTML がもっとも多い。

 ご存じのとおり,“ブラウザ”ではかなりいい加減な HTML を書いてもまっとうに表示されてしまい,こういった“ブラウザ”の前では,DOCTYPE 宣言は形骸化もはなはだしいのが残念であるが,それぞれの宣言の使い分けをまとめておこう。

-//W3C//DTD HTML 4.01//EN
見た目の記述を排した,厳格な HTML 4.01 である。文書構造も HTML 4.01 Transitional に比べて厳格である。HTML 4.01 で新たに文書を作成するのであれば,これを用いるのが望ましい。
-//W3C//DTD HTML 4.01 Transitional//EN
HTML 3.2 のように見た目に関する記述も許される HTML 4.01。文書構造は Strict に比べて緩やかである。CSS に対応していない UA を考慮して見た目の記述を行いたいときに用いる。また,フレーム化された文書で,TARGET 属性を使うためには,フレーム内の文書は HTML 4.01 Transitional で書かれる必要がある。
-//W3C//DTD HTML 4.01 Frameset//EN
フレーム定義を行う HTML 4.01。<HTML> の下位要素が <HEAD><FRAMESET> になる。<NOFRAMES> に書かれるのは HTML 4.01 Transitional にのっとる。

SGML としての HTML

 SGML から HTML を作るには,HTML を定義するものがなくてはならない。HTML を定義するのは次のものが必要である。

 SGML 宣言の解説も本来は本稿の範囲であるが,そのためには SGML の解説をしなくてはならない。SGML はそれ自体 1 冊の書籍になりうるものなので,ここでは簡単に触れるにとどめる。

 SGML 宣言は,そのアプリケーション(すなわちここでは HTML)中で,どんな文字が使われるのか,(規格の中で)タグの省略は可能か,といった根本的な性質を決定するものである。

 DTD は,どんな要素があって,その内容はどのようにとるかとか,どんな属性があって,その値はどのように与えるべきかなどを定義するものである。いわば,HTML の文法のエッセンスである。この DTD の読み方を知っていて損はあるまい。

 先ほど触れた DOCTYPE 宣言で呼び出される(べきである)のは,この DTD である。HTML 4.01(HTML 4)では Strict,Transitional,Framset に対して DTD が用意されており,それぞれそこで文書構造の表現のしかたが定義されている。

 HTML の DTD を一部引用してご覧いただこう。

<!ELEMENT IMG - O EMPTY                -- Embedded image -->
<!ATTLIST IMG
  %attrs;                              -- %coreattrs, %i18n, %events --
  src         %URI;          #REQUIRED -- URI of image to embed --
  alt         %Text;         #REQUIRED -- short description --
  longdesc    %URI;          #IMPLIED  -- link to long description
                                          (complements alt) --
  name        CDATA          #IMPLIED  -- name of image for scripting --
  height      %Length;       #IMPLIED  -- override height --
  width       %Length;       #IMPLIED  -- override width --
  usemap      %URI;          #IMPLIED  -- use client-side image map --
  ismap       (ismap)        #IMPLIED  -- use server-side image map --
  >

 これは,次のようなことを記述している。

要素 <IMG> は“ここに”のかたちで記述される要素で,基本となる属性,URI を与える SRC 属性(必須),文字列を与える ALT 属性(必須),URI を与える LONGDESC 属性,文字列を与える NAME 属性,長さを与える HEIGHT 属性,長さを与える WIDTH 属性,URI を与える USEMAP 属性,“ISMAP”をキーワードとする ISMAP 属性を持っている。

 この DTD の読み方の基礎については,Section 13Section 14 および Section 15 で触れることにしよう。

 仕様書は,HTML 4.01 については W3C から公開されている。この規格書に沿って本稿は HTML 4.01 を解説している。

 DTD は HTML の文法のエッセンスとはいったものの,それは HTML の形式的な部分を記述しているから,そこに表せないもの,表しきれないもの,たとえばその要素は何に使われるべきであるとか,属性に与えうる値の詳細,が仕様書に書かれている。

 注意していただきたいのは,(少なくとも HTML の)DTD および仕様書には,文書構造を表現するのに直接関係ない,表示に関することは(HTML 4.0 Transitional の記述に係る部分を除いては)ほとんど述べられていないということである。たとえば,<DL> はインデントされるべきだとか,<Hn> は大きい文字で表示させるようになどとは(大きい文字で表示されることが多いとはあっても)どこにも書いていない。本チュートリアルでも,HTML の出力に関しては,特別なものでない限り,“……のように表現されることが多い”“通常は……のように表現される”“表現手段としては……がよく用いられる”という表現をとった。HTML は本来表示を記述するものではなく,見た目の記述は CSS などを通して行われるべきである。

 本チュートリアルでは,たびたび出力例をお目にかけているが,HTML に関する限り,それは単なる参考程度と思っていただくのがよい。HTML においては,“どのように出力させるか”が問題ではなくて,“どのように適切に記述するか”が問題なのである。適切に,正しく書かれた HTML は,UA がよほどひねていない限り,黙っていてもうまく処理・表示されるものである。