П. Храмцов, РНЦ "Курчатовский Институт"
Реферат
Язык гипертекстовой разметки HTML является одним из компонентов технологии ведения гипертекстовых распределенных баз данных World Wide Web. Все программы- интерфейсы - Mosaic, Netscape, Arena, Cello, Lynx и т.п. являются, фактически, интерпретаторами этого языка. В настоящее время готовится третья версия языка, которая отражает как существующую практику разработки гипертекстовых баз данных, так и является в некоторой степени ориентиром для разработчиков программных средств. Данный доклад посвящен краткой характеристике возможностей HTML и его средствам управления обменом гипертекстовой информацией.
Язык гипертекстовой разметки HTML (HyperText Markup Language) был предложен Тимом Бернерсом-Ли в 1989 году в качестве одного из компонентов технологии разработки распределенной гипертекстовой системы World Wide Web.
Разработчики HTML пытались решить две задачи:
Таговая модель описывает документ как совокупность элементов, каждый из которых окружен тагами. По своему значению таги близки к понятию скобок "begin/end" в универсальных языках программирования, которые задают области действия имен локальных переменных, динамику распределения памяти блока и т.п.. Таги определяют область действия правил интерпретации текстовых элементов документа. В последнее время элементы документа, размеченного при помощи HTML, стало принято называть контейнерами.
Общая схема построения элемента текста в формате HTML может быть записана в следующем виде:
"элемент" := <"имя элемента" "список атрибутов">, содержание элемента </"имя элемента">,
Конструкция перед содержанием элемента называется тагом начала документа, а конструкция, расположенная после содержания элемента, -таг конца элемента.
Структура гипертекстовой сети задается гипертекстовыми ссылками. Гипертекстовая ссылка - это адрес другого HTML документа, который тематически, логически или каким-либо другим способом связан с документом, в котором ссылка определена.
Для записи гипертекстовых ссылок в системе WWW была разработана специальная форма, которая называется Universe Resource Locator. Типичным примером использования этой записи можно считать следующую запись:
Этот текст содержит
<A HREF="http://polyn.net.kiae.su/altai/index.html">,гипертекстовую ссылку</A>,.
Здесь элемент "A", который в HTML называют якорем (anchor), использует атрибут "HREF", который обозначает гипертекстовую ссылку (Hypertext REFerence), для записи этой ссылки в форме URL. Данная ссылка указывает на документ с именем "index.html" в директории "altai" на сервере "polyn.net.kiae.su", доступ к которому осуществляется по протоколу "http".
Гипертекстовые ссылки в HTML делятся на два класса: контекстные ссылки и общие. Контекстные ссылки вмонтированы в тело документа, как это было продемонстрировано в предыдущем примере, в то время как общие ссылки связаны со всем документом в целом и могут быть использованы при просмотре любого фрагмента документа. Оба класса ссылок присутствуют в стандарте языка с самого его рождения, однако, первоначально наибольшей популярностью пользовались контекстные ссылки. Эта популярность привела к тому, что механизм использования общих ссылок практически полностью "атрофировался". Однако по мере стандартизации интерфейса пользователя и стилей представления информации, разработчики языка снова вернулись к общим ссылкам и стремятся приспособить их к задачам управления этим интерфейсом.
Структура HTML документа позволяет использовать вложенные друг в друга элементы. Собственно, сам документ - это один большой элемент с именем "HTML":
<HTML>, Содержание документа </HTML>,
Сам элемент HTML или гипертекстовый документ состоит из двух частей: заголовка документа (HEAD) и тела документа (BODY):
<HTML>,
<HEAD>,
Содержание заголовка
</HEAD>,
<BODY>,
Содержание тела документа
</BODY>,
</HTML>,
Теоретически обсуждать язык разметки всегда очень трудно, поэтому приведем просто пример документа на HTML и обсудим на нем особенности языка:
<HTML>,
<HEAD>,
<TITLE>,Это пример документа на языке HTML.</TITLE>,
<BASE HREF="http://144.206.192.4/html30/">,
<!-- Author: Pavel Khramtsov -->,
<!-- Date: 09.08.95 -->,
</HEAD>,
<BODY BACKGROUND="back.gif">,
............ тело документа .............
</BODY>,
</HTML>,
Все что расположено между <HTML>, и </HTML>, - это документ. Содержание элемента HEAD определяет заголовок документа, который состоит из двух элементов: TITLE и BASE. Вслед за заголовком начинается тело документа, которое содержит в своих первых строках некоторую вводную информацию и содержание документа, оформленное в виде списка.
Каждый документ в системе World Wide Web имеет свое имя, которое указывается в элементе TITLE заголовка документа. Его мы видим в первой строке интерфейса. Вслед за TITLE в заголовке указан элемент BASE. Этот элемент не отображается, однако содержание его атрибута используется при формировании гипертекстовых ссылок. За заглавием следует тело документа, заключенное в таги <BODY>,.....</BODY>,. Приведем простой пример тела документа.
<BODY>,
<H1>,Простой пример HTML документа.</H1>,
<HR>,
Данный пример показывает простейшие способы представления информации на языке HTML:
<UL>, <LI>, <A HREF="#first">,Разбиение текста на параграфы</A>,
<LI>, <A HREF="#second">,Выделение заголовков</A>,
<LI>, <A HREF="#list">,Создание списка</A>,
<LI>, <A HREF="#graph">,Встроенную графику</A>,
</UL>,
Каждая из позиций приведенного выше списка является гипертекстовой ссылкой на раздел данного примера.
............
</BODY>,
Первым Элементом тела документа является его название, которое задано заглавием первого уровня - H1. Обычно, для отображения таких заглавий используют самый крупный шрифт. Вслед за заглавием идет список примеров, который оформлен как ненумерованный список UL. Выделение элементов списка синим цветом показывает, что это гипертекстовые ссылки. которые записаны в виде тагов вида:
<A HREF="#list">,Создание списка</A>,
Решетка перед словом "list" означает, что это ссылка на метку внутри документа, которая определена как:
<A NAME="list">,
При выборе гипертекстовой ссылки происходит переход на указанную в ссылке метку.
Начало нового параграфа определяется тагом <P>,. Таг конца параграфа не требуется, т.к. при вводе тага <P>, старый параграф кончается, а новый начинается. Конец параграфа определяется и рядом других тагов. Параграф заканчивается, если начинается список например. Выделение заглавий осуществляется тагами заглавий разного уровня. В данном примере все разделы документа выделены как заглавия второго уровня:
<H2>,Выделение заголовков</H2>,
Следует обратить внимание еще на два тага: <HR>, и <BR>,. Первый вызывает подведение сплошной черты под текстом на всю ширину рабочей области интерфейса, а второй вызывает принудительный перевод строки. В принципе, программа интерфейса пользователя автоматически вписывает текст в окно рабочей области интерфейса, поэтому все концы строк в исходных файлах игнорируются. Но часто бывает полезно перевести строку по месту. для этой цели и используется таг <BR>,.
Нумерованный список начинается с тага <OL>, и заканчивается тагом </OL>,. От ненумерованного он отличается тем, что перед каждым элементом списка проставляется номер по порядку. В языке существует еще несколько видов списков.
Встроенный графический образ монтируется в текст при помощи тага <IMG ...>,. Программа интерпретации языка сначала запрашивает собственно текст документа у сервера гипертекстовой базы данных, а за тем по мере просмотра графические образы, которые должны быть подготовлены в форматах GIF или JPEG. Первый формат более предпочтителен.
В HTML 3.0 для отображения графики, обтекаемой текстом стал применяться другой элемент - FIG. Его преимущество перед IMG заключается в том, что он разрешает обтекание картинки текстом и создание в тексте документа на базе графического образа стека графических ссылок. Следует заметить, что Netscape Extensions для обтекания графики текстом применяется контейнер IMG с атрибутом align, которому можно присвоить значения right или left. Графика в этом случае будет придвинута к соответствующему краю страницы, и текст ее будет обтекать также как и в случае контейнера FIG.
Однако, HTML позволяет не только отображать информацию и управлять навигацией по гипертекстовым базам данных, но создавать интерфейсы пользователя для доступа к другим программам. Для этой цели в языке предусмотрен механизм форм. Форма - это набор полей документа, в который пользователь может вводить информацию и затем передавать ее через сервер WWW удаленной программе. Для описания формы в языке зарезервированы конструкции типа:
<FORM METHOD=POST ACTION=http://polyn.net.kiae.su/cgi-bin/test>,
Type yourinformation here: <INPUT NAME="INPUT" VALUE="none" TYPE="text">,
Select from list:
<SELECT NAME="menu">,
<OPTION>,novice
<OPTION>,expert
<OPTION>,wizard
</SELECT>,
<HR>,
<INPUT NAME="SUBMIT" TYPE="submit" VALUE="Submit">,
</FORM>,
В примере данные, введенные в эту форму будут переданы программе test(атрибут ACTION). В поле с именем INPUT можно ввести текст до 1024 символов (в старых версиях программ-интерфейсов до 128 символов) и выбрать из меню одну из альтернатив. Поле с именем SUBMIT определяет кнопку, при нажатии на которую данные отправляются в сеть.
Как уже упоминалось выше на сегодняшний день существует два законченных стандарта языка HTML: HTML 1.0 и HTML 2.0. Для дальнейшего развития этого языка было предложено несколько путей. Первый из них - это HTML+, который является базой для следующей версии HTML - HTML 3.0. Именно в этом варианте языка были определены таблицы, стили и математические формулы. Концептуальным интерфейсом для HTML 3.0 является программа Arena, главное назначение которой - продемонстрировать возможности HTML 3.0. Другим направлением развития HTML стали, так называемы Netscape Extensions. Первоначально эта спецификация развивала синтаксис HTML 2.0 в сторону более выразительных средств представления документов (возможность смены фона, выравнивание текста, обтекание графики текстом и т.п.). Netscape Extensions были предложены компанией Netscape Communication и реализованы в программе Netscape Navigator версии 1.1 и старше. Фактически, если HTML+ был направлен на расширение HTML в сторону реализации публикаций научно технического характера, то Netscape Extensions развивали HTML в сторону рекламно-издательской деятельности. Это направление Netscape Communication продолжила и в следующей версии Navigator. В Navigator 2.0 и Navigator Gold 2.0 были добавлены две принципиально новые возможности разработки Web-страниц: фреймы и JavaScript. Заявлена также и поддержка Java, но об этом языке как о концептуальном развитии технологии лучше говорить в контексте другой программы - HotJava компании Sun Microsystems. Не отстает на поприще развития стандартов Web и Microsoft. В настоящее время для пользователей Internet доступны свободнораспростроняемые сервер и интерфейс Internet Explorer. Важным здесь является тот факт, что Microsoft не просто путается поддерживать то: что предлагают другие: но и сама предлагает новые расширения языка. Они касаются главным образом возможностей разработки мультимедийных страниц и являются в некотором смысле альтернативой тому, что предлагают разработчики Java и JavaScript. Таким образом в настоящее время следует выделить следующие основные направления развития технологии Web: HTML 3.0 (HTML+), HTML 2.0 Netscape Extensions, JavaScript, Java, Microsoft Extensions.
На самом деле, чуть в стороне от основных направлений развития Web-технологии стоит еще одна ветвь исследований - создание трехмерных страниц, ярким представителем которой является язык моделирования виртуальной реальности VRML, который предложен компанией Silicon, но во-первых ни один из наиболее популярных с Сети интерфейсов его не поддерживает (загружается специальная программа), а во-вторых работать на нем широкие массы пользователей Internet вряд ли будут - все-таки это скорее средство для профессионалов, чем для простых пользователей.
Фреймы - это долгожданная многооконность, которая позволяет решить сразу множество проблем связанных с разработкой документов. В первую очередь возможность одновременной работы с текстом и меню, текстовым меню и графикой. Параллельно решаются проблема BANNER, для которой в HTML+ предлагался новый тег. Фрейм позволяет использовать часто встречающиеся фрагменты текста, например, постоянную заставку в качестве отдельного фрейма. Многие пользователи Internet наверняка встречались с этим механизмом при использовании поисковой службы InfoSeek (http://www.infoseek.com/). Если раньше нужно было постоянно вставлять в текст либо готовые части страницы, которые появляются в начале и конце каждого документа или использовать server site includes, то теперь это можно делать при помощи фреймов. Вообще, на мой взгляд, фреймы очень органичное решение, т.к. документ с фреймами является просто суперпозицией простых HTML-документов.
Дополнительные окна - это тесно связанный с фреймами механизм. Но если страница с фреймами делит рабочую область Navigator на несколько частей, не выходя за пределы окна программы, то в случае дополнительного окна разработчик страницы Web имеет возможность открыть новое окно Navigator и тем самым предать как бы новое измерение просмотру. Такое направление интерфейса лежит в русле разработки много оконных интерфейсов гипертекстовых систем, о которых в академических кругах говорят уже лет десять, но к единой модели такого интерфейса так до сих пор еще и не пришли. Очевидно одно, что это позволяет оставлять видимые закладки при проходе по гипертекстовой сети по инициативе разработчика страниц, что является в некоторых случаях достаточно полезным решением, которое расширяет привычную двухуровневую схему просмотра, когда в отдельное окно помещали либо графику, либо файл специального формата.
Динамическое обновление документов - это возможность построения самопросматривающихся страниц и, если позволяет скорость линии связи примитивной мультипликации. Если разработчики Arena только обещают использование заголовка HTML-документа для управления просмотром последнего, то в Netscape это уже делается. В данном случае используется тег META с атрибутом HTTP-EQUIV, в котором и указывается скважность обращения Navigator к серверу за обновленным документом, которым может быть либо новая копия просматриваемого документа, либо другой документ.
JavaScript - это еще одно средство создания "оживших" страниц Web. Собственно, - это объектно-ориентированный язык программирования, привязанный к Navigator, отдельные компоненты которого и являются объектами это языка. Часто пишут, что Java и JavaScript - близнецы-братья. Может быть они и братья, но отнюдь не близнецы. Во-первых для JavaScript не требуется специального компилятора и скрипт размещается прямо в теле документа. Его интерпретирует непосредственно Navigator. Конечно возможности программирования анимации в JavaScript очень ограничены. Можно организовать бегущую строку, идущие часы, меняющиеся картинки, но не более. Главным на мой взгляд достоинством JavaScript является организация всего этого без использования сервера. Navigator c JavaScript позволяет организовать многооконную локальную гипертекстовую систему с контекстной справочной системой, что раньше требовало достаточно больших усилий по программирования. Но конечно, это не дается просто так, за все приходится платить. Начав опыты со скриптами на Windows 3.x, я очень скоро убедился, что "ожившие" страницы требуют очень много ресурсов, а иногда могут даже привести к "зависанию" системы. Из разъяснений, полученных из comp.lang.javascript, javascript@oberon.edu, а также аналогичного списка Netscape следовало примерно следующее: "Не валяй дурака и ходи как все по камешкам - ставь многопотоковые Windows 95, а лучше NT и не морочь занятым людям головы." А если серьезно, то Navigator для Windows 3.1х является лишь калькой 32-х разрядных версий этой программы и, так как в 16-разрядной ОС нет реальной вытесняющей многозадачности, то при использовании отложенных вызовов функций в цикле по setTimeout происходит просто "отъедание" ресурсов, которые естественно небезграничны. Замечание по поводу Windows`95 или NT вызвано тем обстоятельством, что вообще говоря прикладная задача в Windows`95 может писать информацию куда угодно, в том числе и в область операционной системы, что, как показала практика использования Navigator приводит иногда к зависанию системы. В заключении следует отметить, что возможностей "уронить" чужую машину при использовании JavaScript сколь угодно много и Navigator еще надо доводить и доводить на предмет тестирования кода на запрещенные конструкции в скриптах.
Много говорить о Java в контексте HTML собственно не приходится. Мобильный код Java заключается внутри контейнера APPLET и выполняется интерпретатором после загрузки документа. Java позволяет реализовать сложные мультимедийные страницы, но к языку разметки это имеет довольно косвенное отношение.
В рамках короткого доклада невозможно подробно обсудить все возможности языка HTML. К настоящему времени по своим выразительным возможностям HTML вместе со своими расширениями достиг уровня языков управления интерфейсом локальных гипертекстовых информационных систем. Основная задача разработчиков Web-страниц состоит в том, чтобы освоить эти возможности, и тогда станет понятно куда можно развиваться дальше.