HTMLの内容モデルについて

HTMLの内容モデル

HTMLはインライン要素(Inline Element)とブロックレベル要素(Block Level Element) という 二つの基本的な内容モデルを持っています。

ブロックレベルの要素とインラインの要素の関係図

一般的に、インライン要素はブロックレベル要素に含まれますが、 インライン要素にブロックレベル要素を含むことは出来ません。

インライン要素とブロックレベル要素を合わせてフロー(Flow)と言います。 これらをまとめると以下のような図式になります。

フロー ------ インライン要素
          |
          |--ブロックレベル要素 -------- インライン要素
                                    |
                                    |--- ブロックレベル要素

TOPへ戻る(t)


予備知識

演算記号

演算記号は、接続演算子と接尾演算子という二種類があります。

接続演算子

接続演算子は式のなかに複数の構成字句が現れる場合、それらの出現する順番や選択を表します。 接続演算子は、","、"&"、"|"の三種類があり以下のような意味を持ちます。

 ,  すべてが式の順番で現れる
 &  すべて現れるがその順番は問わない
 |  そのうちのただ一つが現れる

例
 [a , b ,c]  ---- a b c

 [a & b & c] ---- a b c または
                   a c b または
                   b a c または
                   c b a 等

 [a | b | c] ---- a または
                   b または
                   c 
接尾演算子

接尾演算子は式に現れる構成字句がどのような回数出現するかを表します。接尾演算子は "?"、"+"、"*"の三種類があり、以下のような意味を持ちます。

? 任意選択(opt) 0回または1回だけ現れる
+ 必須の反復(plus) 1回以上現れる
* 任意選択の反復(rep) 0回以上現れる

用語の定義

情報を伝達するために文書のデータに付け加えられた文字を『マーク(markup)』と言います。 マークには次の4種類があります。

マーク宣言は

引数(parameter)
引数分離子によって連結されているマーク宣言の一部。引数が更に他の引数を含んでも良い。
引数表記(parameter literal)
区切られた置換可能な引数データからなる引数又は字句。
引数実体(parameter entity)
マーク宣言引数から参照することができる実体。
引数実体参照(parameter entity reference)
引数実体への名前付き実体参照。
引数分離子(parameter separator)
マーク宣言中に出現する引数を分離するもの。
マーク宣言(markup declaration)
文書の中のマークの解釈を制御する宣言。
備考 SGML,実体,要素,属性定義並び,記法,文書型,連結型,連結集合, 連結使用,マーク区間,短縮参照対応表,短縮参照使用及び注釈の13種類がある。
参照(reference)
他の文,実体又は単一文字のいずれかによって置換されるマーク。
マーク(markup)
情報を伝達するために文書のデータに付け加えられた文字。
備考 記述的マーク(タグ),参照,マーク宣言及び処理指令の4種類がある。
マーク区間(marked section)
特別の目的のために認識される文書の区間。
マーク区間宣言(marked section declaration)
マーク区間を識別し,その取扱いを指定するマーク宣言。
要素宣言(element declaration)
内容及びマーク最小化機構を処理する要素型宣言の形式指定からなる マーク宣言。
マーク最小化機構(markup minimization feature)
タグの短縮,省略又は実体参照の短縮によってマークが最小化されるこ とを許すSGMLの機構。
備考 マーク最小化機構は,文書型定義に影響しないので,省略 されたマークを回復することによって,これらの機構を支持しな いシステムに最小化された文書を送ることができる。 SHORTTAG,OMITTAG,SHORTREF,DATATAG及びRANKの5種類がある。
実体(entity)
一つの単位として参照される文字の集まり。
実体参照(entity reference)
実体によって置換される参照。
備考 名前付き実体参照及び短縮参照の2種類がある。
実体宣言(entity declaration)
参照を可能にするために,一つの実体にSGML名を指定するマーク宣言。
数値指定文字参照(numeric character reference)
区切られた文字番号によって構成する文字参照。
短縮参照(列)[short reference(string)]
具象構文によって短縮参照区切り子機能に割り当てられる文字列。
具象構文[concrete syntax (of SGML) ]
特定の区切り子文字,量,マーク宣言名などを抽象構文に結合する構文。
抽象構文[abstract syntax (of SGML)]
文書データにマークの付加を規定する構文であって,マークを表現 するために使う特定文字に依存しない構文。

内容モデルの記述法

要素の内包関係のことを内容モデルと言います。内容モデルの記述をするために前述の演算記号を (接続子として接続演算子を、出現標識として接尾演算子)用いています。 また、例外を示すために、"+"と"-"の記号を前に付けた添加要素と排除要素 として、そのモデル群に引数分離子(空白など)を挟んで記述します。
添加要素
(%block;|SCRIPT)+ +(INS|DEL)

これはBODY要素の内容モデルです。最初の部分 "(%block;|SCRIPT)+" は、BODY要素には 「最低一つ以上のブロックレベル要素やSCRIPT要素が含まれなければならない」としています。
次の"+(INS|DEL)"が添加要素で、「それに加えてINS要素とDEL要素を含めてもいい」と言っています。

添加要素は任意の複数回の出現が許される事に注意してください。添加要素の記法 を使わなければ、前述の式は以下のようになります。
(INS|DEL)*,((%block;|SCRIPT),(INS|DEL)*)+
排除要素
(%inline;)* -(A)

これはA要素の内容モデルです。"(%inline;)*"の部分は「A要素はインライン要素を0個以上含められる」 と言っています。ところでA要素はインライン要素なのですが、次の"-(A)"が排除要素で 「ただしA要素は除く」と言っています。つまりA要素はA要素以外のインライン要素を含むという事ですね。

構成要素(要素型や引数実体参照等)をグループ化するために"( )"で括ります。


文書型定義 DTD

文書型定義(DTD)は

の四種類の宣言で作られています。


注釈宣言

DTDの理解を助けるために注釈(コメント)が記述してあります。注釈宣言は次のように記述されています。

  <!-- 注釈文(コメント) -->

"<!" はマーク宣言の開始を表しています。最初の "--" は注釈の開始を、次の "--" は注釈の終了を、 ">" はマーク宣言の終了を表しています。 "<!" (マーク区間開始)と "--" (注釈の開始)の間に間隔 を開けてはいけません。この注釈宣言はHTML文書を書く場合にコメントを入れるのにも使えます。

要素宣言

DTDにおける要素宣言は次のように記述されています。

  <!ELEMENT 要素型  タグ省略最小化  内容モデル >

"<!" はマーク宣言の開始を表しています。"ELEMENT"はこの宣言が要素宣言であることを表し、 ">"はマーク宣言の終了を表しています。

要素型
P、A、PRE、HTML、BODYなど、要素の名前です。
タグ省略最小化

開始タグ・終了タグの省略出来るかどうかを次の記号を使って表します。

"−"(マイナス)は省略できません。
"O"は"omit"の頭文字で省略可能です。

内容のない空要素(empty element)の場合、終了タグは "O"(省略可)と表記されていますが、 省略可というより、終了タグは付けてはいけません。

内容モデル

その要素がどのようなもので成り立っているかを記述します。記法については演算記号、 内容モデルの記述法を参考にしてください。

例として、P要素の要素宣言をとりあげます。

<!ELEMENT P - O (%inline;)*            -- paragraph -->

意味は以下のようになります。

要素名開始タグ終了タグ内容モデル注釈
引数P-O(%inline;)* paragraph
説明P要素必要省略可インライン要素を0個以上含む段落

"%名前;"は引数実体参照を表しています。引数実体参照は実体宣言により実体と置換可能にな ります。

属性定義並び宣言

DTDにおける属性定義並び宣言は次のように記述されています。

  <!ATTLIST 要素型 属性定義並び >

"ATTLIST"が属性定義並びを意味するキーワードです。その後に要素の名前、 その要素の持つ属性定義のリストが続きます。

<!ATTLIST BODY
  %attrs;                              -- %coreattrs, %i18n, %events --
  onload          %Script;   #IMPLIED  -- the document has been loaded --
  onunload        %Script;   #IMPLIED  -- the document has been removed --
  >

実体宣言

実体宣言は次のように記述されています。

  <!ENTITY 実体名 実体文 >
<!ENTITY % coreattrs
 "id          ID             #IMPLIED  -- document-wide unique id --
  class       CDATA          #IMPLIED  -- space separated list of classes --
  style       %StyleSheet;   #IMPLIED  -- associated style info --
  title       %Text;         #IMPLIED  -- advisory title/amplification --"
  >

Webページ作成ノート 目次へ戻る (i)
rain's home page へ戻る