XML на одном примере

Скорее всего, не лень является двигателем прогресса, а недовольство. Мы постоянно не удовлетворены тем, что имеем. Мало света от свечи — вместо того чтобы зажечь две, изобретаем газовый рожок, потом электрическую лампочку, потом еще что-нибудь, чем опять недовольны. Интернет является прекрасной иллюстрацией «правила недовольства». Ведь все идет хорошо: Web-мастера трудятся, компании вкладывают деньги, пользователи все пользуются и пользуются... Зачем что-то менять? Но нет, появляются новые технологии, их надо осваивать, применять — в результате опять бессонные ночи за мониторами.

Хотя если задуматься, то причины для недовольства все-таки есть. Основные проблемы современного Интернета налицо: низкая пропускная способность каналов, невозможность нормального поиска документов, их «мобильность» (т. е. сегодня интересующая вас информация находится на одном сервере, а завтра, например, «переехала» на другой), обилие разнородных средств вывода информации.

Если с пропускной способностью еще как-то можно бороться (два варианта: перенос обработки запросов полностью на серверы и улучшение средств передачи), то с остальными проблемами сложнее. Все упирается в недостатки наиболее широко применяемого средства «организации» документов — HTML. И в первую очередь — в отсутствие в нем структур данных.

В HTML можно выделить только две структурные единицы: заголовок документа и его тело. Этого, конечно же, мало. Особенно плохо это для поиска: нет никакого разумного механизма, чтобы отличить, например, книги о Курте Воннегуте от книг Курта Воннегута. И от книг, статей, аннотаций, анонсов фильмов и т. п., где упоминается Курт Воннегут! Ситуация напоминает попытку найти нужный абзац в книге, которую вы не читали, в библиотеке для хулиганствующей молодежи — все книги без обложек (и названий), оглавлений, да и свалены в большую кучу. Если не верите, то, скорее всего, вы никогда ничего не искали в Интернете.

Что касается средств вывода, то занимающиеся Web-дизайном это хорошо чувствуют на своей шкуре. Разрабатывая серьезный сайт, приходится думать о том, как он будет смотреться на экранах с разным разрешением и глубиной цвета, на распечатке, на черно-белом старом ноутбуке и т. д. Добавьте сюда разные программы просмотра (броузеры) с их несовместимостью и новые появляющиеся средства Интернет-серфинга (мобильные телефоны, телевизоры, холодильники и т. д.). Соответственно разрабатывается десяток вариантов одной и той же страницы для разных пользователей. Сопровождение сайта превращается в кошмар.

И чтобы окончательно порадовать, напомню, что и имеющиеся средства разметки (т. е. фактически оформления) в HTML уже давно не используются по назначению. Вы думаете, тег <table> используется исключительно для верстки таблиц? А тег <blockquote> — для вывода цитат? Увы...

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

Мысль о таком разделении описания структуры документа и его представления возникла уже давно. Во многом она была обязана необходимости хранить информацию длительное время и отображать ее «в непредсказуемых условиях». В самом деле, что делать, если вам нужно разработать документацию на новый военный корабль? Срок хранения такого описания может достигать 50 лет (срок нахождения в строю линкора). Объем информации — тысячи страниц. Понятно, что за длительный период средства отображения могут измениться радикальным образом. То же самое относится и к средствам хранения и передачи информации. Простого выхода в данном случае не наблюдается: немыслимо конвертировать огромные взаимосвязанные документы при каждом выходе новой версии того или иного текстового процессора. Кроме того, что делать, если информацию необходимо представлять различным образом: электронным (на разных устройствах вывода) и в печатном виде?

В качестве решения фирмой IBM был предложен обобщенный язык разметки документов GML (General Markup Language), который после доработки получил в 1986 г. статус международного стандарта SGML (Standard Generic Markup Language) — стандартного обобщенного языка разметки документов. Идея заключалась в полном отказе от упоминания оформления документа. Осталось только описание правил структурирования документа и собственно содержимое. Для представления информации пользователю SGML-документ надо конвертировать в доступный ему формат.

По сути, SGML — это метаязык, задающий правила разработки вашего собственного языка. К сожалению, основной преградой на пути к его широкому применению является его сложность — только описание стандарта составляет более 500 страниц.

Между тем мысль о разработке «упрощенного», но мощного варианта SGML будоражила разработчиков. Успехи WWW и языка HTML (который является ну очень урезанным подмножеством SGML) показали перспективность таких работ. Результат не заставил себя ждать. Появился расширяемый язык разметки — XML (eXtensible Markup Language).

Строго говоря, в настоящий момент это уже не один язык, а целое множество взаимосвязанных языков, каждый из которых является подмножеством SGML. Некоторых из них мы еще коснемся в этой статье чуть ниже. Для начала же давайте обратимся к «стержню» новой технологии — собственно языку XML.

Вперед >

Статья опубликована журналом Hard'n'Soft в номере 2000, 10. Публикуется с любезного разрешения Hard'n'Soft


© журнал принадлежит Web Creation
по всем вопросам обращаться А. Кузьмин