附属書D 実体参照及び文字参照の展開

この附属書は,"4.4 XMLプロセサによる実体及び参照の扱い"で規定されている,実体参照及び文字参照を認識し展開する一連の流れを例によって示す。

DTDが,次の宣言を含む場合を考える。

<!ENTITY example "<p>An ampersand (&#38;#38;) may be escaped
numerically (&#38;#38;#38;) or with a general entity
(&amp;amp;).</p>" >

XMLプロセサは,実体の宣言を構文解析した時点で文字参照を認識し,これを解決する。実体"example"の値として,次の文字列を保存する。

<p>An ampersand (&#38;) may be escaped
numerically (&#38;#38;) or with a general entity
(&amp;amp;).</p>

文書内で"&example;"を参照すると,このテキストは再び構文解析される。このとき,要素"p"の開始タグ及び終了タグを認識し,三つの参照を認識し展開する。その結果,要素"p"は,次の内容(すべてデータであって,区切り子又はマーク付けは存在しない。)をもつ。

An ampersand (&) may be escaped
numerically (&#38;) or with a general entity
(&amp;).

規則及びその効果をより詳細に示すため,さらに複雑な例を示す。次の例で,行番号は参照の便宜のためだけに付ける。

1 <?xml version='1.0'?>
2 <!DOCTYPE test [
3 <!ELEMENT test (#PCDATA) >
4 <!ENTITY % xx '&#37;zz;'>
5 <!ENTITY % zz '&#60;!ENTITY tricky "error-prone" >' >
6 %xx;
7 ]>
8 <test>This sample shows a &tricky; method.</test>

これを処理すると,次のとおりとなる。