この附属書は,実体参照及び文字参照を認識し,展開する,一連の流れを,例に使って示す。
DTDが,次の宣言を含む場合を考える。
<!ENTITY example "<p>An ampersand (&#38;) may be escaped |
XMLプロセサは,実体の宣言を構文解析した時点で文字参照を認識し,これを解決する。実体"example
"の値として,次の文字列を保存する。
<p>An ampersand (&) may be escaped |
文書内で"&example;
"を参照すると,このテキストは,再び構文解析される。このとき,要素"p
"の開始タグ及び終了タグを認識し,三つの参照を認識し展開する。その結果,要素"p
"は,次の内容をもつ(すべてデータとし,区切り子又はマーク付けは存在しない。)。
An ampersand (&) may be escaped |
規則及びその効果をより詳細に示すため,さらに複雑な例を示す。次の例で,行番号は,参照の便宜のためだけに付ける。
1 <?xml version='1.0'?> |
これを処理すると,次のとおりとなる。
xx
"を,シンボルテーブルに"%zz;
"という値とともに保存する。置換テキストを再び走査することはないので,パラメタ実体"zz
"への参照は認識しない("zz
"は,まだ宣言されていないので,走査されれば,エラーとなる。)。<
"を直ちに展開し,パラメタ実体"zz
"を"<!ENTITY tricky "error-prone" >
"という置換テキストとともに保存する。これは,整形式の実体宣言とする。xx
"への参照を認識し,"xx
"の置換テキスト(すなわち,"%zz;
")を構文解析する。"zz
"への参照を続いて認識し,置換テキスト("<!ENTITY tricky "error-prone" >
")を構文解析する。一般実体"tricky
"は,この時点では,宣言されており,その置換テキストは,"error-prone
"とする。 tricky
"への参照を認識し,展開する。要素"test
"の完全な内容は,次の(内容をそれ自体表現する。)文字列となる。つまり,This sample shows a error-prone method.