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

       

Декларация внешней сущности




[75] ExternalID    ::=    'SYSTEM'
| 'PUBLIC'
[76]    NDataDecl    ::=    'NDATA'

Если в декларации присутствует , то это общая . В противном случае, сущность является разобранной.

Ограничение действительности: Декларированная нотация

должно соответствовать декларированному имени .

[Определение: Литерал называется системным идентификатором сущности. Он представляет собой ссылку URI (чье определение было дано в , а затем дополнено в ), которую необходимо разобрать, чтобы получить данные на вход XML процессора и сформировать текст замены для указанной сущности.] Если идентификатор фрагмента (начинающийся с символа #) окажется в составе системного идентификатора, фиксируется ошибка. Для обработки относительных адресов URI в качестве базового берется адрес того источника, в котором была обнаружена декларация данной сущности, если обратное не было указано в ином источнике информации помимо данной спецификация (например, когда специальный тип XML элемента был определен в отдельном DTD или инструкция обработки определена спецификацией конкретного приложения). Таким образом, URI может вычисляться относительно , относительно сущности, содержащей , или какой-либо другой .

Ссылки URI требуют кодирования и маскирования (escaping) определенных символов. Среди запрещенных символов числятся все не-ASCII символы, а также исключенные символы, перечисленные в главе 2.4 документа . Исключение составляют символы решетки (#) и процента (%), а также символы квадратных скобок, разрешенные документом . Запрещенные символы необходимо маскировать следующим образом:

Каждый из запрещенных символов преобразуется в один или два байта в кодировке UTF-8 .

Все октеты, относящиеся к запрещенным символам, маскируются с помощью соответствующего механизма URI (то есть преобразуются в формат %HH, где HH - шестнадцатеричное представление для соответствующего байтового значения).

Исходный символ замещается полученной последовательностью символов.


[Определение: Помимо системного, внешний идентификатор может включать также и публичный идентификатор.] XML процессор, пытающийся извлечь содержимое сущности, может воспользоваться публичным идентификатором с тем, чтобы сгенерировать альтернативную ссылку URI. Если процессор не сможет сделать этого, он должен воспользоваться ссылкой URI, указанной в системном литерале. Перед проверкой все сочетания пробельных символов в публичном идентификаторе должны быть нормализированы, т.е. заменены на одиночные символы пробела (#x20), начальные и завершающие пробельные символы должны быть удалены.

Примеры деклараций внешней сущности:

<!ENTITY open-hatch SYSTEM "http://www.textuality.com/boilerplate/OpenHatch.xml"> <!ENTITY open-hatch PUBLIC "-//Textuality//TEXT Standard open-hatch boilerplate//EN" "http://www.textuality.com/boilerplate/OpenHatch.xml"> <!ENTITY hatch-pic SYSTEM "../grafix/OpenHatch.gif" NDATA gif >

Содержание раздела