HTML 4.0のDTDに定義されている各要素(ELEMENT)の関係を、木構造にしてみます。厳密な構造の再現はできませんが、それぞれの包含関係が概観できます。
なお、ここでの紹介は以前のバージョンとの互換性を考慮したゆるやかなDTD
http://www.w3.org/TR/REC-html40/loose.dtd
に基づいています。スタイルシートの使用を前提としたより厳しい(表現要素を取り除いた)DTDは
http://www.w3.org/TR/REC-html40/strict.dtd
で確認してください。
HTML
|--HEAD
| |--%head.content
| | :..TITLE
| | : |--(#PCDATA) -(%head.misc;)
| | :..ISINDEX ?
| | :..BASE ?
| |--%head.misc
| :..SCRIPT
| : |--CDATA
| :..STYLE
| : |--CDATA
| :..META
| :..LINK
| :..OBJECT
|
|--FRAMESET
| |--(FRAMESET | FRAME)+
| |--NOFRAMES ?
| |-- BODY - NOFRAMES
|--BODY
|--%flow
| |--%block
| | :..P
| | : |--(%inline;)*
| | :..%heading
| | : :..[H1 | H2 | H3 | H4 | H5 | H6]
| | : |--(%inline;)*
| | :..%list
| | : :..[UL | OL]
| | : : |--LI
| | : : |--(%flow;)*
| | : :..[DIR | MENU]
| | : |--(LI)+ -(%block;)
| | :..%preformatted
| | : :..PRE
| | : |-- (%inline;)* - (IMG | OBJECT | APPLET | BIG | SMALL | SUB | SUP | FONT | BASEFONT)
| | :..DL
| | : |--DT
| | : | |--(%inline;)*
| | : |--DD
| | : |--(%flow;)*
| | :..DIV
| | : |--(%flow;)*
| | :..CENTER
| | : |--(%flow;)*
| | :..NOSCRIPT
| | : |--(%flow;)*
| | :..NOFRMES
| | :..BLOCKQUOTE
| | : |--(%flow;)*
| | :..FORM
| | : |--(%flow;)* -(FORM)
| | :..ISINDEX
| | :..HR
| | :..TABLE
| | : |--CAPTION ?
| | : | |-- (%inline;)*
| | : |--(COL* | COLGROUP *)
| | : | |--COL*
| | : |--THEAD ?, TFOOT ?, TBODY +
| | : |--TR +
| | : |--(TH|TD)+
| | : |-- (%flow;)*
| | :..FIELDSET
| | : |--#PCDATA
| | : |--LEGEND
| | : | |--(%inline;)*
| | : |--(%flow;)*
| | :..ADDRESS
| | |--((%inline;) | P)*
| |--%inline
| :..#PCDATA
| :..%fontstyle
| : :..[TT | I | B | U | S | STRIKE | SMALL]
| : |--(%inline;)*
| :..%phrase
| : :..[EM | STRONG | DFN | CODE | SAMP | KBD | VAR | CITE | ABBR | ACRONYM]
| : |--(%inline;)*
| :..%special
| : :..A
| : : |--(%inline;)* -(A)
| : :..IMG
| : :..APPLET
| : : |--(PARAM | %flow;)*
| : :..OBJECT
| : : |--(PARAM | %flow;)*
| : :..FONT
| : : |--(%inline;)*
| : :..BASEFONT
| : :..BR
| : :..SCRIPT
| : :..MAP
| : : |--((%block;)+ | AREA+)
| : :..Q
| : : |--(%inline;)*
| : :..[SUP]
| : : |--(%inline;)*
| : :..SPAN
| : : |--(%inline;)*
| : :..BDO
| : : |--(%inline;)*
| : :..IFRAME
| : : |--(%flow;)*
| :..%formctrl
| :..INPUT
| :..SELECT
| : |--OPTGROUP
| : | |--(OPTION)+
| : |--OPTION
| : |--(#PCDATA)
| :..TEXTAREA
| : |--(#PCDATA)
| :..LABEL
| : |--(%inline;)* -(LABEL)
| :..BUTTON
| |--(%flow;)* -(A | %formctrl; | FORM | ISINDEX | FIELDSET | IFRAME)
|-- +[INS | DEL]
|--(%flow;)*
#PCDATA Parsed Charcter Data
CDATA Charcter Data
図の見方:
大文字の単語が要素(ELEMENT)で、そこから |-- によって下につながっているのが各要素の内容モデルを構成する要素(あるいは実体)です。%で始まる小文字の名称は実体宣言された実体名(ENTITY)で、その下部に :..で示されているのがその構成要素(置換実体)です。
内容モデルの記述:
木構造の終端のみ、DTDの内容モデルの書き方に沿って表現しています。すなわち、*は0回以上の繰り返し、+は1回以上の繰り返し、| はどれか一つが出現するという具合です。
Aの内容モデルに見られる
(%inline;)* -(A)
のように実体名 - 要素名(or 実体名)となっている場合は、「%inlineを0回以上繰り返すことができるが、要素Aは除外する」という意味になります。
INS,DELはBODYの内容モデルで
と定義されていますが、これはBODY以下の全ての要素でINS,DELが出現できることを示します。
EMPTY
木構造の終端に達しても要素名だけでその内容モデルが示されない場合は、その要素は内容を持たないことを示します。