WWW INFOMATION
XML top >>DTD仕様詳細 属性リスト宣言

属性リスト宣言 (Attribute List Declaration)

 属性リスト宣言とは、各属性がどのように定義されるかを示すものです。
仕様は以下のようになります。
<!ATTLIST 要素名 属性名 属性の型 "デフォルト値" >

下の定義例は、A要素に必ずBという属性を含むことを意味しています。(属性の型、デフォルト値については、下で説明。)
<!ATTLIST A B CDATA #REQIRED >

 一つの要素に複数の属性を持つ場合は、以下の仕様となります。
<!ATTLIST 要素名 属性名 属性の型 "デフォルト値"  
  属性名 属性の型 "デフォルト値"
属性名 属性の型 "デフォルト値"
属性名 属性の型 "デフォルト値"
・・・・・ >

 下の例は、要素AにB,C,Dという3つの属性が付随することを意味します。(Bは必須定義、C、Dは任意定義の属性となります。)

<!ATTLIST A B CDATA #REQIRED
         C CDATA #IMPLIED
         D CDATA #IMPLIED
 >

・属性の型

 属性の型に指定できる候補は以下の通りとなっています。(一般的にはCDATA以外使用することはありません。)
候補 内容
CDATA 任意の文字を属性値に記述できる。
NMTOKEN 名前に使用可能な文字を属性値に記述できる。
(?などの予約語は使用できない。)
NMTOKENS NMTOKENの複数属性定義用。
ID IDREF、IDREFSで参照するための属性値を設定できる。
IDREF IDで指定された属性値と同じ属性値を設定することにより、ID設定の要素の内容を参照できる。
IDREFS IDREFの複数定義用。
ENTITY 属性の値にエンティティ参照を使用できます。
ENTITIES ENTITYの複数定義用です。

 各属性の型を使用したサンプルを以下に示します。

・CDATA
<?xml version="1.0" ?>

<!DOCTYPE A [ >

<!ELEMENT A EMPTY >
<!ATTLIST A B CDATA #REQIRED >

]>

<A B="属性の値は何でも良い。"/>


・NMTOKEN、NMTOKENS
<?xml version="1.0" ?>

<!DOCTYPE A [ >

<!ELEMENT A EMPTY >
<!ATTLIST A B NMTOKEN #IMPLIED 
                  C NMTOKENS #IMPLIED
>

]>

<A B="属性の値は名前に指定できるもののみ" C="100 200 300" />
<!--
NMTOKENSは、半角スペースを区切りとして、複数の属性値を定義できることを意味する。
-->

・ID、IDREF、IDRES
<?xml version="1.0" ?>

<!DOCTYPE A [ >

<!ELEMENT A (B,C)* >
<!ELEMENT B (#PCDATA)>
<!ELEMENT C EMPTY>
<!ATTLIST B D id #REQUIRED >
<!ATTLIST C E IDREFS #REQUIRED >

]>

<A>
  <B D="1">データ1</B>
  <B D="2">データ2</B>

  <C E="1"/><!-- このEの属性値は、"データ1"と等しい -->
  <C E="2"/><!-- このEの属性値は、"データ2"と等しい -->

</A>

※ID参照はIEでは対応していません。
※ID系のデフォルト値は"#REQUIRED"もしくは、"#IMPLIED"を指定しなくてはいけない。

・ENTITY、ENTITIES

<?xml version="1.0" ?>

<!DOCTYPE A [ >

<!ELEMENT A (B)* >
<!ELEMENT B EMPTY>
<!ATTLIST B C ENTITY #REQUIRED>

<!ENTITY S "世界のXML">

]>

<A>
 <B C="&S;"/> <!-- C="世界のXML"と書いたのと等しい -->
</A>

※EMPTYはIEでは対応していません。

・デフォルト値

 当該属性の記述が必須であるか、省略が可能であるか、省略された場合はデフォルト値を使用するかどうかを示します。

デフォルト値  
#REQUIRED 必須定義
#IMPLIED 省略可能
#FIXED + ダブルクォーテーションで囲まれた値 必ずダブルクォーテーションで囲まれた値が指定されなければいけない。
ダブルクォーテーションで囲まれた値 属性の記述が省略された場合、属性が記述されたものとして使用する値。

 以下記述例を示します。
<?xml version="1.0" ?>

<!DOCTYPE A [ >

<!ELEMENT A (B,C,D,E)* >

<!ELEMENT B EMPTY>
<!ATTLIST B f CDATA #REQUIRED>

<!ELEMENT C EMPTY>
<!ATTLIST C G CDATA #IMPLIED>

<!ELEMENT D EMPTY>
<!ATTLIST D H CDATA #FIXED "0001" >

<!ELEMENT E EMPTY>
<!ATTLIST E I CDATA "0001" >

]>

<A>
 <B f="AttributeData"/> <!-- 右の定義は正しい -->
 <B/> <!-- 右の定義は誤り(必須なのに属性定義がない) -->

 <C G="AttributeData"/>  <!-- 右の定義は正しい -->
 <C/>  <!-- 右の定義は正しい(省略されても良い) -->

 <D H="0001"/>  <!-- 右の定義は正しい -->
 <D H="0002"/>  <!-- 右の定義は誤り(FIXEDに定義された値と異なる。) -->

 <E I="0005"/>  <!-- 右の定義は正しい。 -->
 <E/>  <!-- 右の定義は正しい。(省略されたIの値は0001になる) -->

</A>

戻る   進む