|
Формат XML - описаниечасть 4
4 Физические структуры Определение: Документ XML может состоять из одной или более единиц хранения. Они называются экземплярами; они имеют содержимое и все (исключая экземпляр документа и внешний поднабор ОТД) идентифицируются по name\имени экземпляра.] Каждый документ XML имеет один экземпляр, называемый экземпляр документа, который служит в качестве стартовой точки для процессора XML и может содержать весь документ. Экземпляры могут быть разбираемыми и неразбираемыми. [Определение: Содержимое разбираемого экземпляра называется его замещающим текстом; этот текст считается неотъемлемой частью документа.] [Определение: Неразбираемый экземпляр это ресурс, чьё содержимое может, или может не быть, текстом, и, если это текст, может не быть XML. Каждый неразбираемый экземпляр имеет ассоциированную нотацию, идентифицируемую по имени. Помимо требования к процессору XML сделать идентификаторы экземпляра и нотации доступными приложению, XML не накладывает никаких ограничений на содержимое неразбираемых экземпляров.] Разбираемые экземпляры вызываются по имени с использованием ссылок экземпляра; неразбираемые экземпляры - по имени, заданному в значении атрибутов ENTITY или ENTITIES. [Определение: General entities/Общие экземпляры это экземпляры для использования внутри содержимого документа. В этой спецификации ОЭ иногда называются неквалифицированным термином экземпляр, если это не приводит к неоднозначности.]
[Определение: Ссылка символа ссылается на специфический символ в наборе символов ISO/IEC 10646, например, ссылка на символ, не доступный напрямую из устройства ввода.] Character Reference\Ссылка Символа
Ограничение правильной сформированности: Допустимый Символ Символ, имеющий символьную ссылку на себя, обязан соответствовать продукции Char. Если ссылка символа начинается с "&#x", цифры и буквы вплоть до конечного ; дают 16-ричное представление кодовой точки входа символа ISO/IEC 10646. Если она начинается просто с "&#", то цифры вплоть до конечного ; дают 10-ричное представление кодовой точки входа символа. [Определение: Ссылка экземпляра ссылается на содержимое именованного экземпляра.] [Определение: Ссылки на общие разбираемые экземпляры используют амперсанд (&) и точку с запятой (;) в качестве разделителей.] Entity Reference\Ссылки Экземпляра
Ограничение правильной сформированности: Entity Declared/Экземпляр Объявлен В документе без ОТД, документе только с одним внутренним поднабором ОТД, не содержащим ссылок экземпляров параметров, или в документе со "standalone='yes'", для ссылки экземпляра, которая не появляется внутри внешнего поднабора или экземпляра параметра, Name, заданное в ссылке экземпляра, обязано совпадать с именем в объявлении экземпляра, который(ое?) не появляется внутри внешнего поднабора или экземпляра параметра, за исключением того, что правильно сформированный документ не должен объявлять следующие экземпляры: amp, lt, gt, apos, quot. Объявление общего экземпляра обязано предшествовать любой ссылке на него, которая появляется в значении по умолчанию в объявлении списка атрибутов. Учтите, что, если экземпляры объявляются во внешнем поднаборе или во внешних экземплярах параметров, то непроверяющий процессор не обязательно читает и обрабатывает их объявления; для таких документов правилом является то, что экземпляр, который обязан быть объявлен, является правильно сформированным ограничением только тогда, когда standalone='yes'. Ограничение правильности: Экземпляр Объявлен В документе с внешним поднабором или внешними экземплярами параметров с "standalone='no'", Name, данное в ссылке экземпляра, обязано совпадать с именем в объявлении экземпляра. Для целей взаимодействия, правильные документы должны объявлять экземпляры amp, lt, gt, apos, quot в форме, специфицированной в разделе 4.6 Предопределённые Экземпляры. Объявление экземпляра параметра обязано предшествовать любой ссылке на него. Точно так же объявление общего экземпляра обязано предшествовать любому объявлению списка атрибутов, содержащему значение по умолчанию с прямой или косвенной ссылкой на этот общий экземпляр. Ограничение правильной сформированности: Разбираемый Экземпляр Ссылка экземпляра обязана не содержать имя неразбираемого экземпляра. Неразбираемые экземпляры могут иметь на себя ссылку только в значениях атрибутов, объявленных как тип ENTITY или ENTITIES. Ограничение правильной сформированности: Нет Рекурсии Разбираемый экземпляр обязан не содержать рекурсивных ссылок на самого себя, прямых или косвенных. Ограничение правильной сформированности: в ОТД Ссылки на экземпляр параметра могут появляться только в ОТД. Примеры ссылок на символы и экземпляры:
Пример ссылки на экземпляр параметра:
[Определение: Экземпляры объявляются так:] Entity Declaration\Объявление Экземпляра
Name идентифицирует экземпляр в ссылке на экземпляр или, в случае неразбираемого экземпляра, в значении атрибута ENTITY или ENTITIES. Если один и тот же экземпляр объявлен более одного раза, первое обнаруженное объявление подключается; по выбору пользователя процессор XML может выдавать предупреждение, если экземпляры объявляются несколько раз.
[Определение: Если определение экземпляра дано как EntityValue, определяемый экземпляр называется внутренним экземпляром. При этом отсутствует отдельный физический объект хранения, и содержимое экземпляра даётся в определении.] Обратите внимание, что может понадобиться определённая обработка ссылок на символы и экземпляры в литерном значении экземпляра для того, чтобы произвести корректный замещающий текст: см. 4.5 Конструкция замещающего текста для внутреннего экземпляра. Внутренний экземпляр это разбираемый экземпляр. Пример объявления внутреннего экземпляра:
[Определение: Если экземпляр не является внутренним, то он является внешним экземпляром, объявляемым так:] External Entity Declaration\Объявление Внешнего Экземпляра
Если NDataDecl присутствует, то это - общий неразбираемый экземпляр; в противном случае это - разбираемый экземпляр. Ограничение правильности: Объявленная Нотация Name обязано совпадать с объявленным именем нотации. [Определение: SystemLiteral называется системным идентификатором экземпляра. Это ссылка URI (как определено в [IETF RFC 2396], обновлено в [IETF RFC 2732]), которая должна быть разыменована для получения ввода для процессора XML, чтобы построить замещающий текст экземпляра.] Для фрагмента идентификатора (начинающегося символом #) будет считаться ошибкой, если он будет частью системного идентификатора. Если только иное не даётся в информации за пределами данной спецификации (например, специальный тип элемента XML, определённый особым ОТД, или инструкция процесса, определённая особой спецификацией приложения), то относительные URI являются относительными к месту размещения того ресурса, внутри которого появляется объявление экземпляра. URI может, таким образом, быть относительным к экземпляру документа, к экземпляру, содержащему внешний поднабор ОТД, или к какому-либо внешнему экземпляру параметра.URI-ссылки требуют кодирования и escap'ирования некоторых символов. Недопустимые символы включают все не-ASCII символы, плюс исключённые символы, перечисленные в Разделе 2.4 в [IETF RFC 2396], кроме символов знака номера ( #) и знака процента (%) и символов квадратных скобок, вновь разрешённых в [IETF RFC 2732].Недопустимые символы должна быть escap'ированы так :
[Определение: В дополнение к системному идентификатору, внешний идентификатор может включать публичный идентификатор.] Процессор XML, пытающийся получить содержимое экземпляра, может использовать публичный идентификатор, чтобы попытаться сгенерировать альтернативную ссылку URI. Если процессор не может выполнить это, он обязан использовать ссылку URI, специфицированную в системном литерале. Прежде чем будет предпринята попытка сопоставления, все строки пробелов должны быть нормализованы до одиночного символа пробела(#x20), а ведущие и ведомые пробелы должны быть удалены. Примеры объявлений внешнего экземпляра:
4.3.1 Объявление текста Каждый внешний разбираемый экземпляр должен начинаться с объявления текста. Text Declaration\Объявление Текста
Объявление текста обязано быть дано литерально, а не по ссылке на разбираемый экземпляр. Объявление текста не может появиться в иной позиции, кроме начала внешнего разбираемого экземпляра. Объявление текста во внешнем разбираемом экземпляре не считается частью его замещающего текста.
Экземпляр документа является правильно сформированным, если он соответствует помеченному продукцией документу. Внешний общий разбираемый экземпляр является правильно сформированным, если он соответствует помеченному продукцией extParsedEnt. Все внешние экземпляры параметров являются правильно сформированными по определению. Well-Formed External Parsed Entity\Правильно Сформированный Внешний Разбираемый Экземпляр
Внутренний общий разбираемый экземпляр является правильно сформированным, если его замещающий текст соответствует помеченному продукцией содержимому. Все внутренние экземпляры параметров являются правильно сформированными по определению. Следствием правильной сформированности экземпляров является то, что логические и физические структуры в документе XML правильно вкладываются; ни начальный, ни конечный тэг, ни тэг пустого элемента, элемент, комментарий, инструкция процесса, символьная ссылка или ссылка на экземпляр не могут начинаться в одном экземпляре, а заканчиваться - в другом.
Каждый внешний разбираемый экземпляр в документе XML может использовать свою кодировку символов. Все процессоры XML обязаны "уметь" прочесть кодировки UTF-8 и UTF-16. Термины "UTF-8" и "UTF-16" в данной спецификации не применяются к кодировкам символов с другими названиями, даже если кодировки или названия очень похожи на UTF-8 или UTF-16. Экземпляры, кодированные в UTF-16, обязаны начинаться с Byte Order Mark (Знака Байтового Порядка), описанного в Annex F [ISO/IEC 10646], Annex H [ISO/IEC 10646-2000], раздел 2.4 [Unicode] и раздел 2.7 [Unicode3] (символа ZERO WIDTH NO-BREAK SPACE/ НЕРАЗРЫВНЫЙ ПРОБЕЛ НУЛЕВОЙ ШИРИНЫ, #xFEFF). Это "подпись" кодировки, но не часть разметки или символьных данных документа XML. Процессоры XML обязаны уметь использовать этот символ для различения документов, кодированных в UTF-8 и UTF-16. Хотя процессор XML должен читать только экземпляры в кодировках UTF-8 и UTF-16, известно, что повсюду используются другие кодировки, и для процессоров XML желательно уметь читать экземпляры, использующие эти (другие) кодировки. При отсутствии внешней информации о кодировке символов (такой как "шапки" MIME), разбираемые экземпляры, хранящиеся в кодировка, отличных от UTF-8 или UTF-16, обязаны начинаться с объявления текста (см. 4.3.1 Объявление Текста), содержащего объявление кодировки: Encoding Declaration\Объявление Кодировки
В экземпляре документа объявление кодировки является частью объявления XML. EncName это название/имя используемой кодировки. В объявлении кодировки значения " UTF-8", "UTF-16", "ISO-10646-UCS-2" и "ISO-10646-UCS-4" должны использоваться для различных кодировок и трансформаций Unicode / ISO/IEC 10646, значения "ISO-8859-1", "ISO-8859-2", ... "ISO-8859-n" (где n это номер части) должны использоваться для частей ISO 8859, а значения "ISO-2022-JP", "Shift_JIS" и "EUC-JP" должны использоваться для различных форм кодировок JIS X-0208-1997. Рекомендуется, чтобы кодировки символов, зарегистрированные (как charsets\наборы символов) в Internet Assigned Numbers Authority [IANA-CHARSETS], и отличающиеся от уже перечисленных, именовались с использованием их зарегистрированных имён; другие кодировки должны использовать имена, начинающиеся с префикса "x-". Процессоры XML должны подбирать имена кодировок символов нечувствительным к регистру способом и должны интерпретировать зарегистрированные IANA имена как кодировки, зарегистрированные в IANA для этих имён, или рассматривать их как неизвестные (от процессоров, разумеется, не требуется поддерживать все зарегистрированные IANA кодировки).В отсутствие информации, предоставляемой внешним транспортным протоколом (например, HTTP или MIME), ошибочным для экземпляра, включая объявление кодировки, будет представление перед процессором XML в кодировке, отличной от именованной в объявлении, или использование экземпляром, не начинающимся Byte Order Mark либо объявлением кодировки, отличной от UTF-8. Заметьте, что, поскольку ASCII является поднабором UTF-8, обычные экземпляры ASCII не требуют в обязательном порядке наличия объявления кодировки. Считается фатальной ошибкой, если TextDecl появится в ином месте, кроме начала внешнего экземпляра. Считается фатальной ошибкой, если процессор XML обнаруживает экземпляр с кодировкой, которую невозможно обработать. Является фатальной ошибкой, если экземпляр XML определён (в значениях по умолчанию, в объявлении кодировки или высокоуровневым протоколом) в определённой кодировке, но содержит восьмеричные последовательности, которые не являются разрешёнными в данной кодировке. Будет также фатальной ошибкой, если экземпляр XML не содержит объявления кодировки, и его содержимое не является UTF-8 или UTF-16. Примеры объявлений текста, содержащие объявления кодировки:
В таблице, приведённой ниже, суммирована контексты, в которых символьные ссылки, ссылки экземпляров и вызовы неразбираемых экземпляров могут появляться, и требуемое поведение процессора XML в каждом случае. Лэйблы в самом левом столбце описывают контекст распознавания: ссылка в содержимом как ссылка где-либо после начального тэга и перед конечным тэгом элемента; соответствует нетерминальному содержимому. ссылка в значении атрибута как ссылка или в значении атрибута в начальном тэге, или как значение по умолчанию в объявлении атрибута; соответствует нетерминальному AttValue. появляется как значение атрибута как Name, не ссылка, появляющееся или как значение атрибута, который объявлен как тип ENTITY, или как одна из трёх разделённых пробелами лексем - в значении атрибута, который объявлен как тип ENTITIES. ссылка в значении экземпляра как ссылка в литеральном значении экземпляра в объявлении экземпляр параметра или внутреннего экземпляра; соответствует нетерминальному EntityValue. ссылка в ОТД как ссылка внутри внешнего или внутреннего поднабора ОТД, но вне EntityValue, AttValue, PI, Comment, SystemLiteral, PubidLiteral или содержимого игнорируемой секции условий (см. 3.4 Секции Условий).
Вне ОТД символ % не имеет специального значения; таким образом, то, что может быть ссылкой на экземпляр параметра в ОТД, не распознаётся как разметка в содержимом. Таким же образом, имена неразбираемых экземпляров не распознаются, за исключением тех случаев, когда они появляются в значении соответственно объявленного атрибута.
[Определение: Экземпляр включён, если его замещающий текст запрашивается и обрабатывается вместо самой ссылки, если она даже и является частью документа в том месте, где ссылка была распознана.] Замещающий текст может содержать и символьные данные, и (за исключением экземпляров параметров) разметку, которая должна распознаваться обычным способом. (Строка " AT&T;" расширяется до "AT&T;" и оставшийся амперсанд не распознаётся как ограничитель ссылки экземпляра.) Ссылка на символ включается, если символ обрабатывается вместо самой ссылки.
Если процессор XML обнаруживает ссылку на разбираемый экземпляр, то, для того чтобы проверить документ, процессор обязан включить его (экземпляра) замещающий текст. Если экземпляр является внешним, а процессор не пытается проверить документ XML, то процессор может, но это не является необходимым, включить замещающий текст экземпляра. Если непроверяющий процессор не включает замещающий текст, он обязан информировать приложение, что он обнаружил, но не прочитал, экземпляр. Это правило базируется на том, что автоматическое распознавание, предоставляемое механизмом экземпляров SGML и XML, первоначально созданным для поддержки модульности в авторизации, не обязательно подходит для других приложений, особенно для просмотра документов. Браузеры, например, при обнаружении ссылки на внешний разбираемый экземпляр, могут избрать визуальное предупреждение о том, что экземпляр существует, и запрашивать его для показа только по требованию (пользователя - перев.).
Следующее запрещено и вызывает фатальные ошибки:
Если ссылка на экземпляр появляется в значении атрибута или ссылка на экземпляр параметра появляется в литеральном значении экземпляра, то замещающий текст обрабатывается вместо самой ссылки, как будто он является частью документа в том месте, где ссылка была обнаружена, за исключением того, что символ одиночной или двойной кавычки в замещающем тексте всегда рассматривается как нормальный символ данных, не заканчивающий литерал. Например, это сформировано правильно:
а это - нет:
Если имя неразбираемого экземпляра появляется как лексема в значении атрибута объявленного типа ENTITY или ENTITIES, то проверяющий процессор обязан информировать приложение о > системных и публичных (если имеются) идентификаторах экземпляра и его ассоциированной нотации.
Если ссылка на общий экземпляр появляется в EntityValue в объявлении экземпляра, то он пропускается и остаётся как есть.
Точно так же, как и в случае с внешними разбираемыми экземплярами, экземпляры параметров должны быть лишь включены, если проверяются. Если ссылка экземпляра параметра распознаётся в ОТД и включается, то его (экземпляра) замещающий текст расширяется путём присоединения одного ведущего и одного ведомого пробела (#x20); целью является - ограничить для замещающего текста экземпляра параметра возможность содержать интегральное число грамматических лексем в ОТД. Это поведение не применяется к ссылкам экземпляра параметра в значениях экземпляра; это описано в 4.4.5 Включён в литерал.
При рассмотрении работы с внутренними экземплярами, необходимо различать две формы значений экземпляра. Литеральное значение экземпляра, данное в объявлении внутреннего экземпляра (EntityValue), может содержать ссылки на символ, экземпляр параметра и общий экземпляр. Такие ссылки обязаны содержаться полностью внутри литерального значения экземпляра. Реальный замещающий текст, который включается так, как описано выше, обязан содержать замещающий текст любого экземпляра параметра, на который имеется ссылка, и обязан содержать символ, на который имеется ссылка, вместо любых мнемоник символов в литеральном значении экземпляра; однако ссылки общего экземпляра обязаны быть оставлены без изменений, неразвёрнутыми. Например, если имеется следующее объявление:
то замещающий текст для экземпляра " book" будет:
Ссылка общего экземпляра " &rights;", который должен быть развёрнут, заставляет ссылку "&book;" появиться в содержимом документа или в значении атрибута.Эти простые правила могут взаимодействовать весьма сложно; детальное обсуждение сложного примера см. в D Развёртывании мнемоник символов.
[Определение: Мнемоники символов могут использоваться для escape'ирования левой угловой скобки, амперсанда и других ограничителей. Для этих целей специфицирован набор общих мнемоник ( amp, lt, gt, apos, quot). Цифровые мнемоники могут также использоваться; они развёртываются сразу при обнаружении и обязаны рассматриваться как символьные данные, так что цифровые мнемоники "<" and "&" могут использоваться для escape'ирования < и &, если они появляются в символьных данных.]Все процессоры XML обязаны распознавать эти мнемоники независимо от того, объявлены они, или нет. Для целей взаимодействия, правильные документы XML должны объявлять эти экземпляры, как и любые другие, до их использования. Если мнемоники lt или amp объявляются, то они обязаны быть объявлены как внутренние экземпляры, чей замещающий текст является мнемоникой соответствующего символа (знака "меньше-чем" или амперсанда), который escape'ируется; для этих экземпляров необходимо двойное escapi'рование, чтобы ссылки на них давали правильно сформированный результат. Если экземпляры gt, apos или quot объявляются, они обязаны быть объявлены как внутренние экземпляры, чей замещающий текст представляет из себя одиночный escape'ируемый символ (или символьную ссылку-мнемонику на этот символ; двойное escapi'рование здесь не обязательно, но и не повредит). Например:
[Определение: Нотации идентифицируют по имени формат неразбираемых экземпляров, формат элементов, которые породили атрибут нотации, или приложение, которому адресуется инструкция процесса.] [Определение: Объявления нотации предоставляют имя нотации для использования в объявлениях экземпляра и списка атрибутов и в спецификациях атрибутов, а также внешний идентификатор для нотации, который может позволить процессору XML или его клиентскому приложению локализовать вспомогательное приложение, способное обработать данные в данной нотации.] Notation Declarations\Объявления Нотации
Ограничение правильности: Уникальное Имя Нотации Только одно объявление нотации может объявить данное Имя/Name. Процессоры XML обязаны предоставлять приложениям имена и внешний(е) идентификатор(ы) любой нотации, объявленной и имеющей ссылку в значении атрибута, определении атрибута или в объявлении экземпляра. Дополнительно они (процессоры) могут развёртывать внешний идентификатор в системный идентификатор, имя файла или другую информацию, необходимую для того, чтобы дать приложению возможность вызывать процессор для данных в описанной нотации. (Не будет ошибкой, однако, для документов XML, объявление и обращение к нотациям, для которых специфическое для каждой нотации приложение недоступно в системе, где процессор XML или приложение запущены.)
[Определение: Экземпляр документа служит корневым объектом дерева экземпляров и стартовой точкой для процессора XML.] Данная спецификация не определяет, как экземпляр документа размещается процессором XML; в отличие от других экземпляров, экземпляр документа не имеет имени и может даже появиться во входном потоке процессора вообще без идентификации. к содержанию |