Размечаем документы. Часть первая
АрхивСетевое окружение (архив)Кому это понадобилось или долгий путь от SGML до XML...
Интернет стал прекрасным полигоном для испытаний последних разработок в области компьютерной техники. Из интересной игрушки, шокирующей своей новизной и неограниченными, на первый взгляд, возможностями, Сеть давно уже превратилась в сложный запутанный механизм, дальнейшее функционирование которого невозможно без развития существующих стандартов.
Термины "Интернет" и "WWW" многими воспринимаются как синонимы. Благодаря своей гибкости и доступности компьютерная паутина практически завоевала современный информационный мир. Однако за кажущейся простотой скрывается очень сложная распределенная информационная среда, имеющая целый ряд механизмов, поддерживающих ее работоспособность и определяющих возможность ее дальнейшего функционирования. От того, насколько эти механизмы современны и способны удовлетворять возникающим сегодня потребностям, зависит будущее развитие всей системы.
Одним из главнейших элементов технологии WWW является язык разметки документов HTML, при помощи которого формируется информационное содержимое гипертекстовой базы данных, каковой является WWW. Долгое время возможности этого языка были вполне достаточны для создания, оформления документов и формирования между ними гиперсвязей. Сегодня же информационная нагрузка в Сети и типы решаемых в WWW задач существенно изменились, и для разработчиков Web-приложений все неудобнее становятся присущие этому языку ограничения.
HTML с самого начала предназначался только для указания способа оформления фрагментов текста, структура же документа и его содержимое для программ просмотра были абсолютно безразличны. Указав в тексте документа coffee, автор только определит цвет выводимого текста, информация же о том, что в документе есть слово coffee, браузером не сохраняется и недоступна для поисковых роботов и сценариев внутри страницы. Из-за этого сегодня очень осложнена организация механизмов сложного поиска в WWW, учитывающих семантику и особенности расположения текста внутри документа.
Кроме того, автор документа может использовать инструкции языка в любой последовательности и по своему усмотрению - процесс проверки правильности создания HTML-документов практически никак не контролируется. Это облегчает труд автора, но вносит дополнительную неопределенность при разработке программ-анализаторов документа. Также, в HTML нельзя изменять действие одних и тех же тегов в зависимости от места их определения внутри документа (например, когда мы собираемся отображать некоторую иерархическую структуру, каждое звено которой должно форматироваться по-разному).
Для устранения этих и некоторых других ограничений стандарта в его последующих версиях (HTML3.2, HTML 4) были добавлены некоторые дополнительные теги и предложены спецификации CSS, CSS2, DOM, несколько облегчающие нелегкий труд создателей Web-страниц. Но не была решена (и не могла быть решена) главная проблема - расширяемости и универсальности HTML. Длительный и сложный процесс утверждения новых стандартов HTML зачастую приводил к тому, что они устаревали, так и не успев появиться. HTML описывал довольно узкий класс документов - типов же информации, используемой в Web, но не поддерживаемой ни одним из браузеров, в последнее время появляется гораздо больше. Стало ясно, что дальнейшее удерживание выходящего из берегов бурного потока Web-информации невозможно без появления нового языка разметки, такого же простого и мобильного, как HTML, но более гибкого и позволяющего разработчикам "на ходу" придумывать необходимые им теги. Таким языком и должен был стать XML.
Немного истории
Необходимость в создании языков разметки появилась тогда, когда понадобились механизмы создания структуры в текстовом блоке данных. Известно, что текстовые документы давно уже используются для хранения и обмена данных в сетевых информационных системах (это было закреплено в свое время в американском стандарте Z39.50), так как они относительно легко создаются, обрабатываются и передаются по сети. Но сплошной неструктурированный текст очень трудно анализировать - в неупорядоченном текстовом потоке невозможно выделить отдельные его фрагменты, определить элементы данных документа и правила их взаимного расположения, что требуется для программы-обработчика такого документа. Поэтому необходимо вводить в документ некоторую избыточность, информацию, отделяемую от остального текста при помощи специальных символов - маркеров и используемую анализатором при разборе содержимого документа. Сам по себе механизм разметки очень прост. Выбирая маркеры так, чтобы они не встречались в основном тексте, мы можем формировать любые инструкции прямо в самом документе, передавая их вместе с полезной информацией, то есть в том же текстовом формате. Проблема заключается в том, что в таком случае для каждого типа документа можно использовать какой-то особенный набор управляющих инструкций и, следовательно, конкретный обработчик, что приводит к несовместимости форматов представления информации. Если о правилах обозначения маркеров еще можно договориться (сегодня стандартным является применение символов "<>" и ""), то универсальное синтаксическое и грамматическое описание документов является неразрешимой задачей. Человеческая фантазия безгранична, и придумать универсальный, единый для всех приложений набор маркеров, к сожалению, нельзя. Это вызывало определенные трудности при создании механизма единообразного обмена информацией и некоторое время сдерживало развитие сложных распределенных сетевых приложений, где требовались такие универсальные форматы.
Для решения этой проблемы в начале 80-х годов GCA, IBM и ряд других производителей первых систем разметки объединились в комиссии ANSI по компьютерным языкам и обработке текста с целью выработать стандарт на механизм определения и использования переносимых языков разметки документа, проверки правильности их составления. В результате этой работы в 1986 году был создан "прародитель" HTML - универсальный стандартизованный язык разметки данных SGML (Standardized Generalized Markup Language, ISO 8879), являющийся сегодня одним из самых важных стандартов в области информационных технологий.
Идея SGML вовсе не сложна и при ближайшем рассмотрении очевидна: если не удается создать единый для всех набор маркеров, нужно стандартизовать хотя бы правила их создания. SGML позволил описывать любой язык разметки при помощи нового единого стандарта определения типа документа - DTD. Так как формат самих DTD-описаний был "понятен" любой поддерживающей этот стандарт программе, универсальные SGML-анализаторы могли работать с документами любого типа, на ходу извлекая необходимую для разбора информацию и после этого уже "понимая" сам документ.
Однако сложность составления DTD-правил и реализации их обработки в практических приложениях оказалась существенным сдерживающим фактором в развитии этого стандарта. В большинстве случаев не требовалось столь полного и тщательного описания грамматики языка, и трудности c составлением SGML-документов для многих разработчиков оказывались серьезным препятствием. Кроме того, заложенные в основу SGML возможности были слишком широки для решения существовавших в то время задач и практического использования в реальных информационных системах. Термин "академический" как нельзя лучше характеризует стандарт SGML.
Поэтому в 1989 году, когда создавалась система WWW, ее разработчиками был предложен один из упрощенных вариантов SGML - язык гипертекстовой разметки HTML. Не требующий при создании обязательного трудоемкого описания грамматики, простой для запоминания и совершенно открытый для разработчиков, новый язык быстро нашел широкое применение и практически сразу же завоевал информационный мир Интернет.
Однако дальнейшее развитие HTML было затруднено отсутствием механизма расширения, за которым успевал бы процесс стандартизации. Поэтому в 1996 году внутри консорциума W3C (организации по стандартизации новых Web-технологий) была создана рабочая группа по разработке еще одного варианта SGML, также предназначенного для использования в Web, но обладающего более широкими возможностями, - это должен был быть свободно расширяемый язык разметки, способный структурировать информацию внутри документа и определять свой синтаксис при помощи универсального способа - DTD-правил, но который не имел бы столь жестких ограничений, как SGML. Последнее условие - единственное, что отличает XML от SGML, прекрасно справлявшегося со всеми остальными обозначенными задачами. Смягчение ограничений SGML должно было способствовать расширению сферы использования нового языка и сделать возможным его применение в WWW. 14 ноября 1996 года увидел свет первый рабочий вариант новой спецификации, а официальная рекомендация W3-консорциума на XML 1.0 появилась 10 февраля 1998 года, спустя почти полтора года после начала работы группы.