HTMLブラッシュアップ(2)段落要素の意味の意味

 HTML4.0以降では、ほとんどの要素には「意味」があるとされている。たとえば、

<FONT size=5 color="red">死刑制度の是非</FONT>

とした場合には、この部分は単に「文字を大きくして赤くした部分」というだけだが、

<H1 style="font-size:5;color:red;">死刑制度の是非</H1>

とした場合、この部分は「見出し」という意味を持つ。IEなどで見る限りはこれら両者の差はほとんどないが*1、Linxなどのテキストブラウザだと差が出るのである。FONT要素を使用した場合、Linxでは全く反映されず、普通の文字部分と同じ表示になる。それに対し、H要素を使うと、中央寄せされて、見出しっぽく表示されるのである。

 HTML4.0での方針は「構造はHTMLで、表現はスタイルシートで」と言われる。HTMLタグは構造に関係するもの(ページの見出し、段落、引用など)に限るとされ、それ以外の、表現に関する要素(フォント、中央寄せなど)は非推奨要素とされているのである。最近のHTMLの参考書にも必ずそう書かれていて、タグではさんだ要素には構造についての意味があると説明される。
 それ自体は特に異議はないのであるが(なぜ太字<B>や斜体<I>が非推奨属性でないのか、など疑問はあるがおいておく)、ここでは、要素が持つ「意味」の意味について考える。

 タグではさんだ要素(IMGなどの空要素も含む)にはブロックレベル要素とインライン要素とがある。ブロックレベル要素は、ページを構成する「部分」であり、見出し<Hx>、段落<P>、引用<BLOCKQUOTE>、リスト<UL>、DIV<DIV>(ブロックレベル要素を任意に作る)などがある。一方インライン要素は、そのブロックレベル要素の中で切り取られた「部分」であり、太字<B>、強調<EM>、SPAN<SPAN>(インライン要素を任意に作る)などがある。ブロックレベル要素とインライン要素の違いは、といわれると難しいのだが、要素の前後で改行されるかどうかが一つの目安となる。

 ***

 ここで取り上げるのは、P要素(段落要素)である。改行目的で使っているページもまだ多いが、この要素の本来の意味は、「段落を作ること」である。そして、Pはブロックレベル要素である。
 ところで、要素はその内部に要素を入れることができる。たとえば、

<H1><B>死刑制度</B>の是非</H1>

とすると、H1(見出し)要素の中にB(太字)要素が入っている。いわゆる入れ子構造である。実は、入れ子は、どの要素のなかに何を入れていいのかが仕様上キッチリ決まっている。それによると、P(段落)の中にはインライン要素のみ入れることが許されるのである。

死刑制度の是非
死刑についての最近の多数の調査結果は、
・犯罪抑止効果
・誤判可能性
・残虐な刑罰を禁止した憲法との整合性
の点で死刑廃止を主張している。

という一文をHTMLで表現するとき、

<H1>死刑制度の是非</H1>
<P>死刑についての最近の多数の調査結果は、
<UL>
<LI>犯罪抑止効果
<LI>誤判可能性
<LI>残虐な刑罰を禁止した憲法との整合性
</UL>
 の点で死刑廃止を主張している。</P>

とするのは誤りである。ULはブロックレベル要素であるから、Pの中に入れることはできない。そうなると、

<H1>死刑制度の是非</H1>
<P>死刑についての最近の多数の調査結果は、</P>
<UL>
<LI>犯罪抑止効果
<LI>誤判可能性
<LI>残虐な刑罰を禁止した憲法との整合性
</UL>
<P>の点で死刑廃止を主張している。</P>

とするのが正しい記述になる。ところが、これでは良く見るとヘンなのである。下のPの内容は「の点で死刑廃止を主張している。」ということなってしまい、これで1段落というのでは感覚的に納得できない。引用の場合は、HTMLの文法上正しいとされる記述よりも、文法上誤っている記述のほうが、P要素の「意味」である段落に忠実なようにも思えるのだ。 Another HTML-lintの解説でも同じ点を疑問にしているが、ここではとりあえず、HTMLでの「段落」は言語学上の「段落」とは異なる、と考えればいいだろう。

 ***
 さて、上のHTMLの正しい記述のほうを見た時に、P要素の役割は何かと言われたら、「文字をひとかたまりにする要素」とするのが素直な解答であろう。ただ、P要素は、その中に画像やテキストエリアを入れ子にすることもできるのである。そうなると、P要素の「意味」は、「文字や画像などのインライン要素をひとかたまりにしてブロックレベル要素にする」ということになる。
 しかし、よく考えるとこれではDIVと変わりないのである。DIVは「ブロックレベル要素やインライン要素をひとかたまりにする」わけであるから、要するにPは「ブロックレベル要素を中に入れることができないDIV」なのである。
 ここで問題なのは、DIVはそれ自体意味のない要素であることなのである。HTML構造におけるDIVの役割は、CENTERなどと同様、内容に意味を与えずかたまりにすることなのである。そうなると、P要素は、DIVやCENTERと同じく、「段落」という言語学上の意味すら示さないなんら意味のない要素になってしまうことになる。言語学上での「段落」とは、やはり画像を含まないものだろうし、また、項目を含むものであるからである。

 ***

 もちろん要素の意味を考えて構造を書くことは重要である。たとえば、H要素を文字サイズ調節のために使うことはよくない。それはHTMLにおいて、Hタグではさまれた要素には、見出しという「意味」があるからである。
 しかし、P要素によって与えられた「段落」という「意味」には、意味がないのである。あえて言えば、「文字データの集合(画像などの置き換えデータも文字データの変種として扱う)」となろう。

 追記として、さきのPタグとリストとの関係の解決策を書いておく。それは、LI要素の中に
P要素を入れることである(<LI>の中に<P>を入れ子にすることは許される)。
ブロックレベル要素を入れ子にできる以上、LI要素には段落(つまり文の集合)という意味はないと
考えられるからである。

*1:厳密にいえば、FONT要素のSIZE属性における「5」と、スタイルシートにおけるfont-size:5とでは意味合いが違うから、両者の見栄えは同じではない。