17. 属性リスト(DTD編)
これまでは要素を中心に勉強してきたが、その中のいくつかでは属性を指定している。例えばhtml要素では、 xmlns属性、xml:lang属性、lang属性を指定した。
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
属性の記述方法をもう一度復習しておく。属性は属性名と属性値を等号で結び、属性値は必ず2重引用符で囲んで記述する。 また、属性を複数記述する場合は、各属性を1つ以上の空白文字で区切って記述する。
属性名="属性値"
この属性に関するルールもDTDに定められている。例にhtml要素のDTDを抜粋してみる。
<!ENTITY % LanguageCode "NMTOKEN">
<!ENTITY % URI "CDATA">
<!ENTITY % i18n
"lang %LanguageCode; #IMPLIED
xml:lang %LanguageCode; #IMPLIED
dir (ltr|rtl) #IMPLIED"
>
<!ELEMENT html (head, body)>
<!ATTLIST html
%i18n;
id ID #IMPLIED
xmlns %URI; #FIXED 'http://www.w3.org/1999/xhtml'
>
このとき%i18n;の部分は、パラメータ実体参照なので要素の場合と同様に置換して考えると次のように書くことができる。
<!ATTLIST html
lang NMTOKEN #IMPLIED
xml:lang NMTOKEN #IMPLIED
dir (ltr|rtl) #IMPLIED
id ID #IMPLIED
xmlns CDATA #FIXED 'http://www.w3.org/1999/xhtml'
>
この<!ATTLIST・・・>の部分が属性に関するもので属性リスト宣言と呼ぶ。 属性リスト宣言の一般形式は、次のようになる。
<!ATTLIST 要素名 属性名 属性型 デフォルト指定>
属性を複数宣言する場合は、「属性名、属性型、デフォルト指定」の部分を空白文字で区切り複数列挙する。
要素名
属性リスト宣言の対象となる要素名が記述されている。上記の場合、対象はhtml要素であることが分かる。
属性名
指定することができる属性名が記述されている。つまり、ここに記述されていない属性をXHTML(HTML)で記述することはできない。 上記の場合、html要素に指定できる属性名は、lang、xml:lang、dir、id、xmlnsであることが分かる。
属性型
属性型の主なものを以下に示す。
- CDATA
- 文字列型であり、空白を含む様々な文字を記述することができる。 上記の例では、xmlns属性が、この型である。
- ID
- 1つのページ内で同じ値が出てこない、つまり一意に識別できる値を記述する。 なお、第1文字目に数字を記述することはできない。 上記の例では、id属性が、この型である。
- NMTOKEN
- 空白を含まない文字列、いわゆる名前(単語)である。 これらの属性の多くはコメントで、使用すべき仕様が示されている。 上記の例では、lang属性、xml:lang属性が、この型であり、 使用する文字列の仕様がRFC3066のものを使用することがコメントされている。
- 列挙型
- 列挙型は、属性値に指定すべき文字列を列挙したものである。 上記の例では、dir属性が、この型である。つまり属性値には「ltr」、「rtl」のいずれかを指定することになる。
デフォルト指定
デフォルト指定では、属性が任意のものか必須のものか、また任意である場合の既定値に関する情報を示している。
- #IMPLIED
- #IMPLIEDが指定された属性は、その指定が任意であることを意味している。 つまり、必要に応じて記述したり、省略することができる属性になる。
- #REQUIRED
- #REQUIREDが指定された属性は、その指定が必須であることを意味している。 つまり、その属性を必ず記述しなければならないことを意味する。
- #FIXED
- #FIXEDが指定された属性は、その指定は任意であるが、指定する場合には、 後続する引用符で囲まれた文字列と属性値が一致しなければならないことを意味する。
- 文字列
- 2重引用符で囲まれた文字列が記述されている場合、その属性を省略した時の既定値が、 その文字列で記述された値になることを意味する。
以上のことから、先に例として取り上げたhtml要素の属性の意味は次のようになる。
- lang属性、xml:lang属性
- 省略可能。言語コード(RFC3066)を指定する。日本語の場合、「ja」を指定する。
- dir
- 省略可能。書字方向(左から右へ書く、右から左へ書く)を指定する。 日本語の場合、左から右へ書く言語なので、「ltr」を指定する。
- id属性
- 省略可能。ページを識別一意な文字列を指定する。
- xmlns属性
- 省略可能。デフォルト名前空間の指定を行う。 指定する場合、必ず「http://www.w3.org/1999/xhtml」でなければならい。