● 概要
XML文書では実体参照を自分で宣言して使うことができます。
あるXML文書の中で、実体参照を宣言しその文書内で参照する場合の書き方のまとめです。
● 書き方
1. 実体参照を使いたいXML文書のルートの要素を確認します。
2. そのルート要素名を入れた次のような記述を、XML宣言とルート要素開始タグの間に置きます。
<!DOCTYPE ルート要素名 [
<!ENTITY 参照名 "置換文字列">
]>
3. ルート要素の内部で次のように参照します。
&参照名;
● 例
ここではInubuyo Filterの設定ファイルを例に説明します。
このXMLは次のような内容です。
<?xml version="1.0" encoding="UTF-8" ?>
<regrex>
<start>
<line value="犬を猫に変えました" />
<line value="ポチをタマに変えました" />
</start>
<replace before="犬" after="猫" />
<replace before="ポチ" after="タマ" />
</regrex>
このXMLには「タマ」という文字列が2箇所に現れているので、
これを「&cname; 」という実体参照に置き換えてみましょう。
この設定ファイルのルート要素名は「regrex」です。
挿入する宣言は次のようになります。
<!DOCTYPE regrex [
<!ENTITY cname "タマ">
]>
文書全体では次のようになります。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE regrex [
<!ENTITY cname "タマ">
]>
<regrex>
<start>
<line value="犬を猫に変えました" />
<line value="ポチを&cname;に変えました" />
</start>
<replace before="犬" after="猫" />
<replace before="ポチ" after="&cname;" />
</regrex>
さらに、「ポチ」を「&dname;」とするには宣言を
<!DOCTYPE regrex [
<!ENTITY cname "タマ">
<!ENTITY dname "ポチ">
]>
のように追加すればOKです。
● 動作
以上のようにXML文書の一部を実体参照に置き換えても、
XMLパーサーが処理した後の内容は全く同じになります。
Inubuyo FilterではXMLパーサーとしてSAXを使っていて、実体参照を使ってもSAXが適切に処理してくれます。