Интернет учит новый язык
АрхивИнтернет стал прекрасным полигоном для испытаний последних разработок в области компьютерной техники. Из интересной игрушки, шокирующей своей новизной и неограниченными, на первый взгляд, возможностями, Сеть давно уже превратилась в сложный запутанный механизм, дальнейшее функционирование которого невозможно без развития существующих стандартов.
Термины "Интернет" и "WWW" многими воспринимаются как синонимы. Благодаря своей гибкости и доступности компьютерная паутина практически завоевала современный информационный мир. Однако за кажущейся простотой скрывается очень сложная распределенная информационная среда, имеющая целый ряд механизмов, поддерживающих ее работоспособность и определяющих возможность ее дальнейшего функционирования. От того, насколько эти механизмы современны и способны удовлетворять возникающим сегодня потребностям, зависит будущее развитие всей системы.
Одним из главнейших элементов технологии WWW является язык разметки документов HTML, при помощи которого формируется информационное содержимое гипертекстовой базы данных, каковой является WWW. Долгое время возможности этого языка были вполне достаточны для создания, оформления документов и формирования между ними гиперсвязей. Сегодня же информационная нагрузка в Сети и типы решаемых в WWW задач существенно изменились, и для разработчиков Web-приложений все неудобнее становятся присущие этому языку ограничения.
Во-первых, HTML не позволяет использовать дополнительные инструкции, при помощи которых можно было бы придумывать новые варианты отображения документа или размечать информацию произвольного типа. Программа просмотра просто "не узнает" их и в лучшем случае игнорирует.
Во-вторых, HTML с самого начала предназначался только для указания способа оформления фрагментов текста, структура же документа и его содержимое для программ просмотра были абсолютно безразличны. Указав в тексте документа coffee, автор только определит цвет выводимого текста, информация же о том, что в документе есть слово coffee, браузером не сохраняется и недоступна для поисковых роботов и сценариев внутри страницы. Из-за этого сегодня очень осложнена организация механизмов сложного поиска в WWW, учитывающих семантику и особенности расположения текста внутри документа.
В-третьих, автор документа может использовать инструкции языка в любой последовательности и по своему усмотрению - процесс проверки правильности создания HTML-документов практически никак не контролируется. Это облегчает труд автора, но вносит дополнительную неопределенность при разработке программ-анализаторов документа.
В-четвертых, способ форматирования документов определяется в HTML лишь "декларативно" - то, как реально будет отображен 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 года, спустя почти полтора года после начала работы группы.
Какой он, XML?
Расширяемый язык разметки (Extensible Markup Language - XML) - это универсальный механизм создания произвольных языков разметки документов, предназначенный для организации контента в современных информационных системах. Спецификация XML была предложена консорциумом W3C (организацией по стандартизации новых Web-технологий) в качестве рекомендации уже больше года назад, и с тех пор практически каждый день в околокомпьютерном мире происходят события, связанные с дальнейшим развитием этой технологии.
XML очень похож на HTML, что вызвано наличием общего средства их описания - SGML. Основой для XML служит обычный текстовый файл, в который при помощи символов "<, >" и "/>" включаются специальные маркеры-теги. Этот файл может храниться на сервере и предоставляться по запросу клиенту так же, как и обычная Web-страница, по стандартному протоколу HTTP. В качестве сервера могут выступать любые существующие сегодня Web-серверы. На стороне клиента XML-документ может быть обработан любой программой просмотра, знакомой со спецификацией XML, например, браузером Microsoft Internet Explorer 5. Но в XML теги нужны не для указания программе-анализатору способа отображения того или иного отрывка текста, а для того, чтобы просто как-то отметить этот текст. Выбор маркеров при этом зависит лишь от фантазии автора документа, а их конкретное значение для программы-обработчика определяется специальными правилами - описателями грамматики языка.
Создание структуры документа в XML - это разбивка его на отдельные фрагменты, так называемые элементы документа, связь между которыми определяется программой-анализатором по их взаимному расположению внутри документа, уровню вложенности, а также атрибутам, используемым при их описании. Элементы - это не просто отдельные помеченные блоки текста: в XML они представляют собой "кирпичики", из которых, в зависимости от способа их описания, программой-анализатором строится затем сложная конструкция всего документа.
Правила определения элемента очень просты: он должен обязательно начинаться начальным тегом и завершаться конечным. Например, вот так:
<author><firstname>Иван</firstname> Сергеевич <lastname>Петров
</lastname></author>
Все, что находится внутри тегов, называется содержимым элемента и может при разборе рассматриваться программой-анализатором как некоторое поддерево общего дерева элементов документа. В этом поддереве могут быть определены другие элементы, составляющие вложенные поддеревья, или обычный текст. Если же у элемента не должно быть содержимого, он называется пустым, и косая черта просто указывается в конце начального тега:
<friend/>
Вот пример несложного XML-документа, в котором теги используются для уточнения семантики некоторых фрагментов текста, а вложенность элементов определяет их иерархию:
<?xml version="1.0" encoding="windows-1252"?>
<documents>
<document id="54571" date="12/05/99">
<author>Иван Сергеевич Петров
</author>
<text href="text.txt">
<introduction>
Экологические проблемы <lake>Телецкого озера </lake> - сокровища <region>Горного Алтая
</region>. Одобрено правительством Республики <department>Горный Алтай
</department> ....
</introduction>
<problem type="ecology">
Одной из самых острых проблем на сегодняшний день является загрязнение Алтайского Государственного Заповедника несгоревшими остатками ступеней ракет, запускаемых с <ahref="document5.xml#Id6" > Космодрома Байконур</a>.
</problem>....
</text>
</document>
...
Сохраните этот документ в обычном текстовом файле с расширением .xml (или любым другим), и вы получите новый XML-ресурс, содержащий структурированную текстовую информацию.
Мы не будем останавливаться на описании грамматики языка более подробно - сейчас существует достаточно богатый выбор посвященных этой теме ресурсов (большинство из них, правда, только на английском языке). Наиболее полную информацию, а также множество ссылок вы можете найти на серверах www.w3.org, www.xml.com, www.xmlinfo.com, www.oasis-open.org. Известные автору русскоязычные материалы опубликованы на серверах www.citforum.ru (ЦИТ МГУ) и www.osp.ru (издательство "Открытые системы").
Продолжение следует.
Александр Печерский - программист Web-группы межотраслевого регионального центра повышения квалификации (МРЦПК) при НГТУ (Новосибирском государственном техническом университете). Занимается созданием и поддержкой Web-узлов, интранет-технологиями, в настоящий момент - системами дистанционного образования на их основе. Область интересов - современные стандарты организации информации в Web (языки XML, RDF, XLink и т. д.) и их практическое применение (XML-процессоры на Java, Perl, VB, стилевые таблицы XSL).