Расширяемый язык разметки



         

D Обработка ссылок на сущность и символ (Пояснения к спецификации)


В данном приложении содержатся некоторые примеры, иллюстрирующие последовательность распознавания и обработки ссылок на сущность и символ, которая была определена в главе .

Если 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>

В результате получается следующий сценарий:

в строке 4 ссылка на символ с кодом 37 обрабатывается сразу, и сущность параметра "xx" помещается в таблицу символов со значением "%zz;". И поскольку текст замены повторно не просматривается, ссылка на сущность параметра "zz" обнаружена не будет. (Если же это здесь произойдет, то будет зафиксирована ошибка, поскольку сущность "zz" еще не была декларирована.)




Содержание  Назад  Вперед