DTD用のショートカットを作成及び使用する
これまでに説明してきたエンティティは、それもXML文書のないよう絵使用するテキストを呼び出すためのものでした。このほかにDTDの内部で使うためのショートカットを作成することもできます。この種のエンティティのことを「外部パラメータエンティティ」と呼びます。
1. エンティティに内容を外部ファイル内に作成します。このファイルをテキスト形式で保存します。拡張子は何でも構いません
DTDコード <!ELEMENT picture EMPTY>
<!ATTLIST picture filename CDATA #REQUIRED
X CDATA #REQUIRED
y CDATA #REQUIRED>他のいくつかのDTDでこのコードを使用します。このコードでは、picture要素とその属性を宣言し、pic.dtdという単独のファイルに保存しています。
DTDコード <!ELEMENT outline_specification (floor_chart*)>
<!ELEMENT floor_chart (name+, picture) >
<!ELEMENT name (#PCDATA)>
<!ATTLIST name language (Japanese | Latin) #REQUIRED>
<!ENTITY % full_pic SYSTEM "pic.dtd">picture要素とその属性を宣言する各DTD内で、このエンティティを定義します。
DTDコード <!ELEMENT outline_specification (floor_chart*)>
<!ELEMENT floor_chart (name+, picture) >
<!ELEMENT name (#PCDATA)>
<!ATTLIST name language (Japanese | Latin) #REQUIRED>
<!ENTITY % full_pic SYSTEM "pic.dtd">
%full_picエンティティを定義したら、$full.picと入力してそれを使うことができます。
DTDコード <!ELEMENT outline_specification (floor_chart*)>
<!ELEMENT floor_chart (name+, picture) >
<!ELEMENT name (#PCDATA)>
<!ATTLIST name language (Japanese | Latin) #REQUIRED>
<!ELEMENT picture EMPTY >
<!ATTLIST picture filename CDATA #REQUIRED
X CDATA #REQUIRED
y CDATA #REQUIRED>XMLパーサーはエンティティ参照を関連付けられているファイルの内容に置き換えられます。(このDTDは、パラメータエンティティ参照が実際に置き換えられたときの予想図です。実際にはDTDそのものが物理的に変更されるわけではありません)
2. そのエンティティを使うXML文書のDTD内に <!ENTITY と入力してエンティティ定義を開始します。
3. % と入力します。これは、そのエンティティがDTD用であることを示します。
4. 空白を入力します。
5. abbreviation と入力します。
abbreviationの部分には、エンティティ参照のテキスト部分(そのエンティティを使うために入力するコード)を入力します。
6. SYSTEMと入力します。
これは、この略語がほかの文書内で定義されていることを示します。
または、PUBLIC "name" と入力します。
nameの部分には 、公的に利用できる標準エンティティの正式名を入力します。
7. "entity.url" と入力します。
entity.url の部分には、1.で作成したファイルのURLを入力します。
5. > と入力して定義を終えます。
1. %abbreviation; と入力します。
abbreviationのぶぶんには、上の5.でエンティティを定義するために使用した名前を入力します。
・パラメータエンティティは、DTD内で参照する前に定義しなければなりません。この場合は順序が重要となります。
・内部パラメータエンティティ(内部DTD内)を作成することもできますが、内部サブセットでパラメータエンティティを参照した結果は、完全な宣言となっていなければなりません。宣言の一部分だけを含めることはできないので、あまり用途がありません。
・この方法を使うと、自分で作成したDTDに加えて、ほかの誰かが作成した標準DTDを使うことができます。たとえば、XHTML DTDを参照すれば、自分で手間をかけてこれらを定義しなくても、既に定義されている要素を使うことができます(これらの要素はHTML要素によく似ています)
・DTDは必要なだけいくつでも使用できます。