Section 15 : HTML の文法(2)

 HTML の要素が入れ子になっているようすは,木にたとえることができる。木はふつう,枝から幹は生えてこない。これは,要素の入れ子には制限があるということのメタファでもある。

HTML の文書モデル

 CSS の解説で,ブロック要素・インライン要素について頻繁に触れてきたが,HTML においても同様な概念がある。

 HTML は,いちばん外に <HTML>...</HTML> があり,その中は <HEAD>...</HEAD><BODY>...</BODY> に分けられている。ここで,<BODY>...</BODY> の中に <HEAD>...</HEAD> を書こうというのはどうか? 常識的に考えておかしい。

 HTML の各要素は,その中にどんな要素を書けるのかというのが決められている。逆に各要素は,どの要素の内側になら書けるのかというのが決まっている。

 だからといって,それらがまったく規則性もなく決まっているということではない。当然,現実の文書を反映するように決められている。だから,文書を書くということにたいしてある程度の認識があるのなら,傾向を知ることはたやすい。

 ここで再びブロック要素インライン要素ということばを登場させよう。だが,CSS で使った用語とは多少意味が異なる。CSS のブロック要素,インライン要素は display 属性の値によって決められ,変化しうるものであるが,ここでのブロック要素,インライン要素は HTML の規格で決められたスタティックなものである。以降,とくに断りがない限りブロック要素,インライン要素という語は HTML におけるものとし,CSS での定義の場合は“CSS でのブロック要素”のような表現を使うことにしよう。

 ブロック要素は,次のものをさす。まだ紹介していないものもあることを承知願いたい。

<P><Hn><UL><OL><PRE><DL><DIV><NOSCRIPT><BLOCKQUOTE><FORM><HR><TABLE><FIELDSET><ADDRESS>

これに,HTML 4.0 Strict で用いない(HTML 4.0 Transitional)ものとして,<CENTER><ISINDEX>,フレーム定義で使うものとして <NOFRAMES> を加える。

 いっぽう,インライン要素は次のものをさす。

これに,通常の文字データを含める。

 全体としては,CSS の(ブラウザが定める)既定値での定義とほぼ同じである。

 HTML の本文は,原則的に <BODY> の直下にブロック要素を書き,ブロック要素中にインライン要素を記述していくという方法をとる。ブロック要素は枝で,インライン要素は葉のようなものだと考えられる。また,ブロック要素は大きな箱,インライン要素は小さな箱,というイメージでもよいだろう。

下位要素・内容モデル

 ある要素の中に書かれた要素は下位要素と呼ばれる(とくに,ある要素のすぐ内側の要素は子要素という)。“ここに”のかたちで書かれるものは“要素の内容”を持たない。先ほど,要素ごとに“内容としてとれるもの”が決められていて,それは現実の文書構造を反映したものであるということを述べた。HTML 要素がその内容としてどのようなものをとるかというおおよその傾向は次のとおり。

これから,次の HTML の誤りが指摘できるだろうか。

<A HREF="whatsnew.htm"><H2>What's New</H2></A>

 これは頻繁に見られる誤りで,内容としてインライン要素しかとれない <A> の中にブロック要素の <Hn> が書かれている。葉から大枝が生えているようなものである。次のように書くのが正しい。

<H2><A HREF="whatsnew.htm">What's New</A></H2>

 ほかによく見られる誤りは,要素で表される文書構造を理解していないことからくるものである。

<UL>
わたしは....
</UL>

<UL> に関しては多くのブラウザでインデントがされるから,インデントのつもりで使っているのだろうが,これは内容として <LI> のみをとり,その <LI>:項目の内容がブロック要素またはインライン要素となっている。<UL> を書いて“箇条書きですよ”と言っておいて文章を続けるというのは“公約違反”である。HTML は“インデント”のような“見た目”を書くものではない(というより,見た目を記述できるように作られていない)という基本概念をまったく理解していない残念な例である。

 内容として,下位要素には数の制限や順序の制限がつくこともある。ここでは大まかな傾向だけにとどめ,詳細は Appendix C をご覧いただきたい。

 要素の内容のルール違反はブラウザによってはとんでもない出力になる場合がある。その点からも,こういった HTML の文法を把握することは重要,いや必須である。