О XML сегодня говорят и пишут много и часто, но, тем не менее, редкий источник способен удовлетворить любопытство начинающего веб-мастера сполна. «Для чего создан XML? Как и когда его целесообразно использовать?» — вот далеко не полный перечень вопросов, возникающих в голове разработчика, решившего познакомиться поближе с XML.


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

 


XML (eXtensible Markup Language), как и HTML (HyperText Markup Language), являются подмножеством SGML (Standard Generalized Markup Language). Таким образом, как видно из рисунка, XML и HTML являются «единоутробными братьями», и в отношении синтаксиса они очень похожи. К синтаксису мы вернемся чуть позже, а сейчас рассмотрим причины, способствовавшие появлению XML.


Собственно, причина одна — изначально HTML предназначался для публикации научных документов в Web, но со временем он вырос в полноценную медиа-среду с поддержкой различных технологий от разных производителей (JavaScript, Java, Flash, CGI, ASP…). Однако для решения конкретной задачи с помощью HTML требуются специфические теги. Например, если необходимо отображать математические формулы, нужны какие-то средства для их отображения. Если же это будут химические формулы, то и средства их отображения будут совсем другими.


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


Как XML решает эти проблемы?


Символ «X» (eXtensible) в аббревиатуре говорит о том, что язык является расширяемым, иными словами — он не предопределяет теги, с помощью которых вы будете формировать структуру документа. Это значит, что вы можете использовать любой набор символов, включая символы национального алфавита, в качестве тега. Так, например, < name >, < имя > и <Имя>, являются допустимыми тегами XML. Причем, в отличие от HTML, < имя > и  < Имя > — два разных тега. Однако есть и ограничения: имя тега должно начинаться либо с символа «_»либо с буквы, внутри допустимо использовать точку «.», а также не допускается наличие пробелов.


Таким образом, каждый XML документ использует свой собственный набор тегов, что значительно упрощает его обработку. Кроме того, XML предъявляет особые требования к последовательности тегов внутри документа. Документ должен быть правильно оформлен (well formed document). Под этим понимается следующее: каждый открывающийся тег должен иметь закрывающую пару и у каждого документа должен быть один, и только один, корневой тег. Классический пример такого документа приведен в листинге 1.

 


В данном случае в качестве корневого тега выступает < AddressBook >, а тег < Person > формирует запись телефонного справочника.


Примером неправильной последовательности тегов может послужить листинг 2. Обработка такого документа приводит к ошибке парсера.

 


Хотя с точки зрения синтаксиса HTML этот документ абсолютно «нормален», с точки зрения XML он неправильно оформлен, так как тег < Phone > закрывает тег < /Person >.


Как видим из приведенных примеров, в XML особое внимание уделяется структуре документа. И отсюда вытекает одно из его основных назначений — служить межплатформенным хранилищем информации. Таким образом, xml-файлу, приведенному в листинге 1, можно сопоставить таблицу базы данных со следующей структурой:

 


Вернемся к использованию xml в качестве БД позже, а пока перейдем к его «нетрадиционному» использованию. «Нетрадиционному» не потому, что его так не используют, а потому, что все учебники зацикливаются на примере телефонной книги, что ограничивает полет фантазии разработчика.


Фантазия первая


Допустим, что вам необходимо обрабатывать (например, выводить на экран) сигнал, функция которого определяется уравнением u = f (t). Так, единичный импульс, подаваемый на вход системы, может быть «зашит» в xml вот таким образом (см. листинг 3):

 


Если вы владеете пакетом MS Office XP (входящий в его состав Excel уже умеет работать с XML), то можно произвести следующий эксперимент: со храните листинг 3 в файле Impect. xml. Затем откройте Excel и из меню «Data» выберете пункт «Import Data…» укажите xml-файл — и вы получите таблицу (рис. 1, слева). Если же вы воспользуетесь мастером построения графиков, получите временную диаграмму единичного импульса (рис. 1, справа).


Фантазия вторая


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

  • каждый уровень меню прописывается в отдельную таблицу, записикоторой реляционно связаны с записями таблицы, представляющей следующий/предыдущий уровень (этот метод достаточно легко реализовать, но количество таблиц разрастается в соответствии с количеством уровней вложенности меню);
  • все пункты меню можно представить в виде таблицы, записи которой являются элементами двусвязного списка (вы получаете всего одну таблицу, но ее обработка и наполнение — неблагодарное занятие);
  • можно также воспользоваться XML.

Рассмотрим последний способ поподробнее. Попробуем воспроизвести фрагмент меню MS Word в формате XML (листинг 4).

 

 

Обратите внимание на то, что в данном примере заложена не только структура меню, но и «горячие клавиши» каждого пункта, прописанные в атрибуте HotKey тегов. Вы можете пойти еще дальше и добавить атрибут Enabled , в котором с помощью значений «True» и «False» будете разрешать или запрещать доступность конкретного пункта меню.


Действительность


На практике XML чаще всего используется для создания файлов конфигурации, в которых описываются самые разнообразные параметры: пути к файлам и библиотекам, временные интервалы, IP адреса, номера портов, и т. д., и т. п. В качестве примера приведу фрагмент конфигурационного файла довольно популярного HTTP/JSP сервера Resin® (листинг 5).

 

 

Как видите, в этом примере конфигурируются такие параметры, как каталог приложений, порт на которомстартует Resin®, максимальное количество потоков и файлы jsp.


Использовать XML в качестве полноценной базы данных даже теоретически невозможно, так как такие технологии, как индексы и реляция, реализовать тяжело, а вот как мост между различными платформами и приложениями он просто незаменим.
Один из наиболее часто задаваемых вопросов: «Как описывать двоичные данные в теле XML?» В этом случае двоичные данные должны быть преобразованы к виду, допустимому в XML (plain text). Для этого можно использовать несколько подходов:

  • преобразование двоичного представления данных в последовательность символов «0» и «1»;
  • преобразование данных в символьный эквивалент шестнадцатеричного представления данных, используя символы «0». . . «9»и «A», «B», «C», «D», «E», «F»;
  • использование проверенной временем системы кодирования «Base64».

На практике чаще всего используется последний вариант, поскольку он увеличивает объем данных на треть меньше, нежели остальные.


В заключение хочется отметить, что поддержка XML в СУБД отнюдь не означает, что данные будут храниться именно в этом формате. Дело в том, что вся информация как хранилась, так и будет храниться во внутреннем формате используемой БД, но вам при этом становятся доступными экспорт и импорт данных в XML.

2004.07.01
19.03.2009
В IV квартале 2008 г. украинский рынок серверов по сравнению с аналогичным периодом прошлого года сократился в денежном выражении на 34% – до $30 млн (в ценах для конечных пользователей), а за весь календарный год – более чем на 5%, до 132 млн долл.


12.03.2009
4 марта в Киеве компания Telco провела конференцию "Инновационные телекоммуникации", посвященную новым эффективным телекоммуникационным технологиям для решения задач современного бизнеса.


05.03.2009
25 февраля в Киеве компания IBM, при информационной поддержке "1С" и Canonical, провела конференцию "Как сохранить деньги в условиях кризиса?"


26.02.2009
18-19 февраля в Киеве прошел юбилейный съезд ИТ-директоров Украины. Участниками данного мероприятия стали ИТ-директора, ИТ-менеджеры, поставщики ИТ-решений из Киева, Николаева, Днепропетровска, Чернигова и других городов Украины...


19.02.2009
10 февраля в Киеве состоялась пресс-конференция, посвященная итогам деятельности компании "DiaWest – Комп’ютерний світ" в 2008 году.


12.02.2009
С 5 февраля 2009 г. в Киеве начали работу учебные курсы по использованию услуг "электронного предприятия/ учреждения" на базе сети информационно-маркетинговых центров (ИМЦ).


04.02.2009
29 января 2009 года в редакции еженедельника "Computer World/Украина" состоялось награждение победителей акции "Оформи подписку – получи приз!".


29.01.2009
22 января в Киеве компания "МУК" и представительство компании Cisco в Украине провели семинар для партнеров "Обзор продуктов и решений Cisco Small Business"

 

 
 
Copyright © 1997-2008 ИД "Комиздат".