DTDは、HTMLなどSGMLを基にする言語にどのような要素があって、どんな条件で 使うことができるかといったルールを定義したものです。
DTDでは、文書中で使用する要素がどのような構造かを<!ELEMENT・・・>で定義します。
<!ELEMENT 要素名 開始タグ要求 終了タグ要求 (内容モデル) -- コメント -->
例えば、address要素の場合、次のように定義されます。
<!ELEMENT ADDRESS - - (%inline;)* -- information on author -->
定義項目 | 意味 |
---|---|
要素名 | address |
タグの要求 | 開始タグ省略不可(-),終了タグ省略不可(-) |
内容モデル | %inline;が現れないか、任意回数出現しなければならない。 |
コメント | information on author |
内容モデル | 意味 |
---|---|
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・・・>で定義されます。
Copyright 1997-2010 BBB All rights reserved.