XSLTで自動的にページ目次を作るようになってから、見出しの付け方に非常に悩むようになってきた。
1つのページ内に違う事についての文章が並んでいる時は比較的考えやすい。このサイトの『サイト案内』を例に取ると、「サイトの概要」から始まって「諸情報」まで、それぞれサイト案内に関することではあるが、見出しが管轄している内容自体は全く連続性が無い。こういうときはページの最初にある目次もうまく機能している。
「h1
からh6
まで、見出しは連続して出てくるべきだ」ということではない。そもそも元のXML文章では見出しレベルなんていちいち付けずに、XHTML2.0のsection
要素の様にマークアップしてある。
以下の例を考える。分かりやすくするためそれぞれの見出しが管轄する範囲をdiv
要素でまとめてある。
<div class="section1">
<h1>foobar2000のインストール</h1>
<p>このページはサウンドプレーヤーfoobar2000のインストールと日本語化を解説するためのページです。</p>
<p>バージョンアップごとに撮り直すのが面倒なため何か画面に変更がない限りスクリーンショットは古いバージョンのままになっています。変更が有った場合は撮り直すので旧バージョンが表示されていても気にしないでください。</p>
<div class="section2">
<h2>本体のダウンロード</h2>
<p>まずは本体をダウンロードします。</p>
<p>次に~</p>
</div>
<div class="section2">
<h2>本体のインストール</h2>
<p>ダウンロードが完了したら早速インストーラー(ダウンロードしてきたファイル)を起動します。</p>
<p>そして~</p>
</div>
<div class="section2">
<h2>日本語化</h2>
<p>まず最初に次のサイトから日本語化パッチをダウンロードしてきます。</p>
<p>ダウンロードが完了したら~</p>
</div>
</div>
一見問題なさそうに思える。実際XHTML1.1としては妥当な構文で成り立っている。では、実際にXSLTでh2
要素だけ拾ってみる。
h1
要素の開始タグと隣接する二つのp
要素の内容が完全に抜け落ちてしまった。
この場合、はじめの2つのp
要素は前書きのような物なので目次に含まれなくても問題無いかもしれない。もしくは「はじめに」といった見出しを作り隣接する二つのp
要素もh2
要素の管轄に納めてしまう手もある。
さらに以下の例を考える。
<div class="section1"><h1>ドメイン名考</h1>
<p>最近安さにつられてドメインを2つほど(1つはarielworks.comです)買ったんですが、現状だと古くからあるgTLD(.com/.net/.org)のうち、3文字くらいのドメインはほとんど全滅なんですね。</p>
<p>私が買ったもう1個のドメインはメール用に短いものにしようと思って4文字か5文字ぐらいにしようかなぁ、と考えていたんですが、それでも意味のある一般名詞はほとんど全滅です。もう少し待てば転売目的でキープしていた価値の低い.comを捨てる会社が増えてきて、現状よりも空きドメインが増えるらしいんですが、それでも誰でも思いつくようなドメインを取るのはなかなか難しいんじゃないかと思います。ドットコム。(語尾に「ドットコム」を付けるのが一時期内輪で流行ったな、そういえば……)</p>
<p>さて、私の場合普段の生活で使うつもりだったので、「短さ」だけでなく口頭でアドレスを伝えるときの「発音のしやすさ」を重視しようと考えていました。</p>
<p>以下10個程度段落が続く……</p>
<div class="secton2">
<h2>関連リンク</h2>
<ul>
<li><a href="foo.html">hogehoge</a></li>
</ul>
</div>
</div>
同様にh2
要素だけ拾って目次を作ると
となってしまう。明らかに言いたいことはh1
要素が管轄する文章なのに、目次に表示されるのは「関連リンク」のみだけである。
では、どうするべきか。選択肢は以下の通りだ。
h2
要素を拾うのが間違っている。h2
要素を追加する。この問題は目次に登録するhn
要素をどこまで含めるかでどんどんややこしくなる。2の選択肢を選ぶ場合、h3
要素まで目次に含めるとするとh3
要素が1つでも内包されているh2
要素は直接管轄している範囲の全ての要素をh3
に委譲しなければならなくなってしまう。つまり、その見出し以下の大きさの見出しを1つでも持つときはその見出し自信は一切内容を持ってはいけない、ということだ。
複数のXMLファイルを組み合わせて1つのXML文章とすることもあるので、元のファイルのh1
要素が組み合わされた時にはh2
要素になっていたりするのも頭が痛い。
選択肢1については他に考えようが無いので現時点では何とも言えない。
選択肢3はW3Cの勧告書などが採用している。もっとも勧告書はもっと長いので「関連リンク」だけということは無いが、2階層目の見出し(「1.1」など)を選ぶと1階層目の最初の部分は飛ばされることになる。
W3Cがこの方式なので何となく選択肢3が有力に思えるが、今度は最初の例の「はじめに」を作るべきか作らないべきかで悩んでしまう。結局の所、その都度文章の重要性を考えてマーク付けするしか無いのだろう。
個人的な結論を言えば、冒頭の文章が次に出てくる小見出しと同じレベルの物ならばそのときは新たに冒頭に小見出しを足し、冒頭の文章が取るに足らない補足事項の様な物ならばそのまま流してしまえば良いんではないかと思う。