Совет

Всегда используйте объявление XML

Основные свойства для обработки XML

Comments

Серия контента:

Этот контент является частью # из серии # статей: Совет

Следите за выходом новых статей этой серии.

Этот контент является частью серии:Совет

Следите за выходом новых статей этой серии.

Для начала разберемся в терминах. Раздел 2.8 Рекомендации W3C по XML 1.0 в частности гласит:

XML-документы ДОЛЖНЫ начинаться с объявления XML, в котором определяется версия используемого XML.

Слово "ДОЛЖНЫ" формально является термином RFC 2119, определенным следующим образом:

Данное слово, или прилагательное "РЕКОМЕНДУЕМЫЙ" означает, что в отдельных обстоятельствах могут существовать веские причины, для игнорирования указанных правил, однако перед выбором этого пути все последствия должны быть поняты и тщательно взвешены.

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

Анализ объявления

Объявление XML имеет следующий вид:

<?xml <i>version </i> <i>opt._encoding </i> <i>opt._standalone</i>?>

Эти три ключевых части объявления XML иногда еще называют псевдо-атрибутами, из-за того, что они выглядят синтаксически как атрибуты. Объявление кодировки, если таковое существует, должно следовать за объявлением версии XML. Затем должно следовать объявление “автономности” XML (standalone).

Версия

Объявление версии XML является особенно важным теперь, когда стандарт XML 1.1 был утвержден как Рекомендованный W3C. В версии XML 1.1 определение правильно сформированного документа слегка изменено. Одним из таких изменений является то, что XML 1.1 указывает на обязательность объявления XML. Рекомендация W3C гласит:

Документы XML версии 1.1 ДОЛЖНЫ начинаться с объявления XML, которое определяет версию используемого XML.

Мы выделили здесь слово «должны». Согласно данному определению, любой XML-документ без объявления XML является документом XML 1.0. Кроме этого, версию XML нужно указывать по причине того, что она является очень важной при определении кодировки.

Кодировка

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

Самыми распространенными кодировками являются UTF-8 и UTF-16, которые передают символы Unicode, соответственно, как последовательность 8-битных и 16-битных значений. Обе эти кодировки должны поддерживаться парсерами. Если кодировка не задана, обработчик XML подразумевает, что используется кодировка UTF-8 или UTF-16 в зависимости от наличия или отсутствия в самом начале обрабатываемого файла особой последовательности байт (называемой Byte Order Mark или BOM).

Одной из часто встречающихся мне проблем при обработке XML была ситуация, когда объявление XML отсутствовало, а автор XML-документа пытался использовать полный набор символов в кодировке LATIN-1 (ISO-8859-1), так популярной в Америке и Западной Европе. Обычно BOM не присутствует и обработчик XML подразумевает, что используется кодировка UTF-8. В лучшем случае в такой ситуации парсер выдаст набор байт, который сформирует неверную последовательность UTF-8 и пользователь, по крайней мере, получит чистую ошибку форматирования документа. Худшим случаем является тот, когда символы кодировки LATIN-1, встречающиеся случайно, формируют правильную последовательность UTF-8. В этом случае парсер не выдаст ошибки форматирования документа, а символы XML могут оказаться совсем не тем, что вам нужно. Такую разновидность скрытой ошибки довольно сложно отследить в системе производства.

Если система внедряет правило, что все XML-документы должны иметь объявление XML, включающее кодировку, то все файлы, содержащие кодировку LATIN-1 должны всегда начинаться со следующей строки:

<?xml version="1.0" encoding="LATIN-1"?>

В этом случае явная или скрытая ошибка неправильного предположения кодировки UTF-8 не появится. Такая форма (с правильным указанием версии XML и кодировки) является минимальным объявлением XML, настоятельно рекомендованным к использованию во всех XML-файлах. Вообще, следует объявлять кодировку в любом случае, даже если она является одной из заданных по умолчанию (UTF-8 или UTF-16).

Примечание: Файл, использующий кодировку UTF-16 должен начинаться с последовательности BOM, даже если кодировка объявлена правильно.

Standalone (Автономный)

В этом объявлении XML указывается, содержит ли внешнее подмножество DTD какие-либо объявления, которые могут повлиять на текущее содержимое документа. Разумеется, это имеет значение только тогда, когда вы используете DTD.

Подведение итогов

Существует распространенное мнение многих программистов о том, что явное определение всегда лучше определения по умолчанию. Это особенно верно в случае с объявлением XML. Мы настоятельно рекомендуем вам принять простое правило, что все XML-документы должны содержать объявление XML, включающее указание кодировки документа. Как показывает опыт, использование такой политики позволяет минимизировать скрытые ошибки XML и к тому же не причиняет особых неудобств.


Ресурсы для скачивания


Похожие темы


Комментарии

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

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=XML, SOA и web-сервисы
ArticleID=96468
ArticleTitle=Совет: Всегда используйте объявление XML
publish-date=04302004