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