На основную страницу

W3C

Внимание !

Расширяемый Язык Разметки (XML) 1.0 (Четвёртое Издание)

Рекомендации W3C от 16 августа 2006 года, отредактированы 29 сентября 2006

Данная версия:
http://www.w3.org/TR/2006/REC-xml-20060816
Последняя версия:
http://www.w3.org/TR/xml
Предыдущая версия:
http://www.w3.org/TR/2006/PER-xml-20060614
Редакторы:
Tim Bray, Textuality и Netscape <tbray@textuality.com>
Jean Paoli, Microsoft <jeanpa@microsoft.com>
C. M. Sperberg-McQueen, W3C <cmsmcq@w3.org>
Eve Maler, Sun Microsystems, Inc. <eve.maler@east.sun.com>
François Yergeau

Список ошибок данного документа: errata может содержать также некоторые нормативные поправки.

Предыдущий errata данного документа.

См. также раздел переводы.

Этот документ имеется также в нестандартных форматах: XML и XHTML с индикаторами цветного кода.


Резюме

The Extensible Markup Language/Расширяемый Язык Разметки (XML) является поднабором SGML и полностью описан в данном документе. Он создан с целью обеспечения обслуживания, передачи и обработки в WEB исходного SGML теми же способами, которые в данный момент имеются в HTML. XML был разработан для облегчения создания конкретных реализаций и для взаимодействия с SGML и HTML.

Статус данного документа

В этом разделе описан статус данного документа на момент публикации. Другие документы могут переопределять этот документ. Список публикаций W3C и последний вариант этого технического документа находятся в W3C technical reports index на сайте http://www.w3.org/TR/.

Этот документ специфицирует синтаксис, создаваемый путём подразделения существующих широко распространённых международных стандартов обработки текста (Standard Generalized Markup Language, ISO 8879:1986(E), улучшенный и исправленный) для использования в World Wide Web. Это продукт XML Core Working Group как часть XML Activity.

29 сентября 2006 этот документ был отредактирован с целью удаления лишних пробелов.

Английская версия данного документа является единственной нормативной версией. Однако имеются также переводы: http://www.w3.org/2003/03/Translations/byTechnology?technology=xml.

Этот документ является W3C-Рекомендациями. Данное четвёртое издание не является новой версией XML. В нём исправлены замеченные ошибки (их список имеется по адресу http://www.w3.org/XML/xml-V10-3e-errata) Третьей Редакции XML 1.0 от 4 февраля 2004. Кроме того, разметка появившаяся в 3 редакции для разъяснения формального смысла ключевых слов и определённая в [IETF RFC 2119], была изменена с целью приведения в соответствие с [IETF RFC 2119]. Данная редакция переопределяет предыдущие W3C Recommendation of 4 February 2004.

Пожалуйста, сообщайте об ошибках, обнаруженных в данном документе, по адресу:
 xml-editor@w3.org; имеется также архив,
и переводчику
по адресу: a_pyramidin@yahoo.com

Для удобства чтения имеется также XHTML-версия с индикаторами подсветки кода; в этой версии выделено каждое изменение в соответствии с errata-список, а также ссылки на конкретный элемент этого списка. Список errata для данного четвёртого издания находится на http://www.w3.org/XML/xml-V10-4e-errata.

О реализациях см. http://www.w3.org/XML/2006/06/xml10-4e-implementation.html. Имеется Test Suite для проверки соответствия данной спецификации.

Этот документ просмотрен Членами W3C и другими заинтересованными сторонами и утверждён Директором как Рекомендации W3C. Это постоянный документ, и он может использоваться как справочный материал или для цитирования из других документов как нормативный справочник. Роль W3C в составлении Рекомендаций заключается в том, чтобы привлечь внимание к данной спецификации и способствовать её широкому распространению. Это расширит функциональность и возможности Web.

W3C поддерживает список public list объявлений патентов, где также содержатся инструкции по объявлению патента. Каждый, кто знает о патенте, в котором содержится Essential Claim(s), должен объявить эту информацию в соответствии с section 6 of the W3C Patent Policy.

Содержание

1 Введение
    1.1 Источник и цели
    1.2 Терминология
2 Документы
    2.1 Правильно сформированные XML-документы
    2.2 Символы
    2.3 Общие синтаксические конструкции
    2.4 Символьные данные и разметка
    2.5 Комментарии
    2.6 Инструкции процессинга
    2.7 Разделы CDATA
    2.8 Пролог и Объявление Типа Документа (ОТД)
    2.9 Отдельное Объявление Документа
    2.10 Обработка пробелов
    2.11 Обработка конца строки
    2.12 Идентификация языка
3 Логические структуры
    3.1 Начальные и конечные тэги, тэги "пустых" элементов
    3.2 Обявления типа документа
        3.2.1 Содержимое элемента
        3.2.2 Смешанное содержимое
    3.3 Объявления списка атрибутов
        3.3.1 Типы атрибутов
        3.3.2 Значения по умолчанию для атрибута
        3.3.3 Нормализация значения атрибута
    3.4 Разделы условий
4 Физические структуры
    4.1 Ссылки на символы и мнемоники
    4.2 Объявления мнемоник
        4.2.1 Внутренние мнемоники
        4.2.2 Внешние мнемоники
    4.3 Разбираемые мнемоники
        4.3.1 Объявление текста
        4.3.2 Правильно сформированные разбираемые мнемоники
        4.3.3 Кодировка символов в мнемониках
    4.4 Обработка мнемоник и ссылок XML-процессором
        4.4.1 Не распознаётся
        4.4.2 Включена
        4.4.3 Включается, если проверяется
        4.4.4 Запрещена
        4.4.5 Включена в литерал
        4.4.6 Уведомление
        4.4.7 Пропущена
        4.4.8 Включена как мнемоника параметра
        4.4.9 Ошибка
    4.5 Конструкция замещающего текста для Внутренней Мнемоники
    4.6 Предопределённые мнемоники
    4.7 Объявления нотации
    4.8 Мнемоника документа
5 Соответствие
    5.1 Проверяющие и непроверяющие процессоры
    5.2 Использование XML-процессоров
6 Нотация

Приложения

A Ссылки
    A.1 Нормативные ссылки
    A.2 Прочие ссылки
B Классы символов
C XML и SGML (ненормативное)
D Развёртывание ссылок на мнемоники и символы (ненормативное)
E Детерминистические модели содержимого (ненормативное)
F Автоопределение кодировок символов (ненормативное)
    F.1 Определение без внешней информации о кодировке
    F.2 Приоритеты при наличии внешней информации о кодировке
G W3C XML Working Group (ненормативное)
H W3C XML Core Group (ненормативное)
I Примечание о вариантах (ненормативное)


1 Введение

Extensible Markup Language, abbreviated XML, сокращённо XML, описывает класс объектов данных, называемых XML-документы, и частично описывает поведение обрабатывающих их компьютерных программ. XML является профилем приложения или ограниченным вариантом SGML - The Standard Generalized Markup Language [ISO 8879]. По структуре документы XML являются "соответствующими" документами SGML.

Документы XML состоят из единиц хранения, называемых экземпляры, которые содержат разбираемые или неразбираемые данные. Разбираемые данные состоят из символов, некоторые из которых образуют символьные данные, а другие - разметку. Разметка кодирует описание схемы и логической структуры единиц хранения документа. XML предоставляет механизм наложения ограничений на схему и логическую структуру единиц хранения.

[Определение: Программный модуль, называемый XML-процессор, используется для чтения документов XML и предоставляет доступ к их содержимому и структуре.]
[Определение: Принимается, что процессор XML выполняет свою работу от имени другого модуля, называемого application/приложение.] Данная спецификация описывает требуемое поведение XML-процессора в плане того, как процессор обязан читать данные XML и какую информацию он должен предоставлять приложению.

1.1 Источник и цели

XML был разработан XML Working Group (ранее известной как SGML Editorial Review Board), сформированной под руководством World Wide Web Consortium (W3C) в1996 году.
Её возглавил Jon Bosak из Sun Microsystems при активном участии XML Special Interest Group (ранее известной как SGML Working Group), также организованной W3C. Члены XML Working Group указаны в Приложении. Dan Connolly является контактёром рабочей Группы с W3C.

Цели создания XML:

  1. XML будет широко распространён в Internet.

  2. XML будет поддерживать большой диапазон приложений.

  3. XML будет совместим с SGML.

  4. Он будет лёгким для написания программ, обрабатывающих документы XML.

  5. Количество свойств по выбору (optional) в XML будет сведено к абсолютному минимуму, в идеале - к нулю.

  6. Документы XML должны быть разборчивыми и ясными по смыслу.

  7. Дизайн XML должен выполняться быстро.

  8. Дизайн XML должен быть формальным и кратким.

  9. Документы XML должны легко создаваться.

  10. Краткость в разметке XML имеет минимальное значение.

Эта спецификация, вместе с ассоциированными стандартами  (Unicode [Unicode] и ISO/IEC 10646 [ISO/IEC 10646] для символов, Internet RFC 3066 [IETF RFC 3066] для тэгов идентификации языка, ISO 639 [ISO 639] для кодов названий языков и ISO 3166 [ISO 3166] для кодов названия стран), предоставляет всю информацию, необходимую для понимания XML Версии 1.0 и создания компьютерных программ его обработки.

Данная версия спецификации XML может свободно распространяться, при условии сохранения текста и примечаний без изменений.

1.2 Терминология

Терминология, используемая для описания документов XML, определена в теле данной спецификации. Ключевые слова MUST\ОБЯЗАН, MUST NOT/ОБЯЗАН НЕ, REQUIRED/ТРЕБУЕТСЯ, SHALL/БУДЕТ, SHALL NOT, SHOULD, SHOULD NOT, RECOMMENDED/РЕКОМЕНДУЕТСЯ, MAY/МОЖЕТ и OPTIONAL/ОПЦИОННЫЙ (параметр), если ВЫДЕЛЕНЫ, используются так, как описано в [IETF RFC 2119]. Кроме того, следующие термины используются для построения определений при описании действий XML-процессора:

error/ошибка

[Определение: нарушение правил данной спецификации; результаты не определены. Если не спецфицировано иное, нарушение требований данной спецификации, обозначенное обним из ключевых слов: MUST, REQUIRED, MUST NOT, SHALL и SHALL NOT является ошибкой. Соответствующие программы МОГУТ определять ошибки и сообщать о них и МОГУТ обрабатывать их.]

fatal error/фатальная ошибка

[Определение: ошибка, которую соответствующий XML-процессор ОБЯЗАН выявлить и обязан сообщить приложению. После выявления фатальной ошибки процессор МОЖЕТ продолжить обработку данных для поиска других ошибок и МОЖЕТ сообщать о таких ошибках приложению. С целю поддержки коррекции ошибок процессор МОЖЕТ делать необработанные данные документа (смесь символьных данных и разметки) доступными приложению. Если, однако, выявлена фатальная ошибка, процессор ОБЯЗАН НЕ продолжать нормальную обработку (т. е. он обязан не продолжать передачу информацию о символьных данных и логической структуре документа приложению обычным способом).]

at user option/по выбору пользователя

[Определение: соответствующие программы могут или обязаны (в зависимости от значения модального глагола в предложении) вести себя так, как описано; если это происходит, пользователям обязательно должно быть представлено средство включать или отключать описываемое поведение.]

validity constraint/ограничение правильности

[Определение: правило, применимое ко всем правильным документам XML. Нарушение ограничений правильности является ошибкой; она обязана, по выбору пользователя, выдавать сообщение проверяющими XML- процессорами.]

well-formedness constraint/ограничение правильного формирования

[Определение: правило, применимое ко всем правильно сформированным документам XML. Нарушение ограничений правильного формирования является фатальной ошибкой.]

match/совпадение

[Определение: (Для строки или имени:) две строки или два имени при сравнении должны быть идентичными - совпадать полностью. Символы, имеющие различные варианты представления в ISO/IEC 10646 (например, символы, имеющие предопределённую или "база+диакритический знак" формы), совпадают только тогда, когда они имеют одинаковое представление в обеих строках. Приведение регистра не выполняется.
(Для строк и грамматических правил:) Строка совпадает с грамматическим объектом, если она принадлежит к языку, генерируемому этим объектом.
(Для содержимого и моделей содержимого:) Элемент совпадает со своим объявлением, если он соответствует по форме описанию в ограничении  [ОП: Element Valid].]

for compatibility/для совместимости

[Определение: помечает предложение, описывающее свойство включённого XML, только для того, чтобы удостовериться, что XML остаётся совместимым с SGML.]

for interoperability/для обеспечения взаимодействия

[Определение: помечает предложение, описывающее необязывающие рекомендации, включаемые для того, чтобы увеличить шансы того, что документы XML могут быть обработаны существующей установленной базой процессоров SGML, которые существовали до WebSGML Adaptations Annex/Адаптивного дополнения к ISO 8879.]

2 Документы

[Определение: объект данных является XML-документом, если он (объект) правильно сформирован, как определено в данной спецификации. Правильно сформированный документ XML может дополнительно являться также правильным, если он удовлетворяет некоторым дополнительным ограничениям.]

Каждый документ XML имеет логическую и физическую структуру.
Физически документ состоит из единиц, называемых экземплярами. Экземпляр может ссылаться на другие экземпляры, что вызывает их включение в документ. Документ начинается в "корне" - экземпляре документа.
Логически документ состоит из объявлений, элементов, комментариев, символьных мнемоник и инструкций процесса, и каждый вышеуказанный элемент обозначается в документе определённой разметкой. Логическая и физическая структуры обязаны соответствующим образом вкладываться, как описано в разделе 4.3.2 Правильно сформированные разбираемые мнемоники.

2.1 Правильно сформированные XML-документы

[Определение: текстовый объект является правильно сформированным документом XML, если:]

  1. Взятый в целом, он совпадает с документом, помеченным грамматическим объектом.

  2. Он удовлетворяет всем ограничениям правильного формирования,  данным в этой спецификации.

  3. Каждый из разбираемых экземпляров, на которые имеется прямая или косвенная ссылка в документе, является правильно сформированным.

Document
[1]   document   ::=    prolog element Misc*

Совпадение с объектом документа предполагает, что:

  1. Он содержит один или более элементов.

  2. [Определение: имеется только один элемент, называемый root, или элемент документа, никакая часть которого не появляется в содержимом любого другого элемента.]
    Для всех остальных элементов: если начальный тэг находится в содержимом другого элемента, то конечный тэг находится в содержимом того же самого элемента. Проще говоря, элементы, ограниченные начальным и конечным тэгами, вкладываются соответствующим образом один в другой.

[Определение: как следствие этого, для каждого некорневого элемента C в документе имеется элемент P в таком документе, что C находится в содержимом элемента P, но не в содержимом любого другого элемента, который находится в содержимом P.
P является parent/родителем C, а C - child/потомком  P.]

2.2 Символы

[Определение: Разбираемый экземпляр содержит текст, последовательность символов, которая может представлять символьные данные или разметку.]

 [Определение: character/символ это атомарная (первичная) единица текста, как специфицировано в ISO/IEC 10646 [ISO/IEC 10646]. Разрешёнными символами являются символы табуляции, возврата каретки, перевода строки и все допустимые символы Unicode и ISO/IEC 10646. Версии этих стандартов, указанные в A.1 Нормативных Ссылках, действовали на момент создания данного документа. Новые символы могут быть добавлены к этим стандартам в дополнениях и новых редакциях. Следовательно, XML-процессоры обязаны принимать любые символы в диапазоне, специфицированном для Char.

Диапазон символов
[2]   Char   ::=   #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]/* любой Unicode-символ, исключая суррогатные блоки, FFFE и FFFF. */

Механизм кодирования кодовых точек символов внутри битовых патэрнов может варьироваться от экземпляра к экземпляру. Все XMLпроцессоры ОБЯЗАНЫ принимать кодировки UTF-8 и UTF-16 из Unicode 3.1 [Unicode3]. Механизм обозначения того, какая из двух кодировок используется, и подключение других кодировок обсуждается позже в разделе 4.3.3 Кодирование Символов в Экземплярах.

Примечание:

Рекомендуем авторам документов исключить "compatibility characters/символы совместимости", как они определены в разделе 6.8 спецификации [Unicode] (См. также D21 в разделе 3.6 [Unicode3]). Символы из следующих диапазонов также не рекомендуется применять. Они являются либо управляющими символами, либо постоянно неопределёнными Unicode-символами:

[#x7F-#x84], [#x86-#x9F], [#xFDD0-#xFDDF],
[#x1FFFE-#x1FFFF], [#x2FFFE-#x2FFFF], [#x3FFFE-#x3FFFF],
[#x4FFFE-#x4FFFF], [#x5FFFE-#x5FFFF], [#x6FFFE-#x6FFFF],
[#x7FFFE-#x7FFFF], [#x8FFFE-#x8FFFF], [#x9FFFE-#x9FFFF],
[#xAFFFE-#xAFFFF], [#xBFFFE-#xBFFFF], [#xCFFFE-#xCFFFF],
[#xDFFFE-#xDFFFF], [#xEFFFE-#xEFFFF], [#xFFFFE-#xFFFFF],
[#x10FFFE-#x10FFFF].

2.3 Общие синтаксические конструкции

В этом разделе определены некоторые символы, широко используемые в грамматике.

S (пробел) состоит из одного или более символов пробела (#x20), возврата каретки, перевода строки или табуляции.

White Space/Пробел
[3]   S   ::=   (#x20 | #x9 | #xD | #xA)+

Примечание:

Наличие #xD поддерживается исключительно для обеспечения обратной совместимости с  Первой редакцией. Как указано в разделе 2.11 Обработка конца строки, все символы #xD, литерально представленные в XML-документе, удаляются или заменяются символами #xA перед выполнением любой последующей обработки. Единственный способ сделать символ #xD совместимым с данным продуктом - использовать ссылку на символ в литерале значения экземпялра.

Для удобства символы классифицированы как буквы, цифры и прочие символы. Буква\letter это символ с алфавитной или силлабической основной или идеографический символ. Полное определение символов каждого класса дано в разделе B Классы символов.

[Определение: Name\Имя это лексическая единица, начинающаяся буквой или одним из символов пунктуации и продолжающаяся буквами, цифрами, дефисами, символами подчёркивания, двоеточием или full stops, известными как символы именования.]
Имена, начинающиеся строкой "xml" или любой строкой, совпадающей с (('X'|'x') ('M'|'m') ('L'|'l')), зарезервированы для целей стандартизации в этой или последующих версиях данной спецификации.

Примечание:

Пространства Имён в Рекомендациях XML [XML Names] устанавливают значения именам, содержащим символы двоеточия. Следовательно, авторы не должны использовать двоеточие в XML-именах, исключая использование для целей пространства имён, но XML-процессоры обязаны принимать двоеточие как символ именования.

Nmtoken (лексема именования) состоит из символов именования.

Имена и Лексемы
[4]   NameChar   ::=    Letter | Digit | '.' | '-' | '_' | ':' | CombiningChar | Extender
[5]   Name   ::=   (Letter | '_' | ':') (NameChar)*
[6]   Names   ::=    Name (#x20 Name)*
[7]   Nmtoken   ::=   (NameChar)+
[8]   Nmtokens   ::=    Nmtoken (#x20 Nmtoken)*

Примечание:

Продукты Names и Nmtokens используются для определения правильности значений лексемизированных атрибутов после нормализации (См. 3.3.1 Типы атрибутов).

Литеральные данные это любая строка, заключённая в кавычки и не содержащая знаков кавычки, которые используются в качестве ограничителей этой строки. Литералы используются для специфицирования содержимого внутренних экземпляров/internal entities (EntityValue), значений атрибутов (AttValue) и внешних идентификаторов (SystemLiteral). Обратите внимание, что SystemLiteral может быть разобран без сканирования разметки.

Литералы
[9]   EntityValue   ::=   '"' ([^%&"] | PEReference | Reference)* '"'
|  "'" ([^%&'] | PEReference | Reference)* "'"
[10]   AttValue   ::=   '"' ([^<&"] | Reference)* '"'
|  "'" ([^<&'] | Reference)* "'"
[11]   SystemLiteral   ::=   ('"' [^"]* '"') | ("'" [^']* "'")
[12]   PubidLiteral   ::=   '"' PubidChar* '"' | "'" (PubidChar - "'")* "'"
[13]   PubidChar   ::=   #x20 | #xD | #xA | [a-zA-Z0-9] | [-'()+,./:=?;!*#@$_%]

Примечание:

Хотя продукт  EntityValue допускает определение общего экземпляра, состоящее из одиночного < в литерале (напр., <!ENTITY mylt "<">), настоятельно рекомендуется исключить такое использование, поскольку любое обращение к такому экземпляру вызовет ошибку "правильности формирования" (well-formedness).

2.4 Символьные данные и разметка

Текст состоит из смеси символьных данных и разметки.
[Определение: разметка вводится в виде стартовых тэгов, конечных тэгов, тэгов пустых элементов, мнемоник экземпляров, символьных мнемоник, комментариев, ограничителей разделов CDATA, объявлений типа документа, инструкций процессинга,  объявлений XML, объявлений текста и любых пробелов в верхнем уровне экземпляра документа (то есть вне элемента документа и не внутри другой разметки).]

[Определение: весь текст, не являющийся разметкой, образует символьные данные документа.]

Символ амперсанда (&) и левая угловая скобка (<) ОБАЗАНЫ НЕ появляться в своей литеральной форме, это возможно только при использовании в качестве ограничителей разметки или в комментариях, инструкциях процессинга или разделах CDATA. Если их необходимо использовать ещё где-нибудь, они ОБЯЗАНЫ вводиться в виде мнемоники, с использованием цифровой мнемоники или строк "&amp;" и "&lt;" соответственно. Правая угловая скобка (>) может быть представлена строкой "&gt;" и ОБЯЗАНА, для обеспечения совместимости, вводиться с помощью мнемоники с использованием "&gt;" или символьной мнемоники, если появляется в строке "]]>" внутри содержимого, и если эта строка не обозначает конец раздела CDATA.

Символьные данные в содержимом элементов - это любая строка символов, не содержащая начальных ограничителей любой разметки и не содержит закрывающий ограничитель раздела CDATA - "]]>". В разделе CDATA символьные данные - это любая строка символов, не включающая закрывающий ограничитель раздела CDATA - "]]>".

Для того, чтобы значения атрибутов могли содержать и одинарные, и двойные кавычки, апостроф, или одиночная кавычка, (') может быть представлен в виде "&apos;", а символ двойной кавычки (") - как "&quot;".

Character Data/Символьные Данные
[14]   CharData   ::=   [^<&]* - ([^<&]* ']]>' [^<&]*)

2.5 Комментарии

[Определение: комментарии могут появляться в любом месте документа вне прочей разметки; кроме того, они могут появляться внутри объявления типа документа в тех местах, которые допускаются грамматикой. Они не являются частью символьных данных документа: XML-процессор МОЖЕТ, но не должен, давать приложению возможность запрашивать текст комментариев. Для обеспечения совместимости строка "--" (двойной дефис) ОБЯЗАНА НЕ появляться внутри комментариев.] Ссылки на экземпляры (мнемоники) параметров не распознаются внутри комментариев.

Комментарии
[15]   Comment   ::=   '<!--' ((Char - '-') | ('-' (Char - '-')))* '-->'

Пример комментария:

Заметьте, что грамматика не допускает заканчивать комментарии сочетанием --->.
Следующий пример сформирован неправильно.

2.6 Инструкции процессинга

[Определение: инструкции процессинга (ИП\PIs) позволяют вводить в текст документа инструкции для приложений.]

Инструкции Процессинга
[16]   PI   ::=   '<?' PITarget (S (Char* - (Char* '?>' Char*)))? '?>'
[17]   PITarget   ::=    Name - (('X' | 'x') ('M' | 'm') ('L' | 'l'))

ИП не являются частью символьных данных документа, но ОБЯЗАНЫ передаваться непосредственно приложению. ИП начинается указанием на "цель" (PITarget) для идентификации приложения, которому направляется инструкция. Имена цели, такие как "XML", "xml" и т. п., зарезервированы для возможности стандартизации в этой и будущих версиях данной спецификации. XMLеханизм "Нотация" может использоваться для формального объявления целей ИП. Мнемоники экземпляра параметра ОБЯЗАНЫ НЕ распознаваться внутри ИП.

2.7 Разделы CDATA

[Определение: разделы CDATA могут появляться там же, где и символьные данные; они используются для мнемонизации блоков текста, содержащего символы, которые иначе будут распознаваться как разметка. Разделы CDATA начинаются строкой "<![CDATA[" и заканчиваются строкой "]]>":]

CDATA-разделы
[18]   CDSect   ::=    CDStart CData CDEnd
[19]   CDStart   ::=   '<![CDATA['
[20]   CData   ::=   (Char* - (Char* ']]>' Char*))
[21]   CDEnd   ::=   ']]>'

Внутри раздела CDATA только строка CDEnd распознаётся как разметка, так что амперсанд и левая угловая скобка могут появляться в своей литеральной форме: они не должны (и не могут) быть указаны в виде escape-последовательности (мнемонизированы) с использованием "&lt;" и "&amp;".
Разделы CDATA не могут вкладываться один в другой.

Пример раздела CDATA, где "<greeting>" и "</greeting>" распознаются как символьные данные, а не разметка:

<![CDATA[<greeting>Hello, world!</greeting>]]> 

2.8 Пролог и Объявление Типа Документа (ОТД)

[Определение: XML-документы ДОЛЖНЫ начинаться объявлением XML, которое специфицирует используемую версию XML.] Например, вот полный документ XML, правильно сформированный, но не правильный:

<?xml version="1.0"?>
<greeting>Hello, world!</greeting> 

также и этот:

<greeting>Hello, world!</greeting>

Функцией разметки в документе XML является обязанность описывать структуру хранения данных и логическую структуру и ассоциировать пары атрибут-значение с их логическими структурами. XML предоставляет механизм объявления типа документа для определения ограничений в логической структуре и для поддержки использования предопределённых единиц хранения.
[Определение: документ XML является правильным/valid, если он имеет ассоциированное объявление типа документа и если документ выполняет ограничения, выраженные в нём.]

Объявление типа документа ОБЯЗАНО появляться перед первым элементом в документе.

Пролог
[22]   prolog   ::=    XMLDecl? Misc* (doctypedecl Misc*)?
[23]   XMLDecl   ::=   '<?xml' VersionInfo EncodingDecl? SDDecl? S? '?>'
[24]   VersionInfo   ::=    S 'version' Eq ("'" VersionNum "'" | '"' VersionNum '"')
[25]   Eq   ::=    S? '=' S?
[26]   VersionNum   ::=   '1.0'
[27]   Misc   ::=    Comment | PI | S

[Определение: объявление типа документа XML содержит или указывает на объявления разметки, предоставляющие грамматику для класса документов. Эта грамматика известна как определение типа документа или ОТД/DTD. Объявление типа документа может указывать на внешний поднабор (особый вид внешнего экземпляра), содержащий объявления разметки, или может непосредственно содержать объявления разметки во внутреннем поднаборе, или может иметь и то, и другое. ОТД документа состоит из обоих соединённых поднаборов.]

[Определение: объявление разметки это объявление типа элемента, объявление списка атрибутов и объявление экземпляра или объявление нотации.] Эти объявления могут полностью или частично содержаться внутри мнемоник параметров, как описано ниже в разделах о правильном формировании и ограничениях правильности.
Дополнительную информацию см. в разделе 4 Физические Структуры.

Определение Типа Документа
[28]   doctypedecl   ::=   '<!DOCTYPE' S Name (S ExternalID)? S? ('[' intSubset ']' S?)? '>'[ОП (ограничение правильности): тип Root Element
ОПС (ограничение правильной сформированности): Внешний Поднабор]
[28a]   DeclSep   ::=    PEReference | S [ОПС: PE/МП (мнемоники параметров) между объявлениями]
[28b]   intSubset   ::=   (markupdecl | DeclSep)*
[29]   markupdecl   ::=    elementdecl | AttlistDecl | EntityDecl | NotationDecl | PI | Comment [ОП: соответствующее объявление/вложение МП]
[ОПС: МП во внутреннем поднаборе]

Обратите внимание, что можно конструировать правильно сформированные документы, содержащие doctypedecl, которое не указывает на внешний и не содержит на внутренний поднабор.

Объявления разметки могут быть выполнены полностью или частично из замещающего текста или экземпляров параметров. Далее в этой спецификации продукты отдельных нетерминалов (elementdecl, AttlistDecl и т. д.) описывают объявления после всех экземпляров параметров, которые были включены.

Ссылки на экземпляры параметров распознаются в любом месте ОТД (внешних или внутренних поднаборах и внешних экземплярах параметров), исключая литералы, инструкции процессинга, комментарии и содержимое игнорируемых условных секций (см. 3.4 Разделы Условий).
Они распознаются также в литералах значения экземпляра. Использование экземпляров параметров во внутреннем поднаборе ограничено так, как описано ниже.

Ограничение правильности: Тип Корневого Элемента

Имя в объявлении типа документа обязано совпадать с типом элемента корневого элемента.

Ограничение правильности: Соответствующее Объявление/Вложение МП

Замещающий текст мнемоники параметра ОБЯЗАН правильно вкладываться в объявления разметки. То есть, если первый или последний символ объявления разметки (markupdecl выше по тексту) содержится в замещающем тексте для ссылки на МП, то оба они ОБЯЗАНЫ содержаться в одном и том же замещающем тексте.

Ограничение правильной сформированности: МП во Внутреннем Поднаборе

Во внутреннем поднаборе ОТД, ссылки на МП ОБЯЗАНЫ НЕ появляться в объявлениях разметки; они могут появляться везде, где могут появляться объявления разметки. (Это не относится к ссылкам, появляющимся во внешних МП, или ко внешним поднаборам.)

Ограничение правильной сформированности: Внешний Поднабор

Внешний поднабор, если он имеется, ОБЯЗАН совпадать с продукцией для extSubset.

Ограничение правильной сформированности: МП между Объявлениями

Замещающий текст ссылки МП в DeclSep ОБЯЗАН совпадать с продуктом extSubsetDecl.

Подобно внутреннему поднабору, внешний поднабор и любая внешняя МП, на которую имеется ссылка в DeclSep, ОБЯЗАНЫ состоять из серии полных объявлений типов, допустимых нетерминальной символьной markupdecl, перемежаемых пробелами или ссылками на МП. Однако части содержимого внешнего поднабора или этих внешних МП могут условно игнорироваться путём использования конструкции раздела условий; это не допускается во внутреннем поднаборе, но разрешено во внешних МП, на которые есть ссылки во внутреннем поднаборе.

External Subset\Внешний Поднабор
[30]   extSubset   ::=    TextDecl? extSubsetDecl
[31]   extSubsetDecl   ::=   ( markupdecl | conditionalSect | DeclSep)*

Внешний поднабор и внешний МП отличаются также от внутреннего поднабора тем, что ссылки на МП разрешены внутри объявлений разметки, а не только между объявлениями разметки.

Пример XML-документа с объявлением типа документа:

<?xml version="1.0"?>
<!DOCTYPE greeting SYSTEM "hello.dtd">
<greeting>Hello, world!</greeting> 

Системный идентификатор "hello.dtd" задаёт адрес (URI-ссылку) ОТД данного документа.

Объявление может быть также дано локально, как в следующем примере:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE greeting [
  <!ELEMENT greeting (#PCDATA)>
]>
<greeting>Hello, world!</greeting>

Если используются и внешний, и внутренний поднаборы, то внутренний поднабор ОБЯЗАН появляться перед внешним поднабором. Это приводит к тому, что экземпляр и объявления списков атрибутов внутреннего поднабора имеют приоритет перед экземпляром и объявлениями внешнего поднабора.

2.9 Отдельное Объявление Документа

Объявления разметки могут влиять на содержимое документа при передаче его от XML-процессора  приложению; примерами могут служить значения атрибутов по умолчанию и объявления экземпляров. Отдельное объявление документа, которое может появляться как компонент объявления XML, сигнализирует о том, имеются или нет такие объявления, которые являются внешними по отношению к экземпляру документа или мнемоникам параметров.
[Определение: внешнее объявление разметки определено как объявление разметки, появляющееся во внешнем поднаборе или в МП (внешнем или внутреннем, последние включены, поскольку от непроверяющих процессоров не требуется читать их).]

Отдельное Объявление Документа
[32]   SDDecl   ::=    S 'standalone' Eq (("'" ('yes' | 'no') "'") | ('"' ('yes' | 'no') '"')) [ОП: Отдельное Объявление Документа]

В отдельном объявлении документа значение "yes" означает отсутствие внешних объявлений разметки, влияющих на информацию, предаваемую от XML-процессора приложению. Значение "no" означает, что имеются или могут быть такие внешние объявления разметки. Заметьте, что отдельное объявление документа означает лишь существование внешних объявлений. Существование в документе ссылок на внешние мнемоники, если эти мнемоники объявлены внутри, не изменяет их отдельный статус.

Если внешние объявления разметки отсутствуют, отдельное объявление документа не имеет смысла. Если имеются внешние объявления разметки, но отсутствует отдельное объявление документа, принимается значение "no".

Любой XML-документ, в котором standalone="no", может быть по алгоритму конвертирован в отдельный документ, что может быть необходимо для некоторых приложений, работающих в сети.

Ограничение правильности: Отдельное Объявление Документа

Объявление отдельного документа ОБЯЗЯНО иметь значение "no", если любое из внешних объявлений разметки содержит объявления:

  • атрибутов со значениями по умолчанию, если элементы, к которым применяются эти атрибуты, появляются в документе без спецификаций значений этих атрибутов, или

  • мнемоник, (отличных от amp, lt, gt, apos, quot), если ссылки на эти мнемоники появляются в документе, или

  • атрибутов лексемизированных типов, когда атрибут появляется в документе с таким значением, что нормализация производит другое значение из данного, в отсутствие обявления, или

  • типов элементов с содержимым элемента, если пробел появляется непосредственно внутри экземпляра этих типов.

Пример объявления XML с объявлением отдельного документа:

<?xml version="1.0" standalone='yes'?>

2.10 Обработка пробелов

При редактировании документов XML часто бывает удобно использовать "пробельные символы" (пробелы, табуляцию и пустые строки) для разделения разметки на блоки - для удобства чтения. Такие пробелы обычно не включаются в публикуемую версию документа. С другой стороны, "значащий" пробел, который должен быть сохранён в публикуемой версии, является обычным, например, в поэзии и исходном коде.

XML-процессор ОБЯЗАН всегда передавать приложению все символы в документе, не являющиеся разметкой. Проверяющий процессор XML обязан также информировать приложение о том, какие из этих символов образуют пробелы, появляющиеся в содержимом элемента.

Проверяющий XML-процессор ОБЯЗАН также информировать приложение о том, какие из этих символов образуют пробелы, появляющиеся в содержимом элемента.

Специальный атрибут xml:space может быть присоединён к элементу для того, чтобы сигнализировать о необходимости для приложения сохранить пробел в данном элементе. В правильных/valid документах этот атрибут, как и некоторые другие, ОБЯЗАН быть объявлен, если он используется. Если объявлен, он ОБЯЗАН быть задан как перечисляемый тип, значения которого - одно или оба - "default" и "preserve". Например:

<!ATTLIST poem  xml:space (default|preserve) 'preserve'>

<!ATTLIST pre xml:space (preserve) #FIXED 'preserve'>

Значение "default" сигнализирует, что для данного элемента принимаются режимы обработки по умолчанию пробелов в данном приложении; значение "preserve" означает указание приложению сохранить все пробелы. Это объявленное указание учитывается для применения ко всем элементам внутри содержимого элемента там, где это специфицировано, если только оно не переопределяется другим экземпляром атрибута xml:space.

В данной спецификации нет иных значений xml:space, кроме "default" и "preserve". Специфицирование других значений является ошибкой; XML-процессор МОЖЕТ сообщить об ошибке и МОЖЕТ исправлять её путём игнорирования спецификации атрибута или сообщая приложению об (ошибочном) значении. Приложения могут игнорировать или отбрасывать ошибочные значения.

Корневой элемент любого документа считается не имеющим никаких указаний относительно обработки пробелов приложением, если он не предоставляет значение для данного атрибута или если атрибут не объявлен внутри значения по умолчанию.

2.11 Обработка конца строки

Разбираемые мнемоники XML часто хранятся в компьютерных файлах, которые, для удобства редактирования, организуются в строки. Эти строки обычно разделяются определёнными сочетаниями символов ВОЗВРАТА КАРЕТКИ (#xD) и ПЕРЕВОДА СТРОКИ (#xA).

Для упрощения задач приложения XML-процессор ОБЯЗАН раюотать так, будто он нормализовал все переводы строки во внешних разбираемых мнемониках (включая мнемонику document) при вводе, перед разбором, транслируя двухсимвольные последовательности #xD #xA и любые #xD, после которых не идёт символ #xA, в одиночный символ #xA.

2.12 Идентификация языка

При обработке документа часто используется идентификация естественного или формального языка, на котором написано содержимое. Специальный атрибут xml:lang может быть вставлен в документ, чтобы специфицировать язык, используемый в содержимом и значениях атрибутов любого элемента в XML-документа. В правильных документах этот атрибут, как и любой другой, ОБЯЗАН быть объявлен, если используется. Значениями атрибута являются идентификаторы языка, как определено в [IETF RFC 1766], Tags for the Identification of Languages, или его преемниках; кроме того, может быть специфицирована пустая строка.

(Продукты с 33 по 38 удалены.)

Например:

<p xml:lang="en">The quick brown fox jumps over the lazy dog.</p>
<p xml:lang="en-GB">What colour is it?</p>
<p xml:lang="en-US">What color is it?</p>
<sp who="Faust" desc='leise' xml:lang="de">
  <l>Habe nun, ach! Philosophie,</l>
  <l>Juristerei, und Medizin</l>
  <l>und leider auch Theologie</l>
  <l>durchaus studiert mit heiГџem Bemüh'n.</l>
</sp>

Язык, специфицированный в xml:lang, применяется в элементе, там, где специфицировано (включая значения его атрибутов) и ко всем элементам содержимого, если только не переопределён другим экземпляром  xml:lang. Конкретнее, пустое значение xml:lang используется в элементе В для переопределения спецификации содержащего (внешнего)  элемента А без специфицирования другого языка.

Внутри B считается, что доступной информации о языке нет, как если бы xml:lang не был специфицирован или в B или любом из его предков. Само приложение определяет, какие значения атрибутов и какие части символьного содержимого, если оно имеется, считать зависимыми от языковых значений, описанных атрибутом xml:lang.

Примечание:

Информация о языке может также предоставляться внешними транспортными протоколами (такими, например, как HTTP или MIME). Если имеется, эта информация может использоваться XML-приложениями, но более локальная информация, предоставляемая атрибутом xml:lang, должна иметь приоритет.

Простое объявление  xml:lang  может иметь форму

xml:lang CDATA #IMPLIED

но конкретные значения по умолчанию также могут быть заданы, если это необходимо. В сборнике французской поэзии для английских студентов, со справочником и примечаниями на английском, атрибут xml:lang может быть объявлен так:

<!ATTLIST poem   xml:lang CDATA 'fr'>
<!ATTLIST gloss  xml:lang CDATA 'en'>
<!ATTLIST note   xml:lang CDATA 'en'>

3 Логические структуры

[Определение: каждый XML-документ содержит один или более элементов, ограниченных либо начальными и конечными тэгами, либо - для пустых элементов - тэгами пустых элементов. Каждый элемент имеет тип, идентифицируется по имени, которое иногда называется "generic identifier" (GI) - родовой идентификатор, и может иметь набор спецификаций атрибутов.] Каждая спецификация атрибутов имеет имя и значение.

Элемент
[39]   element   ::=    EmptyElemTag
| STag content ETag [ОПС: Element Type Match]
[ОП: Element Valid]

Данная спецификация не вводит ограничений семантики, использования или (помимо синтаксиса) именования типов и атрибутов элементов, за исключением того, что имена начинающиеся с (('X'|'x')('M'|'m')('L'|'l')), зарезервированы для целей стандартизации этой и последующих версий данной спецификации.

Ограничение правильной сформированности: Совпадение Типа Элемента

Name в закрывающем тэге элемента ОБЯЗАНО соответствовать типу элемента в начальном тэге.

Ограничение правильности: Element Valid/Элемент является правильным

Элемент является правильным (верным), если имеется объявление, соответствующее elementdecl, где Name соответствует типу элемента и выдерживается одно из следующих условий:

  1. Объявление соответствует EMPTY, и элемент не имеет содержимого (нет даже мнемоник, PI или пробелов).

  2. Объявление совпадает с children, и последовательность дочерних элементов принадлежит языку, генерируемому регулярным выражением в модели содержимого, при наличии возможных пробелов и PI (т. е. продукт [27] Misc совпадает с разметкой) между начальным тэгом и первым дочерним элементом, между дочерними элементами или между последним дочерним элементом и конечным тэгом. Обратите внимание, что раздел CDATA, содержащий только пробелы или ссылку на менмонику, чей замещающий текст является мнемониками символов, разворачиваемыми в пробелы, не соответствует нетерминальному S, и, следовательно, не может появляться в этих позициях; однако ссылка на внутреннюю мнемонику с литеральным значением, состоящим из символьных мнемоник, разворачиваемыми в пробелы, не совпадает с S, поскольку её замещающий текст является пробелом - результатом разворачивания символьных сссылок.

  3. Объявление совпадает с Mixed, и содержимое (после замещения ссылок-мнемоник на текст) состоит из символьных данных (включая CDATA-разделы), комментариев, ИП  и дочерних элементов, чьи типы совпадают с именам в модели содержимого.

  4. Объявление совпадает с ANY (Любой), и типы каждого из дочерних элементов объявлены.

  1. The declaration matches ANY, и содержимое (после замещения ссылок-мнемоник на текст) состоит из символьных данных (включая CDATA-разделы), комментариев, ИП  и дочерних элементов, чьи типы объявлены.

3.1 Начальные и конечные тэги, тэги "пустых" элементов

[Определение: Начало каждого непустого XML-элемента обозначается начальным тэгом.]

Start-tag/Начальный тэг
[40]   STag   ::=   '<' Name (S Attribute)* S? '>'[ОПС: Unique Att Spec]
[41]   Attribute   ::=    Name Eq AttValue [ОП: Attribute Value Type]
[ОПС: No External Entity References]
[ОПС: No < in Attribute Values]

Name в начальном и конечном тэгах задаёт тип элемента.
[Определение: Пары Name-AttValue (Имя-Значение атрибута) называются спецификациями атрибутов элемента],
[Определение: с Name в каждой паре, называемым именем атрибута] и
[Определение: содержимым AttValue (текстом между ограничителями ' или ") в качестве значения атрибута.]
Обратите внимание, что порядок спецификации атрибутов в начальном тэге или в тэге пустого элемента не имеет значения.

Ограничение правильной сформированности: Unique Att Spec

Имя атрибута ОБЯЗАНО НЕ появляться более одного раза в одном начальном тэге или тэге пустого элемента.

Ограничение правильности: Attribute Value Type

Атрибут ОБЯЗАН быть объявлен; значение ОБЯЗАНО быть того типа, который для него объявлен. (О типах атрибутов см. 3.3 Объявления Списка Атрибутов.)

Ограничение правильной сформированности: No External Entity References

Значения атрибутов ОБЯЗАНЫ НЕ содержать прямые или косвенные ссылки-мнемоники на внешние мнемоники.

Ограничение правильной сформированности: No < in Attribute Values

Замещающий текст любой мнемоники, вызываемой прямо или косвенно в значении атрибута, ОБЯЗАН НЕ содержать символ <

Пример начального тэга:

<termdef id="dt-dog" term="dog">

[Определение: окончание каждого элемента, начатого начальным тэгом, ОБЯЗАНО быть отмечено конечным тэгом, содержащим имя, отражающее тип элемента, как оно было задано в начальном тэге:]

End-tag\Конечный тэг
[42]   ETag   ::=   '</' Name S? '>'

Пример конечного тэга:

[Определение: Текст между начальным и конечным тэгами называется содержимым элемента:]

Содержимое элементов
[43]   content   ::=    CharData? ((element | Reference | CDSect | PI | Comment) CharData?)*

[Определение: Элемент без содержимого называется пустым/empty.] Пустой элемент представлен либо начальным тэгом, после которого непосредственно следует конечный тэг, либо тэгом пустого элемента.
[Определение: Тэг пустого элемента имеет особую форму:]

Тэгт пустых элементов
[44]   EmptyElemTag   ::=   '<' Name (S Attribute)* S? '/>'[ОПС: Unique Att Spec]

Тэги пустого элемента могут использоваться для любого элемента, не имеющего содержимого, независимо от того, объявлен он ключевым словом EMPTY или нет.
Для целей взаимодействия тэг пустого элемента ДОЛЖЕН использоваться (и только он ДОЛЖЕН использоваться) для тех элементов, которые объявлены как EMPTY.

Примеры пустых элементов:

<IMG align="left"
 src="http://www.w3.org/Icons/WWW/w3c_home" />
<br></br>
<br/>

3.2 Обявления типа документа

Структура элемента XML-документа может, для целей проверки, быть ограничена путём использования объявлений типа элемента и списка атрибутов. Объявление типа элемента ограничивает содержимое элемента.

Объявление типа элемента часто ограничивает типы элементов, которые могут появляться в качестве потомков данного элемента. Процессор XML, по выбору пользователя, МОЖЕТ выдавать предупреждение, если в объявлении упоминается тип элемента, для которого отсутствует объявление, но это не является ошибкой.

[Определение: Объявление Типа Элемента имеет форму:]

Обявление типа элемента
[45]   elementdecl   ::=   '<!ELEMENT' S Name S contentspec S? '>'[ОП: Unique Element Type Declaration]
[46]   contentspec   ::=   'EMPTY' | 'ANY' | Mixed | children

where the Name gives the element type being declared.

Примеры объявлений типов элементов:

3.2.1 Содержимое элемента

[Определение: тип элемента имеет содержимое элемента, если элементы данного типа ОБЯЗАНЫ содержать только дочерние элементы (а не символьные данные), которые опционно могут быть разделены пробелами (символами, соответствующими нетерминальному S).]
[Определение: В этом случае ограничение включает модель содержимого, простую грамматику, управляющую разрешёнными типами дочерних элементов и порядком, в котором они могут появляться.] Грамматика построена на content particles (cp)/частицах содержимого, которые состоят из имён, списков выбора частиц содержимого или списков последовательностей частиц содержимого:

Модели содержимого элемента
[47]   children   ::=   (choice | seq) ('?' | '*' | '+')?
[48]   cp   ::=   (Name | choice | seq) ('?' | '*' | '+')?
[49]   choice   ::=   '(' S? cp ( S? '|' S? cp )+ S? ')'[ОП: Proper Group/PE Nesting]
[50]   seq   ::=   '(' S? cp ( S? ',' S? cp )* S? ')'[ОП: Proper Group/PE Nesting]

где каждое Name  - это тип элемента, который может появляться как дочерний. Любая частица содержимого в списке выбора может появляться в содержимом элемента в том месте, где список выбора появляется в грамматике; каждая частица содержимого, появляющаеся в списке последовательностей, ОБЯЗАНА появляться в содержимом элемента в том порядке, в котором она дана в списке. Опционный символ с последующими именем или списком управляют тем, может ли элемент или частицы содержимого в списке появляться один или более раз (+), ноль или более (*) или ноль или один (?) раз. Отсутствие такой операции означает, что элемент или частица содержимого ОБЯЗАН/А появиться только однократно. Этот синтаксис и значения идентичны таковым, используемым в продуктах/productions в данной спецификации.

Содержимое элемента совпадает с моделью содержимого, если, и только если, имеется возможность трассировки пути в модели содержимого, подчиняясь операциям последовательности, выбора и повторения, и каждый элемент содержимого совпадает с типом элемента в модели содержимого. Для обеспечения совместимости считается ошибкой, если модель содержимого разрешает совпадение элемента с более чем одним появлением типа элемента в данной модели содержимого. Дополнительно см. Детерминистические Модели Содержимого.

Ограничение правильности: Proper Group/PE Nesting

Замещающий текст мнемоники параметра ОБЯЗАН быть вложен соответствующим образом с помощью групп скобок. То есть, если закрывающие или открывающие скобки конструкций choice, seq или Mixed содержатся в замещающем тексте мнемоники параметра, то оба (тэга) ОБЯЗАНЫ содержаться в одном и том же замещающем тексте.

Для целей взаимодействия, если ссылка на мнемонику параметра появляется в конструкции choice, seq или Mixed, её замещающий текст ДОЛЖЕН содержать как минимум один непробельный символ, и ни первый, ни последний непробельный символ замещающего текста НЕ ДОЛЖЕН быть коннектором (| или ,).

Примеры моделей содержимого элементов:

<!ELEMENT spec (front, body, back?)>
<!ELEMENT div1 (head, (p | list | note)*, div2*)>
<!ELEMENT dictionary-body (%div.mix; | %dict.mix;)*>

3.2.2 Смешанное содержимое

[Определение: тип элемента имеет смешанное содержимое/mixed content, если элементы этого типа могут содержать символьные данные, опционно перемежаемые дочерними элементами.] В этом случае могут быть ограничены типы дочерних элементов, но не их порядок или количество появлений:

Объявление Смешанного Содержимого
[51]   Mixed   ::=   '(' S? '#PCDATA' (S? '|' S? Name)* S? ')*'
| '(' S? '#PCDATA' S? ')' [ОП: Proper Group/PE Nesting]
[ОП: No Duplicate Types]

где Name задают тип элементов, которые может появляться в качестве потомков. Ключевое слово #PCDATA исторически произошло от термина "parsed character data/разбираемые символьные данные."

Ограничение правильности: No Duplicate Types

Одно и то же имя ОБЯЗАНО НЕ появляться более чем однократно в одном объявлении смешанного содержимого.

Примеры объявлений смешанного содержимого:

3.3 Объявления списка атрибутов

Атрибуты используются для ассоциирования пар имя-значение с элементами. Спецификации атрибутов ОБЯЗАНЫ НЕ появляться вне начальных тэгов и тэгов пустых элементов; таким образом, продукты/productions, используемые для их распознавания, появляются в 3.1 Начальныз и конечныз тэгах, тэгах пустых элементов. Объявления списков атрибутов могут использоваться:

  • Для определения набора атрибутов, относящихся к данному типу элемента.

  • Для установки ограничений типа для этих атрибутов.

  • Для предоставления атрибутам значений по умолчанию.

[Определение: Объявления списка атрибутов специфицируют имя, тип данных и значение по умолчанию (если имеется) каждого атрибута, ассоциированного с данным типом элемента:]

Объявление списка атрибутов
[52]   AttlistDecl   ::=   '<!ATTLIST' S Name AttDef* S? '>'
[53]   AttDef   ::=    S Name S AttType S DefaultDecl

Name в правиле AttlistDecl - это тип элемента. По выбору пользователя XML-процессор МОЖЕТ выдавать предупреждение, если атрибуты объявляются для типа элемента, который сам не объявлен, но это не является ошибкой. Name в правиле AttDef - это имя атрибута.

Если для данного типа элемента предоставлено более одного AttlistDecl, то их всех содержимое объединяется. Если для одного атрибута данного типа элемента предоставлено более одного определения, то первое объявление принимается, а остальные игнорируются. Для целей взаимодействия создатели ОТД могут избрать предоставление максимум одного объявления списка атрибутов для данного типа элемента, максимум одного определения атрибута для данного имени атрибута в объявлении списка атрибутов и минимум одного определения атрибута в каждом объявлении списка атрибутов. Для целей взаимодействия, XML-процессор МОЖЕТ, по выбору пользователя, выдавать предупреждение, если даётся более одного объявления списка атрибутов для данного типа элемента или дано более одного определения атрибута для данного атрибута, но это не является ошибкой.

3.3.1 Типы атрибутов

Имеется три разновидности типов атрибутов XML: string/строковой, набор лексемных типов и перечисляемые типы. Тип string может принимать в качестве значения любые символьные строки; лексемные типы имеют различные лексические и семантические ограничения. Ограничения правильности, отмеченные в грамматике, применяются после нормализации значения атрибута, как описано в 3.3.3 Нормализации значения атрибута.

Типы атрибутов
[54]   AttType   ::=    StringType | TokenizedType | EnumeratedType
[55]   StringType   ::=   'CDATA'
[56]   TokenizedType   ::=   'ID'[ОП: ID]
[ОП: One ID per Element Type]
[ОП: ID Attribute Default]
| 'IDREF'[ОП: IDREF]
| 'IDREFS'[ОП: IDREF]
| 'ENTITY'[ОП: Entity Name]
| 'ENTITIES'[ОП: Entity Name]
| 'NMTOKEN'[ОП: Name Token]
| 'NMTOKENS'[ОП: Name Token]

Ограничение правильности: ID

Значения ID типа ОБЯЗАНЫ совпадать с продуктом Name. Имя ОБЯЗАНО НЕ появляться более одного раза в XML-документе как значение данного типа; т. е. значения ID ОБЯЗАНЫ уникально идентифицировать элементы, ппродившие их.

Ограничение правильности: ID Attribute Default

ID атрибута ОБЯЗАН иметь объявленное значение по умолчанию: #IMPLIED или #REQUIRED.

Ограничение правильности: IDREF

Значения типа IDREF ОБЯЗАНЫ совпадать с продуктом Name, а значения типа IDREFS ОБЯЗАНЫ совпадать с Names; каждое Name ОБЯЗАНО совпадать со значением атрибута ID какого-либо элемента в XML-документе; т. е. значения IDREF ОБЯЗАНЫ совпадать со значением некоторого атрибута ID.

Ограничение правильности: Entity Name

Значения типа ENTITY ОБЯЗАНЫ совпадать с продуктом Name, а значения типа ENTITIES ОБЯЗАНЫ совпадать с Names; каждое Name ОБЯЗАНО совпадать с именем неразобранной мнемоники, объявленной в ОТД

Ограничение правильности: Name Token

Значения типа NMTOKEN ОБЯЗАНЫ совпадать с продуктом Nmtoken; значения типа NMTOKENS ОБЯЗАНЫ совпадать с Nmtokens.

[Определение: Enumerated attributes/Перечисляемые Атрибуты имеют список допустимых значений в объявлении]. Они ОБЯЗАНЫ принимать одно из следующих значений:

[Определение: Enumerated attributes have a list of allowed values in their declaration ]. They MUST take one of those values. Имеется два вида перечисляемых типов атрибута:

Типы перечисляемых атрибутов
[57]   EnumeratedType   ::=    NotationType | Enumeration
[58]   NotationType   ::=   'NOTATION' S '(' S? Name (S? '|' S? Name)* S? ')' [ОП: Notation Attributes]
[ОП: One Notation Per Element Type]
[ОП: No Notation on Empty Element]
[ОП: No Duplicate Tokens]
[59]   Enumeration   ::=   '(' S? Nmtoken (S? '|' S? Nmtoken)* S? ')'[ОП: Enumeration]
[ОП: No Duplicate Tokens]

Атрибут NOTATION идентифицирует нотацию, объявленную в ОТД с ассоциированными системными и/или публичными идентификаторами, используемыми для интерпретации элемента, к которому атрибут присоединён.

Ограничение правильности: Notation Attributes

Значения этого типа ОБЯЗАНЫ совпадать с одним из имён нотации, включённом в объявление; все имена нотации в объявлении ОБЯЗАНЫ быть объявлены.

Ограничение правильности: One Notation Per Element Type

Тип элемента ОБЯЗАН НЕ иметь более одного специфицированного атрибута NOTATION.

Ограничение правильности: No Notation on Empty Element

Для обеспечения совместимости атрибут типа NOTATION ОБЯЗАН НЕ быть объявленным в элементе, объявленном как EMPTY.

Ограничение правильности: Enumeration

Значения этого типа ОБЯЗАНЫ совпадать с одной из лексем Nmtoken в объявлении.

Для целей взаимодействия одно и то же Nmtoken НЕ ДОЛЖНО появляться более одного раза в типах перечисляемых атрибутов одного типа элемента.

3.3.2 Значения по умолчанию для атрибута

Объявление атрибута предоставляет информацию о том, ТРЕБУЕТСЯ\REQUIRED ли наличие атрибута и, если нет, как XML-процессор должен реагировать, если объявленный атрибут отсутствует в документе.

Значения по умолчанию для атрибута
[60]   DefaultDecl   ::=   '#REQUIRED' | '#IMPLIED'
| (('#FIXED' S)? AttValue)[ОП: Required Attribute]
[ОП: Attribute Default Value Syntactically Correct]
[ОПС: No < in Attribute Values]
[ОП: Fixed Attribute Default]
[ОПС: No External Entity References]

В объявлении атрибута слово #REQUIRED означает, что атрибут всегда ОБЯЗАН быть предоставлен, #IMPLIED  - что значение по умолчанию не предоставляется.
[Определение: если в объявлении не указано ни #REQUIRED, ни #IMPLIED, тогда значение AttValue содержит объявленное значение default; ключевое слово #FIXED устанавливает, что атрибут обязан всегда иметь значение по умолчанию. Если значение по умолчанию объявляется тогда, когда XML-процессор обнаружил элемент без спецификации атрибута, для которого уже прочитано объявление значения по умолчанию, он ОБЯЗАН сообщить приложению атрибут с объявленным значением по умолчанию\default value.]

Ограничение правильности: Required Attribute

Если объявлением по умолчанию является ключевое слово #REQUIRED, тогда атрибут ОБЯЗАН быть специфицирован для всех элементов типа из объявления списка атрибутов.

Ограничение правильности: Attribute Default Value Syntactically Correct

Объявленное значение по умолчанию ОБЯЗАНО соблюдать синтаксические ограничения типа объявляемого атрибута:

Заметьте, что здесь требуются только синтаксические ограничения типа; о других ограничениях (например, что значением должа быть объявленная неразобранная мнемоника, для атрибута ENTITY-типа) проверщик-разборщик будет сообщать, только если элемент без спецификации данного атрибута действительно появится.

Примеры объявлений списка атрибутов:

3.3.3 Нормализация значения атрибута

Прежде чем значение атрибута передаётся приложению или проверяется на правильность, XML-процессор ОБЯЗАН нормализовать значение атрибута путём применения к нему нижеприведённого алгоритма или путём использования некоторых других методов так, чтобы  значение, передаваемое приложению, было тем же, что и произведённое алгоритмом.

  1. Все разрывы строки ОБЯЗАНЫ быть нормализованы при вводе до #xA, как описано в разделе 2.11 Обработка Конца Строки, чтобы в дальнейшем данный алгоритм оперировал текстом, нормализованным таким способом.

  2. Начать с нормализованного значения, состоящего из пустой строки.

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

    • для мнемоники символа - присоединить символ к нормализованному значению.

    • мнемоники - рекурсивно применять шаг 3 данного алгоритма к замещающему тексту объекта.

    • для пробельного символа (#x20, #xD, #xA, #x9) - присоединить символ пробела (#x20) к нормализованному значению.

    • для других символов - присоединить символ к нормализованному значению.

Если тип атрибута - не CDATA, то XML-процессор ОБЯЗАН далее обрабатывать нормализованное значение атрибута, отбрасывая ведущие и ведомые пробельные символы (#x20) и заменяя последовательности пробельных символов (#x20) одиночным символом пробела (#x20).

Обратите внимание, что ненормализованное значение атрибута содержит ссылки-мнемоники на пробельный символ, отличный от #x20, а нормализованное значение содержит ссылку на сам символ (#xD, #xA или #x9). Это контрастирует с тем случаем, когда ненормализованное значение содержит символ пробела (не ссылку), который заменяется на символ пробела (#x20) в нормализованном значении, и также с тем случаем, когда ненормализованное значение содержит ссылку на мнемонику, замещающий текст которой содержит символ пробела; обрабатываемый рекурсивно, символ пробела заменяется  в нормализованном значении на пробел (#x20).

Все атрибуты, для которых не было прочитано объявлений, ДОЛЖНЫ рассматриваться непроверяющим процессором, как если бы объявлен CDATA.

Является ошибкой, если значвение атрибута содержит ссылку на мнемонику, для которой не прочитано объявление.

Далее идут примеры нормализации атрибута.
В данных объявлениях:

<!ENTITY d "&#xD;">
<!ENTITY a "&#xA;">
<!ENTITY da "&#xD;&#xA;">

спецификации атрибутов в левой колонке ниже могут быть нормализованы до символьных последовательностей в средней колонке, если атрибут a объявлен NMTOKENS, и до последовательностей в правой колонке, если a объявлен как CDATA.

Спецификация атрибутаa является NMTOKENSa является CDATA
a="

xyz"
x y z
#x20 #x20 x y z
a="&d;&d;A&a;&#x20;&a;B&da;"
A #x20 B
#x20 #x20 A #x20 #x20 #x20 B #x20 #x20
a=
"&#xd;&#xd;A&#xa;&#xa;B&#xd;&#xa;"
#xD #xD A #xA #xA B #xD #xA
#xD #xD A #xA #xA B #xD #xA

Заметьте, что последний пример неверен (но правильно сформирован), если a объявлен типом NMTOKENS.

3.4 Разделы условий

[Определение: Разделы условий/Conditional sections являются частью внешнего поднабора объявления типа документа или мнемоники внешнего параметра, и включены или исключены из логической структуры ОТД, базирующейся на ключевом слове, которое ими управляет.]

Раздел условий
[61]   conditionalSect   ::=    includeSect | ignoreSect
[62]   includeSect   ::=   '<![' S? 'INCLUDE' S? '[' extSubsetDecl ']]>' [ОП: Proper Conditional Section/PE Nesting]
[63]   ignoreSect   ::=   '<![' S? 'IGNORE' S? '[' ignoreSectContents* ']]>'[ОП: Proper Conditional Section/PE Nesting]
[64]   ignoreSectContents   ::=    Ignore ('<![' ignoreSectContents ']]>' Ignore)*
[65]   Ignore   ::=    Char* - (Char* ('<![' | ']]>') Char*)

Ограничение правильности: Proper Conditional Section/PE Nesting

Если "<![", "[" или "]]>" секции условий содержится в замещающем тексте для ссылки на мнемонику параметра, то все они обязаны содержаться в одном замещающем тексте.

Подобно внешним и внутренним поднаборам ОТД, секция условий может содержать одно или более полных объявлений, комментарии, инструкции процессинга или вложенные секции условий, перемежаемые пробелами.

Если ключевое слово в секции условий - INCLUDE, тогда содержимое секции условий ОБЯЗАНО быть обработано как часть ОТД. Если ключевое слово в секции условий - IGNORE, тогда содержимое секции условий ОБЯЗАНО НЕ обрабатываться как часть ОТД. Если секция условий с ключевым словом INCLUDE появляется внутри большей секции условий с ключевым словом IGNORE, то обе секции - внешняя и внутренняя - ОБЯЗАНЫ игнорироваться. Содержимое игнорируемой секции условий ОБЯЗАНО быть разобрано с игнорированием всех символов после "[", следующей за последующим ключевым словом, исключая начала "<![" и концы "]]>" секций условий, пока не будет достигнут соответствующий конец секции условий. Ссылки на мнемоники параметра ОБЯЗАНЫ НЕ распознаваться этим процессом.

Если ключевое слово секции условий является ссылкой на мнемонику параметра, то эта МП ОБЯЗАНА быть замещена её содержимым до того, как процессор определит, включать или игнорировать эту секцию условий.

Пример:

4 Физические структуры

[Определение: XML-документ может состоять из одной или нескольких единиц хранения. Они называются мнемониками/entities; все они имеют содержимое и все (кроме экземпляра документа и поднабора внешнего ОТД) идентифицируются именем/name мнемоники.] Каждый XML-документ имеет только одну мнемонику, называемую мнемоника документа, которая является точкой начала работы XML-процессора и может содержать весь документ.

Мнемоники могут быть разбираемыми и неразбираемыми. [Определение: Содержимое разбираемой мнемоники называется её замещающим текстом; этот текст считается неотъемлемой частью документа.]

[Определение: неразбираемая мнемоника это ресурс, чьё содержимое может, или может не быть, текстом, и, если это текст, может не быть XML. Каждая неразбираемая мнемоника имеет ассоциированную нотацию, идентифицируемую по имени. Помимо требования к процессору XML сделать идентификаторы мнемоники и нотации доступными приложению, XML не накладывает никаких ограничений на содержимое неразбираемых мнемоник.]

Разбираемые мнемоники вызываются по имени с использованием ссылок на мнемонику; неразбираемые мнемоники - по имени, заданному в значении атрибутов ENTITY или ENTITIES.

[Определение: General entities/общие мнемоники это мнемоники для использования внутри содержимого документа. В этой спецификации ОМ иногда называются неквалифицированным термином экземпляр, если это не приводит к неоднозначности.]
[Определение: мнемоники параметров это разбираемые мнемоники для использования внутри ОТД.] Эти два типа мнемоник используют разные формы ссылки и распознаются в различных контекстах. Кроме того, они занимают разные пространства имён; мнемоника параметра и общая мнемоника с одни именем - это две разные мнемоники.

4.1 Ссылки на символы и мнемоники

[Определение: ссылка на символ ссылается на специфический символ в наборе символов ISO/IEC 10646, например, ссылка на символ, не доступный напрямую из устройства ввода.]

Ссылка на символ
[66]   CharRef   ::=   '&#' [0-9]+ ';'
| '&#x' [0-9a-fA-F]+ ';'[ОПС: Legal Character]

Ограничение правильной сформированности: Legal Character

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

Если ссылка символа начинается с "&#x", цифры и буквы вплоть до конечного ; дают 16-ричное представление кодовой точки входа символа ISO/IEC 10646. Если она начинается просто с "&#", то цифры вплоть до конечного ; дают 10-ричное представление кодовой точки входа символа.

[Определение: ссылка на мнемонику ссылается на содержимое именованной мнемоники.]
[Определение: ссылки на общие разбираемые мнемоники используют амперсанд (&) и точку с запятой (;) в качестве разделителей.]
[Определение: ссылка на мнемонику параметра использует знак процента (%) и точку с запятой (;) в качестве разделителей.]

Ссылка еа мнемонику
[67]   Reference   ::=    EntityRef | CharRef
[68]   EntityRef   ::=   '&' Name ';'[ОПС: Entity Declared]
[ОП: Entity Declared]
[ОПС: Parsed Entity]
[ОПС: No Recursion]
[69]   PEReference   ::=   '%' Name ';'[ОП: Entity Declared]
[ОПС: No Recursion]
[ОПС: In DTD]

Ограничение правильной сформированности: Entity Declared

В документе без ОТД, документе только с одним внутренним поднабором ОТД, не содержащим ссылок на мнемоники параметров, или в документе со "standalone='yes'", для ссылки на мнемонику, которая не появляется внутри внешнего поднабора или мнемоники параметра, Name, заданное в ссылке на мнемонику,ОБЯЗАНО совпадать с именем в объявлении мнемоники, которое не появляется внутри внешнего поднабора или мнемоники параметра, за исключением того, что правильно сформированный документ не должен объявлять следующие мнемоники: amp, lt, gt, apos, quot. Объявление общей мнемоники обязано предшествовать любой ссылке на неё, которая появляется в значении по умолчанию в объявлении списка атрибутов.

Учтите, что непроверяющий процессор не обязательно читает и обрабатывает объявления мнемоник, появляющиеся в мнемониках параметров или во внешнем поднаборе; для таких документов правилом является то, что мнемоника, которая обязана быть объявлена, является правильно сформированным ограничением только тогда, когда standalone='yes'.

Ограничение правильности: Entity Declared

В документе с внешним поднабором или ссылкаим на внешние мнемоники параметров с "standalone='no'", Name, данное в ссылке на мнемонику, обязано совпадать с именем в объявлении мнемоники. Для целей взаимодействия правильные документы ДОЛЖНЫ объявлять мнемоники amp, lt, gt, apos и quot в форме, специфицированной в разделе 4.6 Предопределённые мнемоники. Объявление мнемоники параметра обязано предшествовать любой ссылке на него. Точно так же объявление общеё мнемоники обязано предшествовать любому объявлению списка атрибутов, содержащему значение по умолчанию с прямой или косвенной ссылкой на эту общую мнемонику.

Ограничение правильной сформированности: Parsed Entity

Ссылка на мнемонику ОБЯЗАНА НЕ содержать имя неразбираемой мнемоники. Неразбираемые мнемоники могут иметь на себя ссылку только в значениях атрибутов, объявленных как имеющие тип ENTITY или ENTITIES.

Ограничение правильной сформированности: No Recursion

Разбираемая мнемоника ОБЯЗАНА НЕ содержать рекурсивных ссылок на саму себя, прямых или косвенных.

Ограничение правильной сформированности: In DTD

Ссылки на мнемонику параметра могут появляться только в ОТД.

Примеры ссылок на символы и мнемоники:

Type <key>less-than</key> (&#x3C;) to save options.
This document was prepared on &docdate; and
is classified &security-level;.

Пример ссылки на мнемонику параметра:

<!-- declare the parameter entity "ISOLat2"... -->
<!ENTITY % ISOLat2
         SYSTEM "http://www.xml.com/iso/isolat2-xml.entities" >
<!-- ... now reference it. -->
%ISOLat2;

4.2 Объявления мнемоник

[Определение: Мнемоник объявляются так:]

Объявление мнемоники
[70]   EntityDecl   ::=    GEDecl | PEDecl
[71]   GEDecl   ::=   '<!ENTITY' S Name S EntityDef S? '>'
[72]   PEDecl   ::=   '<!ENTITY' S '%' S Name S PEDef S? '>'
[73]   EntityDef   ::=    EntityValue | (ExternalID NDataDecl?)
[74]   PEDef   ::=    EntityValue | ExternalID

Name идентифицирует мнемонику в ссылке на мнемонику или, в случае неразбираемой мнемоники, в значении атрибута ENTITY или ENTITIES. Если одна и та же мнемоника объявлена более одного раза, первое обнаруженное объявление подключается; по выбору пользователя процессор XML может выдавать предупреждение, если мнемоники объявляются несколько раз.

4.2.1 Внутренние мнемоники

[Определение: если определение мнемоники дано как EntityValue, определяемая мнемоника называется внутренней мнемоникой. При этом отсутствует отдельный физический объект хранения, и содержимое мнемонки даётся в определении.] Обратите внимание, что может понадобиться определённая обработка ссылок на символы и мнемоники в литеральном значении мнемоники для того, чтобы произвести корректный замещающий текст: см. 4.5 Конструкция замещающего текста для внутренней мнемоники.

Внутренняя мнемоника это разбираемая мнемоника.

Пример объявления внутренней мнемоники:

<!ENTITY Pub-Status "This is a pre-release of the
 specification.">

4.2.2 Внешние мнемоники

[Определение: если мнемоника не является внутренней, то она является внешней мнемоникой, объявляемой так:]

Объявление внешней мнемоники
[75]   ExternalID   ::=   'SYSTEM' S SystemLiteral
| 'PUBLIC' S PubidLiteral S SystemLiteral
[76]   NDataDecl   ::=    S 'NDATA' S Name [ОП: Notation Declared]

Если NDataDecl присутствует, то это - общая неразбираемая мнемоника; в противном случае это - разбираемая мнемоника.

Ограничение правильности: Notation Declared

Name ОБЯЗАНО совпадать с объявленным именем нотации.

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

Системные идентификаторы (и другие XML-строки, предназначенные для использования в качестве URI-ссылок) могут содержать символы, которые, в соответствии с [IETF RFC 3986], обязаны мнемонизироваться до использования URI для запроса ресурса. Мнемонизируются управляющие символы с #x0 по #x1F и #x7F (большинство из которых не может появляться в XML), пробел #x20, ограничители '<' #x3C, '>' #x3E и '"' #x22, символы '{' #x7B, '}' #x7D, '|' #x7C, '\' #x5C, '^' #x5E и '`' #x60, а также все символы более #x7F. Поскольку мнемонизация - процесс не всегда обратимый, она ОБЯЗАНА выполняться, только если абсолютно необходима, и как можно позже в цепи процессинга.
В особенности процесс конвертации отностельных URI в абсолютные и процесс передачи URI-ссылки в процесс или компонент программы, отвечающий за разыменование ссылок, ДОЛЖНЫ включать процесс мнемонизации. При возникновении мнемонизации, она ОБЯЗАНА выполняться так:

  1. Каждый мнемонизируемый символ представляется в UTF-8 [Unicode3] в виде одного или нескольких байтов.

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

  3. Символ-оригинал заменяется на результирующую последовательность символов.

[Определение: В дополнение к системному идентификатору, внешний идентификатор может включать публичный идентификатор.] 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 >

4.3 Разбираемые мнемоники

4.3.1 Объявление текста

Каждая внешняя разбираемая мнемоника должна начинаться с объявления текста.

Объявление текста
[77]   TextDecl   ::=   '<?xml' VersionInfo? EncodingDecl S? '?>'

Объявление текста ОБЯЗАНО быть дано литерально, а не по ссылке на разбираемую мнемонику. Объявление текста ОБЯЗАНО НЕ появляться в иной позиции, кроме начала внешней разбираемой мнемоники. Объявление текста во внешней разбираемой мнемонике не считается частью её замещающего текста.

4.3.2 Правильно сформированные разбираемые мнемоники

Мнемоника документа является правильно сформированной, если она совпадает с помеченным продуктом документом. Внешняя общая разбираемая мнемоника является правильно сформированной, если она совпадает с помеченным продуктом extParsedEnt. Все внешние мнемоники параметров являются правильно сформированными по определению.

Примечание:

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

Правильно сформированная внешняя разбираемая мнемоника
[78]   extParsedEnt   ::=    TextDecl? content

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

Следствием правильной сформированности мнемоник является то, что логические и физические структуры в XML-документе соответствующим образом вкладываются; ни начальный, ни конечный тэг, ни тэг пустого элемента, элемент, комментарий, инструкция процесса, символьная ссылка или ссылка на мнемонику не могут начинаться в однй мнемонике, а заканчиваться - в другой.

4.3.3 Кодировка символов в мнемониках

Каждая внешняя разбираемая мнемоника в XML-документе может использовать свою кодировку символов. Все XML-процессорыОБЯЗАНЫ "уметь" прочесть мнемоники кодировок UTF-8 и UTF-16. Термины "UTF-8" и "UTF-16" в данной спецификации не применяются к кодировкам символов с другими названиями, даже если кодировки или названия очень похожи на UTF-8 или UTF-16.

Мнемоники, кодированные в UTF-16, ОБЯЗАНЫ начинаться с Byte Order Mark (Знака Байтового Порядка), описанного в Annex H [ISO/IEC 10646-2000], раздел 2.4 [Unicode] и раздел 2.7 [Unicode3] (символа ZERO WIDTH NO-BREAK SPACE/ НЕРАЗРЫВАЮЩИЙ ПРОБЕЛ НУЛЕВОЙ ШИРИНЫ, #xFEFF). Это "подпись" кодировки, но не часть разметки или символьных данных XML-документа. Процессоры XML обязаны уметь использовать этот символ для различения документов, кодированных в UTF-8 и UTF-16.

Хотя процессор XML-процессор должен читать только мнемоники в кодировках UTF-8 и UTF-16, известно, что повсюду используются другие кодировки, и для XML-процессоров желательно умение читать мнемоники, использующие эти (другие) кодировки. При отсутствии внешней информации о кодировке символов (такой как "заголовки" MIME), разбираемые мнемоники, хранящиеся в кодировках, отличных от UTF-8 или UTF-16, ОБЯЗАНЫ начинаться с объявления текста (см. 4.3.1 Объявление Текста), содержащего объявление кодировки:

Объявление кодировки
[80]   EncodingDecl   ::=    S 'encoding' Eq ('"' EncName '"' | "'" EncName "'" )
[81]   EncName   ::=   [A-Za-z] ([A-Za-z0-9._] | '-')*/* Имя кодировки содержит только символы латиницы */

В мнемонике документа объявление кодировки является частью объявления XML. EncName это название/имя используемой кодировки.

В объявлении кодировки значения "UTF-8", "UTF-16", "ISO-10646-UCS-2" и "ISO-10646-UCS-4" ДОЛЖНЫ использоваться для различных кодировок и трансформаций Unicode / ISO/IEC 10646, значения "ISO-8859-1", "ISO-8859-2", ... "ISO-8859-n" (где n это номер части) ДОЛЖНЫ использоваться для частей ISO 8859, а значения "ISO-2022-JP", "Shift_JIS" и "EUC-JP" должны использоваться для различных форм JIS X-0208-1997. РЕКОМЕНДУЕТСЯ, чтобы кодировки символов, зарегистрированные (как charsets\наборы символов) в Internet Assigned Numbers Authority [IANA-CHARSETS], и отличающиеся от уже перечисленных, именовались с использованием их зарегистрированных имён; другие кодировки ДОЛЖНЫ использовать имена, начинающиеся с префикса "x-". Процессоры XML должны подбирать имена кодировок символов нечувствительным к регистру способом и ДОЛЖНЫ интерпретировать зарегистрированное IANA имя как кодировку, зарегистрированную в IANA для этого имени, или рассматривать её как неизвестную (от процессоров, разумеется, не требуется поддерживать все зарегистрированные IANA кодировки).

В отсутствие информации, предоставляемой внешним транспортным протоколом (например, HTTP или MIME), фатальной ошибокой будет для мнемоники, включая объявление кодировки, будет представление XML-процессором в кодировке, отличной от указанной в объявлении, или использование для мнемоники, не начинающейся Byte Order Mark либо объявлением кодировки, использование кодировки отличной от UTF-8. Заметьте, что, поскольку ASCII является поднабором UTF-8, обычные ASCII-мнемоники не требуют в обязательном порядке наличия объявления кодировки.

Является фатальной ошибкой, если TextDecl появится в ином месте, кроме начала внешней мнемоники.

Является фатальной ошибкой, если XML-процессор обнаруживает мнемонику с кодировкой, которую невозможно обработать. Является фатальной ошибкой, если XML-мнемоника определена (в значениях по умолчанию, в объявлении кодировки или высокоуровневым протоколом) в определённой кодировке, но содержит байтовые последовательности, которые не являются разрешёнными в указанной кодировке. Фатальной ошибкой считается, если мнемоника, кодированная в UTF-8, содержит нерегулярные кодовые последовательности, как определено в Unicode 3.1 [Unicode3]. Если кодировка не определена высокоуровневым протоколом, будет также фатальной ошибкой, если XML-мнемоника не содержит объявления кодировки, и его содержимое не является UTF-8 или UTF-16.

Примеры объявлений текста, содержащие объявления кодировки:

<?xml encoding='UTF-8'?>
<?xml encoding='EUC-JP'?>

4.4 Обработка мнемоник и ссылок XML-процессором

В таблице, приведённой ниже, суммирована контексты, в которых символьные ссылки, ссылки на мнемоники и вызовы неразбираемых мнемоник могут появляться, и ТРЕБУЕМОЕ поведение XML-процессора в каждом случае. Метки в самом левом столбце описывают контекст распознавания:

ссылка в содержимом

как ссылка где-либо после начального тэга и перед конечным тэгом элемента; соответствует нетерминальному содержимому.

ссылка в значении атрибута

как ссылка или в значении атрибута в начальном тэге, или как значение по умолчанию в объявлении атрибута; соответствует нетерминальному AttValue.

появляется как значение атрибута

как Name, не ссылка, появляющееся или как значение атрибута, который объявлен как тип ENTITY, или как одна из трёх разделённых пробелами лексем - в значении атрибута, который объявлен как тип ENTITIES.

ссылка в значении экземпляра

как ссылка в литеральном значении экземпляра в объявлении экземпляр параметра или внутреннего экземпляра; соответствует нетерминальному EntityValue.

ссылка в ОТД

как ссылка внутри внешнего или внутреннего поднабора ОТД, но вне EntityValue, AttValue, PI, Comment, SystemLiteral, PubidLiteral или содержимого игнорируемой разделом условий (см. 3.4 Разделы условий).

Тип Мнемоники Символ
Параметр
 
Внутренний Общий Внешний Разбираемый Общий Неразбираемый
 
Ссылка в содержимом не распознаётся включена включается, если проверяется запрещена включена
Ссылка в значении атрибута не распознаётся включена в литерал запрещена запрещена включена
Появляется как значение атрибута не распознаётся запрещена запрещена уведомление не распознаётся
Ссылка в значении мнемоники включена в литерал пропущена пропущен ошибка включена
Ссылка в ОТД включена как мнемоника параметра запрещена запрещена запрещена запрещена

4.4.1 Не распознаётся

Вне ОТД символ % не имеет специального значения; таким образом, то, что может быть ссылкой на мнемонику параметра в ОТД, не распознаётся как разметка в содержимом. Таким же образом, имена неразбираемых мнемоник не распознаются, за исключением тех случаев, когда они появляются в значении соответственно объявленного атрибута.

4.4.2 Включена

[Определение: мнемоника включена, если её замещающий текст запрашивается и обрабатывается вместо самой ссылки, если она даже и является частью документа в том месте, где ссылка была распознана.] Замещающий текст может содержать и символьные данные, и (за исключением мнемоник параметров) разметку, которая ОБЯЗАНА распознаваться обычным способом. (Строка "AT&amp;T;" расширяется до "AT&T;" и оставшийся амперсанд не распознаётся как ограничитель ссылки на мнемонику.) Ссылка на символ включается, если указанный символ обрабатывается вместо самой ссылки.

4.4.3 Включается, если проверяется

Если XML-процессор обнаруживает ссылку на разбираемую мнемонику, то, для того чтобы проверить документ, процессор ОБЯЗАН включить её (мнемоники) замещающий текст. Если мнемоника является внешней, а процессор не пытается проверить XML-документ, то процессор МОЖЕТ, но не обязательно, включить замещающий текст мнемоники. Если непроверяющий процессор не включает замещающий текст, он ОБЯЗАН информировать приложение, что он распознал, но не прочитал мнемонику.

Это правило базируется на том, что автоматическое распознавание, предоставляемое механизмом мнемоник SGML и XML, первоначально созданным для поддержки модульности в авторизации, не обязательно подходит для других приложений, особенно для просмотра документов. Браузеры, например, при обнаружении ссылки на внешнюю разбираемую мнемонику, могут избрать визуальное предупреждение о существовании мнемоники, и запрашивать её для отображения только по требованию.

4.4.4 Запрещена

Следующее запрещено и вызывает фатальные ошибки:

  • появление ссылки на неразбираемую мнемонику, за исключением EntityValue в объявлении мнемоники;

  • появление любого символа ил ссылки на общую мнемонику в ОТД, за исключением EntityValue или AttValue;

  • ссылка на внешнюю мнемонику в значении атрибута.

4.4.5 Включена в литерал

Если ссылка на мнемонику появляется в значении атрибута или ссылка на мнемонику параметра появляется в литеральном значении мнемоники, то замещающий текст ОБЯЗАН обрабатываться вместо самой ссылки, как будто он является частью документа в том месте, где ссылка была обнаружена, за исключением того, что символ одарной или двойной кавычки в замещающем тексте всегда ОБЯЗАН всегда рассматриваться как нормальный символ данных и ОБЯЗАН НЕ заканчивать литерал. Например, это сформировано правильно:

<!ENTITY % YN '"Yes"' >
<!ENTITY WhatHeSaid "He said %YN;" >

а это - неправильно:

<!ENTITY EndAttr "27'" >
<element attribute='a-&EndAttr;>

4.4.6 Уведомление

Если имя неразбираемой мнемоники появляется как лексема в значении атрибута объявленного типа ENTITY или ENTITIES, то проверяющий процессор ОБЯЗАН информировать приложение о системных и публичных (если имеются) идентификаторах мнемоники и её ассоциированной нотации.

4.4.7 Пропущена

Если ссылка на общий экземпляр появляется в EntityValue в объявлении мнемоники, то она пропускается и остаётся как есть.

4.4.8 Включена как мнемоника параметра (МП)

Точно так же, как и в случае с внешней разбираемой мнемоникой, мнемоники параметров должны быть лишь включены, если проверяются. Если ссылка на мнемонику параметра распознаётся в ОТД и включается, то её (мнемоники) замещающий текст расширяется путём присоединения одного ведущего и одного ведомого пробела (#x20); целью является - ограничить для замещающего текста мнемоники параметра возможность содержать интегральное число грамматических лексем в ОТД. Это поведение ОБЯЗАНО НЕ применяться к ссылкам на мнемоники параметра внутри значений мнемоник; это описано в 4.4.5 Включена в литерал.

4.4.9 Ошибка

Считается ошибкой, если ссылка на неразбираемую мнемонику появится в EntityValue в объявлении мнемоники.

4.5 Конструкция замещающего текста для Внутренней Мнемоники

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

Литеральное значение мнемоники, данное в объявлении внутренней мнемоники (EntityValue), может содержать ссылки на символы, мнемоники параметров и общую мнемонику. Такие ссылки ОБЯЗАНЫ содержаться полностью внутри литерального значения мнемоники. Реальный замещающий текст, который включается (или включается в литерал) так, как описано выше, ОБЯЗАН содержать замещающий текст любой мнемоники параметра, на которую имеется ссылка, и ОБЯЗАН содержать символ, на который имеется ссылка, вместо любых ссылок на символы в литеральном значении мнемоники; однако на ссылки общую мнемонику ОБЯЗАНЫ быть оставлены без изменений, неразвёрнутыми. Например, если имеется следующее объявление:

<!ENTITY % pub    "&#xc9;ditions Gallimard" >
<!ENTITY   rights "All rights reserved" >
<!ENTITY   book   "La Peste: Albert Camus,
&#xA9; 1947 %pub;. &rights;" >

то замещающий текст для мнемоники "book" будет:

La Peste: Albert Camus,
В© 1947 Г‰ditions Gallimard. &rights;

Ссылка на общую мнемонику "&rights;", которая должна быть развёрнута, заставляет ссылку "&book;" появиться в содержимом документа или в значении атрибута.

Эти простые правила могут приводить к сложному взаимодействию; детальное обсуждение сложного примера см. в разделе D Развёртывание ссылок на мнемоники и символы

4.6 Предопределённые мнемоники

[Определение: ссылки на мнемоники м символы могут использоваться для мнемонизации/еscape левой угловой скобки, амперсанда и других ограничителей. Для этих целей специфицирован набор общих мнемоник (amp, lt, gt, apos, quot). Цифровые мнемоники могут также использоваться; они развёртываются сразу при обнаружении и ОБЯЗАНЫ рассматриваться как символьные данные, так что цифровые мнемоники "&#60;" и "&#38;" могут использоваться для мнемонизации < и &, если эти знаки появляются в символьных данных.]

Все XML-процессоры ОБЯЗАНЫ распознавать эти мнемоники независимо от того, объявлены они, или нет. Для целей взаимодействия правильные XML-документы должны объявлять эти мнемоники, как и любые другие, до их использования. Если мнемоники lt или amp объявляются, то они ОБЯЗАНЫ быть объявлены как внутренние мнемоники, чей замещающий текст является ссылкой на соответствующий символ (знак "меньше-чем" или амперсанд), который мнемонизируется; для этих экземпляров ТРЕБУЕТСЯ двойная мнемонизация, чтобы получить правильно сформированный результат. Если мнемоники gt, apos или quot объявляются, они ОБЯЗАНЫ быть объявлены как внутренние мнемоники, чей замещающий текст представляет из себя одиночный мнемонизируемый символ (или символьную ссылку на этот символ; двойная мнемонизация ОПЦИОННА, но и не повредит). Например:

<!ENTITY lt     "&#38;#60;">
<!ENTITY gt     "&#62;">
<!ENTITY amp    "&#38;#38;">
<!ENTITY apos   "&#39;">
<!ENTITY quot   "&#34;">

4.7 Объявления нотации

[Определение: нотации идентифицируют по имени формат неразбираемых мнемоник, формат элементов, которые породили атрибут нотации, или приложение, которому адресуется инструкция процессинга.]

[Определение: объявления нотации предоставляют имя нотации для использования в объявлениях мнемоники и списка атрибутов и в спецификациях атрибутов, а также внешний идентификатор для нотации, который может позволить XML-процессору или его клиентскому приложению локализовать вспомогательное приложение, способное обработать данные в этой нотации.]

Объявления нотации
[82]   NotationDecl   ::=   '<!NOTATION' S Name S (ExternalID | PublicID) S? '>'[ОП: Unique Notation Name]
[83]   PublicID   ::=   'PUBLIC' S PubidLiteral

Ограничение правильности: Unique Notation Name

Данное Имя/Name ОБЯЗАНО быть объявлено не более чем в одном объявлении нотации.

XML-процессоры ОБЯЗАНЫ предоставлять приложениям имена и внешний(е) идентификатор(ы) любой объявленной нотации, на которую есть ссылки в значении атрибута, определении атрибута или в объявлении мнемоники. Дополнительно они (процессоры) МОГУТ разворачивать внешний идентификатор в системный идентификатор, имя файла или другую информацию, необходимую для того, чтобы дать приложению возможность вызывать процессор для данных в описанной нотации. (Не является ошибкой, для XML-документов, объявление и обращение к нотациям, для которых специфическое для каждой нотации приложение недоступно в системе, где XML-процессор или приложение запущены и работают.)

4.8 Мнемоника документа

[Определение: мнемоника документа служит корневым объектом дерева мнемоник и стартовой точкой для XML-процессора.] Данная спецификация не определяет, как мнемоника документа локализуется XML-процессором; в отличие от других мнемоник, мнемоника документа не имеет имени и может даже появиться во входном потоке процессора вообще без идентификации.

5 Соответствие

5.1 Проверяющие и непроверяющие процессоры

Соответствующие XML-процессоры делятся на два класса: проверяющие и непроверяющие.

Проверяющие и непроверяющие процессоры оба ОБЯЗАНЫ выводить сообщения о нарушениях ограничений правильно сформированности данной спецификации в содержимом мнемоники документа и любых других разбираемых мнемониках, которые они читают.

[Определение: проверяющие процессоры ОБЯзАНЫ, по выбору пользователя, сообщать о нарушениях ограничений, выраженных объявлениями в ОТД, и невозможности выполнения ограничений правильности, данных в этой спецификации.] Чтобы выполнить это, проверяющие XML-процессоры ОБЯЗАНЫ читать и обрабатывать всё ОТД и все внешние разбираемые мнемоники, на которые имеются ссылки в документе.

От непроверяющих процессоров ТРЕБУЕТСЯ лишь проверить мнемонику документа, включая весь внутренний поднабор ОТД, на предмет правильного формирования.

[Определение: Поскольку не требуется проверять документ на правильность/верность, ТРЕБУЕТСЯ обработать все объявления, прочитанные во внутреннем поднаборе ОТД и во всех мнемониках параметров, которые прочитаны, до первой ссылки на мнемонику параметра, который не прочитан; то есть информация в этих объявлениях ОБЯЗАНА использоваться для нормализации значений атрибутов, включения замещающего текста внутренних мнемоник, и поддержки значений по умолчанию в атрибутах.] Исключая случай standalone="yes", непроверяющие процессоры ОБЯЗАНЫ НЕ обрабатывать объявления мнемоник или объявления списков атрибутов, обнаруженные после ссылки на мнемонику параметра, который не прочитан, поскольку эта мнемоника может содержать переопределяющие объявления; когда standalone="yes", процессоры ОБЯЗАНЫ обрабатывать эти объявления.

Обратите внимание, что при обработке неправильных документов непроверяющим процессором приложение может не получить достоверную информацию. Например, несколько требований уникальности внутри документа могут быть не выполнены, если вставляются более одного элемента с одним id, дублируются объявления элементов или нотаций с тем же именем etc. В этих случаях поведение разборщика, касательно сообщения такой информации приложению, не определено.

5.2 Использование XML-процессоров

Поведение проверяющего XML-процессора в высшей степени предсказуемо: он обязан читать каждый участок документа и сообщать обо всех нарушениях правильной сформированности и проверки. Требования к непроверяющему процессору ниже: он не должен читать части документа, кроме мнемоники документа. Здесь отметим два момента, которые могут быть важны для пользователей XML-процессоров:

Для максимального обеспечения надёжности взаимодействия между различными XML-процессорами, приложения, использующие непроверяющие процессоры, не должны полагаться на поведение, не обязательное для таких процессоров. Приложения, требующие использования возможностей ОТД, не относящихся к проверке (таких как объявление атрибутов по умолчанию и внутренние мнемоники, которые являются или могут быть специфицированы во внешних мнемониках) ДОЛЖНЫ использовать проверяющие XML-процессоры.

6 Нотация

Формальная грамматика XML лана в данной спецификации с использованием простой нотации Extended Backus-Naur Form (EBNF). Каждое правило этой грамматики определяет один символ в форме

Символы записываются с заглавной буквы, если они являются начальным символом языка, в ином случае - с начальной буквы в нижнем регистре. Литерные строки заключены в кавычки.

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

#xN

где N это 16-ричное целое, выражение соответствует символу, номер которого (кодовая точка) в ISO/IEC 10646 равно N. Количество ведущих нулей в форме #xN не имеет значения.

[a-zA-Z], [#xN-#xN]

соответствует любому Char со значением в обозначенном диапазоне(ах) (включительно).

[abc], [#xN#xN#xN]

соответствует любому Char со значением из перечисленных символов. Перечисления и диапазоны могут быть объединены внутри одного набора скобок.

[^a-z], [^#xN-#xN]

соответствует любому Char со значением вне указанного диапазона.

[^abc], [^#xN#xN#xN]

соответствует любому Char со значением не из указанных символов. Перечисления и диапазоны запрещённых значений могут быть объединены внутри одного набора скобок.

"string"

соответствует литеральной строке, совпадающей с той, которая дана внутри двойных кавычек.

'string'

соответствует литеральной строке, совпадающей с той, которая дана внутри одинарных кавычек.

Эти символы могут комбинироваться для составления более сложных блоков (патэрнов), как показано ниже, где A и B обозначают простые выражения:

(expression/выражение)

expression рассматривается как модуль и может комбинироваться так, как описано в этом списке.

A?

соответствует A или ничему; опционное A (по выбору).

A B

соответствует A с последующим B. Эта операция имеет более высокий приоритет, чем выбор; таким образом, A B | C D идентично (A B) | (C D).

A | B

соответствует A или B.

A - B

соответствует любой строке, которая совпадает с A, но не совпадает с B.

A+

соответствует одному или более вхождению A. Конкатенация имеет более высокий приоритет, чем выбор; таким образом, A+ | B+ идентично (A+) | (B+).

A*

соответствует 0 или более вхождений A. Конкатенация имеет более высокий приоритет, чем выбор; таким образом A* | B* идентично (A*) | (B*).

Другие нотации, используемые в продуктах:

/* ... */

комментарий.

[ wfc: ... ]

well-formedness constraint - ограничение правильной сформированности; идентифицирует по имени ограничение правильно сформированных документов, ассоциированных с продуктом.

[ vc: ... ]

validity constraint - ограничение правильности; идентифицирует по имени ограничение правильных (верных) документов, ассоциированных с продуктом.

 

A Ссылки

A.1 Нормативные ссылки

IANA-CHARSETS
(Internet Assigned Numbers Authority) Official Names for Character Sets, ed. Keld Simonsen et al. (See http://www.iana.org/assignments/character-sets.)
IETF RFC 2119
IETF (Internet Engineering Task Force). RFC 2119: Key words for use in RFCs to Indicate Requirement Levels. Scott Bradner, 1997. (See http://www.ietf.org/rfc/rfc2119.txt.)
IETF RFC 3066
IETF (Internet Engineering Task Force). RFC 3066: Tags for the Identification of Languages, ed. H. Alvestrand. 2001. (See http://www.ietf.org/rfc/rfc3066.txt.)
IETF RFC 3986
IETF (Internet Engineering Task Force). RFC 3986: Uniform Resource Identifier (URI): Generic Syntax. T. Berners-Lee, R. Fielding, L. Masinter. 2005. (See http://www.ietf.org/rfc/rfc3986.txt.)
ISO/IEC 10646
ISO (International Organization for Standardization). ISO/IEC 10646-1:2000. Information technology — Universal Multiple-Octet Coded Character Set (UCS) — Part 1: Architecture and Basic Multilingual Plane and ISO/IEC 10646-2:2001. Information technology — Universal Multiple-Octet Coded Character Set (UCS) — Part 2: Supplementary Planes, as, from time to time, amended, replaced by a new edition or expanded by the addition of new parts. [Geneva]: International Organization for Standardization. (See http://www.iso.ch for the latest version.)
ISO/IEC 10646:2000
ISO (International Organization for Standardization). ISO/IEC 10646-1:2000. Information technology — Universal Multiple-Octet Coded Character Set (UCS) — Part 1: Architecture and Basic Multilingual Plane. [Geneva]: International Organization for Standardization, 2000.
Unicode
The Unicode Consortium. The Unicode Standard, Version 2.0. Reading, Mass.: Addison-Wesley Developers Press, 1996.
Unicode3
The Unicode Consortium. The Unicode Standard, Version 3.2, defined by: The Unicode Standard, Version 3.0 (Reading, MA, Addison-Wesley, 2000. ISBN 0-201-61633-5), as amended by the Unicode Standard Annex #27: Unicode 3.1 (http://www.unicode.org/reports/tr27) and the Unicode Standard Annex #28: Unicode 3.2 (http://www.unicode.org/reports/tr28).

A.2 Прочие ссылки

Aho/Ullman
Aho, Alfred V., Ravi Sethi, and Jeffrey D. Ullman. Compilers: Principles, Techniques, and Tools. Reading: Addison-Wesley, 1986, rpt. corr. 1988.
Brüggemann-Klein
Brüggemann-Klein, Anne. Formal Models in Document Processing. Habilitationsschrift. Faculty of Mathematics at the University of Freiburg, 1993. (See ftp://ftp.informatik.uni-freiburg.de/documents/papers/brueggem/habil.ps.)
Brüggemann-Klein and Wood
Brüggemann-Klein, Anne, and Derick Wood. Deterministic Regular Languages. UniversitГ¤t Freiburg, Institut für Informatik, Bericht 38, Oktober 1991. Extended abstract in A. Finkel, M. Jantzen, Hrsg., STACS 1992, S. 173-184. Springer-Verlag, Berlin 1992. Lecture Notes in Computer Science 577. Full version titled One-Unambiguous Regular Languages in Information and Computation 140 (2): 229-253, February 1998.
Clark
James Clark. Comparison of SGML and XML. (See http://www.w3.org/TR/NOTE-sgml-xml-971215.)
IANA-LANGCODES
(Internet Assigned Numbers Authority) Registry of Language Tags, ed. Keld Simonsen et al. (See http://www.iana.org/assignments/language-tags.)
IETF RFC 2141
IETF (Internet Engineering Task Force). RFC 2141: URN Syntax, ed. R. Moats. 1997. (See http://www.ietf.org/rfc/rfc2141.txt.)
IETF RFC 3023
IETF (Internet Engineering Task Force). RFC 3023: XML Media Types. eds. M. Murata, S. St.Laurent, D. Kohn. 2001. (See http://www.ietf.org/rfc/rfc3023.txt.)
IETF RFC 2781
IETF (Internet Engineering Task Force). RFC 2781: UTF-16, an encoding of ISO 10646, ed. P. Hoffman, F. Yergeau. 2000. (See http://www.ietf.org/rfc/rfc2781.txt.)
ISO 639
(International Organization for Standardization). ISO 639:1988 (E). Code for the representation of names of languages. [Geneva]: International Organization for Standardization, 1988.
ISO 3166
(International Organization for Standardization). ISO 3166-1:1997 (E). Codes for the representation of names of countries and their subdivisions — Part 1: Country codes [Geneva]: International Organization for Standardization, 1997.
ISO 8879
ISO (International Organization for Standardization). ISO 8879:1986(E). Information processing — Text and Office Systems — Standard Generalized Markup Language (SGML). First edition — 1986-10-15. [Geneva]: International Organization for Standardization, 1986.
ISO/IEC 10744
ISO (International Organization for Standardization). ISO/IEC 10744-1992 (E). Information technology — Hypermedia/Time-based Structuring Language (HyTime). [Geneva]: International Organization for Standardization, 1992. Extended Facilities Annexe. [Geneva]: International Organization for Standardization, 1996.
WEBSGML
ISO (International Organization for Standardization). ISO 8879:1986 TC2. Information technology — Document Description and Processing Languages. [Geneva]: International Organization for Standardization, 1998. (See http://www.sgmlsource.com/8879/n0029.htm.)
XML Names
Tim Bray, Dave Hollander, and Andrew Layman, editors. Namespaces in XML. Textuality, Hewlett-Packard, and Microsoft. World Wide Web Consortium, 1999. (See http://www.w3.org/TR/REC-xml-names/.)

B Классы символов

Следуя характеристикам, определённым в стандарте Unicode, символы классифицируются как базовые символы (помимо прочих, сюда включены алфавитные символы латинского алфавита), идеографические символы и комбинированные символы (помимо прочих, этот класс содержит большинство диакритических знаков). Цифры и расширители также выделены.

Characters/Символы
[84]   Letter   ::=    BaseChar | Ideographic
[85]   BaseChar   ::=   [#x0041-#x005A] | [#x0061-#x007A] | [#x00C0-#x00D6] | [#x00D8-#x00F6] | [#x00F8-#x00FF] | [#x0100-#x0131] | [#x0134-#x013E] | [#x0141-#x0148] | [#x014A-#x017E] | [#x0180-#x01C3] | [#x01CD-#x01F0] | [#x01F4-#x01F5] | [#x01FA-#x0217] | [#x0250-#x02A8] | [#x02BB-#x02C1] | #x0386 | [#x0388-#x038A] | #x038C | [#x038E-#x03A1] | [#x03A3-#x03CE] | [#x03D0-#x03D6] | #x03DA | #x03DC | #x03DE | #x03E0 | [#x03E2-#x03F3] | [#x0401-#x040C] | [#x040E-#x044F] | [#x0451-#x045C] | [#x045E-#x0481] | [#x0490-#x04C4] | [#x04C7-#x04C8] | [#x04CB-#x04CC] | [#x04D0-#x04EB] | [#x04EE-#x04F5] | [#x04F8-#x04F9] | [#x0531-#x0556] | #x0559 | [#x0561-#x0586] | [#x05D0-#x05EA] | [#x05F0-#x05F2] | [#x0621-#x063A] | [#x0641-#x064A] | [#x0671-#x06B7] | [#x06BA-#x06BE] | [#x06C0-#x06CE] | [#x06D0-#x06D3] | #x06D5 | [#x06E5-#x06E6] | [#x0905-#x0939] | #x093D | [#x0958-#x0961] | [#x0985-#x098C] | [#x098F-#x0990] | [#x0993-#x09A8] | [#x09AA-#x09B0] | #x09B2 | [#x09B6-#x09B9] | [#x09DC-#x09DD] | [#x09DF-#x09E1] | [#x09F0-#x09F1] | [#x0A05-#x0A0A] | [#x0A0F-#x0A10] | [#x0A13-#x0A28] | [#x0A2A-#x0A30] | [#x0A32-#x0A33] | [#x0A35-#x0A36] | [#x0A38-#x0A39] | [#x0A59-#x0A5C] | #x0A5E | [#x0A72-#x0A74] | [#x0A85-#x0A8B] | #x0A8D | [#x0A8F-#x0A91] | [#x0A93-#x0AA8] | [#x0AAA-#x0AB0] | [#x0AB2-#x0AB3] | [#x0AB5-#x0AB9] | #x0ABD | #x0AE0 | [#x0B05-#x0B0C] | [#x0B0F-#x0B10] | [#x0B13-#x0B28] | [#x0B2A-#x0B30] | [#x0B32-#x0B33] | [#x0B36-#x0B39] | #x0B3D | [#x0B5C-#x0B5D] | [#x0B5F-#x0B61] | [#x0B85-#x0B8A] | [#x0B8E-#x0B90] | [#x0B92-#x0B95] | [#x0B99-#x0B9A] | #x0B9C | [#x0B9E-#x0B9F] | [#x0BA3-#x0BA4] | [#x0BA8-#x0BAA] | [#x0BAE-#x0BB5] | [#x0BB7-#x0BB9] | [#x0C05-#x0C0C] | [#x0C0E-#x0C10] | [#x0C12-#x0C28] | [#x0C2A-#x0C33] | [#x0C35-#x0C39] | [#x0C60-#x0C61] | [#x0C85-#x0C8C] | [#x0C8E-#x0C90] | [#x0C92-#x0CA8] | [#x0CAA-#x0CB3] | [#x0CB5-#x0CB9] | #x0CDE | [#x0CE0-#x0CE1] | [#x0D05-#x0D0C] | [#x0D0E-#x0D10] | [#x0D12-#x0D28] | [#x0D2A-#x0D39] | [#x0D60-#x0D61] | [#x0E01-#x0E2E] | #x0E30 | [#x0E32-#x0E33] | [#x0E40-#x0E45] | [#x0E81-#x0E82] | #x0E84 | [#x0E87-#x0E88] | #x0E8A | #x0E8D | [#x0E94-#x0E97] | [#x0E99-#x0E9F] | [#x0EA1-#x0EA3] | #x0EA5 | #x0EA7 | [#x0EAA-#x0EAB] | [#x0EAD-#x0EAE] | #x0EB0 | [#x0EB2-#x0EB3] | #x0EBD | [#x0EC0-#x0EC4] | [#x0F40-#x0F47] | [#x0F49-#x0F69] | [#x10A0-#x10C5] | [#x10D0-#x10F6] | #x1100 | [#x1102-#x1103] | [#x1105-#x1107] | #x1109 | [#x110B-#x110C] | [#x110E-#x1112] | #x113C | #x113E | #x1140 | #x114C | #x114E | #x1150 | [#x1154-#x1155] | #x1159 | [#x115F-#x1161] | #x1163 | #x1165 | #x1167 | #x1169 | [#x116D-#x116E] | [#x1172-#x1173] | #x1175 | #x119E | #x11A8 | #x11AB | [#x11AE-#x11AF] | [#x11B7-#x11B8] | #x11BA | [#x11BC-#x11C2] | #x11EB | #x11F0 | #x11F9 | [#x1E00-#x1E9B] | [#x1EA0-#x1EF9] | [#x1F00-#x1F15] | [#x1F18-#x1F1D] | [#x1F20-#x1F45] | [#x1F48-#x1F4D] | [#x1F50-#x1F57] | #x1F59 | #x1F5B | #x1F5D | [#x1F5F-#x1F7D] | [#x1F80-#x1FB4] | [#x1FB6-#x1FBC] | #x1FBE | [#x1FC2-#x1FC4] | [#x1FC6-#x1FCC] | [#x1FD0-#x1FD3] | [#x1FD6-#x1FDB] | [#x1FE0-#x1FEC] | [#x1FF2-#x1FF4] | [#x1FF6-#x1FFC] | #x2126 | [#x212A-#x212B] | #x212E | [#x2180-#x2182] | [#x3041-#x3094] | [#x30A1-#x30FA] | [#x3105-#x312C] | [#xAC00-#xD7A3]
[86]   Ideographic   ::=   [#x4E00-#x9FA5] | #x3007 | [#x3021-#x3029]
[87]   CombiningChar   ::=   [#x0300-#x0345] | [#x0360-#x0361] | [#x0483-#x0486] | [#x0591-#x05A1] | [#x05A3-#x05B9] | [#x05BB-#x05BD] | #x05BF | [#x05C1-#x05C2] | #x05C4 | [#x064B-#x0652] | #x0670 | [#x06D6-#x06DC] | [#x06DD-#x06DF] | [#x06E0-#x06E4] | [#x06E7-#x06E8] | [#x06EA-#x06ED] | [#x0901-#x0903] | #x093C | [#x093E-#x094C] | #x094D | [#x0951-#x0954] | [#x0962-#x0963] | [#x0981-#x0983] | #x09BC | #x09BE | #x09BF | [#x09C0-#x09C4] | [#x09C7-#x09C8] | [#x09CB-#x09CD] | #x09D7 | [#x09E2-#x09E3] | #x0A02 | #x0A3C | #x0A3E | #x0A3F | [#x0A40-#x0A42] | [#x0A47-#x0A48] | [#x0A4B-#x0A4D] | [#x0A70-#x0A71] | [#x0A81-#x0A83] | #x0ABC | [#x0ABE-#x0AC5] | [#x0AC7-#x0AC9] | [#x0ACB-#x0ACD] | [#x0B01-#x0B03] | #x0B3C | [#x0B3E-#x0B43] | [#x0B47-#x0B48] | [#x0B4B-#x0B4D] | [#x0B56-#x0B57] | [#x0B82-#x0B83] | [#x0BBE-#x0BC2] | [#x0BC6-#x0BC8] | [#x0BCA-#x0BCD] | #x0BD7 | [#x0C01-#x0C03] | [#x0C3E-#x0C44] | [#x0C46-#x0C48] | [#x0C4A-#x0C4D] | [#x0C55-#x0C56] | [#x0C82-#x0C83] | [#x0CBE-#x0CC4] | [#x0CC6-#x0CC8] | [#x0CCA-#x0CCD] | [#x0CD5-#x0CD6] | [#x0D02-#x0D03] | [#x0D3E-#x0D43] | [#x0D46-#x0D48] | [#x0D4A-#x0D4D] | #x0D57 | #x0E31 | [#x0E34-#x0E3A] | [#x0E47-#x0E4E] | #x0EB1 | [#x0EB4-#x0EB9] | [#x0EBB-#x0EBC] | [#x0EC8-#x0ECD] | [#x0F18-#x0F19] | #x0F35 | #x0F37 | #x0F39 | #x0F3E | #x0F3F | [#x0F71-#x0F84] | [#x0F86-#x0F8B] | [#x0F90-#x0F95] | #x0F97 | [#x0F99-#x0FAD] | [#x0FB1-#x0FB7] | #x0FB9 | [#x20D0-#x20DC] | #x20E1 | [#x302A-#x302F] | #x3099 | #x309A
[88]   Digit   ::=   [#x0030-#x0039] | [#x0660-#x0669] | [#x06F0-#x06F9] | [#x0966-#x096F] | [#x09E6-#x09EF] | [#x0A66-#x0A6F] | [#x0AE6-#x0AEF] | [#x0B66-#x0B6F] | [#x0BE7-#x0BEF] | [#x0C66-#x0C6F] | [#x0CE6-#x0CEF] | [#x0D66-#x0D6F] | [#x0E50-#x0E59] | [#x0ED0-#x0ED9] | [#x0F20-#x0F29]
[89]   Extender   ::=   #x00B7 | #x02D0 | #x02D1 | #x0387 | #x0640 | #x0E46 | #x0EC6 | #x3005 | [#x3031-#x3035] | [#x309D-#x309E] | [#x30FC-#x30FE]

Классы символов, определённые здесь, могут происходить из базы символов Unicode 2.0 следующим образом:

C XML и SGML (ненормативное)

XML создан как поднабор SGML, в котором каждый XML-документ должен быть также документом, соответствующим SGML. Детальное сравнение дополнительных ограничений, которые XML помещает в документ, помимо ограничений SGML, см. в [Clark].

D Развёртывание ссылок на мнемоники и символы (ненормативное)

Это приложение содержит примеры, иллюстрирующие последовательность распознавания и развёртывания ссылок на символы и экземпляры, как специфицировано в разделе 4.4 Обработка мнемоник и ссылок XML-процессором.

Если ОТД содержит объявление

<!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>

Здесь происходит следующее:

E Детерминистические модели содержимого (ненормативное)

Как отмечено в разделе 3.2.1 Содержиме элемента, необходимо, чтобы модели содержимого в объявлении типа элемента были детерминистическими. Это требование введено для совместимости с SGML (которое называет детерминистические модели содержимого "недвусмысленными"); создание процессоров XML с использованием систем SGML может отмечать недетерминистические модели содержимого как ошибочные.

Например, модель содержимого ((b, c) | (b, d)) - недетерминистическая, потому что, при данном начальном b процессор XML не может знать, которое b в модели совпадает, без того чтобы не просмотреть всё сначала и выяснить, какой элемент идёт после b. В данном случае, две ссылки на b могут быть сжаты до одиночной, делая модель такой: (b, (c | d)). Начальное b теперь точно соответствует одному имени в модели содержимого. Процессору не нужно возвращаться к началу, что посмотреть, а что идёт затем; c или d могут быть приняты.

Более формально: автоматизация окончательного состояния может быть сконструирована из модели содержимого с использование стандартных алгоритмов, например, алгоритм 3.5 в разделе 3.9 в Aho, Sethi и Ullman [Aho/Ullman]. Во многих таких алгоритмах, добавочный набор конструируется для каждой позиции в регулярном выражении (т.е. для каждого узла-листа в дереве синтаксиса регулярного выражения); если какая-либо позиция имеет добавочный набор, в котором более чем одна добавочная позиция помечена тем же самым именем типа элемента, то модель содержимого ошибочна, и о неё может быть выведено сообщение как об ошибочной.

Существуют алгоритмы, которые позволяют автоматически редуцировать многие, но не все, недетерминистические модели содержимого до эквивалентных детерминистических моделей; см. Brüggemann-Klein 1991 [Brüggemann-Klein].

F Автоопределение кодировок символов (ненормативное)

Объявление кодировки в XML функционирует как внутренняя метка-лэйбл на каждую мнемонику, указывая, какая кодировка используется. Однако, прежде чем процессор XML сможет прочесть внутренний лэйбл, он, очевидно, должен знать, какая кодировка символов используется - та, которую внутренний лэйбл пытается пометить. В общем случае, это безвыходная ситуация. В XML она, однако, не совсем безнадёжна, поскольку XML ограничивает общий случай двумя способами: считается, что каждая реализация поддерживает только конечный набор кодировок символов, и объявление кодировки XML ограничено в местоположении и содержимом для того, чтобы сделать возможным автоопределение используемой кодировки символов для каждого экземпляра, в обычных случаях. Также во многих случаях доступны другие источники информации в дополнение к самому потоку данных XML. Можно выделить два случая, в зависимости от того, представлен ли XML-процессору экземпляр без или с какой-либо сопутствующей (внешней) информацией. Сначала рассмотрим первый случай.

F.1 Определение без внешней информации о кодировке

Поскольку не каждая мнемоника XML, сопровождаемая внешней информацией о кодировке, и не в кодировке UTF-8 или UTF-16, обязана начинаться объявлением кодировки XML, когда первые символы должны быть '<?xml', и каждый соответствующий процессор может определить, после двух или четырёх 8-ричных на входе, который из следующих вариантов применить.
При чтении этого списка может помочь знание того, что в UCS-4  '<' это "#x0000003C" и '?' это "#x0000003F" и что Byte Order Mark/Знак Порядка Байтов требуемый потоками данных UTF-16, это "#xFEFF". Нотация ## используется для обозначения любого байтового значения, за исключением того, что два последовательных ## не могут быть оба 00.

С Byte Order Mark:

00 00 FE FF UCS-4, big-endian machine (порядок 1234)
FF FE 00 00 UCS-4, little-endian machine (порядок 4321)
00 00 FF FE UCS-4, необычный 8-ричный порядок (2143)
FE FF 00 00 UCS-4, необычный 8-ричный порядок (3412)
FE FF ## ## UTF-16, big-endian
FF FE ## ## UTF-16, little-endian
EF BB BF UTF-8

Без Byte Order Mark:

00 00 00 3C UCS-4 или другая кодировка с 32-битным модулем кода и ASCII-символы, кодированные как ASCII-значения, в, соответственно, big-endian (1234), little-endian (4321) и двух необычных порядках байтов (2143 и 3412). Объявление кодировки обязано быть прочитано для того, чтобы определить, какая из UCS-4 или других поддерживаемых 32-битных кодировок применяется.
3C 00 00 00
00 00 3C 00
00 3C 00 00
00 3C 00 3F UTF-16BE, или big-endian ISO-10646-UCS-2, или другая кодировка с 16-битным модулем кода в порядке big-endian и ASCII-символы, кодированные как ASCII-значения (объявление кодировки обязано быть прочитано, чтобы определить, которая ...)
3C 00 3F 00 UTF-16LE, или little-endian ISO-10646-UCS-2, или другая кодировка с 16-битным модулем кода в порядке little-endian и ASCII-символы, кодированные как ASCII-значения (объявление кодировки обязано быть прочитано, чтобы определить, которая ...)
3C 3F 78 6D UTF-8, ISO 646, ASCII, некоторая часть ISO 8859, Shift-JIS, EUC или какой-либо другой 7-битной, 8-битной или смешанной ширины кодировка, которая гарантирует, что символы ASCII имеют свои нормальные позиции, ширину и значения; объявление действующей кодировки обязано быть прочитано для того, чтобы определить, какая из них применена, но, поскольку все эти кодировки используют одни и те же битовые последовательности для соответствующих ASCII-символов, объявление кодировки само может быть надёжно прочитано
4C 6F A7 94 EBCDIC (в некотором смысле; полное объявление кодировки обязано быть прочитано, чтобы сказать, какая кодовая страница используется)
OtherUTF-8 без объявления кодировки, иначе лэйбл с потока данных будет снят (испытывая недостаток наличия необходимого объявления кодировки), поток данных повреждён, фрагментарен или заключён в упаковку какого-либо вида

Примечание:

Для тех из вышеуказанных случаев, которые не требуют чтения объявления кодировки для определения кодировки, раздел 4.3.3, тем не менее, требует, чтобы объявление кодировки, если имеется, было прочитано и чтобы имя кодировки было отмечено, чтобы совпасть с текущей кодировкой экземпляра. Также возможно, что новые кодировки символов будут инвертироваться, что сделает необходимым использование объявления кодировки для определения кодировки в тех случаях, где это в настоящее время не требуется.

Этот уровень автоопределения достаточен для того, чтобы читать объявления кодировки XML и разбирать идентификатор кодировки символов, который пока ещё необходим для различения отдельных членов каждого семейства кодировок (например, для вызова UTF-8 из 8859 и частей 8859 одной из другой, или для различения используемой специфической кодовой страницы EBCDIC, и т. д.).

Поскольку содержимое объявления кодировки ограничено символами из репертуара ASCII (также кодируемых), процессор может надёжно читать всё объявление кодировки, как только будет определено, какое семейство кодировок используется. Поскольку на практике все широко используемые кодировки символов входят в одну из вышеуказанных категорий, объявление кодировки в XML позволяет осуществлять надёжное обозначение кодировок символов даже тогда, когда внешние источники информации на уровне операционной системы или транспортного протокола являются ненадёжными. Кодировки символов, такие как UTF-7, которая осуществляет перегружаемое использование ASCII-значащих байтов, могут не определяться достаточно надёжно.

После того, как процессор определил используемую кодировку, он может действовать соответственно, вызывая отдельную подпрограмму для каждого случая или вызывая соответствующую функцию конвертации каждого символа при вводе.

Подобно любой саморазмечающей системе, объявление кодировки XML не будет работать, если какое-либо приложение изменяет набор символов или кодировку без обновления объявления кодировки. Разработчики утилит кодировки символов должны внимательны при представлении внутренней и внешней информации, используемой для пометки экземпляра.

F.2 Приоритеты при наличии внешней информации о кодировке

Второй возможный вариант - это когда экземпляр XML сопровождается информацией о кодировке, как в некоторых файловых системах и некоторых сетевых протоколах. Если доступны несколько источников информации, их относительные приоритеты и предпочтительные методы разрешения конфликтов должны быть специфицированы как часть высокоуровневого протокола, используемого для вывода XML. Более конкретно смотрите, пожалуйста, [IETF RFC 2376] (или её последователей), которая определяет text/xml и application/xml MIME-типы и даёт определённые советы по использованию.
В целях взаимодействия, однако, рекомендуется следовать данному правилу:

  • Если XML-мнемоника находится в файле, то Byte-Order Mark и объявление кодировки используются (если имеются) для определения кодировки символов.

G W3C XML Working Group (ненормативное)

Эта спецификация была подготовлена к публикации и одобрена W3C XML Working Group (WG)/Рабочей Группой. Одобрение WG данной спецификации не обязательно означает, что все члены WG голосовали за её одобрение.

Действующие и бывшие члены XML WG:

H W3C XML Core Working Group (ненормативное)

Вторая редакция данной спецификации была подготовлена W3C XML Core Working Group (WG). Членами WG, на время публикации данной редакции, были:

I Примечание о вариантах (ненормативное)

Это Четвёртое Издание было кодировано в несколько изменённой версии XMLspec DTD, v2.10. XHTML-версии были сделаны в комбинации с XSLT-таблицами стилей xmlspec.xsl, diffspec.xsl и REC-xml.xsl.

Внимание !

Hosted by uCoz