Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #53, АПРЕЛЬ 2005 г.

Копилка технологий

Степан Ильин aka Step

Спецвыпуск: Хакер, номер #053, стр. 053-084-6


Само описание информации является другим аспектом использования XML - хранение данных. Действительно, XML можно смело рассматривать как контейнер, содержащий самую разнообразную информацию. Особенно если учитывать, что многие современные СУБД поддерживают формат XML или, по крайней мере, умеют преобразовывать информацию в вид XML-документов. Я уже не говорю о специализированных XML-СУБД, таких как Tamino (www1.softwareag.com/Corporate/products/tamino). Здесь, правда, далеко не все программисты приветствуют хранение данных в текстовом формате. Главный их аргумент в том, что XML-файлы почти всегда имеют размер больше, чем размер данных, хранящихся в бинарном виде. Но не стоит забывать о том, что занимаемый информацией объем - не самый важный критерий выбора БД, особенно сейчас, когда дисковое сильно подешевело и стоит, по сути, копейки. Тем более что любые текстовая информация при необходимости может быть оперативно и быстро сжата самыми обычными архиваторами.

XML умеет не только хранить информацию, но и помогать в нелегком деле обмена ею. А почему бы и нет? Открытый и понятный стандарт, масса предназначенных для его обработки программ и открытых модулей для программистов - все только благоприятствует такому применению. Вспомни технологию RSS (Really Simple Syndication), которая является отличным механизмом для экспорта информации с web-сайта (к примеру, новостной ленты). Экспортируемые данные хранятся в специальном файле, который описывается языком XML и доступен для скачивания. В погоне за обновленной информацией рядовому пользователю совершенно не обязательно заходить на какой-то сайт - достаточно загрузить обновленный RSS-файл и обработать его специальным парсером (RSS-reader’ом). Или другой пример – сервис Яндекс. XML позволяет передавать автоматические поисковые запросы к Яндексу и публиковать его ответы прямо у себя на сайте в собственном дизайне. С его помощью можно без сложных скриптов наладить эффективный поиск по крупному сайту (правда, в той мере, в какой этот сайт проиндексирован Яндексом) с невероятным быстродействием. Лихо, правда?

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

Парсеры XML

Как работают парсеры? Есть два современных подхода к анализу XML-файлов, каждый из которых по-своему хорош в определенных ситуациях. Первый использует так называемую модель DOM (Document Object Model). Ее суть в том, что парсер предварительно анализирует XML-документ и сохраняет полученное дерево в оперативной памяти. Далее, перемещаясь по полученному дереву, можно извлечь любую информацию. Этот способ очень простой, быстрый, но для работы с объемными XML-документами неуместен, так как предъявляет слишком высокие требования к количеству оперативной памяти. В таких случаях обычно используют другой тип парсеров, в основе которых применение SAX-библиотек (SAX - Simple API for XML). SAX-парсеры основаны на работе с событиями, то есть они последовательно просматривают весь документ и в случае обнаружения события (встретился определенный элемент, атрибут, значение атрибута) реагируют заданным образом (чаще всего извлекают данные). Ориентированность на события имеет ряд преимуществ: в первую очередь выигрыш в объеме потребляемых ресурсов, а часто еще и в быстродействии. Однако SAX-библиотеки имеют ограничения по структуре XML-файлов и в некоторых ситуациях физически неприменимы.

Назад на стр. 053-084-5  Содержание  Вперед на стр. 053-084-7