実体宣言の記述方法

文書型宣言の中には要素型宣言や属性リスト宣言の他に実体宣言を記述することができます。実体宣言とは特定の文字列やファイルに対して実体名を定義することです。 XML 文書の中で繰り返し使われるようなテキストをそのまま記述する代わりに実体名を使って記述することができます。ここでは実体宣言の記述方法について解説します。

(Last modified: )

実体宣言の形式

実体宣言は次のような形式となります。

<!ENTITY 実体名 "文字列">

実体宣言で記述された実体名は、 XML 文書内で &実体名; と記述することで参照することができるようになります。

なお実体名に使用できる文字の種類は要素名や属性名で使用できる文字と同じで次のようなルールがあります。数字から始まる値は指定できません。

1文字目:
アルファベット、漢字、ひらがな、カタカナ、アンダーバー(_)、セミコロン(:)

2文字目以降:
1文字目で使用できる文字に加えて、数字、ドット(.)、ハイフン(-)

それでは実体宣言の記述方法と XML 文書の中から実体を参照する方法の記述の仕方について見ていきます。

文字列と実体名を結びつける

最初に文字列に対して実体名を結びつける方法です。書式は次のとおりです。

<!ENTITY 実体名 "文字列">

例えば "東京都港区赤坂4丁目" という文字列に対して「住所」という実体名を宣言する場合は次のように記述します。

<!ENTITY 住所 "東京都港区赤坂4丁目">

実体制限を記述する場所は要素型宣言や属性リスト宣言と同じく文書型宣言の中に記述します。次の XML 文書を見てください。

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE 在庫データ[
    <!ELEMENT 在庫データ (商品+)>
    <!ELEMENT 商品 (名前, 保管場所)>
    <!ELEMENT 名前 (#PCDATA)>
    <!ELEMENT 保管場所 (#PCDATA)>
    <!ENTITY 住所 "東京都港区赤坂4丁目">
]>

<在庫データ>
    <商品>
        <名前>自転車</名前>
        <保管場所>&住所;</保管場所>
    </商品>
    <商品>
        <名前>花瓶</名前>
        <保管場所>&住所;</保管場所>
    </商品>
</在庫データ>

文書型宣言の中の中で実体名として「住所」を宣言しています。そして XML 文書の中で「&住所;」として参照しています。この XML ファイルをブラウザで表示してみると次のように表示されます。

文字列と実体名を結びつける(1)

「&住所;」と記述したところが実体である "東京都港区赤坂4丁目" に置き換わって表示されているのが確認できます。

ファイルと実体名を結びつける

また文字列だけでなく別に作成したファイルに対して実体名を定義することもできます。 XML 文書の中で実体名が記述されると、実体であるファイルに記述されている内容に置き換えられます。ファイルを指定する場合は次のような形式となります。

<!ENTITY 実体名 SYSTEM "ファイルのURI">

ファイルの URI は、実体であるファイルと参照する XML ファイルが同じサーバに設置されている場合は相対パスで記述できます。

<!ENTITY 追加データ SYSTEM "newdata.xml">

別のサーバに設置されている場合は次のような形式で記述できます。

<!ENTITY 追加データ SYSTEM "https://www.example.jp/file/newdata.xml">

実体制限を記述する場所は要素型宣言や属性リスト宣言と同じく文書型宣言の中に記述します。次の XML 文書を見てください。

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE 在庫データ[
    <!ELEMENT 在庫データ (商品+)>
    <!ELEMENT 商品 (名前, 色)>
    <!ELEMENT 名前 (#PCDATA)>
    <!ELEMENT 色 (#PCDATA)>
    <!ENTITY 追加データ SYSTEM "newdata.xml">
]>

<在庫データ>
    <商品>
        <名前>自転車</名前>
        <色>黒</色>
    </商品>
    <商品>
        <名前>花瓶</名前>
        <色>白</色>
    </商品>
    &追加データ;
</在庫データ>

文書型宣言の中の中で実体名として「追加データ」を宣言しています。そして XML 文書の中で「&追加データ;」として参照しています。そして別ファイルとして次のような内容の XML ファイルを先ほどのファイルと同じディレクトリに "newdata.xml" という名前で設置しました。

<?xml version="1.0" encoding="UTF-8" ?>

<商品>
    <名前>カーテン</名前>
    <色>黄色</色>
</商品>

元の XML ファイルをブラウザで表示してみると次のように表示されます。

ファイルと実体名を結びつける(1)

「&追加データ;」と記述したところが実体であるファイルの中身に置き換わって表示されると思われたのですが、何も表示されませんでした。原因は現時点では不明なので分かり次第更新します。

-- --

実体宣言の記述方法について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。