DTDは、XML文書をある一定の構文に従ってルール付けするためのものです。ここでは属性値のデータ型やデフォルト値などを定義することができる属性リスト宣言について解説します。
カテゴリ | DTD | |
関連要素 | <!ATTLIST> | |
関連記事 | DTDで要素型宣言を定義する | |
「DTDで要素型宣言を定義する」でもご紹介したように、DTD(Document Type Definition)はXML文書において使用することのできる要素や属性の種類、また、その並び(順番)、登場回数などを規定する場合に、コンパクトに構造を表現する手段を提供します。
本稿では、要素型宣言と並んで使用する機会が多い「属性リスト宣言」について、紹介することにしましょう。属性リスト宣言では、属性値のデータ型やデフォルト値、属性の種類などを定義できます。
早速、具体的なサンプルをみてみることにしましょう。
<?xml version="1.0" encoding="Shift_JIS" ?> <!DOCTYPE books [ <!ELEMENT books (book+)> <!ELEMENT book (title,author,published,price,publishDate,description)> <!ELEMENT title (#PCDATA)> <!ELEMENT author (#PCDATA)> <!ELEMENT published (#PCDATA)> <!ELEMENT price (#PCDATA)> <!ELEMENT publishDate (#PCDATA)> <!ELEMENT description (#PCDATA|keyword)*> <!ELEMENT keyword (#PCDATA)> <!ATTLIST book isbn CDATA #REQUIRED> ]> <books name="書籍情報一覧"> <book isbn="ISBN4-7981-0189-3"> <title>10日でおぼえるJSP/サーブレット入門教室</title> <author>Y.Yamada</author> <published>翔泳社</published> <price>2800</price> <publishDate>2002/05/17</publishDate> <description>サーバーサイド技術の雄「<keywd>JSP/サーブレット</keywd>」をJava初心者でもわかる10日間のセミナー形式で紹介。</description> </book> ……中略…… </books>
サンプル中の以下の行に注目してみましょう。
<!ATTLIST book isbn CDATA #REQUIRED>
これは<book>要素に属するisbn属性を宣言する一文です。「CDATA」は属性値のデータ型を、「#REQUIRED」はisbn属性の特性(この場合はisbn属性が必須である)を表します。
属性リスト宣言の一般的な構文は、以下のとおりです。
属性のデータ型、特性としては、それぞれ以下のものを指定することが可能です。
データ型 | 概要 | |
---|---|---|
CDATA | 任意の文字データ | |
ENTITY | 実体参照名(「実体参照を利用して、XML文書を分割管理する」を参照) | |
ENTITIES | 半角スペース区切りのENTITY集合 | |
ID | 要素を一意に判別するための識別子。必ずユニークでなければならない | |
IDREF | ID型の属性に対応する識別子参照。同一のXML文書内に対応するID値が存在しなければならない | |
NMTOKEN | 名前トークン。アルファベット(A-Z)、数字(0-9)、アンダースコア(_)、ハイフン(-)、コロン(:)、ピリオド(.)、ひらがな、カタカナ、漢字から構成される文字列 | |
NMTOKENS | 半角スペース区切りのNMTOKENS集合 | |
候補オプション | パイプ区切りで属性値として指定できる値セットを定義 | |
属性のデータ型 |
NMTOKENSは別名「名前文字」とも呼ばれ、要素名や属性名で使用することのできる文字集合のことをいいます。実際には、1文字目は文字(アルファベット、ひらがな、カタカナ、漢字)、コロン、アンダースコアで始まらなければなりません。2文字目以降は上記表で示した一連の文字を使用することができます。
ただし、名前文字にコロンを使用することは推奨されません。なぜなら、コロン(:)は名前空間との区切り(<xsl:template>のように)を表す文字であり、名前そのものとしてコロンを使用することは大変紛らわしいからです。
また、NMTOKENには「xml〜」で始まる名前は使用できない点にも注意してください。なぜなら、「xml〜」で始まる名前は、今後のXML仕様の拡張のために予約されている文字列だからです。
「#FIXED」が指定された場合、該当する属性が指定された固定値以外をとれないことを意味します。例えば、HTMLにおけるnowrap属性(<td>要素)やselected属性(<option>要素)などは「#FIXED」指定の典型的な例です。
<td nowrap="nowrap">…… <option selected="selected">……
HTMLではこうした「#FIXED」属性は属性値を省略することができましたが、XML文書においては値まできちんと記述しなければならない点に注意してください。
なお、属性リスト宣言では「リスト」とあるように、ある要素に属する複数の属性をまとめて定義することも可能です。その場合、属性名以降を列記して、以下のように記述します。
<!ATTLIST book isbn CDATA #IMPLIED cdrom (yes|no) "no">
Copyright © ITmedia, Inc. All Rights Reserved.