|
Формат XML - описаниечасть 2
2 Документы [Определение: Объект данных является документом XML, если он (объект) правильно сформирован, как определено в данной спецификации. Правильно сформированный документ XML может дополнительно являться также правильным, если он удовлетворяет некоторым дополнительным ограничениям.] Каждый документ XML имеет логическую и физическую структуру.
[Определение: Текстовый объект является правильно сформированным документом XML, если:]
Document\Документ
Совпадение с объектом документа предполагает, что:
[Определение: Как следствие этого, для каждого некорневого элемента C в документе имеется элемент P в таком документе, что C находится в содержимом элемента P, но не в содержимом любого другого элемента, который находится в содержимом P.P называется parent/родителем C, а C - child/потомком P.]
[Определение: Разбираемый экземпляр содержит текст, последовательность символов, которая может представлять символьные данные или разметку.] Character Range\Диапазон символов
Механизм кодирования кодовых точек символов внутри битовых последовательностей может варьироваться от экземпляра к экземпляру. Все процессоры XML обязаны принимать кодировки UTF-8 и UTF-16 из 10646. Механизм обозначения того, какая из двух кодировок используется, и подключение других кодировок обсуждается позже в разделе 4.3.3 Кодирование Символов в Экземплярах.
Этот раздел определяет некоторые символы, широко используемые в грамматике. S (пробел) состоит из одного или более символов пробела (#x20), возврата каретки, перевода строки или табуляции. White Space\Пробел
Для удобства символы подразделяются на буквы, цифры и прочие символы. [Определение: Name\Имя это лексическая единица, начинающаяся буквой или одним из символов пунктуации и продолжающаяся буквами, цифрами, дефисами, символами подчёркивания, двоеточием или full stops, известными как символы именования.] Примечание: Пространство Имён в Рекомендациях XML [XML Names] устанавливает значения именам, содержащим символы двоеточия. Следовательно, авторы не должны использовать двоеточие в именах XML, исключая использование для целей пространства имён, но процессоры XML обязаны принимать двоеточие как символ именования. Nmtoken (лексема именования) состоит из символов именования. Names and Tokens\Имена и Лексемы
Литерные данные это любая строка, заключённая в кавычки и не содержащая знаков кавычки, которые используются в качестве ограничителей этой строки. Литеры используются для специфицирования содержимого внутренних экземпляров/internal entities ( EntityValue), значений атрибутов (AttValue) и внешних идентификаторов (SystemLiteral). Обратите внимание, что SystemLiteral может быть разобран без сканирования разметки.Literals\Литеры
Примечание: Хотя продукт EntityValue допускает определение экземпляра, состоящего из одиночного < в литерале (напр., <!ENTITY mylt "<">), настоятельно рекомендуется исключить такое использование, поскольку любое обращение к такому экземпляру вызовет ошибку "правильности формирования" (well-formedness).
Текст состоит из смеси символьных данных и разметки. [Определение: Весь текст, не являющийся разметкой, образует символьные данные документа.] Символ амперсанда (&) и левая угловая скобка (<) могут появляться в своей литеральной форме только при использовании в качестве ограничителей разметки или в комментариях, инструкциях процесса или разделах CDATA. Если их необходимо использовать ещё где-нибудь, они обязаны вводиться в виде escape-последовательности, с использованием цифровой мнемоники или строки " &" и "<" соответственно. Правая угловая скобка (>) может быть представлена строкой ">" и обязана, для обеспечения совместимости, вводиться с помощью escape-посследовательности ">" или символьной мнемоники, если появляется в строке "]]>" внутри содержимого, и если эта строка не обозначает конец раздела CDATA.Символьные данные в содержимом элементов - это любая строка символов, не содержащая начальных ограничителей или другой разметки. В разделе CDATA символьные данные - это любая строка символов, не включающая закрывающий ограничитель раздела CDATA - " ]]>".Для того, чтобы значения атрибутов могли содержать и одинарные, и двойные кавычки, апостроф, или одиночная кавычка, (') может быть представлен в виде " '", а символ двойной кавычки (") - как """.Character Data\Символьные Данные
[Определение: Комментарии могут появляться в любом месте документа вне прочей разметки; кроме того, они могут появляться внутри объявления типа документа в тех местах, которые допускаются грамматикой. Они не являются частью символьных данных документа: процессор XML может, но не должен, давать приложению возможность запрашивать текст комментариев. Для обеспечения совместимости строка " --" (двойной дефис) обязана не появляться внутри комментариев.] Ссылки на экземпляры параметров не распознаются внутри комментариев.Comments/Комментарии
Пример комментария:
Заметьте, что грамматика не допускает заканчивать комментарии сочетанием --->.Следующий пример сформирован неправильно.
[Определение: Инструкции процесса (ИП) позволяют вводить в текст документа инструкции для приложений.] Processing Instructions\Инструкции Процесса
ИП не являются частью символьных данных документа и передаются непосредственно приложению. ИП начинается указанием на "цель" (PITarget) для идентификации приложения, которому направляется инструкция. Имена цели, такие как " XML", "xml" и т.д., зарезервированы для возможности стандартизации в этой и будущих версиях данной спецификации. Механизм XML "Нотация" может использоваться для формального объявления целей ИП. Ссылки на экземпляр параметра не распознаются внутри ИП.
[Определение: Разделы CDATA могут появляться там же, где и символьные данные; они используются для escape-блоков текста, содержащего символы, которые иначе будут распознаваться как разметка. Разделы CDATA начинаются строкой " <![CDATA[" и заканчиваются строкой "]]>":]CDATA Sections/Разделы CDATA
Внутри раздела CDATA только строка CDEnd распознаётся как разметка, так что амперсанд и левая угловая скобка могут появляться в своей литеральной форме: они не должны (и не могут) быть указаны в escape-последовательности с использованием " <" и "&".Раздел CDATA не может вкладываться. Пример раздела CDATA, где " <greeting>" и "</greeting>" распознаются как символьные данные, а не разметка:
[Определение: Документы XML должны начинаться объявлением XML, которое специфицирует используемую версию XML.] Например, вот полный документ XML, правильно сформированный, но не правильный:
также и здесь:
Номер версии " 1.0" должен использоваться для обозначения соответствия данной версии описываемой спецификации; ошибкой является использование в документе значения "1.0", если он не соответствует данной версии этой спецификации. Рабочая группа XML намерена давать последующим версиям спецификации номера, отличные от "1.0", но это намерение не означает принятия обязательства создавать какие-либо версии XML, ни также, если такие версии будут созданы, использовать какую-либо конкретную схему нумерации.Поскольку будущие версии ещё не сформированы, эта конструкция даётся как средство предоставления возможности автоматического распознавания версии и должна, следовательно, быть включена обязательно. Процессоры могут сигнализировать об ошибке, если получат документ, помеченный неподдерживаемой версией. Функцией разметки в документе XML является обязанность описывать структуру хранения данных и логическую структуру и ассоциировать пары атрибут-значение с их логическими структурами. XML предоставляет механизм объявления типа документа для определения ограничений в логической структуре и для поддержки использования предопределённых единиц хранения. Объявление типа документа обязано появляться перед первым элементом в документе. Prolog\Пролог
[Определение: объявление типа документа XML содержит или указывает на объявления разметки, предоставляющие грамматику для класса документов. Эта грамматика известна как определение типа документа или ОТД/DTD. Объявление типа документа может указывать на внешний поднабор (особый вид внешнего экземпляра), содержащий объявления разметки, или может непосредственно содержать объявления разметки во внутреннем поднаборе, или может иметь и то, и другое. ОТД документа состоит из обоих соединённых поднаборов.] [Определение: объявление разметки это объявление типа элемента, объявление списка атрибутов и объявление экземпляра, или объявление нотации.] Эти объявления могут полностью или частично содержаться внутри экземпляров параметров, как описано ниже в разделах о правильном формировании и ограничениях правильности. Document Type Definition\Определение Типа Документа
Обратите внимание, что можно конструировать правильно сформированные документы, содержащие doctypedecl, которое никогда не указывает ни на внешний, ни на внутренний поднабор. Объявления разметки могут быть выполнены полностью или частично путём замещающего текста экземпляров параметров. Далее в этой спецификации продукты отдельных нетерминалов (elementdecl, AttlistDecl и т.д.) описывают объявления после всех экземпляров параметров, которые были включены. Ссылки на экземпляры параметров распознаются в любом месте ОТД (внешних или внутренних поднаборах и внешних экземплярах параметров), исключая литералы, инструкции процесса, комментарии и содержимое игнорируемых условных секций (см. 3.4 Разделы Условий). Ограничение правильности: Тип Корневого Элемента Имя в объявлении типа документа обязано совпадать с типом элемента корневого элемента. Ограничение правильности: Соответствующее Объявление/Вложение ЭП Замещающий текст экземпляра параметра обязан правильно вкладываться в объявления разметки. То есть, если первый или последний символ объявления разметки (markupdecl выше по тексту) содержится в замещающем тексте для ссылки на ЭП, то оба они обязаны содержаться в одном и том же замещающем тексте. Ограничение правильной сформированности: ЭП во Внутреннем Поднаборе Во внутреннем поднаборе ОТД, ссылки на ЭП могут появляться только там, где могут появляться объявления разметки, но не внутри объявлений разметки. (Это не относится к ссылкам, появляющимся во внешних ЭП, или ко внешним поднаборам.) Ограничение правильной сформированности: Внешний Поднабор Внешний поднабор, если он имеется, обязан совпадать с продукцией для extSubset. Ограничение правильной сформированности: ЭП между Объявлениями Замещающий текст ссылки ЭП в DeclSep обязан совпадать с продукцией extSubsetDecl. Подобно внутреннему поднабору, внешний поднабор и любой внешний ЭП, на который имеется ссылка в DeclSep, обязан состоять из серии полных объявлений разметки типов, допустимых нетерминальной символьной markupdecl, перемежаемых пробелами или ссылками на ЭП. Однако части содержимого внешнего поднабора или этих внешних ЭП могут условно игнорироваться путём использования конструкций разделов условий; это не допускается во внутреннем поднаборе. External Subset\Внешний Поднабор
Внешний поднабор и внешний ЭП отличаются также от внутреннего поднабора тем, что ссылки на ЭП разрешены внутри объявлений разметки, а не только между объявлениями разметки. Пример документа XML с объявлением типа документа:
Системный идентификатор " hello.dtd" задаёт адрес (ссылку URI) на ОТД для данного документа.Объявление может быть также дано локально, как в следующем примере:
Если используются и внешний, и внутренний поднаборы, то считается, что внутренний поднабор появляется перед внешним поднабором. Это приводит к тому, что экземпляр и объявления списков атрибутов внутреннего поднабора имеют приоритет перед экземпляром и объявлениями внешнего поднабора.
Объявления разметки могут влиять на содержимое документа при передаче его от процессора XML приложению; примерами могут служить значения атрибутов по умолчанию и объявления экземпляров. Отдельное объявление документа, которое может появляться как компонент объявления XML, сигнализирует о том, имеются или нет такие объявления, которые являются внешними по отношению к экземпляру документа или экземплярам параметров. Standalone Document Declaration\Отдельное Объявление Документа
В отдельном объявлении документа значение "yes" означает отсутствие внешних объявлений разметки, влияющих на информацию, предаваемую от процессора XML приложению. Значение "no" означает, что имеются или могут быть такие внешние объявления разметки. Заметьте, что отдельное объявление документа означает лишь существование внешних объявлений. Существование в документе ссылок на внешние экземпляры, если эти экземпляры объявлены внутри, не изменяет их отдельный статус. Если внешние объявления разметки отсутствуют, отдельное объявление документа не имеет смысла. Если имеются внешние объявления разметки, но отсутствует отдельное объявление документа, принимается значение "no". Любой документ XML, в котором standalone="no", может быть по алгоритму конвертирован в отдельный документ, что может быть необходимо для некоторых приложений, работающих в сети.Ограничение правильности: Объявление Отдельного Документа Объявление отдельного документа обязано иметь значение "no", если любое из внешних объявлений разметки содержит объявления:
Пример объявления XML с объявлением отдельного документа:
При редактировании документов XML часто бывает удобно использовать "пробельные символы" (пробелы, табуляцию и пустые строки) для разделения разметки на блоки - для удобства чтения. Такие пробелы обычно не включаются в публикуемую версию документа. С другой стороны, "значащий" пробел, который должен быть сохранён в публикуемой версии, является обычным, например, в поэзии и исходном коде. Процессор XML обязан всегда передавать приложению все символы в документе, не являющиеся разметкой. Проверяющий процессор XML обязан также информировать приложение о том, какие из этих символов образуют пробелы, появляющиеся в содержимом элемента. Специальный атрибут, называемый xml:space, может быть присоединён к элементу для того, чтобы сигнализировать о намерении сохранить пробел в данном элементе для использования приложением. В правильных/valid документах этот атрибут, как и некоторые другие, обязан быть объявлен, если он используется. Если объявлен, он обязан быть дан как перечисляемый тип, значения которого - одно или оба - "default" и "preserve". Например:
Значение "default" сигнализирует, что для данного элемента принимаются режимы обработки по умолчанию пробелов в данном приложении; значение "preserve" означает намерение сохранить в приложении все пробелы. Это объявленное намерение учитывается для применения ко всем элементам внутри содержимого элемента там, где оно специфицировано, если только оно не переопределяется другим экземпляром атрибута xml:space.Корневой элемент любого документа считается не имеющим никаких намерений относительно обработки пробелов приложением, если только он не предоставляет значение для данного атрибута или если атрибут не объявлен внутри значения по умолчанию.
Разбираемые экземпляры XML часто хранятся в компьютерных файлах, которые, по соглашению о редактировании, организуются в строки. Эти строки обычно разделяются определёнными сочетаниями символов возврата каретки (#xD) и перевода строки (#xA). Для упрощения задач приложения символы, передаваемые приложению процессором XML, обязаны быть таким, как если бы процессор XML нормализовал все разрывы строк во внешних разбираемых экземплярах (включая экземпляр документа) при вводе, перед разбором, транслируя обе двухсимвольные последовательности - #xD #xA и любые #xD, после которых не идёт символ #xA, в одиночный символ #xA.
При обработке документа часто используется идентификация естественного или формального языка, на котором написано содержимое. Специальный атрибут, называемый xml:lang, может быть вставлен в документ, чтобы специфицировать язык, используемый в содержимом и значениях атрибутов любого элемента в документе XML. В правильных документах этот атрибут, как и некоторые другие, обязан быть объявлен, если используется. Значениями атрибута являются идентификаторы языка, как определено в [IETF RFC 1766], Tags for the Identification of Languages, или его преемниках в IETF Standards Track.Примечание: Тэги [IETF RFC 1766] состоят из двухбуквенных кодов языка, как определено в [ISO 639], из двухбуквенных кодов страны, как определено в [ISO 3166], или из идентификаторов языка, зарегистрированных Internet Assigned Numbers Authority [IANA-LANGCODES]. (Продукты с 33 по 38 удалены.) Например:
Цель (значение атрибута), объявленная xml:lang, предполагается к применению во всех атрибутах и содержимом элементов там, где она специфицирована, если только не переопределена экземпляром xml:lang другого элемента в данном содержимом.Простое объявление xml:lang может иметь форму
но конкретные значения по умолчанию также могут быть заданы, если это необходимо. В сборнике французской поэзии для английских студентов, со справочником и примечаниями на английском, атрибут xml:lang может быть объявлен так:
к содержанию |