DTD(文書型定義)の読み方
DTDって?
DTDは、HTMLなどSGMLを基にする言語にどのような要素があって、どんな条件で使うことができるかといったルールを定義したものです。
要素宣言
DTDでは、文書中で使用する要素がどのような構造かを <!ELEMENT・・・> で定義します。
<!ELEMENT 要素名 開始タグ要求 終了タグ要求 (内容モデル) -- コメント -->
例えば、address要素の場合、次のように定義されます。
<!ELEMENT ADDRESS - - (%inline;)* -- information on author -->
address要素の定義
定義項目 | 意味 |
---|---|
要素名 | address |
タグの要求 | 開始タグ省略不可(-),終了タグ省略不可(-) |
内容モデル | %inline;が現れないか、任意回数出現しなければならない。 |
コメント | information on author |
- 要素名
- 要素名には、見出しや段落といったタグの名称を定義します。
- タグ要求
- タグ要求には、開始タグや終了タグが必須かどうかを定義します。 -が必須、Oが省略可を表します。
- 内容モデル
- 定義対象の要素内で出現可能な内容(実体やパラメータ実体)や回数、順序、例外などを定義します。
- コメント
- 要素のコメントが記述されます。
内容モデルの表記方法
内容モデル | 意味 |
---|---|
A | Aは1回だけ現れなければならない。 |
A+ | Aは1回以上出現しなければならない。 |
A? | Aは現れないか、1回だけ現れなければならない。 |
A* | Aは現れないか、任意回数出現する。 |
A | B | AもしくはBのいずれか一方が出現しなければならない。 |
A, B | A及びBがこの順序で出現しなければならない。 |
A&B | A及びBが任意の順序で出現しなければならない。 |
+( … ) | 要素グループは、例外として出現して良い |
-( … ) | 要素グループは、例外として出現してはいけない |
( … ) | グループの範囲を指定する |
EMPTY | 内容を持ってはならない |
#PCDATA | 文字列 |
ここまでの内容を、body要素で確認してみます。
<!ELEMENT BODY O O (%block;|SCRIPT)+ +(INS|DEL) -- document body -->
body要素は、開始タグの要求がO終了タグの要求もOなのでタグは省略可能であることを示しています。 内容モデルでは、ブロックレベル要素(%block;)もしくはscript要素が1回以上出現でき、 例外としてins,del要素は、body要素内に出現してもかまいません。
内容モデルに%block;というものが記述されていますが、これはパラメータ実体と言います。
パラメータ実体
パラメータ実体は、DTD内でのみ参照され複数の要素のまとまりや属性のまとまり等に 別名を付けて定義します。
例えば、body要素で宣言された%block;は、次のように定義されています。
<!ENTITY % block
"P | %heading; | %list; | %preformatted; | DL | DIV | NOSCRIPT |
BLOCKQUOTE | FORM | HR | TABLE | FIELDSET | ADDRESS">
上記のように、body要素で宣言された%block;を展開すると%block;には、p要素やdl,div,…等が含まれていると 定義されています。 また、その先にには%heading;のように別の場所に宣言されている要素も含まれます。
<!ENTITY % heading "H1|H2|H3|H4|H5|H6">
%heading;のような定義をパラメータ実体といいます。
属性宣言
DTDでは、各要素の属性を<!ATTLIST・・・>で定義します。。
<!ATTLIST 要素名 属性名 データ型または値 デフォルト値または属性の要求>
例えば、img要素の場合、次のように定義されます。
<!ATTLIST IMG
%attrs; -- %coreattrs, %i18n, %events --
src %URI; #REQUIRED -- URI of image to embed --
alt %Text; #REQUIRED -- short description --
longdesc %URI; #IMPLIED -- link to long description(complements alt) --
name CDATA #IMPLIED -- name of image for scripting --
height %Length; #IMPLIED -- override height --
width %Length; #IMPLIED -- override width --
usemap %URI; #IMPLIED -- use client-side image map --
ismap (ismap) #IMPLIED -- use server-side image map --
>
%attrs;は、パラメータ実体として定義されDTDの中で確認できます。 srcとalt属性は、必須(#REQUIRED)として定義されています。 ismap属性は、値としてismapのみ持つことができます。
以上のように、各要素の属性はDTDの中で <!ATTLIST・・・> で定義されます。