Книга: Технология XSLT

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

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

В XML-документы могут быть включены не относящиеся к содержимому документа инструкции, несущие информацию для приложения, которое будет этот документ обрабатывать. Инструкции по обработке имеют вид:

<?приложение содержимое?>

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

Примером инструкции по обработке может послужить следующая запись:

<?serv cache-document?>

В данном случае целевое приложение имеет имя 'serv', а сама инструкция может быть интерпретирована как указание серверу на то, что документ нужно сохранить в кэше. Естественно, инструкции по обработке имеют смысл только для тех приложений, которым они адресуются.

Продукции инструкций по обработке имеют следующий вид:

[16] PI ::= '<?' PITarget
            (S (Char* - (Char* '?>' Char*)))? '?>'

В этом правиле выражение (S (Char* - (Char* '?>' Char*)))? означает, что приложение и содержимое инструкции по обработке разделены пробельными символами, причем содержимое состоит из любых символов, кроме последовательности '?>', которая обозначает конец инструкции.

Целевое приложение может иметь любое имя (кроме "xml" в любом регистре символов). Имя целевого приложения определяется EBNF-правилом PITarget:

[17] PITarget ::= Name - (('X' | 'х') ('М' | 'm') ('L' | 'l'))

В XML определена особая конструкция, называемая ХМL-декларацией (XML declaration). Она имеет вид:

<?xml version="версия" encoding="кодировка" standalone="yes | no"/>

Несмотря на то, что XML-декларация очень похожа на инструкцию по обработке, с точки зрения стандарта она таковой не является. Если же подходить менее строго, то смысл XML-декларации полностью соответствует смыслу инструкции по обработке: она сообщает обрабатывающему данный документ программному обеспечению информацию о некоторых свойствах этого документа. XML-декларация может содержать псевдоатрибутыversion, encoding и standalone, которые мы рассмотрим ниже.

Замечание

В отличие от элементов, XML-декларация, как и инструкции по обработке не могут иметь атрибутов. Однако их содержимое очень часто образуется в форме имя="значение" — такие объявления и называются псевдоатрибутами.

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

Пример

<?xml version="1.0"?>

Псевдоатрибут encoding сообщает, в какой кодировке создан данный документ. По умолчанию выбрана Unicode-кодировка UTF-8 (подробнее см. "Использование Unicode"), но точно так же может быть использована и любая другая кодировка, лишь бы только ее поддерживало программное обеспечение, обрабатывающее документ.

Пример

Большинство документов, созданных на русском языке, используют кириллические кодировки windows-1251 и KOI8-R; XML-декларации для этих документов будут иметь вид:

<?xml version="1.0" encoding="windows-1251"?>

и

<?xml version="1.0" encoding="KOI8-R"?>

соответственно.

Для документов, в которых использовались только нижние 127 символов ASCII, то есть, символы с кодами, не превышающими #x7F, псевдоатрибут encoding указывать необязательно. В этой области символов кодировка UTF-8 совпадает с ASCII.

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

Декларации XML соответствует продукция XMLDecl, которая, в свою очередь, использует несколько дочерних правил:

[23] XMLDecl ::= '<?xml' VersionInfo EncodingDecl?
                  SDDecl? S? '?>'

Продукция VersionInfo определяет синтаксис псевдоатрибута version:

[24] VersionInfo ::= S? 'version' Eq
                     ("'" VersionNum "'"
                     | "" VersionNum "")

Значение версии документа может состоять из латинских букв и цифр, а также символов "_", ".", ":" и "-":

[26] VersionNum ::= ([a-zA-Z0-9_.:] | '-')+

Кодировка объявляется продукцией EncodingDecl, которая синтаксически похожа на VersionInfo:

[80] EncodingDecl ::= S? 'encoding' Eq
                      ("'" EncName "'"
                      | '"' EncName '"')

Имя кодировки, EncName, может состоять только из латинских букв, цифр и символов ".", "_" и "-", причем первым символом названия кодировки всегда должна быть буква:

[81] EncName [A-Za-z] ([A-Za-z0-9.-] | '-')*

Используемое в документе название кодировки должно быть известно программному обеспечению, которое этот документ обрабатывает. В противном случае могут возникнуть ошибки и несоответствия. В спецификации рекомендуется использовать названия кодировок, одобренные IANA (Internet Assigned Numbers Authority — Комитет присвоенных кодов Интернет). Кириллице, которая используется в русском языке, в списках IANA присваивается около десятка кодировок. Самыми распространенными из них являются следующие:

? Windows-1251;

? KOI8-R;

? Cp866;

? ISO-8859-5.

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

<?xml version="1.0" encoding="x-BK-CYR"?>

Псевдоатрибуту standalone соответствует EBNF-правило SDDecl:

[32] SDDecl ::= S 'standalone' Eq
                (("'" ('yes' | 'no') "'")
                | ( '"' ('yes' | 'no') '"' ) )

Расшифровывается это правило очень просто: псевдоатрибут standalone может иметь значение yes или no, заключенное в одинарные или двойные кавычки.

Оглавление книги


Генерация: 1.762. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз