DOSEIの日記

技術メモ+日常ログ

どっかで、「HTMLでdivを使ってセクションを明示しようとするのは、理念の破綻だ」みたいな記事を読んだ。
でも、それってなんか違う気がするな。
まず、HTMLには表現できる文書の構造に制限がある。つまり用意された要素でしか意味を明示できない。たとえば、(少なくともHTML4までは)章や節がどのような範囲か示せないし(hn要素から推定はできる)、目次を示す要素もない(ま、いらないかもしれないが)。リストのキャプションもないし、タイトルに付随するサブタイトルを示す要素もない。つまり、用意された要素で表わされる文章構造クラスに制限される。
しかし、その中に divspan がある。これらは汎用要素と呼ばれていて、特に意味を持たない。意味を持たないことが、この要素の存在に意味がないということではない。これらの要素は、HTMLでは表現できない要素をとりあえずマークアップしておきたいという目的で使われる。いや、使うことを想定している。ある範囲が「何か」であるということを主張するが、HTMLを理解するUAは普通それを特に感知しない(もちろんデフォルトで何かしら強調表示するUAがあってもいいだろう)。
「何か」を表わす divspan は、 classid プロパティを使って、分類できる。これらのプロパティは一種のメタ情報を与えるが、やはり UA は感知しない。
UAが理解しない情報は、単なる冗長情報だろうか。CSSで見栄えを調節するだけの役割しかないのだろうか。
たとえば、ある文書に対して、十分な構造記述能力をもった自作マークアップ言語(XMLで)を用意しよう。この文書を一般に公開するさいは、HTMLにしたほうがよいと考えたとする。このとき、HTMLにない構造情報は消すべきだろうか? そういうものを表わすのが div であり、 span であるはずだ。
逆に、他の言語に変換する可能性を考慮して、これらの要素を使うこともまた HTML の理念を破綻しない方法だと思う。そしてその1つが、セクションを表わす div だ。 XHTML2 では、次のようなマークアップができるようになるらしい。(sectionって長いな。secsに出来たらいいのに。打ち消し線要素とかぶるから採用されなかったんだろうけど)

<section>
  <h>見出し1</h>
  <p>内容</p>

  <section>
    <h>見出し2</h>
…

これと相互変換できるように現行のHTMLでは次のようなマークアップをするのである。

<div class="section">
  <h1>見出し1</h>
  <p>内容</p>

  <div class="section">
    <h2>見出し2</h>
…

UA にとっては、なくても「大丈夫」な要素であるし、もっといえば無駄な情報である。しかし、相互変換しようとするものには「有益な」情報を保持できる、つまり HTML では表わしきれない情報を補う、余裕を持たせてあるのだ。もちろん、CSSのための要素じゃないよん。