HTML 及び XHTML 1.x における (特に見出しによる) 文書構造の明示に関する文書
HTML や XHTML (の元になっている XML) の元になっている SGML と言う規格は、文章をここから、ここまでと言う形で対象を囲むように印をつける (= markup)ことで文章の意味を表記する事が出来る言語です。例えば (SGML の 1 種でもある) XML で文字列あいうえおをあ行として markup すると以下の様になります。
<?xml version="1.0" encoding="Shift_JIS"?>
<あ行>あいうえお</あ行>
この様にあいうえおに対して直接あ行と言う印を付ける (= markup)方法で文書に意味付けする言語を markup 言語と言います。
では実際の文章を markup するとどうなるでしょうか。
題名 作者名 大見出し 第 1 段落 小見出し 第 2 段落 第 3 段落 小見出し 第 4 段落 大見出し 小見出し 第 5 段落 第 6 段落
例えばこのような文章は以下の様に markup 出来ます。
<題名>題名</題名>
<作者名>作者名</作者名>
<大見出し>大見出し 1</大見出し>
<段落>第 1 段落</段落>
<小見出し>小見出し 1</小見出し>
<段落>第 2 段落</段落>
<段落>第 3 段落</段落>
<小見出し>小見出し 2</小見出し>
<段落>第 4 段落</段落>
<大見出し>大見出し 2</大見出し>
<小見出し>小見出し 3</小見出し>
<段落>第 5 段落</段落>
<段落>第 6 段落</段落>
このような markup を行い、見出しや段落といった文書構造の表記を行う事により、コンピュータは文章内容を解析しなくとも容易に文書構造を理解する事が出来るようになります。
見出しなどの文書構造の表記によりどの段落がどの見出しに属する内容か判断出来るようになりました。しかし、小見出しの後にその小見出に含まれない段落が出現するような文章の場合や、未知の (大見出しや小見出しの様に大きさを比較する事の出来ない) 見出し要素、例えばらりるれろが現れら場合はどうなるでしょうか。
<大見出し>大見出し</大見出し>
<段落>本文</段落>
<小見出し>小見出し</小見出し>
<段落>本文</段落>
<段落>小見出しに含まれない段落</段落>
<大見出し>大見出し</大見出し>
<段落>本文</段落>
<小見出し>小見出し</小見出し>
<段落>本文</段落>
<らりるれろ>らりるれろ</らりるれろ>
<段落>本文</段落>
人間はこのような場合でも本文の内容などから文章構造を正しく把握する事が出来ますが、文章の内容を理解出来ないコンピュータにはこれらの文章の構造を把握する事が大変困難になります。しかし、大見出しや小見出し、又は未知の要素 (らりるれろ) の範囲を、ここから、ここまでと markup する事により、容易に要素間の関係を把握出来るようになります。
<区分>
<大見出し>大見出し</大見出し>
<段落>本文</段落>
<区分>
<小見出し>小見出し</小見出し>
<段落>本文</段落>
</区分>
<段落>小見出しに含まれない段落</段落>
</区分>
<区分>
<大見出し>大見出し</大見出し>
<段落>本文</段落>
<区分>
<小見出し>小見出し</小見出し>
<段落>本文</段落>
<区分>
<らりるれろ>らりるれろ</らりるれろ>
<段落>本文</段落>
</区分>
</区分>
</区分>
この様に文章の階層を表記する事により、現在読んでいる段落が、例え途中に未知の要素が含まれていようともどの見出しに含まれる文章であるか、文章内容を全く理解出来なくとも (つまり、コンピュータにも) 容易に理解出来るようになります。
HTML は 1990年に version 1 が作られた時、既存のワープロなどアプリケーションとの互換の為にフラットな (階層表記をしない) 構造を持つように作られました。その後 HTML は 4.01 まで作られ、更に XML に移植され現在の最新版は XHTML 1.1 となっていますが、実はこのフラットな構造は過去の version との後方互換などの為に未だに続いており、当然、階層表記しない事による問題も抱えています (下記例の h1、h2 は見出し (数字は見出しの階層)、p は段落を表す)。
<body>
<h1>大見出し</h1>
<p>本文</p>
<p>本文</p>
<h2>小見出し</h2>
<p>本文</p>
<p>本文</p>
</body>
これに対して以下のような幾つかの解決策 (階層の表記法) が考えられます。
HTML 4.01 や XHTML 1.1 には特定の意味を持たない汎用要素 div が存在します。これを使って階層を表記する方法が考えられます。
<body>
<div>
<h1>大見出し</h1>
<p>本文</p>
<p>本文</p>
<div>
<h2>小見出し</h2>
<p>本文</p>
<p>本文</p>
</div>
</div>
</body>
しかし、div 要素は飽くまで汎用要素であって、上記のような X / HTML が存在したとしても必ずしもそれが文章の階層表記であるかどうか解らない、という不明瞭な点が存在します。
ISO-HTML は見出しの出現順序を厳密に定義する為に各見出しの直後に、見出しに対応した div1 から div6 と言う markup を仮想的に追加する仕組みを持っています。
<body>
<h1>大見出し</h1>
<div1>
<p>本文</p>
<p>本文</p>
<h2>小見出し</h2>
<div2>
<p>本文</p>
<p>本文</p>
</div2>
</div1>
</body>
ISO-HTML は2002年03月14日現在、唯一厳格に見出しの出現順序を定め仮想的に階層を定義している仕様ですが、その為に他の仕様に比べ様々な制約が伴い、また HTML 4.01 への互換性などから div1 から div6 の仕様も飽くまで仮想的な物に留まっています。HTML 4.01 sub set と位置付けられ、HTML 4.01 に存在しない要素を独自に追加出来ない以上、これ以上の抜本的解決は難しく、また、そのような制約の上で定められた為、逆に汎用要素を用いた見出しの階層化を許可しない仕様となってしまっています。
XHTML 2.0 では過去の文法を根本的に見なおし、新しい要素として文章の区分を表す section と見出しを表す h 要素 (section の階層で見出しの階層も自明な為、数字はなくなるものと思われる) が盛り込まれると言われています。
<body>
<section>
<h>大見出し</h>
<p>本文</p>
<p>本文</p>
<section>
<h>小見出し</h>
<p>本文</p>
<p>本文</p>
</section>
</section>
</body>
しかし、XHTML 2.0 は未だ正式に勧告されていない仕様であり、2002年03月14日現在実効的な解決策では有りません。
2002年03月14日現在、最も根本的な解決が SGML / XML による独自仕様の作成と運用です。しかし、この作業は知識や時間を伴い、特に文書構造の階層化の明記が必要な場合は兎に角、あまり一般的な解決策とは言えないかも知れません。
2002年03月14日現在、一般的な X / HTML を使っている限りこの問題を抜本的に解決する事は困難であると言えます。しかし、section / h 要素を持つと言われている XHTML 2.0 の出現などにより遠くない将来解決されるであろう事は間違いありません。
今現在 web site 製作者に求められる事は、これらの問題の解決を直ちに行う事では無く、これらの問題を意識し、理解した上で X / HTML の markup を行い、この問題が解決された時、円滑な移行出来る環境を今のうちに構築する事と思われます。
将来、階層構造を表記出来る日が来た時、全ての X / HTML 文書は階層構造を明示せねばならないのでしょうか。
中にはわざわざ階層を表記し、解析の対象にする程の価値の無い文書も有るかもしれません。しかし、WWW 上に有る以上は、例えば検索エンジンなどの解析の対象となります。(階層も含め) 文書構造表記する程の価値もないとして一部の文書構造の表記を不完全にしたが故に、逆に検索エンジンなどが文書の価値を誤認し、そのような文書によって真に価値のある文書が埋没してしまう可能性も存在します。
WWW 上で文書を公開する場合は筆者の価値判断の有無に関わらず、公の資産であるとして極力文書構造の明示などを行う事が internet の公共性を高め、利用者自身の利便性に繋がるものと考えます。