Нормализация значения атрибута
Перед передачей значения атрибута приложению или проверкой его корректности XML процессор должен выполнить нормализацию полученного значения атрибута по описанному далее алгоритму либо как-нибудь иначе, например передав это значение отдельному приложению, реализующему указанный алгоритм.
Все концы строк при выводе должны быть приведены к #xA, как было описано в главе , поэтому остальная часть данного алгоритма оперирует текстом, уже нормализованным подобным образом.
Начинается с нормализованного значения, состоящего из пустой строки.
Для каждого символа, ссылки на сущность и ссылки на символ в ненормализованном значении атрибута, с первого до последнего, должны выполняться следующие действия:
Для ссылки на символ к нормализованное значение поместить символ, на который делалась ссылка.
Для ссылки на сущность над текстом замены для указанной сущности рекурсивно выполнять третий шаг обсуждаемого алгоритма.
В случае пробельного символа (#x20, #xD, #xA, #x9) в нормализованное значение помещать символ пробела (#x20).
Остальные символы просто помещать в нормализованное значение.
Если тип атрибута - не CDATA, то следующим шагом XML процессор должен обработать нормализованное значение атрибута, отбросив начальные и заключительные символы пробела (#x20), а также заменив любую встреченную последовательность пробелов (#x20) одним символом пробела (#x20).
Заметим, что если ненормализованное значение атрибута имело ссылку на пробельный символ, иной нежели символ пробела (#x20), то его нормализованное значение будет содержать сам символ, на который делалась ссылка (т.е. #xD, #xA или #x9). Это иной случай, чем когда в ненормализованном значении атрибута обнаружен пробельный символ (а не просто ссылка на него), который в нормализованном значении будет заменен символом пробела (#x20), а также когда в ненормализованном значении имеется ссылка на сущность, чей текст замены содержит пробельный символ, который в ходе рекурсивной обработки тоже будет заменен в нормализованном значении пробелом (#x20).
Все атрибуты, для которых не было представлено декларации, должна обрабатываться непроверяющим процессором так, как если бы были декларированы CDATA.
Далее следуют примеры нормализации атрибутов. Даны следующие декларации:
<!ENTITY d "
"> <!ENTITY a "
"> <!ENTITY da "
"> |
a=" xyz" |
a="&d;&d;A&a;&a;B&da;" | A #x20 B | #x20 #x20 A #x20 #x20 B #x20 #x20 | |
|