ENTITY

ENTITY ステートメントは、DTD 内でエンティティを定義するのに使用されます。これは DTD に関連付けられた XML ドキュメントおよび DTD 自体の両方で使用されます。ENTITY は XML ドキュメント内に配置する省略形のエントリを提供します。省略名は名前パラメータに指定するものです。ENTITY は、情報の繰り返しや別々のファイルに保存される可能性のある大きなテキスト ブロック用に非常に便利です。XML ドキュメント内で省略名には「;」が続きます (&省略名;)。

DTD および XML ファイル内で使用される ENTITY の例は次のとおりです。

longtext.txt

longtext.txt の内容を次に示します。

<definition>ATTLIST(attribute list) Declares a list of XML attributes. These attributes are qualified by name, data type, implied default values, and the name of any elements that permit their use.

</definition>

dtd_chunk.dtd

<!ELEMENT list >
<!ATTLIST list list_type (ul | ol)>

sample.dtd

<?xml version="1.0" standalone="no" ?>
<!DOCTYPE dtd_sample[
<!ELEMENT file_info>
<!ATTLIST file_info name #REQUIRED>

<!ENTITY xml "eXtensible Markup Language">
<!ENTITY attlist_def SYSTEM "longtext.txt">
<!ENTITY % lists "(ol | ul)">
<!ENTITY % dtd_chunk SYSTEM "chunk.dtd">
<!ENTITY file_pic SYSTEM "file.jpg" NDATA jpg>
<!NOTATION jpg SYSTEM "image/jpeg">
%dtd_chunk;
<!ELEMENT icon EMPTY>
<!ATTLIST icon source ENTITY #REQUIRED>
<!ATTLIST icon list_type &lists;>
]>

DTD ドキュメントを解析すると、次の結果が示されます。この置換はメモリ内でだけ行われます。パーサーはファイルを実際には変更しません。

<?xml version="1.0" standalone="no" ?>
<!DOCTYPE dtd_sample[
<!ELEMENT file_info>
<!ATTLIST file_info name #REQUIRED>
<!ENTITY xml "eXtensible Markup Language">
<!ENTITY attlist_def SYSTEM "longtext.txt">

<!ENTITY % dtd_chunk SYSTEM "chunk.dtd">
<!ENTITY file_pic SYSTEM "file.jpg" NDATA jpg>
<!NOTATION jpg SYSTEM "image/jpeg">
<!ELEMENT list >
<!ATTLIST list list_type (ul | ol)>
<!ELEMENT icon EMPTY>
<!ATTLIST icon source ENTITY #REQUIRED>
<!ATTLIST icon list_type (ol | ul)>
]>

sample.xml

<?xml version="1.0" standalone="no" ?>
<heading>Definition list for &xml; attributes used in DTD files.</heading>
    <file_info name="topfile">
        <icon source="file_pic"/>
        <list list_type="ul"/>
        %attlist_def
    </file_info>
<footer>Conclusion of definition list for &xml; attributes.</footer>

解析された XML ドキュメントの結果。

XML ドキュメントを解析すると、次の結果が示されます。

Definition list for eXtensible Markup Language attributes used in DTD files.

top file

ATTLIST(attribute list) Declares a list of XML attributes. These attributes are qualified by name, data type, implied default values, and the name of any elements that permit their use.

Conclusion of definition list for eXtensible Markup Language attributes.

構文

<!ENTITY [%] name [SYSTEM|PUBLIC publicID] resource [NDATA notation] >

パラメータ

  • name
    エンティティの名前。すべてのエンティティの定義において必須です。
  • publicID
    エンティティの PUBLIC 識別子。宣言に PUBLIC キーワードが使用されている場合のみ必須です。
  • resource
    エンティティの値。すべてのエンティティの定義において必須です。内部エンティティの場合、これは解析され展開されたテキスト文字列です。外部エンティティの場合は、ファイル名やファイルの種類など、外部エンティティを識別する URI (Uniform Resource Identifier) です。
  • notation
    NOTATION ステートメントを使用して DTD 内の他の場所に宣言された表記法の名前です。XML 以外のデータのキーワード (NDATA) を使用して未解析のエンティティを定義する場合のみ必須です。

一般エンティティ (解析対象内部)

以下は、DTD を使用する XML ドキュメント内で &oumlaut; および &xml; として参照可能な内部一般エンティティを宣言します。

<!ENTITY oumlaut "&#38;#246;">

サンプル テキストの置き換え例は次のとおりです。

<!ENTITY xml "eXtensible Markup Language">

XML パーサーは、生のエンティティ値 (&#38;#246;) を展開して内部 XML ドキュメントの一部にします。最終解析済みドキュメントの出力では、"&#38;" 値が文字 "&" を作成するのに使用され、XML ドキュメントでは値が "&#246;" として表示されます。

パラメータ エンティティ (解析対象内部)

以下では、DTD 内の他の場所で %lists; として参照可能な内部パラメータ エンティティを宣言します。これによって、XHTML リスト要素、<ul> および <ol> への繰り返し参照が可能になります。

<!ENTITY % lists "ul | ol">

未解析の外部エンティティ

以下では、未解析の外部エンティティを宣言します。この外部エンティティによって、XML ドキュメントに含める XML 以外のデータ (この場合、GIF 形式のイメージ ファイル) へのリンクをエンコードできます。

<!ENTITY file_pic SYSTEM "file.jpg" NDATA jpg>

この場合、NDATA キーワードを使用するには、この宣言と組み合わせて "jpg" と呼ばれる表記法の NOTATION 宣言も使用する必要があります。詳細については、「NOTATION」を参照してください。

解説

ENTITY はさまざまな方法で使用できます。エンティティを定義して使用する方法が不明な場合は、DTD 内で宣言したエンティティのさまざまな使用条件をよりよく理解するために、以下の質問が役に立つことがあります。

  • ドキュメントの存続期間中に変更される可能性のある大きなテキスト文字列を単に省略するために、エンティティの値を使用するのか? その場合は、一般エンティティを使用します。

  • ファイル名や MIME 型のように、DTD または XML ドキュメントの外部の何か (つまり、外部エンティティ) へのポインタとしてエンティティを使用するのか? この場合は、未解析の外部エンティティを使用します。

  • エンティティの URI 値を解析対象とする (つまり、それを使用する DTD または XML ドキュメントの一部として展開される) のか、あるいは未解析のままにする (つまり、XML パーサーが最終解析済みドキュメントからその内容を除外する) のか?

  • 解析対象とする場合、展開されたエンティティの内容を、その DTD を使用する XML ドキュメントの一部にするか (つまり、一般エンティティ)、あるいは DTD 自体の一部にするか (つまり、パラメータ エンティティ)?

参照

概念

ATTLIST (属性リスト)
ELEMENT
NOTATION