и обработку общего языка SGML в Web так же, как сейчас это происходит с языком HTML. Язык XML разработан для упрощения реализации и взаимодействия между SGML и HTML.
Открытый язык разметки (Extensible Markup Language, сокращенно XML) описывает класс объектов данных, называемых документами XML[ISO 8879]. По конструкции документы XML являются документами, соответствующими спецификации SGML.
Документы XML состоят из единиц хранения, называемых сущностями. Сущности содержат подвергнутые или не подвергнутые анализу данные. Проанализированные данные состоят из символов, часть которых образует символьные данные, а часть - разметку. Разметкой кодируется описание макета хранения и логической структуры документа. Язык XML обеспечивает механизм наложения ограничений на макет хранения и логическую структуру.
Для чтения документов XML и обеспечения доступа к их содержимому и структуре используется программный модуль, называемый процессором XML. Считается, что процессор XML работает от лица другого модуля, называемого приложением. В настоящей спецификации описано необходимое поведение процессора XML относительно того, как он должен считывать данные XML и информации, которую он должен предоставлять приложению.
Sun Microsystems, и группа активно участвовала в работе группы XML Special Interest Group (ранее называвшейся Рабочей группой SGML), также организованной W3C. Список членов рабочей группы XML приведен в приложении. В W3C эту рабочую группу представлял Дэн Коннолли.
Цели разработки документов на языке XML следующие:
содержат всю информацию, необходимую для понимания языка XML версии 1.0 и построения компьютерных программ для его обработки.
Настоящая версия спецификации XML может свободно распространяться при условии сохранения всего текста и замечаний об авторском праве.
процессора XML:
Объект данных является документом XML, если он правильно построен в соответствии с данным в настоящей спецификации определением. well-formed документ XML может, кроме того, быть допустимым, если он соответствует некоторым дополнительным ограничениям.
Каждый документ XML имеет как логическую, так и физическую структуру. Физически документ состоит из разделов, называемых сущностями. Сущность может ссылаться на другие сущности, что приведет к их вложению в документе. Документ начинается в "корне" или сущности документа должны корректно вкладываться друг в друга, как это описано в разделе "4.3.2 Правильные анализируемые сущности".
Текстовый объект является правильно построенным документом XML, если:
document.
| Документ | ||||
|
Совпадение с продукцией document подразумевает, что:
Вследствие этого, для каждого элемента C в документе, не являющегося корневым, имеется один элемент P такой, что C находится в содержимом P, но не в содержимом любого другого элемента, находящегося в содержимом элемента P. Элемент P в этом случае называется родителем элемента C, а элемент C - дочерним элементом элемента P.
Анализируемая сущность содержит текст, последовательность символов, которая может представлять разметку или символьные данные. Символ в соответствии со стандартом ISO/IEC 10646 [ISO/IEC 10646] является неделимой единицей текста. Допустимыми являются символы табуляции, возврата каретки, перевода строки и допустимые графические символы Unicode и ISO/IEC 10646. Использование "символов совместимости", описанных в разделе 6.8 спецификации [Unicode], не рекомендуется.
| Диапазон символов | ||||||
|
Механизм кодирования точек кода символа в битовые шаблоны в различных сущностях может быть различным. Все процессоры XML должны принимать кодировки UTF-8 и UTF-16 10646; механизмы указания того, какая из этих двух кодировок используется или вовлечения других кодировок, обсуждаются ниже, в разделе "4.3.3 Кодировка символов в сущностях".
В этом разделе определяются символы, широко используемые в грамматике.
S (пустое пространство) включает один или несколько символов пробела (#x20), возврата каретки, перевода строки или табуляции.
| Пустое пространство | ||||
|
Для удобства символы подразделяются на буквы, цифры и прочие символы. Буквы включают символы алфавита или базовый силлабический символ, за которым могут следовать один или несколько объединяемых символов или идеографический символ. Полные определения конкретного символа в каждом классе приведены в приложении "Б. Классы символов".
Имя - это метка, которая начинается с буквы или одного из немногих символов пунктуации, с последующими буквами, цифрами, символами переноса, подчеркивания, двоеточиями или многоточием, которые все вместе называются символами имени. Имена, которые начинаются со строки "xml" или другой строки, совпадающей с (('X'|'x') ('M'|'m') ('L'|'l')), зарезервированы для стандартизации в данной или будущих версиях настоящей спецификации.
Примечание: Двоеточие в именах XML зарезервировано для экспериментирования с пространствами имен. Ожидается, что его значение будет стандартизовано позже, после чего документы, в которых двоеточие используется в экспериментальных целях, вероятно, нужно будет обновить. (Однако гарантии, что механизм пространств имен, принятый для XML, будет действительно использовать двоеточие как разделитель пространств имен.) На практике это означает, что авторам не следует использовать двоеточие в именах XML, кроме как в экспериментах с пространствами имен, но процессоры XML должны воспринимать двоеточие как символ имени.
Nmtoken (метка имени) представляет собой любую комбинацию символов имени.
| Имена и метки | ||||||||||||||||||||
|
EntityValue), значений атрибутов (AttValue) и внешних идентификаторов (SystemLiteral). Обратите внимание, что SystemLiteral может подвергаться разбору без поиска разметки.
| Литералы | ||||||||||||||||||||||||||||
|
Текст представляет собой смесь символьных данных и разметки. Разметка бывает в форме начальных тегов, конечных тегов, тегов пустых элементов, ссылок на сущности, ссылок на символы, комментариев, разделителей разделов CDATA, объявлений типа документа и инструкций по обработке.
Весь неразмеченный текст составляет символьные данные документа.
Амперсанд (&) и левая угловая скобка (<) могут представляться в явном виде только в качестве разделителей разметки или в комментарии, инструкции по обработке или в разделе CDATA.
Кроме того, они допустимы в литеральных значениях сущностей объявления внутренней сущности; см. "4.3.2 Правильные анализируемые сущности".
Если эти символы необходимы в другом месте, их нужно кодировать специальным образом с помощью числовых ссылок на символы или строк "&" и "<" соответственно. Правая угловая скобка (>) может представляться строкой ">" и должна, для совместимости, кодироваться с помощью комбинации ">" или ссылки на символ, если она расположена в строке "]]>" содержимого, если только эта строка не обозначает конец раздела CDATA.
символов, не включающая конечный ограничитель раздела CDATA, "]]>".
Чтобы значения атрибутов могли содержать как двойные, так и одинарные кавычки, апостроф или одинарная кавычка (') может представляться комбинацией "'", а двойная кавычка (") - комбинацией """.
| Символьные данные | ||||
|
Комментарии могут располагаться в любом месте документа вне элементов разметки; кроме того, комментарии могут располагаться в объявлении типа документа там, где это допускается грамматикой. Они не являются частью символьных данных документа; процессор XML может, но не обязан давать приложению возможность чтения текста комментариев.
Для совместимости строка "--" (двойной дефис) в комментариях встречаться не должна.
| Комментарии | ||||
|
Пример коментария:
<!-- объявления заголовка> & <тела документа> --> |
Инструкции по обработке (processing instructions, PI) для приложений могут включаться в документы.
| Инструкции по обработке | ||||||||
|
PI не являются частью символьных данных документа, они должны передаваться в приложение. PI начинаются с "назначения" (PITarget), которое используется для идентификации приложения, которому назначается инструкция. Имена назначений "XML", "xml" и т.д. зарезервированы для стандартизации в настоящей или будущих версиях спецификации. Для формального определения PI может использоваться механизм нотаций XML.
Разделы CDATA со строки "<![CDATA[" и заканчиваются строкой "]]>":
| Разделы CDATA | ||||||||||||||||
|
В разделе CDATA разметкой считаются только строка CDEnd, поэтому левые угловые скобки и амперсанды могут присутствовать там в явном виде; их не нужно (и даже нельзя) кодировать с помощью комбинаций "<" и "&". Разделы CDATA не могут быть вложенными.
Примером раздела CDATA, в котором строки "<greeting>" и "</greeting>" распознаются как символьные данные, а не разметка:
<![CDATA[<greeting>Здравствуй, мир!</greeting>]]> |
Документы XML могут и должны начинаться с объявления XML, в котором определяется версия используемого языка XML. Например, ниже приведен полный, правильно построенный, но недопустимый документ XML:
<?xml version="1.0"?> |
и точно таким же является документ:
<greeting>Здравствуй, мир!</greeting> |
Номер версии "1.0" должен использоваться для указания соответствия этой версии спецификации; значение "1.0" является ошибочным, если оно не соответствует версии настоящей спецификации. Рабочая группа XML намеревается в давать последующим версиям спецификации номера, отличные от "1.0 предоставляется как средство обеспечения автоматического распознавания версий на тот момент, когда оно потребуется. Получая документы, версию которых они не поддерживают, процессоры могут выдавать сообщение об ошибке.
структуру и на поддержку использования предопределенных единиц хранения XML предоставляет механизм объявления типа документа. Документ XML является допустимым, если с ним связано объявление типа документа и если документ соответствует выраженным в нем ограничениям.
Объявление типа документа должно располагаться до первого элемента документа.
| Пролог | ||||||||||||||||||||||||
|
Объявление типа документа XML содержит объявления разметки (или указывает на них), представляющие грамматику класса документов. Такая грамматика называется определением типа документа или DTD. Объявление типа документа может указывать на внешнее подмножество (специальный вид внешней сущности), содержащее объявления разметки, или содержать объявления разметки непосредственно во внутреннем подмножестве, либо и то и другое. DTD документа включает оба подмножества вместе.
Объявление разметки представляет собой объявление типа элемента, объявление списка атрибутов, объявление сущности или объявление нотации. Эти объявления полностью или частично могут содержаться в сущностях параметров, как описано в ограничениях формальной правильности и допустимости ниже. Более полную информацию можно найти в разделе "4. Физические структуры".
| Определение типа документа | ||||||||||||||||||
|
Объявления разметки могут полностью или частично состоять из заменяющего текста сущностей параметров. Далее в настоящей спецификации приводятся продукции для отдельных нетерминалов (elementdecl, AttlistDecl и т.д.), описывающие объявление после включения все сущности параметров.
Ограничение допустимости: Корневой тип элемента
Имя в объявлении типа документа должно соответствовать типу корневого элемента.
Ограничение допустимости: Корректное объявление/Вложение сущности параметров
Заменяющий текст сущности параметра должен быть корректно вложен в объявления разметки. То есть, если любой первый или последний символ объявления разметки (markupdecl вышк) содержится в заменяющем тексте ссылки на сущность параметров, они оба должны содержаться в одном и том же заменяющем тексте.
Ограничение формальной правильности: сущность параметров во внутреннем подмножестве
Во внутреннем подмножестве DTD ссылки на сущность параметров
markupdecl, с учетом всех пробельных символов или ссылок на сущности параметров. Однако части содержимого внешнего подмножества или внешних сущностей параметров могут условно игнорироваться с помощью конструкции условного раздела; во внутреннем подмножестве это недопустимо.
| Внешнее подмножество | ||||||||
|
Внешнее подмножество и внешние сущности параметров отличаются от внутреннего подмножества еще и тем, что в них ссылки на сущности параметров допускаются и внутри объявлений разметки, а не только между такими объявлениями.
Пример документа XML с объявлением типа документа:
<?xml version="1.0"?> |
Системный идентификатор "hello.dtd" определяет URI DTD документа.
Объявления могут даваться и локально, как в следующем примере:
<?xml version="1.0" encoding="UTF-8" ?> |
приоритет над объявлениями из внешнего подмножества.
Объявления разметки могут влиять на передачу содержимого документа из процессора XML которые оказываются внешними по отношению к сущности документа.
| Автономное объявление документа | ||||||
|
В автономном объявлении документа значение "yes" указывает на отсутствие объявлений разметки, внешних по отношению к сущности документа Значение "no" указывает на наличие или возможность наличия таких внешних объявлений разметки. Обратите внимание, что автономное объявление документа только указывает на наличие внешних объявлений; наличие в документе ссылок на внешние сущности, если эти сущности объявлены внутри, не изменяет его статуса автономного.
указано значение "no".
Любой документ XML, для которого указано standalone="no", можно алгоритмическим путем преобразовать в автономный документ, что может потребоваться для некоторых сетевых приложений.
Ограничение допустимости: Автономное объявление документа
Автономное объявление документа должно иметь значение "no", если в каком-либо из внешних объявлений разметки содержится объявление:
amp, lt, gt, apos, quot), если ссылки на эти сущности имеются в документе, или
Пример объявления XML с автономным объявлением документа:
<?xml version="1.0" standalone='yes'?> |
При редактировании документов XML часто оказывается удобным использовать "пробельные символы" (пробелы, табуляции и пустые строки, обозначаемые в настоящей спецификации нетерминалом S имеют значение и должны быть сохранены - например, в стихах или в представлении кода.
Процессор XML всегда должен передавать в приложение все символы документа, не служащие разметкой. Подтверждающий формальную правильность процессор XML должен, кроме того, сообщать приложению, какие из этих символов представляют собой пробельные, находящиеся в содержимом элемента.
К элементу может прикрепляться специальный атрибут xml:space, который указывает на то, что в этом элементе пробельные символы должны быть сохранены. В допустимых документах этот атрибут, если он используется, как и любой другой, должен быть объявлен. При объявлении он должен даваться как перечислимый тип с только двумя возможными значениями: "default" и "preserve". Например:
<!ATTLIST poem xml:space (default|preserve) 'preserve'> |
Значение "default" указывает на то, что режимы обработки пробельных символов, используемые в приложении по умолчанию, могут применяться и к этому элементу; значение "preserve с помощью другого экземпляра атрибута xml:space.
Считается, что для корневого элемента любого документа никакая политика не задана, если только для этого атрибута не установлено значение или этот атрибут не объявлен со значением по умолчанию.
Анализируемые сущности языка XML часто хранятся в файлах, которые для удобства редактирования разбиты на строки. Обычно эти строки разделяются комбинацией символов возврата каретки (#xD) и перевода строки (#xA).
Для упрощения задач, выполняемых приложением #xD, процессор XML должен передавать в приложение только один символ #xA. (Это можно удобно организовать путем приведения всех разрывов строк к виду #xA на входе, до начала синтасического разбора.)
специальный атрибут xml:lang. В допустимых документах этот атрибут, если он используется, как и любой другой, должен быть объявлен. Значениями этого атрибута являются идентификаторы языков в соответствии с [IETF RFC 1766], "Tags for the Identification of Languages" (Теги идентификации языков):
| Идентификация языка | ||||||||||||||||||||||||
|
Langcode может быть:
i-" (or "I-")x-" или "X-", что гарантирует отсутствие конфликтов с зарегистрированными или стандартизованными в IANA именамиКоличество сегментов Subcode не ограничено; если имеется первый сегмент, и Subcode состоит из двух букв, то это должен быть код страны в соответствии с [ISO 3166] если только Langcode не начинается с префикса "x-" или "X-".
Обычно код языка дается в нижнем регистре, а код страны (если таковой имеется) - в верхнем. Обратите внимание, что эти значения, в отличие от другим имен в документах XML, не учитывают регистр.
Например:
<p xml:lang="en">The quick brown fox jumps over the lazy dog.</p> |
Считается, что значение xml:lang применяется ко всем атрибутам и содержимому элемента, для которого оно указано, если только оно не переопределяется другим экземпляром xml:lang другого элемента в этом содержимом.
Простое объявление xml:lang может иметь следующий вид:
xml:lang NMTOKEN #IMPLIED |
образом:
<!ATTLIST poem xml:lang NMTOKEN 'fr'> |
Каждый документ XML содержит один или несколько элементов, границами которых определяются начальными и конечными тегами или, для пустых элементов, тегами пустых элементовимя и значение.
| Элемент | ||||||||||||||||
|
(('X'|'x')('M'|'m')('L'|'l')), зарезервированы для стандартизации в настоящей и будущих версиях спецификации.
Ограничение формальной правильности: Соответствие типа элемента
Name в конечном теге элемента должно соответствовать типу элемента в начальном теге.
Ограничение допустимости: Допустимый элемент
Элемент является допустимым при наличии объявления, соответствующего elementdecl, где Name соответствует типу элемента и выполняется одно из следующих условий:
EMPTY, и элемент не имеет содержимого.children, и последовательность дочерних элементов принадлежит языку, генерируемому регулярным выражением в модели содержимого, с необязательными пробелами (символами, соответствующими нетерминалу S) между каждой из пар дочерних элементов.Mixed, и содержимое состоит из символьных данных и дочерних элементов, типы которых соответствуют именам в модели содержимого.ANY, и типы всех дочерних элементов объявлены.Начало каждого непустого элемента XML отмечается начальным тегом.
| Начальный тег | ||||||||||||||||||||||||
|
Name в начальных и конечных тегах задает тип элемента.
Пары Name-AttValue называются спецификациями атрибутов элемента. Name в каждой паре называется именем атрибута, а содержимое AttValue (текст в ' или ") - значением атрибута.
Ограничение формальной правильности: Уникальная спецификация атрибута
Имя атрибута в одном начальном теге или теге пустого элемента может присутствовать только один раз.
Ограничение допустимости: Тип значения атрибута
Атрибут должен быть объявлен; значение должно иметь тип, объявленный для этого атрибута. (Типы атрибутов см. в разделе "3.3 Объявления списка атрибутов".)
Ограничение формальной правильности: Запрещены ссылки на внешние сущности
Значения атрибутов не могут содержать прямые или косвенные ссылки на внешние сущности.
Ограничение формальной правильности: Запрещены символы < в значениях атрибутов
Заменяющий текст любой сущности, на которую в значении атрибута имеется прямая или косвенная ссылка (кроме "<"), не должны содержать символа <.
Пример начального тега:
<termdef id="dt-dog" term="dog"> |
Конец каждого элемента, который начинается начальным тегом, должен отмечаться конечным тегом, содержащим имя, совпадающее с типом элемента, указываемым в начальном теге:
| Конечный тег | ||||
|
Пример конечного тега:
</termdef> |
Текст между начальным и конечным тегами называется содержимым элемента:
| Содержимое элементов | ||||
|
Если элемент пуст, он должен представляться либо начальным тегом, сразу же за которым следует конечный, либо тегом пустого элемента. Тег пустого элемента имеет специальную форму:
| Теги пустых элементов | ||||||
|
Теги пустых элементов могут использоваться для любого элемента, не имеющего содержимого, независимо от того, объявлен ли он в ключевым словом EMPTY или нет. Для совместимости тег пустого элемента должен и может использоваться только для элементов, объявленных как EMPTY.
Примеры пустых элементов:
<IMG align="left" |
Элементная структура документа XML может для проверки достоверности ограничиваться с помощью объявлений типов элементов и списков атрибутов. Объявление типа элемента ограничивает содержимое элемента.
Объявления типов элементов часто ограничивают типы элементов, которые могут быть дочерними
Объявление типа элемента имеет следующий вид:
| Объявление тип элемента | ||||||||||
|
где Name определяет тип объявляемого элемента.
Ограничение допустимости: Уникальное объявление типа элемента
Ни один тип элемента не может объявляться более одного раза.
Примеры объявлений типов элементов:
<!ELEMENT br EMPTY> |
Тип элемента имеет содержимое, если элементы этого типа должны содержать только дочерние элементы (не содержать символьных данных), разделяемые пробельными символами (символами, соответствующими нетерминалу S (cp, content particle), состоящих из имен, списков выбора частиц содержимого или списков последовательностей частиц содержимого:
| Модели содержимого элементов | ||||||||||||||||||||
|
где каждое Name - тип элемента, который может служить дочерним. Любая частица содержимого в списке может располагаться в содержимом элемента там, где список располагается в грамматике; частицы содержимого, находящиеся в списке последовательностей, должны располагаться в содержимом элемента в порядке, указанном в списке. Необязательный символ, следующий за именем или списком, управляет тем, могут ли элемент или частицы содержимого из списка встречаться один или более (+), ноль или более (*) или не более одного (? в настоящей спецификации.
каждому элементу в содержимом по типу элемента в модели содержимого. Для совместимости считается ошибкой, если элемент в документе может соответствовать нескольким экземплярам типа элемента в модели содержимого. Более подробную информацию см в разделе "E. Детерминистические модели содержимого".
Ограничение допустимости: Корректное вложение групп/сущностей параметров
Заменяющий текст сущности параметров должен быть корректно вложен в обозначаемые скобками группы. То есть если в конструкции choice, seq или Mixed в заменяющем тексте сущности параметра содержится открывающая или закрывающая скобка, обе скобки должны находиться в одном и том же заменяющем тексте. Для совместимости, если ссылка на сущность параметров располагается в конструкции choice, seq или Mixed, ее заменяющий текст не должен быть пустым, и ни первый, ни последний непустой символ заменяющего текста не должен быть соединителем (| или ,).
Примеры моделей содержимого элементов:
<!ELEMENT spec (front, body, back?)> |
Тип элемента имеет смешанное содержимое, если элементы этого типа могут содержать символьные данные вперемешку с дочерними элементами. В этом случае типы дочерних элементов могут быть ограничены, но их порядок или число вхождений не ограничиваются:
| Объявление смешанного содержимого | ||||||||||||||||
|
где Name задают типы элементов, которые могут быть дочерними.
Ограничение допустимости: Отсутствие дублирующихся типов
одно и то же имя не должно встречаться в одном объявлении со смешанным содержимым более одного раза.
Примеры объявлений со смешанным содержимым:
<!ELEMENT p (#PCDATA|a|ul|b|i|em)*> |
Атрибуты используются для связи пар имя-значение с элементами. Спецификации атрибутов могут располагаться только в начальных тегах и тегах пустых элементов; таким образом, продукции, используемые для их распознавания, находятся в разделе "3.1 Начальные теги, конечные теги и теги пустых элементов". Объявления списков атрибутов могут использоваться:
Объявления списка атрибутов определяют имя, тип данных и значение по умолчанию (если таковое имеется) каждого атрибута, связанного с данным типом элемента:
| Объявление списка атрибутов | ||||||||
|
Name в правиле AttlistDeclName в правиле AttDef представляет имя атрибута.
Если для данного типа элемента указано несколько AttlistDecl, содержимое их всех объединяется. Если для одного атрибута данного типа элемента указано несколько определений, используется первое объявление, а последующие игнорируются. Для совместимости в каждом объявлении списка атрибутов. Для совместимости процессор XML может по выбору пользователя выдавать предупреждение, если для данного типа элемента имеется несколько объявлений писков атрибутов или для данного атрибута имеется несколько определений, но это не является ошибкой.
лексические и семантические ограничения:
| Типы атрибутов | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Ограничение допустимости:
ID
Значения типа ID должны соответствовать продукции Name. Имя не должно присутствовать в документе XML в качестве значения этого типа более одного раза; т.е. значения ID должны уникальным образом идентифицировать связанные с ними элементы.
Ограничение допустимости: Один ID на один тип элемента
Ни для одного типа элемента не может быть указано несколько атрибутов ID.
Ограничение допустимости: Значение по умолчанию атрибута ID
Атрибут ID должен объявляться со значение по умолчанию #IMPLIED или #REQUIRED.
Ограничение допустимости: IDREF
Значения типа IDREF должны соответствовать продукции Name, а значения типа IDREFS - Names; каждое Name должно соответствовать значению атрибута ID некоторого элемента документа XML; т.е. значения IDREF должны соответствовать значению некоторого атрибута ID.
Ограничение допустимости: Имя сущности
Значения типа ENTITY должны соответствовать продукции Name, значения типа ENTITIES - Names; каждое Name должно соответствовать имени неанализируемой сущности, объявленной в DTD.
Ограничение допустимости: Метка имени
Значения типа NMTOKEN должны соответствовать продукции Nmtoken; значения типа NMTOKENS - Nmtokens.
Перечислимые атрибуты могут принимать одно значение из списка, заданного в объявлении. Есть два типа перечислимых атрибутов:
| Перечислимые типы атрибутов | ||||||||||||||||
|
Атрибут NOTATION идентифицирует нотацию, объявленную в DTD, с которой связаны системные и/или общие идентификаторы, используемую при интерпретации элемента, к которому прикрепляется атрибут.
Ограничение допустимости: Атрибуты нотации
Значения этого типа должны соответствовать одному из имен нотаций, включенных в объявление; все имена нотаций в объявлении должны быть объявлены.
Ограничение допустимости: Перечисление
Значения этого типа должны соответствовать одной из меток Nmtoken в объявлении.
Для совместимости одна и та же Nmtoken не должна встречаться в перечислимых типах атрибутов одного типа элемента более одного раза.
В объявлении атрибута приводится информация о том, является ли атрибут обязательным, и, если он необязателен, о том, как процессор XML должен вести себя, если объявленный атрибут в документе отсутствует.
| Значения атрибутов по умолчанию | ||||||||||||||||||||||||||||
|
В объявлении атрибута #REQUIRED означает, что этот атрибут должен быть обязательно указан, #IMPLIED - что атрибут не имеет значения по умолчанию.
Если в объявлении не указано ни ключевое слово #REQUIRED, ни #IMPLIED, значение AttValue содержит объявляемое значение по умолчанию; ключевое слово #FIXED было указано значение по умолчанию.
Ограничение допустимости: Обязательный атрибут
Если в объявлении по умолчанию указано ключевое слово #REQUIRED, этот атрибут должен быть указан для всех элементов типа, указанного в объявлении списка атрибутов.
Ограничение допустимости: Значение атрибута по умолчанию допустимо
Объявленное значение атрибута по умолчанию должно соответствовать лексическим ограничениям объявленного типа атрибута.
Ограничение допустимости: Значение атрибута по умолчанию фиксировано
Если значение по умолчанию для атрибута объявлено с ключевым словом #FIXED, экземпляры этого атрибута должны соответствовать типу по умолчанию.
Примеры объявлений списка атрибутов:
<!ATTLIST termdef |
До того, как значение атрибута будет передано в приложение или проверено на корректность, процессор XML должен нормализовать его следующим образом:
(#x20) одним пробельным символом (#x20).
Все атрибуты, для которых не было прочтено объявления, должны обрабатываться non-validating синтаксическим разборщиком как объявленные CDATA.
Условные разделы являются частями внешнего подмножества объявления типа документа, включенные в логическую структуру DTD (или исключенные из нее) на базе ключевого слова, управляющего им.
| Условный раздел | ||||||||||||||||||||
|
символами.
Если ключевое слово условного раздела - INCLUDE, содержимое условного раздела является частью DTD. Если ключевое слово условного раздела - IGNORE условных разделов и гарантии того, конец самого последнего (игнорируемого) условного раздела обнаружено корректно. Если условный раздел с ключевым словом INCLUDE располагается в условном разделе большего объем с ключевым словом IGNORE, игнорируются как внешний, так и внутренний разделы.
раздел или игнорировать его.
Пример:
<!ENTITY % draft 'INCLUDE' > |
Документ XML может состоять из одной или нескольких единиц хранения, называемых сущностями. Все они имеют содержимое и все они (за исключением сущности документа, описанной ниже, и внешнего подмножества DTD), идентифицируются именем. Каждый документ XML имеет одну сущность, называемую сущностью документа, которая служит начальной точкой для процессора XML и может содержать целый документ.
Сущности могут быть анализируемыми и неанализируемыми. Содержимое анализируемой сущности называется его заменяющим текстом; этот текст считается неотделимой частью документа.
Неанализируемая сущность - это ресурс, содержимое которого может быть (а может и не быть) текстом, и, если оно текстовое, может не быть XML. С каждой неанализируемой сущностью связана нотация
Анализируемые сущности вызываются по имени с помощью ссылок на сущности; неанализируемые - по имени, данному в значении атрибутов ENTITY или ENTITIES.
Общие сущности - это сущности для использования в пределах содержимого документа. В настоящей спецификации общие сущности иногда называются некорректным термином сущность, если это не приводит к двусмысленности. пространства имен; сущность параметров и общие сущности с одним и тем же именем представляют собой две различных сущности.
Ссылка на символ обозначает конкретный символ из набора ISO/IEC 10646, например, один из символов, недоступных напрямую имеющимся в наличии устройствам ввода.
| Ссылка на символ | ||||||||||
|
Ограничение формальной правильности: Допустимый символ
Символы, на которые осуществляется ссылка, должны соответствовать продукции для Char.
&#x", цифры и буквы до последнего ; обозначают шестнадцатеричное представление кода символа в наборе ISO/IEC 10646. Если она начинается с "&#", цифры до последнего ; обозначают десятичное представление кода символа.
Ссылка на сущность указывает на содержимое именованной сущности. В ссылках на анализируемые общие сущности в качестве разделителей используются амперсанд (&) и двоеточие (;).
В ссылках на сущности параметров в качестве разделителей используются символ процентов (%) и двоеточие (;).
| Ссылка на сущность | ||||||||||||||||||||||||||||||||||||||||||||||
|
Ограничение формальной правильности: Сущность объявлена
В документе без DTD, документе только с внутренним подмножеством DTD, не содержащим ссылок на сущности параметров, или документе с объявлением "standalone='yes'" Name, данное в ссылке на сущность, должно соответствовать имени в объявлении сущности, за исключением правильно построенных документов, в которых следующие сущности объявляться не должны: CODE>amp, lt, gt, apos, quot списка атрибутов. Обратите внимание, что, если сущности объявлены во внешнем подмножестве или во внешних сущностях параметров, процессор без проверки правлиьности не обязан читать и обрабатывать их объявления; для таких документов правило обязательного объявления сущности является ограничением формальной правильности, только если standalone='yes'.
Ограничение допустимости: Сущность объявлена
В документе с внешним подмножеством или внешними сущностями параметров с объявлением "standalone='no'" Name, данное в ссылке на сущность, должно соответствовать имени в объявлении сущности. Для совместимости в допустимых документах должны объявляться сущности amp, lt, gt, apos, quot в форме, указанной в разделе "4.6 Заранее определенные сущности атрибутов.
Ограничение формальной правильности: анализируемая сущность
Ссылка на сущность не должна содержать имени неанализируемой сущности. Ссылки на неанализируемые сущности могут иметь место только в значениях атрибутов, тип которых объявлен как ENTITY или ENTITIES.
Ограничение формальной правильности: Запрещены рекурсии
анализируемая сущность не должна содержать рекурсивную ссылку на себя, ни прямую, ни косвенную.
Ограничение формальной правильности: В DTD
Ссылки на сущности параметров могут располагаться только в DTD.
Примеры ссылок на символы и сущности:
Type <key>less-than</key> (<) to save options. |
Пример ссылки на сущность параметров:
<!-- объявление сущности параметров "ISOLat2"... --> |
Сущности объявляются следующим образом:
| Объявление сущности | ||||||||||||||||||||
|
Name идентифицирует сущность в ссылки на сущность или, в случае неанализируемой сущности, в значении атрибута ENTITY или ENTITIES. Если одна и та же сущность объявлена несколько раз, используется первое объявление; по выбору пользователя процессор XML может выдавать предупреждение, если сущности объявлены несколько раз.
Если определение сущности представлено в EntityValue, эта сущность называется внутренней. Для нее нет отдельного физического объекта хранения, и содержимое этой сущности дается в объявлении. Обратите внимание, что иногда обработка ссылок на сущности и символы в литеральном значении сущности может потребоваться для вывода корректного заменяющего текста: см. раздел "4.5 Построение заменяющего текста внутренней сущности".
Внутренняя сущность является анализируемой.
Пример объявления внутренней сущности:
<!ENTITY Pub-Status "Это предварительная версия |
Если сущность не является внутренней, она является внешней и объявляется следующим образом:
| Объявление внешней сущности | ||||||||||||||
|
Если присутствует NDataDecl, - это общая неанализируемая сущность; в противном случае это анализируемая сущность.
Ограничение допустимости: Нотация объявлена
Name должно соответствовать объявленному имени нотации.
SystemLiteral называется системным идентификатором сущности. Он представляет собой URI, который может использоваться для загрузки сущности. Обратите внимание, что решетка (# Если информация, не относящаяся к настоящей спецификации (например, специальный тип элемента XML, определенный в конкретном DTD, или инструкция по обработке, определенная в спецификации конкретного приложения) не указывает на обратное, относительные URI определяются относительно местоположения ресурса, в котором сущность объявлена. URI, таким образом, может определяться относительно сущности доумента, сущности, содержащей внешнее подмножество DTD или некоторой другой внешней сущности параметров.
кодирования URI (т.е. преобразуя каждый байт к виду %HH, где HH - шестнадцатеричная запись значения байта).
Помимо системного идентификатора, внешний идентификатор может включать общий идентификатор в системном литерале. До попытки сравнения все строки пробельных символов в общем идентификаторе должны быть приведены к одиночным пробелам (#x20), а начальные и конечные пробелы должны быть удалены.
Примеры объявлений внешних сущностей:
<!ENTITY open-hatch |
Внешние анализируемые сущности могут начинаться с объявления текста.
| Объявление текста | ||||
|
Объявление текста должно даваться литерально, а не в виде ссылки на анализируемую сущность. Объявление текста не могут располагаться нигде, кроме начала внешней анализируемой сущности.
Сущность документа является правильной, если она соответствует продукции, помеченной document. Внешняя общая анализируемая сущность является правильной, если она соответствует продукции, помеченной extParsedEnt. Внешняя сущность параметров является правильной, если она соответствует продукции, помеченной extPE.
| Правильно построенная внешняя анализируемая сущность | ||||||||
|
Внутренняя общая анализируемая сущность является правильной, если ее заменяющий текст соответствует продукции, отмеченной content. Все внутренние сущности параметров являются правильными по определению.
Последовательность формальной правильности в сущностях заключается в корректном вложении логической и физической структур в документах XML; начальные теги, конечные теги, теги пустых элементов, элементы, комментарии, инструкции по обработке, ссылки на символы, или ссылки на сущности не должны начинаться в одной сущности и заканчиваться в другой.
пробел нулевой ширины), #xFEFF). Он представляет собой сигнатуру кодировки и не является частью разметки или символьных данных документа XML. Процессоры XML должны использовать этот символ для определения разницы между документами, закодированными с использованием UTF-8 и UTF-16.
Анализируемые сущности, хранящиеся в кодировках, отличных от UTF-8 или UTF-16, должны начинаться с объявления текста, содержащего объявление кодировки:
| Объявление кодировки | ||||||||||
|
В сущности документа объявление кодировки является частью объявления 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-9" должны использоваться для частей набора ISO 8859, а значения "ISO-2022-JP", "Shift_JIS" и "EUC-JP"
- для различных закодированных видов JIS X-0208-1997. Процессоры XML могут распознавать другие кодировки; рекомендуется, чтобы в ссылках на кодировки символов, зарегистрированные (как наборы символов) в Internet Assigned Numbers Authority [IANA] учитывать для них регистр.
При отсутствии информации, предоставляемой внешним транспортным протоколом (например, HTTP или MIME), считается ошибкой если сущность, не начинающаяся ни с метки последовательности байтов, ни с объявления кодировки, использует кодировку, отличную от UTF-8. Обратите внимание, что, поскольку набор ASCII является подмножеством кодировки UTF-8, стандартным сущностям ASCII не требуется объявление кодировки.
Считается неустранимой ошибкой ситуация, когда процессор XML встречает сущность в кодировке, которую он не может обработать.
Примеры объявлений разметки:
<?xml encoding='UTF-8'?> |
В таблице ниже перечислены контексты, в которых могут присутствовать ссылки на символы, ссылки на сущности и вызовы и необходимое поведение процессора XML в каждом из этих случаев. Метки в левой колонке описывают контекст распознавания:
content.AttValue.Name, а не ссылки, присутствует как значение атрибута, объявленного как тип ENTITY, или как один из разделенных пробелами кодов в значении атрибута, объявленном как тип ENTITIES.
EntityValue.EntityValue или AttValue.| Тип сущности | Символ | ||||
| параметров | внутренний общий |
внешний Parsed общий |
Unparsed | ||
| Ссылка в содержимом |
не распознается | включается | включается в случае проверки корректности | запрещен | включается |
| Ссылка в значении атрибута |
не распознается | включается в литерал | запрещен | запрещен | включается |
| Встречается как значение атрибута |
не распознается | запрещен | запрещен | уведомление | не распознается |
| Ссылка в EntityValue |
включается в литерал | обходится | обходится | запрещен | включается |
| Ссылка в DTD |
включается как сущность параметров | запрещен | запрещен | запрещен | запрещен |
Вне DTD символ % не имеет специального значения; таким образом, то, что было бы ссылкой на сущность параметров в DTD не распознается как разметка в содержимом. Аналогично имена неанализируемых сущностей не распознаются, за исключением того, когда они находятся в значении должным образом объявленного атрибута.
Сущность включается, если ее заменяющий текст считывается и обрабатывается вместо самой ссылки, как если бы он был частью документа в месте, в котором расположена распознаваемая ссылка. Заменяющий текст может содержать символьные данные и (только не для сущностей параметров) разметку, которые должны распознаваться стандартным образом, за исключением того, что заменяющий текст сущностей, используемый для кодирования разделителей (сущности amp, lt, gt, apos, quot) всегда обрабатывается как данные. (Строка "AT&T;" разворачивается в "AT&T;", и оставшийся амперсанд не распознается в качестве разделителя ссылки на сущность.) Ссылка на символ включается, если указанный символ обрабатывается вместо самой ссылки.
Если процессор XML распознает ссылку на анализируемую сущность, для проверки корректности документа процессор должен включить ее заменяющий текст. Если сущность является внешней, и процессор не пытается проверить корректность документа XML, процессор может но не прочел ее.
подходит другим приложениям, в частности, приложениям для просмотра документов. Браузеры, например, встречая ссылку на внешнюю анализируемую сущность, могут на выбор предоставлять визуальное указание на наличие сущности и считывать и отображать ее только по требованию.
Запрещены и представляют собой неустранимые ошибки:
EntityValue или AttValue.Если ссылка на сущность находится в значении атрибута или ссылка на сущность параметров находится в значении литеральной сущности, ее заменяющий текст обрабатываются как нормальный символ данных и не ограничивают литерал. Вот пример формальной правильности:
<!ENTITY % YN '"Да"' > |
а этот пример неправилен:
<!ENTITY EndAttr "27'" > |
Если имя неанализируемой сущности представляется как метка в значении атрибута объявленного типа ENTITY или ENTITIES, процессор с проверкой корректности должен сообщить приложению о системном и общем (если таковой имеется) идентификаторах для сущности и связанной с ней нотации.
Если ссылка на общую сущность находится в EntityValue в объявлении сущности, она обходится и остается как есть.
Как и с внешними анализируемыми сущностями, сущности параметров должны только включаться в случае проверки корректности. Если ссылка на сущность параметров распознается в DTD и включается, ее заменяющий текст
При обсуждении обработки внутренних сущностей полезно различать две формы значения сущности. Литеральное значение сущности представляет собой строку в кавычках, присутствующую в объявлении сущности и соответствующую нетерминалу EntityValue. Заменяющий текст представляет собой содержимое сущности, после замены ссылок на символы и ссылок на сущность параметров.
Литеральное значение сущности, как оно дано во внутреннем объявлении сущности (EntityValue сущности, включенный, как описано выше, должен содержать заменяющий текст Например, даны следующие объявления:
<!ENTITY % pub "Éditions Gallimard" > |
заменяющий текст для сущности "book":
La Peste: Albert Camus, |
Ссылка на общую сущность "&rights;" была бы декодирована, если бы ссылка "&book;" находилась в содержимом документа или в значении атрибута.
Эти простые правила могут достаточно сложно взаимодействовать; более подробное обсуждение сложного примера находится в разделе "Г. Декодирование ссылок на сущности и символы".
Ссылки на сущности и символы могут использоваться для кодирования левой угловой скобки, амперсанда и других разделителей. Для этого определен набор общих сущностях (amp, lt, gt, apos, quot). Кроме того, могут использоваться числовые ссылки на символы; они раскрываются сразу же после распознавания и должны обрабатываться как символьные данные, поэтому числовые ссылки "<" и "&" могут использоваться для кодирования символов < и & в символьных данных.
Все процессоры XML должны распознавать такие сущности, независимо от того, объявлены они или нет. Для совместимости кодируемый символ или ссылку на этот символ, как показано ниже .
<!ENTITY lt "&#60;"> |
Обратите внимание, что символы < и & в объявлениях "lt" и "amp" закодированы дважды для соответствия требованию правильного построения замены сущности.
Нотации идентифицируют именем формат неанализируемых сущностей, формат элементов, обладающих атрибутом нотации, или приложения, которому адресуются a инструкции по обработке.
Объявления нотаций находить вспомогательное приложение для обработки данных данной нотации.
| Объявления нотаций | ||||||||
|
ссылки. Кроме того, они могут разрешать внешние идентификаторы в системные идентификаторы для которых специальные приложения в системе, в которой выполняется процессор XML или приложение, отсутствуют, не является ошибкой.)
Сущность документа служит корнем дерева сущностей и начальной точкой для процессора XML процессора вообще без идентификации.
Конформные процессоры XML подразделяются на два класса: с проверкой корректности и без нее.
Процессоры с проверкой корректности и без нее одинаково должны сообщать о нарушениях ограничения формальной правильности, изложенного в настоящей спецификации, в содержимом сущности документа и во всех остальных анализируемых сущностях, которые они прочтут.
Процессоры с проверкой корректности должны сообщать о нарушениях ограничений, выражаемых объявлениями в DTD сущности, на которые в данном документе имеются ссылки.
Процессоры без проверки корректности должны проверять на корректность построения только сущность документа, включая все внутреннее подмножество DTD. Хотя они и не обязаны проверять корректность документа, они должны обрабатывать все объявления во внутреннем подмножестве DTD любой сущности параметров, которое они прочитывают, вплоть до первой ссылки на сущности параметров, которое они не могут прочесть; то есть они должны использовать информацию этих объявлений для нормализации значений атрибутов, включения заменяющего текста внутренних сущностей и указания значений атрибутов по умолчанию. Они не должны обрабатывать объявления сущности или объявления списков атрибутов, расположенные после ссылки на непрочтенную сущность параметров, поскольку эта сущность может содержать другие объявления, заменяющие их.
без проверки корректности требуется меньше; он не обязан прочитывать фрагменты документа, отличные от сущности документа. Все это дает два эффекта, которые могут иметь значение для пользователей процессоров XML:
Приложения, которым необходимы возможности типа использования атрибутов по умолчанию или внутренних сущностей, объявленных во внешних сущностях, должны использовать процессоры XML с проверкой корректности.
в форме
символ ::= выражение |
Символы пишутся с заглавной буквы, если они определяются регулярным выражением, в противном случае - с прописной буквы. Литеральные строки заключаются в кавычки.
В выражении в правой части правила для сопоставления строк из одного и более символов используются следующие выражения:
#xNN указанное значение. Число начальных пробелов в форме #xN не имеет значения; число начальных пробелов в соответствующем кодовом значении определяется используемой кодировкой символов и не имеет значения для XML.[a-zA-Z], [#xN-#xN][^a-z], [^#xN-#xN][^abc], [^#xN#xN#xN]"строка"'строка'A и B представляют простые выражения:
выражение)выражение обрабатывается как единица и может объединяться, как описано в данном списке.A?A или ничему; необязательное A.A BA, за которым следует B.A | BA или B, но не обоим вместе.A - BA, но не соответствующей B.
A+A.A*A./* ... */[ wfc: ... ][ vc: ... ]символы и комбинированные символы (помимо прочих, сюда входят большинство символов с диакритическими знаками); эти классы вместе составляют класс букв. Цифры и дополнительные символы также различаются.
| Символы | ||||||||||||||||||||||||
|
Определенные здесь классы символов выводятся из базы данных символов Unicode следующим образом:
XML разработан как подмножество SGML, в котором каждый допустимый документ XML должен также быть и конформным документом SGML. Подробное сравнение дополнительных ограничений, налагаемых XML на документы, помимо ограничений, налагаемых SGML, см. в [Clark].
В этом приложении приводятся некоторые примеры, иллюстрирующие последовательность распознавания и декодирования ссылок на сущности и символы, ка кэто описано в разделе "4.4 Обработка процессором XML сущностей и ссылок".
Если в DTD имеется объявление
<!ENTITY example "<p>Амперсанд (&#38;) может кодироваться |
то процессор XML распознает ссылки на символы при анализе объявления сущности и разрешит их до сохранения в качестве значения сущности "example" следующей строки:
<p>Амперсанд (&) может кодироваться |
Ссылка в документе на "&example;" приведет к повторному анализу текста, при котором начальные и конченые теги элемента "p" будут распознаны, а все три ссылки будут распознаны и декодированы, в результате чего будет представлен элемент "p" со следующим содержимым (все данные, без разделителей и разметки):
Амперсанд (&) может кодироваться |
На более сложном примере полностью продемонстрируем правила и их эффект. В следующем примере номера строк приводятся только для ссылки.
1 <?xml version='1.0'?> |
Результат будет следующим:
xx" сохраняется в таблице символов со значением "%zz;". Поскольку заменяющий текст не подвергается повторному сканированию, ссылка на сущность параметров "zz" не распознается. (И было бы ошибкой, если бы он распознавался, поскольку "zz" еще не объявлено.)<" незамедлительно декодируется, а сущность параметров "zz" сохраняется с заменяющим текстом "<!ENTITY tricky "подверженный ошибкам" >", которое представляет собой правильно построенное объявление сущности.xx" распознается, а заменяющий текст "xx" (а именно, "%zz;") подвергается синтаксическому анализу. Ссылка на "zz" в свою очередь также распознается, и ее заменяющий текст ("<!ENTITY tricky "подверженный ошибкам" >") подвергается синтаксическому анализу. Общая сущность "tricky" теперь считается объявленным с заменяющим текстом "подверженный ошибкам".tricky" распознается и декодируется, так что полным содержимым элемента "test" становится строкой с самоописанием (неграмматической): В этом примере показан подверженный ошибкам метод.
Для совместимости необходимо, чтобы модели содержимого в объявлениях типов элементов были детерминистическими.
как ошибки.
Например, модель содержимого ((b, c) | (b, d)) является недетерминистической, поскольку если начальным символом является b, синтаксическому анализатору неизвестно, какой из символов b в модели сопоставляется ему, не проверив, какой символ следует за b. В данном случае две ссылки на b могут свернуться в одну ссылку, после чего модель будет выглядеть как (b, (c | d)). Теперь начальное b явно соответствует только одному имени в модели содержимого. Синтаксическому анализатору не потребуется смотреть на следующий элемент; могут приниматься и c, и d.
Более формально: из модели содержимого с помощью стандартных алгоритмов, например, алгоритма 3.5 из раздела 3.9 книги Ахо, Сети и Уллмана [Aho/Ullman] если для какой-либо позиции имеется follow set, в котором несколько следующих позиций помечены одним и тем же именем типа элемента, то модель содержимого ошибочна, и об этом должно быть выдано сообщение.
Существуют алгоритмы, позволяющие многим, но не всем недетерминистическим моделям содержимого автоматически сокращаться до эквивалентных детерминистических моделей; см. Brьggemann-Klein 1991 [Brьggemann-Klein].
очевидно, должен знать, какая кодировка символов используется-то есть попытки какую метку указать предприняты. В общем случае, это безнадежная ситуация. Однако в XML она не полностью безнадежна, поскольку XML ограничивает общий случай двумя способами: предполагается, что каждая реализация поддерживает только конечный набор кодировок символов, а в объявлениях кодировок XML ограничено положение и содержимое с целью осуществления автоматического определения используемой кодировки символов в каждой сущности в нормальных случаях. Кроме того, во многих случаях имеются дополнительные к самому потоку данных XML источники информации. Можно выделить два случая, в зависимости от того, представлена ли сущность XML процессору без дополнительной (внешней) информации или с нею. Рассмотрим сначала первый случай.
Поскольку каждая сущность XML в формате, отличном от UTF-8 или UTF-16 должен начинаться с объявления кодировки XML, в котором первым символом должен быть '<?xml '<' имеет код "#x0000003C", а '?' - "#x0000003F", а Byte Order Mark (метка порядка байтов), необходимая потокам данных UTF-16, - "#xFEFF".
00 00 00 3C: UCS-4, тупоконечная машина (порядок 1234)
3C 00 00 00: UCS-4, остроконечная машина (порядок 4321)
00 00 3C 00: UCS-4, необычный порядок октетов (2143)
00 3C 00 00: UCS-4, необычный порядок октетов (3412)
FE FF: UTF-16, тупоконечный
FF FE: UTF-16, остроконечный
00 3C 00 3F: UTF-16, тупоконечный, без метки порядка байтов (и поэтому, строго говоря, ошибочный)
3C 00 3F 00: UTF-16, остроконечный, без метки порядка байтов (и поэтому, строго говоря, ошибочный)
3C 3F 78 6D местах, имеют обычную ширину и значения; фактическое объявление кодировки должно прочитываться для обнаружения того, какая из них применяется, но поскольку во всех этих кодировках используются одни и те же битовые шаблоны для символов ASCII, само объявление кодировки может быть надежно прочтено
4C 6F A7 94: EBCDIC (в некотором варианте; полное объявление кодировки должно прочитываться, чтобы выяснить используемую кодовую страницу)
кодировок (например, чтобы отличить UTF-8 от 8859, а части 8859 друг от друга или различать конкретные используемые кодовые страницы EBCDIC и т.д.).
практике все широко используемые кодировки символов попадают в одну из перечисленных выше категорий, объявление кодировки XML обеспечивает достаточно надежные метки кодировок символов, даже если внешние источники информации на уровне операционной системы или транспортного протокола ненадежны.
для каждого входного символа.
кодировки. Разработчики процедур, работающих с кодировками символов, должны быть осторожны и должны обеспечить точность внутренней и внешней информации, используемой в метках сущностей.
приоритет и предпочитаемый метод обработки конфликтов должен указываться в составе протокола более высокого уровня, используемого для доставки XML. Правила приоритета внутренних меток и меток типа MIME во внешнем заголовке, например, должны быть частью документа RFC, в котором определяются типа MIME text/xml и application/xml. В интересах совместимости, однако, рекомендуются следующие правила.
charset типа MIME; все другие эвристики и источники информации предназначены исключительно для устранения ошибок.
проголосовали за ее утверждение. На настоящий момент и в прошлом членами рабочей группы по XML были:
XML); С.М. Шперберг-МакКуин (C. M. Sperberg-McQueen), Университет шт. Илиинойс (соредактор XML); Дэн Коннолли (Dan Connolly), W3C (контакт W3C); Пола Ангерстайн (Paula Angerstein), Texcel; Стив ДеРоуз (Steve DeRose), INSO; Дэйв Холландер (Dave Hollander), HP; Элиот Кимбер (Eliot Kimber), ISOGEN; Ив Мэйлер (Eve Maler), ArborText; Том Мальери (Tom Magliery), NCSA; Мюррей Малони (Murray Maloney), Muzmo и Grif; Макото Мурата (Makoto Murata), Fuji Xerox Information Systems; Джоел Нава (Joel Nava), Adobe; Конлет О'Коннелл (Conleth O'Connell), Vignette; Питер Шарпе (Peter Sharpe), SoftQuad; Джон Тиг (John Tigue), DataChannelCopyright © 1998 W3C (MIT,INRIA,Keio)
| Главная |