Meiji Mizutani Masahiro(水谷 正大) http://www.isc.meiji.ac.jp/~mizutani/

このWebページでは、MathJaxを使って数式表示を行っています(ネットワークに接続している必要があります)。 記号 $ と$などで挟まれたLaTeX表記の数式が表示されてしまう場合、最新の Chrome や Firefox あるいは Safari を利用してください。


HTMLの文書構造

HTMLファイルは、HTMLの文書宣言で宣言した文書タイプに従う文書構造アウトラインということがある)を持たねばならない。 一般に、文書構造は階層的に組みあわされた文書ブロックからなる。

child_parent

階層的であるような文書ブロックには親子関係がある。 ある文書ブロック$D_P$が文書ブロック$D_C$を含み($D_P\supset D_C$)、$D_P$以外に$D_C$を含む他の文書ブロックが存在しないとき、$D_P$は$D_C$の親ブロック(parent)、$D_C$は$D_P$の子ブロック(child)といいう。

たとえば右図で、Aの子はBだけであり、CやDはAの直接の子ではない。 C, Dの親はBである。 doc_struct

HTML文書では、<html>要素が<body>要素を子として持ち、<body>要素が実際のHTML文書の本体となっている。 <body>要素は、左図の場合、[ブロック1]と[ブロック2]を子として持ち、[ブロックA]と[ブロックB]の親が[ブロック1]、[ブロックa]の親が[ブロック2]となっている。

こうした文書ブロック(アウトライン)の親子関係が文書全体にツリー構造を与えているのである。

文書ブロックの作成(HTML4まで)

HTMLで文書ブロック(アウトライン)を作成する、つまりある文書ブロックが支配する範囲を定める方法には、従来は次の2つの方法があった。

開始タグ<タグ>と終了タグ</タグ>によるセクショニングによって文書ブロックを定める方法は明快だとしても、たとえば次のような見出し要素の使い方はどうだろうか。

<h1>見出し1のレベル</h1>
.....
<h2>最初の見出し2</h2>
....
....
<h2>次の見出し2</h2>
....
....
ambiguity1 ambiguity2

暗黙のアウトラインとは、このようなHTML記述を左図のように解釈してセクショニングすることである。 左図では、<h1>要素は2つの<h2>要素「最初の見出し2」および「次の見出し2」を子として支配すると見なしている。

しかし、このHTML記述は右図のように見なすことも可能である。 <h1>は「最初の見出し2」が及ぶ範囲を子としして支配し、「次の見出し2」は<h1>の支配が及ばずに、<h1>の親である文書ブロックの子であると見なすことも可能である。

文書ブロック(アウトライン)の親子関係について左図または右図のどちらの解釈が理論的に正しいかは、見出し要素のレベル<h1>、<h2>、<h3>などの記述だけから完全にさだまるわけでなく、曖昧さがある。

こうした、曖昧さをなくすためには、面倒だが、<div>用を使って次のように書けばよい。 同じ<div>タグだが、その終了タグ</div>がどのブロックを閉じているかを十二分に注意する必要がある。 このためにHTMLでのコメント書式 <!-- 文字列 -->を使おう。

<div> <!--h1支配の開始-->
<h1>見出し1のレベル</h1>
.....
<div> <!--1番目のh2支配の開始--->
<h2>最初の見出し2</h2>
....
....
</div> <!--1番目のh2支配終了-->
<div> <!--2番目のh2支配開始--->
<h2>次の見出し2</h2>
....
....
</div> <!--2番目のh2支配終了-->
</div> <!--h1支配終了-->

HTML5の文書ブロックの作成