Extensible Markup Language 1.0-1998-1

REC-xml-19980210


Extensible Markup Language (XML, Открытый язык разметки) 1.0

Рекомендация W3C 10 февраля 1998 г.

Введение

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

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

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

В настоящем документе определяется синтаксис, созданный путем выделения подмножества из существующего и широко используемого международного стандарта обработки текстов (Standard Generalized Markup Language, ISO 8879:1986(E) исправленный и дополненный) для использования в World Wide Web. Этот документ является результатом деятельности W3C в области XML, более подробную информацию о которой можно получить по адресу http://www.w3.org/XML. Список текущих рекомендаций W3C и прочих технических документов можно найти по адресу http://www.w3.org/TR.

В настоящей спецификации используется термин URI, определяемый в документе [Berners-Lee et al.], над которым ведется работа и который, как ожидается, обновит [IETF RFC1738] и [IETF RFC1808].

Список обнаруженных в данной спецификации ошибок можно найти по адресу http://www.w3.org/XML/xml-19980210-errata.

Extensible Markup Language (XML, Открытый язык разметки) 1.0


1. Введение

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

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

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

1.1 Происхождение и цели

Язык XML разработан Рабочей группой XML (ранее называвшейся SGML Editorial Review Board), образованной при содействии World Wide Web Consortium (W3C) в 1996 г. Председателем ее был Джон Босак из компании Sun Microsystems, и группа активно участвовала в работе группы XML Special Interest Group (ранее называвшейся Рабочей группой SGML), также организованной W3C. Список членов рабочей группы XML приведен в приложении. В W3C эту рабочую группу представлял Дэн Коннолли.

Цели разработки документов на языке XML следующие:

  1. Язык XML должен без проблем использоваться в Интернет.
  2. Язык XML должен поддерживать широкий спектр приложений.
  3. Язык XML должен быть совместим с SGML.
  4. Программы для обработки документов XML должны быть просты в написании.
  5. Число необязательных возможностей в XML должно быть минимальным, в идеале оно должно равняться нулю.
  6. Документы XML должны быть удобочитаемы и ясны.
  7. Дизайн XML должен создаваться быстро.
  8. Дизайн XML должен быть строгим и лаконичным.
  9. Документы XML должно быть просто создавать.
  10. Лаконичность в разметке XML имеет минимальное значение.

Настоящая спецификация и связанные с ней стандарты (Unicode и ISO/IEC 10646 для символов, Internet RFC 1766 для тегов идентификации языка, ISO 639 для кодов названий языков и ISO 3166 для кодов стран) содержат всю информацию, необходимую для понимания языка XML версии 1.0 и построения компьютерных программ для его обработки.

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

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

Терминология, используемая для описания документов XML, определяется в теле настоящей спецификации. Термины, определенные в следующем списке, используются для построения этих определений и описания действий процессора XML:

 

  • можно/может - Соответствующие спецификации документы и процессоры XML могут, но не обязаны демонстрировать описанное поведение.
  • должен/необходимо - Соответствующие спецификации документы и процессоры XML обязаны демонстрировать описанное поведение; в противном случае они некорректны.
  • ошибка - Нарушение правил данной спецификации; результаты не определены. Соответствующее спецификации программное обеспечение может обнаруживать ошибки, сообщать о них и устранять их.
  • неустранимая ошибка - Ошибка, которую конформный процессор XML должен обнаружить и о которой он должен сообщить в приложение. После обнаружения неустранимой ошибки процессор может далее обрабатывать данные с целью обнаружения дальнейших ошибок и сообщать о них приложению. Для обеспечения коррекции ошибок процессор может делать необработанные данные документа (смешанные данные и разметку) доступными приложению. Однако, в случае обнаружения неустранимой ошибки не должен продолжать обычную обработку (то есть не должен передавать символьные данные и информацию о логической структуре документа в приложение обычным способом).
  • на выбор пользователя - Конформное программное обеспечение может или должно (в зависимости от модального глагола в предложении) демонстрировать описанное поведение; в таком случае оно должно предоставлять пользователям средства включения или отключения описанного поведения.
  • ограничение допустимости - Правило, применяемое ко всем допустимым документам XML. Нарушения ограничений допустимости являются ошибками; о них, по выбору пользователя, должны сообщать процессоры XML, выполняющие проверку корректности.
  • ограничение формальной правильности - Правило, которое применяется ко всем правильно построенным документам XML. Нарушения ограничений формальной правильности являются неустранимыми ошибками.
  • совпадение - (Строк или имен:) Две сравниваемых строки или два сравниваемых имени должны быть идентичны. Символы с несколькими возможными представлениями в наборе ISO/IEC 10646 (например, одни и те же символы с диакритическими знаками и без них) совпадают, только если они одинаково представляются в обеих строках. По выбору пользователя процессоры могут нормализовать такие символы к какой-либо канонической форме. Смена регистра не выполняется. (Строк и правил в грамматике:) Строка совпадает с грамматической продукцией, если она принадлежит языку, генерируемому этой продукцией. (Содержимого и моделей одержимого:) Элемент совпадает со своим объявлением, если он является конформным, как описано в ограничении "Допустимый элемент".
  • для совместимости - Свойство XML, включенное исключительно для гарантии совместимости XML с SGML.
  • для поддержки возможности взаимодействия сетей - Необязательная рекомендация, включенная для повышения вероятности того, что документы XML могут обрабатываться существующими процессорами SGML, предшествующими Дополнениям WebSGML к стандарту ISO 8879.

2. Документы

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

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

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

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

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

Документ
[1] document ::= prolog element Misc*

Совпадение с продукцией document подразумевает, что:

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

Вследствие этого, для каждого элемента C в документе, не являющегося корневым, имеется один элемент P такой, что C находится в содержимом P, но не в содержимом любого другого элемента, находящегося в содержимом элемента P. Элемент P в этом случае называется родителем элемента C, а элемент C - дочерним элементом элемента P.

2.2 Символы

Анализируемая сущность содержит текст, последовательность символов, которая может представлять разметку или символьные данные. Символ в соответствии со стандартом ISO/IEC 10646 является неделимой единицей текста. Допустимыми являются символы табуляции, возврата каретки, перевода строки и допустимые графические символы Unicode и ISO/IEC 10646. Использование "символов совместимости", описанных в разделе 6.8 спецификации [Unicode], не рекомендуется.

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

Механизм кодирования точек кода символа в битовые шаблоны в различных сущностях может быть различным. Все процессоры XML должны принимать кодировки UTF-8 и UTF-16 10646; механизмы указания того, какая из этих двух кодировок используется или вовлечения других кодировок, обсуждаются ниже, в разделе "4.3.3 Кодировка символов в сущностях".

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

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

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

Пустое пространство
[3] S ::= (#x20 | #x9 | #xD | #xA)+

Для удобства символы подразделяются на буквы, цифры и прочие символы. Буквы включают символы алфавита или базовый силлабический символ, за которым могут следовать один или несколько объединяемых символов или идеографический символ. Полные определения конкретного символа в каждом классе приведены в приложении "Б. Классы символов".

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

Примечание: Двоеточие в именах XML зарезервировано для экспериментирования с пространствами имен. Ожидается, что его значение будет стандартизовано позже, после чего документы, в которых двоеточие используется в экспериментальных целях, вероятно, нужно будет обновить. (Однако гарантии, что механизм пространств имен, принятый для XML, будет действительно использовать двоеточие как разделитель пространств имен.) На практике это означает, что авторам не следует использовать двоеточие в именах XML, кроме как в экспериментах с пространствами имен, но процессоры XML должны воспринимать двоеточие как символ имени.

Nmtoken (метка имени) представляет собой любую комбинацию символов имени.

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

Литеральными данными считается любая заключенная в кавычки строка без учета кавычек, используемых в качестве ограничителя строки. Литералы используются для задания содержимого внутренних сущностей (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] | [-'()+,./:=?;!*#@$_%]

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

Текст представляет собой смесь символьных данных и разметки. Разметка бывает в форме начальных тегов, конечных тегов, тегов пустых элементов, ссылок на сущности, ссылок на символы, комментариев, разделителей разделов CDATA, объявлений типа документа и инструкций по обработке.

Весь неразмеченный текст составляет символьные данные документа.

Амперсанд (&) и левая угловая скобка (<) могут представляться в явном виде только в качестве разделителей разметки или в комментарии, инструкции по обработке или в разделе CDATA. Кроме того, они допустимы в литеральных значениях сущностей объявления внутренней сущности; см. "4.3.2 Правильные анализируемые сущности". Если эти символы необходимы в другом месте, их нужно кодировать специальным образом с помощью числовых ссылок на символы или строк "&amp;" и "&lt;" соответственно. Правая угловая скобка (>) может представляться строкой "&gt;" и должна, для совместимости, кодироваться с помощью комбинации "&gt;" или ссылки на символ, если она расположена в строке "]]>" содержимого, если только эта строка не обозначает конец раздела CDATA.

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

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

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

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

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

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

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

<!-- объявления заголовка> & <тела документа> -->

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

Инструкции по обработке (processing instructions, PI) для приложений могут включаться в документы.

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

PI не являются частью символьных данных документа, они должны передаваться в приложение. PI начинаются с "назначения" (PITarget), которое используется для идентификации приложения, которому назначается инструкция. Имена назначений "XML", "xml" и т.д. зарезервированы для стандартизации в настоящей или будущих версиях спецификации. Для формального определения PI может использоваться механизм нотаций 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, поэтому левые угловые скобки и амперсанды могут присутствовать там в явном виде; их не нужно (и даже нельзя) кодировать с помощью комбинаций "&lt;" и "&amp;". Разделы CDATA не могут быть вложенными.

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

<![CDATA[<greeting>Здравствуй, мир!</greeting>]]>

2.8 Пролог и объявление типа документа

Документы XML могут и должны начинаться с объявления XML, в котором определяется версия используемого языка XML. Например, ниже приведен полный, правильно построенный, но недопустимый документ XML:

<?xml version="1.0"?>
<greeting>Здравствуй, мир!</greeting>

и точно таким же является документ:

<greeting>Здравствуй, мир!</greeting>

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

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

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

Пролог
[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 ::= ([a-zA-Z0-9_.:] | '-')+
[27] Misc ::= Comment | PI | S

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

Объявление разметки представляет собой объявление типа элемента, объявление списка атрибутов, объявление сущности или объявление нотации. Эти объявления полностью или частично могут содержаться в сущностях параметров, как описано в ограничениях формальной правильности и допустимости ниже. Более полную информацию можно найти в разделе "4. Физические структуры".

Определение типа документа
[28] doctypedecl ::= '<!DOCTYPE' S Name (S ExternalID)? S? ('[' (markupdecl | PEReference | S)* ']' S?)? '>' [ Ограничение допустимости: корневой тип элемента ]
[29] markupdecl ::= elementdecl | AttlistDecl | EntityDecl | NotationDecl | PI | Comment [ Ограничение допустимости: корректное объявление/вложение сущности параметров ]
[ Ограничение формальной правильности: сущность параметров во внутреннем подмножестве ]

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

Ограничение допустимости: Корневой тип элемента
Имя в объявлении типа документа должно соответствовать типу корневого элемента.

Читать дальше >>

 

Синий сайт