Необычайно интересно проследить историю развития этого языка - историю, в которой столкнулись противоположные подходы к проблеме компьютерного представления текста и которая послужила ареной сотрудничества и противоборства крупнейших компьютерных компаний, определяющих пути развития и будущее Internet.
В начале был SGML
Начало истории HTML следует отнести к далекому 1986 году, когда Международная организация по стандартизации (ISO) приняла стандарт ISO-8879, озаглавленный "Standard Generalized Markup Language (SGML)". Стандарт этот посвящен описанию SGML - обобщенного метаязыка, позволяющего строить системы логической, структурной разметки любых разновидностей текстов. Слово "структурная" означает, что управляющие коды, вносимые в текст при такой разметке, не несут никакой информации о внешнем виде документа, а лишь указывают границы и соподчинение его составных частей - т. е. задают его логическую структуру.
Создатели SGML стремились максимально абстрагироваться от проблем представления электронного текста в разных программах, на разных компьютерных платформах и устройствах вывода. Так, если с помощью SGML размечается документ, содержащий заголовки, идеология языка запрещает указывать, что такой-то заголовок должен набираться, скажем, шрифтом Times полужирного начертания кегля 12 пунктов. SGML в таком случае требует ограничиться указанием на уровень заголовка и его место в иерархической структуре документа.
Благодаря таким ограничениям размеченный текст сможет без труда интерпретировать любая программа, работающая с любым мыслимым устройством вывода. К примеру, при работе в графическом интерфейсе заголовок может действительно выводиться полужирным шрифтом повышенного кегля; программа, использующая текстовый интерфейс, выделит его пустой строкой сверху и снизу и, возможно, повышенной яркостью символов; синтезатор речи, читающий документ вслух, сможет отметить заголовок паузой и изменением интонации. Можно сказать, что SGML-разметка обнажает нематериальную "душу" текста, для которой впоследствии любая программа-интерпретатор сможет подобрать подходящее к случаю "тело".
Однако абстрактность SGML этим не исчерпывается. SGML представляет собой не готовую систему разметки текста, а лишь удобный метаязык, позволяющий строить такие системы для конкретных обстоятельств. Жизнь многообразна и непредсказуема: сегодня вам требуется выделять в текстах заголовки, а завтра, возможно, понадобится размечать подписи в письмах, математические формулы или имена действующих лиц в пьесе. Стандарт SGML определяет лишь синтаксис записи элементов разметки - тегов - и их атрибутов, а также правила определения новых тегов и указания структурных отношений между ними. Для практической же разметки документов нужно приложение SGML - набор определенных в соответствии со стандартом тегов, представляющий собой, по сути, формальное описание структуры документа.
Золотой век
Язык SGML - это типичное детище академической науки, изящная игрушка теоретиков. Его создание не было вызвано насущной практической необходимостью. Принципы, на которых строится этот язык, значительны и интересны; несомненно, идеология SGML оказала влияние на многие компьютерные разработки. Однако сам по себе SGML не получил сколько-нибудь заметного распространения - до тех пор, пока в 1991 г. сотрудники Европейского института физики частиц (CERN, http://www.cern.ch), занятые созданием системы передачи гипертекстовой информации через Internet, не выбрали SGML в качестве основы для нового языка разметки гипертекстовых документов. Этот язык - самое известное из приложений SGML - был назван HTML (HyperText Markup Language, "язык разметки гипертекста").
Изначально HTML, как и положено SGML-приложению, разделял все особенности идеологии SGML. Из сорока с небольшим тегов HTML версии 1.2 (датированной июнем 1993 г.) всего три, да к тому же и не рекомендованных к использованию, тега осмеливались намекать на физические параметры представления документа. Вся разметка была чисто логической, и лишь в описательной части стандарта, сопровождающей формальное определение тегов, можно было прочесть что-нибудь вроде "в графических браузерах действие этого тега может передаваться курсивным начертанием".
А первым (и долгое время единственным) графическим браузером в те далекие времена была программа Mosaic, разработанная, как и собственно WWW, в научном учреждении - Национальном центре суперкомпьютерных приложений США (National Center for Supercomputer Applications, NCSA; http://www.ncsa.uiuc.edu). Так что нет ничего удивительного в том, что в этот "золотой век" никаких противоречий между официальными стандартами и их реализацией в браузерах еще не существовало. HTML неторопливо развивался, оставаясь в рамках парадигмы структурной разметки, и в апреле 1994 г. началась подготовка спецификации следующей версии языка - 2.0. Этим занимался образованный в том же году Консорциум W3 (W3 Consortium, сокращенно W3C; http://www.w3.org/pub/WWW), унаследовавший от CERN верховную власть и авторитет в мире WWW.
В настоящий момент консорциум, имеющий статус "международной некоммерческой организации", объединяет свыше 150 организаций-членов, в том числе фирмы Netscape, Microsoft и множество других. Однако в 1994-1995 гг. его членами были почти исключительно университеты и научные учреждения. Столь "академический" состав W3C сказывался как на самих документах, публикуемых консорциумом, так и на процедуре (и особенно на сроках) их принятия. Достаточно сказать, что окончательный вариант HTML 2.0 (http://ds.internic.net/rfc/rfc1866.txt), единственным серьезным усовершенствованием в котором был механизм бланков (форм) для отсылки информации с компьютера пользователя на сервер, был официально утвержден лишь в сентябре 1995 г., когда в W3C уже полным ходом шло обсуждение HTML 3 (или, как его называли поначалу, "HTML+").
Стили
Пожалуй, проект HTML 3 (http://www.w3.org/pub/WWW/MarkUp/html3/) - самая яркая и неоднозначная страница в истории языка. Работа над ним началась в марте 1995 г., и первоначальный вариант стандарта включал в себя много интересных нововведений - теги для создания таблиц, разметки математических формул, вставки обтекаемых текстом рисунков, примечаний и др. Но самое главное - HTML 3.0 был попыткой разрешить уже достаточно очевидное к тому времени противоречие между идеологией структурной разметки и потребностями пользователей, заинтересованных в первую очередь в гибких и богатых возможностях визуального представления.
Чтобы разрешить это противоречие, не оскверняя заветов отцов-основателей HTML, авторы версии 3 ввели в ней поддержку нового средства - так называемых иерархических стилевых спецификаций (Cascading Style Sheets, CSS; http://www.w3.org/pub/WWW/TR/REC-CSS1). Система CSS формально независима от HTML, имеет совершенно иной синтаксис (более того, HTML 3 можно стыковать с разными реализациями CSS, обладающими разным синтаксисом и возможностями), не наследует никаких идеологических ограничений и позволяет, уже в совершенно иных терминах, задавать параметры визуального представления для любого тега HTML. С помощью CSS автор может наконец с чистой совестью указать, каким шрифтом какого кегля набирать заголовки такого-то уровня. И, что самое важное, достигнуто это было не введением новых тегов, а разработкой механизма, позволяющего влиять на интерпретацию уже существующих тегов логической разметки, причем с учетом контекста их употребления. Браузеры с текстовым интерфейсом или с синтезатором речи смогут с легкостью проигнорировать эту дополнительную информацию и использовать для оформления свои обычные средства.
Слово cascading в названии системы CSS служит напоминанием о том, что в действительности на вывод каждого тега в документе могут оказывать влияние сразу несколько стилевых спецификаций, образующих иерархическую систему: например, поверх спецификаций, относящихся к конкретному документу, может действовать стилевой файл, общий для всех документов на сервере. Кроме того, пользователь браузера, поддерживающего CSS, может указать свои собственные параметры вывода для тех или иных тегов. Конфликты, которые при этом возникают, разрешаются в пользу более частных, узких спецификаций: то, что указано для конкретного документа, берет верх над спецификациями для всего сервера, а параметры вывода тега в данном контексте имеют преимущество перед параметрами для того же тега "вообще", без учета контекста. В случае же конфликта спецификаций, заданных пользователем, с установками автора страницы побеждают последние, хотя пользователь может при желании изменить эту ситуацию на обратную.
Нет сомнения, что CSS - почти идеальное средство избавить HTML от наследственных дефектов и перевести его развитие на принципиально новые рельсы. Тем досаднее то, как сложилась судьба этого замечательного изобретения. Поскольку спецификацию CSS увязали с другими нововведениями HTML 3, W3C долго не утверждал ее в качестве официального стандарта; задерживалось доведение до более или менее завершенного вида, при котором стала бы возможной ее реализация в коммерческих продуктах.
Идолы рынка
А между тем коммерческое освоение WWW не заставило себя долго ждать. В начале 1994 г. группа разработчиков браузера Mosaic под предводительством Джеймса Кларка, который за несколько лет до того создал и "вывел в люди" компанию Silicon Graphics, основала корпорацию Netscape Communications и вскоре выпустила первую версию коммерческого браузера Netscape Navigator. Вскоре после этого начался экспоненциальный рост WWW, продолжающийся по сей день. Не менее впечатляющие темпы показала при этом и Netscape, которая в конце 1995 г. объявила, что достигнутые результаты делают ее самой быстрорастущей компанией в мировой истории (!). Чтобы закрепить лидерство (на которое, впрочем, тогда еще мало кто покушался) и привлечь новых пользователей, Netscape, увы, вводила в HTML все новые и новые усовершенствования, - и эти усовершенствования поддерживались только браузером Netscape Navigator.
Практически все новые теги, в изобилии предлагавшиеся Netscape, были направлены на улучшение внешнего вида документа и расширение возможностей его форматирования. Причины этого понятны: чтобы убедить, скажем, бизнесмена, что ему пора обратить внимание на новое средство коммуникации и рекламы, прежде всего нужно показать ему это средство в привлекательном, "товарном" виде. Поставив себе целью завоевание корпоративного рынка, разработчики Netscape не могли (да и не хотели, по-видимому) уделять должное внимание сложившимся традициям развития языка. В результате тот вариант HTML, который поддерживала выпущенная в январе 1996 г. версия Netscape Navigator 2.0, представлял собой довольно странную смесь старых логических тегов с беззастенчиво вломившимися новыми, ориентированными на графическое экранное представление документа и затрудняющими его воспроизведение на других устройствах вывода.
Такая политика компании, с одной стороны, принесла ей быстрый и впечатляющий успех (одно время версии Netscape Navigator составляли более 90% всех используемых браузеров), а с другой - вызвала ожесточенное сопротивление наиболее сознательной части HTML-сообщества. Энтузиасты неустанно разъясняли каждому, кто согласен был их слушать, что HTML по природе своей не имеет права зависеть от какого-то конкретного браузера и что заявления типа "эту страницу лучше всего смотреть в Netscape Navigator" являются насмешкой над здравым смыслом. Движение "борцов за чистоту HTML" существует и сейчас, однако ощутимого влияния не имеет.
Многие Web-дизайнеры, даже признавая справедливость аргументации "HTML-пуристов", считают использование новых тегов практически оправданным. Неудобства при этом будут испытывать лишь несколько процентов пользователей других браузеров, для которых страницы с этими тегами будут выглядеть совсем не так, как задумал автор (хотя текст в большинстве случаев все равно останется читабельным). Вероятно, аргументы противников Netscape звучали бы более убедительно, если бы сам по себе "официальный" HTML не был столь неимоверно беден изобразительными возможностями. Меня, к примеру, пробирает дрожь при мысли, что для миллионов страниц в современной "паутине", путешествие по которой способно порой принести подлинное эстетическое наслаждение, были бы доступны лишь возможности HTML 2.0.
Помимо использования "плохих" Netscape-ориентированных тегов, широко распространена также практика "злоупотребления" средствами HTML ради сопутствующих им визуальных эффектов. Скажем, вместо того чтобы использовать тег
только для оформления настоящих ("логических") таблиц, Web-дизайнеры сплошь и рядом применяют таблицы без рамок для управления размещением обычного текста и иллюстраций, регулируют с их помощью ширину полей и т. п. Нет нужды объяснять, что оформление в виде таблицы того, что по сути своей таблицей совсем не является, есть прямое нарушение идеологии структурной разметки. "Борцы за чистоту HTML" сломали немало копий, доказывая недопустимость этого и многих других дизайнерских приемов. Но времена постепенно меняются, и теперь любой желающий может увидеть пример такого "злоупотребления" прямо на заглавной странице сервера W3C (http://www.w3.org/pub/WWW). |
Те же и Microsoft
В конце 1995 г. ситуация в мире HTML была довольно смутной. Популярность браузера Netscape неуклонно росла; программисты этой фирмы готовили к выпуску версию 2.0, которая должна была утвердить господство Netscape на вечные времена благодаря неслыханному набору новшеств, таких как интерфейс подключаемых модулей, поддержка языка Java, встроенный язык сценариев JavaScript, возможность разбивки окна на кадры (frames) и многое другое. К этому времени W3C окончательно завяз в своем проекте HTML 3, который был слишком сильно оторван от реального мира и на завершение которого у консорциума попросту не хватало ни сил, ни средств. HTML 3 по сравнению с HTML 2.0 был важным шагом вперед, однако он развивался по-прежнему в рамках идеологии структурной разметки, а инструмент, дающий возможность выйти за эти рамки, - система CSS - был еще далек от завершения.
В этот переломный момент в игру вступил новый участник - всемогущая корпорация Microsoft. Долгое время эта компания, привыкшая монопольно владеть своим сектором рынка, недооценивала перспективы Internet и не собиралась как-либо участвовать в развитии этой информационной среды, считая ее, по-видимому, слишком демократичной и непредсказуемой. Однако невероятный взлет Netscape (число копий браузера Navigator измерялось к этому времени уже десятками миллионов) заставил Microsoft изменить мнение.
И именно на браузерном фронте, где господство Netscape оставляло меньше всего шансов конкурентам, корпорация Microsoft нанесла свой главный удар. Поначалу мало кто верил, что браузер Microsoft Internet Explorer, который тогда существовал в версии 2.0 и не представлял собой ничего выдающегося, сможет составить конкуренцию Netscape. Тем не менее выпущенная летом 1996 г. версия Internet Explorer 3.0, которая поддерживала почти все расширения Netscape и обладала оригинальным и привлекательным интерфейсом, вызвала настоящий бум и очень быстро утвердилась в качестве "второго главного браузера". Сейчас Microsoft и Netscape делят рынок браузеров почти поровну, и окончательный исход их битвы не берется предсказать никто.
Одновременно с разработкой конкурентоспособного браузера Microsoft решила "навести порядок" и в мире HTML. Взяв под свою опеку W3C, она напитала его денежными и людскими ресурсами и тем самым заработала право едва ли не решающего голоса в этой организации. Проект HTML 3 был заморожен, а вместо него в сжатые сроки создан стандарт HTML 3.2, который, по сути, всего лишь описывает большинство расширений Netscape (с тем же успехом их можно назвать теперь "расширениями Microsoft"). Пройдя обычный в W3C процесс обсуждения и внесения поправок, спецификация HTML 3.2 (http://www.w3.org/pub/WWW/TR/REC-html32.html) была утверждена совсем недавно (в январе этого года) и является, таким образом, последним на настоящий момент официальным стандартом языка. Спираль развития HTML завершила свой первый виток - как и в "золотой век", расхождения между предписаниями стандарта и реализацией HTML в браузерах вновь сведены к минимуму.
Однако HTML сегодня уже совсем не тот, что три года назад. Становится все более очевидным, что язык этот в его теперешнем состоянии практически исчерпал перспективы развития и что добавление новых тегов вряд ли выведет его на принципиально иной уровень. Это особенно понятно тем, кто занимается практическим дизайном: из-за того, что HTML с самого начала не ориентировался на описание внешнего вида документа, он не в состоянии удовлетворительно выполнить эту задачу даже сейчас, при наличии множества визуально-ориентированных тегов. Прямым следствием этого является огромное количество расхождений в интерпретации тегов браузерами. Как бы строго вы ни следовали стандарту, HTML-файл приходится обязательно тестировать по меньшей мере в двух браузерах - Netscape Navigator и Internet Explorer, и чаще всего такое тестирование не обходится без неприятных сюрпризов: отступы, пробелы, размеры элементов оформления и логика их размещения на странице даже для простейших тегов различаются довольно сильно.
Пожалуй, главный вклад Microsoft в развитие HTML (помимо новых тегов, число которых сравнительно невелико) состоит в том, что Microsoft Internet Explorer 3.0 стал - наконец-то - первым массовым браузером, поддерживающим стилевые спецификации (CSS). И хотя эта реализация CSS является несовершенной и далеко не полной, хочется надеяться, что она поможет сдвинуть с мертвой точки процесс массового освоения CSS. В частности, поддержка этого стандарта появится в Netscape Navigator 4.0 (который на момент написания этой статьи существует только в ранней бета-версии).
Что дальше?
С того момента, когда почти одновременно летом 1996 г. Netscape и Microsoft выпустили версии 3.0 своих браузеров, сетевое сообщество живет в постоянном напряжении и неопределенности. Несколькими ловкими ударами поставив свой браузер на один уровень с казавшимся некогда непобедимым Netscape, корпорация Microsoft, очевидно, не собирается останавливаться на достигнутом. Но еще интереснее то, что Microsoft не без успеха создает для себя новый имидж - компании, поддерживающей независимые организации типа W3C и заботящейся об авторитете официальных стандартов не меньше, чем о своей выгоде. На этом фоне Netscape, еще недавно имевшая репутацию главного генератора идей и технологического локомотива всей Internet-индустрии, начинает казаться слишком закрытой, негибкой и эгоистичной в своих намерениях.
Что же касается языка HTML, то его история, полная борьбы и противоречий, по-видимому, близится к завершению. Точнее, близится к завершению история его развития, так как применяться в более или менее неизменном (и, по-видимому, близком к современному) виде он будет еще долго. В мире накоплено огромное количество ресурсов, жестко привязанных к этому языку, - а кроме того, при всех его недостатках он сносно справляется с важнейшими из своих обязанностей. Основными же точками роста сейчас становятся другие Internet-технологии, к HTML имеющие довольно опосредованное отношение: Java, ActiveX, VRML, а в последнее время - разномастные push-технологии, которые позволят поставщикам "проталкивать" свою информацию на компьютеры пользователей на манер теле- или радиовещания.
Компания же Netscape, похоже, все еще не может перестроиться и по старой памяти плодит все новые и новые расширения HTML (полный отчет о "теготворчестве" этой фирмы вы найдете по адресу http://developer.netscape.com/library/documentation/htmlguid/tags_complete.html). Так, в последней, четвертой, версии браузера Navigator (точнее, теперь уже пакета Communicator) появился новый тег , который, в сочетании с языком сценариев JavaScript, позволяет строить "многоэтажные" страницы с накладывающимися друг на друга и даже движущимися слоями текстов и изображений. Скорее всего, большого успеха это нововведение иметь не будет, тем более что одно из предложенных W3C расширений CSS (см. http://www.w3.org/pub/WWW/TR/WD-positioning) предоставляет схожие возможности.
Саму же систему CSS разработчики Netscape также планируют увязать с JavaScript; комбинация эта носит название JavaScript Style Sheets, сокращенно JSSS (см. http://developer.netscape.com/library/documentation/jsstyles.html). К счастью, насколько можно судить по имеющейся документации, JSSS является строгим надмножеством CSS и потому не представляет угрозы для совместимости со стандартом и с другими реализациями CSS. Очевидно, что до тех пор, пока все распространенные браузеры не будут иметь полной поддержки CSS, мастерство Web-дизайна будет, как и сейчас, состоять по большей части в умении получать те или иные оформительские эффекты с помощью такого мало приспособленного для этого средства, как HTML.
Дмитрий Борисович Кирсанов - автор двух книг и ряда статей e-mail: dk@symbol.ru, WWW: http://www.symbol.ru/dk.