Море приколов и флешек на CD Море разнообразных приколов! :: KOLBAS2003.NAROD.RU

Главная Статьи Книги Опрос Чат Гостевая книга Форум Ссылки

XML против HTML,
или Мама, роди меня обратно

Статья написана по материалам книги: Rick Darnell, Dmitry Kirsanov, et al., HTML Unleashed, Sams.net Publishing, 1997 (см. www.webreference.com/dlab/books/html/)

HTML до сих пор остается единственной технологией распространения информации, доступной всем жителям Интернета без исключения. Очевидно, этот "естественный монополизм" не позволяет объективно оценить достоинства и недостатки этого языка - его пока что просто не с чем сравнивать. И все-таки, давайте попробуем честно ответить на вопрос: что такое HTML?

Если снять бесчисленные подпорки, костыли и навесные моторчики, благодаря которым колосс HTML двигается, говорит и притворяется живым, - глазам нашим предстанет необычайно простой (чтобы не сказать "примитивный") язык, пригодный лишь для разметки документов самой незамысловатой структуры: всего-то навсего заголовок, абзацы текста, выделенные цитаты да адрес автора в конце. Эта "болванка" выглядит просто смешно в приложении к бездонному океану информации сегодняшнего WWW.

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

К счастью, совсем недавно появился новый инструмент, разработанный в первую очередь для того, чтобы снять это противоречие. Язык XML (eXtensible Markup Language, "Расширяемый язык разметки") - это компактное упрощенное подмножество языка SGML, разработанное Консорциумом W3C (http://www.w3.org/) специально для того, чтобы им можно было пользоваться вместо HTML для разметки интернетовских документов. Вполне вероятно, что в самом ближайшем будущем язык этот превратится в серьезного конкурента HTML.

Почему SGML?

Как и в случае любой другой новой и многообещающей технологии, начать стоит с объяснения того, чем XML не является. Ни SGML, ни XML ни в коей мере не могут служить ни графическими языками, ни средствами визуальной разметки документов (ничего похожего на PostScript или даже TeX). Сам по себе XML не предоставляет даже тех средств форматирования, которые есть в HTML. Строго говоря, XML не является даже "языком": хотя и в меньшей степени, чем SGML, но все же XML правильнее всего называть метаязыком, позволяющим создавать специализированные системы логической разметки для любых разновидностей документов.

Всем известный язык HTML представляет собой лишь одну из таких систем, одно из приложений SGML - набор определений тегов и их атрибутов, записанный на языке SGML. Можно сказать, что синтаксис разметки HTML (например, особая роль символов "<", ">", "&") унаследован из собственно SGML, тогда как имена конкретных тегов и набор атрибутов каждого из них у HTML свои. Вся специфическая для HTML информация задается с помощью особой конструкции языка SGML, называемой "определение типа документа" (Document Type Definition, DTD). В идеале DTD - высший авторитет во всем, что касается синтаксиса той или иной версии HTML. Им, к примеру, пользуются HTML-валидаторы - интерпретаторы SGML, проверяющие соответствие HTML-документа некоторому DTD (так, DTD для HTML версии 4.0 можно найти по адресу: www.w3.org/pub/WWW/MarkUp/Cougar/Cougar.dtd).

Важно понимать, что DTD ни в SGML, ни в XML не имеет никаких средств для задания семантики тегов, т.е. оно не дает ответа на вопрос, что означает каждый тег. В каком-то смысле идеология SGML следует Людвигу Витгенштейну, которому принадлежит высказывание: "The meaning of a word is its use" ("Значение слова - это то, как оно употребляется"). Кроме определения имени тега и списка его атрибутов, DTD позволяет лишь указать, в окружении каких других тегов (т.е. в каком контексте) может либо должен употребляться данный тег. Тот факт, к примеру, что тег <I> включает курсивное начертание, формально средствами SGML не выразим, - он лишь подразумевается авторами языка HTML и указывается в комментариях или в сопроводительной документации к HTML DTD.

Именно поэтому путь, избранный в HTML, - жесткое закрепление за каждым из тегов (набор которых ограничен) некоторой "рекомендуемой" роли и параметров форматирования - несмотря на свою простоту, плохо укладывается в рамки идеологии SGML и влечет за собой неприятные последствия. Если семантику тега невозможно определить формально, то нет ничего удивительного в том, что эффект даже простейших тегов иногда сильно различается у разных броузеров. Абстрактный вопрос "что делает такой-то тег", по сути, лишен смысла - можно лишь выяснять, какой результат дает применение этого тега в том или ином броузере.

В идеале форматирующие, гипертекстовые и прочие функции тегов должны определяться самостоятельными, не зависящими от языка разметки формальными системами, а реализация этих функций в броузерах должна быть отделена от синтаксического вычленения тегов. Шагом по направлению к этому идеалу стала разработка языка иерархических стилевых спецификаций (Cascading Style Sheets, CSS) - независимой от HTML системы, позволяющей в некоторых пределах изменять параметры форматирования, ассоциированные с тем или иным тегом. Это сильно запоздавшее нововведение предоставляет довольно ограниченные возможности форматирования и, по сути, ставит не меньше проблем, чем решает.

Как устроен XML

XML - это попытка вернуться к истокам идеологии SGML, приспособив замыслы его создателей к нуждам современного Интернета. Главная и почти единственная задача этого языка логической разметки - разбить содержимое документа на элементы, причем теги для разграничения этих элементов пользователь может создавать сам. В XML нет ни одного заранее определенного тега с фиксированным значением.

Если в SGML каждый документ обязан иметь свое DTD, а у HTML есть один DTD "на всех", то XML представляет собой компромисс: документ может иметь (или ссылаться на) DTD, а может и обходиться без DTD. В последнем случае каждый новый тег и атрибут определяется самим фактом своего употребления. Таким образом, для XML-документов существует два уровня соответствия стандарту: документы, не имеющие DTD, но удовлетворяющие всем другим требованиям синтаксиса XML, называют "правильно структурированными" (well-formed), чтобы отличить их от документов "валидных" (valid), имеющих в своем составе DTD (или ссылку на внешнее DTD).

Правильно структурированные документы, хотя и уступают по "правильности" документам валидным, годятся для большинства практических случаев. Это значит, что вы можете сразу же начать описывать структуру вашего документа на "почти человеческом" языке, выдумывая теги на ходу и заботясь лишь об их правильной вложенности:

<ПРЕДЛОЖЕНИЕ>

<ПОДЛЕЖАЩЕЕ>

<СУЩЕСТВИТЕЛЬНОЕ> мама </СУЩЕСТВИТЕЛЬНОЕ>

</ПОДЛЕЖАЩЕЕ>

<СКАЗУЕМОЕ ТИП="ПРОСТОЕ">

<ГЛАГОЛ> мыла </ГЛАГОЛ>

</СКАЗУЕМОЕ>

<ДОПОЛНЕНИЕ ТИП="ПРЯМОЕ">

<СУЩЕСТВИТЕЛЬНОЕ> раму </СУЩЕСТВИТЕЛЬНОЕ>

</ДОПОЛНЕНИЕ>

</ПРЕДЛОЖЕНИЕ>

(Как видно из примера, имена тегов и атрибутов можно писать и по-русски. Опыт HTML показал, сколь важна тщательная и своевременная интернационализация всех аспектов языка, претендующего на какую-то роль в Интернете. Поэтому создатели XML позаботились, в частности, о том, чтобы в именах тегов и атрибутов можно было пользоваться не только латинскими буквами, но и кириллицей, иероглифами и вообще всеми символами из репертуара Unicode, которые считаются "буквами" хотя бы в одном языке или системе письменности.)

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

Вы можете спросить: зачем тратить время на логическую разметку, если в первую очередь нам нужен тот или иной эффект оформления? Вспомните, однако, насколько облегчают работу в Microsoft Word именованные стили абзацев: если всем заголовкам присвоен стиль "Heading", это хорошо не только своей "логичностью", но и тем, что при этом для заголовков одним махом устанавливаются сразу множество параметров оформления, а впоследствии вы сможете с легкостью поменять форматирование всех заголовков одновременно. Поэтому логическую разметку XML вполне можно считать заменителем именованных стилей Word или макросов системы TeX - то есть именно тех инструментов, которых так порой не хватает в HTML.

Возможность использовать произвольные теги означает, в частности, что любой HTML-документ очень легко преобразовать в XML. Изменения, требуемые для этого преобразования, немногочисленны и сугубо формальны (все теги должны быть закрыты, все значения атрибутов должны быть взяты в кавычки и т.п.).

Надстройки

Создатели XML прекрасно понимали, что простота и изящество логического подхода к разметке имеют оборотную сторону - язык, не предоставляющий достаточно мощных и притом стандартизированных средств определения семантики тегов, вряд ли сможет составить серьезную конкуренцию HTML. Поэтому, с момента появления черновой спецификации XML в ноябре 1996 года, разработчики заняты в основном выбором и стандартизацией расширений языка - надстроек над XML, которые позволили бы формально описывать различные семантические аспекты тегов.

В отличие от HTML, многочисленные "расширения" которого больше похожи на заплаты на расползающейся ткани, модульная структура XML является одним из важнейших преимуществ этого языка. Авторы XML прилагают все усилия к тому, чтобы логический "базис" и семантические "надстройки" удобно стыковались, не теряя при этом своей ортогональности (независимости друг от друга). Даже спецификация языка разбита на отдельные части, первая из которых (www.textuality.com/sgml-erb/WD-xml-lang.html) покрывает весь синтаксис логической разметки.

Вторая же (и на данный момент последняя) часть стандарта (www.textuality.com/sgml-erb/WD-xml-link.html) описывает механизм создания гипертекстовых ссылок в XML-документах. Этот аспект языка значительно усовершенствован в сравнении с HTML. Вот основные черты гипертекстовой модели XML:


XML-ссылки реализованы не на уровне тегов (как в случае тега <A> языка HTML), а с помощью зарезервированных имен атрибутов. Это позволяет с легкостью превратить в гипертекстовую ссылку любой элемент документа, просто расширив его список атрибутов.

Для XML-ссылки можно указать, будет ли она обычной ссылкой, активизируемой пользователем (щелчком мышью, к примеру), или же броузер, встретив в документе эту ссылку, должен активизировать ее сам, не дожидаясь команды пользователя.

Для ссылки можно указывать результат ее активации, а именно: выводить ли документ, на который она ссылается, вместо текущего (например, в том же окне броузера), создать ли для него новый контекст вывода (например, новое окно) или же содержимое нового документа нужно вставить прямо внутрь текущего документа.

Важные усовершенствования внесены в синтаксис URL-адресов, использующихся в ссылках. Как вы, вероятно, знаете, URL-адреса могут содержать поисковую часть, стоящую в конце после символа "?", а также идентификатор фрагмента, отделяемый символом "#". XML расширяет синтаксис этих конструкций, благодаря чему, не теряя обратной совместимости с существующими адресами, они позволяют адресовать практически любой фрагмент любого XML- или HTML-файла. При этом не требуется, чтобы автор файла, на который ссылаются, как-то по-особому разметил этот фрагмент (в HTML, как вы знаете, его нужно пометить тегом <A NAME="...">). Более того, вырезание этого фрагмента из документа можно переложить на сервер, на котором документ хранится, тем самым избежав пересылки по сети всего документа целиком (правда, для этого нужно, чтобы сервер умел обрабатывать такие "расширенные" запросы).
Что же касается визуального форматирования, то здесь наиболее вероятным кандидатом в партнеры XML является язык DSSSL (Document Style Semantics and Specification Language, "Язык стилистических и семантических спецификаций документов", см. www.jclark.com/dsssl/). По сравнению с CSS язык DSSSL является гораздо более мощным и разносторонним инструментом; с его помощью можно описывать не только визуальное форматирование XML- и SGML-документов, но и преобразование документов от одного DTD к другому. Для использования в Интернете (в первую очередь, вместе с XML) разрабатывается упрощенная версия DSSSL, получившая название "DSSSL Online" или "DSSSL-o". Ожидается, что спецификация DSSSL-o станет по совместительству и третьей частью стандарта XML.

Перспективы

Прежде чем приступать к выработке стандарта, разработчики XML составили список требований, которым должен удовлетворять новый язык. Имеет смысл привести в заключение главные из этих требований - они позволят вам лучше представить себе роль, на которую претендует XML в Интернете ближайшего будущего.


Новый язык должен наилучшим образом подходить для документов, распространяемых через Интернет. Современные web-серверы требуют лишь минимальных изменений в конфигурации для обслуживания XML-документов. Стандартный способ связывания друг с другом XML-документов и DTD-файлов использует URL-адреса, с которыми в современном Интернете прекрасно знакомо большинство программ и пользователей.

Программы для работы с XML должны быть просты в написании и отладке. Некоторые из экспериментальных интерпретаторов языка написаны в виде Java-классов и занимают объем буквально в несколько килобайт.

XML-документы должны быть достаточно просты для чтения и понимания человеком. Благодаря возможности создавать новые теги по мере необходимости и записывать их любым алфавитом мира XML-документы могут быть не менее (а в некоторых случаях - и более) читабельны, чем простой текст.

Компактность разметки большого значения не имеет. Логичному и недвусмысленному синтаксису всегда отдается предпочтение перед возможностью сэкономить несколько нажатий на клавиши.

Стандарт XML должен быть подготовлен быстро. Хотя окончательной версии еще нет, объем работы, проделанной за столь краткий срок, впечатляет.

Технология XML находится пока еще в зачаточном состоянии, и любые попытки предсказать будущее этого языка достаточно рискованны. Однако растущий интерес к XML ясно показывает, что WWW уже созрел для чего-то более мощного и элегантного, чем современный HTML.

SGML HTML XML
Год создания 1986 1992 1997
Тип разметки Строго логическая Логическая, но теги имеют жестко фиксированные параметры форматирования Строго логическая, определяется внешними стилевыми спецификациями
Набор тегов и атрибутов Произвольный Фиксированный Произвольный
Синтаксис тегов Гибкий Фиксированный Фиксированный
Определение типа документа для (DTD) Обязательно для каждого документа Одно на все документы Может быть свое у каждого документа, но может и отсутствовать
Гипертекстовая модель Отсутствует Примитивная Развитая
Совместимость с языками стилевых спецификаций DSSSL CSS DSSSL-o
Версии и спецификации Одна стабильная версия с полной и формально строгой спецификацией Множество версий и диалектов, не все из них достаточно строго документированы Незаконченная спецификация первой версии языка формально строга и легко расширяема
Трудность освоения Высокая Низкая Средняя

 

 

 
              
   

Комментарии: Пишите мне Rambler's Top100 Copyright ©
Хостинг от uCoz