HTMLはインライン要素(Inline Element)とブロックレベル要素(Block Level Element) という 二つの基本的な内容モデルを持っています。
一般的に、インライン要素はブロックレベル要素に含まれますが、 インライン要素にブロックレベル要素を含むことは出来ません。
インライン要素とブロックレベル要素を合わせてフロー(Flow)と言います。 これらをまとめると以下のような図式になります。
フロー ------ インライン要素 | |--ブロックレベル要素 -------- インライン要素 | |--- ブロックレベル要素
演算記号は、接続演算子と接尾演算子という二種類があります。
接続演算子は式のなかに複数の構成字句が現れる場合、それらの出現する順番や選択を表します。 接続演算子は、","、"&"、"|"の三種類があり以下のような意味を持ちます。
, すべてが式の順番で現れる
& すべて現れるがその順番は問わない
| そのうちのただ一つが現れる
例 [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種類があります。
<html></html>
>
マーク宣言は
(%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の理解を助けるために注釈(コメント)が記述してあります。注釈宣言は次のように記述されています。
<!-- 注釈文(コメント) -->
"<!" はマーク宣言の開始を表しています。最初の "--" は注釈の開始を、次の "--" は注釈の終了を、 ">" はマーク宣言の終了を表しています。 "<!" (マーク区間開始)と "--" (注釈の開始)の間に間隔 を開けてはいけません。この注釈宣言はHTML文書を書く場合にコメントを入れるのにも使えます。
DTDにおける要素宣言は次のように記述されています。
<!ELEMENT 要素型 タグ省略最小化 内容モデル >
"<!" はマーク宣言の開始を表しています。"ELEMENT"はこの宣言が要素宣言であることを表し、 ">"はマーク宣言の終了を表しています。
開始タグ・終了タグの省略出来るかどうかを次の記号を使って表します。
"−"(マイナス)は省略できません。
"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 --" >