Введение в XML
Данная лекция является введением в XML технологию. В ней рассматриваются следующие вопросы:
Разработка стандартов и работы, связанные с развитием и использованием XML (eXtensible Markup Language – расширенный язык разметки), начали появляться в первой половине 90-х годов, и уже к концу 90-х годов она получила достаточно широкое распространение.
Примечание. Термин XML может использоваться как в узком его понимании, т.е. непосредственно язык разметки информации, так и в широком, т.е. достаточно большой набор стандартов, описывающий использование, обработку, представление XML документов. Далее, для разделения этих понятий во втором случае будем применять термин «XML технологии».
В настоящее время XML технология полностью завоевала ИТ индустрию и является одной из самых востребованных и используемых технологий. Какую бы отрасль или направление информационных технологий мы не взяли (операционные системы, Интернет, базы данных, компьютерные сети, обмен сообщениями, графику), в той или иной, а как правило, в очень большой степени используется XML технологии.
Так же они очень широко используются как средство описания предметной области при разработке систем управления в различных отраслях промышленности, сферы услуг, социальной сферы. В качестве примеров такого использования XML технологий могу привести примеры, с которыми мне приходилось сталкиваться по роду своей деятельности. В сфере занятости и трудоустройства – разработки международного консорциума HR Consortium, в сфере полиграфии консорциума CIP4.
Так что же обусловило появление XML? Что было до него? Не на пустом же месте он появился.
1 Предыстория появления XML
Язык XML можно сказать вышел, или боле точно, является подмножеством языка разметки SGML (Standard Generalized Markup Language – Стандартный Обобщенный Язык Разметки). SGML был разработан в начале 60-х годов прошлого века фирмой IBM. В 1986 году он был признан ISO (International Standard Organization – Международная организация по стандартизации) в качестве международного стандарта. Примерно в то же время SGML, в качестве своего стандарта, используемого для подготовки документов, приняло Министерство обороны США.
Язык SGML – это мощный язык разметки документов, обладающий очень большими возможностями. Однако, как это часто бывает, именно из его достоинств вытекают его недостатки.
Мощь SGML обуславливает сложность его использования, наличие большой по объему документации. Он не эффективен для описания простых документов.
У меня был опыт работы с SGML. В 95-96 году я участвовал в проекте на базе операционной системы OS/2 v.3.0 фирмы IBM. При разработке документации использовался SGML. Дело было давно, но памяти осталось – CD ROM полностью заполненный документацией по SGML и, что реально использовалось очень небольшое количество тегов.
Другим, в данном случае не источником, а скорее толчком появления XML, явился язык HTML (Hyper Text Markup Language – гипертекстовый язык разметки). Данный язык был разработан в конце 80-х годов. Его создатель – Тим Бернс-Ли, в то время сотрудник лаборатории физики частиц (CERN) в Швейцарии.
В CERN была проблема. В ней работали ученые, которые приезжали в эту организацию работать на 3-5 лет. Каждый при разработке отчетов, документации применял свои методы представления документов, что, естественно, вызывало трудности использования документов другими специалистами.
Тим Бернс-Ли, взяв за основу SGML, разработал очень простой язык разметки документов. Именно простота нового языка, а также возможность встраивания гипертекстовых ссылок, а также независимость от аппаратной платформы обусловило его широкое распространение.
Особенно бурное развитие это язык получил, когда в 1992 году появилась первая система с графическим интерфейсом для отображения HTML документов. Эту систему, названную Mosaic, разработал, тогда еще студент Иллинойского университета, Марк Андерсен, впоследствии создавший фирму Netscape, выпускавшую известный браузер Netscape Navigator.
Однако, уже через несколько лет, стали выявляться недостатки HTML. Для того времени (середина 90-х годов) можно было отметить следующее:
Представленные выше, а также целый ряд других недостатков HTML, заставили задуматься о разработке для Интернет языка разметки следующего поколения. Именно этим языком, как тогда предполагалось, и должен был стать XML.
Рабочая группа по разработке XML была сформирована в 1996 году и при разработке нового языка должна была обеспечить решение набора требований:
Важно отметить, что условие обеспечения краткости описания перед XML не ставилась.
В Рекомендации XML возможность его использования в Интернет была поставлена на первое место. Однако, как это часто бывает, жизнь распорядилась по-своему. Хотя в настоящее время в Интернет существует целый ряд сайтов, разработанных на «чистом» XML, как мы можем видеть, XML не заменил HTML.
HTML сам стал эволюционировать в сторону XML. В нем появилась возможность разделения описания и представления информации за счет включения CSS (Cascading Style Sheets – каскадных таблиц стилей (хотя, если переводить дословно, то каскадных листов стилей)).
Развивались технологии совместного использования HTML с целым рядом языков программирования, что позволило обеспечить динамичное представление информации, связь с базами данных. Браузеры превратились из программ отображения HTML страниц в мощную среду исполнения.
Для HTML 4 был разработан справочник на основе DTD (см. лекцию «Document Type Definition»), который является составной частью XML технологии, т.е. HTML стал одной из реализаций XML (хотя полностью, 100%, это можно говорить только применительно к XHTML).
XML, не заменив HTML, развивался как язык описания информации, став в этом направлении по сути стандартом де-факто. Особенно он эффективен при описании информации, имеющей иерархическую структуру, что очень хорошо отражает взаимоотношения в реальной жизни, в реальных процессах.
2 Краткий обзор стандартизации основных направлений XML технологии
Основной организацией, занимающейся разработкой и продвижением стандартов XML технологии, является World Wide Web Consortium (W3C).
Данная организация отвечает за разработку и выпуск стандартов не только в области XML технологий, но целого ряда других направлений в той или иной мере связанных с Интернет. Более подробно с Рекомендациями и деятельностью W3C можно ознакомиться на ее сайте по адресу www.w3c.org.
Хотя документы, выпускаемые W3C, называются Рекомендациями на самом деле это полноценные стандарты, поддерживаемые всем IT сообществом.
Процесс принятия стандартов W3C проходит следующие этапы:
В разработке Рекомендаций участвуют и другие организации, такие как
В таблице 1 представлен состав стандартов, имеющих отношение к технологии XML, указан статус стандарта на момент написания данной работы, дана их краткая характеристика, а также уровень изучения в данном лекционном курсе.
Таблица 2 – Состав стандартов XML технологии
Название стандарта |
Статус |
Краткая характеристика |
Уровень изучения |
|||
XML 1.0 |
Рекомендация W3C |
Представлены требования к XML документу и описание DTD |
Изучается |
|||
Namespaces in XML |
Рекомендация W3C |
Описывает механизм универсального обозначения имен элементов и атрибутов в XML документах |
Изучается |
|||
XML Schema |
Рекомендация W3C |
Описывает язык XML схемы |
Изучается |
|||
Simple API for XML (SAX) |
Общественный стандарт |
Описывает управляемый событиями интерфейс прикладного программирования |
Изучается |
|||
Document Object Model (DOM) |
Рекомендация W3C |
Описывает объектная модель XML документов для доступа и манипулирования частями XML документа |
Изучается |
|||
XML Path Language (XPath) |
Рекомендация W3C |
определяет синтаксис и модель данных для адресации частей XML документа |
Изучается |
|||
Extensible Stylesheet Language Transformations (XSLT) |
Рекомендация W3C |
Определяет язык, используемый для описания преобразований XML документа |
Изучается |
|||
XQuery |
Рекомендация W3C |
Описывает специализированный язык обработки XML документа |
Изучается |
|||
XML Information Set |
Рекомендация W3C |
Определяет абстрактный способ описания XML-документа |
В обзоре |
|||
Cascading Style Sheets (CSS) |
Рекомендация W3C |
Описывает применение стилей представления к разметке. Может использоваться в HTML и XML документах |
В обзоре |
|||
Extensible Stylesheet Language (XSL) |
Рекомендация W3C |
Описывает применение стилей представления к разметке. |
В обзоре |
|||
XML Inclusions (XInclude) |
В стадии разработки |
Определяет систему для объединения XML-документов. Может использоваться только в XML документах |
В обзоре |
|||
XPointer Framework |
Рекомендация W3C |
определяет язык, используемый для указания фрагментов XML документа |
В обзоре |
|||
XML Linking Language (XLink) |
Рекомендация W3C |
Определяет общую структуру для выражения ссылок в XML документах |
В обзоре |
|||
XForms |
Рекомендация W3C |
Определяет Web-формы для обработки данных XML |
В обзоре |
|||
XML Base |
Определяет способ ассоциирования XML элементов с URI |
Не изучается |
||||
Canonical XML Version |
Рекомендация W3C |
Определяет стандартный метод генерации физического представления XML документа |
Не изучается |
|||
RELAX NG |
Спецификация OASIS, стандарт ISO |
Описывает язык XML схемы |
Не изучается |
|||
The Schematron Assertion Language |
Общественный стандарт |
Описывает язык XML схемы |
Не изучается |
|||
SQL/XML |
Стандарт ISO |
Описывает множество связанных с XML расширений для SQL |
Не изучается |
|||
SOAP |
Рекомендация W3C |
Описывает протокол передачи сообщений в Интернет на базе XML |
Не изучается |
|||
3 Понятие разметки и форматирования
Прежде чем перейти непосредственно к рассмотрению требований, предъявляемым к XML документам, хотелось бы остановиться на одном важном концептуальном моменте. В предыдущем разделе мы несколько раз использовали термины «разметка», «форматирование», говорили о возможности «представления информации». Давайте остановимся на этих понятиях, важных для дальнейшего понимания ряда разделов XML технологии.
Чем отличается форматирование от разметки, почему в каких-то случаях используется один термин, а в каких-то другой?
Внешне, если посмотреть на отформатированный или размеченный документ, они достаточно похожи. В текст документа добавлен набор тегов или каких-либо других специальных символов.
В данном курсе лекций под понятием «форматирование» мы будем понимать расстановку тегов в документе, предназначенную для определения того, как документ должен отображаться на устройстве представления информации (экране монитора, принтере).
Под понятием «разметка» мы будем понимать расстановку тегов в документе, предназначенную для описания структуры документа.
Например, нам нужно представить информацию о книге, включающую ее название, год издания и автора (или авторов, если их несколько). Возможные фрагменты реализации данной задачи в HTML и XML представлены ниже.
Фрагмент HTML документа:
<table width=”100%” border=”1”> <tr> <th width=”50%”><u>Название книги</u></th> <th width=”20%”><u>Год издания</u></th> <th width=”30%”><u>Автор</u></th> </tr> <tr> <td>Программирование</td> <td>2009</td> <td>Иванов И.И.</td> </tr> . . . <tr> <td>Базы данных</td> <td>2010</td> <td>Петров П.П., Сидоров С.С.</td> </tr> </table>
Фрагмент XML документа:
<books> <book> <title>Программирование</title> <year_pulishing>2009</year_pulishing> <authors> <author>Иванов И.И.</author> </authors> </book> <book> <title>Базы данных</title> <year_pulishing>2010</year_pulishing> <authors> <author>Петров П.П.</author> <author>Сидоров С.С.</author> </authors> </book> </books>
Фрагмент HTML документа говорит о том, что информация будет отображаться в виде таблицы из трех колонок. Первая строка таблицы является заголовком. В заголовке таблицы по умолчанию текст будет отображаться жирным шрифтом, и располагаться посередине ячейки. Кроме того он будет подчеркнут. В таблице будет две строки. Текст в них будет нормальным и выровнен по левому краю. Здесь мы выполнили форматирование текста, т.е. задали правила его представления в браузере на экране монитора.
Фрагмент XML документа говорит о том, что мы описываем книги, причем в данном случае их две. О каждой книге имеется следующая информация: название, годе издания и авторы (причем точно понятно, сколько у книги авторов). Здесь мы разметили информацию, отразив ее структуру, но как она будет представляться на устройстве вывода не ясно.
В XML описание структуры и представления информации разделены. Для определения того, как XML документ должен представляться на устройствах отображения, используются таблицы стилей. Это специальные документы, в которых описаны требования к отображению информации. XML технология поддерживает два вида таблиц стилей:
Разделение описание структуры информации и ее представления имеет ряд положительных моментов:
4 Структура XML документа
В данном разделе рассмотрим, из каких компонент состоит XML документ, а в следующем – набор требований, предъявляемых к XML документу в целом, а также отдельным его компонентам.
XML документ представляет собой определенным образом размеченный текст, состоящий их набора компонент, представленных на рисунке 1. Он начинается с пролога, который при определенных условиях может отсутствовать. За прологом идет тело документа.
Рисунок 1 – Состав XML документа
4.1 Пролог
4.1.1 Объявление XML
Пролог начинается с объявления XML документа. Объявление XML документа имеет вид:
<?xml version=”версия” [encoding=”кодировка”] [standalone=(“yes” | “no”)] ?>
Параметр version=”версия” объявляет значение номера версии Рекомендации XML, которой должен соответствовать XML документ. В настоящее время действует Рекомендация с номером 1.0. Поэтому параметр version должен иметь значение ”1.0”. Ниже представлено минимально допустимое объявление XML
<?xml version=”1.0”?>
Существующая Рекомендация XML допускает отсутствие объявления XML. В этом случае программа, обрабатывающая XML документ, сама должна подставить минимально допустимое объявление XML.
Параметр encoding=”кодировка” объявляет, в какой кодировке требуется воспринимать символы XML документа при его обработке и отображении. Если данный параметр опущен, то XML документ должен быть представлен либо в кодировке UTF-8, либо в UTF-16. В Рекомендации XML определено, что именно эти две кодировки должны поддерживаться всеми программами обработки XML документов. С использованием параметра encoding объявление XML, например, для работы в Windows с кириллицей, будет иметь вид:
<?xml version=”1.0” encoding=”Windows-1251”?>
Параметр standalone=(“yes” | “no”) объявляет – является ли XML документ одиночным, т.е. он использует или не использует внешние объявления разметки. В случае указания “yes” предполагается, что внешние объявления разметки не должны использоваться, т.е. XML документ будет одиночным. В противном случае следует указывать “no”. Если данный параметр опущен, то по умолчанию предполагается значение “no”.
4.1.2 Объявление схем
Если XML документ должен быть действительным (см. п. 5.2 «Действительные документы»), то с ним должна быть сопоставлена схема, объявление которой размещается в прологе после объявления XML, но перед корневым элементом. В зависимости от используемой схемы (DTD или XML Schema) объявление выполняется по-разному.
В данной лекции мы не будем рассматривать правила объявления схем. Они будут рассмотрены в соответствующих лекциях при изучении каждой из схем.
4.2 Тело документа
Тело документа может состоять из следующих конструкций:
4.2.1 Элементы
Элемент – это основная часть XML документа. Не может быть XML документа без элементов. Более подробно об этом поговорим в следующем разделе «Требования к XML документу и его компонентам».
Границы элемента задаются двумя способами:
<book>Основы XML</book>
<book />
Вместо пустого элемента можно использовать эквивалентную ему запись начального и конечного тега:
<book></book>
Элемент может не иметь или иметь любое количество атрибутов. Назначение атрибута – уточнение каких-либо характеристик элемента. Атрибуты могут применяться либо в начальном теге, либо в теге пустого элемента, например:
<book id=”num-582” year=”2010”> <title>Основы XML</title> </book>
В представленном примере для элемента book определены два атрибута (id – номер книги в библиотечном каталоге и год издания книги).
Следует иметь в виду, что каких-либо правил относительно того, какую информацию задавать в виде элемента, а какую в виде атрибута нет. Приведенный выше фрагмент можно записать иначе, при этом смысловое содержание не изменится:
<book title=” Основы XML”> <id>num-582</id> <year>2010</year> </book>
Использовать или не использовать атрибуты, если использовать, то как – это при создании корректного XML документа определяет его разработчик, а при создании действительного XML документа должно быть задано в его схеме.
Кроме атрибутов, в начальный тег элемента могут быть включены объявления пространств имен. Более подробно пространства имен, их объявление и применение будут рассмотрены в отдельной лекции.
Требования, описывающие правильное использование элементов, рассматриваются в п. 5.1.1, а атрибутов в п. 5.1.2.
4.2.2 Комментарии
Назначение комментариев пояснять особенно не надо. Их использование позволяет сделать XML документ более понятным.
Текст комментария должен заключаться между символами «<!--» и «-->», как это показано ниже:
<!-- текст комментария -->
Требования, описывающие правильное использование комментариев, рассматриваются в п. 5.1.3.
4.2.3. Инструкции обработки
Инструкция обработки (processing instruction, PI) – это конструкция, применяемая в XML документе для передачи определенных указаний обработчику XML документа. Обработчик XML документа, принимая такую инструкцию, должен знать, что с ней делать. Возможный набор допустимых инструкций обработки не определяется в Рекомендации XML и зависит от используемого обработчика XML документа.
Инструкция обработки всегда должна обрамляться символами «<?» и «?>» и иметь следующий формат:
<?код содержание?>
где: код – это имя, идентифицирующее приложение, которому предназначена инструкция;
содержание – текст, который передается приложению для обработки.
Рекомендация XML зарезервировала имена xml и XML для собственных нужд, поэтому они не могут принимать значение кода инструкции обработки.
4.2.4 Секция CDATA
Когда в XML документ требуется включить текст, имеющий элементы разметки, обработку которых следует избежать, или какой-либо блок двоичной информации необходимо использовать секцию CDATA. Обработчик XML документа информацию секции CDATA не подвергает анализу.
Секция CDATA может находиться в любом месте XML документа, где могут находиться символьные данные. Она имеет следующий формат:
<![CDATA[текст]]>
где: текст – набор символов, вставляемый в секцию CDATA;
«<![CDATA» и «]]>» – фиксированный набор символов начала и конца этой секции.
Требования, описывающие правильное использование секции CDATA, рассматриваются в п. 5.1.5.
Пример использования секции CDATA представлен ниже:
<![CDATA[ <book id=”num-582” year=”2010”> <tile>Основы XML</title> </book> ]]>
В данном примере обработчик XML документа не будет подвергать анализу элемент book, его атрибуты и содержание.
5 Требования к XML документу и его компонентам
Давайте теперь рассмотрим, какими могут быть XML документы, и каким требованиям они должен удовлетворять.
Требования, предъявляемые к XML документу, определены W3C в Рекомендации XML 1.0.
Рекомендация XML определяет два типа XML документов:
5.1 Корректные документы
Корректный документ должен соответствовать следующим условиям:
<item />
Пример корректного документа:
<items> <item> . . . </item> <item> . . . </item> </items>
Пример некорректного документа (отсутствует корневой элемент):
<item> . . . </item> <item> . . . </item>
5.1.1 Требования, предъявляемые к элементам:
Правильно:
<items> <item> <item1>. . .</item1> <item1>. . .</item1> </item> <item> <item2>. . .</item2> <item2>. . .</item2> </item> </items>
Не правильно:
<items> <item> <item1>. . .</item1> <item1>. . .</item1> </item> <item> <item2>. . .</item2> <item2>. . . </item> <!-- здесь перекрытие --> </item2> </items>
Правильно:
<items> <item>. . .</item> <item>. . .</item> <item/> <!-- пустой элемент --> </items>
Не правильно:
<items> <item>. . .</item> <item>. . .</item> <item> <!-- не пустой элемент и нет закрывающегося тега --> </items>
Правильно:
<item> . . . </item> <iTem> . . . </iTem>
Не правильно:
<item> . . . </ite> <!-- имена не совпадают --> <iTem> . . . </item> <!-- второй символ имени задан на разных регистрах -->
Правильно:
<item> . . . </item> <_ite-m.1> . . . <_ite-m.1>
Не правильно:
<4item> . . . </4item> <!-- имя начинается с цифры --> <_$item> . . . <_$item> <!-- включает не букву (символ $) -->
Правильно:
<xsi:item> . . . </xsi:item>
Не правильно:
<xsi:item> . . . </item> <!-- префикс пространства имен отсутствует в закрывающемся теге --> <xsi:ds:item> . . . <xsi:ds:item> <!-- символ «:» используется более одного раза -->
5.1.2 Требования, предъявляемые к атрибутам
Правильно:
<item value=”10” color=’red’/>
Не правильно:
<item value=10 color=’ red”/> <!-- значение атрибута value не заключено в кавычки; значение атрибута color заключено в разные кавычки -->
Правильно:
<item title=’А”БВ’/>
Не правильно:
<item title =”А”БВ”/> <!-- значение атрибута title заключено в двойные кавычки и в самом значении используются двойные кавычки -->
5.1.3 Требования, предъявляемые к комментариям
Не правильно:
<!-- текст -- комментария -->
Правильно:
<item> <!-- комментарий --></item> <!-- комментарий -->
Не правильно:
<item <!-- комментарий -->> . . . </item>
Не правильно:
<!-- текст комментария ---> <!-- три дефиса вместо двух при завершении комментария -->
5.1.4 Требования, предъявляемые к символам
Таблица 2 – Символы замены
Исходный символ |
Символ замены |
< (меньше) |
< |
& (апостроф) |
& |
> (больше) |
> |
‘ (амперсанд) |
' |
“ (двойная кавычка) |
" |
5.1.5 Требования, предъявляемые к секции CDATA
Правильно:
<![CDATA[ABCD]]>
Не правильно:
<![CDATA[AB]]> CD]]> <!-- внутри текста секции CDATA содержится последовательность символов ]]> -->
5.2 Действительные документы
Чтобы XML документ был действительным он должен:
6 Обработка XML документов
Ранее, говоря о достоинствах XML, мы отмечали, что XML документы могут обрабатываться программно. Существует несколько способов программной обработки XML документов. В данном разделе рассмотрим их кратко, в обзоре. Более подробно, каждому из этих способов будет посвящена соответствующая лекция.
Для проверки корректности и, если задана схема, действительности XML документов используются специальные программы анализаторы, часто называемые парсеры (от английского слова parser – анализатор).
Анализаторы можно классифицировать по следующим характеристикам:
Так в Windows имеется анализатор с именем msxml, за которым идет номер его версии, например msxml6. Это очень функционально мощный анализатор, обеспечивающий поддержку практически всех новых стандартов, существующих на момент его разработки.
В Linux одним из самых известных анализаторов является Xerces, поддерживаемый фирмой Apache. Также мощные анализаторы разработали такие крупные фирмы как IBM, Oracle и ряд других.
В последнее время стали доступны анализаторы, работающие в online, т.е. вы указываете на Web странице URL вашего XML документа, выполняется его анализ, и результат отражается на новой Web странице. Один из таких online анализаторов доступен на сайте W3C по адресу www.w3c.org/parser.
Список литературы
1. Стандарты W3C на сайте www.w3c.org
2. Большой список книг по различным аспектам XML технологии находится здесь.