見出し構造とツリー構造明示

どのような方法が定められているか

仕様としては、以下のあり方が考えられています。

明示するならどうするか

好例

いずれの方法を採用するにせよ、常に「終止一貫した」階層構造を作るように心がけることが、セマンティックウェブへの第一歩です。

HTML Living Standard による手法
<header>
(ヘッダを構成する要素)
</header>
<article>
  <h1>見出し1</h1>
  <p>段落</p>
  <section>
     <h2>見出し2</h2>
     <p>段落</p>
  </section>
  <section>
     <h2>見出し2</h2>
     <p>段落</p>
  </section>
</section>
<footer>
(フッダを構成する要素)
</footer>
旧来の (X)HTML における手法

例えば hndiv を用いた明示方法の好例の一つに 「マーク付けノート」があります。

<div>
(ヘッダを構成する要素)
</div>
<div>
  <h1>見出し1</h1>
  <p>段落</p>
  <div>
     <h2>見出し2</h2>
     <p>段落</p>
  </div>
  <div>
     <h2>見出し2</h2>
     <p>段落</p>
  </div>
</div>
<div>
(フッダを構成する要素)
</div>

このような一貫した構造を取っていれば、検証ツールでも容易に取り扱うことも出来ますし、文書を扱う各種プログラムにおいても、例外処理をさせる必要がないので、その分の労力を新機能開発に注ぐことが出来ます。

悪例

一方、一貫していない明示方法は、プログラムを混乱させます。検証ツールでも、例外処理を余儀なくされます。以下に、その一例を挙げておきます (旧来の (X)HTML における、 div と見出しを混在させる手法です)。

<div>
  <div>
    <h1>見出し1</h1>
    <p段落</p>
  </div>
  <div>
    <h2>見出し2</h2>
    <p>段落</p>
       <h3>見出し3</h3>
       <p段落</p>
  </div>
</div>

上記の文書は、例えば手製のスキーマではエラーを吐きます。中途半端に div などを使う位なら、全く使わない方がましです。少なくともスキーマやパーザは、記述が一貫してさえいれば、まともに構造を認識し、適切に処理出来ることが期待できるからです。

何が言いたいのか

セマンティックウェブを視野に入れる上で大事なのは、飽くまで「構造とマーク附けが一致しており」「記述が終止一貫」しているかどうかであり、単に明示していさえすれば良いわけではありません。

私自身、 div などを用いたセクションを作成すること自体を否定するわけではないし、それがプログラム処理にとっては好都合であるのは理解出来ます。ただ一つ言いたいのは「中途半端で恣意的な明示は逆効果である」ということだけなのです。

余談: 私のサイトで div を殆んど使わない理由

いろいろと挙げてみました。

わざわざ重いオーサリングツールを使わずとも、テキストエディタで簡潔に現すことが出来るのも、マーク附け言語の利点だと思うのです。XML は人間がテキストエディタで書かなければならないものではない。階層構造の管理などの面倒な作業は、オーサリングツールが担うべきだ。という意見もありますが、これが昂じれば、 Word 文書の如く、「このツールがなければ編輯出来ない」という事態に陥ることもあり得るわけで。

確かに、現行の html 文書も大抵はオーサリングツールで作成しているケースが多い以上、 XML/XHTML 文書作成をツールに完全依存させるのは、一つのあり方と言えるでしょう。しかし、いざ小回りを効かせようと思うと(ちょっとカスタマイズしたいとか、文書をちょっと変更したいとか)、わざわざツールを立ち上げるよりは、テキストエディタの方が遥かに有効です。そして、可視性の高い単純な構造ならば、そのような編輯も容易に出来ます。それこそ、ツールの吐き出した階層構造を人間の目で追っかけることは、私には出来やしません。