Вместе
с XML, которому посвящен следующий раздел, HTML
обычно причисляют к «языкам разметки текста». На самом деле роль этих двух
языков, как и самого формата под названием «просто текст» («plaintext»), выходит далеко за рамки обработки
текстовой информации.
Текстовая
часть любой веб-страницы теснейшим образом переплетена с управляющими
конструкциями языка HTML, невидимыми сами по себе, но
определяющими внешний вид и размещение всех остальных элементов страницы. Таким
образом, в первую очередь HTML выполняет роль «скелета»
страницы и сайта в целом — на HTML-разметку нанизываются
текст, изображения, ссылки, интерактивные элементы и вообще все, что только
может быть отображено в окне броузера. Лишь «по совместительству» HTML-файл
содержит в себе еще и собственно текстовую часть страницы.
Давайте
для начала проследим короткую, но необычайно насыщенную историю HTML —
языка, в котором столкнулись противоположные (и, в идеале, взаимодополняющие)
подходы к проблеме представления информации в компьютере и который стал в
последние годы ареной сотрудничества и противоборства основных действующих лиц
«компьютерного театра».
Начало
истории HTML следует отнести к далекому 1969 году, когда Чарльз
Гольдфарб, работавший тогда в компании IBM,
создал прототип языка для разметки технической документации, впоследствии
названного GML, а с приданием ему в 1986 году статуса
международного стандарта — SGML (StandardGeneralizedMarkupLanguage). Этот обобщенный метаязык
предназначен для построения систем логической, структурной разметки
любых разновидностей текстов. Слово «структурная» означает, что управляющие
коды, вносимые в текст при такой
20
разметке,
не несут никакой информации о форматировании документа, а лишь указывают
границы и соподчинение его составных частей, т.е. задают его структуру. Создатели
SGML
стремились полностью абстрагироваться от проблем представления текста в разных
программах, на разных компьютерных платформах и устройствах вывода. Хотяформальноничтонемешаетзаписатьсредствами SGMLлюбую информацию об элементах документа — в том числе и
параметры его форматирования (например, шрифт Times
полужирного начертания кегля12 пунктов
для заголовков), — идеология этого языка требует
ограничиться указанием на уровень заголовка и его место в иерархической
структуре документа. Все остальное должно быть вынесено в так называемые
стилевые спецификации — совершенно отдельный и, как принято выражаться, ортогональный (т.
е. допускающий независимое изменение) по отношению к структурной основе
информационный «слой». Благодаря этим ограничениям размеченный текст сможет без
труда интерпретировать любая программа, работающая с любым мыслимым устройством
вывода. К примеру, при работе в графическом интерфейсе заголовок может действительновыводитьсяполужирнымшрифтомповышенного кегля; программа, использующая
текстовый интерфейс, выделит егопустой
строкойсверхуиснизуи,возможно, повышенной яркостью символов;
синтезатор речи, читающий документ вслух, сможет отметить заголовок паузой и
изменением интонации; наконец, «робот», собирающий базу, придаст тексту заголовка
больший «вес» при контекстном поиске. Можно сказать, что SGML-разметка
обнажает нематериальную «душу» текста, для которой впоследствии любая
программа-интерпретатор сможет подобрать подходящее к случаю «тело».
Сам
по себе SGML есть не готовая система разметки текста, а лишь удобный
метаязык, позволяющий строить такие системы для конкретных обстоятельств.
Жизнь многообразна и непредсказуема: сегодня вам требуется выделять в текстах
заголовки, а завтра, возможно, понадобится размечать подписи в письмах,
математические формулы или имена действующих лиц в пьесе. Стандарт SGML
устанавливает лишь синтаксис записи элементов разметки, а также правила
определения новых элементов и указания структурных отношений между ними. Для
практической же разметки документов нужно приложение SGML —
набор
определений
элементов, представляющий собой, по сути, формальное описание структуры
документа.
Разделение «содержания» и «представления» как двух
независимых аспектов информации — идея не особенно новая. Как и другие
абстрактные противопоставления, до недавнего времени она оставалась чисто
философской концепцией, не имевшей никакого выхода на практику. Вспомним,
однако, что задолго до того, как философия смогла сделать свои первые шаги,
способность к абстрактному мышлению и поаспектному анализу вещей и явлений
должна была возникнуть и оформиться в языке. Лингвистам известно, что у языков, находящихся на
начальных стадиях развития, зачастую отсутствует способность к разделению
абстрактных аспектов явлений — такой язык может иметь самостоятельное слово для
«падающего снега» при полном отсутствии слов для понятий «падать» и «снег» по
отдельности. Очевидно, невозможность сказать что-то отражает и невозможность это помыслить. К чему я заговорил о языке?
Дело в том, что история развития абстрактного мышления в целом — хороший
аналог происходящему на наших
глазах медленному и трудному процессу вычленения и
очищения аспектов компьютерного представления информации. До сих пор
подавляющее Большинство текстов создаются и хранятся в «фирменных»,
ориентированных на визуальное представление форматах вроде MSWord, — которые,
•к языки первобытных племен, неспособны отделить
«существительное» содержимого документа от «прилагательного» его представления
в той или иной среде.
собственно говоря, в докомпьютерную эпоху практическая
задача разделения аспектов документа вообще не могла стоять. Единственное
«преобразование формата», возможное для бумажного документа, — это прочтение
его вслух, и очевидно, что доступ к хранящейся отдельно структуре текста не
очень-то помог бы в такой ситуации. Совсем другое дело — текст, хранящийся в
компьютере, — компьютере, возможности которого уместно сравнить с мощью хорошо
развитого человеческого языка. Как и язык, компьютер способен оформить,
сохранить и сообщить вовне любую абстракцию, если только для этой абстракции
разработана соответствующая нотация, т.е. синтаксис записи.
Именно таким синтаксисом и является язык SGML. Теперь мы можем
мыслить содержание и оформление как две не только потенциально, но и реально
отдельные друг от друга сущности именно потому, что компьютер позволяет нам
«высказать» их по отдельности. Важно отметить, однако, что SGML не есть инструмент
для разделения содержания
и представления, а всего лишь удобное средство хранения уже возогнанной и
очищенной структурированной информации. Само же вычленение структуры — в любом
случае задача человека: как и язык, компьютер не может мыслить сам, а лишь
помогает мыслить человеку.
Не менее важно и то, что в SGML нет никакой изначальной склонности к «содержанию» в
ущерб «оформлению»; единственное требование к информации, сохраняемой
средствами SGML,
— это ее структурированность. В виде иерархической структуры вложенных друг в друга
элементов вполне можно представить не только содержимое документа, но и набор
относящихся к нему правил и параметров оформления (как это и сделано в языке XSL, стр. 53).
Собственно говоря, SGML-документ
больше всего похож на базу данных с произвольной длиной поля и возможностью
установления иерархических отношений между полями. Как и базе данных, SGML-документу все равно,
что хранить в себе, лишь бы данные
22
соответствовали заранее заданной структуре, — смысл
которой придан ей человеком и существует только для него.
Как мы видим, компьютер — не только лучший из созданных
до сих пор инструментов для записи идей, но и единственное изобретение человека, позволяющее реализовать нa практике многие идеи, до сих пор казавшиеся чистой
абстракцией.
Принципы,
на которых строится язык SGML, значительны и интересны;
несомненно, идеология языка оказала влияние на многие компьютерные разработки.
Однако сам по себе SGML не получил сколько-нибудь заметного
распространения до тех пор, пока в 1991 г. сотрудники Европейского института
физики частиц (CERN), занятые созданием системы передачи
гипертекстовой информации через Интернет, не выбрали SGML в
качестве основы для нового языка разметки гипертекстовых документов. Этот язык
— самое известное из приложений SGML — был назван HTML (HyperTextMarkupLanguage,
«язык разметки гипертекста»).
Изначально
HTML,
как и положено SGML-приложению, разделял все особенности
идеологии SGML. Из сорока с небольшим тегов HTML
версии 1.2 (датированной июнем 1993 г.) всего три, да к тому же и не
рекомендованных к использованию, тега осмеливались намекать на физические
параметры представления документа. Вся разметка была чисто логической, и лишь в
описательной части стандарта, сопровождающей формальное определение тегов,
можно было прочесть что-нибудь вроде «в графических броузерах действие этого
тега может передаваться курсивным начертанием».
Первым
же (и единственным в те далекие времена) графическим броузером была программа Mosaic,
разработанная, как и сам WWW, в научном учреждении —
Национальном центре суперкомпьютерных приложений США (NCSA).
Так что нет ничего удивительного в том, что в этот «золотой век» никаких
противоречий между официальными стандартами и их реализацией в броузерах еще не
существовало. HTML неторопливо развивался, оставаясь в
рамках парадигмы структурной разметки, и в апреле 1994 г. началась подготовка
спецификации следующей версии языка — 2.0. Этим занимался образованный в том же
году Консорциум W3 (W3 Consortium,
сокращенно W3C),
перенявший от CERN верховную власть и авторитет в мире WWW. В
настоящий момент консорциум, имеющий статус «международного и
некоммерческого», объединяет свыше 150
23
организаций-членов,
в том числе фирмы Netscape, Microsoft и
множество других. Однако в 1994—1995 гг. его членами были почти исключительно
университеты и научные учреждения. Столь академический состав W3C
сказывался как на самих документах, публикуемых консорциумом, так и на
процедуре (и особенно на сроках) их принятия. Достаточно сказать, что
спецификация HTML 2.0, единственным серьезным
усовершенствованием в которой был механизм форм (стр. 30) для отсылки
информации с компьютера пользователя на сервер, была окончательно утверждена
лишь в сентябре 1995 г., когда в W3C
уже полным ходом шло обсуждение HTML 3, — или, как его называли
поначалу, «HTML+».
Пожалуй,
проект HTML 3 — самая яркая и неоднозначная страница в истории
языка.Работа над ним началась в марте
1995 г., и первоначальный вариант стандарта включал в себя много интересных
нововведений — теги для создания таблиц, разметки математических формул,
вставки обтекаемых текстом рисунков, примечаний и др. Но самое главное —HTML 3 был попыткой разрешить
уже достаточно очевидное к тому временипротиворечие между идеологией структурной разметки и потребностями
пользователей, заинтересованных в первую очередь в гибких и богатых
возможностях визуального представления. Противоречие это было разрешено
опять-таки в полном соответствии с идеологией SGML: W3C
ввел в HTML 3 поддержку так называемых иерархических стилевых спецификаций(CSS, стр. 40).Система CSS формально независима от HTML,
имеет совершенно иной синтаксис, не наследует никаких идеологических
ограничений и позволяет, уже в совершенно иных терминах, задавать параметры
графического (так же как и текстового, звукового и какого угодно другого) представления для любого
тега HTML.
Нет
сомнения, что CSS — почти идеальный способ избавить HTML от
наследственных дефектов и перевести его развитие на принципиально новые рельсы.
Тем досаднее то, как сложилась судьба этого замечательного изобретения.
Поскольку спецификацию CSS увязали с другими нововведениями HTML 3,
W3C
долго не утверждал ее в качес