DTD において,要素と並行してなされるのがその属性の定義である。属性の定義では,値の種類や省略の可否が問題になる。
属性の定義は,
<!ATTLIST ... >
で行われる。ATTLIST に続けて,属性を定義する要素の名前が入り,それから属性のリストが書かれる。
<!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 -- >
HTML 4 では,ほとんどの要素にある属性は一括で定義されていて,パラメータ実体参照されている。“%coreattrs;”は ID や STYLE などの基本的なもの,“%i18n;”は国際化(言語)に関するもの(“i18n”は internationalization の略;i と n の間に 18 字),“%events;”は基本的なイベント属性である。これら 3 つは“%attrs;”でまとめて参照される。上の <IMG> の属性の定義では,%attrs; が展開される。
それで,属性リストの書かれ方であるが,まずは属性名であることは説明するまでもないだろう。続いては与えられる値やその種類である。キーワードを与えるもの(列挙型:実はこれが正しい用語である)は (A | B | C | ...) のかたちで候補が示される。値の種類はパラメータ実体参照で表されていることが多いが,結局同じ値に置き換わることもある。同じデータ型だと言われていても,仕様書によってその詳細が定められることがほとんどである。
次に書かれるのは属性の省略についてである。既定値が明示的に指定されることもある。
<!ATTLIST COL -- column groups and properties -- %attrs; -- %coreattrs, %i18n, %events -- span NUMBER 1 -- COL attributes affect N columns -- width %MultiLength; #IMPLIED -- column width specification -- %cellhalign; -- horizontal alignment in cells -- %cellvalign; -- vertical alignment in cells -- >
<COL> の SPAN 属性の既定値は“1”であると示されている。HTML の DTD では,既定値ではなくキーワード #IMPLIED や #REQUIRED が入ることが多い。
#IMPLIED の場合の既定値は明示されない。UA が定めるものであったり,状況によって決まることもあったりする。明示できないような値が既定値となる場合は,#IMPLIED が書かれた上で規格書で既定値が定められることもある。HTML においては,属性値としてのキーワードが属性名と同じで,かつ 1 つしか候補がなく,#IMPLIED が書かれたものはブール値を与える属性となり,一般に属性値のみを与えることになる。さきほどの <IMG> の ISMAP 属性はブール値を与える属性であることを思いだそう。
#REQUIRED では属性は必須で,必ず与えなくてはならない。
HTML の DTD では,前述したように,値の意味的な種類を区別するために,同じデータタイプに,パラメータ実体参照によってさまざまな別名を与えている。以下に,よく現れるものを掲げておく。
パラメータ実体 | 参照されるデータタイプ | 与えられている“意味” |
---|---|---|
ContentType | CDATA | MIME タイプ。 |
ContentTypes | CDATA | MIME タイプ(複数可)。カンマで区切る。 |
URI | CDATA | URI。 |
Script | CDATA | スクリプト。 |
StyleSheet | CDATA | スタイルシート。 |
Length | CDATA | 長さの指定。単位を伴わないとピクセルとして,パーセント記号「%」を伴う百分率として長さを与える。 |
MultiLength | CDATA | 長さの指定。ピクセル,百分率のほかに,アスタリスク「*」を伴う比例配分を用いても長さを与えられる。 |
MultiLengths | CDATA | 複数の長さの指定。MultiLength の値をカンマで区切って与える。 |
Pixels | CDATA | ピクセルを単位とした長さの指定。単位記号は伴わない。 |
Text | CDATA | テキスト。人間に意味のある文字列。 |
以上が DTD の読み方の基本である。まだ細かい点もあるのだが,まずは DTD をご覧になって,“どんな定義がされているのか”つかんでいただきたい。HTML の理解の助けになるはずである。DTD をもっと詳しく読みたいというのであれば,SGML に関する書籍を参照されたい。