Введение в XML
В 1986 году, задолго до того, как идея создания сети Веб была воплощена в жизнь, универсальный стандартизированный язык разметки SGML (Standardized Generalized Markup Language) был утвержден в качестве международного стандарта (ISO 8879) определения языков разметки, хотя SGML существовал еще с конца шестидесятых. Он использовался для того, чтобы описывать языки разметки, предоставляя при этом автору возможность давать формальные определения каждому элементу и атрибуту языка.
Язык HTML первоначально был всего лишь одним из SGML-приложений. Он описывал правила, по которым должна быть подготовлена информация для World Wide Web. Таким образом, язык HTML - это набор предписаний SGML, сформулированных в виде определения типа документа (DTD), объясняющих, что именно обозначают тэги и элементы. Схема DTD для языка HTML хранится в веб-браузере.
К недостаткам языка HTML можно отнести следующие:
- HTML имеет фиксированный набор тэгов. Нельзя создавать свои тэги, понятные другим пользователям.
- HTML - это исключительно технология представления данных. HTML не несет информации о значении содержания, заключенного в тэгах.
- HTML - "плоский" язык. Значимость тэгов в нем не определена, поэтому с его помощью нельзя описать иерархию данных.
- В качестве платформы для приложений используются браузеры. HTML не обладает достаточной мощью для создания веб-приложений на том уровне, к которому в настоящее время стремятся веб-разработчики. Например, на языке HTML невозможно разработать приложение для профессиональной обработки и поиска документов.
- Большие объемы трафика сети. Существующие HTML-документы, используемые как приложения, перегружают Интернет большими объемами трафика в системах клиент-сервер. Примером может служить пересылка по сети большого по объему документа, в то время как необходима только небольшая часть этого документа.
Таким образом, с одной стороны, язык HTML является очень удобным средством разметки документов для использования в веб, а с другой - документ, размеченный в HTML, имеет мало информации о своем содержании. Если тот или иной документ несет достаточно полную информацию о своем содержании, появляется возможность сравнительно легко провести автоматическую обобщенную обработку и поиск в файле, хранящем документ. Язык SGML позволяет сохранять информацию о содержании документа, однако вследствие особой сложности он никогда не использовался так широко, как HTML.
Группа экспертов по языку SGML, возглавляемая Джоном Боузэком (Jon Bosak) из компании Sun Microsystems, приступила к работе по созданию подмножества языка SGML, которое могло бы быть принято Web-сообществом. Решено было удалить многие несущественные возможности SGML. Перестроенный таким образом язык назвали XML. Упрощенный вариант оказался значительно более доступным, чем оригинал, его спецификации занимали всего 26 страниц по сравнению с более чем 500 страницами спецификаций SGML.
Рассмотрим более детально структуру и особенности этого языка.
XML (eXtensible Markup Language) - рекомендованный W3C язык разметки. XML - текстовый формат, предназначенный для хранения структурированных данных, для обмена информацией между программами, а также для создания на его основе специализированных языков разметки. XML является упрощенным подмножеством языка SGML .
Язык XML имеет следующие достоинства:
- Это человеко-ориентированный формат документа, он понятен как человеку, так и компьютеру.
- Поддерживает Юникод.
- В формате XML могут быть описаны основные структуры данных - такие как записи, списки и деревья.
- Это самодокументируемый формат, который описывает структуру и имена полей также как и значения полей.
- Имеет строго определенный синтаксис и требования к анализу, что позволяет ему оставаться простым, эффективным и непротиворечивым.
- Широко используется для хранения и обработки документов;
- Это формат, основанный на международных стандартах;
- Иерархическая структура XML подходит для описания практически любых типов документов;
- Представляет собой простой текст, свободный от лицензирования и каких-либо ограничений;
- Не зависит от платформы;
- Является подмножеством SGML, для которого накоплен большой опыт работы и созданы специализированные приложения;
К известным недостаткам языка можно отнести следующие:
- Синтаксис XML избыточен.
- Размер XML документа существенно больше бинарного представления тех же данных (порядка 10 раз).
- Размер XML документа существенно больше, чем документа в альтернативных текстовых форматах передачи данных (например JSON, YAML) и особенно в форматах данных, оптимизированных для конкретного случая использования.
- Избыточность XML может повлиять на эффективность приложения. Возрастает стоимость хранения, обработки и передачи данных.
- Для большого количества задач не нужна вся мощь синтаксиса XML, и можно использовать значительно более простые и производительные решения.
- Пространства имен XML сложно использовать и их сложно реализовывать в XML парсерах.
- XML не содержит встроенной в язык поддержки типов данных. В нем нет понятий "целых чисел", "строк", "дат", "булевых значений" и т. д.
- Иерархическая модель данных, предлагаемая XML, ограничена по сравнению с реляционной моделью и объектно-ориентированными графами.
Вообще говоря, XML можно рассматривать не только как новый язык разметки, но и как основу для целого семейства технологий:
По-сути, XML служит метаязыком для описания структуры других языков. Взаимосвязь между SGML, XML, HTML и некоторыми другими языками показана на следующей диаграмме:
Важным отличием XML от HTML является то большое внимание, которое уделяется контролю за тем, насколько точно соблюдаются правила языка при разметке документов. В зависимости от этого принято выделять правильно построенные и действительные XML документы .
Документ XML считается правильно построенным, если он соответствует всем синтаксическим правилам XML.
Проверка действительности документа предполагает выполнение следующих действий:
- Проверка использования только заданного набора дескрипторов.
- Проверка полного соответствия порядка следования элементов и атрибутов содержанию документа или определенным правилам.
- Контроль типов данных (достигается при использовании соответствующей схемы).
- Контроль целостности данных для обеспечения оптимального обмена информацией через Веб с помощью транзакций.
Рассмотрим теперь основные синтаксические правила построения XML документов.
- XML документ содержит один и только один корневой элемент, содержащий все остальные элементы
- Дочерние элементы, содержащиеся в корневом элементе, должны быть правильно вложены.
- Имена элементов подчиняются правилам:
- Имя начинается с буквы, знака подчеркивания или двоеточия.
- После первого символа в имени могут быть буквы, цифры, знаки переноса, подчеркивания, точка или двоеточие.
- Имена не могут начинаться с буквосочетания XML.
XML документ имеет следующую структуру :
- Первая строка XML документа называется объявлением XML. Это необязательная строка, указывающая версию стандарта XML (обычно это 1.0). Также здесь может быть указана кодировка символов и внешние зависимости.
- Комментарий может быть размещен в любом месте дерева. XML комментарии размещаются внутри пары тегов <!-- и заканчиваются -->. Два знака дефис ( -- ) не могут быть применены ни в какой части внутри комментария.
- Остальная часть этого XML-документа состоит из вложенных элементов, некоторые из которых имеют атрибуты и содержимое.
- Элемент обычно состоит из открывающего и закрывающего тегов, обрамляющих текст и другие элементы.
- Открывающий тег состоит из имени элемента в угловых скобках;
- Закрывающий тег состоит из того же имени в угловых скобках, но перед именем еще добавляется косая черта.
- Содержимым элемента называется все, что расположено между открывающим и закрывающим тегами, включая текст и другие (вложенные) элементы.
- Кроме содержания у элемента могут быть атрибуты - пары имя=значение, добавляемые внутрь открывающего тега после названия элемента.
- Значения атрибутов всегда заключаются в кавычки (одинарные или двойные), одно и то же имя атрибута не может встречаться дважды в одном элементе.
- Не рекомендуется использовать разные типы кавычек для значений атрибутов одного тега.
- Для обозначения элемента без содержания, называемого пустым элементом, необходимо применять особую форму записи, состоящую из одного тега, в котором после имени элемента ставится косая черта "/".
К сожалению, описанные выше правила позволяют контролировать только формальную правильность XML документа, но не содержательную. Для решения второй задачи используются так называемые схемы.
Схема четко определяет имя и структуру корневого элемента, включая спецификацию всех его дочерних элементов. Программист может задать, какие элементы и в каком количестве обязательны, а какие – необязательны. Схема также определяет, какие элементы содержат атрибуты, допустимые значения этих атрибутов, в т.ч. значения по умолчанию.
Чаще всего для описания схемы используются следующие спецификации:
- DTD (Document Type Definition) - язык определения типа документов.
- XDR (XML Data Reduced) – диалект XML, разработанный Майкрософт.
- XSD ( язык определения схем XML) – рекомендована консорциумом W3C.
XML документ отличается от HTML документа также и тем, как он отображается в веб-браузере. Без использования CSS или XSL XML-документ отображается как простой текст в большинстве веб-браузеров. Некоторые веб-браузеры, такие как Internet Explorer, Mozilla и Firefox отображают структуру документа в виде дерева, позволяя сворачивать и разворачивать узлы с помощью нажатий клавиши мыши.
Наиболее распространены три способа преобразования XML-документа в отображаемый пользователю вид:
- Применение стилей CSS.
- Применение преобразования XSLT.
- Написание на каком-либо языке программирования обработчика XML-документа.