Рекомендация W3C 18 декабря 1997
Данная спецификация определяет HyperText Markup Language (Язык разметки гипертекстов - HTML) версии 4.0 - язык, который используется для публикаций в World Wide Web. Кроме текстовых, мультимедийных возможностей и гиперссылок, присутствующих в предыдущих версиях языка HTML, HTML 4.0 поддерживает новые мультимедийные возможности, скрипты, таблицы стилей, улучшенную печать и более доступные людям с физическими недостатками документы. В версии HTML 4.0 также успешно реализована интернационализация документов, целью которой является сделать Паутину действительно всемирной.
HTML 4.0 - это приложение SGML, соответствующее Международному стандарту ISO 8879 -- Standard Generalized Markup Language [ISO8879].
Данный документ просматривался членами W3C и другими заинтересованными лицами и организациями, и одобрен Директором в качестве Рекомендации W3C. Это постоянный документ; он может использоваться в качестве справочника или приводиться в других документах в качестве нормативного. Ролью W3C в этой рекомендации является привлечение внимания к этой спецификации и расширение сферы ее применения. Это расширяет функциональность и возможность взаимодействия в Web.
W3C рекомендует пользователям и авторам (в особенности средствам создания документов) использовать версию HTML 4.0 вместо HTML 3.2 (см. [HTML32]). Для обеспечения совместимости с предыдущими версиями W3C также рекомендует для средств интерпретации HTML 4.0 поддержку HTML 3.2 и HTML 2.0.
Список текущих Рекомендаций W3C и других технических документов можно найти по адресу http://www.w3.org/TR.
Дискуссия относительно функций HTML происходит по адресу www-html@w3.org.
Рекомендацию W3C HTML 4.0 можно также получить в следующих форматах:
В случае расхождений электронной и печатной форм спецификации следует использовать электронную версию.
Единственной нормативной версией является английская версия данного документа. Однако переводы этого документа можно найти по адресу http://www.w3.org/MarkUp/html40-updates/translations.html.
Список обнаруженных в спецификации ошибок находится по адресу http://www.w3.org/MarkUp/html40-updates/html40-errata.html
Об ошибках, найденных в этом документе, сообщайте по адресу www-html-editor@w3.org.
Рекомендация W3C 18 декабря 1997
Данная спецификация определяет HyperText Markup Language (Язык разметки гипертекстов - HTML) версии 4.0 - язык, который используется для публикаций в World Wide Web. Кроме текстовых, мультимедийных возможностей и гиперссылок, присутствующих в предыдущих версиях языка HTML, HTML 4.0 поддерживает новые мультимедийные возможности, скрипты, таблицы стилей, улучшенную печать и более доступные людям с физическими недостатками документы. В версии HTML 4.0 также успешно реализована интернационализация документов, целью которой является сделать Паутину действительно всемирной.
HTML 4.0 - это приложение SGML, соответствующее Международному стандарту ISO 8879 -- Standard Generalized Markup Language [ISO8879].
Данный документ просматривался членами W3C и другими заинтересованными лицами и организациями, и одобрен Директором в качестве Рекомендации W3C. Это постоянный документ; он может использоваться в качестве справочника или приводиться в других документах в качестве нормативного. Ролью W3C в этой рекомендации является привлечение внимания к этой спецификации и расширение сферы ее применения. Это расширяет функциональность и возможность взаимодействия в Web.
W3C рекомендует пользователям и авторам (в особенности средствам создания документов) использовать версию HTML 4.0 вместо HTML 3.2 (см. [HTML32]). Для обеспечения совместимости с предыдущими версиями W3C также рекомендует для средств интерпретации HTML 4.0 поддержку HTML 3.2 и HTML 2.0.
Список текущих Рекомендаций W3C и других технических документов можно найти по адресу http://www.w3.org/TR.
Дискуссия относительно функций HTML происходит по адресу www-html@w3.org.
Рекомендацию W3C HTML 4.0 можно также получить в следующих форматах:
В случае расхождений электронной и печатной форм спецификации следует использовать электронную версию.
Единственной нормативной версией является английская версия данного документа. Однако переводы этого документа можно найти по адресу http://www.w3.org/MarkUp/html40-updates/translations.html.
Список обнаруженных в спецификации ошибок находится по адресу http://www.w3.org/MarkUp/html40-updates/html40-errata.html
Об ошибках, найденных в этом документе, сообщайте по адресу www-html-editor@w3.org.
Содержание
Спецификация состоит из следующих разделов:
Краткое руководство по SGML дает читателям понимание отношения языка HTML к языку SGML и предоставляет информацию о чтении Определений типов документов HTML (Document Type Definition - DTD).
Этот документ упорядочен по разделам, а не по грамматике языка HTML. Разделы сгруппированы в три категории: структура, представление и интерактивность. Хотя конструкции языка HTML трудно разделить на эти три категории, такая модель отражает опыт Рабочей группы HTML, говорящий о том, что разделение структуры документа и его представления обеспечивает большую эффективность документов и лучшие возможности поддержки.
Информация о языке включает следующую:
Какие символы могут отображаться в документе HTML.
Основные типы данных документа HTML.
Элементы, управляющие структурой документа HTML, включая текст, списки, таблицы, ссылки и объекты, изображения и апплеты.
Элементы, управляющие представлением документа в формате HTML, включая таблицы стилей, шрифты, цвета, горизонтальные разделители и другое визуальное представление, а также фреймы (кадры) для многооконного представления.
Элементы, управляющие интерактивностью документа HTML, включая формы для ввода данных пользователя и скрипты для активных документов.
Формальное SGML-определение HTML:
Этот документ написан читателями с двумя типами мышления: авторами и разработчиками. Мы надеемся, что спецификация предоставит авторам средства, необходимые им для создания эффективных, привлекательных и доступных документов и не обременяющие их подробностями применения HTML. Разработчики, однако, должны найти здесь всю необходимую для разработки соответствующих средств информацию.
Эту спецификацию можно использовать несколькими способами:
Прочесть от начала до конца. Эта спецификация начинается с общего представления языка HTML, а количество технических подробностей постепенно повышается.
На первых страницах трех разделов руководства к исходному оглавлению добавляется более подробная информация о каждом разделе.
Названия элементов представляются символами в верхнем регистре (например, BODY). Названия атрибутов представляются символами в нижнем регистре (например, lang, onsubmit). Помните, что в HTML имена элементов и атрибутов не учитывают регистр; это используется для более легкого чтения.
В названиях элементов и атрибутов в этом документе используется разметка, поэтому агентами пользователей они могут генерироваться особым образом.
В каждом определении атрибута устанавливается тип его значения. Если имеется несколько возможных значений, приводится список значений, разделенных вертикальной чертой (|).
После информации о типе в каждом определении атрибута в квадратных скобках ("[]") указывается, учитывается ли в значениях регистр. Подробнее см. раздел информации о регистре.
Информативные замечания выделены, чтобы отличаться от остального текста и могут генерироваться агентами пользователей особым образом.
Все примеры, иллюстрирующие нежелательное использование, помечены как "ПРИМЕР НЕЖЕЛАТЕЛЬНОГО ИСПОЛЬЗОВАНИЯ". В примеры нежелательного использования входят также рекомендуемые альтернативные решения. Все примеры, иллюстрирующие недопустимое использование, помечены как "ПРИМЕР НЕДОПУСТИМОГО ИСПОЛЬЗОВАНИЯ".
В примерах и замечаниях используется разметка, поэтому некоторыми агентами пользователей они могут генерироваться особым образом.
Спасибо всем, кто помог в создании рабочих черновых вариантов, приведших к спецификации HTML 4.0, и всем отправившим предложения и исправления.
Большое спасибо группе Web Accessibility Initiative (WAI HC) за работу по улучшению доступности HTML и Т.В. Раман (компания Adobe) за разработку доступных форм.
Авторы этой спецификации, члены Рабочей группы HTML W3C , заслуживают аплодисментов за тщательную проверку этого документа, конструктивные комментарии и труд: Джон Д. Бургер (MITRE), Стив Байрн (JavaSoft), Мартин Дж. Дюрст (Цюрихский университет), Дэниел Глазман (ElectricitÉ de France), Скотт Айзакс (Microsoft), Мюрей Малони (GRIF), Стивен Пембертон (CWI), Роберт Пернетт (Lotus), Яред Соренсен (Novell), Пауэлл Смит (IBM), Роберт Стиван (HP), Эд Тикот (Microsoft), Джеффри Веен (HotWired), Майк Векслер (Adobe), Миша Вольф (Reuters) и Лорен Вуд (SoftQuad).
Спасибо Дену Коннолли (W3C) за работу редактора и тщательное руководство в качестве председателя Рабочей группы HTML. Спасибо Салли Худаири (W3C) за ее работу над пресс-релизами.
Спасибо Дэвиду М. Абрахамсону и Роджеру Прайсу за внимательное чтение и конструктивные комментарии.
Спасибо Яну Кэррману, автору html2ps за огромную помощь в создании версии спецификации в формате Postscript.
Особую помощь W3C в София-антиполис принесли Дженет Бертот, Берт Бос, Стефан Боера, Даниель Дардельер, Ив Лафон, Хокон Ли, Крис Лилли и Кола Нахабу (Bull).
И наконец, спасибо Тиму Бернерс-Ли, без которого все это было бы невозможно.
Copyright © 1997 World Wide Web Consortium, (Массачусеттский технологический институт, Национальный институт исследований в области информатики и автоматизации, Университет Keio). Все права защищены.
Документы, находящиеся на сервере W3C, предоставляются обладателями авторских прав в соответствии со следующей лицензией. Получая, используя и/или копируя этот документ или документ W3C, из которого имеется ссылка на это заявление, Вы признаете, что прочли и поняли следующие условия и обязуетесь их выполнять:
Разрешение на использование, копирование и распространение содержимого этого документа или документа W3C, из которого имеется ссылка на это заявление, с помощью любых средств, с любыми целями и без отчисления авторского гонорара дается при условии, что Вы включите во ВСЕ копии этого документа или его частей следующую информацию:
Если позволяет пространство, следует включить полный текст следующего ЗАМЕЧАНИЯ. Кроме того, в любое программное обеспечение, документы и пр., созданные вследствие применения содержимого этого документа или любой его части, должна быть добавлена благодарность владельцам авторского права.
Данная лицензия не дает никаких прав изменения данного документа или создания документов, производных от него.
ДАННЫЙ ДОКУМЕНТ ПРЕДОСТАВЛЯЕТСЯ "КАК ЕСТЬ"; ОБЛАДАТЕЛИ АВТОРСКОГО ПРАВА НЕ ДАЮТ НИКАКИХ ЯВНЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ ГАРАНТИЙ, ВКЛЮЧАЯ ГАРАНТИИ КОММЕРЧЕСКОЙ ВЫГОДЫ, СООТВЕТСТВИЯ ОПРЕДЕЛЕННОЙ ЦЕЛИ, НЕНАРУШЕНИЯ АВТОРСКОГО ПРАВА ИЛИ ОБЛАДАНИЯ ИМ, НО НЕ ОГРАНИЧИВАЯСЬ ТАКОВЫМИ; ТО ЕСТЬ ОБЛАДАТЕЛИ АВТОРСКОГО ПРАВА НЕ ДАЮТ ГАРАНТИЙ ТОГО, ЧТО СОДЕРЖИМОЕ ЭТОГО ДОКУМЕНТА СООТВЕТСТВУЕТ КАКИМ-ЛИБО ЦЕЛЯМ И ТОГО, ЧТО ПРИМЕНЕНИЕ СОДЕРЖИМОГО ЭТОГО ДОКУМЕНТА НЕ НАРУШИТ АВТОРСКИХ ПРАВ, ТОРГОВОЙ МАРКИ, ПАТЕНТА ИЛИ ДРУГИХ ПРАВ ТРЕТЬЕГО ЛИЦА ИЛИ ОРГАНИЗАЦИИ.
ОБЛАДАТЕЛИ АВТОРСКОГО ПРАВА НЕ НЕСУТ ОТВЕТСТВЕННОСТИ ЗА ЛЮБОЙ ПРЯМОЙ, КОСВЕННЫЙ, СПЕЦИАЛЬНЫЙ ИЛИ ЗАКОНОМЕРНЫЙ УЩЕРБ, ПОНЕСЕННЫЙ В РЕЗУЛЬТАТЕ ИСПОЛЬЗОВАНИЯ ЭТОГО ДОКУМЕНТА ИЛИ ПРИМЕНЕНИЯ ЕГО СОДЕРЖИМОГО.
Имя и торговые марки обладателей авторского права НЕ могут использоваться в рекламе, имеющей отношение к данному документу или его содержимому без особого письменного разрешения. Авторское право на этот документ навсегда остается за его обладателями.
Содержание
В этом разделе мы начинаем спецификацию HTML 4.0, начиная с договора между авторами, документами, пользователями и агентами пользователей.
Ключевые слова "НУЖНО", "НЕ НУЖНО", "НЕОБХОДИМО", "СЛЕДУЕТ", "НЕ СЛЕДУЕТ", "РЕКОМЕНДУЕТСЯ", "ВОЗМОЖНО" и "НЕОБЯЗАТЕЛЬНО" в этом документе следует интерпретировать, как описано в [RFC2119]. Однако для простоты чтения эти слова в данной спецификации напечатаны не в верхнем регистре.
Иногда авторы этой спецификации дают рекомендации для пользователей и их агентов. Эти рекомендации не являются нормативными и соответствие этой спецификации не зависит от их реализации. Эти рекомендации содержатся в выражениях "Мы рекомендуем...", "Эта спецификация рекомендует..." и подобных им.
Мы рекомендуем авторам создавать документы, соответствующие строгому DTD, а не другим DTD, определяемым этой спецификацией. Подробнее о DTD, определенных в HTML 4.0, см. в разделе информация о версии.
Соответствующий агент пользователя для HTML 4.0 - это агент, отвечающий обязательным условиям ("должно") этой спецификации, включая следующие:
Однако для получения информации о рекомендуемой обработке ошибок обратитесь к информации о недопустимых документах.
Агентам пользователя следует по-прежнему поддерживать нежелательные элементы для обеспечения совместимости с предыдущими версиями.
В определениях элементов и атрибутов явно указано, если они нежелательны.
В этой спецификации содержатся примеры, показывающие, как можно избежать использования нежелательных элементов. В большинстве случаев это зависит от поддержки агентом пользователя таблиц стилей. В общем случае, авторам следует использовать таблицы стилей для получения стилистических эффектов и эффектов форматирования вместо атрибутов представления HTML. Атрибуты представления HTML нежелательны, когда существует альтернатива таблиц стилей (см., например, [CSS1]).
HTML 4.0 - это применение SGML, соответствующее международному стандарту ISO 8879 -- Standard Generalized Markup Language SGML (определенному в [ISO8879]).
Примеры в тексте соответствуют строгим определениям типа документа, если пример не относится к элементам или атрибутам, определенным переходным определением типа документа или определением типа документа с кадрами. Для краткости большая часть примеров в данной спецификации не начинается с объявления типа документа, обязательного для начала любого документа в формате HTML.
Фрагменты DTD в определениях элементов приводятся из строгих определений типа документа, кроме элементов, относящихся к кадрам.
Подробную информацию об использовании строгих, переходных DTD или DTD с кадрами см. в разделе информация о версии HTML.
Комментарии в HTML 4.0 DTD не имеют нормативного значения; они используются только для информации.
Агенты пользователя не должны генерировать инструкции обработки SGML (например, <?full volume>) или комментарии. Подробнее об этой и других возможностях SGML, которые допустимы в HTML, но не поддерживаются широко агентами пользователя, обратитесь к разделу возможности SGML с ограниченной поддержкой.
Документы HTML отправляются через Интернет в виде последовательности байтов, сопровождаемой информацией о кодировке (описанной в разделе кодировки символов). Структура передачи, называемая message entity, определяется [RFC2045]) и [RFC2068]. message entity с типом содержимого "text/html" представляет документ в формате HTML.
Тип содержимого для документов HTML определяется следующим образом:
Необязательный параметр "charset" обозначает кодировку символов, используемую для представления документа HTML в качестве последовательности байт. Допустимые значения этого параметра определены в разделе кодировки символов. Хотя этот параметр необязателен, рекомендуется всегда указывать его.
Содержание
В этой главе обсуждается, как документы в формате HTML представляются на компьютере и в Интернет.
Раздел набор символов документа относится к вопросу об абстрактных символах, которые могут входить в состав документа в формате HTML. В число этих символов входят латинская буква "A", кириллическая буква "I", китайский иероглиф "вода" и т.д.
Раздел кодировки символов относится к вопросу о том, как эти символы могут быть представлены в файле или во время передачи по Интернет. Поскольку некоторые кодировки могут прямо не представлять все символы, которые автор захочет включить в документ, HTML предлагает другие механизмы, называемые ссылками на символы, для ссылки на любой символ.
Поскольку в человеческих языках имеется огромное количество символов и множество способов их представления, следует позаботиться о том, чтобы эти документы могли понимать агенты пользователей во всем мире.
Для обеспечения возможность взаимодействия сетей SGML требует от каждого приложения (включая HTML) указания набора символов документа. Документ включает:
Каждый документ SGML (включая каждый документ HTML) - это последовательность символов из репертуара. Компьютерные системы идентифицируют каждый символ по его коду; например, в наборе символов ASCII коды 65, 66 и 67 означают символы 'A', 'B' и 'C' соответственно.
Набора символов ASCII недостаточно для такой глобальной информационной системы, как Web, поэтому HTML использует более полный набор символов, называемый Универсальным набором символов (Universal Character Set - UCS), и определенный в [ISO10646]. Этот стандарт определяет репертуар тысяч символов, используемых во всем мире.
Набор символов, определенный в [ISO10646] - это посимвольный эквивалент Unicode 2.0 ([UNICODE]). Оба эти стандарта время от времени обновляются, пополняются новыми символами, об изменениях следует узнавать на соответствующих серверах Web. В этой спецификации ISO/IEC-10646 или Unicode означают этот самый набор символов. Однако в спецификации HTML Unicode также упоминается при обсуждении других вопросов, таких как алгоритм двунаправленного текста.
Набора символов документа, однако, недостаточно, чтобы агенты пользователей могли корректно интерпретировать документы HTML при типичном обмене - закодированные как последовательность байт в файле или во время передачи по сети. Агенты пользователя должны также знать кодировки символов, которые использовались для преобразования потока символов документа в поток байт.
Кодировки символов в этой спецификации имеют другие названия в других спецификациях (что может вызвать некоторую путаницу). Однако это понятие в Интернет означает примерно одно и то же. Одно и то же имя -- "charset - набор символов" - используется в заголовках протоколов, атрибутах и параметрах, ссылающихся на символы и использующих одни и те же значения из [IANA] реестра (полный список см. в разделе [CHARSETS]).
Параметр "charset" идентифицирует кодировку символов, которая является способом преобразования последовательности байт в последовательность символов. Это преобразование естественно вписывается в схему деятельности Web: серверы отправляют документы HTML агентам пользователей в виде потока байт; агенты пользователей интерпретируют их как последовательность символов. Способы преобразования могут меняться от простого соответствия один к одному до сложных схем или алгоритмов переключения.
Простой техники кодировки "один байт - один символ" недостаточно для текстовых строк с таким широким репертуаром символов, как [ISO10646]. Кроме кодировок всего набора символов (например, UCS-4), имеются некоторые другие кодировки частей [ISO10646].
Средства разработки (например, текстовые редакторы) могут кодировать документы HTML в кодировках по своему выбору, и этот выбор существенно зависит от соглашений, используемых системным программным обеспечением. Эти средства могут использовать любую удобную кодировку, включающую большинство символов в документе, при условии, что кодировка корректно помечена. Некоторые символы, не включенные в эту кодировку, можно представить с помощью ссылок на символы. Это всегда относится к набору символов документа, а не к кодировке символов.
Серверы и прокси могут изменять кодировку символов (что называется транскодированием) на лету для выполнения запросов агентов пользователей (см. раздел 14.2 [RFC2068], заголовок запроса HTTP "Accept-Charset"). Серверы и прокси не должны обслуживать документ в кодировке, включающей весь набор символов документа.
Широко используемые в Web кодировки - ISO-8859-1 (также называется "Latin-1"; используется для большинства западноевропейских языков), ISO-8859-5 (с поддержкой кириллицы), SHIFT_JIS (японская кодировка), EUC-JP (еще одна японская кодировка) и UTF-8 (вариант кодировки ISO 10646, использующий разное число байт для разных символов). Названия кодировок символов не учитывают регистр, так что, например, "SHIFT_JIS", "Shift_JIS" и "shift_jis" эквивалентны.
Эта спецификация не определяет, какие кодировки символов должен поддерживать агент пользователя.
Соответствующие агенты пользователей должны корректно отображать в Unicode все символы в любых кодировках, которые они могут распознавать.
Когда текст HTML передается в UTF-16 (charset=UTF-16), текстовые данные должны передаваться в сетевом порядке байт ("big-endian", байт высшего порядка - первый) в соответствии с [ISO10646], раздел 6.3 и [UNICODE], положение C3, страница 3-1.
Более того, чтобы повысить вероятность правильной интерпретации, рекомендуется передавать документы UTF-16, всегда начиная с символа НЕРАЗДЕЛЯЮЩИЙ ПРОБЕЛ НУЛЕВОЙ ШИРИНЫ (шестнадцатеричный код FEFF, также называется Меткой порядка байтов (Byte Order Mark - BOM)), который при обращении байт становится шестнадцатеричным FFFE, никогда не назначаемым символом. Таким образом, агент пользователя, получивший шестнадцатеричный код FFFE в качестве первых байтов текста будет знать, что в остальном тексте байты нужно обратить.
Не следует использовать формат трансформации UTF-1[ISO10646] (зарегистрированный IANA как ISO-10646-UTF-1). Информацию об ISO 8859-8 и двунаправленном алгоритме см. в разделе двунаправленности и кодировки символов.
Как сервер определяет, какая кодировка символов применяется в документе? Некоторые серверы проверяют первые несколько байт документа или сверяются с базой данных известных файлов и кодировок. Многие современные серверы Web предоставляют администраторам больше возможностей управления конфигурацией набора символов, чем старые серверы. Администраторы серверов Web должны при возможности использовать следующие механизмы для отправки параметра "charset", но должны позаботиться о том, чтобы не установить для документов ошибочное значение параметра "charset".
Как агент пользователя узнает, какая использовалась кодировка символов? Эту информацию предоставляет сервер. Лучшим способом проинформировать агента пользователя о кодировке символов документа - использовать параметр "charset" в поле заголовка "Content-Type" протокола HTTP ([RFC2068], разделы 3.4 и 14.18) Например, следующий заголовок HTTP объявляет, что используется кодировка EUC-JP:
Content-Type: text/html; charset=EUC-JP
Определение text/html см. в разделе соответствие.
Протокол HTTP ([RFC2068], раздел 3.7.1) считает ISO-8859-1 кодировкой символов по умолчанию, если параметр "charset" в поле заголовка "Content-Type" отсутствует. На практике эта рекомендация бесполезна, поскольку некоторые серверы не позволяют отправлять параметр "charset", а некоторые могут не быть сконфигурированы для отправки этого параметр. Поэтому агенты пользователей не должны предполагать никакого значения параметра "charset".
Для указания ограничений сервера или конфигурации документы HTML могут включать явную информацию о кодировке символов документа; для предоставления такой информации агентам пользователя может использоваться элемент META.
Например, чтобы указать, что кодировкой символов в текущем документе является "EUC-JP", включите следующее объявление META:
<META http-equiv="Content-Type" content="text/html; charset=EUC-JP">
Объявление META должно использоваться, только если кодировка символов упорядочена так, что символы ASCII стоят на своем месте (по крайней мере, при разборе элемента META). Объявления META должны быть в тексте как можно раньше в элементе HEAD.
В случаях, когда ни протокол HTTP, ни элемент META не предоставляют информации о кодировке документа, HTML предоставляет атрибут charset для некоторых элементов. Объединив все эти механизмы, автор может существенно повысить шансы на то, что, когда пользователь загружает ресурс, агент пользователя распознает кодировку символов.
Подводя итоги, соответствующие агенты пользователей при определении кодировки символов документа (от высшего приоритета к низшему) должны руководствоваться следующими источниками в соответствии с приоритетом:
Кроме этого списка приоритетов, агент пользователя может использовать эвристические установки и установки пользователя. Например, многие агенты пользователей используют эвристику для распознавания различных кодировок, используемых для японского языка. Агенты пользователей обычно имеют определяемую пользователем локальную кодировку по умолчанию, которую они используют, если нет указаний кодировки.
Агенты пользователей могут обеспечивать механизм, позволяющий пользователям изменять некорректную информацию о наборе символов. Однако если агент пользователя предлагает такой механизм, он должен предлагать его только для просмотра, а не для изменения, во избежание создания Web-страниц с некорректным параметром "charset".
Примечание. Если в каком-то приложении нужно использовать символы, не входящие в кодировку [ISO10646], этим символам должна быть назначена персональная зона во избежание конфликтов с настоящей или будущими версиями стандарта. Однако это не рекомендуется из соображений переносимости.
Данная кодировка символов может не содержать все символы из набора символов документа. Для таких кодировок или для таких конфигураций оборудования и программного обеспечения, не позволяющих пользователям вводить определенные символы, авторы могут использовать ссылки на символы SGML. Ссылки на символы - это независимый от кодировки механизм ввода любых символов.
Ссылки на символы в HTML могут принимать две формы:
Ссылки на символы в комментариях не имеют значения; они являются только данными комментариев.
Примечание. HTML обеспечивает другие способы представления символов, в частности, встроенные изображения.
Примечание. В SGML можно в некоторых случаях не использовать заключительный символ ";" после ссылки на символы (например, в символе переноса строки или непосредственно перед тэгом). В других обстоятельствах их нельзя удалять (например, в середине слова). Мы предлагаем использовать ";" всегда во избежание проблем с агентами пользователей, для которых этот символ обязателен.
Числовые ссылки на символы указывают код символа в наборе символов документа. Числовые ссылки на символы могут также принимать две формы:
Вот некоторые примеры числовых ссылок на символы:
Примечание. Хотя шестнадцатеричное представление не определено в [ISO8879], оно ожидается в новой версии, как описано в [WEBSGML]. Это соглашение особенно полезно, поскольку стандарты символов обычно используют шестнадцатеричные представления.
Чтобы дать авторам более инициативный способ использования символов, HTML предлагает набор character entity references. Комбинации ссылок на символы используют символические имена, так что авторам не придется запоминать коды. Например, комбинация å обозначает символ "a" нижнего регистра с кружком сверху; "å" легче запомнить, чем å.
HTML 4.0 не определяет character entity reference для каждого символа. Например, для кириллической буквы "I" нет character entity reference. См. полный список ссылок на символы, определенные в HTML 4.0.
Комбинации ссылок на символы учитывают регистр. Так, Å указывает на другой символ (A с кружком верхнего регистра), а не на å (a с кружком нижнего регистра).
Четыре ссылки нужно упомянуть специально, поскольку они часто используются для указания специальных символов:
Авторы, которые хотят поместить в текст символ "<", должны использовать ссылку "<" (десятичный код ASCII 60) во избежание возможной путаницы с началом тэга (открывающий разделитель начального тэга). Точно так же следует использовать ">" (десятичный код ASCII 62) вместо ">", чтобы избежать проблем со старыми версиями агентов пользователей, некорректно принимающих их за окончание тэга (закрывающий разделитель тэга).
Авторам следует использовать "&" (десятичный код ASCII 38) вместо "&" во избежание путаницы со ссылками на символы (открывающий разделитель entity reference). Авторам также следует использовать "&" в значениях атрибутов, поскольку ссылки на символы внутри значений атрибута CDATA разрешены.
Некоторые авторы используют character entity reference """ для кодирования экземпляров двойных кавычек ("), поскольку этот символ может использоваться для разделения значений атрибутов.
Возможно, агент пользователя не сможет отобразить все символы в документе, например, из-за отсутствия соответствующего шрифта или если символ имеет значение, которое не может быть выражено во внутренней кодировке агента пользователя и т.д.
Поскольку в этом случае есть несколько вариантов, этот документ не предписывает определенной тактики. В зависимости от применения непечатные символы могут также обрабатываться дополнительной системой отображения, а не самим приложением. В случае более сложного поведения, например, настроенного для определенного сценария или языка, рекомендуем следующее поведение для агентов пользователей:
Содержание
Содержание
В этом разделе спецификации описываются основные типы данных, которые могут быть содержимым элементов или значением атрибутов.
Вводную информацию о чтении HTML DTD см. раздел руководство по SGML.
Каждое определение атрибута включает информацию об учете регистра его значениями. Информация о регистре представляется следующими ключами:
Если значением атрибута является список, ключи применяются к каждому значению в списке, если не указано обратное.
В определении типа документа определяется синтаксис содержимого элемента HTML и значений атрибутов с использованием меток SGML (например, PCDATA, CDATA, NAME, ID и т.д.). Полные определения см. в [ISO8879]. Вот обобщенная информация о ключах:
Агенты пользователей могут игнорировать пробелы в начале и в конце значений атрибута CDATA (например, " myval " интерпретируется как "myval"). Авторы не должны объявлять значения атрибутов с пробелами в начала или в конце.
На некоторые атрибутов HTML 4.0 со значениями атрибутов CDATA спецификация налагает дополнительные ограничения на множество допустимых значений атрибутов, не выраженные в DTD.
Хотя элементы STYLE и SCRIPT используют CDATA для своей модели данных, для этих элементов агенты пользователей должны обрабатывать CDATA по-другому. Разметка и entities должны считаться текстом и передаваться в приложение как есть. Первое вхождение последовательности символов "</" (открывающий разделитель конечного тэга) считается концом содержимого элемента. В допустимых документах это будет конечный тэг элемента.
Ряд атрибутов ( %Text; в DTD) принимают текст, который предназначается для чтения людьми. Вводную информацию об атрибутах Вы можете посмотреть в обсуждении атрибутов.
В этой спецификации термин URI используется, как определено в [URI] (см. также [RFC1630]).
Помните, что URI включают URL (как определено в [RFC1738] и [RFC1808]).
Относительные URI разрешаются до полных URI с использованием основного URI. [RFC1808], раздел 3, где определен нормативный алгоритм этого процесса. Подробнее об основных URI см. в разделе основные URI в главе о ссылках.
URI представляются в DTD комбинацией символов %URI;.
URI вообще учитывают регистр. Могут быть URI, или части URI, в которых регистр не имеет значения (например, имена машин), но идентификация их может быть непроста. Пользователи должны всегда считать, что URI учитывают регистр (чтобы не ошибиться).
Информацию о символах, не входящих в набор ASCII, в значениях атрибутов URI см. в приложении.
Значение атрибута типа "color" (%Color;) относится к определениям цветов, как указано в [SRGB]. Значение цвета может быть шестнадцатеричным числом (которому предшествует знак диеза) или одним из следующих шестнадцати названий цветов. Названия цветов учитывают регистр.
![]() | Black = "#000000" | ![]() | Green = "#008000" |
![]() | Silver = "#C0C0C0" | ![]() | Lime = #00FF00" |
![]() | Gray = "#808080" | ![]() | Olive = "#808000" |
![]() | White = "#FFFFFF" | ![]() | Yellow = "#FFFF00" |
![]() | Maroon = "#800000" | ![]() | Navy = #000080" |
![]() | Red = "#FF0000" | ![]() | Blue = "#0000FF" |
![]() | Purple = "#800080" | ![]() | Teal = "#008080" |
![]() | Fuchsia = "#FF00FF" | ![]() | Aqua = "#00FFFF" |
То есть, значения "#800080" и "Purple" оба означают пурпурный цвет.
Хотя цвета могут существенно добавлять информации в документ и повышать удобство чтения, при использовании цветов имейте в виду следующие основные принципы:
HTML определяет три типа значений длины для атрибутов:
Значения длин не учитывают регистр.
Примечание. "Тип носителя" (определенный в [RFC2045] и [RFC2046]) указывает природу связанного ресурса. Эта спецификация использует термин "тип содержимого" вместо "типа носителя" в соответствии с его использованием. Более того, в этой спецификации "тип носителя" может означать носитель, на котором агент пользователя генерирует документ.
Этот тип представлен в DTD с помощью %ContentType;.
Типы содержимого учитывают регистр.
Примеры типов содержимого включают "text/html", "image/png", "image/gif", "video/mpeg", "audio/basic", "text/tcl", "text/javascript" и "text/vbscript". Текущий список зарегистрированных типов MIME см. в [MIMETYPES].
Примечание. Тип содержимого "text/css",, хотя он и не зарегистрирован в IANA, должен использоваться, если связываемым элементом является таблица стилей [CSS1].
Значения атрибутов, типом которых является код языка ( %LanguageCode в DTD), относится к коду языка, как указано в [RFC1766], раздел 2. Информацию об указании кодов языков в HTML см. в разделе коды языков. В кодах языков пробелы недопустимы.
Коды языков учитывают регистр.
Атрибуты "charset" (%Charset в DTD) относятся к кодировкам символов, как описано в разделе кодировки символов. Значениями должны быть строки (например, "euc-jp") из реестра IANA (полный список см. в [CHARSETS]).
Имена кодировок символов учитывают регистр.
Агенты пользователей для определения кодировки символов внешнего ресурса должны выполнять шаги, описанные в разделе указание кодировок символов.
Определенные атрибуты вызывают отдельный символ из набора символов документа. Эти атрибуты имеют тип %Character в DTD.
Отдельные символы можно указать с помощью ссылок на символы (например, "&").
[ISO8601] позволяет много вариантов представления даты и времени. Текущая спецификация использует один из форматов, описанных в профиле [DATETIME] для определения допустимых строк дата/время ( %Datetime в DTD).
Это следующий формат:
ГГГГ-ММ-ДДTчч:мм:ссУЧПгде:
ГГГГ = год из четырех цифр ММ = месяц из двух цифр (01=январь и т.д.) ДД = день из двух цифр (01 - 31) чч = две цифры часов (00 - 23) (до/пп НЕ допускается) мм = две цифры минут (00 - 59) сс = две цифры секунд (00 - 59) УЧП = указатель часового пояса
Указатели часового пояса:
Указанные компоненты должны присутствовать в точности, с точно такой же пунктуацией. Помните, что буква "T" отображается в строке литерально (она должна быть в верхнем регистре), для указания начала времени, как описано в [ISO8601]
Если генерирующее приложение не знает времени с точностью до секунды, для секунд может использоваться значение "00" (при необходимости также для минут и для часов).
Примечание. [DATETIME] не касается добавочных секунд.
Авторы могут использовать следующие распознаваемые типы ссылок, перечисленные здесь вместе с условными интерпретациями. В DTD %LinkTypes означает список типов ссылок, разделенных пробелами. Символы пробелов в типах ссылок не допускаются.
Эти типы ссылок не учитывают регистр, т.е. "Alternate" означает то же, что и "alternate".
Агенты пользователей, поисковые машины и т.д. могут интерпретировать эти типы ссылок несколькими способами. Например, агенты пользователя могут предоставлять доступ к связанным документам с помощью навигационной панели.
Авторы могут определить дополнительные типы ссылок, не описанные в этой спецификации. При этом они должны использовать профиль для указания соглашений, используемых для определения типов ссылок. Подробнее см. атрибут profile элемента HEAD.
Дальнейшее обсуждение типов ссылок см. в разделе ссылки в документах HTML.
Ниже приведен список распознаваемых дескрипторов носителей ( %MediaDesc в DTD).
В будущих версиях HTML могут быть введены новые значения и разрешены параметризованные значения. Для упрощения введения этих расширений соответствующие спецификации агенты пользователя должны иметь возможность анализировать значение атрибута media следующим образом:
media="screen, 3d-glasses, print and resolution > 90dpi"
отображается в :
"screen" "3d-glasses" "print and resolution > 90dpi"
"screen" "3d-glasses" "print"
Примечание. Таблицы стилей могут включать вариации в зависимости от носителя (например, конструкция CSS @media). В таких случаях имеет смысл использовать "media=all".
Данные сценария ( %Script; в DTD) могут быть содержимым элемента SCRIPT и значением атрибутов внутренних событий. Агенты пользователей не должны оценивать данные сценариев в разметке HTML, а должны передавать эти данные ядру сценариев.
Учет регистра в данных сценариев зависит от языка сценариев.
Помните, что данные сценариев, являющиеся содержимым элемента, не могут содержать ссылок на символы, но данные сценария, являющиеся значением атрибута, могут. В приложении приводится информация об указании данных, отличных от данных HTML.
Данные таблиц стилей (%StyleSheet; в DTD) могут быть содержимым элемента STYLE и значением атрибута style. Агенты пользователей не должны оценивать данные стилей в разметке HTML.
Учет регистра данных стиля зависит от языка таблиц стилей.
Помните, что данные таблиц стилей, являющиеся содержимым элемента, не могут включать ссылки на символы, но данные таблиц стилей, являющиеся значением атрибута, могут включать их. В приложении приводится дальнейшая информация об указании данных, отличных от данных HTML.
За исключением приведенных ниже зарезервированных имен, целевые имена кадров (%FrameTarget; в DTD) должны начинаться с алфавитных символов (a-zA-Z). Агенты пользователей должны игнорировать все остальные имена.
Следующие target names зарезервированы и имеют специальные значения.
Содержание
Скрипты предлагают авторам средства усиления интерактивности документов HTML. Например:
Авторы могут прикреплять к документу HTML два типа скриптов:
Примечание. Более подробная информация приводится в разделах о макросах скриптов.
Следующие разделы относятся к агентам пользователей, поддерживающих скрипты.
<!ELEMENT SCRIPT - - %Script; -- выражение script --> <!ATTLIST SCRIPT charset %Charset; #IMPLIED -- кодировка символов связанного ресурса -- type %ContentType; #REQUIRED - тип содержимого языка скрипты -- language CDATA #IMPLIED -- предопределенное имя языка серипта -- src %URI; #IMPLIED -- URI внешнего скрипта -- defer (defer) #IMPLIED -- агент пользователя может отложить выполнение скрипта -- >
Начальный тег: обязателен, Конечный тег: обязателен
Определения атрибутов
Атрибуты, определяемые в любом другом месте
Элемент SCRIPT помещает скрипт в документа. Этот элемент может указываться в элементе HEAD или BODY документа HTML несколько раз.
Скрипт может определяться в содержимом элемента SCRIPT или во внешнем файле. Если не установлен атрибут src, агенты пользователя должны интерпретировать содержимое элемента как скрипт. Если для для атрибута src установлено значение URI, агенты пользователей должны игнорировать содержимое этого элемента и загружать скрипт через URI. Обратите внимание, что атрибут charset относится к кодировке символов скрипта, назначаемого атрибутом src; он не относится к содержимому элемента SCRIPT.
Скрипты оцениваются ядром скрипта, которое агент пользователя должен знать.
Синтаксис данных скрипта зависит от языка скрипта.
Поскольку документ HTML не предполагает определенный язык скрипта, авторы документа должны явно сообщить агентам пользователей язык каждого скрипта. Это может выполняться с помощью объявления скрипта по умолчанию или с помощью локального объявления.
Авторы должны указывать язык скрипта по умолчанию для всех скриптов в документе, включив следующее объявление META в тег HEAD:
<META http-equiv="Content-Script-Type" content="type">
где "type" - тип содержимого, именующий язык скрипта. Примерами значений являются "text/tcl", "text/javascript", "text/vbscript".
Если отсутствует объявление META, значение по умолчанию может устанавливаться с помощью заголовка протокола HTTP "Content-Script-Type".
Content-Script-Type: тип
где "тип" - тип содержимого, именующий язык скрипта.
Агенты пользователей должны определять язык скрипта по умолчанию для документа в соответствии со следующими действиями (приоритет от высшего к низшему):
Документы, в которых не указан язык скрипта по умолчанию, но содержатся элементы, задающие внутренние события, некорректны. Агенты пользователей могут предпринимать попытки интерпретировать некорректно заданные скрипты, но это не обязательно. Средства разработки должны генерировать информацию о языке скрипта по умолчанию во избежание создания некорректных документов.
Язык скрипта можно задавать в каждом элементе SCRIPT с помощью атрибута type. Если не указан язык скрипта по умолчанию, этот атрибут должен устанавливаться для каждого элемента SCRIPT. Если задан язык скрипта по умолчанию, атрибут type имеет приоритет над ним.
В этом примере мы объявляем язык скриптов по умолчанию: "text/tcl". В заголовок включается элемент SCRIPT, сам скрипт находится во внешнем файле и использует язык "text/vbscript". Кроме того, один элемент SCRIPT находится в теле документа и содержит другой скрипт, написанный на языке "text/javascript".
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <HTML> <HEAD> <TITLE>Документ со скриптами</TITLE> <META http-equiv="Content-Script-Type" content="text/tcl"> <SCRIPT type="text/vbscript" src="http://someplace.com/progs/vbcalc"> </SCRIPT> </HEAD> <BODY> <SCRIPT type="text/javascript"> ...код JavaScript... </SCRIPT> </BODY> </HTML>
Каждый язык скриптов имеет собственные соглашения относительно ссылок на объекты HTML в скрипте. В данной спецификации не определяется стандартный механизм для ссылки на объекты HTML.
Однако скрипты должны ссылаться на элементы в соответствии с назначенным им именем. Ядро скриптов должно соблюдать при идентификации элемента следующие правила приоритета: атрибут name имеет преимущество над атрибутом id, если установлены оба эти атрибута. В противном случае используется установленный атрибут.
Примечание. Сообщаем авторам документов HTML, что в области внутренних событий (например, в привязке скриптов к событиям) весьма вероятны изменения. Работа в этой области ведется членами рабочей группы по объектной модели документов W3C (W3C Document Object Model Working Group) (более подробную информацию можно найти на Web-сайте W3C по адресу http://www.w3.org/).
Определения атрибутов
Действие можно связать с определенным рядом событий, происходящих при взаимодействии пользователя с агентом. Значением каждого из перечисленных выше "внутренних событий" является скрипт. Этот скрипт выполняется, если это событие происходит для этого элемента. Синтаксис скрипта зависит от языка скрипта.
Элементы управления, такие как INPUT, SELECT, BUTTON, TEXTAREA и LABEL реагируют на внутренние события. Если они не отображаются в форме, они могут использоваться для улучшения графического интерфейса доумента.
Например, авторы могут включить в документы кнопки, которые не используются для отправки формы, но при нажатии которых происходит некоторое взаимодействие с сервером.
В следующем примере показан возможное поведение управляющего элемента и интерфейса пользователя в зависимости то внутренних событий.
В этом примере userName является обязательным текстовым полем. Если пользователь не заполняет это поле, событие onblur вызывает функцию JavaScript для проверки значения поля userName.
<INPUT NAME="userName" onblur="validUserName(this.value)">
Вот еще один пример JavaScript:
<INPUT NAME="num" onchange="if (!checkNum(this.value, 1, 10)) {this.focus();this.select();} else {thanks()}" VALUE="0">
Вот пример обработчика событий для текстового поля на языке VBScript:
<INPUT name="edit1" size="50"> <SCRIPT type="text/vbscript"> Sub edit1_changed() If edit1.value = "abc" Then button1.enabled = True Else button1.enabled = False End If End Sub </SCRIPT>
Вот тот же пример с использованием Tcl:
<INPUT name="edit1" size="50"> <SCRIPT type="text/tcl"> proc edit1_changed {} { if {[edit value] == abc} { button1 enable 1 } else { button1 enable 0 } } edit1 onChange edit1_changed </SCRIPT>
Вот пример привязки события внутри скрипта на языке JavaScript. Для начала простой обработчик щелчка мыши:
<BUTTON type="button" name="mybutton" value="10"> <SCRIPT type="text/javascript"> function my_onclick() { . . . } document.form.mybutton.onclick = my_onclick </SCRIPT> </BUTTON>
Вот более интересный обработчик окна:
<SCRIPT type="text/javascript"> function my_onload() { . . . } var win = window.open("some/other/URI") if (win) win.onload = my_onload </SCRIPT>
На языке Tcl это выглядит следующим образом:
<SCRIPT type="text/tcl"> proc my_onload {} { . . . } set win [window open "some/other/URI"] if {$win != ""} { $win onload my_onload } </SCRIPT>
Обратите внимание, что выражение "document.write" или эквивалентные выражения в обработчиках внутренних событий создают и выполняют запись в новый документ, а не изменяют текущий.
Динамическое изменение документа может моделироваться следующим образом:
Документы HTML ограничиваются требованием соответствия HTML DTD до и после обработки элементов SCRIPT.
В следующем примере показано, как скрипты могут динамически изменять документ. Следующий скрипт:
<TITLE>Тестовый документ</TITLE> <SCRIPT type="text/javascript"> document.write("<p><b>Hello World!<\/b>") </SCRIPT>
имеет тот же эффект, что и разметка HTML:
<TITLE>Тестовый документ</TITLE> <P><B>Hello World!</B>
В следующих разделах обсуждается создание документов для агентов пользователей, не поддерживающих скрипты.
<!ELEMENT NOSCRIPT - - (%block;)+ -- альтернативное содержимое для представления без скриптов --> <!ATTLIST NOSCRIPT %attrs; -- %coreattrs, %i18n, %events -- >
Начальный тег: обязателен, Конечный тег: обязателен
Элемент NOSCRIPT позволяет авторам определять альтернативное содержимое, когда скрипт не выполняется. Содержимое элемента NOSCRIPT должно генерироваться агентам пользователей, поддерживающими скрипты, только в следующих случаях:Агенты пользователей, не поддерживающие клиентские скрипты, должны представлять содержимое этого элемента.
В следующем примере агент пользователя, выполняющий элемент SCRIPT, включит в документ динамически создаваемые данные. Если агент пользователя не поддерживает скрипты, пользователь может загрузить эти данные по ссылке.
<SCRIPT type="text/tcl"> ...скирпт на языке Tcl для вставки данных... </SCRIPT> <NOSCRIPT> <P>Доступ к данным <A href="http://someplace.com/data">.</A> </NOSCRIPT>
Агенты пользователей, не распознающие элемент SCRIPT, могут представить его в виде текста. Некоторые ядра скриптов, включая ядра для языков JavaScript, VBScript и Tcl, позволяют включать выражения скриптов в комментарий SGML. Агенты пользователей, не распознающие элемент SCRIPT, будут игнорировать комментарии, а ядро скрипта обнаружит и выполнит его.
Другим решением этой проблемы является хранение скриптов во внешних документах и ссылка на них с помощью атрибута src.
Комментирование скриптов JavaScript
Ядро JavaScript допускает использование строки "<!--" а начале элемента SCRIPT и игнорирует дальнейшие символы, до конца строки. JavaScript интерпретирует символ "//" как начало комментария, продолжающегося до конца текущей строки. Это необходимо, чтобы строка "-->" не разбиралась синтаксическим анализатором JavaScript.
<SCRIPT type="text/javascript"> <!-- скрыть содержимое скрипта от старых браузеров function square(i) { document.write("Вызов передал ", i ," в функцию.","<BR>") return i * i } document.write("Функция вернула ",square(5),".") // конец скрытого содержимого --> </SCRIPT>
Комментирование скриптов в VBScript
В VBScript комментарием считается весь текст, начиная с символа одиночной кавычки до конца строки. Это может использоваться для комментирования строки "-->" от VBScript, напрмер:
<SCRIPT type="text/vbscript"> <!-- Sub foo() ... End Sub ' --> </SCRIPT>
Комментирование скриптов в TCL
В Tcl комментарием считается текст от символа "#" до конца строки:
<SCRIPT type="text/tcl"> <!-- скрыть содержимое скрипта от старых браузеров proc square {i} { document write "Вызов передал $i в функцию.<BR>" return [expr $i * $i] } document write "Функция вернула [square 5]." # конец скрытого содержимого --> </SCRIPT>
Примечание. Некоторые браузеры считают концом комментариев первый символ ">". В этом случае Вы можете перенести операнды для операторов отношения и сдвига (например, используя "y < x" вместо "x > y") или использовать определенные в языке скрипта способы обхода символа ">".
Содержание
Форма HTML - это раздел документа, в котором содержатся обычная информация, разметка и специальные элементы, называемые управляющими элементам (флажки, кнопки с зависимой фиксацией, меню и т.д.), а также метки этих управляющих элементов. Обычно пользователи "заполняют" форму, модифицируя управляющие элементы (вводя текст, выбирая пункты меню и т.д.) перед тем, как предоставить форму агентц пользователя для обработки (например, на Web-серввер, на почтовый сервер и т.д.)
Вот простая форма, включающая метки, кнопки с зависимой фиксацией и кнопки (очистка формы или отправка):
<FORM action="http://somesite.com/prog/adduser" method="post"> <P> <LABEL for="firstname">Имя: </LABEL> <INPUT type="text" id="firstname"><BR> <LABEL for="lastname">Фамилия: </LABEL> <INPUT type="text" id="lastname"><BR> <LABEL for="email">Адрес электронной почты: </LABEL> <INPUT type="text" id="email"><BR> <INPUT type="radio" name="sex" value="Male"> Мужской<BR> <INPUT type="radio" name="sex" value="Female"> Женский<BR> <INPUT type="submit" value="Отправить"> <INPUT type="reset"> </P> </FORM>
Примечание. В данной спецификации имеется более подробная информация о формах в подразделах о проблемах отображения форм.
Пользователи взаимодействуют с формами с помощью именованных управляющих элементов.
"Имя элемента" задается атрибутом name. Областью действия атрибута name для управляющего элемента в элементе FORM является элемент FORM.
Каждый управляющий элемент имеет начальное и текущее значение, оба они являются символьными строками. Информацию о начальных значениях и возможных ограничениях на значения см. в определении управляющего элемента. В общем случае "исходное значение" управляющего элемента может задаваться с помощью атрибута value. Однако исходное значение элемента TEXTAREA задается его содержимым, а исходное значение элемента OBJECT в форме определяется реализацией объекта (т.е лежит вне области, рассматриваемой в данной спецификации).
"Текущее значение" управляющего элемента сначала устанавливается равным начальному значению. Затем текущее значение может изменяться пользователем или скриптами.
Начальное значение управляющего элемента не изменяется. Таким образом при сбросе формы каждое текущее значение устанавливается равным начальному значению. Если управляющий элемент не имеет начального значения, результат сброса формы непредсказуем.
Когда форма предоставляется для обработки, с формой передаются пары управляющий элемент-текущее значение. Передаваемые пары имя/значение называются успешными управляющими элементами.
В HTML определены следующие типы управляющих элементов:
Авторы должны определять язык скрипта для кнопок в объявлении скрипта по умолчанию (в элементе META).
Авторы создают кнопки с помощью элемента BUTTON или INPUT. Подробнее об определении различных типов кнопок см. в определении этих элементов.
При отправке формы успешными могут стать только включенные переключатели. Несколько флажков в форме могут иметь одно и то же имя управляющего элемента. Таким образом, например, флажки позволяют пользователям выбрать несколько значений для одного и того же свойства. Для создания флажков используется элемент INPUT.
Элементы, используемые для создания управляющих элементов, обычно располагаются в элементе FORM, но могут находиться и за пределами объявления FORM, если они используются для построения интерфейса пользователя. Это обсуждается в разделе о внутренних событиях. Обратите внимание, что управляющие элементы за пределами формы не могут быть успешными.
<!ELEMENT FORM - - (%block;|SCRIPT)+ -(FORM) -- интерактивная форма --> <!ATTLIST FORM %attrs; -- %coreattrs, %i18n, %events -- action %URI; #REQUIRED -- обработчик формы на сервере -- method (GET|POST) GET -- метод HTTP, используемый для отправки формы-- enctype %ContentType; "application/x-www-form-urlencoded" onsubmit %Script; #IMPLIED -- форма отправлена -- onreset %Script; #IMPLIED -- форма сброшена -- accept-charset %Charsets; #IMPLIED -- список поддерживаемых наборов символов -- >
Начальный тег: обязателен, Конечный тег: обязателен
Определения атрибутов
По умолчанию значением этого атрибута является зарезервированная строка "UNKNOWN". Агенты пользователей могут интерпретировать это значение как кодировку символов, используемую для передачи документа, содержащего этот элемент FORM.
Атрибуты, определяемые в другом месте
Элемент FORM служит контейнеров для управляющих элементов. Он определяет:
Форма помимо управляющих элементов может содержать текст и разметку (абзацы, списки и т.д.).
В следующем примере показана форма, которая должна обрабатываться программой "adduser". Эта форма будет отправляться с использованием метода HTTP "post".
<FORM action="http://somesite.com/prog/adduser" method="post"> ...содержимое формы... </FORM>
В следующем примере показана отправка формы на адрес электронной почты:
<FORM action="mailto:Kligor.T@gee.whiz.com" method="post"> ...содержимое формы... </FORM>
Информацию о том, как агенты пользователя должны подготавливать данные формы для серверов и как они должны обрабатывать ответы от сервера Вы можете найти в разделе об отправке формы.
Примечание. Дальнейшее обсуждение поведения серверов, принимающих данные формы, лежит вне области, рассматриваемой в данной спецификации.
<!ENTITY % InputType "(TEXT | PASSWORD | CHECKBOX | RADIO | SUBMIT | RESET | FILE | HIDDEN | IMAGE | BUTTON)" > <!-- атрибут является обязательным для всех типов, кроме submit и reset --> <!ELEMENT INPUT - O EMPTY -- управляющий элемент формы --> <!ATTLIST INPUT %attrs; -- %coreattrs, %i18n, %events -- type %InputType; TEXT -- тип вводимой информации -- name CDATA #IMPLIED -- передать как часть формы -- value CDATA #IMPLIED -- обязателен для кнопок с зависимой фиксацией и флажков -- checked (установлен) #IMPLIED -- для кнопок с зависимой фиксацией и флажков -- disabled (отключен) #IMPLIED -- в данном контексте недоступен -- readonly (только чтение)#IMPLIED -- для текста и паролей -- size CDATA #IMPLIED -- зависит от типа поля -- maxlength NUMBER #IMPLIED -- максимальное число символов в текстовом поле -- src %URI; #IMPLIED -- для полей с изображениями -- alt CDATA #IMPLIED -- краткое описание -- usemap %URI; #IMPLIED -- использовать клиентскую навигационную карту -- tabindex NUMBER #IMPLIED -- позиция в последовательности перехода -- accesskey %Character; #IMPLIED -- клавиша доступа -- onfocus %Script; #IMPLIED -- фокус на этом элементе -- onblur %Script; #IMPLIED -- фокус перемещен на другой элемент -- onselect %Script; #IMPLIED -- выделен некоторые текст -- onchange %Script; #IMPLIED -- значение элемента изменено -- accept %ContentTypes; #IMPLIED -- список типов MIME для загрузки файлов -- >
Начальный тег: обязателен, Конечный тег: запрещен
Определения атрибутов
Атрибуты, определяемые в другом месте
Тип управляющего элемента, определяемый элементом INPUT, зависит от значения атрибута type:
Примечание. Разработчикам приложений следует обратить внимание на то, что этот механизм обеспечивает только слабую защиту. Хотя пароль маскируется агентом пользователя от случайных наблюдателей, он передается на сервер в виде открытого текста, и его может прочесть любой пользователь, имеющий доступ к сети на низком уровне.
Если для щелчка на изображении используется указующее устройство, на сервер передаются форма и координаты щелчка. Значение x измеряется в пикселах от левой границы изображения, а значение y - в пикселах от верхней границы изображения. В передаваемые данные включаются последовательности имя.x=значение-x и name.y=значение-y, где "имя" - значение атрибута name, а значение-x и значение-y - значения координат x и y соответственно.
Если сервер предпринимает различные действия в зависимости от места щелчка, пользователи неграфических браузеров не смогут воспользоваться этим свойством. По этой причине авторам следует предусматривать альтернативные подходы:
В следующем фрагменте кода HTML определяется простая форма, позволяющая пользователям вводить имя, фамилию, адрес электронной почты и пол. В случае активизации кнопки отправки форма передается программе, указанной в атрибуте action.
<FORM action="http://somesite.com/prog/adduser" method="post"> <P> Имя: <INPUT type="text" name="firstname"><BR> Фамилия: <INPUT type="text" name="lastname"><BR> email: <INPUT type="text" name="email"><BR> <INPUT type="radio" name="sex" value="Male"> Мужской<BR> <INPUT type="radio" name="sex" value="Female"> Женский<BR> <INPUT type="submit" value="Отправить"> <INPUT type="reset"> </P> </FORM>
Эта форма может представляться следующим образом:
В разделе об элементе LABEL мы обсудим разметку меток типа "First name".
В следующем примере в случае события "onclick" включается функция JavaScript с именем verify:
<HEAD> <META http-equiv="Content-Script-Type" content="text/javascript"> </HEAD> <BODY> <FORM action="..." method="post"> <P> <INPUT type="button" value="Нажми тут" onclick="verify()"> </FORM> </BODY>
Подробнее о скриптах и событиях Вы можете узнать в разделе о внутренних событиях.
В следующем примере показано, как содержимое указанного пользователем файла -может передаваться вместе с формой. У пользователя запрашивается имя и список имен файлов, содержимое которых должно передаваться с формой. С помощью указания значение enctype для "multipart/form-data" содержимое всех файлов будет упаковываться для передачи в отдельные разделы существующего документа.
<FORM action="http://server.dom/cgi/handle" enctype="multipart/form-data" method="post"> <P> Как Вас зовут? <INPUT type="text" name="name_of_sender"> Какие файлы Вы отправляете? <INPUT type="file" name="name_of_files"> </P> </FORM>
<!ELEMENT BUTTON - - (%flow;)* -(A|%formctrl;|FORM|FIELDSET) -- кнопка --> <!ATTLIST BUTTON %attrs; -- %coreattrs, %i18n, %events -- name CDATA #IMPLIED value CDATA #IMPLIED -- передается на сервер при отправке -- type (button|submit|reset) submit - для использования в качестве кнопки в форме -- disabled (disabled) #IMPLIED -- в данном контексте недоступно -- tabindex NUMBER #IMPLIED -- положение в последовательности перехода-- accesskey %Character; #IMPLIED -- клавиша доступа -- onfocus %Script; #IMPLIED -- фокус на элементе -- onblur %Script; #IMPLIED -- фокус перемещен на другой элемент -- >
Начальный тег: обязателен, Конечный тег: обязателен
Определения атрибутов
Атрибуты, определяемые в другом месте
Кнопки, создаваемые с помощью элемента BUTTON, действуют так же, как и кнопки, создаваемые с помощью элемента INPUT, но они обеспечивают более богатые возможности представления: элемент BUTTON может иметь содержимое. Например, элемент BUTTON, содержащий изображение, действует и может resemble подобно элементу INPUT, для атрибута type которого установлено значение "image", но тип элемента BUTTON может иметь содержимое content.
Визуальные агенты пользователей могут представлять кнопки BUTTON рельефно или с эффектом нажатия при щелчке мыши, в то время как кнопки INPUT могут представляться только как "плоские" изображения.
В следующем примере предыдущий пример расширяется, и кнопки отправки и сброса создаются с помощью элемента BUTTON вместо элемента INPUT. Используемое для кнопок изображение определяется элементом IMG.
<FORM action="http://somesite.com/prog/adduser" method="post"> <P> Имя: <INPUT type="text" name="firstname"><BR> Фамилия: <INPUT type="text" name="lastname"><BR> email: <INPUT type="text" name="email"><BR> <INPUT type="radio" name="sex" value="Male"> Мужской<BR> <INPUT type="radio" name="sex" value="Female"> Женский<BR> <BUTTON name="submit" value="Отправить" type="submit"> Send<IMG src="/icons/wow.gif" alt="Ого"></BUTTON> <BUTTON name="reset" type="reset"> Reset<IMG src="/icons/oops.gif" alt="ой"></BUTTON> </P> </FORM>
Помните, что авторам следует предусматривать альтернативный текст для элемента IMG.
Не допускается связывать изображение-карту с элементом IMG, содержащимя в элементе BUTTON element.
ПРИМЕР НЕДОПУСТИМОГО ИСПОЛЬЗОВАНИЯ:
В следующем примере представлен недопустимый код HTML.
<BUTTON> <IMG src="foo.gif" usemap="..."> </BUTTON>
<!ELEMENT SELECT - - (OPTGROUP|OPTION)+ -- option selector --> <!ATTLIST SELECT %attrs; -- %coreattrs, %i18n, %events -- name CDATA #IMPLIED -- имя поля -- size NUMBER #IMPLIED -- число видимых строк -- multiple (multiple) #IMPLIED -- по умолчанию используется одно выделение -- disabled (disabled) #IMPLIED -- недоступно в данном контексте -- tabindex NUMBER #IMPLIED -- позиция в последовательности перехода -- onfocus %Script; #IMPLIED -- фокус перешел на элемент -- onblur %Script; #IMPLIED -- фокус ушел с элемента -- onchange %Script; #IMPLIED -- значение элемента изменилось -- >
Начальный тег: обязателен, Конечный тег: обязателен
Определения атрибутов элемента SELECT
Элемент SELECT создает меню. Каждый вариант пункт меню представляется элементом OPTION. Элемент SELECT должен содержать хотя бы один элемент OPTION.
Элемент OPTGROUP element позволяет авторам логически группировать варианты. Обычно это полезно, если пользователь должен делать выбор в длинном списке вариантов; группы связанных вариантов проще просматривать и запоминать, чем один длинный список вариантов. В HTML 4.0 все элементы OPTGROUP должны задаваться непосредственно в элементе SELECT (т.е. группы не могут быть вложенными).
Варианты могут быть выбраны заранее. Агенты пользователей должны определять, какие варианты выбраны, следующим образом:
<!ELEMENT OPTGROUP - - (OPTION)+ -- группа вариантов --> <!ATTLIST OPTGROUP %attrs; -- %coreattrs, %i18n, %events -- disabled (disabled) #IMPLIED -- недоступно в данном контексте -- label %Text; #REQUIRED - использование в иерархических меню -- >
Начальный тег: обязателен, Конечный тег: обязателен
Атрибуты, определяемые в другом месте
Примечание. Разработчикам рекомендуется иметь в виду, что в будущих версиях HTML механизм группировки может быть расширен для подержки вложенных групп (т.е. элементы OPTGROUP смогут быть вложенными). Это позволит авторам представлять более сложную иерархию вариантов.
<!ELEMENT OPTION - O (#PCDATA) -- вариант выбора --> <!ATTLIST OPTION %attrs; -- %coreattrs, %i18n, %events -- selected (selected) #IMPLIED disabled (disabled) #IMPLIED -- недоступно в данном контексте -- label %Text; #IMPLIED -- используется в иерархических меню -- value CDATA #IMPLIED -- по умолчанию - содержимое элемента -- >
Начальный тег: обязателен, Конечный тег: optional
Определения атрибутов элемента OPTION
Атрибуты, определяемые в другом месте
При представлении пункта меню агенты пользователей должны использовать значение атрибута label элемента OPTION в качестве выбора. Если этот атрибут не определен, агенты пользователей должны использовать содержимое элемента OPTION.
Атрибут label элемента OPTGROUP определяет метку группы вариантов.
В этом примере мы создадим меню, позволяющее пользователю выбрать, какую из семи программ установить. Первая и вторая программы выбраны заранее, но пользователь может отменить их выбор. Остальные программы заранее не выбраны. Атрибут size определяет, что меню должно занимать 4 строки, хотя пользователь и имеет 7 вариантов. Доступ к другим вариантам должен обеспечиваться с помощью механизма прокрутки.
За элементом SELECT следуют кнопки отправки и сброса.
<FORM action="http://somesite.com/prog/component-select" method="post"> <P> <SELECT multiple size="4" name="component-select"> <OPTION selected value="Component_1_a">Программа_1</OPTION> <OPTION selected value="Component_1_b">Программа _2</OPTION> <OPTION>Программа _3</OPTION> <OPTION>Программа _4</OPTION> <OPTION>Программа _5</OPTION> <OPTION>Программа _6</OPTION> <OPTION>Программа _7</OPTION> </SELECT> <INPUT type="submit" value="Отправить"><INPUT type="reset"> </P> </FORM>
Успешными будут только выбранные варианты (с использованием имени управляющего элемента "component-select"). Обратите внимание, что, если установлено значение атрибута value, оно определяет исходное значение управляющего элемента, в противном случае это будет содержимое элемента.
В этом примере мы используем элемент OPTGROUP для группировки вариантов. Следующая разметка:
<FORM action="http://somesite.com/prog/someprog" method="post"> <P> <SELECT name="ComOS"> <OPTGROUP label="PortMaster 3"> <OPTION label="3.7.1" value="pm3_3.7.1">PortMaster 3 и ComOS 3.7.1 <OPTION label="3.7" value="pm3_3.7">PortMaster 3 и ComOS 3.7 <OPTION label="3.5" value="pm3_3.5">PortMaster 3 и ComOS 3.5 </OPTGROUP> <OPTGROUP label="PortMaster 2"> <OPTION label="3.7" value="pm2_3.7">PortMaster 2 и ComOS 3.7 <OPTION label="3.5" value="pm2_3.5">PortMaster 2 и ComOS 3.5 </OPTGROUP> <OPTGROUP label="IRX"> <OPTION label="3.7R" value="IRX_3.7R">IRX и ComOS 3.7R <OPTION label="3.5R" value="IRX_3.5R">IRX и ComOS 3.5R </OPTGROUP> </SELECT> </FORM>
представляет следующую группировку:
PortMaster 3 3.7.1 3.7 3.5 PortMaster 2 3.7 3.5 IRX 3.7R 3.5R
Визуальные агенты пользователей могут обеспечивать выбор в группах вариантов с помощью иерархических меню или с использованием любого другого механизма, отражающего структуру вариантов.
Графические агенты пользователей могут представлять это следующим образом:
Здесь показан элемент SELECT, представленный в виде каскадных меню. В вершине меню представлено выбранное в настоящий момент значение (PortMaster 3, 3.7.1). У пользователя имеется unfurled два каскадных меню, но он еще не выбрал новое значение (PortMaster 2, 3.7). Обратите внимание, что в каждом каскадном меню отображается метка элемента OPTGROUP или OPTION.
<!ELEMENT TEXTAREA - - (#PCDATA) -- текстовое поле из нескольких строк --> <!ATTLIST TEXTAREA %attrs; -- %coreattrs, %i18n, %events -- name CDATA #IMPLIED rows NUMBER #REQUIRED cols NUMBER #REQUIRED disabled (disabled) #IMPLIED -- недоступно в данном контексте -- readonly (readonly) #IMPLIED tabindex NUMBER #IMPLIED -- позиция в последовательности перехода -- accesskey %Character; #IMPLIED -- клавиша доступа -- onfocus %Script; #IMPLIED -- фокус перешел к элементу -- onblur %Script; #IMPLIED -- фокус переведен на другой элемент -- onselect %Script; #IMPLIED -- выделен некоторый текст -- onchange %Script; #IMPLIED -- значение элемента изменилось -- >
Начальный тег: обязателен, Конечный тег: обязателен
Определения атрибутов
Атрибуты, определяемые в другом месте
Элемент TEXTAREA создает управляющий элемент для многострочного ввода текста. Агенты пользователей должны использовать содержимое этго элемента как исходное значение управляющего элемента и представлять этот текст сначала.
В этом примере создается управляющий элемент TEXTAREA в 20 строк и 80 столбцов, в котором изначально имеется две строки текста. За элементом TEXTAREA следуют кнопки отправки и сброса.
<FORM action="http://somesite.com/prog/text-read" method="post"> <P> <TEXTAREA name="thetext" rows="20" cols="80"> Первая строка исходного текста. Вторая строка исходного текста. </TEXTAREA> <INPUT type="submit" value="Отправить"><INPUT type="reset"> </P> </FORM>
Устанвока атрибута readonly позволяет авторам отображать неизменяемый текст в элементе TEXTAREA. В отличие от стандартной разметки текста в документе, при такой разметке значение элемента TEXTAREA передается с формой.
ISINDEX является нежелательным. Этот элемент создает управляющий элемент для ввода текста из одной строки. Авторам следует использовать для создания управляющих элементов для ввода текста элемент INPUT.
Формальное определение см. в Transitional DTD.
Определения атрибутов
Атрибуты, определяемые в другом месте
Элемент ISINDEX создает управляющий элемент для ввода текста из одной строки, в который можно ввести любое число симвлов. Агенты пользователей могут использовать значение атрибута prompt в качестве запроса.
ПРИМЕР НЕЖЕЛАТЕЛЬНОГО ИСПОЛЬЗОВАНИЯ:
Следующее объявление ISINDEX:
<ISINDEX prompt="Введите фразу для поиска: ">
можно переписать с использованием элемента INPUT следующим образом:
<FORM action="..." method="post"> <P>Введите фразу для поиска: <INPUT type="text"></P> </FORM>
Семантика элемента ISINDEX. В настоящее время семантика элемента ISINDEX точно определена, только если базовый URI для влключающего элемента является URI HTTP. На практике в эту строку можно вводить только символы в кодировке Latin-1, поскольку для URI нет механизма задания другого набора символов.
С некоторыми управляющими элементами формы могут автоматически связываться метки (например, с кнопками), с другими элементами метки не связываются (текстовые поля, флажки и кнопки с зависимой фиксацией и меню).
Для управляющих элементов с неявными метками агенты пользователей должны использовать в качестве метки значение атрибута value.
Элемент LABEL используется для задания меток для управляющих элементов, не имеющих неявных меток.
<!ELEMENT LABEL - - (%inline;)* -(LABEL) - текст метки поля формы --> <!ATTLIST LABEL %attrs; -- %coreattrs, %i18n, %events -- for IDREF #IMPLIED -- совпадает со значением ID поля -- accesskey %Character; #IMPLIED -- клавиша доступа -- onfocus %Script; #IMPLIED -- фокус перешел к элементу -- onblur %Script; #IMPLIED -- фокус переведен на другой элемент -- >
Начальный тег: обязателен, Конечный тег: обязателен
Определения атрибутов
Атрибуты, определяемые в другом месте
Элемент LABEL может использоваться для прикрепления к управляющим элементам информации. Каждый элемент LABEL связан ровно с одним управляющим элементом формы.
Атрибут for явно связывает метку с другим управляющим элементом: значение атрибута for должно совпадать со значением атрибута id связанного управляющего элемента. С одним и тем же управляющим элементом может быть связано несколько элементов LABEL, если создать несколько ссылок с помощью атрибута for.
В этом примере мы создадим таблицу, которая используется для выравнивания двух элементов для ввода текста и связанные с ними метки. Каждая метка явно связана с одним из полей вода:
<FORM action="..." method="post"> <TABLE> <TR> <TD><LABEL for="fname">Имя</LABEL> <TD><INPUT type="text" name="firstname" id="fname"> <TR> <TD><LABEL for="lname">Фамилия</LABEL> <TD><INPUT type="text" name="lastname" id="lname"> </TABLE> </FORM>
Здесь мы расширим предыдущий пример и включим элементы LABEL.
<FORM action="http://somesite.com/prog/adduser" method="post"> <P> <LABEL for="firstname">Имя: </LABEL> <INPUT type="text" id="firstname"><BR> <LABEL for="lastname">Фамилия: </LABEL> <INPUT type="text" id="lastname"><BR> <LABEL for="email">email: </LABEL> <INPUT type="text" id="email"><BR> <INPUT type="radio" name="sex" value="Мужской"> Male<BR> <INPUT type="radio" name="sex" value="Женский"> Female<BR> <INPUT type="submit" value="Отправить"> <INPUT type="reset"> </P> </FORM>
Чтобы неявно связать метку с другим управляющим элементом, этот управляющий элемент должен находиться в элементе LABEL. В таком случае элемент LABEL может содержать только один управляющий элемент. Сама метка может располагаться до или после связанного с ней управляющего элемента.
В этом примере мы неявно связываем две метки с двумя управляющими элементами для ввода текста:
<FORM action="..." method="post"> <P> <LABEL> Имя <INPUT type="text" name="firstname"> </LABEL> <LABEL> <INPUT type="text" name="lastname"> Фамилия </LABEL> </P> </FORM>
Обратите внимание, то такая технология не может использоваться, если таблицы используются для форматирования документов, и метка находится в одной ячейке, а связанный с ней управляющий элемент в другой.
Если на элемент LABEL переходит фокус, то он передается в связанный управляющий элемент. Примеры см. ниже в разделе о клавишах доступа.
Метки могут представляться агентами пользователей несколькими способами (например, визуально, прочитываться синтезаторами речи и т.д.)
<!-- #PCDATA используется для решения проблемы смешанного содержимого, per specification only whitespace is allowed there! --> <!ELEMENT FIELDSET - - (#PCDATA,LEGEND,(%flow;)*) - группа управляющих элементов формы --> <!ATTLIST FIELDSET %attrs; -- %coreattrs, %i18n, %events -- > <!ELEMENT LEGEND - - (%inline;)* -- legend набора полей --> <!ENTITY % LAlign "(top|bottom|left|right)"> <!ATTLIST LEGEND %attrs; -- %coreattrs, %i18n, %events -- accesskey %Character; #IMPLIED -- клавиша доступа -- >
Начальный тег: обязателен, Конечный тег: обязателен
LEGEND Определения атрибутов
Атрибуты, определяемые в другом месте
Элемент FIELDSET позволяет авторам группировать связанные метки и управляющие элементы по темам. Группировка управляющих элементов упрощает пользователям понимание назначения элементов, одновременно упрощая переход по клавише tab для визуальных агентов пользователей и речевую навигацию для звуковых агентов пользователей. Корректное использование этого элемента повышает доступность документов.
Элемент LEGEND позволяет авторам назначать заголовки для элемента FIELDSET. Legend повышает доступность, если элемент FIELDSET представляется невизуально.
В этом примере мы создадим форму, которую можно заполнять на приеме у врача. Она имеет три раздела: личная информация, история болезни и текущее лечение. В каждом разделе имеются управляющие элементы для ввода соответствующей информации.
<FORM action="..." method="post"> <P> <FIELDSET> <LEGEND>Личная информация</LEGEND> Фамилия: <INPUT name="personal_lastname" type="text" tabindex="1"> Имя: <INPUT name="personal_firstname" type="text" tabindex="2"> Адрес: <INPUT name="personal_address" type="text" tabindex="3"> ...другая персональная информация... </FIELDSET> <FIELDSET> <LEGEND>История болезни</LEGEND> <INPUT name="history_illness" type="checkbox" value="Smallpox" tabindex="20"> Smallpox <INPUT name="history_illness" type="checkbox" value="Mumps" tabindex="21"> Mumps <INPUT name="history_illness" type="checkbox" value="Dizziness" tabindex="22"> Dizziness <INPUT name="history_illness" type="checkbox" value="Sneezing" tabindex="23"> Sneezing ...продолжение истории болезни... </FIELDSET> <FIELDSET> <LEGEND>Текущее лечение</LEGEND> Принимаете ли Вы сейчас медицинские препараты? <INPUT name="medication_now" type="radio" value="Yes" tabindex="35">Да <INPUT name="medication_now" type="radio" value="No" tabindex="35">Нет Если да, перечислите их ниже: <TEXTAREA name="current_medication" rows="20" cols="50" tabindex="40"> </TEXTAREA> </FIELDSET> </FORM>
Обратите внимание, что в этом примере мы можем улучшить визуальное представление формы, добавив элементы в каждый элемент FIELDSET (с помощью таблиц стилей), добавив информацию о цвете и шрифте (с помощью таблиц стилей), добавив скрипты (например, чтобы область "текущее лечение" открывалась, только если пользователь указывает, что он проходит лечение) и т.д. /samp
В документе HTML, чтобы стать активным и выполнить свои задачи, элемент должен получить фокус от пользователя. Например, пользователи должны активизировать ссылку, задаваемую элементом A, чтобы перейти к связанному документу. Точно так же пользователи должны перевести фокус на элемент TEXTAREA, чтобы в него можно было вводить текст.
Имеется несколько способов передачи фокуса элементу:
Определения атрибутов
Последовательность перехода определяет порядок получения фокуса элементами при переходе с помощью клавиатуры. Последовательность перехода может включать элементы, вложенные в другие элементы.
Переход к элементам, которые могут получать фокус, должен осуществляться агентами пользователей в соответствии со следующими правилами:
Следующие элементы поддерживают атрибут tabindex: A, AREA, BUTTON, INPUT, OBJECT, SELECT и TEXTAREA.
В этом примере последовательность перехода будет включать элементы BUTTON, INPUT в порядке (обратите внимание, что "field1" и кнопка используют одно и то же значение атрибута tabindex, но "field1" находится потоке в потоке символов), и наконец, ссылка, создаваемая элементом A.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <HTML> <HEAD> <TITLE>Документ с тегом FORM</TITLE> </HEAD> <BODY> ...некоторый текст... <P>Посетите <A tabindex="10" href="http://www.w3.org/">сайт W3C.</A> ...еще текст... <BUTTON type="button" name="get-database" tabindex="1" onclick="get-database"> Текущая база данных. </BUTTON> ...еще текст... <FORM action="..." method="post"> <P> <INPUT tabindex="1" type="text" name="field1"> <INPUT tabindex="2" type="text" name="field2"> <INPUT tabindex="3" type="submit" name="submit"> </P> </FORM> </BODY> </HTML>
Клавиши перехода. Фактическая последовательность клавиш, обеспечивающая переход или активизацию элемента, зависит от конфигурации агента пользователя (например, клавиша "tab" используется для перехода, а клавиша "enter" - для активизации выбранного элемента).
Агенты пользователей могут также определять последовательности клавиш для перехода в обратном порядке. По достижении конца (или начала) последовательности агенты пользователей могут переходить в начало (или в конец).
Определения атрибутов
Нажатие назначенной элементу клавиши доступа передает элементу фокус. Действие, происходящее по получении элементом фокуса, зависит от элемента. Например, если пользвоатель активизирует ссылку, определяемую элементом A, агент пользователя обычно производит переход по ссылке. Если пользователь активизирует кнопку с зависимой фиксацией, агент пользователя изменяет значение кнопки. Если пользователь активизирует текстовое поле, в него разрешается ввод и т.д.
Следующие элементы поддерживают атрибут accesskey: A, AREA, BUTTON, INPUT, LABEL, LEGEND и TEXTAREA.
В этом примере клавиша доступа "U" назначается метке, связанной с управляющим элементом INPUT. Нажатие клавиши доступа переводит фокус на метку, которая, в свою очередь, передает его связанному с ней управляющему элементу. После этого пользователь может ввести текст в область INPUT.
<FORM action="..." method="post"> <P> <LABEL for="fuser" accesskey="U"> User Name </LABEL> <INPUT type="text" name="user" id="fuser"> </P> </FORM>
В этом примере мы назначаем клавишу доступа ссылке, определяемой элементом A. Нажатие этой клавиши приведет к переходу пользователя в другой документ, в данном случае - в оглавление.
<P><A accesskey="C" rel="contents" href="http://someplace.com/specification/contents.html"> Оглавление</A>
Использование клавиши доступа зависит от системы. Например, на машинах под управлением MS Windows обычно вместе с клавишей доступа нужно нажимать клавишу "alt". В системах Apple обычно требуется нажатие клавиши "cmd".
Представление клавиши доступа зависит от агента пользователя. Авторам рекомендуется включать клавиши доступа в текст метки или туда, где применяется клавиша доступа. Агенты пользователей должны представлять значение клавиши доступа таким образом, чтобы подчеркнуть ее роль и дать отличить ее от других символов (например, с помощью подчеркивания).
В контекстах, где ввод пользователя нежелателен или не требуется, важна возможность отключения управляющего элемента или представление его только для чтения. Например, можно отключить кнопку отправки формы до ввода некоторых обязательных данных. Аналогично, автор может включить текст только для чтения, который должен передаваться с формой как значение. В следующих разделах описываются отключенные управляющие элементы и элементы только для чтения.
Определения атрибутов
Если атрибут disabled установлен, он влияет на элемент следующим образом:
Атрибут disabled поддерживают следующие элементы: BUTTON INPUT, OPTGROUP, OPTION, SELECT и TEXTAREA.
Этот атрибут наследуется, но локальные объявления имеют приоритет над наследуемым значением.
Представление отключенных элементов зависит от агента пользователя. Например, некоторые агенты пользователей "выделяют серым" отключенные пункты меню, метки кнопок и т.д.
В этом примере элемент INPUT отключен. Таким образом, пользователь не может ввести туда текст, и его значение не будет передаваться с формой.
<INPUT disabled name="fred" value="stone">
Примечание. Единственным способом динамического изменения значения атрибута disabled является использование скрипта.
Определения атрибутов
Атрибут readonly определяет, может ли пользователь изменять содержимое управляющего элемента.
Если атрибут readonly установлен, он влияет на элемент следующим образом:
Атрибут readonly поддерживают следующие элементы: INPUT, TEXT, PASSWORD и TEXTAREA.
Представление элементов только для чтения зависит от агента пользователя.
Примечание. Единственным способом динамического изменения значения атрибута только для чтения является использование скриптов.
В следующих разделах объясняется передача данных формы агентами пользователей агентам обработки форм.
Атрибут method элемента FORM определяет метод HTTP, используемый для отправки формы в агент обработки. Этот атрибут может принимать два значения:
Метод "get" следует использовать, если форма is idempotent (то есть не вызывает побочных эффектов). Большое число операций поиска в базе данных не имеет видимых побочных эффектов и представляет собой идеальное приложение для метода "get".
Если обслуживание, связанное с обработкой формы, вызывает побочные эффекты (например, если форма изменяет базу данных или производит подписку н услуги), следует использовать метод "post".
Примечание. При использовании метода "get" набор данных формы должен включать только символы набора ASCII. Только с методом "post" (с атрибутом enctype="multipart/form-data") можно использовать весь набор символов [ISO10646].
Успешный управляющий элемент "подходит" для отправки. Каждый успешный управляющий элемент имеет имя и текущее значение; эта пара является частью передаваемого набора данных формы. Успешный управляющий элемент должен определяться в элементе FORM и должен иметь имя.
Однако:
Если управляющий элемент не имеет текущего значения во время отправки формы, агенты пользователей не обязательно должны обрабатывать его как успешный.
Более того, агенты пользователей не должны считать успешными следующие управляющие элементы:
Скрытые управляющие элементы и управляющие элементы, не представляемые благодаря таблицам стилей могут быть успешными. Например:
<FORM action="..." method="post"> <P> <INPUT type="password" style="display:none" name="invisible-password" value="mypassword"> </FORM>
В этом случае значению будет сопоставлено имя "invisible-password", и оно будет передаваться с формой.
Когда пользователь отправляет форму (например, активизировав кнопку отправки), агент пользователя обрабатывает ее следующим образом.
Набор данных формы - это последовательность пар имя/значение, составляемых из успешных управляющих элементов
Затем набор данных формы кодируется в соответствии с типом содержимого, определяемого атрибутом enctype элемента FORM.
Наконец, закодированные данные отправляются обрабатывающему агенту, назначаемому атрибутом action, по протоколу, указанному в атрибуте method.
В данной спецификации не определяются все допустимые способы отправки или типы содержимого, которые могут использоваться с формами. Однако агенты пользователей HTML 4.0 должны поддерживать установленные соглашения в следующих случаях:
Для других значений атрибута action или method поведение не определено.
Агенты пользователей должны представлять ответ на транзакции HTTP "get" и "post".
Атрибут enctype элемента FORM определяет тип содержимого, используемый для кодирования набора данных формы для передачи на сервер. Агенты пользователей должны поддерживать перечисленные ниже типы содержимого. Поведение для других типов содержимого не определено.
См. также раздел об использовании амперсандов в значениях атрибутов URI.
Этот тип содержимого используется по умолчанию. Формы, передаваемые с этим типом содержимого, должны быть закодированы следующим образом:
Примечание. Дополнительную информацию о вопросах совместимости с предыдущими версиями, об отношении типа содержимого "multipart/form-data" и других типов содержимого, о проблемах работы и т.д. см. в [RFC1867].
Информацию о защите форм см. в приложении.
Тип "application/x-www-form-urlencoded" неэффективен для отправки большого количества двоичных данных или текста, содержащего символы, не входящие в набор ASCII. Тип "multipart/form-data" следует использовать для отправки форм, содержащих файлы, данные, не входящие в набор ASCII и двоичные данные.
В содержимом "multipart/form-data" используются правила всех составных потоков данных MIME, как описано в [RFC2045]. Определение типа "multipart/form-data" можно найти в реестре [IANA].
Сообщение типа "multipart/form-data" состоит из нескольких частей, каждая их которых представляет успешный управляющий элемент. Части отправляются обрабатывающему агенту в том порядке, в котором соответствующие управляющие элементы представлены в потоке документа. Границы частей не должны находиться в данных; обеспечение этого требования лежит вне области, рассматриваемой в данной спецификации.
Как и во всех составных типах MIME, каждая часть имеет необязательный заголовок "Content-Type", для которого по умолчанию устанавливается значение "text/plain". Агенты пользователей должны предоставлять заголовок "Content-Type" с параметром "charset".
Каждая часть должна содержать:
Например, для управляющего элемента с именем "mycontrol" соответствующая часть может выглядеть так:
Content-Disposition: form-data; name="mycontrol"
Как и во всех процессах передачи данных MIME, для разделения строк данных используется комбинация "CR LF" (т.е. `%0D%0A').
Может кодироваться каждая часть с указанием заголовка "Content-Transfer-Encoding", если значение этой части не соответствует кодировке по умолчанию (7BIT) (см. [RFC2045], раздел 6)
Если содержимое файла передается с формой, файловый ввод должен определяться соответствующим типом содержимого (например, "application/octet-stream"). Если в результате одного элемента формы должны быть возвращены несколько файлов, они должны возвращаться как тип "multipart/mixed", внедренный в "multipart/form-data".
Агент пользователя должен попытаться указать имя для каждого передаваемого файла. Имя файла может указываться в параметре "filename" заголовка 'Content-Disposition: form-data' или, в случае нескольких полей, в заголовке 'Content-Disposition: file' составной части. Если имя файла клиентской операционной системы содержит символы, не входящие в набор US-ASCII, имя файла может изменяться или кодироваться с использованием метода [RFC2045]. Это удобно в случаях, когда, например, выгруженные файлы могут содержать ссылки друг на друга (например, файл TeX и его вспомогательное описание стилей ".sty").
В следующем примере показана кодировка "multipart/form-data". Предположим, у нас имеется следующая форма:
<FORM action="http://server.dom/cgi/handle" enctype="multipart/form-data" method="post"> <P> Как Вас зовут? <INPUT type="text" name="submit-name"><BR> Какие файлы Вы отправляете? <INPUT type="file" name="files"><BR> <INPUT type="submit" value="Отправить"> <INPUT type="reset"> </FORM>
Если пользователь введет в текстовое поле слово "Larry" и выберет текстовый файл "file1.txt", агент пользователя может отправить следующие данные:
Content-Type: multipart/form-data; boundary=AaB03x --AaB03x Content-Disposition: form-data; name="submit-name" Larry --AaB03x Content-Disposition: form-data; name="files"; filename="file1.txt" Content-Type: text/plain ... содержимое файла file1.txt ... --AaB03x--
Если пользователь выбрал второй файл (изображение) "file2.gif", агент пользователя может сконструировать части следующим образом:
Content-Type: multipart/form-data; boundary=AaB03x --AaB03x Content-Disposition: form-data; name="submit-name" Larry --AaB03x Content-Disposition: form-data; name="files" Content-Type: multipart/mixed; boundary=BbC04y --BbC04y Content-Disposition: attachment; filename="file1.txt" Content-Type: text/plain ... содержимое файла file1.txt ... --BbC04y Content-Disposition: attachment; filename="file2.gif" Content-Type: image/gif Content-Transfer-Encoding: binary ...содержимое файла file2.gif... --BbC04y-- --AaB03x--
Содержание
Таблицы стилей представляют наибольшее достижение для дизайнеров Web-страниц, расширяя возможности улучшения внешнего вида страниц. В научных средах, в которых и зародилась Web, люди более сосредоточены на содержании документов, нежели на их представлении. По мере открытия Web прочими людьми ограничения HTML стали источником разочарований, и авторам пришлось уклоняться от стилистических ограничений HTML. Хотя намерения и были добрыми - улучшение представления Web-страниц, -- технологии имели нежелательные побочные эффекты. Эти технологии работали только для некоторых, только иногда, но не для всех и не всегда. Сюда включаются:
Эти технологии существенно усложняют Web-страницы, ограничивают гибкость, создают проблемы взаимодействия и создают сложности для людей с физическими недостатками.
Таблицы стилей решают эти проблемы, одновременно превосходя ограниченные механизмы представления в HTML. Таблицы стилей упрощают определение интервалов между строками текста, отступов, цветов, используемых для текста и фона, размера и стиля шрифтов и другой информации .
Например, следующая таблица стилей CSS (хранящаяся в файле "special.css") зеленый устанавливает цвет текста абзаца и окружает его сплошной красной рамкой:
P.special { color : green; border: solid red; }
Авторы могут связывать таблицы стилей с исходным документом HTML с помощью элемента LINK:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40"> <HTML> <HEAD> <LINK href="special.css" rel="stylesheet" type="text/css"> </HEAD> <BODY> <P class="special">В этом абзаце текст должен быть зеленым. </BODY> </HTML>
HTML 4.0 обеспечивает поддержку следующих функций таблиц стилей:
Таблицы стилей, напротив, применяются к конкретным устройствам или группам устройств. Таблица стилей, предназначенная для экрана, может применяться при печати, но бесполезна для речевых браузеров. Данная спецификация позволяет Вам определить широкие категории устройств, к которым применяется конкретная таблица стилей. Это позволяет агентам пользователей избежать загрузки ненужных таблиц стилей. Языки таблиц стилей могут включать функции описания зависимости от устройств в одной таблице.
Эти проблемы решаются путем предоставления авторам возможности включать инструкции по представлению в каждый элемента HTML. Благодаря этому информация о представлении всегда доступна ко времени представления элемента агентом пользователя.
Во многих случаях авторы воспользуются преимуществами использования общей таблицы стилей для группы документов. В этом случае распределение правил стиля в документе приведет к снижению производительности по сравнению с использованием связанной таблице стилей, поскольку для большинства документов таблицы стилей уже будет находиться в локальном кэше. К этому эффекту приведет общедоступность хороших таблиц стилей.
Примечание. В примере таблицы стилей по умолчанию для HTML 4.0, включенном в [CSS2], выражена общепринятая информация о стиле для каждого элемента. Авторы могут воспользоваться этим ресурсом.
Документы в формате HTML могут содержать правила таблиц стилей непосредственно или могут импортировать таблицы стилей.
В HTML можно использовать все языки таблиц стилей. Простого языка таблиц стилей может быть достаточно для большинства пользователей, в то время как другие языки могут подходить для более специализированных задач. В примерах в данной спецификации используется язык "Каскадные таблицы стилей" ([CSS1]), сокращенно CSS.
Синтаксис данных стиля зависит от языка таблицы стилей.
Авторы должны указывать язык таблицы стилей для информации о стиле, связанной с документом HTML.
Для установки языка таблицы стилей для документа по умолчанию следует использовать элемент META. Например, чтобы установить по умолчанию язык CSS, следует поместить в раздел HEAD следующее объявление:
<META http-equiv="Content-Style-Type" content="text/css">
зык таблиц стилей по умолчанию можно также установить с помощью заголовков HTTP. Показанное выше объявление с использованием тэга META эквивалентно заголовку HTTP:
Content-Style-Type: text/css
Агенты пользователей должны определять язык таблиц стилей по умолчанию для документа в соответствии со следующими шагами (от высшего приоритета к низшему):
Документы, включающие элементы, в которых устанавливается атрибут style, но не определяется язык таблиц стилей по умолчанию, являются некорректными. Средства разработки должна генерировать информацию о языке таблиц стилей по умолчанию (обычно с помощью объявлений META), чтобы агенты пользователей не полагались на язык по умолчанию "text/css".
Определения атрибутов
style Атрибут style определяет информацию о стиле одного элемента. Язык таблиц стилей встроенных правил стиля определяется языком таблиц стилей по умолчанию. Синтаксис данных стиля зависит от языка таблиц стилей.
В данном примере устанавливается информация о цвете и размере шрифта текста определенного абзаца.
<P style="font-size: 12pt; color: fuchsia">Что за прелесть эти таблицы стилей!
В CSS объявления свойств имеют форму "имя : значение" и разделяются точкой с запятой.
Атрибут style может использоваться для применения определенного стиля к отдельному элементу HTML. Если стиль повторно используется для нескольких элементов, авторы должны использовать элемент STYLE для перегруппировки этой информации. Для оптимальной гибкости авторам следует определять стили во внешних таблицах стилей.
<!ELEMENT STYLE - - %StyleSheet -- информация о стиле --> <!ATTLIST STYLE %i18n; -- lang, dir, для использования с заголовком -- type %ContentType; #REQUIRED - тип содержимого языка стилей -- media %MediaDesc; #IMPLIED -- для использования с этими устройствами -- title %Text; #IMPLIED -- рекомендуемый заголовок -- >
Начальный тэг: обязателен, Конечный тэг: обязателен
Определения атрибутов
атрибуты, определяемые в другом месте
Элемент STYLE позволяет авторам помещать правила таблиц стилей в раздел head документа. В HTML допустимо любое число элементов STYLE в разделе HEAD.
Агенты пользователей, не поддерживающие таблицы стилей или не поддерживающие определенный язык таблиц стилей, используемый в элементе STYLE, не должны показывать элемент STYLE. Ошибкой будет генерировать его содержимое как часть текста документа. Некоторые языки таблиц стилей поддерживают синтаксис для того, чтобы не показывать содержимое несоответствующим спецификации агентам пользователей.
Синтаксис данных стиля зависит от языка таблицы стилей.
Некоторые реализации таблиц стилей могут поддерживать большее разнообразие правил для элемента STYLE, чем в атрибуте style. Например, в CSS правила могу объявляться в элементе STYLE для:
Правила приоритета и наследования правил таблиц стилей зависят от языка таблиц.
Следующее объявление CSS STYLE приводит к появлению границы вокруг всех элементов H1 в документе и центрированию их на странице.
<HEAD> <STYLE type="text/css"> H1 {border-width: 1; border: solid; text-align: center} </STYLE> </HEAD>
Чтобы указать, что эта информация о стиле должна применяться только к элементам H1 определенного класса, можно изменить определение следующим образом:
<HEAD> <STYLE type="text/css"> H1.myclass {border-width: 1; border: solid; text-align: center} </STYLE> </HEAD> <BODY> <H1 class="myclass"> Наш стиль влияет на этот заголовок уровня H1</H1> <H1> А на этот заголовок наш стиль не влияет</H1> </BODY>
И, наконец, для ограничения области действия информации о стиле единственным экземпляром элемента H1, установите атрибут id:
<HEAD> <STYLE type="text/css"> #myid {border-width: 1; border: solid; text-align: center} </STYLE> </HEAD> <BODY> <H1 class="myclass"> На этот заголовок H1 стиль не влияет</H1> <H1 id="myid"> А на этот влияет </H1> <H1> На этот опять не влияет </H1> </BODY>
Хотя информация о стиле может устанавливаться почти для всех элементов HTML, два элемента, DIV и SPAN, особенно полезны тем, что они не накладывают никакой семантики представления (кроме block-level vs. inline). Вместе с таблицами стилей эти элементы позволяют пользователям неограниченно расширять язык HTML, особенно при использовании атрибутов class и id.
В следующем примере элемент SPAN используется для установки малых прописных букв для стиля шрифта первых нескольких слов абзаца.
<HEAD> <STYLE type="text/css"> SPAN.sc-ex { font-variant: small-caps } </STYLE> </HEAD> <BODY> <P><SPAN class="sc-ex">Первые несколько</SPAN> слов абзаца выделены малыми прописными буквами. </BODY>
В следующем примере мы используем элемент DIV и атрибут class для установки выравнивания текста для ряда абзацев, составляющих введение в научную статью. Информация о стиле может повторно использоваться для других разделов введения путем установки атрибута class в любом месте документа.
<HEAD> <STYLE type="text/css"> DIV.Abstract { text-align: justify } </STYLE> </HEAD> <BODY> <DIV class="Abstract"> <P>The Chieftain product range is our market winner for the coming year. This report sets out how to position Chieftain against competing products. <P>Chieftain replaces the Commander range, which will remain on the price list until further notice. </DIV> </BODY>
HTML позволяет авторам создавать документы, использующие характеристики устройства, на котором будет представляться документ (например, графические дисплеи, телевизионные экраны, переносные устройства, речевые браузеры, тактильные устройства на базе азбуки Бройля и т.д.). С помощью атрибута media авторы могут позволить агентам пользователей загружать и применять таблицы стилей выборочно. См. список распознаваемых дескрипторов устройств.
Объявления в следующем примере применяются к элементам H1. При показе на проекторе во время встречи все экземпляры будут отображаться синим цветом. При печати они будут отцентрированы.
<HEAD> <STYLE type="text/css" media="projection"> H1 { color: blue} </STYLE> <STYLE type="text/css" media="print"> H1 { text-align: center } </STYLE>
Этот пример добавляет звуковые эффекты для устройства речевого вывода:
<STYLE type="text/css" media="aural"> A { cue-before: uri(bell.aiff); cue-after: uri(dong.wav)} </STYLE> </HEAD>
Управление устройствами особенно интересно при использовании с внешними таблицами стилей, поскольку агенты пользователей могут сэкономить время, загружая из сети только таблицы стилей, применяющиеся к текущему устройству. Например, речевые браузеры могут не загружать таблицы стилей, разработанные для визуального представления. Подробнее см. в разделе о зависящих от устройств каскадах.
Авторы могут отделять таблицы стилей от документов HTML. Это дает следующие преимущества:
HTML позволяет авторам связывать с документом любое число внешних таблиц стилей. Язык таблиц стилей определяет взаимодействие нескольких внешних таблиц стилей (например, правила "каскадов" CSS).
Авторы могут указать ряд взаимоисключающих таблиц стилей, называемых альтернативными. Пользователи могут выбирать таблицы, которые им больше нравятся. Например, автор может указать один стиль для небольших экранов, другой - для слабовидящих пользователей (например, с использованием крупного шрифта). Агенты пользователей должны предоставлять пользователям возможности выбора одной из альтернативных таблиц.
Автор может указать, что одна из альтернатив является предпочтительной. Агенты пользователей должны применять предпочитаемые автором таблицы стилей, если пользователь не выбрал другую альтернативу.
Авторы могут сгруппировать несколько альтернативных таблиц стилей (включая предпочитаемые автором) под одним именем стиля. Если пользователь выбирает именованный стиль, агент пользователя должен применять все таблицы стилей с этим именем. Агенты пользователей не должны применять альтернативные таблицы стилей с другим именем стиля. Как присвоить имя группе стилей, описано в разделе об определении внешних таблиц стилей.
При применении таблицы стилей агенты пользователей должны учитывать дескрипторы устройств.
Агенты пользователей также должны позволять пользователям полностью отключать таблицы стилей автора; в этом случае агент пользователя не должен применять ни одну из таблиц стилей.
Авторы указывают внешние таблицы стилей с помощью атрибутов элемента LINK:
Агенты пользователей должны обеспечивать пользователям средства просмотра и выбора таблицы стилей из списка альтернатив. Для атрибута title рекомендуется устанавливать значение, которое будет представлять эту таблицу в списке.
В этом примере мы сначала определяем постоянную таблицу стилей, находящуюся в файле mystyle.css:
<LINK href="mystyle.css" rel="stylesheet" type="text/css">
Установка атрибута title назначает ее предпочитаемой автором таблицей:
<LINK href="mystyle.css" title="Compact" rel="stylesheet" type="text/css">
Добавление ключевого слова "alternate" а атрибут rel сделает ее альтернативной таблицей стилей:
<LINK href="mystyle.css" title="Medium" rel="alternate stylesheet" type="text/css">
Подробнее о внешних таблицах стилей Вы можете узнать в разделе о ссылках и внешних таблицах стилей.
Авторы также могут использовать для установки предпочитаемой таблицы стилей элемент META. Например, чтобы установить предпочитаемую таблицу стилей "compact" (см. предыдущий пример), авторы могут включить в элемент HEAD следующую строку:
<META http-equiv="Default-Style" content="compact">
Предпочитаемую таблицу стилей можно также указать с помощью заголовков HTTP. Объявление META выше эквивалентно заголовку HTTP:
Default-Style: "compact"
Если предпочитаемая таблица стилей указывается двумя или более элементами META или заголовками HTTP, преимущество имеет последнее объявление. Считается, что заголовки HTTP обрабатываются раньше, чем объявления HEAD.
Если предпочитаемая таблица стилей задается двумя или более элементами LINK, преимущество имеет первая.
Предпочитаемые таблицы стилей, задаваемые с помощью META или заголовков HTTP имеют преимущество над таблицами, задаваемыми элементом LINK.
Каскадные языки таблиц стилей, такие как CSS, позволяют использовать информацию о стиле из нескольких источников. Однако не все языки таблиц стилей поддерживают каскады. Чтобы определить каскад, авторы указывают последовательность элементов LINK и/или STYLE. Каскад информации таблиц стилей производится в порядке указания элементов в разделе HEAD.
Примечание. В данной спецификации не описано каскадирование таблиц стилей разных языков. Авторам следует избегать смешивания языков.
В следующем примере мы определяем две альтернативные таблицы стилей с именем "compact". Если пользователь выбирает стиль "compact", агент пользователя должен применять обе внешние таблицы, а также постоянную таблицу "common.css". Если пользователь выбирает стиль "big print", применяться будут только альтернативная таблица "bigprint.css" и постоянная таблица "common.css".
<LINK rel="alternate stylesheet" title="compact" href="small-base.css" type="text/css"> <LINK rel="alternate stylesheet" title="compact" href="small-extras.css" type="text/css"> <LINK rel="alternate stylesheet" title="big print" href="bigprint.css" type="text/css"> <LINK rel="stylesheet" href="common.css" type="text/css">
Вот пример каскада, в котором задействованы оба элемента - LINK и STYLE.
<LINK rel="stylesheet" href="corporate.css" type="text/css"> <LINK rel="stylesheet" href="techreport.css" type="text/css"> <STYLE type="text/css"> p.special { color: rgb(230, 100, 180) } </STYLE>
Каскад может включать таблицы стилей, применяемые к различным устройствам. Элементы LINK и STYLE могут использоваться с атрибутом media. Агент пользователя несет ответственность за отфильтровывание таблиц стилей, не применяющихся к текущему устройству.
В следующем примере мы определяем каскад, в котором таблица стилей "corporate" представляется в нескольких версиях: одна для печати, другая для экранного представления, третья для речевых браузеров (полезная, например, при чтении электронной почты в машине). Таблица "techreport" применяется ко всем устройствам. Цветная rule, определяемая элементом STYLE, используется для печати и для экрана, но не для звукового представления.
<LINK rel="stylesheet" media="aural" href="corporate-aural.css" type="text/css"> <LINK rel="stylesheet" media="screen" href="corporate-screen.css" type="text/css"> <LINK rel="stylesheet" media="print" href="corporate-print.css" type="text/css"> <LINK rel="stylesheet" href="techreport.css" type="text/css"> <STYLE type="text/css"> p.special { color: rgb(230, 100, 180) } </STYLE>
Если агент пользователя собирается представлять документ, ему необходимо найти значения для свойств стиля, например, семейство шрифтов, начертание, размер шрифта, длину строки, цвет текста и т.д. Точный механизм зависит от языка таблиц стилей, но в общем применяется следующее:
Механизм каскадирования используется, если к элементу применяется ряд правил стиля. Этот механизм позволяет агенту пользователя сортировать правила по специфичности и определять, какое правило нужно применить. Если правило невозможно найти, следующий шаг зависит от наследования свойства. Не все свойства могут наследоваться. Для этих свойств язык таблиц стилей обеспечивает значения по умолчанию для использования в случае отсутствия явных правил для конкретного элемента.
Если свойство может наследоваться, агент пользователя проверяет непосредственно элемент, в который вложен текущий элемент, и ищет правило, применяющееся к нему. Этот процесс продолжается до тех пора, пока применимое правило не будет обнаружено. Этот механизм обеспечивает компактное задание таблиц стилей. Например, авторы могут указать семейство шрифтов для всех элементов в разделе BODY с помощью одного правила для элемента BODY.
Некоторые языки таблиц стилей поддерживают синтаксис, позволяющий авторам скрывать содержимое элементов STYLE от несоответствующих агентов пользователей.
В данном примере для CSS показано, как можно скрыть содержимое элементов STYLE, чтобы гарантировать, что более старые несоответствующие спецификации агенты пользователей не будут представлять их в виде текста.
<STYLE type="text/css"> <!-- H1 { color: red } P { color: blue} --> </STYLE>
Менеджеры Web-серверов могут сконфигурировать сервер таким образом, чтобы таблица стилей применялась к группе страниц. Заголовок HTTP Link, описанный в [RFC2068], раздел 19.6.1.2, действует так же, как элемент LINK, с теми же атрибутами и значениями. Несколько заголовков Link соответствуют нескольким элементам LINK в том же порядке. Например,
Link: <http://www.acme.com/corporate.css>; REL=stylesheet
соответствует:
<LINK rel="stylesheet" href="http://www.acme.com/corporate.css">
Можно задать несколько альтернативных стилей с помощью нескольких заголовков Link, а затем использовать атрибут rel для определения стиля по умолчанию.
В следующем примере стиль "compact" применяется по умолчанию, поскольку в нем отсутствует ключевое слово "alternate" для атрибута rel.
Link: <compact.css>; rel="stylesheet"; title="compact" Link: <bigprint.css>; rel="alternate stylesheet"; title="big print"
Это работает и при отправке документов HTML по электронной почте. Некоторые агенты электронной почты могут изменять порядок заголовков [RFC822]. Чтобы защитить стиль от изменения порядка каскадов для таблиц, задаваемых заголовками Link, авторы могут использовать объединение заголовков для объединения нескольких экземпляров одного и того же поля заголовка. Кавычки необходимы только в случае, если значения атрибутов включают пробелы. Используйте SGML entities для ссылок на символы, недопустимые в заголовках HTTP или электронной почты или символов, которые могут быть изменены при передаче через шлюзы.
Элементы LINK и META, implied заголовками HTTP, определяются как встреченные раньше явного элемента LINK and META а разделе HEAD документа.
Содержание
Фреймы в HTML позволяют авторам представлять документы в нескольких разделах, которые могут быть независимыми или вложенными окнами. Это обеспечивает дизайнерам способ оставлять некоторую информацию видимой, в то время как другая информация прокручивается или заменяется. Например, в одном окне в одном фрейме может отображаться статический баннер, во втором навигационное меню, а в третьем - сам документ, который можно прокручивать или переходить к другому с помощью навигации во втором фрейме.
Вот простой документ с использованием фреймов:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN" "_THE_LATEST_VERSION_/frameset.dtd"> <HTML> <HEAD> <TITLE>Простой документ с фреймами</TITLE> </HEAD> <FRAMESET cols="20%, 80%"> <FRAMESET rows="100, 200"> <FRAME src="contents_of_frame1.html"> <FRAME src="contents_of_frame2.gif"> </FRAMESET> <FRAME src="contents_of_frame3.html"> <NOFRAMES> <P>В этом документе содержится: <UL> <LI><A href="contents_of_frame1.html">Миленький текстик</A> <LI><IMG src="contents_of_frame2.gif" alt="Симпатичная картинка"> <LI><A href="contents_of_frame3.html">Еще славный текстик</A> </UL> </NOFRAMES> </FRAMESET> </HTML>
это может привести примерно к следующей структуре экрана:
--------------------------------------- | | | | | | | Фрейм 1 | | | | | | | | |---------| | | | Фрейм 3 | | | | | | | | | | | Фрейм 2 | | | | | | | | | | | | | | ---------------------------------------
Если агент пользователя не может представлять фреймы или сконфигурирован так, чтобы не делать этого, он должен генерировать содержимое элемента NOFRAMES.
Документ HTML, в котором описывается компоновка фреймов (называемый документом с фреймами), выглядит не так, как документ HTML без фреймов. Атндартный документ имеет один раздел HEAD и один раздел BODY. Документ с фреймами имеет раздел HEAD и раздел FRAMESET, который заменяет раздел BODY.
В разделе FRAMESET задается расположение фреймов в основном окне агента пользователя. Кроме того, в разделе FRAMESET может присутствовать элемент NOFRAMES с альтернативным содержимым для агентов пользователей, не поддерживающих фреймы или сконфигурированных так, чтобы их не показывать.
Элементы, обычно помещаемые в раздел BODY, не должны присутствовать до первого элемента FRAMESET, иначе элемент FRAMESET будет игнорироваться.
<![ %HTML.Frameset; [ <!ELEMENT FRAMESET - - ((FRAMESET|FRAME)+ & NOFRAMES?) - подразделение окон--> <!ATTLIST FRAMESET %coreattrs; -- id, class, style, title -- rows %MultiLengths; #IMPLIED -- список длин, по умолчанию: 100% (1 строка) -- cols %MultiLengths; #IMPLIED -- список длин, по умолчанию: 100% (1 столбец) -- onload %Script; #IMPLIED -- все фреймы загружены -- onunload %Script; #IMPLIED -- все фреймы удалены -- > ]]>
Определения атрибутов
Атрибуты, определяемые в другом месте
Элемент FRAMESET определяет макет основного окна пользователя в виде прямоугольных пространств.
Установка атрибута rows определяет число горизонтальных отрезков пространства в наборе фреймов. Устанвока атрибута cols определяет число вертикальных отрезков. Для создания сетки можно установить оба атрибута одновременно.
Если атрибут rows не установлен, каждый столбец занимает всю длину страницы. Если атрибут cols не установлен, каждая строка занимает всю ширину страницы. Если не установлен ни один из этитх атрибутов, фрейм занимает всю страницу.
Фреймы создаются в направлении слева направо для столбцов и сверху вниз для строк. Если указаны оба атрибута, разделы окон создаются слева направо в верхней строке, слева направо во второй строке и т.д.
В первом примере экран разделяется горизонтально на две части (то есть создаются верхняя и нижняя части).
<FRAMESET rows="50%, 50%"> ...продолжение определения... </FRAMESET>
В следующем примере создается три столбца: второй имеет фиксированную ширину 250 пикселов (это полезно, например, для представления изображения известной ширины). Первый фрейм получает 25% оставшегося пространства, а третий - 75%.
<FRAMESET cols="1*,250,3*"> ...продолжение определения... </FRAMESET>
В следующем примере создается сетка 2x3.
<FRAMESET rows="30%,70%" cols="33%,34%,33%"> ...продолжение определения... </FRAMESET>
Для следующего примера предположим, что окно браузера имеет высоту строго 1000 пикселов. Первый раздел получает 30% общей высоты (300 пикселов). Второй имеет высоту ровно 400 пикселов. Остается 300 пикселов на два другие фрейма. Для четвертого фрейма задана высота "2*", так что он должен быть вдвое выше третьего, для которого заданы высота "*" (эквивалентно 1*). Таким оразом, третий фрейм будет иметь высоту 100 пикселов, а четвертый - 200.
<FRAMESET rows="30%,400,*,2*"> ...продолжение определения... </FRAMESET>
Абсолютные длины, если они не дают в сумме 100% реально доступного пространства, должны корректироваться агентом пользователя. Если указана длина менее фактической, оставшееся пространство должно равномерно распределяться между всеми разделами. Если указана длина, превышающая фактическую, каждый раздел должен уменьшаться в зависимости от того, какую часть пространства он занимает.
Число уровней вложенности фреймов не ограничено.
В следующем примере внешний элемент FRAMESET разделяет доступное пространство на три равных столбца. Внутренний элемент FRAMESET разделяет вторую область на две строки неравной высоты.
<FRAMESET cols="33%, 33%, 34%"> ...содержимое первого фрейма... <FRAMESET rows="40%, 50%"> ...содержимое второго фрейма, первая строка... ...содержимое второго фрейма, вторая строка... </FRAMESET> ...содержимое третьего фрейма... </FRAMESET>
Авторы могут разделять данные между несколькими фреймами, включая эти данные с помощью элемента OBJECT. Элемент OBJECT следует включать в элемент HEAD документа с фреймами и давать ему имя с помощью атрибута id. Любой документ, являющийся содержимым фрейма, может ссылаться на этот идентификатор.
В следующем примере показано обращение скрипта к элементу OBJECT, определенному для всего набора фреймов:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN" "_THE_LATEST_VERSION_/frameset.dtd"> <HTML> <HEAD> <TITLE>Это набор фреймов с элементом OBJECT в разделе HEAD</TITLE> <!-Этот элемент OBJECT не представляется! --> <OBJECT id="myobject" data="data.bar"></OBJECT> </HEAD> <FRAMESET> <FRAME src="bianca.html" name="bianca"> </FRAMESET> </HTML> <!-- In bianca.html --> <HTML> <HEAD> <TITLE>Страница Бьянки</TITLE> </HEAD> <BODY> ...начало документа... <P> <SCRIPT type="text/javascript"> parent.myobject.myproperty </SCRIPT> ...продолжение документа... </BODY> </HTML>
<![ %HTML.Frameset; [ <!-- зарезервированные имена фреймов начинаются с символа "_", остальные - с буквы --> <!ELEMENT FRAME - O EMPTY -- вложенное окно --> <!ATTLIST FRAME %coreattrs; -- id, class, style, title -- longdesc %URI; #IMPLIED -- ссылка на длинное описание (дополняет заголовок) -- name CDATA #IMPLIED -- имя целевого фрейма -- src %URI; #IMPLIED -- исходный документ для фрейма -- frameborder (1|0) 1 -- нужны границы фрейма? -- marginwidth %Pixels; #IMPLIED -- ширина полей в пикселах -- marginheight %Pixels; #IMPLIED -- высота полей в пикселах -- noresize (noresize) #IMPLIED -- разрешить пользователям изменять размер фреймов? -- scrolling (yes|no|auto) auto -- наличией полосы прокрутки -- > ]]>
Определения атрибутов
Атрибуты, определяемые в другом месте
Элемент FRAME определяет содержимое и вид одного фрейма.
Атрибут src определяет исходный документ, содержащийся в фрейме.
В следующем примере документа HTML:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN" "_THE_LATEST_VERSION_/frameset.dtd"> <HTML> <HEAD> <TITLE>Документ с фреймами</TITLE> </HEAD> <FRAMESET cols="33%,33%,33%"> <FRAMESET rows="*,200"> <FRAME src="contents_of_frame1.html"> <FRAME src="contents_of_frame2.gif"> </FRAMESET> <FRAME src="contents_of_frame3.html"> <FRAME src="contents_of_frame4.html"> </FRAMESET> </HTML>
должна создаваться примерно следующая страница:
------------------------------------------ |Фрейм 1 |Фрейм 3 |Фрейм 4 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | -------------| | | |Фрейм 2 | | | | | | | | | | | ------------------------------------------
а агент пользователя должен загружать каждый файл в отдельный раздел.
Содержимое фрейма и его определение не должны находиться в одном документе.
ПРИМЕР НЕДОПУСТИМОГО ИСПОЛЬЗОВАНИЯ:
Следующее определение фреймов не является допустимым в HTML, поскольку содержимое второго фрейма находится в документе, описывающем набор фреймов.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN" "_THE_LATEST_VERSION_/frameset.dtd"> <HTML> <HEAD> <TITLE>Документ с фреймами</TITLE> </HEAD> <FRAMESET cols="50%,50%"> <FRAME src="contents_of_frame1.html"> <FRAME src="#anchor_in_same_document"> <NOFRAMES> ...некоторый текст... <H2><A name="anchor_in_same_document">Important section</A></H2> ...некоторый текст... </NOFRAMES> </FRAMESET> </HTML>
В следующем примере показано использование декоративных атрибутов FRAME. Фрейм 1 не должен содержать полос прокрутки. В фрейме 2 вокруг содержимого (изображения) останется пустое пространство, и размер фрейма нельзя будет изменять. Между фреймами 3 и 4 не будет границы. Границы (по умолчанию) будут присутствовать между фреймами 1, 2 и 3.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN" "_THE_LATEST_VERSION_/frameset.dtd"> <HTML> <HEAD> <TITLE>Документ с фреймами</TITLE> </HEAD> <FRAMESET cols="33%,33%,33%"> <FRAMESET rows="*,200"> <FRAME src="contents_of_frame1.html" scrolling="no"> <FRAME src="contents_of_frame2.gif" marginwidth="10" marginheight="15" noresize> </FRAMESET> <FRAME src="contents_of_frame3.html" frameborder="0"> <FRAME src="contents_of_frame4.html" frameborder="0"> </FRAMESET> </HTML>
Примечание. О том, как сейчас принято определять цель фрейма, Вы можете узнать в замечаниях о фреймах в приложении.
Определения атрибутов
Информацию о рспознаваемых именах фреймов Вы можете найти в разделе о именах целевых фреймов.
В этом примере показано, как цели обеспечивают динамическое изменение содержимого фрейма. Сначала определим набор фреймов в показанном здесь документе frameset.html:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN" "_THE_LATEST_VERSION_/frameset.dtd"> <HTML> <HEAD> <TITLE>Документ с фреймами</TITLE> </HEAD> <FRAMESET rows="50%,50%"> <FRAME name="fixed" src="init_fixed.html"> <FRAME name="dynamic" src="init_dynamic.html"> </FRAMESET> </HTML>
Затем в файле init_dynamic.html мы будем ссылаться на фрейм с именем "dynamic".
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN" "_THE_LATEST_VERSION_/frameset.dtd"> <HTML> <HEAD> <TITLE>Документ с якорями с определенными целями</TITLE> </HEAD> <BODY> ...начало документа... <P>Теперь можно перейти к <A href="slide2.html" target="dynamic">слайду 2.</A> ...продолжение документа... <P>Все отлично. Переходим к <A href="slide3.html" target="dynamic">слайду 3.</A> </BODY> </HTML>
Активизация любой из ссылок приведет к открытию нового документа в фрейме с именем "dynamic", в то время как в другом фрейме, "fixed", сохраняется исходное содержимое.
В настоящий момент невозможно кодировать полностью состояние набора фреймов в URI. Таким образом, многие агенты пользователей не позволяют пользователям вносить наборы фреймов в закладки.
Если во многих ссылках в документе используется одна и та же цель, можно указать ее один раз и использовать везде с помощью атрибута target каждого элемента. Это делается с помощью утсановки атрибута target элемента BASE.
Вернемся к предыдущему примеру и определим информацию о цели в элементе BASE и удалим ее из элементов A.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN" "_THE_LATEST_VERSION_/frameset.dtd"> <HTML> <HEAD> <TITLE>Документ с определением цели в элементе BASE</TITLE> <BASE href="http://www.mycom.com/Slides" target="dynamic"> </HEAD> <BODY> ...начало документа... <P>Теперь Вы можете перейти к <A href="slide2.html">слайду 2.</A> ...продолжение документа... <P>Все отлично. Переходим к <A href="slide3.html">слайду 3.</A> </BODY> </HTML>
Агенты пользователей должны определять целевой фрейм, в который должен загружаться связанный ресурс в соответствии со следующими приоритетами (от высшего к низшему):
Агенты пользователей могут обеспечивать для пользователей механизм переопределения атрибута target.
Авторы должны указывать альтернативное содержимое для агентов пользователей, не поддерживающих фреймы или сконфигурированных так, чтобы не отображать их.
<![ %HTML.Frameset; [ <!ENTITY % noframes.content "(BODY) -(NOFRAMES)"> ]]> <!ENTITY % noframes.content "(%flow;)*"> <!ELEMENT NOFRAMES - - %noframes.content; -- контейнер альтернативного содержимого для представления без фреймов --> <!ATTLIST NOFRAMES %attrs; -- %coreattrs, %i18n, %events -- >
Элемент NOFRAMES задает содержимое, которое должно отображаться, только если не отображаются фреймы. Агенты пользователей, поддерживающие фреймы, должны отображать содержимое объявления NOFRAMES, только если они сконфигурированы так, чтобы не отображать фреймы. Агенты пользователей, не поддерживающие фреймы, должны отображать содержимое элемента NOFRAMES в любом случае.
Элемент NOFRAMES можно использовать в разделе FRAMESET документа с фреймами.
Например:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN" "_THE_LATEST_VERSION_"> <HTML> <HEAD> <TITLE>Документс фреймами и NOFRAMES</TITLE> </HEAD> <FRAMESET cols="50%, 50%"> <FRAME src="main.html"> <FRAME src="table_of_contents.html"> <NOFRAMES> <P>Это <A href="main-noframes.html"> версия документа без фреймов.</A> </NOFRAMES> </FRAMESET> </HTML>
Атрибут longdesc позволяет авторам сделать документы с использованием фреймов более доступными для людей, использующих невизуальные агенты. В этом атрибуте назначается ресурс, предоставляющий длинное описание фрейма. Авторам следует обратить внимание, что длинные описания, связанные с фреймами, прикрепляются к фрейму, а не к его содержимому. Поскольку содержимое может изменяться, исходное длинное описание, скорее всего, перестанет соответствовать содержимому фрейма. В частности, не следует включать изображение как единственное содержимое фрейма.
В следующем документе с фреймами описываются два фрейма. В левом фрейме находится содержание, а в правом сначала - изображение устрицы:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN" "_THE_LATEST_VERSION_"> <HTML> <HEAD> <TITLE>Плохо составленный документ с фреймами</TITLE> </HEAD> <FRAMESET cols="20%, 80%"> <FRAME src="table_of_contents.html"> <FRAME src="ostrich.gif" longdesc="ostrich-desc.html"> </FRAMESET> </HTML>
Обратите внимание, что изображение включено в фрейм независимо от любого элемента HTML, так что у автора нет другой возможности указать альтернативный текст, кроме атрибута longdesc. Если содержимое правого фрейма изменится (например, пользователь выберет в содержании змею), у пользователя не будет текстового доступа к новому содержимому фрейма.
Таким образом, авторы не должны помещать изображение непосредственно в фрейм. Вместо этого изображение должно включаться в отдельный документ HTML и снабжаться там соответствующим альтернативным текстом:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN" "_THE_LATEST_VERSION_"> <HTML> <HEAD> <TITLE>Хорошо составленный документ с фреймами</TITLE> </HEAD> <FRAMESET cols="20%, 80%"> <FRAME src="table_of_contents.html"> <FRAME src="ostrich-container.html"> </FRAMESET> </HTML>
<!-Файл ostrich-container.html: --> <HTML> <HEAD> <TITLE>Быстрая и мощная устрица</TITLE> </HEAD> <P> <OBJECT data="ostrich.gif" type="image/gif"> Эти устрицы здорово вкусные! </OBJECT> </HTML>
<!ELEMENT IFRAME - - (%flow;)* -- встроенное окно второго уровня --> <!ATTLIST IFRAME %coreattrs; -- id, class, style, title -- longdesc %URI; #IMPLIED -- ссылка на длинное описание (дополняет заголовок) -- name CDATA #IMPLIED -- имя целевого фрейма -- src %URI; #IMPLIED -- исходный документ для фрейма -- frameborder (1|0) 1 -- запросить границы фрейма? -- marginwidth %Pixels; #IMPLIED -- ширина полей в пикселах -- marginheight %Pixels; #IMPLIED -- высота полей в пикселах -- scrolling (yes|no|auto) auto -- наличие полосы прокрутки -- align %IAlign; #IMPLIED -- вертикальное или горизонтальное выравнивание -- height %Length; #IMPLIED -- высота фрейма -- width %Length; #IMPLIED -- ширина фрейма -- >
Определения атрибутов
Атрибуты, определяемые в другом месте
Встраиваемая инфомрация назначается атрибутом src этого элемента. Содержимое элемента IFRAME, с другой стороны, должно отображаться только агентами пользователей, не поддерживающими фреймы или сконфигурированными так, чтобы не поддерживать их.
Для поддерживающих фреймы агентов пользователей в следующем примере в текст будет помещен отделенный границей встроенный фрейм.
<IFRAME src="foo.html" width="400" height="500" scrolling="auto" frameborder="1"> [Ваш агент не поддерживает фреймы или сконфигурирован так, чтобы не отображать их. Однако Вы можете просмотреть <A href="foo.html">этот документ.</A>] </IFRAME>
Изменять размер встроенных фреймов нельзя (и поэтому у них нет атрибута noresize).
Примечание. Документы HTML могут также внедряться в другие документы HTML с помощью элемента OBJECT. Подробнее см. в разделе о внедренных документах.
Содержание
В этом разделе спецификации обсуждаются некоторые элементы и атрибуты языка HTML, которые могут использоваться для визуального форматирования элементов. Многие из них являются нежелательными.
Определение атрибутов
Этот атрибут устанавливает цвет фона тела документа (элемент BODY) или таблицы (элементы TABLE, TR, TH, and TD). В элементе BODY могут использоваться дополнительные атрибуты для указания цвета текста.
Использование этого атрибута не рекомендуется, вместо этого следует использовать таблицы стилей.
Выравнивать блочные элементы (таблицы, изображения, объекты, абзацы и т.д.) можно с помощью атрибута align. Хотя этот атрибут может устанавливаться для многих элементов HTML, диапазон его возможных значений в разных элементах может быть различным. Здесь обсуждается только значение атрибута align для текста.
Определения атрибутов
Значение по умолчанию зависит от общего направления текста. Для текста, направленного слева направо, по умолчанию используется значение align=left, я для текста, направленного справа налево - align=right.
ПРИМЕР НЕЖЕЛАТЕЛЬНОГО ИСПОЛЬЗОВАНИЯ:
В данном примере заголовок центрируется.
<H1 align="center"> How to Carve Wood </H1>
С использованием CSS, например, Вы можете достичь того же эффекта следующим образом:
<HEAD> <TITLE>How to Carve Wood</TITLE> <STYLE type="text/css"> H1 { text-align: center} </STYLE> <BODY> <H1> How to Carve Wood </H1>
Обратите внимание, что будут выровнены все объявления H1. Вы можете ограничить область действия стиля, установив атрибут class:
<HEAD> <TITLE>How to Carve Wood</TITLE> <STYLE type="text/css"> H1.wood {text-align: center} </STYLE> <BODY> <H1 class="wood"> How to Carve Wood </H1>
ПРИМЕР НЕЖЕЛАТЕЛЬНОГО ИСПОЛЬЗОВАНИЯ:
Аналогично, чтобы выровнять абзац по правому краю с помощью атрибута HTML align Вы можете записать:
<P align="right">...Текст абзаца...
а с использованием CSS:
<HEAD> <TITLE>How to Carve Wood</TITLE> <STYLE type="text/css"> P.mypar {text-align: right} </STYLE> <BODY> <P class="mypar">...Текст абзаца...
ПРИМЕР НЕЖЕЛАТЕЛЬНОГО ИСПОЛЬЗОВАНИЯ:
Чтобы выровнять по правому краю ряд абзацев, сгруппируйте их с помощью элемента
DIV:
<DIV align="right"> <P>...текст первого абзаца... <P>...текст второго абзаца... <P>...текст третьего абзаца... </DIV>
С использованием CSS свойство выравнивания текста наследуется от родительского элемента, поэтому Вы можете использовать:
<HEAD> <TITLE>How to Carve Wood</TITLE> <STYLE type="text/css"> DIV.mypars {text-align: right} </STYLE> <BODY> <DIV class="mypars"> <P>...текст первого абзаца... <P>...текст второго абзаца... <P>...текст третьего абзаца... </DIV>
Чтобы отцентрировать с использованием CSS весь документ:
<HEAD> <TITLE>How to Carve Wood</TITLE> <STYLE type="text/css"> BODY {text-align: center} </STYLE> <BODY> ...тело документа отцентрировано... </BODY>
Использование элемента CENTER абсолютно эквивалентно использованию элемента DIV с атрибутом align, для которого установлено значение "center". Использование элемента CENTER нежелательно.
Изображения и объекты могут быть "встроенными" или прикрепляться к краю страницы, временно изменяя поля текста с учетом объекта.
Атрибут align для объектов, изображений, таблиц, фреймов и т.д. приводит к тому, что объект прикрепляется к левому или правому краю. Обычно прикрепляемые объекты располагаются с новой строки. Для этого атрибута могут устанавливаться следующие значения:
ПРИМЕР НЕЖЕЛАТЕЛЬНОГО ИСПОЛЬЗОВАНИЯ:
В следующем примере показано, как прикрепить элемент IMG к левому полю.
<IMG align="left" src="http://foo.com/animage.gif" alt="моя лодка">
Некоторые атрибуты выравнивания допускают значение "center", который не прикрепляет объект, но центрирует его относительно текущих полей. Однако для элементов P и DIV значение "center" приводит к центрированию содержимого элемента.
Другой атрибут, определенный для элемента BR, управляет обтеканием текста вокруг прикрепленных объектов.
Определения атрибутов
Рассмотрим следующий визуальный сценарий, в котором обтекание текстом производится справа от изображения до разрыва строки с помощью BR:
**************** ------- | | ------- | изображение | --<BR> | | ****************
Если для атрибута clear установлено значение none, строка, следующая за BR, начнется сразу же за ним справа от изображения:
*************** ------- | | ------- | изображение | --<BR> | | ------ ***************
ПРИМЕР НЕЖЕЛАТЕЛЬНОГО ИСПОЛЬЗОВАНИЯ:
Если для атрибута clear установлено значение left или all, следующая строка будет отображаться так:
*************** ------- | | ------- | изображение | --<BR clear="left"> | | *************** -----------------
С помощью таблиц стилей Вы можете задать подобное поведение для всех концов строк для всех объектов (изображений, таблиц и т.д.), прикрепленных к левому полю. С использованием CSS Вы можете достичь этого эффекта следующим образом:
<STYLE type="text/css"> BR { clear: left } </STYLE>
Чтобы определить такое поведение только для определенных экземпляров элемента BR, следует использовать атрибут id:
<HEAD> ... <STYLE type="text/css"> BR.mybr { clear: left } </STYLE> </HEAD> <BODY> <P>... *********** ------- | | ------- | таблица | --<BR id="mybr"> | | *********** ----------------- ... </BODY>
Следующие элементы HTML определяют информацию о шрифтах. Хотя не все они нежелательны, рекомендуется использовать вместо них таблицы стилей.
<!ENTITY % fontstyle "TT | I | B | BIG | SMALL"> <!ELEMENT (%fontstyle;|%phrase;) - - (%inline;)*> <!ATTLIST (%fontstyle;|%phrase;) %attrs; -- %coreattrs, %i18n, %events -- >
Начальный тег: обязателен, Конечный тег: обязателен
Атрибуты, определяемые в другом месте
Представления элементов, определяющих стиль шрифта, зависит от агента пользователя. Далее приведено только информативное описание.
В следующем предложении показаны несколько типов текста:
<P><b>полужирный</b>, <i>курсив</i>, <b><i>полужирный курсив</i></b>, <tt>моноширинный</tt> и <big>большой</big> и <small>малый</small> текст.
Слова будут представлены следующим образом:
С использованием таблиц стилей можно достичь большего разнообразия эффектов. Чтобы задать для абзаца синий курсив с помощью CSS, запишите:
<HEAD> <STYLE type="text/css"> P.mypar {font-style: italic; color: blue} </STYLE> </HEAD> <P id="mypar">...Текст синим курсивом...
Элементы стиля шрифта должны корректно вкладываться. Представление вложенных элементов стиля зависит от агента пользователя.
Использование элементов FONT и BASEFONT нежелательно.
Формальное определение см. в Transitional DTD.
Определения атрибутов
Атрибуты, определяемые в другом месте
Элемент FONT изменяет размер и цвет шрифта для текста его содержимого.
Элемент BASEFONT устанавливает базовый размер шрифта (с помощью атрибута size). Изменения размера шрифта с помощью элемента FONT производятся относительно базового размера, установленного элементом BASEFONT. Если элемент BASEFONT не используется, по умолчанию используется размер 3.
ПРИМЕР НЕЖЕЛАТЕЛЬНОГО ИСПОЛЬЗОВАНИЯ:
В следующем примере показана разница между семью размерами шрифтов, устанавливаемых с помощью элемента FONT:
<P><font size=1>size=1</font> <font size=2>size=2</font> <font size=3>size=3</font> <font size=4>size=4</font> <font size=5>size=5</font> <font size=6>size=6</font> <font size=7>size=7</font>
Это может представляться следующим образом:
Далее показан пример установки относительного размера шрифта с использованием базового размера 3:
Базовый размер шрифта не применяется к заголовкам, если они не изменены с помощью элемента FONT с указанием относительного размера шрифта.
<!ELEMENT HR - O EMPTY - горизонтальный разделитель --> <!ATTLIST HR %coreattrs; -- id, class, style, title -- %events; >
Начальный тег: обязателен, Конечный тег: запрещен
Определения атрибутов
По умолчанию используется align=center.
Атрибуты, определяемые в другом месте
Элемент HR приводит к генерации горизонтального разделителя визуальными агентами пользователей.
Высота пустого пространства между разделителем и текстом зависит от агента пользователя.
ПРИМЕР НЕДОПУСТИМОГО ИСПОЛЬЗОВАНИЯ:
В этом примере разделители центрируются, а их размер устанавливается в половину ширины между полями. Верхний разделитель имеет толщину по умолчанию, а для нижнего установлена толщина 5 пикселов. Нижний разделитель должен представляться сплошным цветом без тени:
<HR width="50%" align="center"> <HR size="5" width="50%" align="center"> <HR noshade size="5" width="50%" align="center">
Эти разделители могут представляться следующим образом:
Содержание
Следующие замечания являются информацтивными, а не нормативными. Несмотря на использование таких слов как "необходимо" и "следует", все требования данного раздела указаны в других частях спецификации.
В данной спецификации не определяется, как соответствующие агенты пользователей должна обрабатывать общие ошибочные состояния, включая поведение агентов пользователей в случае, когда они встречают элементы, атрибуты, значения атрибутов или объекты, не указанные в данном документе.
Однако с целью содействия экспериментам и совместимости между реализациями различных версий HTML рекомендуется следующее поведение:
кроме того, агентам пользователей рекомендуется уведомлять пользователей о таких ошибках.
Поскольку агенты пользователей могут по-разному обрабатывать ошибочные состояния, авторы и пользователи не должны полагаться на определенное поведение в случае возникновения ошибки.
В спецификации HTML 2.0 ([RFC1866]) замечено, что многие агенты пользователей HTML 2.0 предполагают, что документ, которые не начинается с объявления типа документа, относится к спецификации HTML 2.0. Как показывает опыт, это некорректное предположение, данная спецификация не рекомендует такое поведение.
Из соображений совместимости авторы не должны "дополнять" HTML имеющимися механизмами SGML (например, расширяя DTD, добавляя новый набор определений комбинаций и т.д.).
Хотя URI и не включают символы, не входящие в набор ASCII, (см. [URI], раздел 2.1) авторы иногда указывают их в значениях атрибутоах, в которых должны указываться URI (например, в атрибуты, определенные как %URI; в DTD). Например, следующее значение атрибута href недопустимо:
<A href="http://foo.org/Håkon">...</A>
Для обработки символов, не входящих в набор ASCII, в таких случаях агентам пользователей рекомендуется:
Эта процедура приводит к созданию синтаксически допустимого URI (в соответствии с [RFC1738], раздел 2.2 или [RFC2141], раздел 2), не зависящему от кодировки символов, с использованием которой может быть закодирован документ HTML, в котором указан этот URI.
Примечание. Более старые агенты пользователей обрабатывают URI в HTML тривиальным способом, исопльзуя байты кодировки символов, в которой получен документ. Некоторые более старые документы HTML используют эту практику и при транскодировании поверждаются. Агенты пользователей, которым необходимо обрабатывать такие документа, при получении URI, содержащего не входящие в допустимый набор символы, должны сначала использовать приеобразование на базе UTF-8. Только если резултирующий URI не определяется, они должны пытатья построить URI на базе байтов кодировки символов, в которой получен документ.
Примечание. Такое жп преобразование на базе UTF-8 должно применяться и к значениям атрибута name элемента A.
URI, построенный при передаче формы, может использоваться как ссылка типа якоря (например, атрибут href для элемента A). К сожалению, использование символа "&" для разделения полей формы влияет на его использование в значениях атрибутов SGML для разделения ссылок на символы. Например, чтобы использовать URI "http://host/?x=1&y=2" как ссылку, его необходимо записать <A href="http://host/?x=1&y=2"> или <A href="http://host/?x=1&y=2">.
Мы рекомендуем разработчикам серверов HTTP, и особенно разработчикам CGI, обеспечивать поддержку использования ";" вместо "&", чтобы решить для атворов проблему выделения символов "&" в такой манере.
В SGML (см. [ISO8879], раздел 7.6.1) указано, что разрыв строки, непосредственно следующий за начальным тегом, должен игнорироваться, как и разрыв строки непосредственно перед конечным тегом. Это применяется ко всем элементам HTML без исключения.
Следующие два примера кода HTML должны представляться одинаково:
<P>Паша смотрит телевизор.</P>
<P> Паша смотрит телевизор. </P>
Также одинаково должны представляться следующие два примера:
<A>Мой любимый сайт</A>
<A> Мой любимый сайт </A>
Данные скрипта и стиля могут присутствовать как содержимео элемента или значение атрибута. В следующих разделах описано разграничение между разметкой HTML и другими данными.
Примечание. В DTD данные скрипта и стиля определяются как CDATA и для содержимого элемента, и для значений атрибутов. Парвила SGML не допускают ссылок на символы в содержимом элементов CDATA, но допускают их в значениях атрибутов CDATA. Авторам следует обращать особенное внимание при вырезании и вставке данных скриптов и стилей из содержимого элемента в значения атрибутов.
Такая ассимметрия, кроме того, означает, что при транскодировании из более обширной кодировки символов в менее обширную транскодер не может просто заменить непреобразуемые символы в данных скрипта или стиля на соответствующие числовые ссылки на символы; он должен провести синтаксический анализ документа HTML и иметь инфомрацию о синтакисисе каждого языка скриптов и стилей для корректной обработки данных.
Если данные скрипта или стиля являются содержимым элемента (SCRIPT и STYLE), данные начинаются непосредственно за начальным тегом элемента и заканчиваются первым разделителем ETAGO ("</"), за которым следует буква ([a-zA-Z]); обратите внимание, что это не обязательно конечный тег элемента. Поэтому авторам следует выделять последовательности "</" в содержимом. Механизмы такого выделения специфичны для каждого языка скриптов или таблиц чтилей.
ПРИМЕР НЕДОПУСТИМОГО ИСПОЛЬЗОВАНИЯ:
Следующие данные скрипта некорректно содержат последовательность "</" (как часть "</EM>") перед конечным тегом SCRIPT:
<SCRIPT type="text/javascript"> document.write ("<EM>Так работать не будет</EM>") </SCRIPT>
В JavaScript этот код можно представить допустимым образом, скрыв разделитель ETAGO перед начальной буквой SGML:
<SCRIPT type="text/javascript"> document.write ("<EM>Так работать будет<\/EM>") </SCRIPT>
В Tcl этого можно достичь следующим образом:
<SCRIPT type="text/tcl"> document write "<EM>Это будет работать<\/EM>" </SCRIPT>
В VBScript проблемы можно избежать с помощью функции Chr():
"<EM>Это будет работать<" & Chr(47) & "EM>"
Если данные скрипта или стиля являются значением атрибута (style или атрибутам внутреннего события), авторам следует выделять разделители-одинарные или двойные кавычки в значениях в соответствии с соглашениями языка скрипта или стиля. Вторам также следует выделять экземпляры "&", если этот "&" не обозначает начало ссылки на символ.
Таким образом, например, можно записать:
<INPUT name="num" value="0" onchange="if (compare(this.value, "Справка")) {gethelp()}">
Системы SGML, соответствующие [ISO8879], должны распознавать ряд возможностей, не поддерживаемых всеми агентами пользователей HTML. Авторам рекомендуется избегать исопльзования этих функций.
Авторам следует знать, что многие агенты пользователей распознают только минимизированную форму логических атрибутов, но не полную.
Например, авторам можно указать:
<OPTION selected>
вместо
<OPTION selected="selected">
Отмеченные выбранные варианты играют роль, подобную конструкции #ifdef, распознаваемой препроцессором языка C.
<![INCLUDE[ <!-- это будет включено --> ]]> <![IGNORE[ <!-- это будет игнорироваться --> ]]>
В SGML также определяется использование размеченных разделов для содержимого CDATA, в котором "<" обрабатывается не как начало тега, например,
<![CDATA[ <an> пример разметки <sgml>, не вызывающий <проблем> при записи < и т.д. ]]>
Сигнальным символом того, что агент пользвоателя не распознает размеченный раздел, является представление "]]>", когда агент пользователя по ошибке использует первый символ ">" как конец тега, начинающегося с "<![".
Инструкции по обработке - это механизм захвата платформозависимых идиот\м. Инструкция начинается с <? И заканчивается символом >
<?инструкция >
Например:
<?> <?style tt = font courier> <?page break> <?experiment> ... <?/experiment>
Авторам следует знать, что многие агенты пользвоателей представляют инструкции по обработке как часть текста документа.
Некоторые конструкции SGML SHORTTAG позволяют сэкономить время на набор, но не добавляют выразительных способностей в приложение SGML. Хотя такие конструкции технически не вносят двусмысленности, они снижают надежность документов, особенно если язык расширен и включает новые элементы. Таким образом, в то время как конструкции SHORTTAG SGML, относящиеся к атрибутам, широко используются и реализуются, те же конструкции, относящиеся к элементам, не распространены. Использующие их докменты являются соответствующими документами SGML, но вряд ли будут работать со многими существующими средствами HTML.
конструкции SHORTTAG:
<имя/.../
<имя1<имя2>
<>
</>
В этом разделе приводятся некоторые простые предложения, которые сделают документы более доступными для поисковых машин.
<LINK rel="alternate" type="text/html" href="mydoc-fr.html" hreflang="fr" lang="fr" title="La vie souterraine"> <LINK rel="alternate" type="text/html" href="mydoc-de.html" hreflang="de" lang="de" title="Das Leben im Untergrund">
<META name="keywords" content="отпуск,Греция,солнце"> <META name="description" content="Идиллический отпуск в Европе">
<LINK rel="begin" type="text/html" href="page1.html" title="Общая теория относительности">
Когда робот просматривает Web-сайт, например, http://www.foobar.com/, сначала он проверяет файл http://www.foobar.com/robots.txt. Если этот документ обнаружен, он анализирует его содержимое и смотрет, позволено ли загрузить документ. Вы можете настроить файл robots.txt только для конкретных роботов и запретить доступ к определенным каталогам или файлам.
Вот пример файла robots.txt, запрещающего доступ ко всему сайт всем роботам
User-agent: * # применяется ко всем роботам Disallow: / # запретить индексацию всех страниц
Робот просто найдет файл "/robots.txt" URI на Вашем сайте, где сайт - это сервер HTTP, работающий на определенной машине и порте. Вот некоторые примеры расположения файла robots.txt:
URI сайта | URI файла robots.txt |
---|---|
http://www.w3.org/ | http://www.w3.org/robots.txt |
http://www.w3.org:80/ | http://www.w3.org:80/robots.txt |
http://www.w3.org:1234/ | http://www.w3.org:1234/robots.txt |
http://w3.org/ | http://w3.org/robots.txt |
На одном сайте может быть один файл "/robots.txt". Точнее, не следует помещать файлы "robots.txt" в каталоги пользователей, поскольку робот их не найдет. Если Вы хотите, чтобы пользователи могли создавать свои собственные файлы "robots.txt", нужно будет объединить их все в один файл "/robots.txt". Если Вы не сделаете так, пользователи могут использовать вместо этого тег Robots META.
Некоторые советы: URI учитывают регистр, и строка "/robots.txt" должна всегда быть в нижнем регистре. Пустые строки запрещены.
В каждой записи должно быть ровно одно поле "User-agent". Робот должен свободно интерпретировать это поле. Рекомендуется строка без учета регистра, совпадающая с именем и не включающая информацию о версии.
Если указано значение "*", запись описывает политику доступа по умолчанию для любого робота, не соответствующего другим записям. В файле "/robots.txt" не может быть несколько таких записей.
В поле "Disallow" задается частичный URI, который посещать запрещено. Это может быть полный или частичный путь; любой URI, начинающийся с этого значения, нельзя будет загрузить. Например,
Disallow: /help запрещает доступ к /help.html и /help/index.html, в то время как Disallow: /help/ запретит доступ к /help/index.html, но разрешит доступ /help.html.
Пустое значение параметра "Disallow" означает, что все URI могут загружаться. В файле robots.txt должно быть по крайней мере одно поле "Disallow" .
Элемент META позволяет авторам документов HTML сообщать роботам о том, может ли документ быть проиндексирован или может ли он использоваться для получения дополнительных ссылок. Для этого не требуется вмешательство администратора сервера.
В следующем примере робот не будет ни индексировать сайт, ни анализировать ссылки.
<META name="ROBOTS" content="NOINDEX, NOFOLLOW">
В атрибуте content могут содержаться следующие слова: ALL, INDEX, NOFOLLOW, NOINDEX. Значения атрибутов name и the учитывают регистр.
Примечание. В начале 1997 года это использовалось только несколькими роботами, но в этой области ожидается изменение с повышением интереса к управлению работой роботов.
Модель таблиц HTML явилась результатом изучения существующих моделей таблиц SGML, обработки таблиц в широко распространенных пакетах обработки текстов и широкого диапазона техник компоновки таблиц в журналах, книгах и других печатных документах. Эта модель выбрана так, чтобы позволить проще выражать таблицы с возможной дополнительной сложностью. Это позволяет производить разметку таблиц HTML с помощью текстовых редакторов и сокращает расходы на изучение и подготовку к работе. Это свойство очень важно для HTML.
Все чаще и чаще люди создают таблицы путем преобразования из документов других форматов или создавая их непосредственно в редакторах WYSIWYG. Очень важно, что модель таблиц HTML может использоваться в этих средствах разработки. Это влияет на представление ячеек, занимающих несколько строк или столбцов, и на выравнивание и другие свойства представления, связанные с группами ячеек.
Главным принципом модели таблиц HTML является то, что автор не управляет изменением размера таблицы пользователем, используемыми шрифтами и т.д. Это приводит к тому, что задавать ширину столбца в пикселах становится рискованно. Вместо этого таблицы должны поддерживать динамическое изменение размера и соответствовать текущему размеру окна и шрифтам. Авторы могут определять рекомендуемые параметры типа относительной ширины столбцов, но агенты пользователей должны проверять, достаточна ли ширина столбца для представления самого широкого элемента содержимого ячейки. Если спецификацию автора можно заменить, относительные ширины отдельных столбцов не должны слишком изменяться.
Для больших таблиц или медленных сетевых содинений очень важно последовательное представление таблиц. Агенты пользователей должны иметь возможность начинать отображение таблицы до получения всех данных. Ширина окна по умолчанию для большинства агентов пользователей составляет около 80 символов, а рисунки для большинства страниц HTML состаются с учетом этого числа. Указывая число столбцов и включая условия управления шириной таблицы и шириной различных столбцов, авторы могут дават агентам пользователей подсказки, обеспечивающие последовательное представление содержимого таблицы.
Для последовательного представления браузеру необходимо число столбцов и их ширина. Шириной таблицы по умолчанию считается текущий размер окна (width="100%"). Это можно изменить, установив атрибут width-TABLE элемента TABLE. По умолчанию все столбцы имеют одинаковую ширину, но можно определить ширину стольбца с помощью элементов COL до начала таблицы.
Остается еще проблема числа столбцов. Некоторые предлагают дождаться получения первой строки таблицы, но на это может потребоваться продолжительное время, если в ячейках содержится много информации. В целом при последовательном представлении авторм имеет смысл явно указывать число столбцов в элементе TABLE.
Авторам по-прежнему необходима возможность уведомелния агентов пользователей о том, следует ли использовать последовательное представление или определять размер таблицы автоматически для соответствия содержимому ячейки. В двухпроходном режиме автоматического определения рзмера число столбцов определяется на первом проходе. В последовательном режиме число столбцов должно устанавливаться с начала. Имеет смысл установить для атрибута cols значение, равное числу столбцов, а не использовать атрибуты "layout" (например, layout="fixed" или layout="auto").
В HTML различается структурная разметка, такая как абзацы и цитаты, и средства предствления, такие как поля, шрифты, цвета и т.д. Как это различие влияет на таблицы? С точки зрения пуриста выравнивание текста в ячейках таблицы и границы между ячейками являются вопросом отображения, а не структуры. На практике, однако, их имеет смысл группировать со структурной информацией, поскольку эти свойства легко переносятся из одного приложения в другое. Модель таблиц HTML перекладывает большую часть информации о представлении на связанные таблицы стилей. Модель, представленная в данной спецификации, разработана так, чтобы использовать преимущества таких таблиц стилей, но таблицы стилей не являются обязательными.
Используемые в настоящее время издательские пакеты предоставляют очень богатые возможности по представлению таблиц, и было бы непрактично воспроизводить эти возможности в HTML без превращения HTML в сложный текстовый формат типа RTF или MIF. Однако, в данной спецификации авторам предлагается возможность выбора из ряда широко использумых классов или типов границы. Атрибут frame управляет внешним видом рамки вокруг таблицы, в то время как атрибут rules определяет выбор rulings в таблице. Более богатый уровень управления будет поддерживаться с помощью аннотаций по представлению. Атрибут style может использоваться для определения информации о представлении отдельных элементов. Дальнейшая инфомрация о представлении может задаваться с помощью элемента STYLE в заголовке документа или с помощью связанных таблиц стилей.
В процессе разработки данной спецификации был изучен ряд вопросов по заданию шаблонов обрамления для таблиц. Один из вопросов относится к видам возможных выражений. Включение поддержки вычитания и сложения краев приводит к довольно сложным алгоритмам. Например, работа по обеспечению поддержки атрибутов frame и rules всеми элементами для представления таблиц привела к алгоритму определения того, отображается ли определенная часть рамки таблицы, или нет, из 24 шагов. Даже такая сложность не обеспечивает достаточного управления представлением, отвечающего всем нуждам предсатвления таблиц. Текущая спецификация умышленно придерживается простой интуитивной модели, достаточной в большинстве случаев. Для стандартизации более сложного подхода необходима дальнейшая экспериментальная работа.
в данной спецификации определяется надмножество более простой модели, представленной в более ранней работе по HTML+. Считается, что таблицы формируются из необязатеьлного заголовка и последовательности строк, которая, в свою очередь, состоит из последовательности ячеек. Затем эта модель различает ячейки заголовка и данных и позволяет ячейкам занимать несколько строк или столбцов.
Следуя модели таблиц CALS (см. [CALS]), данная спецификация позволяет группировать строки таблицы в разделы заголовка, тела и нижнего заголовка. Это упрощает представление информации об отображении и может использоваться для повторения заголовков таблицы при переносе таблиц или для обеспечения постоянных заголовков при прокручиваемой панели тела таблицы. В разметке раздел нижнего заголовка помещается перед разделом тела таблицы. Такая оптимизация используется в CALS для работы с длинными таблицами. Это позволяет генерировать нижний заголовок, не дожидаясь обработки всей таблицы.
Для людей с плохим зрением HTML предлагает упрощение использования графического интерфейса пользоваетля на базе окон. Модель таблиц HTML включает атрибуты отметки каждой ячейки для поддержки высококачественного преобразования текста в речь. Те же атрибуты могут использоваться для поддержки автоматизированного импорта и экспорта данных таблицы в базы данных и электронные таблицы.
Если в атрибуте cols элемента TABLE определяется число столбцов, таблица может представляться с использованием фиксирвоанного расположения, в противном случае должен использоваться описанный ниже алгоритм автоматической компоновки.
Если атрибут width не указан, визуальные агенты пользователей должны использовать при форматировании значение по умочланию - 100%.
Агентам пользователей рекомендуется расширять таблицы за пределы значения, указанного в атрибуте width, в случаях, когда содержимое ячейки не входит в нее. Агенты пользователей, изменяющие указанную ширину, должны делать это не без причины. Агенты пользователей могут разбивать слова на строки во избежание использования горизонтальной прокрутки.
Для компоновки агенты пользователей должны полагать, что заголовки таблиц (задавемые элементом CAPTION) подобны ячейкам. Каждый заголовок является ячейкой, занимающей все столбцы таблицы, если он располагается внизу или вверху таблицы, и захватывающей все строки таблицы, если он располагается слева или справа.
В этом алгоритме считается, что число столбцов известно. Ширина столбцов по умолчанию должна быть одинаковая. Авторы могут переопределять это путем указания относительной или абсолютной ширины столбцов с помощью элементов COLGROUP или COL. Ширина таблицы по умолчанию - все пространство между левым и правым полями, но ее можно переобпределить с помощью атрибута width элемента TABLE или определить из абсолютной ширины столбцов. При использовании как абсолютных, так и относительных ширин столбцов, первым шагом является распределение пространства под столбцы с фиксированной шириной. После этого оставшееся пространство делится для столбцов с относительной шириной.
Одного только синтакисиса таблицы недостаточно для гарантии соответствия значений атрибутов. Например, число столбцов, определяемое атрибутом cols, может не совпадать с числом столбцов, определяемым элементами COL. В свою очередь, это может не соответствовать числу столбцов, определяемому из ячеек таблицы. Затем проблемы возникают, если столбцы чересчур узкие, и содержимое не входит в ячейку. Ширина таблицы, указанная в элементе TABLE element или COL, может привести к переполнению ячейки. Агентам пользователей рекомендуется корректно выходить и таких ситуаций, например, путем переноса слов и пересортировки и разбивки слов, если места переноса неизвестны.
В случае, если переполнение ячейки вызывает неделимый элемент, агент пользователя может отрегулировать ширины столбцов и по-новому представить таблицу. В худшем случае, если настройка ширины стоолбца и прокрутка невозможны, можно обрезать содержимое. В любом случае, если содержимое ячейки образается или разбивается, об этом соответсвующим образом должно быть сообщено пользователю.
Если атрибут COLS а начальном теге таблицы отсутствует, агент пользователя должен использовать следующий алгоритм автоматической компоновки. В нем используется два прохода данных таблицы и линейное масштабирование размера таблицы.
На первом проходе перенос строк отключен, а агент пользователя контролирует минимальную и максимальную ширину каждой ячейки. Максимальная ширина определяется самой широкой строкой. Поскольку разбивка строк отключена, абзацы обрабатываются ка кдлинные строки, если только они не разбиты с помощью элементов BR. Минимальная ширина определяется самым широким элементом текста (словом, изображением и т.д.) с учетом начальных отсутпов, маркеров и т.д. Другими словами, необходимо определить минимальную ширину, которая понадобится ячейке в отдльеном окне без переполнения. Разрешение агентам пользователей разбивать слова уменьшит необходимость в горизонтальной прокрутке и обрезание содержимого ячейки.
Этот процесс также применяется к вложенным в ячейки таблицам. Минимальная и максимальная ширина ячеек во вложенных таблицах используются для определения минимальной и максимальной ширины этих таблиц и, следовательно, для внешней таблицы. Алгоритм линейный с совокупным содержимым ячейки, и, широко говоря, не зависит от уровня вложенности.
Для выравнивания символов содержимого ячейки этот алгоритм хранит три значения минимума/максимума для каждой ячейки: Left of align char, right of align char и unaligned. Минимальная ширина столбца: max(min_left + min_right, min_non-aligned).
Минимальная и максимальная ширина ячейки используются для определения соответствующей минимальной и максимальной ширины столбцов. В свою очередь, они используются для нахождения минимальной и максимальной ширины таблицы. Обратите внимание, что ячейки могут содержать вложенные таблицы, но это не усложняет код. Следующим шагом являетс яназначение ширины столбцов в соответствии со свободным пространством (т.е. пространством между левым и правым полями).
Для ячеек, занимающих несколько столбцов, простой подход состоит в распределении минимальной/максимальной ширины равномерно меду всеми столбцами. Чуть более сложный подход - использовать минимальную/максимальную ширину ячеек, не занимающих несколько строк или столбцов, для взвешивания того, как распределяются ширины ячеек, занимающих несколько строк или столбцов. По результатам экспериментов можно сказать, что наилучшие результаты для широкого спектра таблиц дает сочетание этих двух подходов.
Граничы таблицы и поля между ячейками должны включаться в назначенную ширину столбцов. Имеется три случая:
Для каждого столбца сделайте d равным разнице между максимальной и минимальнйо шириной этого столбца. Затем установите ширину столбца равной минимальной ширине плюс d раз по W свыше D. Это позволит сделать столбцы с большей разницей между минимальной и максимальной шириной шире колонок с мнеьшей разницей.
Затем этот шаг повторяется для вложенных таблиц с использованием минимальной и максимальной ширины, полученных для всех таких таблиц в первом проходе. В данном случае ширина ячейки родительской таблицы играет роль размера текущего кона в приведенном выше описании. Этот процесс повторяется рекурсивно для всех вложенных таблиц. Самая верхняя таблицы затем представляется с исопльзованием назначенных ширин. Вложенные таблицы последовательно представляются как часть содержимого ячейки родительской таблицы.
Если ширина таблицы указана с использованием атрибута width, агент пользователя пытается установить соответсвующую ширину столбцов. Атрибут width не является ограничением, если результаты в столбцах имеют ширину меньше минимальной (т.е. неделимые).
Если относительная ширина определяется с помощью элемента COL, алгоритм изменяется, и ширина столбцов увеличивается по сравнению с минимальной для соответствия ограничениеям относительной ширины. Элементы COL должны учитываться только как подсказки, поэтому ширина столбцов не должна устанавливаться меньше минимальной. Аналогично, ширина столбцов не должна быть такой, чтобы таблица растягивалась за пределы окна. Если элемент COL задает относительную ширину, равную нулю, столбец всегда должен иметь минимальную ширину.
При использовании двухпроходного алгоритма компоновки положение выравнивания по умолчанию в отсутствие явного или унаследованного атрибута charoff может определяться путем выбора позиции, которая была бы центром строки, для которой ширина до и после выравнивающего символа являлись бы максимальными значениями для любой из строк в столбце, для которого align="этот символ". Для последовательной компоновки таблиц по умолчанию используется charoff="50%". Если несколько ячеек в разных строках одного столбца используют выравнивание, такие ячейки должны выстраиваться по умолчанию, независимо от того, какой символ используется для выравнивания. Правила обработки объектов, слишком больших для столбца, применяются, если явное или наследуемое выравнивание приводит к ситуации, когда данные превышают назначенную ширину столбца.
Выбор имен атрибутов. Предпочтительным является выбор значений атрибута frame, соответствующих атрибуту rules и значениям, используемым для выравнивания. Например: none, top, bottom, topbot, left, right, leftright, all. К сожалению, в SGML необходимо, чтобы нумерованные значения атрибутов были уникальными для каждого элемента, независимо от имени атрибута. Это сразу же вызывает проблемы со значениями "none", "left", "right" и "all". Значения атрибута frame выбраны так, чтобы избежать конфликтов имен с атрибутами rules, align и valign-COLGROUP. Это обеспечивает будущую гарантию, поскольку ожидается, что атрибуты frame и rules будут добавлены в другие элементы таблицы в будущих версиях данной спецификации. Альтернативой является способ сделать атрибут frame CDATA. Решением Рабочей группы HTML W3C явилось то, что преимущества возможности использования средств проверки корректности SGML для првоерки атрибутов на базе нумерованных значений превосходит необходимость соответствия имен.
Последовательное отображение документов, полученных по сети, представляет некоторые проблемы с формами. Агенты пользователей должны не позволять передачу форм до получения всех элементов формы.
Последовательно отображение документов приводит к некоторым проблемам относительно перемещения по клавише Tab. Эвристика перехода фокуса на tabindex с самым низким значением в документе на первый взгляд кажетя весьма логичной. Однако это подразумевает необходимость ожидания получения текста всего документа, поскольку до этого tabindex с самым низким значением может измениться. Если пользоваетль нажимает клвишу tab до этого, агентам пользоателя имеет смысл переместить фокус на низший доступный tabindex.
Если формы связаны с клиентскими скриптами, могут возникнуть дополнительные проблемы. Например, обработчик скрипта для данного поля может обращаться к полю, которого еще не существует.
В данной спецификации определяется набор элементов и атрибутов, достаточно мощный для представления основных форм. Однако возможности улучшения еще имеются. Например, в будущем можно попытаться решить следующие проблемы:
Другим возможным расширением будет добавление атрибута usemap для элемента INPUT для использования в клиентских навигационных картах, если "type=image". Элемент AREA, соответствующий местоположению щелчка, определяет передаваемое на сервер значение. Во избежание необходимости изменения серверных скриптов он может использоваться для расширения элемента AREA и указания значений x и y для использования в элементе INPUT.
В данной спецификации резервируется синтаксис для поддержки мкросов скриптов в атрибутах HTML CDATA. Это предназначено для того, чтобы сделать возможной установку атрибутов в зависимости от свойств объектов, находящихся на странице выше. Синтаксис:
attribute = "... &{ тело макроса }; ... "
Тело макроса состоит из одного или нескольких выражений в языке скрипта по умолчанию (как в атрибутах для внутренних событий). Точка с запятой, следующая за правой скобкой, всегда обязательна, в противном случае символ скобки "}" считается частью тела макроса. Не нужно и говорить, что кавычки для атрибутов, содержащих макросы скриптов, обязательны.
Обработка атрибутов CDATA происходит следующим образом:
Обработка макросов происходит при загрузке документа (или при перезагрузке), но не происходит при изменении размера документа, перерисовке и т.д.
ПРИМЕР НЕЖЕЛАТЕЛЬНОГО ИСПОЛЬЗОВАНИЯ:
Вот несколько примеров использования JavaScript. Первый устанавливает в документе случайный цвет фона:
<BODY bgcolor='&{randomrbg};'>
Вы можете установить более светлый фон в вечернее время:
<BODY bgcolor='&{if(Date.getHours > 18)...};'>
В следующем примере JavaScript используется для устанвоки координат клиентской навигационной карты:
<MAP NAME=foo> <AREA shape="rect" coords="&{myrect(imageuri)};" href="&{myuri};" alt=""> </MAP>
В этом примере устанавливается размер изображения в зависимости от свойств документа:
<IMG src="bar.gif" width='&{document.banner.width/2};' height='50%' alt="баннер">
С помощью скрипта можно устанавливать URI ссылки или изображения:
<SCRIPT type="text/javascript"> function manufacturer(widget) { ... } function location(manufacturer) { ... } function logo(manufacturer) { ... } </SCRIPT> <A href='&{location(manufacturer("widget"))};'>widget</A> <IMG src='&{logo(manufacturer("widget"))};' alt="logo">
В последнем примере показано, как атрибуты SGML CDATA могут заключаться в кавычки с использованием двойных или одинарных кавычек. Если Вы заключаете строку атрибута в одинарные кавычки, в строку атрибута следует включить двойные. Другой подход - использвоание " в качестве двойных кавычек:
<IMG src="&{logo(manufacturer("widget"))};" alt="logo">
Поскольку униальность имени целевого фрейма не гарантирована, оно подходит для описания текущей практики поиска фрейма с данным целевым именем:
Примечание. Следующий алгоритм для генерации альтернативного текста может заменяться по рекомендации Инициативной группы по доступности Web W3C (W3C Web Accessibility Initiative Group). Подробнее см. [WAIGUIDE].
Если автор не установил атрибут alt для элемента IMG или APPLET, агенты пользователя должны сами задавать альтернативный текст, вычисляемый в следующем порядке:
Если автор не установил атрибут alt для элемента INPUT, агенты пользователяей должны вычислять альтернативный текст в следующем порядке:
Якоря, внедренные изображения и все прочие элементы, содержащие URI в качестве параметров, могут привести к разыменовыванию URI в ответ на ввод пользователя. В данном случае следует рассмотреть вопросы, описанные в [RFC1738], раздел 6. Широко используемые методы отправки запросов формы -- HTTP и SMTP - обеспечивают невысокую степень конфиденциальности. Провайдеры информации, запрашивающие через формы важную информацию - особенно с помощью элементов INPUT, type="password" - должны предупреждать своих пользователей о невыосокй степени защиты.
Агент пользователя не должен отправлять файлы, отправку которых пользователь не запросил явно. Таким образом, агенты пользователей HTML должны подтверждать все имена файлов, используемые по умочланию, которые могут быть указаны в атрибуте value элемента INPUT. В скриытых управляющих элементах имена файлов указываться не должны.
В данной спецификации не содержится механизма шифрования данных; оно должно проводиться любыми другими механизмами защищенной передачи данных.
После загрузки файла обрабатывающий агент должен соответствующим образом обработать и сохранить файл.
Содержание
В HTML 4.0 введены следующие новые элементы: ABBR, ACRONYM, BDO, BUTTON, COLGROUP, DEL, FIELDSET, FRAME, FRAMESET, IFRAME, INS, LABEL, LEGEND, NOFRAMES, NOSCRIPT, OBJECT, OPTGROUP, PARAM, SPAN, TBODY, TFOOT, THEAD и Q.
Следующие элементы являются нежелательными: APPLET, BASEFONT, CENTER, DIR, FONT, ISINDEX, MENU, S, STRIKE и U.
Следующие элементы являются устаревшими: LISTING, PLAINTEXT, and XMP. Вместо них авторам следует использовать элемент PRE.
В HTML 4.0 имеется множество изменений касательно доступности, в том числе:
Теперь авторы могут определять профили с описаниями о метаданных, заданных в элементах META или LINK.
Модель таблиц HTML 4.0 происходит из работы над HTML+ и начлаьного черновика HTML3.0. Прошлая по просьбам провайдеров информации модель расширена следующим образом:
Модель таблиц HTML 4.0 также обеспечивает необязательные настройки по умолчанию в зависимости от столбцов для выравнивания, большую гибкость при определении границ и обрамления таблицы и возможность выравнивания по определенным символам. Однако ожидается, что задачу представления таблиц в ближайшем будущем возьмут на себя таблицы стилей.
Кроме того, основной целью было обеспечение совместимости с широко используемой компанией Netscape реализацией таблиц. Другой целью было упрощение импортирования таблиц в соответствии с моделью SGML CALS. В последнем черновике атрибут align совместим с последними версиями наиболее популярныз браузеров. Внесены некоторые разъяснения в роль атрибута dir и рекомендуемое поведение в случае, если используются смешанные абсолютные и относительные ширины столбцов.
Введен новый элемент, COLGROUP, позволяющий группировать наборы столбцов с различными свойствами ширины и выравнивания, определяемыми одним или несколькими элементами COL. По сравнению с предыдущими черновиками, разъяснена семантика элемента COLGROUP, а rules="basic" заменено rules="groups".
Атрибут style используется как средство расширения свойств, связанных с группами ячеек. Например, стиль линии: точечная, двойная, тонкая/толстая и т.д.; цвет/заливка для внутреннего содержимого; поля ячеек и информация о шрифтах. Это является темой спецификации таблиц стилей.
Атрибуты frame и rules изменены во избежание SGML name clashes друг с другом и во избежание clashes с атрибутами align и valign. Мотивом для этих изменений также послужило желание избежать проблем в будущем, если эта спецификация будет расширена и будет допускать атрибуты frame и rules в других элементах таблиц.
В этой спецификации вводится несколько новых атрибутов и элементов, относящихся к формм:
HTML 4.0 поддерживает более обширный набор дескрипторов устройств, так что авторы могут писать таблицы стилей в зависимости от устройств.
HTML 4.0 поддерживает документы с фреймами и встроенные фреймы.
Многие элементы теперь имеют атрибуты для событий, которые могут объединяться со скриптами; при наступлении события выполняется скрипт (например, при загрузке документа, при щелчке мыши и т.д.).
В HTML 4.0 объединяются рекомендации [RFC2070] по интернационализации HTML.
Однако эта спецификация и [RFC2070] отличаются следующим образом:
Содержание
Документ в формате HTML 4.0 состоит из трех частей:
Перед каждым элементом или после каждого элемента может находиться пустое пространство (пробелы, переход на новую строку, табуляции и комментарии). Разделы 2 и 3 должны отделяться элементом HTML.
Вот пример простого документа HTML:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <HTML> <HEAD> <TITLE>Мой первый документ HTML</TITLE> </HEAD> <BODY> <P>Всем привет! </BODY> </HTML>
В документе HTML должна быть объявлена используемая в нем версия языка HTML. Объявление типа документа указывает определение типа документа (DTD), используемое в этом документе (см. [ISO8879]).
HTML 4.0 определяет три DTD, так что авторы должны включать в свои документы одно из следующих объявлений типов. Разница между DTD заключается в поддерживаемых ими элементах.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN" "http://www.w3.org/TR/REC-html40/frameset.dtd">
URI в каждом объявлении типа документа позволяет агентам пользователей загрузить DTD и все необходимые entity sets. Следующие URI указывают на DTD и entity sets для HTML 4.0, поддерживаемого W3C:
Связь между общими идентификаторами и файлами можно указать с использованием файла каталога, за которым следует формат, рекомендуемый Открытым консорциумом SGML (см. [SGMLOPEN]). Примерный файл каталога для HTML 4.0 включен в начало раздела о справочной информации об SGML для HTML. Две последние буквы декларации указывают язык DTD. Для HTML это всегда английский ("EN").
<!ENTITY % html.content "HEAD, BODY"> <!ELEMENT HTML O O (%html.content;) -- корневой элемент документа --> <!ATTLIST HTML %i18n; -- lang, dir -- >
Начальный тэг: не обязательный, Конечный тэг: не обязательный
Определения атрибутов
Атрибуты, определяемые в любом другом месте
После объявления типа документа остальная часть документа HTML содержится в элементе HTML. Таким образом, типичный документ HTML имеет такую структуру:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <HTML> ...Здесь идут заголовок, тело и т.д... </HTML>
<!-- %head.misc;, определенный ранее как "SCRIPT|STYLE|META|LINK|OBJECT" --> <!ENTITY % head.content "TITLE & BASE?"> <!ELEMENT HEAD O O (%head.content;) +(%head.misc;) - заголовок документа --> <!ATTLIST HEAD %i18n; -- lang, dir -- profile %URI; #IMPLIED -- каталог метаинформации -- >
Начальный тэг: не обязателен, Конечный тэг: не обязательно
Определения атрибутов
Атрибуты, определяемые в любом другом месте
Элемент HEAD содержит информацию о текущем документе, такую как заголовок, ключевые слова, которые могут использоваться поисковыми машинами, и другие данные, которые не считаются содержимым документа. Агенты пользователей обычно не используют при генерации элементы из раздела HEAD. Однако они могут предоставлять пользователям информацию из раздела HEAD с помощью своих собственных механизмов.
<!-- Элемент TITLE не считается частью текста. Он должен отображаться, например, в качестве заголовка страницы или окна. В документе должен быть ровно один заголовок. --> <!ELEMENT TITLE - - (#PCDATA) -(%head.misc;) -- document title --> <!ATTLIST TITLE %i18n>
Начальный тэг: обязателен, Конечный тэг: обязателен
Атрибуты, определяемые в любом другом месте
Каждый документ HTML должен иметь элемент TITLE в разделе HEAD.
Авторы должны использовать элемент TITLE для идентификации содержимого документа. Поскольку пользователи часто обращаются к документам за пределами контекста, авторам следует обеспечивать заголовки в широком контексте. Таким образом, вместо заголовков типа "Введение", ничего не говорящих о контексте, авторам следует использовать заголовки типа "Введение в средневековое пчеловодство".
Из соображений доступности агенты пользователей всегда должны делать содержимое элемента TITLE доступным пользователям (включая элементы TITLE в кадрах). Механизм этого зависит от агента пользователя (например, в виде заголовка или произносимый).
Заголовки могут включать character entities (для символов со знаком ударения, специальных символов и т.д.), но не могут содержать другой разметки. Вот образец заголовка документа:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <HTML> <HEAD> <TITLE>Исследование динамики популяции</TITLE> ... другие элементы заголовка... </HEAD> <BODY> ... тело документа... </BODY> </HTML>
Определения атрибутов
В отличие от элемента TITLE, который предоставляет информацию обо всем документе и может присутствовать в тексте только один раз, атрибут title может сопровождать любое число элементов. Узнать, поддерживает ли элемент этот атрибут, можно в определении элемента.
Значения атрибута title могут использоваться агентами пользователя в генерации изображения по-разному. Например, визуальные браузеры часто отображают заголовок как подсказку (краткое сообщение, которое появляется, если Вы указываете на объект). Аудиоагенты пользователя могут проговаривать информацию заголовка. Например, установка этого атрибута для ссылки позволяет агентам пользователей (визуальным и невизуальным) сообщить пользователям о природе связанного ресурса:
...текст... Вот фотография <A href="http://someplace.com/neatstuff.gif" title="Me scuba diving"> как я нырял в прошлом году </A> ...еще текст...
Атрибут title играет дополнительную роль при использовании с элементом LINK для назначения внешней таблицы стилей. Подробнее см. в разделе о ссылках и таблицах стилей.
Примечание. Для улучшения качества синтеза речи в случае плохой обработки стандартными механизмами будущие версии HTML могут включать атрибут для кодирования фонематической информации.
Во время написания этой спецификации проводились работы по предоставлению авторам возможности задания большего количества машинно-читаемой информации о документах HTML и других сетевых ресурсах. Для метаданных W3C разработан Язык описания ресурсов (see [RDF]).
HTML позволяет авторам указывать метаданные -- информацию о документе вместо содержимого документа - множеством способов.
Например, чтобы указать автора документа, можно использовать элемент META следующим образом:
<META name="Author" content="Дэйв Рэггетт">
Элемент META задает свойство (здесь "Author (Автор)") и назначает ему значение (здесь - "Дэйв Рэггетт").
Данная спецификация не определяет набор допустимых свойств метаданных. Значение свойства и набор допустимых значений этого свойства должны определяться в относительном словаре, называемом профилем. Например, профиль, разработанный для помощи в индексировании документов для поисковых машин может определять такие свойства как "author", "copyright", "keywords" и т.д.
В общем случае задание метаданных состоит из двух шагов:
Помните, что поскольку профиль определяется для элемента HEAD, этот профиль применяется ко всем элементам META и LINK в заголовке документа.
Агенты пользователей не обязательно должны поддерживать механизмы метаданных. В этой спецификации не определяется интерпретация метаданных.
<!ELEMENT META - O EMPTY -- общая метаинформация --> <!ATTLIST META %i18n; -- lang, dir, для использования с содержимым -- http-equiv NAME #IMPLIED -- имя заголовка ответа HTTP -- name NAME #IMPLIED -- имя метаинформации -- content CDATA #REQUIRED - связанная информация -- scheme CDATA #IMPLIED -- выбор формы содержимого -- >
Начальный тэг: обязателен, Конечный тэг: запрещен
Определения атрибутов
Для следующих атрибутов допустимые значения и их интерпретация зависят от профиля:
Атрибуты, определяемые в любо другом месте
Элемент META может использоваться для идентификации свойств документа (например, автора, срок истечения, список ключевых слов и т.д.) и назначения им значений. В этой спецификации не определяется нормативный набор значений.
Каждый элемент META задает пару свойство/значение. Атрибут name определяет свойства, а атрибут content - значение.
Например, в следующем объявлении устанавливается значение свойства Author:
<META name="Author" content="Дэйв Рэггетт">
Атрибут lang может использоваться с элементом META для указания языка значения атрибута content. Это позволяет синтезаторам речи использовать правила произношения для разных языков.
В этом примере имя автора объявляется на французском языке:
<META name="Author" lang="fr" content="Arnaud Le Hors">
Примечание. Элемент META - это общий механизм задания метаданных. Однако некоторые элементы и атрибуты HTML уже обрабатывают некоторые части метаданных и могут использоваться авторами вместо элементов META для указания этих частей: элементы TITLE, ADDRESS, INS и DEL, атрибут title и атрибут cite.
Примечание. Если свойство, заданное с помощью элемента META, принимает значение URI, некоторые авторы предпочитают указывать метаданные с помощью элемента LINK. Таким образом, следующее объявление:
<META name="DC.identifier" content="ftp://ds.internic.net/rfc/rfc1866.txt">
можно также записать следующим образом:
<LINK rel="DC.identifier" type="text/plain" href="ftp://ds.internic.net/rfc/rfc1866.txt">
Атрибут http-equiv может использоваться вместо атрибута name; он особенно важен, если документы загружаются по протоколу передачи гипертекста (HTTP). Серверы HTTP могут использовать имя свойства, указанное в атрибуте http-equiv для создания заголовка в ответе HTTP в стиле [RFC822]. Подробнее о допустимых заголовках HTTP см. в спецификации HTTP ([RFC2068]).
В следующем примере объявление META:
<META http-equiv="Expires" content="Tue, 20 Aug 1996 14:25:27 GMT">
вернет следующий заголовок HTTP:
Expires: Tue, 20 Aug 1996 14:25:27 GMT
Это может использоваться кэш-памятью для определения того, когда следует загрузить новую копию связанного документа.
Некоторые агенты пользователей поддерживают использование элемента META для обновления текущей страницы по истечении указанного числа секунд с возможностью замены на другой URI.
<META http-equiv="refresh" content="3,http://www.acme.com/intro.html">
content - это число, указывающее задержку в секундах, за которым следует URI, который нужно загрузить по прошествии этого времени. Этот механизм широко используется для создания кратковременных заставок. Однако поскольку некоторые агенты пользователей не поддерживают этот механизм, авторам следует включить в заставку возможность перейти на следующую страницу (чтобы они на "зависли" на заставке).
Основной способ использования элемента META - задание ключевых слов, которые поисковые машины могут использовать для улучшения результатов поиска. Если информация о документе представлена в нескольких элементах META в зависимости от языка, поисковые машины могут фильтровать атрибут lang и отображать результаты поиска с использованием выбранного пользователем языка. Например,
<-- Для говорящих на американском английском --> <META name="keywords" lang="en-us" content="vacation, Greece, sunshine"> <-- Для говорящих на британском английском --> <META name="keywords" lang="en" content="holiday, Greece, sunshine"> <-- для русскоязычных пользователей --> <META name="keywords" lang="fr" content="отпуск, Греция, солнце">
Эффективность поисковых машин можно также повысить с использованием элемента the LINK для задания ссылок на переводы документа на другие языки, ссылки на версии документа для другого носителя (например, PDF), и, если документ является частью набора, ссылки на соответствующую начальную точку для просмотра набора.
Дальнейшая информация находится в разделе Как помочь поисковым машинам проиндексировать Ваш Web-сервер .
Этот пример иллюстрирует использование объявления META для включения метки PICS 1.1:
<HEAD> <META http-equiv="PICS-Label" content=' (PICS-1.1 "http://www.gcf.org/v2.5" labels on "1994.11.05T08:15-0500" until "1995.12.31T23:59-0000" for "http://w3.org/PICS/Overview.html" ratings (suds 0.5 density 0 color/hue 1)) '> <TITLE>... название документа ...</TITLE> </HEAD>
Элемент META может использоваться для указания информации по умолчанию для документа в следующих случаях:
В следующем примере для документа указывается кодировка символов ISO-8859-5
<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-5">
В этом примере используется гипотетический профиль, определяющий полезные свойства для индексирования документов. Для свойств, определяемых этим профилем - включая "author", "copyright", "keywords" и "date" -- значения устанавливаются с помощью последовательных объявлений META.
<HEAD profile="http://www.acme.com/profiles/core"> <TITLE>How to complete Memorandum cover sheets</TITLE> <META name="author" content="John Doe"> <META name="copyright" content="© 1997 Acme Corp."> <META name="keywords" content="corporate,guidelines,cataloging"> <META name="date" content="1994-11-06T08:49:37+00:00"> </HEAD>
Во время написания этой спецификации распространенной стала практика использования форматов дат, описанных в [RFC2068], раздел 3.3. Поскольку обработка этих форматов относительно сложна, мы рекомендуем авторам использовать формат даты [ISO8601]. Подробнее см. разделы об элементах INS и DEL.
Атрибут scheme позволяет авторам предоставлять агентам пользователей дополнительный контекст для корректной интерпретации метаданных. Иногда такая дополнительная информация может иметь важное значение, например, если метаданные указаны в другом формате. Например, автор может указать дату в формате "10-9-97" (неоднозначно); означает ли это 9 октября 1997 г. или 10 сентября 1997 г.? Значение атрибута scheme "Month-Date-Year" устранит неоднозначность.
В других случаях атрибут scheme может предоставлять агентам пользователей полезную, но не столь важную информацию.
Например, следующее объявление scheme поможет агентам пользователей определить, что значение свойства "identifier" - номер кода ISBN:
<META scheme="ISBN" name="identifier" content="0-8230-2355-9">
Значения атрибута scheme зависят от свойства name и связанного профиля.
Примечание. Примером профиля является Dublin Core (см. [DCORE]). Этот профиль определяет набор рекомендуемых свойств для электронных библиографических описаний и предназначен для обеспечения интероперабельности в несопоставимых моделях описаний.
<!ELEMENT BODY O O (%block;|SCRIPT)+ +(INS|DEL) - тело документа --> <!ATTLIST BODY %attrs; -- %coreattrs, %i18n, %events -- onload %Script; #IMPLIED -- документ загружен -- onunload %Script; #IMPLIED -- документ удален -- >
Начальный тэг: не обязателен, Конечный тэг: не обязателен
Определения атрибутов
Атрибуты, определяемые в любом другом месте
В теле документа располагается содержание документа. Содержимое может представляться агентом пользователя несколькими способами. Например, для визуальных браузеров Вы можете считать тело документа полотном, на котором отображается содержимое: текст, изображения, цвета, рисунки и т.д. Для аудиоагентов пользователей оно может произноситься. Поскольку предпочтительным способом задания представления документов теперь являются таблицы стилей, атрибуты представления в тэге BODY являются нежелательными.
ПРИМЕР НЕЖЕЛАТЕЛЬНОГО ИСПОЛЬЗОВАНИЯ:
В следующем фрагменте кода HTML показано использование нежелательного атрибута. Он устанавливает белый цвет фона, черный цвет текста и красный цвет гиперссылок изначально, цвет фуксии при активизации ссылок и коричневый для ссылок, по которым Вы переходили.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> <HTML> <HEAD> <TITLE>Динамика популяции</TITLE> </HEAD> <BODY bgcolor="white" text="black" link="red" alink="fuchsia" vlink="maroon"> ... тело документа... </BODY> </HTML>
Используя таблицы стилей, того же эффекта можно достичь следующим образом:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <HTML> <HEAD> <TITLE>Динамика популяции</TITLE> <STYLE type="text/css"> BODY { background: white; color: black} A:link { color: red } A:visited { color: maroon } A:active { color: fuchsia } </STYLE> </HEAD> <BODY> ... тело документа... </BODY> </HTML>
Использование внешних (связываемых) таблиц стилей обеспечивает гибкость при изменении представления без пересмотра источника документа HTML:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <HTML> <HEAD> <TITLE>Динамика популяции</TITLE> <LINK rel="stylesheet" type="text/css" href="smartstyle.css"> </HEAD> <BODY> ... тело документа... </BODY> </HTML>
Кадры и тела документов HTML. В документах, содержащих кадры, элемент BODY заменяется элементом FRAMESET. Подробнее см. в разделе о кадрах.
Определения атрибутов
<P id="myparagraph"> Этот абзац имеет уникальное имя.</P> <P id="yourparagraph"> Этот абзац тоже имеет уникальное имя.</P>
Атрибут id имеет в HTML несколько ролей:
Атрибут class, с другой стороны, назначает одно или несколько имен классов элементу; при этом элемент может называться принадлежащим к этим классам. Имя класса может использоваться несколькими экземплярами элемента. Атрибут class имеет в HTML несколько ролей:
Далее элемент exampleSPAN используется вместе с атрибутами id и class для пометки сообщений документа. Сообщения отображаются в английской и русской версиях.
<!-- английские сообщения --> <P><SPAN id="msg1" class="info" lang="en">Variable declared twice</SPAN> <P><SPAN id="msg2" class="warning" lang="en">Undeclared variable</SPAN> <P><SPAN id="msg3" class="error" lang="en">Bad syntax for variable name</SPAN>
<!-- русские сообщений --> <P><SPAN id="msg1" class="info" lang="fr">Переменная объявлена дважды</SPAN> <P><SPAN id="msg2" class="warning" lang="fr">Переменная не объявлена</SPAN> <P><SPAN id="msg3" class="error" lang="fr">Синтаксическая ошибка в имени переменной</SPAN>
Следующие правила стиля CSS сообщат агентам пользователя о необходимости отображения информации зеленым цветом, предупреждений - желтым, а сообщений об ошибках - красным:
SPAN.info { color: green } SPAN.warning { color: yellow } SPAN.error { color: red }
Помните, что русской "msg1" и английское "msg1" не могут отображаться в одном документе, поскольку они используют одно и то же значение атрибута id. Авторы могут извлечь дальнейшую пользу, используя атрибут id для усовершенствования представления отдельных сообщений, указания их в качестве целей (якорей) и т.д.
Почти каждому элементу HTML может быть назначен идентификатор и информация о классе.
Предположим, мы пишем документ о языке программирования. Этот документ должен включать ряд отформатированных примеров. Для форматирования примеров мы используем элемент PRE. Мы также назначаем цвет фона (зеленый) всем экземплярам элемента PRE, принадлежащим классу "example".
<HEAD> <TITLE>... название документа...</TITLE> <STYLE type="text/css"> PRE.example { background : green } </STYLE> </HEAD> <BODY> <PRE class="example" id="example-1"> ...код примера... </PRE> </BODY>
Установив атрибут id для этого примера, мы можем (1) создать на него гиперссылку и (2) использовать информацию о стиле, отличную от определенной в таблицы, для одного экземпляра информации о стиле.
Примечание. Атрибут id использует одно пространство имен с атрибутом name, если он используется для имен якорей. Подробнее см. в разделе о якорях с id.
Некоторые элементы HTML, которые могут присутствовать внутри тэга BODY, называются элементами "уровня блока", в то время как другие - "встроенными" (также называемыми элементами "уровня текста"). Разница между ними описана ниже:
Таблицы стилей обеспечивают средства задания отображения произвольных элементов, включая и то, генерируется ли элемент как блочный или встроенный. В некоторых случаях, например, в случае встроенного стиля для элементов списка, это может быть полезным, но вообще говоря, авторам следует избегать такого переопределения интерпретации элементов языка HTML.
Изменение традиционных выражений представления для элементов уровня блока и встроенных элементов влияет на алгоритм двунаправленного текста. Подробнее см. раздел о влиянии таблиц стилей на двунаправленность.
<!ELEMENT DIV - - (%flow;)* -- общий контейнер языка/стиля --> <!ATTLIST DIV %attrs; -- %coreattrs, %i18n, %events -- > <!ELEMENT SPAN - - (%inline;)* -- общий контейнер языка/стиля --> <!ATTLIST SPAN %attrs; -- %coreattrs, %i18n, %events -- >
Начальный тэг: обязателен, Конечный тэг: обязателен
Определения атрибутов
Атрибуты, определяемые в любом другом месте
Элементы DIV и SPAN вместе с атрибутами id и class обеспечивают общий механизм добавления в документы структуры. Эти элементы определяют встраиваемую информацию (SPAN) или информацию уровня блока (DIV), но не налагают никаких других выражений для представления контекста. Таким образом, авторы могут использовать эти элементы с таблицами стилей, атрибутами lang и т.д..
Предположим, Вы хотите сгенерировать документ в формате HTML на основе базы данных информации о клиентах. Поскольку HTML не включает элементов для идентификации таких объектов как "клиент", "номер телефона", "адрес электронной почты" и т.д., мы используем элементы DIV и SPAN для достижения нужных эффектов структуры и представления. Для структурирования информации мы могли использовать элемент TABLE следующим образом:
<!-- Пример данных из базы данных о клиентах: --> <!-- Имя: Stephane Boyera, Тел.: (212) 555-1212, Email: sb@foo.org --> <DIV id="client-boyera" class="client"> <P><SPAN class="client-title">Информация о клиенте:</SPAN> <TABLE class="client-data"> <TR><TH>Фамилия:<TD>Boyera</TR> <TR><TH>Имя:<TD>Stephane</TR> <TR><TH>Тел:<TD>(212) 555-1212</TR> <TR><TH>Email:<TD>sb@foo.org</TR> </TABLE> </DIV> <DIV id="client-lafon" class="client"> <P><SPAN class="client-title">Информация о клиенте:</SPAN> <TABLE class="client-data"> <TR><TH>Фамилия:<TD>Lafon</TR> <TR><TH>Имя:<TD>Yves</TR> <TR><TH>Тел:<TD>(617) 555-1212</TR> <TR><TH>Email:<TD>yves@coucou.com</TR> </TABLE> </DIV>
Затем мы легко сможем добавить объявление таблицы стиля для настройки представления этих записей.
Другой пример см. в разделе об атрибутах class и id.
Визуальные агенты пользователей обычно помещают символ перевода строки перед и после элементов DIV, например:
<P>ааааааааа<DIV>ббббббббб</DIV><DIV>ввввв<P>ввввв</DIV>
что обычно генерируется как:
ааааааааа ббббббббб ввввв ввввв
<!ENTITY % heading "H1|H2|H3|H4|H5|H6"> <!-- Существует шесть уровней заголовков - с H1 (наиболее важный) до H6 (наименее важный). --> <!ELEMENT (%heading;) - - (%inline;)* -- заголовки --> <!ATTLIST (%heading;) %attrs; -- %coreattrs, %i18n, %events -- >
Начальный тэг: обязателен, Конечный тэг: обязателен
Атрибуты, определяемые в любом другом месте
Заголовок кратко описывает содержание раздела, которому он предшествует. Информация из заголовка может использоваться агентами пользователей, например, для автоматического построения оглавления документа.
В языке HTML существует шесть уровней заголовков: H1 - наиболее важный - и H6 - наименее важный. Визуальные браузеры обычно отображают более важные заголовки более крупным шрифтом.
В следующем примере показано, как использовать элемент DIV для того, чтобы связать заголовок с последующим разделом документа. Это позволит Вам определить стиль для раздела (цвет фона, шрифт и т.д.) с использованием таблиц стилей.
<DIV class="section" id="forest-elephants" > <H1>Лесные слоны</H1> <P>В этом разделе мы обсуждаем менее известных лесных слонов. ...продолжение раздела... <DIV class="subsection" id="forest-habitat" > <H2>Ариал</H2> <P>Лесные слоны не живут в деревьях, а среди них. ...продолжение раздела... </DIV> </DIV>
Эту структуру можно представить с использованием информации о стиле, например:
<HEAD> <TITLE>... название документа ...</TITLE> <STYLE type="text/css"> DIV.section { text-align: justify; font-size: 12pt} DIV.subsection { text-indent: 2em } H1 { font-style: italic; color: green } H2 { color: green } </STYLE> </HEAD>
Пронумерованные разделы и ссылки
Язык HTML не генерирует номера разделов из заголовков. Это может выполняться агентами пользователей. Вскоре языки описания таблиц стилей, такие как CSS, предоставят авторам возможность управления генерацией номеров разделов (для удобства в ссылках в печатной документации, например "См. раздел 7.2").
Некоторые люди считают пропуск уровней заголовков дурным тоном. Они принимают порядок заголовков H1 H2 H1, но не принимают порядок H1 H3 H1, поскольку пропущен уровень H2.
<!ELEMENT ADDRESS - - (%inline;)* -- информация об авторе --> <!ATTLIST ADDRESS %attrs; -- %coreattrs, %i18n, %events -- >
Начальный тэг: обязателен, Конечный тэг: обязателен
Атрибуты, определяемые в любом другом месте
Элемент ADDRESS может использоваться авторами для указания контактной информации или основной части документа, такой как форма. Этот элемент часто находится в начале или в конце документа.
Например, страница на сервере W3C, относящаяся к языку HTML, может включать следующую контактную информацию:
<ADDRESS> <P><A href="../People/Raggett/">Dave Raggett</A>, <A href="../People/Arnaud/">Arnaud Le Hors</A>, contact persons for the <A href="Activity">W3C HTML Activity</A><BR> $Date: 1997/12/16 05:38:14 $ </ADDRESS>
Содержание
Предыдущий список, например, не упорядочен, он создан с помощью элемента UL:
<UL> <LI>Неупорядоченную информацию. <LI>Упорядоченную информацию. <LI>Определения. </UL>
Упорядоченный список, создаваемый с помощью элемента OL, может содержать информацию, в которой важен порядок, например, рецепт:
Списки определений, создаваемые с помощью элемента DL, могут содержать ряд пар термин/определение (хотя списки определений могут иметь и иные применения). Например, список определений можно использовать в рекламе изделия:
На языке HTML он определяется следующим образом:
<DL> <DT><STRONG>Низкая цена</STRONG> <DD> Новая модель этого изделия существенно дешевле предыдущей! <DT><STRONG>Проще работа</STRONG> <DD>Мы изменили изделие, так что с ним теперь легко работать! <DT><STRONG> Безопасно для детей </STRONG> <DD> Вы можете оставить своих детей в комнате, и изделие не причинит им вреда (не гарантируется). </DL>
Списки могут быть вложенными, разные типы списков можно использовать вместе, как в следующем примере, где список определений содержит неупорядоченный список (ингредиенты) и упорядоченный список (процедуру):
Точное представление трех типов списков зависит от агента пользователя. Не стоит использовать списки для создания отступов в тексте. Это делается с помощью таблиц стилей.
<!ELEMENT UL - - (LI)+ -- неупорядоченный список --> <!ATTLIST UL %attrs; -- %coreattrs, %i18n, %events -- > <!ELEMENT OL - - (LI)+ -- упорядоченный список --> <!ATTLIST OL %attrs; -- %coreattrs, %i18n, %events -- >
Начальный тег: обязателен, Конечный тег: обязателен
<!ELEMENT LI - O (%flow;)* -- элемент списка --> <!ATTLIST LI %attrs; -- %coreattrs, %i18n, %events -- >
Начальный тег: обязателен, Конечный тег: не обязателен
Определения атрибутов
Атрибуты, определяемые в любом другом месте
Упорядоченные и неупорядоченные списки генерируются одинаково за исключением того, что визуальные агенты пользователей нумеруют упорядоченные списки. Агенты пользователей могут представлять эти номера несколькими способами. Элементы неупорядоченного списка не нумеруются.
Оба эти типа списков состоят из последовательностей элементов списков, определяемых элементом LI (конечный тег которого можно опустить).
В этом примере показана общая структура списка.
<UL> <LI> ... первый элемент списка... <LI> ... второй элемент списка... ... </UL>
ПРИМЕР НЕЖЕЛАТЕЛЬНОГО ИСПОЛЬЗОВАНИЯ:
<UL> <LI> ... Уровень один, номер один... <OL> <LI> ... Уровень два, номер один... <LI> ... Уровень два, номер два... <OL start="10"> <LI> ... Уровень три, номер один... </OL> <LI> ... Уровень два, номер три... </OL> <LI> ... Уровень один, номер два... </UL>
Информация о порядке номеров. В упорядоченных списках невозможно продолжать нумерацию автоматически из предыдущего списка или убрать нумерацию для некоторых элементов. Однако авторы могут пропустить несколько элементов списка, установив для них атрибут value. Нумерация для последующих элементов списка продолжается с нового значения. Например:
<ol> <li value="30"> элемент списка номер 30. <li value="40"> элемент списка номер 40. <li> элемент списка номер 41. </ol>
<!-- списки определений - DT - термин, DD - его определение --> <!ELEMENT DL - - (DT|DD)+ -- список определений --> <!ATTLIST DL %attrs; -- %coreattrs, %i18n, %events -- >
Начальный тег: обязателен, Конечный тег: обязателен
<!ELEMENT DT - O (%inline;)* -- термин --> <!ELEMENT DD - O (%flow;)* -- определение --> <!ATTLIST (DT|DD) %attrs; -- %coreattrs, %i18n, %events -- >
Начальные тег: обязателен, Конечный тег: не обязателен
Атрибуты, определяемые в любом другом месте
Списки определений незначительно отличаются от других типов списков - тем, что элементы состоят из двух частей: термина и определения. Термин обозначается с помощью элемента DT и может иметь только встроенное содержимое. Описание указывается с помощью элемента DD, имеющим содержимое уровня блока.
Пример:
<DL> <DT>Dweeb <DD>young excitable person who may mature into a <EM>Nerd</EM> or <EM>Geek</EM> <DT>Cracker <DD>hacker on the Internet <DT>Nerd <DD>male so into the Net that he forgets his wife's birthday </DL>
Вот пример с несколькими терминами и определениями:
<DL> <DT>Center <DT>Centre <DD> A point equidistant from all points on the surface of a sphere. <DD> In some field sports, the player who holds the middle position on the field, court, or forward line. </DL>
Другим применением элемента DL, например, может быть разметка диалогов, где каждый элемент DT означает говорящего, а в каждом элементе DD содержатся его слова.
Примечание.Ниже приводится информативное описание поведения некоторых имеющихся на настоящий момент визуальных агентов пользователей при форматировании списков. Таблицы стилей предоставляют большие возможности управления форматированием списков (например, в отношении нумерации, соглашений, используемых в разных языках, отступов и т.д.).
Визуальные агенты пользователей обычно сдвигают вложенные списки соответственно уровню вложенности.
Для элементов OL и UL атрибут type определяет параметры генерации для визуальных агентов пользователей.
Для элемента UL возможными значениями атрибута type являются disc, square и circle. Значение, используемое по умолчанию, зависит от уровня вложенности текущего списка. Эти значения не учитывают регистр.
Представление каждого значения зависит от агента пользователя. Агенты пользователей должны пытаться представлять "disc" в виде небольшого заполненного кружка, "circle" - в виде окружности, а "square" в виде небольшого квадрата.
Графические агенты пользователь могут генерировать их как:
для значения "disc"
для значения "circle"
для значения "square"
Для элемента OL возможные значения атрибута type приведены в следующей таблице (они учитывают регистр):
Type | Стиль нумерации | |
---|---|---|
1 | арабские цифры | 1, 2, 3, ... |
a | буквы нижнего регистра | a, b, c, ... |
A | буквы верхнего регистра | A, B, C, ... |
i | римские цифры в нижнем регистре | i, ii, iii, ... |
I | римские цифры в верхнем регистре | I, II, III, ... |
Помните, что использование атрибута type нежелательно, и стили списков должны определяться с помощью таблиц стилей.
Например, с помощью CSS можно указать, что стиль нумерации для элементов списка в нумерованном списке - римские цифры нижнего регистра. В приведенном ниже примере каждый элемент OL, принадлежащий классу "withroman", обозначается римской цифрой.
<STYLE type="text/css"> OL.withroman { list-style-type: lower-roman } </STYLE> <BODY> <OL class="withroman"> <LI> Шаг один ... <LI> Шаг два ... </OL> </BODY>
Генерация списка определений также зависит от агента пользователя. Например, список:
<DL> <DT>Dweeb <DD>young excitable person who may mature into a <EM>Nerd</EM> or <EM>Geek</EM> <DT>Cracker <DD>hacker on the Internet <DT>Nerd <DD>male so into the Net that he forgets his wife's birthday </DL>
может генерироваться следующим образом:
Dweeb young excitable person who may mature into a Nerd or Geek Cracker hacker on the Internet Nerd male so into the Net that he forgets his wife's birthday
Использование элементов DIR и MENU нежелательно.
Формальное определение см. в Переходном DTD.
Атрибуты, определяемые в любом другом месте
Элемент DIR предназначался для создания многостраничных списков каталогов. Элемент MENU предназначался для использования в списках меню, состоящих из одного столбца. Оба эти элемента имеют ту же структуру, что и элемент UL, различаясь только при генерации. На практике агенты пользователей генерируют списки DIR или MENU точно так же, как список UL.
Настоятельно рекомендуется использовать вместо этих элементов элемент UL.
Содержание
В следующих разделах обсуждаются вопросы структурирования текста. Элементы представления текста (элементы выравнивания, шрифта, таблицы стилей и т.д.) обсуждаются в других частях этой спецификации. Информацию о символах см. в разделе о наборе символов документа.
Набор символов документа включает множество различных неотображаемых символов. Многие из них являются типографскими элементами, используемым в некоторых приложениях для достижения специальных визуальных эффектов отображения. В языке HTML только следующие символы определяются как неотображаемые:
Символы перевода строки также являются неотображаемыми. Помните, что хотя символы 
 и 
 определены в спецификации [ISO10646] как разделители строк и абзацев соответственно, это не определяет символы перевода строки в HTML, а также в этой спецификации они не включены в более общую категорию неотображаемых символов.
В этой спецификации не определяется поведение, отображение и пр. символов пробелов, если они явно не определены как неотображаемые символы. По этой причине для достижения визуальных эффектов форматирования, использующих неотображаемые символы вместо пробелов, авторам следует использовать соответствующие элементы и таблицы стилей.
Для всех элементов HTML, кроме последовательностей неотображаемых слово (мы используем термин "слово" для обозначения "последовательности отображаемых символов") в теге PRE. При форматировании текст агенты пользователей должны идентифицировать эти слова и обрабатывать их в соответствии с соглашениями относительно определенного языка и целевого носителя.
Форматирование может включать пробелы между словами (называемые межсловными пробелами), но соглашения относительно межсловных пробелов меняются в зависимости от сценария. Например, в латинских сценариях межсловный пробел обычно отображается как пробел набора символов ASCII ( ), в то время как в таиландской кодировке это разделитель слов нулевой ширины (​). В японской и китайской кодировке межсловный пробел обычно вообще не генерируется.
Помните, что последовательность неотображаемых символов между словами в исходном документе может вызвать отображение совершенно другого межсловного пробела (кроме элемента PRE). В частности, агенты пользователей должны прекращать ввод последовательностей неотображаемых символов при выводе межсловного пробела. Это можно и нужно делать, даже при отсутствии информации о языке (из атрибута lang, полях заголовка HTTP "Content-Language" (см. [RFC2068], раздел14.13), настроек агента пользователя и т.д.).
Элемент PRE используется для форматированного текста, в котором неотображаемые символы имеют важное значение.
Для того, чтобы избежать проблем с правилами переноса строк SGML и несоответствия между существующими применениями, авторы не должны полагаться на агенты пользователей при генерации неотображаемых символов непосредственно после начального тега или непосредственно перед конечным тегом. Таким образом, авторы и особенно средства разработки, должны писать, например:
<P>Мы предлагаем бесплатную <A>техническую поддержку</A> для зарегистрированных пользователей.</P>
и не должны писать:
<P>Мы предлагаем бесплатную<A> техническую поддержку </A>для зарегистрированных пользователей.</P>
<!ENTITY % phrase "EM | STRONG | DFN | CODE | SAMP | KBD | VAR | CITE | ABBR | ACRONYM" > <!ELEMENT (%fontstyle;|%phrase;) - - (%inline;)*> <!ATTLIST (%fontstyle;|%phrase;) %attrs; -- %coreattrs, %i18n, %events -- >
Начальный тег: обязателен, Конечный тег: обязателен
Атрибуты, определяемые в любом другом месте
Фразовые элементы добавляют в текстовые фрагменты структуру. Обычное значение фразовых элементов следующее:
Элементы EM и STRONG используются для выделения. Другие фразовые элементы имеют определенное значение в технических документах. В следующих примерах показано использование некоторых фразовых элементов:
Как сказал <CITE>Гари Трумэн</CITE>, <Q lang="en-US">The buck stops here.</Q> Подробнее см. <CITE>[ISO-0000]</CITE>. В дальнейшем используйте следующий номер ссылки: <STRONG>1-234-55</STRONG>
Представление фразовых элементов зависит от агента пользователя. Обычно визуальные агенты пользователей представляют текст элемента EM курсивом, а текст элемента STRONG полужирным шрифтом. Синтезаторы речи могут изменять параметры синтеза, например, громкость, повышение тона и скорости соответственно.
Элементы ABBR и ACRONYM позволяют авторам явно показывать использование аббревиатур и акронимов. Западные языки широко используют акронимы, такие как "GmbH", "НАТО" и "ФБР", а также аббревиатуры типа "M.", "Inc.", "et al.", "etc.". В китайском и японском языках используются аналогичные механизмы аббревиатур, когда длинное название заменяется последовательностью символов Han из оригинала. Разметка этих конструкций предоставляет агентам пользователей и вспомогательным средствам, таким как средства проверки орфографии, синтезаторы речи, переводящие системы и индексаторы поисковых машин, полезную информацию.
Содержимое элементов ABBR и ACRONYM определяет саму аббревиатуру, как она обычно отображается в тексте. Атрибут title этих элементов может использоваться для указания полной развернутой формы выражения.
Несколько примеров использования элемента ABBR:
<P> <ABBR title="World Wide Web">WWW</ABBR> <ABBR lang="fr" title="Société Nationale des Chemins de Fer"> SNCF </ABBR> <ABBR lang="es" title="Doña">Doña</ABBR> <ABBR title="Abbreviation">abbr.</ABBR>
Помните, что аббревиатуры и акронимы часто имеют различное произношение. Например, если слова "США" и "BBC" обычно произносятся побуквенно, слова "НАТО" и "ЮНЕСКО" произносятся фонетически. Другие формы аббревиатур (например, "URI" и "SQL") некоторыми людьми произносятся побуквенно, а другими - как слова. При необходимости авторам следует использовать таблицы стилей для указания произношения аббревиатур.
<!ELEMENT BLOCKQUOTE - - (%block;|SCRIPT)+ -- длинная цитата --> <!ATTLIST BLOCKQUOTE %attrs; -- %coreattrs, %i18n, %events -- cite %URI; #IMPLIED -- адрес URI документа или сообщения -- > <!ELEMENT Q - - (%inline;)* -- краткая встроенная цитата --> <!ATTLIST Q %attrs; -- %coreattrs, %i18n, %events -- cite %URI; #IMPLIED -- адрес URI документа или сообщения -- >
Начальный тег: обязателен, конечный тег: обязателен
Определения атрибутов
Атрибуты, определяемые в любом другом месте
Эти два элемента определяют текст в кавычках. Элемент BLOCKQUOTE предназначен для длинных цитат (содержимое уровня блока) и Q предназначен для коротких цитат (встроенное содержимое), в которых не нужно разбиение на абзацы.
В этом примере цитата из книги "Две твердыни" Дж. Р. Р. Толкиена отформатирована с помощью элемента blockquote.
<BLOCKQUOTE cite="http://www.mycom.com/tolkien/twotowers.html"> <P>They went in single file, running like hounds on a strong scent, and an eager light was in their eyes. Nearly due west the broad swath of the marching Orcs tramped its ugly slot; the sweet grass of Rohan had been bruised and blackened as they passed.</P> </BLOCKQUOTE>
Визуальные агенты пользователей обычно генерируют элемент BLOCKQUOTE как блок с отступом.
Визуальные агенты пользователей должны обеспечивать отображение содержимого элемента Q с кавычками в начале и в конце. Авторы не должны помещать кавычки в начало и в конец текста в элементе Q.
Агенты пользователей должны генерировать кавычки с учетом принятого в данном языке стиля (см. атрибуты lang). Во многих языках используются различные стили для внешних и внутренних (вложенных) кавычек, которые должны соответственно отображаться агентами пользователей.
В примере ниже показаны вложенные кавычки в элементе Q.
John said, <Q lang="en">I saw Lucy at lunch, she says <Q lang="en">Mary wants you to get some ice cream on your way home.</Q> I think I will get some at Ben and Jerry's, on Gloucester Road.</Q>
Поскольку в обеих цитатах используется английский язык, агенты пользователей должны генерировать их соответственно - одиночные кавычки во внутренних кавычках и двойные - во внешних:
John said, "I saw Lucy at lunch, she told me 'Mary wants you to get some ice cream on your way home.' I think I will get some at Ben and Jerry's, on Gloucester Road."
Примечание.В реализации таблиц стилей рекомендуется обеспечение механизма вставки кавычек перед цитатой, определяемой элементом BLOCKQUOTE, и после нее в соответствии с текущим языком и степенью вложенности кавычек.
Однако, поскольку некоторые авторы использовали элемент BLOCKQUOTE в основном для отступа текста, чтобы не нарушать намерения авторов, агенты пользователей не должны вставлять кавычки в стиль по умолчанию.
В связи с этим использование элемента BLOCKQUOTE для смещения текста нежелательно.
<!ELEMENT (SUB|SUP) - - (%inline;)* -- нижний индекс, верхний индекс--> <!ATTLIST (SUB|SUP) %attrs; -- %coreattrs, %i18n, %events -- >
Начальный тег: обязателен, Конечный тег: обязателен
Атрибуты, определяемые в любом другом месте
Часто для правильной генерации необходимы верхние и нижние индексы (например, во французском языке). В этих случаях для разметки текста должны использоваться элементы SUB и SUP.
H<sub>2</sub>O E = mc<sup>2</sup> <SPAN lang="fr">M<sup>lle</sup> Dupont</SPAN>
Авторы традиционно разделяют свои тексты на последовательности абзацев. Организация информации в абзацы не влияет на представление абзаца: абзацы с двойным выравниванием содержат те же мысли, что и абзацы с выравниванием влево.
Разметка HTML для определения абзаца проста: элемент P определяет новый абзац.
Визуальное представление абзаца не так просто. Имеется ряд проблем, стилистических и технических:
Эти вопросы обсуждаются ниже. Выравнивание абзаца и плавающие объекты обсуждаются далее в этом документе.
Начальный тег: обязателен, Конечный тег: необязателен
Атрибуты, определяемые в любом другом месте
Элемент P представляет абзац. В нем не могут содержаться элементы уровня блока (включая и сам элемент P).
Мы призываем авторов не использовать пустой элемент P. Агенты пользователей должны игнорировать пустые элементы P.
Переходом на следующую строку считается возврат каретки (
), перевод строки (�OA;) или пара возврат каретки/перевод строки. Все переходы на другую строку являются непечатными символами.
Подробнее о переходе на другую строку в спецификации SGML см. в разделе замечаний о переходе на новую строку в приложении.
<!ELEMENT BR - O EMPTY -- принудительный переход на новую строку --> <!ATTLIST BR %coreattrs; -- id, class, style, title -- >
Начальный тег: обязателен, Конечный тег: запрещен
Атрибуты, определяемые в любом другом месте
Элемент BR принудительно разбивает (заканчивает) текущую строку текста.
Для визуальных агентов пользователей можно использовать атрибут clear для определения того, обтекает ли следующая за элементом BR разметка изображения и другие объекты, плавающие относительно левого или правого поля или начинается ниже объекта. Дальнейшая информация приведена в разделе о выравнивании и плавающих объектах. Авторам рекомендуется использовать таблицы стилей для управления обтеканием текстом изображений и других объектов.
С использованием двунаправленного форматирования, элемент BR должен действовать так же, как действует символ РАЗДЕЛИТЕЛЬ СТРОКИ [ISO10646] в двунаправленном алгоритме.
Иногда авторам нужно избежать перехода на новую строку между двумя определенными словами. Комбинация символов (  или  ) действует как неразрывный пробел.
В HTML имеется два типа переносов: простой и мягкий перенос. Простой перенос должен интерпретироваться агентами пользователя просто как любой другой символ. Мягкий перенос показывает агенту пользователя, где можно сделать переход на новую строку.
Браузеры, которые интерпретируют мягкие переносы, должны обеспечивать следующую семантику: если строка прекращается в месте мягкого переноса, в конце первой строки должен отображаться символ переноса. Если строка не прерывается в месте мягкого переноса, символ переноса отображаться не должен. При выполнении таких операций как поиск и сортировка мягкие переносы всегда должны игнорироваться.
В языке HTML простой перенос представляется символом "-" (- или -). Мягкий перенос представляется комбинацией символов ­ (­ или ­)
<!ENTITY % pre.exclusion "IMG|OBJECT|BIG|SMALL|SUB|SUP"> <!ELEMENT PRE - - (%inline;)* -(%pre.exclusion;) - форматированный текст --> <!ATTLIST PRE %attrs; -- %coreattrs, %i18n, %events -- >
Начальный тег: обязателен, Конечный тег: обязателен
Определения атрибутов
Атрибуты, определяемые в любом другом месте
Элемент PRE сообщает визуальным агентам пользователей, что содержащийся в нем текст "отформатирован". При обработке форматированного текста визуальные агенты пользователей:
Невизуальные агенты пользователей не обязаны учитывать дополнительные непечатные символы в содержимом элемента PRE.
Подробнее о переходе на новую строку в спецификации SGML см. в разделе замечаний о переходе на новую строку в приложении.
В приведенном выше фрагменте DTD указывается, какие элементы не могут находиться в объявлении PRE. То же самое выполняется в HTML 3.2; это предназначено для сохранения постоянного межстрочного интервала и выравнивания столбцов для текста, генерируемого с использованием шрифта с символами равной ширины. Авторам не рекомендуется изменять такую обработку с помощью таблиц стилей.
В следующем примере показана отформатированная строфа из стихотворения Шелли To a Skylark:
<PRE> Higher still and higher From the earth thou springest Like a cloud of fire; The blue deep thou wingest, And singing still dost soar, and soaring ever singest. </PRE>
Вот как она обычно отображается:
Higher still and higher From the earth thou springest Like a cloud of fire; The blue deep thou wingest, And singing still dost soar, and soaring ever singest.
Символ горизонтальной табуляции
Символ горизонтальной табуляции (десятичный символ 9 в [ISO10646] и [ISO88591]) обычно интерпретируется визуальными агентами пользователей как наименьшее ненулевое число пробелов, необходимое для того, чтобы сдвинуть символы на позицию табуляции, которые находятся через каждые 8 символов. Настоятельно не рекомендуется использовать горизонтальные табуляции в форматированном тексте, поскольку при редактировании установка других значений табуляции может привести к неправильному выравниванию в документах.
Примечание.В следующем разделе содержится информативное описание обработки некоторыми из визуальных агентов пользователя форматированного текста. Таблицы стилей предоставляют лучшие возможности управления форматированием текста.
Визуальное генерирование абзацев зависит от агента пользователя. Обычно абзацы генерируются с выравниванием влево и неровным правым полем. Для направления текста справа налево используются другие значения по умолчанию.
Агенты пользователей HTML традиционно генерируют абзацы с непечатным символом перед абзацем и после него, например,
Одновременно начали формироваться система нумерации, календарь, иероглифическое письмо и технически развитое искусство, все, что позже повлияло на других людей. В рамках этого развития или культурного прогресса Предклассическая эпоха подразделяется на Ранний, Средний и Поздний периоды, к которым можно добавить переходный или протоклассический период, некоторые черты которого будут потом присущи цивилизациям Америки.
Это отличается от стиля, используемого в романах, где первая строка каждого абзаца смещена, а интервал между последней строкой текущего абзаца и первой строкой следующего не отличается от межстрочных интервалов внутри абзаца, например,
Одновременно начали формироваться система нумерации, календарь, иероглифическое письмо и технически развитое искусство, все, что позже повлияло на других людей. В рамках этого развития или культурного прогресса Предклассическая эпоха подразделяется на Ранний, Средний и Поздний периоды, к которым можно добавить переходный или протоклассический период, некоторые черты которого будут потом присущи цивилизациям Америки.
Следуя установкам браузера NCSA Mosaic, созданного в 1993 году, агенты пользователей обычно не выравнивают оба поля, частично из-за сложности этого процесса при отсутствии специальных процедур расстановки переносов. Использование таблиц стилей и шрифтов без псевдонимов с субпиксельным позиционированием обещает авторам текстов на языке HTML более широкие возможности.
Таблицы стилей предоставляют широкие возможности управления размером и стилем шрифтов, полями, расстояниями перед и после абзацев, отступом первой строки, выравниванием и многими другими аспектами. Таблица стилей агента пользователя, используемая по умолчанию, генерирует элементы P как показано выше. В принципе, можно переопределить такую генерацию абзацев, без использования символов перехода на следующую строку, которые существенно изменяют абзац. Вообще же, поскольку это может запутать читателей, так делать не рекомендуется.
По соглашению визуальные агенты HTML разбивают текстовые строки так, чтобы они входили в пределы используемых полей. Алгоритмы разбиения зависят от сценария форматирования.
В западных сценариях, например, текст должен разбиваться только в позиции, где стоит неотображаемый символ. Ранние версии агентов пользователей некорректно разбивали строки сразу же после начального тега или перед конечным тегом элемента, что приводило к нарушению пунктуации. Например, рассмотрите предложение:
Статуя <a href="cih78">Свободы</a>, которая является ...
Разбиение строки сразу перед конечным тегом элемента A приведет к тому, что запятая будет помещена в начало следующей строки:
Статуя Свободы , которая является ...
Это ошибка, поскольку в разметке в этой позиции нет неотображаемого символа.
<!-- INS/DEL are handled by inclusion on BODY --> <!ELEMENT (INS|DEL) - - (%flow;)* -- вставленный текст, удаленный текст --> <!ATTLIST (INS|DEL) %attrs; -- %coreattrs, %i18n, %events -- cite %URI; #IMPLIED -- информация о причине изменения -- datetime %Datetime; #IMPLIED -- дата и время изменения -- >
Начальный тег: обязателен, Конечный тег: обязателен
Определения атрибутов
Атрибуты, определяемые в любом другом месте
Элементы INS и DEL используются для разметки вставленных или удаленных разделов документа по отношению к другой версии документа (например, в черновике законопроекта, куда юристы должны вносить поправки).
Эти два элемента необычны для HTML, поскольку они могут служить элементами уровня блока или встроенными элементами (но не теми и другими). Они могут содержать одно или несколько слов в абзаце или один или несколько элементов уровня блока - абзацев, списков и таблиц.
Это пример законопроекта о количестве депутатов у окружного шерифа - 3 исправлено на 5.
<P> У шерифа может быть <DEL>3</DEL><INS>5</INS> депутатов. </P>
Элементы INS и DEL не должны включать содержимое уровня блока, если они являются встроенными элементами.
ПРИМЕР НЕДОПУСТИМОГО ИСПОЛЬЗОВАНИЯ:
Ниже показан недопустимый код HTML.
<P> <INS><DIV>...содержимое уровня блока...</DIV></INS> </P>
Агенты пользователей должны генерировать вставленный и удаленный текст так, чтобы изменения были очевидны. Например, вставленный текст может отображаться специальным шрифтом, удаленный текст может вообще не отображаться, отображаться перечеркнутым или со специальными пометками и т.д.
Оба примера ниже соответствуют 5 ноября 1994 года, 20 ч. 15 мин. 30 с по стандартному восточному времени США.
1994-11-05T13:15:30Z 1994-11-05T08:15:30-05:00
С использованием элемента INS получаем:
<INS datetime="1994-11-05T08:15:30-05:00" cite="http://www.foo.org/mydoc/comments.html"> Более того, последние цифры из отдела маркетинга говорят о том, что это полезная практика. </INS>
В документе "http://www.foo.org/mydoc/comments.html" должны содержаться комментарии о том, почему эта информация помещена в документ.
Авторы также могут оставлять комментарии о вставленном или удаленном тексте для элементов INS и DELс помощью атрибута title. Агенты пользователей могут представлять эту информацию пользователю (например, в виде всплывающего сообщения). Например:
<INS datetime="1994-11-05T08:15:30-05:00" title="Изменено в результате комментариев Михаила А. о встрече."> Более того, последние цифры из отдела маркетинга говорят о том, что это полезная практика. </INS>
Содержание
Модель таблиц HTML позволяет авторам упорядочивать данные -- текст, форматированный текст, изображения, ссылки, формы, поля форм, другие таблицы и т.д. - в строки и столбцы ячеек.
С каждой таблицей может быть связан заголовок (см. элемент CAPTION), предоставляющий краткое описание таблицы. Можно также указать и более длинное описание (с помощью атрибута summary) для удобства людей, использующих агенты на базе азбуки Бройля или речи.
Строки таблицы могут группироваться в разделы заголовков, нижних заголовков и тела, (с помощью элементов THEAD, TFOOT и TBODY соответственно). Группы строк convey дополнительную структурную информацию и могут генерироваться агентами пользователей различными способами, отображающими эту структуру. Агенты пользователей могут использовать подразделение на заголовки/тело/нижние заголовки для поддержки прокрутки тела независимо от заголовков. При печати длинных таблиц информация из заголовков может повторяться на каждой странице таблицы.
Авторы также могут группировать столбцы для предоставления дополнительной структурной информации, которая может использоваться агентами пользователей. Более того, авторы могут объявлять свойства столбцов в начале определения таблицы (с помощью элементов COLGROUP и COL) таким образом, который позволяет агентам пользователей генерировать таблицу последовательно, а не ждать считывания всех данных таблицы перед тем, как начать генерацию.
Ячейки таблицы могут содержать "заголовок" (см. элемента TH) или "данные" (см. элемент TD). Ячейки могут распространяться на несколько строк или столбцов. Модель таблиц языка HTML 4.0 позволяет авторам помечать каждую ячейку, так что невизуальным агентам пользователей будет проще работать с информацией о ячейках. Эти механизмы не только существенно облегчают доступ пользователям с физическими недостатками, но и делают его обработку таблиц возможной для мультирежимных беспроводных браузеров с ограниченными возможностями отображения (например, Web-совместимых пейджеров и телефонов).
Не следует использовать таблицы только как средство компоновки содержимого документа, поскольку это может вызвать проблемы при генерации для невизуальных средств. Кроме того, если метки использовать с графикой, это может привести к тому, что пользователям придется выполнять горизонтальную прокрутку, чтобы просмотреть таблицу, созданную в системе с большим экраном. Для уменьшения возможности этих проблем авторам следует использовать для компоновки документа таблицы стилей, а не таблицы.
Примечание. В этой спецификации более подробная информация о таблицах приводится в разделах о вопросах применения и rationale создания таблиц.
Ниже показана простая таблица, на примере которой иллюстрируются некоторые возможности модели таблиц языка HTML. Следующее определение:
<TABLE border="1" summary="В этой таблице приводится некоторая статистика о фруктовых мухах: средняя высота и вес, процент мух с красными глазами (особей мужского и женского пола)."> <CAPTION><EM>Тестовая таблица с объединенными ячейками</EM></CAPTION> <TR><TH rowspan="2"><TH colspan="2">Средний <TH rowspan="2">Красные<BR>глаза <TR><TH>высота<TH>вес <TR><TH>мужской пол<TD>1.9<TD>0.003<TD>40% <TR><TH>женский пол<TD>1.7<TD>0.002<TD>43% </TABLE>
должно генерироваться на терминале примерно следующим образом:
Тестовая таблица с объединенными ячейками /----------------------------------------------------------\ | | Средний | Красные | | |-------------------| глаза | | | высота | вес | | |----------------------------------------------------------| | Мужской пол | 1.9 | 0.003 | 40% | | |----------------------------------------------------------| | Женский пол | 1.7 | 0.002 | 43% | | \----------------------------------------------------------/
или следующим образом - графическими агентами пользователей:
<!ELEMENT TABLE - - (CAPTION?, (COL*|COLGROUP*), THEAD?, TFOOT?, TBODY+)> <!ATTLIST TABLE -- таблица -- %attrs; -- %coreattrs, %i18n, %events -- summary %Text; #IMPLIED -- цель/структура для речевого вывода -- width %Length; #IMPLIED -- ширина таблицы -- border %Pixels; #IMPLIED -- толщина рамки вокруг таблицы -- frame %TFrame; #IMPLIED -- какие части рамки нужно генерировать -- rules %TRules; #IMPLIED -- rulings между строками и столбцами -- cellspacing %Length; #IMPLIED -- расстояние между ячейками -- cellpadding %Length; #IMPLIED -- расстояние внутри ячеек -- >
Начальный тег: обязателен, конечный тег: обязателен
Определения атрибутов
Атрибуты, определяемые в любом другом месте
Элемент TABLE содержит все другие элементы, определяющие заголовок, строки, содержимое и форматирование.
В следующем списке описано, какие операции может выполнять агент пользователя при генерации таблиц:
Модель таблиц HTML разработана так, чтобы с помощью автора агенты пользователей могли генерировать таблицы последовательно (т.е. по мере получения строк таблицы), а не ждали получения всей таблицы до начала генерации.
Чтобы агенты пользователей могли форматировать таблицу за один проход, авторы должны сообщить агентам пользователей следующую информацию:
Более точно агент пользователя может сгенерировать таблицу за один проход, когда ширина столбцов указана с использованием комбинации элементов COLGROUP и COL. Если для какого-либо столбца указана относительная ширина или ширина в процентах (см. раздел о подсчете ширины столбцов), авторы должны также указать ширину самой таблицы.
Направление таблицы либо наследуется (по умолчанию используется направление слева направо), либо определяется атрибутом dir элемента TABLE.
Для таблиц, направление которых слева направо, нулевой столбец находится слева, а нулевая строка - сверху. Для таблиц, направление которых справа налево, нулевой столбец находится справа, а нулевая строка - сверху.
Если агент пользователя allots в строку дополнительные ячейки (см. раздел о подсчете числа столбцов в таблице), дополнительные ячейки строки добавляются в таблицу справа для таблиц, имеющих направление слева направо, и слева для таблиц, имеющих направление справа налево.
Помните, что TABLE - единственный элемент, для которого атрибут dir обращает визуальный порядок столбцов; нельзя изменить порядок одной строки (TR) или группы столбцов (COLGROUP).
Если для элемента TABLE установлен атрибут dir, он также влияет на направление текста в ячейках таблицы (поскольку атрибут dir наследуется элементами уровня блока).
Чтобы определить таблицу с направлением справа налево, установите атрибут dir следующим образом:
<TABLE dir="RTL"> ...продолжение таблицы... </TABLE>
Направление текста в отдельных ячейках можно изменить, установив атрибут dir для элемента, определяющего ячейку. Подробнее о вопросах направления текста см. в разделе о двунаправленном тексте.
<!ELEMENT CAPTION - - (%inline;)* -- caption таблицы --> <!ENTITY % CAlign "(top|bottom|left|right)"> <!ATTLIST CAPTION %attrs; -- %coreattrs, %i18n, %events -- >
Начальный тег: обязателен, конечный тег: обязателен
Определения атрибутов
Атрибуты, определяемые в любом другом месте
Если элемент CAPTION присутствует, его текст должен описывать предмет таблицы. Элемент CAPTION может располагаться только непосредственно после начального тега TABLE. Элемент TABLE может включать только один элемент CAPTION.
Визуальные агенты пользователей позволяют sighted people быстро grasp структуру таблицы из заголовков и caption. Последствием этого является то, что captions не будут совпадать с краткими описаниями назначения и структуры таблицы с точки зрения людей, использующих невизуальные агенты.
Таким образом, авторы должны позаботиться о предоставлении дополнительной информации, описывающей назначение и структуру таблицы с помощью атрибута summary элемента TABLE. Это особенно важно для таблиц, не имеющих captions. На примерах ниже показано использование атрибута summary.
Визуальные агенты пользователей должны избегать clipping любой части таблицы, включая caption, если не предоставлено средство доступа ко всем частям, например, с помощью горизонтальной или вертикальной прокрутки. Мы рекомендуем, чтобы текст caption разбивался так, чтобы иметь ту же ширину, что и таблица. (См. также раздел о рекомендуемых алгоритмах компоновки.)
<!ELEMENT THEAD - O (TR)+ -- заголовок таблицы --> <!ELEMENT TFOOT - O (TR)+ -- нижний заголовок таблицы -->
Начальный тег: обязателен, конечный тег: необязателен
<!ELEMENT TBODY O O (TR)+ -- тело таблицы -->
Начальный тег: необязателен, конечный тег: необязателен
<!ATTLIST (THEAD|TBODY|TFOOT) -- раздел таблицы -- %attrs; -- %coreattrs, %i18n, %events -- %cellhalign; -- горизонтальное выравнивание в ячейках -- %cellvalign; -- вертикальное выравнивание в ячейках -- >
Атрибуты, определяемые в любом другом месте
Строки таблицы могут группироваться в заголовки, нижние заголовки и один или несколько разделов тела таблицы с помощью элементов THEAD, TFOOT и TBODY соответственно. Это подразделение позволяет агентам пользователей поддерживать прокрутку тела таблицы независимо от заголовков. При печати длинных таблиц информация из заголовков может повторяться на каждой странице, на которой имеются данные таблицы.
Заголовки таблицы должны содержать информацию о столбцах таблицы. Тело таблицы должно содержать строки данных таблицы.
Если элементы THEAD, TFOOT и TBODY присутствуют, каждый из них содержит группу строк. Каждая группа строк должна содержать по крайней мере одну строку, определяемую элементом TR.
В этом примере показан порядок и структура заголовков таблицы, нижних заголовков и тел.
<TABLE> <THEAD> <TR> ...заголовок... </THEAD> <TFOOT> <TR> ...нижний заголовок... </TFOOT> <TBODY> <TR> ...первая строка данных блока 1... <TR> ...вторая строка данных блока 1... </TBODY> <TBODY> <TR> ...первая строка данных блока 2... <TR> ...вторая строка данных блока 2... <TR> ...третья строка данных блока 2... </TBODY> </TABLE>
Элемент TFOOT должен располагаться до элемента TBODY в определении TABLE, чтобы агенты пользователей могли генерировать нижний заголовок до получения всех (возможно, многочисленных) строк данных. Ниже приводится сводка обязательных тегов и тегов, которые можно опустить:
Соответствующий спецификации агент пользователя при разборе должен obey эти правила из соображений совместимости с предыдущими версиями.
Таблицу из предыдущего примера можно сократить, удалив конечные теги, как показано ниже:
<TABLE> <THEAD> <TR> ...верхний заголовок... <TFOOT> <TR> ...нижний заголовок... <TBODY> <TR> ...первая строка данных блока 1... <TR> ...вторая строка данных блока 1... <TBODY> <TR> ...первая строка данных блока 2... <TR> ...вторая строка данных блока 2... <TR> ...третья строка данных блока 2... </TABLE>
Разделы THEAD, TFOOT и TBODYдолжны содержать одинаковое число столбцов.
Группы столбцов позволяют создавать структурные подразделения внутри таблицы. Авторы могут выделять такую структуру с помощью таблиц стилей или атрибутов HTML (например, атрибут rules для элемента TABLE). Пример визуального представления группы столбцов см. в примере таблицы.
Таблица может содержать одну неявную группу столбцов (элемент COLGROUP не разделяет столбцы) или любое число явных групп столбцов (каждая из которых отделяется одним экземпляром элемента COLGROUP).
Элемент COL позволяет авторам использовать одни и те же атрибуты в различных столбцах, не используя структурной группировки. "span" элемента COL - это число столбцов, использующих атрибуты этого элемента.
<!ELEMENT COLGROUP - O (col)* -- группа столбцов таблицы --> <!ATTLIST COLGROUP %attrs; -- %coreattrs, %i18n, %events -- span NUMBER 1 -- число столбцов в группе, используемое по умолчанию -- width %MultiLength; #IMPLIED -- ширина для вложенных элементов COL, используемая по умолчанию -- %cellhalign; -- горизонтальное выравнивание в ячейках -- %cellvalign; -- вертикальное выравнивание в ячейках -- >
Начальный тег: обязателен, Конечный тег: необязателен
Определения атрибутов
Агенты пользователей должны игнорировать этот атрибут, если элемент COLGROUP содержит один или несколько элементов COL.
Этот атрибут определяет ширину каждого столбца в текущей группе, используемую по умолчанию. Кроме стандартных значений в пикселах, процентах и относительных значений, в этом атрибуте может использоваться специальная форма "0*" (ноль со звездочкой), которая означает, что ширина каждого столбца в группе должна быть минимальной, необходимой для размещения содержимого столбца. Подразумевается, что содержимое столбца известно до того, как можно будет корректно вычислить его ширину. Авторы должны знать, что использование "0*" не позволит агентам пользователей генерировать таблицу последовательно.
Этот атрибут переопределяется для любого столбца из группы, для которого значение атрибута width задано в элементе COL.
Атрибуты, определяемые в любом другом месте
Элемент COLGROUP создает явную группу столбцов. Число столбцов в группе может быть указано двумя взаимоисключающими способами:
Преимуществом использования атрибута span является то, что авторы могут группировать информацию о ширине столбцов. Таким образом, если в таблице содержится сорок столбцов, каждый из которых имеет ширину 20 пикселов, проще написать:
<COLGROUP span="40" width="20"> </COLGROUP>
чем:
<COLGROUP> <COL width="20"> <COL width="20"> ...все сорок элементов COL... </COLGROUP>
Если необходимо выделить столбец (например, для информации о стиле, для указания информации о ширине и т.д.) в группе, авторы должны определить этот столбец с помощью элемента COL. Таким образом, чтобы применить специальную информацию о стиле к последнему столбцу предыдущей таблице, мы выделяем его следующим образом:
<COLGROUP width="20"> <COL span="39"> <COL id="format-me-specially"> </COLGROUP>
Атрибут width элемента COLGROUP наследуют все сорок столбцов. Первый элемент COL относится к первым 39 столбцам (ничего особенного для них не делая), а второй назначает значение idсороковому столбцу, так что на него можно будет ссылаться в таблицах стилей.
Таблица в следующем примере содержит две группы столбцов. Первая группа включает 10 столбов, вторая - 5. Ширина по умолчанию для каждого столбца в первой группе - 50 пикселов. Ширина каждого столбца во второй группе - минимальная, необходимая для этого столбца.
<TABLE> <COLGROUP span="10" width="50"> <COLGROUP span="5" width="0*"> <THEAD> <TR><TD> ... </TABLE>
<!ELEMENT COL - O EMPTY -- столбец таблицы --> <!ATTLIST COL -- группы и свойства столбцов -- %attrs; -- %coreattrs, %i18n, %events -- span NUMBER 1 -- атрибут COL влияет на N столбцов -- width %MultiLength; #IMPLIED -- ширина столбца -- %cellhalign; -- горизонтальное выравнивание в ячейках -- %cellvalign; -- вертикальное выравнивание в ячейках -- >
Начальный тег: обязателен, Конечный тег: запрещен
Определения атрибутов
Атрибуты, определяемые в любом другом месте
Элемент COL позволяет авторам группировать определения атрибутов для столбцов таблицы. Атрибут COL не группирует столбцы структурно - эту роль играет элемент COLGROUP. Элементы COL являются пустыми и служат только для поддержания атрибутов. Они могут находиться внутри или вне явной группы столбцов (т.е. элемента COLGROUP).
Атрибут width для элемента COL означает ширину каждого столбца в span элемента.
Имеется два способа определения числа столбцов в таблице (в порядке старшинства):
Если таблица содержит элементы COLGROUP или COL, и эти два способа подсчет дают разные результаты, это является ошибкой.
Когда агент пользователя подсчитал число столбцов в таблице, он может сгруппировать их в группы столбцов.
Например, для каждой из следующих таблиц, оба способа подсчета числа столбцов должны дать три столбца. Первые три таблицы могут генерироваться последовательно.
<TABLE> <COLGROUP span="3"></COLGROUP> <TR><TD> ... ...строки... </TABLE> <TABLE> <COLGROUP> <COL> <COL span="2"> </COLGROUP> <TR><TD> ... ...строки... </TABLE> <TABLE> <COLGROUP> <COL> </COLGROUP> <COLGROUP span="2"> <TR><TD> ... ...строки... </TABLE> <TABLE> <TR> <TD><TD><TD> </TR> </TABLE>
Авторы могут указывать ширину столбцов тремя способами:
Однако если ширина таблицы не фиксирована, агенты пользователей должны получить все данные таблицы перед тем, как они смогут определить горизонтальное пространство, необходимое для таблицы. Только тогда это пространство может быть распределено между столбцами, для которых указана пропорциональная ширина.
Если автор не указывает для столбца информацию о ширине, агент пользователя не сможет форматировать таблицу последовательно, поскольку он вынужден будет ждать получения всех данных столбца для определения его ширины.
Если указанная для столбца ширина недостаточна для размещения содержимого какой-либо ячейки, агенты пользователей могут переформатировать таблицу.
Таблица в этом примере содержит шесть столбцов. Первый не принадлежит к явной группе столбцов. Следующие три образуют первую явную группу столбцов, а последние два - вторую явную группу столбцов. Эту таблицу нельзя отформатировать последовательно, поскольку она содержит столбцы пропорциональной ширины, а значение атрибута width для элемента TABLE не указано.
Когда агент пользователя (визуальный) получит данные таблицы, доступное горизонтальное пространство будет распределяться агентом пользователя следующим образом: сначала агент пользователя распределит 30 пикселов на первый и второй столбец. Затем будет зарезервировано минимальное пространство, необходимое для третьего столбца. Оставшееся горизонтальное пространство будет разделено на шесть равных частей (поскольку 2* + 1* + 3* = 6 частей). Четвертый столбец (2*) получит две таких части, пятый (1*) - одну, а шестой - (3*) три.
<TABLE> <COLGROUP> <COL width="30"> <COLGROUP> <COL width="30"> <COL width="0*"> <COL width="2*"> <COLGROUP align="center"> <COL width="1*"> <COL width="3*" align="char" char=":"> <THEAD> <TR><TD> ... ...строки... </TABLE>
Для атрибута align во второй группе столбцов мы установили значение "center". Все ячейки в каждом столбце этой группы будут наследовать это значение, но могут переопределять его. В действительности последний элемент COL делает именно это, потому что в нем указано, что каждая ячейка столбца, которым он управляет, будет выровнена с использованием символа ":".
В следующей таблице спецификации ширины столбца позволяют агентам пользователя форматировать таблицу последовательно:
<TABLE width="200"> <COLGROUP span="10" width="15"> <COLGROUP width="*"> <COL id="penultimate-column"> <COL id="last-column"> <THEAD> <TR><TD> ... ...строки... </TABLE>
Первые десять столбцов имеют ширину 15 пикселов каждый. Последние два столбца получают по половине из оставшихся 50 пикселов. Помните, что элемент COL расположен так, что значение id можно указать только для последних двух столбцов.
Примечание. Хотя атрибут width элемента TABLE не является нежелательным, авторам рекомендуется использовать для указания ширины таблицы стилей.
<!ELEMENT TR - O (TH|TD)+ -- строка таблицы --> <!ATTLIST TR -- строка таблицы -- %attrs; -- %coreattrs, %i18n, %events -- %cellhalign; -- горизонтальное выравнивание в ячейках -- %cellvalign; -- вертикальное выравнивание в ячейках -- >
Начальный тег: обязателен, Конечный тег: не обязателен
Атрибуты, определяемые в любом другом месте
Элементы TR служат контейнерами для строки ячеек таблицы. Конечный тег можно опустить.
Эта простая таблица состоит из трех строк, каждая из которых начинается с элемента TR:
<TABLE summary="В этой таблице показан график числа чашек кофе, выпиваемых каждым сенатором, тип кофе (без кофеина или обычный) и наличие сахара."> <CAPTION>Сколько чашек кофе выпивает каждый сенатор</CAPTION> <TR> ...Строка заголовка... <TR> ...Первая строка данных... <TR> ...Вторая строка данных... ...продолжение таблицы... </TABLE>
<!ELEMENT (TH|TD) - O (%flow;)* -- ячейка заголовка таблицы, ячейка данных таблицы --> <!-Для большинства таблиц атрибут scope проще, чем атрибут axes --> <!ENTITY % Scope "(row|col|rowgroup|colgroup)"> <!-- TH используется для заголовков, TD - для данных, но для ячеек, служащих и тем, и другим используйте TD --> <!ATTLIST (TH|TD) -- заголовок ячейки данных -- %attrs; -- %coreattrs, %i18n, %events -- abbr %Text; #IMPLIED -- сокращение для ячейки заголовка -- axis CDATA #IMPLIED -- группы имен связанных заголовков -- headers IDREFS #IMPLIED -- список id для ячеек заголовков -- scope %Scope; #IMPLIED -- область ячеек заголовков -- rowspan NUMBER 1 -- число строк, spanned ячейкой -- colspan NUMBER 1 -- число столбцов, spanned ячейкой -- %cellhalign; -- горизонтальное выравнивание в ячейках -- %cellvalign; -- вертикальное выравнивание в ячейках -- >
Начальный тег: обязателен, Конечный тег: не обязателен
Определения атрибутов
Атрибуты, определяемые в любом другом месте
Ячейки таблицы могут содержать информацию двух типов: заголовочную информацию и данные. Это различие позволяет агентам пользователей генерировать ячейки заголовков и данных различным образом даже при отсутствии таблиц стилей. Например, визуальные агенты пользователей могут представлять текст ячеек заголовков жирным шрифтом. Синтезаторы речи могут выделять заголовочную информацию голосом.
Элемент TH определяет ячейку, содержащую информацию заголовка. Агентам пользователей доступны две части заголовочной информации: содержимое элемента TH и значение атрибута abbr. Агенты пользователей должны генерировать содержимое ячейки или значение атрибута abbr. Для визуальных устройств последнее может иметь смысл, если пространства для генерации полного содержимого ячейки недостаточно. Для невизуальных устройств abbr может использоваться в качестве сокращения для заголовков таблиц, когда они генерируются вместе с содержимым ячеек, к которым они относятся.
Атрибуты headers и scope также позволяют авторам помочь невизуальным агентам пользователей в обработке информации заголовка. Подробную информацию и примеры см. в разделе о пометке ячеек для невизуальных агентов пользователей.
Элемент TD определяет ячейку, содержащую данные.
Ячейка может быть пустой (т.е. не содержать данных).
Например, в следующей таблице содержится четыре столбца данных, каждый столбец имеет заголовок.
<TABLE summary="В этой таблице показан график числа чашек кофе, выпиваемых каждым сенатором, тип кофе (без кофеина или обычный) и наличие сахара."> <CAPTION>Сколько чашек кофе выпивает каждый сенатор</CAPTION> <TR> <TH>Имя</TH> <TH>Число чашек</TH> <TH>Тип кофе</TH> <TH>Сахар?</TH> <TR> <TD>Т. Секстон</TD> <TD>10</TD> <TD>Эспрессо</TD> <TD>Нет</TD> <TR> <TD>Дж. Диннен</TD> <TD>5</TD> <TD>Без кофеина</TD> <TD>Да</TD> </TABLE>
Агент пользователя, выполняющий генерацию для терминала, может отобразить это следующим образом:
Имя Число чашек Тип кофе Сахар? Т. Секстон 10 Эспрессо Нет Дж. Диннен 5 Без кофеина Да
Ячейки могут span несколько строк или столбцов. Число строк или столбцов, spanned ячейкой, устанавливается с помощью атрибутов rowspan и colspan элементов TH и TD.
В этом определении таблицы мы указываем, что ячейка в четвертой строке во втором столбце span все три столбца, включая текущий.
<TABLE border="1"> <CAPTION> Сколько чашек кофе выпивает каждый сенатор </CAPTION> <TR><TH>Имя<TH>Число чашек<TH>Тип кофе<TH>Сахар? <TR><TD>Т. Секстон<TD>10<TD>Эспрессо<TD>Нет <TR><TD>Дж. Диннен<TD>5<TD>Без кофеина<TD>Да <TR><TD>А. Сориа<TD colspan="3"><em>Нет данных</em> </TABLE>
На терминале эта таблица может генерироваться следующим образом:
Сколько чашек кофе выпивает каждый сенатор ---------------------------------------------- | Имя |Число чашек|Тип кофе |Сахар?| ---------------------------------------------- |Т. Секстон|10 |Эспрессо |Нет | ---------------------------------------------- |Дж. Диннен|5 |Без кофеина |Да | ---------------------------------------------- |А. Сориа |Нет данных | ----------------------------------------------
В следующем примере показано (с помощью границ таблицы), как определения ячеек, span несколько строк или столбцов, влияют на определения следующих ячеек. Рассмотрите следующее определение таблицы:
<TABLE border="1"> <TR><TD>1 <TD rowspan="2">2 <TD>3 <TR><TD>4 <TD>6 <TR><TD>7 <TD>8 <TD>9 </TABLE>
Поскольку ячейка "2" spans первую и вторую строки, определение второй строки будет принято во внимание. Таким образом, второй элемент TD в строке два в действительности определяет третью ячейку строки. Визуально на терминале таблица может генерироваться следующим образом:
------------- | 1 | 2 | 3 | ----| |---- | 4 | | 6 | ----|---|---- | 7 | 8 | 9 | -------------
а графический агент пользователя может представить ее так:
Помните, что, если элемент TD, определяющий ячейку "6", опущен, агенты пользователя будут добавлять дополнительную пустую ячейку, чтобы заполнить строку.
Точно так же в следующем определении таблицы:
<TABLE border="1"> <TR><TD>1 <TD>2 <TD>3 <TR><TD colspan="2">4 <TD>6 <TR><TD>7 <TD>8 <TD>9 </TABLE>
ячейка "4" spans два столбца, так что второй элемент TD в строке на самом деле определяет третью ячейку ("6"):
------------- | 1 | 2 | 3 | --------|---- | 4 | 6 | --------|---- | 7 | 8 | 9 | -------------
Графический агент пользователя может представить это следующим образом:
Определение перекрывающихся ячеек является ошибкой. Агенты пользователей могут по-разному обрабатывать эту ошибку (например, они могут по-разному генерировать такие таблицы).
В следующем примере недопустимого использования показано, как можно создать перекрывающиеся ячейки. В этой таблице ячейка "5" spans две строки, а ячейка "7" spans два столбца, так что они обе используют ячейку между "7" и "9":
<TABLE border="1"> <TR><TD>1 <TD>2 <TD>3 <TR><TD>4 <TD rowspan="2">5 <TD>6 <TR><TD colspan="2">7 <TD>9 </TABLE>
Примечание. В следующих разделах описываются атрибуты таблиц HTML, относящиеся к визуальному форматированию. Хотя таблицы стилей предлагают лучшие возможности управления визуальным форматированием таблиц, во время написания этой спецификации в [CSS1] не было механизмов для управления всеми аспектами визуального форматирования таблиц.
В HTML 4.0 имеются механизмы для управления:
Следующие атрибуты влияют на внутренние кадры и внутренние rules таблицы.
Определения атрибутов
Для простоты различия ячеек в таблице мы можем устанавливать атрибут border элемента TABLE. Рассмотрим предыдущий пример:
<TABLE border="1" summary="В этой таблице приведены данные о числе чашек кофе, потребляемом каждым сенатором, типе кофе (без кофеина или обычный) и наличии сахара."> <CAPTION>Сколько чашек кофе выпивает каждый сенатор</CAPTION> <TR> <TH>Имя</TH> <TH>Число чашек</TH> <TH>Тип кофе</TH> <TH>Сахар?</TH> <TR> <TD>Т. Секстон</TD> <TD>10</TD> <TD>Эспрессо</TD> <TD>Нет</TD> <TR> <TD>Дж. Диннен</TD> <TD>5</TD> <TD>Без кофеина</TD> <TD>Да</TD> </TABLE>
В следующем примере агент пользователя должен отобразить границу шириной в пять пикселов слева и справа от таблицы и rules между столбцами.
<TABLE border="5" frame="vsides" rules="cols"> <TR> <TD>1 <TD>2 <TD>3 <TR> <TD>4 <TD>5 <TD>6 <TR> <TD>7 <TD>8 <TD>9 </TABLE>
Следующие настройки должны рассматриваться агентами пользователей для обеспечения совместимости с предыдущими версиями.
Например, следующие определения эквивалентны:
<TABLE border="2"> <TABLE border="2" frame="border" rules="all">
следующим:
<TABLE border> <TABLE frame="border" rules="all">
Примечание. Атрибут border также определяет отображение границы для элементов OBJECT и IMG, но принимает для этих элементов различные значения.
Для различных элементов таблицы можно установить следующие атрибуты (см. их определения).
<!- атрибуты горизонтального выравнивания содержимого ячейки --> <!ENTITY % cellhalign "align (left|center|right|justify|char) #IMPLIED char %Character; #IMPLIED -- символы выравнивания, например char=':' -- charoff %Length; #IMPLIED -- отступ символа выравнивания --" ><!-атрибуты вертикального выравнивания содержимого ячейки --><!ENTITY % cellvalign "valign (top|middle|bottom|baseline) #IMPLIED" >
Определения атрибутов
Если для установления смещения символа выравнивания используется атрибут charoff, направление смещения определяется текущим направлением текста (устанавливаемым атрибутом dir). В текста, направленных слева направо (по умолчанию), смещение производится от левого поля. В текстах, направленных справа налево, смещение производится от правого поля. Агенты пользователей не обязательно должны поддерживать этот атрибут.
В этом примере денежные единицы выровнены по десятичной точке. Мы явно установили выравнивание по символу ".".
<TABLE border="1"> <COLGROUP> <COL><COL align="char" char="."> <THEAD> <TR><TH>Овощи <TH>Цена за кг <TBODY> <TR><TD>Lettuce <TD>$1 <TR><TD>Silver carrots <TD>$10.50 <TR><TD>Golden turnips <TD>$100.30 </TABLE>
Отформатированная таблица может выглядеть следующим образом:
------------------------------ | Овощи |Цена за кг | |--------------|-------------| |Lettuce | $1 | |--------------|-------------| |Silver carrots| $10.50| |--------------|-------------| |Golden turnips| $100.30| ------------------------------
Если в ячейке содержится несколько экземпляров символов выравнивания, заданных в атрибуте char, и содержимое ячейки переносится на другую строку, поведение агента пользователя не определено. Поэтому авторы должны внимательно использовать атрибут char.
Примечание. Визуальные агенты пользователей обычно генерируют элементы TH выровненными вертикально и горизонтально по центру с использованием полужирного шрифта.
Выравнивание содержимого ячейки могут задаваться для каждой ячейки или наследоваться от элементов верхнего уровня, таких как строка, столбец или сама таблица.
Приоритет (от высшего к низшему) атрибутов align, char и charoff следующий:
Приоритет (от высшего к низшему) атрибута valign (а также других унаследованных атрибутов lang, dir и style) следующий:
Кроме того, при генерации ячеек горизонтальное выравнивание определяется сначала для столбцов, а потом для строк, а вертикальное выравнивание - для строк, а потом для столбцов.
Выравнивание ячеек по умолчанию зависит от агента пользователя. Однако агенты пользователя должны подставлять атрибут по умолчанию соответственно текущем направлению (то есть не просто "left" во всех случаях).
Агенты пользователя, не поддерживающие значение "justify" атрибута align должны использовать значение, соответствующее направлению.
Определения атрибутов
Эти два атрибута управляют расстоянием между ячейками и внутри них. Они объясняются на следующей иллюстрации:
В следующем примере атрибут cellspacing задает расстояние в двадцать пикселов между ячейками и от края таблицы. Атрибут cellpadding определяет, что верхнее и нижнее поля ячейки отделяются от содержимого ячейки на 10% доступного вертикального пространства (всего 20%). Точно так же, левое и правое поле ячейки будут отделены от содержимого на 10% доступного горизонтального пространства (всего 20%).
<TABLE cellspacing="20" cellpadding="20%"> <TR> <TD>Данные1 <TD>Данные2 <TD>Данные3 </TABLE>
Если таблица или данный столбец имеет фиксированную ширину, cellspacing и cellpadding могут занимать больше пространства, чем назначено. Агенты пользователей могут давать этим атрибутам приоритет над атрибутом width в случае конфликта, но они не обязательно должны это делать.
Невизуальные агенты пользователей, такие как синтезаторы речи и устройства на базе азбуки Бройля, могут использовать следующие атрибуты элементов TD и TH для более intuitive генерации ячеек таблицы:
В следующем примере мы назначаем информацию заголовка ячейкам, устанавливая атрибут headers. Каждая ячейка в одном и том же столбце относится к одной и той же ячейке заголовка (с помощью атрибута id).
<TABLE border="1" summary="В этой таблице приводится информация о том, сколько чашек кофе выпивает каждый сенатор, о типа кофе (без кофеина или обычный) и о сахаре."> <CAPTION>Сколько чашек кофе выпивает каждый сенатор</CAPTION> <TR> <TH id="t1">Имя</TH> <TH id="t2">Сколько</TH> <TH id="t3" abbr="Тип">Тип кофе</TH> <TH id="t4">Сахар?</TH> <TR> <TD headers="t1">Т. Секстон</TD> <TD headers="t2">10</TD> <TD headers="t3">Эспрессо</TD> <TD headers="t4">Нет</TD> <TR> <TD headers="t1">Дж. Диннен</TD> <TD headers="t2">5</TD> <TD headers="t3">Без кофеина</TD> <TD headers="t4">Да</TD> </TABLE>
Синтезатор речи может генерировать эту таблицу следующим образом:
Заголовок: Сколько чашек кофе выпивает каждый сенатор Summary: В этой таблице приводится информация о том, сколько чашек кофе выпивает каждый сенатор, о типа кофе (без кофеина или обычный) и о сахаре. Имя: Т. Секстон, Сколько: 10, Тип: Эспрессо, Сахар: Нет Имя: Дж. Диннен, Сколько: 5, Тип: Без кофеина, Сахар: Да
Заметьте, что заголовок "Тип кофе" сокращается до "Тип" с помощью атрибута abbr.
Вот тот же пример, использующий атрибут scope вместо атрибута headers. Обратите внимание на значение "col" для атрибута scope, означающее "все ячейки в текущем столбце":
<TABLE border="1" summary="В этой таблице приводится информация о том, сколько чашек кофе выпивает каждый сенатор, о типа кофе (без кофеина или обычный) и о сахаре."> <CAPTION>Сколько чашек кофе выпивает каждый сенатор</CAPTION> <TR> <TH scope="col">Имя</TH> <TH scope="col">Сколько</TH> <TH scope="col" abbr="Тип">Тип кофе</TH> <TH scope="col">Сахар?</TH> <TR> <TD>Т. Секстон</TD> <TD>10</TD> <TD>Эспрессо</TD> <TD>Нет</TD> <TR> <TD>Дж. Диннен</TD> <TD>5</TD> <TD>Без кофеина</TD> <TD>Да</TD> </TABLE>
Ниже приводится несколько более сложный пример, в котором показаны другие значения атрибута scope:
<TABLE border="1" cellpadding="5" cellspacing="2" summary="Исторические курсы, предлагаемые округа Бат, упорядоченные по названию, преподавателю, описанию, коду и стоимости"> <TR> <TH colspan="5" scope="colgroup">Курсы - Бат, осень 1997 г.</TH> </TR> <TR> <TH scope="col" abbr="Название">Название курса</TH> <TH scope="col" abbr="Преподаватель">Преподаватель курса</TH> <TH scope="col">Описание</TH> <TH scope="col">Код</TH> <TH scope="col">Стоимость</TH> </TR> <TR> <TD scope="row">После Гражданской войны</TD> <TD>Доктор Джон Раутон</TD> <TD> В этом курсе изучаются turbulent годы в Англии после 1646 года. <EM>6 еженедельных занятий, начиная с понедельника, 13 октября.</EM> </TD> <TD>H27</TD> <TD>£32</TD> </TR> <TR> <TD scope="row">Англо-саксонская Англия - введение</TD> <TD>Марк Коттл</TD> <TD> Однодневный курс - введение в раннесредневековый период Реконструкции англо-саксонского общества. <EM>Суббота, 18 октября.</EM> </TD> <TD>H28</TD> <TD>£18</TD> </TR> <TR> <TD scope="row">Греция</TD> <TD>Валери Лоренц</TD> <TD> Колыбель демократии, философии, сердце театра, родина аргумента. Это могли сделать римляне, если бы греки не опередили их. <EM>Субботняя школа 25 октября 1997 года</EM> </TD> <TD>H30</TD> <TD>£18</TD> </TR> </TABLE>
Графический агент пользователя может сгенерировать это следующим образом:
Обратите внимание на использование атрибута scope со значением "row". Хотя первая ячейка в каждой строке содержит данные, а не заголовок, благодаря атрибуту scope ячейки данных выглядят как ячейки заголовка строки. Это позволяет синтезаторам речи указывать соответствующее название курса по запросу или произносить его непосредственно перед содержимым ячейки.
Возможно, пользователи, просматривающие таблицу с использованием речевых агентов, захотят услышать пояснение к содержимым ячейки в дополнение к самой информации. Один из способов, которым агент пользователя может обеспечить пояснения, - произносить соответствующую заголовочную информацию перед произнесением информации, являющейся содержимым ячейки (см. раздел о связи заголовочной информации с ячейками данных).
Пользователям может также понадобиться информация о нескольких ячейках, и в этом случае заголовочная информация, заданная на уровне ячейки (с помощью headers, scope, и abbr) может не соответствовать контексту. Рассмотрим следующую таблицу с классификацией расходов на еду, гостиницы и транспорт в двух пунктах (Сан-Хосе и Сиэтле) за несколько дней:
Пользователям понадобится извлечь информацию из таблицы в форме запросов:
Каждый запрос подразумевает вычисления, выполняемые агентом пользователя, которые могут затрагивать несколько или ни одной ячейки. Чтобы определить, например, расходы на еду 25 августа, агент пользователя должен знать, какие ячейки таблицы относятся к "Еде" (все эти ячейки), а какая к "Датам" (25 августа), и найти пересечение этих двух наборов.
Для принятия запроса такого типа модель таблиц HTML 4.0 позволяет авторам помещать заголовки и данные ячеек в категории. Например, в таблице расходов на командировку автор может сгруппировать ячейки заголовков "Сан-Хосе" и "Сиэтл" в категорию "Пункт", заголовки "Еда", "Гостиницы" и "Транспорт" в категорию "Расходы", а четыре дня в категорию "Дата". Тогда предыдущие три вопроса будут иметь следующее значение:
Авторы определяют категории заголовков или ячеек данных, устанавливая для ячейки атрибут axis. Например, в таблице расходов на командировку ячейка, содержащая информацию "Сан-Хосе" может быть помещена в категорию "Пункт" следующим образом:
<TH id="a6" axis="пункт">Сан-Хосе</TH>
Любая ячейка, содержащая информацию, относящуюся к "Сан-Хосе", должна ссылаться на эту ячейку заголовка с помощью атрибута headers или scope. Таким образом, расходы на еду 25-авг-1997 должны иметь ссылку на атрибут id (значение которого здесь - "a6") ячейки заголовка "Сан-Хосе":
<TD headers="a6">37.74</TD>
Каждый атрибут headers содержит список ссылок id. Авторы таким образом могут определять категории для данной ячейки с помощью данного ряда способов (или along any number of "headers", hence the name).
Ниже в таблице командировочных расходов указана информация о категориях:
<TABLE border="1" summary="В этой таблице приводятся сведения о командировочных расходах в августе в Сан-Хосе и Сиэтле"> <CAPTION> Отчет о командировочных расходах </CAPTION> <TR> <TH></TH> <TH id="a2" axis="расходы">Еда</TH> <TH id="a3" axis="расходы">Гостиницы</TH> <TH id="a4" axis="расходы">Транспорт</TH> <TD>итого</TD> </TR> <TR> <TH id="a6" axis="пункт">Сан-Хосе</TH> <TH></TH> <TH></TH> <TH></TH> <TD></TD> </TR> <TR> <TD id="a7" axis="дата">25-авг-97</TD> <TD headers="a6 a7 a2">37.74</TD> <TD headers="a6 a7 a3">112.00</TD> <TD headers="a6 a7 a4">45.00</TD> <TD></TD> </TR> <TR> <TD id="a8" axis="дата">26-авг-97</TD> <TD headers="a6 a8 a2">27.28</TD> <TD headers="a6 a8 a3">112.00</TD> <TD headers="a6 a8 a4">45.00</TD> <TD></TD> </TR> <TR> <TD>итого</TD> <TD>65.02</TD> <TD>224.00</TD> <TD>90.00</TD> <TD>379.02</TD> </TR> <TR> <TH id="a10" axis="пункт">Сиэтл</TH> <TH></TH> <TH></TH> <TH></TH> <TD></TD> </TR> <TR> <TD id="a11" axis="дата">27-авг-97</TD> <TD headers="a10 a11 a2">96.25</TD> <TD headers="a10 a11 a3">109.00</TD> <TD headers="a10 a11 a4">36.00</TD> <TD></TD> </TR> <TR> <TD id="a12" axis="дата">28-авг-97</TD> <TD headers="a10 a12 a2">35.00</TD> <TD headers="a10 a12 a3">109.00</TD> <TD headers="a10 a12 a4">36.00</TD> <TD></TD> </TR> <TR> <TD>итого</TD> <TD>131.25</TD> <TD>218.00</TD> <TD>72.00</TD> <TD>421.25</TD> </TR> <TR> <TH>Всего</TH> <TD>196.27</TD> <TD>442.00</TD> <TD>162.00</TD> <TD>800.27</TD> </TR> </TABLE>
Обратите внимание на то, что такая разметка таблицы также позволяет агентам пользователей не сбивать пользователей с толку ненужной информацией. Например, если синтезатор речи должен был произнести все цифры из столбца "Еда" этой таблицы в ответ на запрос "Все расходы на еду?", пользователь не смог бы отличить дневные расходы от итоговой суммы. С помощью тщательной категоризации данных авторы позволяют агентам пользователей делать важные семантические различия при генерации.
Конечно, авторы не ограничены в категоризации информации в таблице. В таблице командировочных расходов, например, мы можем ввести дополнительные категории "итого" и "всего".
Данная спецификация не выставляет требование к агентам пользователей по обработке информации, предоставляемой атрибутом axis, а также не дает никаких рекомендаций относительно представления агентами пользователей информации из атрибута axis или спецификации запросов пользователями этой информации у агентов.
Однако агенты пользователей, особенно синтезаторы речи, могут выделять информацию, общую для нескольких ячеек, являющихся результатами запроса. Например, если пользователь спрашивает "Сколько всего денег я потратил на еду в Сан-Хосе?", агент пользователя должен определить соответствующие ячейки (25-авг-1997: 37.74, 26-авг-1997:27.28), а затем сгенерировать информацию. Агент пользователя может произнести следующую информацию:
Пункт: Сан-Хосе. Дата: 25-авг-1997. Расходы, Еда: 37.74 Пункт: Сан-Хосе. Дата: 26-авг-1997. Расходы, Еда: 27.28
или более компактно:
Сан-Хосе, 25-авг-1997, Еда: 37.74 Сан-Хосе, 26-авг-1997, Еда: 27.28
Еще более экономичная генерация может выделить еще более общую информацию и переупорядочить ее:
Сан-Хосе, Еда, 25-авг-1997: 37.74 26-авг-1997: 27.28
Агенты пользователей, поддерживающие генерацию такого типа, должны обеспечивать средства настройки генерации (например, с помощью таблиц стилей).
В отсутствии заголовочной информации в атрибуте scope или headers агенты пользователей могут составлять эту информацию в соответствии со следующим алгоритмом. Целью алгоритма является нахождение упорядоченного списка заголовков. (В следующем описании алгоритма принято направление таблицы слева направо.)
В этом примере показаны сгруппированные строки и столбцы. Пример взят из книги "Разработка интернационального программного обеспечения" Надин Кэно.
В "формате ascii" следующая таблица:
<TABLE border="2" frame="hsides" rules="groups" summary="Поддержка кодовых страниц в различных версиях MS Windows."> <CAPTION>ПОДДЕРЖКА КОДОВЫХ СТРАНИЦ В MICROSOFT WINDOWS</CAPTION> <COLGROUP align="center"> <COLGROUP align="left"> <COLGROUP align="center" span="2"> <COLGROUP align="center" span="3"> <THEAD valign="top"> <TR> <TH>ИД кодовой<BR>страницы <TH>Название <TH>ACP <TH>OEMCP <TH>Windows<BR>NT 3.1 <TH>Windows<BR>NT 3.51 <TH>Windows<BR>95 <TBODY> <TR><TD>1200<TD>Unicode (BMP of ISO/IEC-10646)<TD><TD><TD>X<TD>X<TD>* <TR><TD>1250<TD>Windows 3.1 Восточноевропейская<TD>X<TD><TD>X<TD>X<TD>X <TR><TD>1251<TD>Windows 3.1 Кириллица<TD>X<TD><TD>X<TD>X<TD>X <TR><TD>1252<TD>Windows 3.1 США (ANSI)<TD>X<TD><TD>X<TD>X<TD>X <TR><TD>1253<TD>Windows 3.1 Греческая<TD>X<TD><TD>X<TD>X<TD>X <TR><TD>1254<TD>Windows 3.1 Турецкая<TD>X<TD><TD>X<TD>X<TD>X <TR><TD>1255<TD>Иврит<TD>X<TD><TD><TD><TD>X <TR><TD>1256<TD>Арабская<TD>X<TD><TD><TD><TD>X <TR><TD>1257<TD>Балтийская<TD>X<TD><TD><TD><TD>X <TR><TD>1361<TD>Корейская (Johab)<TD>X<TD><TD><TD>**<TD>X <TBODY> <TR><TD>437<TD>США MS-DOS<TD><TD>X<TD>X<TD>X<TD>X <TR><TD>708<TD>Арабская (ASMO 708)<TD><TD>X<TD><TD><TD>X <TR><TD>709<TD>Арабская (ASMO 449+, BCON V4)<TD><TD>X<TD><TD><TD>X <TR><TD>710<TD>Арабская (Прозрачная арабская)<TD><TD>X<TD><TD><TD>X <TR><TD>720<TD>Арабская (Прозрачная ASMO)<TD><TD>X<TD><TD><TD>X </TABLE>
может быть сгенерирована следующим образом:
ПОДДЕРЖКА КОДОВЫХ СТРАНИЦ В MICROSOFT WINDOWS ================================================================================= ИД кодовой| Название | ACP OEMCP | Windows Windows Windows Страницы | | | NT 3.1 NT 3.51 95 --------------------------------------------------------------------------------- 1200 | Unicode (BMP of ISO 10646) | | X X * 1250 | Windows 3.1 Восточноевропейская| X | X X X 1251 | Windows 3.1 Кириллица | X | X X X 1252 | Windows 3.1 США (ANSI) | X | X X X 1253 | Windows 3.1 Греческая | X | X X X 1254 | Windows 3.1 Турецкая | X | X X X 1255 | Иврит | X | X 1256 | Арабская | X | X 1257 | Балтийская | X | X 1361 | Корейская (Johab) | X | ** X ------------------------------------------------------------------------------- 437 | США MS-DOS | X | X X X 708 | Арабская (ASMO 708) | X | X 709 | Арабская (ASMO 449+, BCON V4) | X | X 710 | Арабская (Прозрачная арабская) | X | X 720 | Арабская (Прозрачная ASMO) | X | X ===============================================================================
Графический агент пользователя может сгенерировать ее следующим образом:
В данном примере показано, как можно использовать COLGROUP для группировки столбцов и установки выравнивания столбцов по умолчанию. Точно так же TBODY используется для группировки строк. Атрибуты frame и rules сообщают агенту пользователя, какие границы и rules должны генерироваться.
Содержание
В этом разделе документа обсуждаются два важных вопроса интернационализации HTML: задание языка (атрибут lang) и направления (атрибут dir) текста в документе.
Информация о языке, указанная с помощью атрибута lang, может использоваться агентом пользователя для управления генерацией изображения различными способами. Некоторые ситуации, в которых указываемая автором информация а языке, может быть полезна:
Атрибут lang указывает код содержимого элемента и значений атрибутов; относится ли он к данному атрибуту, зависит от синтаксиса и семантики атрибута и от операции.
Атрибут lang предназначен для того, чтобы позволить агентам пользователей более осмысленно генерировать изображение на основе принятой культурной практики для данного языка. Это не подразумевает, что агенты пользователей должны генерировать символы, не являющиеся типичными для конкретного языка, менее осмысленным способом; агенты пользователей должны пытаться сгенерировать се символы, независимо от значения, указанного в атрибуте lang.
Например, если в русском тексте должен появиться символ греческого алфавита:
<P><Q lang="ru">"Эта супермощность была результатом γ-радиации,</Q> объяснил он.</P>
агент пользователя (1) должен попытаться сгенерировать русский текст соответствующим образом (например, в соответствующих кавычках) и (2) попытаться сгенерировать символ γ, даже если это не русский символ.
Дополнительную информацию см. в разделе о неотображаемых символах.
Значением атрибута lang является код языка, идентифицирующий естественный разговорный язык, который устно, письменно или иным образом используется для передачи информации между людьми. Компьютерные языки явным образом исключены из кодов языков.
В документе [RFC1766] определены и описаны все коды языков, которые должны использоваться в документах на языке HTML.
Кратко говоря, коды языков состоят из первичного кода и ряда подкодов, который может быть пустым:
код-языка = первичный-код ( "-" подкод )*
Вот несколько примеров кодов языков:
Двухбуквенные первичные коды зарезервированы для сокращений языков по стандарту [ISO639]. Сюда входят коды fr (французский), de (немецкий), it (итальянский), nl (голландский), el (греческий), es (испанский), pt (португальский), ar (арабский), he (иврит), ru (русский), zh (китайский), ja (японский), hi (хинди), ur (урду) и sa (санскрит).
Любой двухбуквенный подкод считается кодом страны в стандарте [ISO3166].
Элемент наследует информацию о коде языка в следующем порядке старшинства (от высшего к низшему):
Content-Language: en-cockney
В этом примере первичным языком документа является французский ("fr"). Один абзац объявлен на испанском языке ("es"), после чего язык снова становится французским. В следующий абзац включена японская фраза ("ja"), после чего язык опять изменяется на французский.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <HTML lang="fr"> <HEAD> <TITLE>Un document multilingue</TITLE> </HEAD> <BODY> ...текст интерпретируется как французский... <P lang="es">... текст интерпретируется как испанский... <P>... текст опять интерпретируется как французский... <P>...французский текст, в котором попадается <EM lang="ja">фрагмент на японском</EM>,
а здесь опять начинается французский... </BODY> </HTML>
В контексте HTML код языка должен интерпретироваться агентами пользователя как иерархия знаков, а не один знак. Если агент пользователя генерирует изображение в соответствии с информацией о языке (скажем, сравнивая языковые коды в таблицах стилей и значения атрибута lang), он всегда должен находить точное соответствие, но должен также принимать во внимание первичные коды. Таким образом, если значение атрибута lang "en-US" установлено для элемента HTML, агент пользователя должен сначала выбрать информацию о стиле, совпадающую с "en-US", а затем сгенерировать более общее значение "en".
Примечание. Иерархия кодов языков не гарантирует понимания всех языков с общими префиксами людьми, бегло говорящими на одном или нескольких из этих языков. Она помогает пользователю запросить эту общность, когда для пользователя она является истинной.
Определения атрибутов
Кроме задания языка документа с помощью атрибута lang, авторы могут указать основное направление (слева направо или справа налево) частей текста, таблицы и т.д. Это делается с помощью атрибута dir.
Спецификация [UNICODE] назначает направление символам и определяет (сложный) алгоритм для определения соответствующего направления текста. Если документ не содержит отображаемых справа налево символов, агент пользователя не должен использовать двунаправленный алгоритм [UNICODE]. Если документ содержит такие символы, и если агент пользователя и отображает, он должен использовать двунаправленный алгоритм.
Хотя в Unicode определены специальные символы, отвечающие за направление текста, HTML предлагает конструкции разметки высшего уровня, выполняющие те же функции: атрибут dir (не спутайте с элементом DIR) и элемент BDO. Таким образом, чтобы привести цитату на иврите, проще написать
<Q lang="he" dir="rtl">...цитата на иврите...</Q>
чем с эквивалентными ссылками Unicode:
‫״...цитата на иврите...״‬
Агенты пользователей не должны использовать атрибут lang для определения направления текста.
Атрибут dir наследуется, и его можно переопределить. Подробнее см. в разделе о наследовании информации о направлении текста.
В следующем примере проиллюстрировано ожидаемое поведение двунаправленного алгоритма. В нем показаны английский текст слева направо и текст на иврите справа налево.
Рассмотрите следующий текст:
английский1 ИВРИТ2 английский3 ИВРИТ4 английский5 ИВРИТ6
Символы в этом примере (и во всех реплицированных примерах) хранятся в компьютере в том же виде, в каком они отображаются здесь: первый символ - "а", второй - "н", последний "6".
Предположим, для содержащего этот абзац документа определен английский язык. Это означает, что основным направлением является направление слева направо. Корректное представление этой строки:
английский1 2ТИРВИ английский3 4ТИРВИ английский5 6ТИРВИ <------ <------ <------ H H H -------------------------------------------------> E
Строки точек указывают структуру предложения: основным языком является английский, но встроены некоторые элементы на иврите. Для получения корректного представления не нужно никакой дополнительной разметки, поскольку фрагменты на иврите корректно обращаются агентами пользователя, применяющими двунаправленный алгоритм.
С другой стороны, если для документа определен язык иврит, основным будет направление справа налево. Корректное представление, таким образом, будет:
6ТИРВИ английский5 4ТИРВИ английский3 2ТИРВИ английский1 -------> -------> -------> E E E <------------------------------------------------- H
В это случае все предложение представляется справа налево, а фрагменты на английском языке обращаются двунаправленным алгоритмом.
Для двунаправленного алгоритма Unicode необходимо основное направление текста для текстовых блоков. Чтобы указать основное направление элементов уровня блока, установите для этого элемента атрибута dir. Значением атрибута dir, устанавливаемым по умолчанию, является "ltr" (слева направо).
Если атрибут dir установлен для элемента уровня блока, он действует на протяжении всего элемента и для всех вложенных элементов уровня блока. Установка атрибута dir для вложенного элемента имеет приоритет по отношению к наследуемому значению.
Чтобы установить основное направление текста для всего документа, установите атрибут dir в элементе HTML.
Например:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <HTML dir="RTL"> <HEAD> <TITLE>...заголовок справа налево...</TITLE> </HEAD> ...текст справа налево... <P dir="ltr">...текст слева направо...</P> <P>...опять текст справа налево...</P> </HTML>
Встроенные элементы, с другой стороны, не наследуют атрибут dir. Это означает, что встроенный элемент без атрибута dir не открывает дополнительного уровня внедрения в соответствии с двунаправленным алгоритмом. (Здесь элементом считается элемент уровня блока или встроенный элемент на основе представления по умолчанию. Помните, что элементы INS и DEL могут быть элементами уровня блока или встраиваемыми элементами в зависимости от контекста.)
Двунаправленный алгоритм [UNICODE] автоматически обращает последовательности внедренных символов в соответствии с наследуемым направлением (как показано в предыдущих примерах). Однако в общем в расчет принимается только один уровень внедрения. Для того, чтобы изменения направления достигали дополнительных уровней, используйте атрибут dir во встроенном элементе.
Рассмотрите текст предыдущего примера:
английский1 ИВРИТ2 английский3 ИВРИТ4 английский5 ИВРИТ6
Предположим, основным языком для документа, содержащего этот абзац, является английский. В этом английском предложении содержится фрагмент на иврите, продолжающийся от ИВРИТ2 до ИВРИТ4, и в нем содержится англоязычный фрагмент (английский3). Таким образом, желаемое представление текста:
английский1 4ТИРВИ английский3 2ТИРВИ английский5 6ТИРВИ -------> А <----------------------- И -------------------------------------------------> А
Для изменения направления текста двух внедренных фрагментов необходимо задать дополнительную информацию, что мы и делаем, явно разделяя второе внедрение. В этом примере мы используем для разметки текста элемент SPAN и атрибут dir:
английский1 <SPAN dir="RTL">ИВРИТ2 английский3 ИВРИТ4</SPAN> английский5 ИВРИТ6
Авторы также могут использовать для изменения направления нескольких внедренных фрагментов символы Unicode. Для указания направления слева направо во внедряемом фрагменте окружите текст символами LEFT-TO-RIGHT EMBEDDING ("LRE", шестнадцатеричный код 202A) и POP DIRECTIONAL FORMATTING ("PDF", шестнадцатеричный код 202C). Для указания направления справа налево во внедряемом фрагменте окружите текст символами RIGHT-TO-LEFT EMBEDDING ("RTE", шестнадцатеричный код 202B) и PDF.
Использование разметки направленности HTML с символами Unicode. Авторы и разработчики средств создания HTML-документов должны знать о возможных конфликтах, возникающих при использовании атрибута dir со встроенными элементами (включая BDO) одновременно с соответствующими символами форматирования [UNICODE]. Предпочтительнее использовать только один метод. Метод с использованием разметки гарантирует структурную целостность документа и устраняет некоторые проблемы с редактированием двунаправленного текста HTML в простых текстовых редакторах, но некоторое программное обеспечение может лучше использовать символы [UNICODE]. Если используются оба метода, следует хорошо позаботиться о правильном вложении разметки и символов, иначе результаты могут быть непредсказуемыми.
<!ELEMENT BDO - - (%inline;)* -- I18N BiDi over-ride --> <!ATTLIST BDO %coreattrs; -- id, class, style, title -- lang %LanguageCode; #IMPLIED -- код языка -- dir (ltr|rtl) #REQUIRED - направление -- >
Начальный тег: обязателен, Конечный тег: обязателен
Определения атрибутов
Атрибуты, определяемые в любом другом месте
Двунаправленного алгоритма и атрибута dir обычно достаточно для управления изменением направления внедренного текста. Однако в некоторых ситуациях двунаправленный алгоритм может привести к некорректному представлению. Элемент BDO позволяет авторам отключать двунаправленный алгоритм для выбранных фрагментов текста.
Рассмотрите документ с тем же текстовым фрагментом:
английский1 ИВРИТ2 английский3 ИВРИТ4 английский5 ИВРИТ6
но предположите, что этот текст уже представлен в нужном порядке. Одной причиной этого может быть то, что стандарт MIME ([RFC2045], [RFC1556]) благоприятствует визуальному порядку, то есть последовательности с направлением справа налево вставляются в байтовый поток с направлением справа налево. В электронной почте это может форматироваться, включая перевод строки, например:
английский1 2ТИРВИ английский3 4ТИРВИ английский5 6ТИРВИ
Это конфликтует с двунаправленным алгоритмом [UNICODE], поскольку этот алгоритм инвертирует 2ТИРВИ, 4ТИРВИи 6ТИРВИ во второй раз, так что слова на иврите отображаются слева направо, а не справа налево.
В этом случае решением будет переопределить действие двунаправленного алгоритма, поместив выдержку Email в элемент PRE (для сохранения переводов строки) и каждую строку, для которой атрибут dir установлен в LTR, в элемент BDO:
<PRE> <BDO dir="LTR">английский1 2ТИРВИ английский3</BDO> <BDO dir="LTR">4ТИРВИ английский5 6ТИРВИ</BDO> </PRE>
Двунаправленному алгоритму выдается команда "Я должен быть слева направо!", что приведет к нужному представлению:
английский1 2ТИРВИ английский3 4ТИРВИ английский5 6ТИРВИ
Элемент BDO следует использовать в сценариях, где необходим абсолютный контроль над последовательностью (например, многоязыковые номера частей). Атрибут dir для этого элемента является обязательным.
Авторы могут также использовать специальные символы Unicode для того, чтобы избежать использования двунаправленного алгоритма -- LEFT-TO-RIGHT OVERRIDE (202D) или RIGHT-TO-LEFT OVERRIDE (шестнадцатеричный код 202E). Символ POP DIRECTIONAL FORMATTING (шестнадцатеричный код 202C) заканчивает любую последовательность, используемую для обхода двунаправленного алгоритма.
Примечание. Помните, что при использовании атрибута dir во встроенных элементах (включая BDO) одновременно с соответствующими символами форматирования [UNICODE], могут возникать конфликты.
Двунаправленность и кодировка символов В соответствии с [RFC1555] и [RFC1556] существуют специальные соглашения относительно использования значений параметра "charset" для указания обработки двунаправленности в почте MIME, в частности для отличия визуальной, явной и неявной направленности. Значение параметра "ISO-8859-8" (для иврита) обозначает визуальную кодировку, "ISO-8859-8-i" обозначает неявную двунаправленность, а "ISO-8859-8-e" обозначает явную направленность.
Поскольку HTML использует двунаправленный алгоритм Unicode, соответствующие документы, использующие кодировку ISO 8859-8, должны помечаться как "ISO-8859-8-i". Явное управление направлением в HTML также возможно, но его нельзя выразить в ISO 8859-8, поскольку не следует использовать "ISO-8859-8-e".
Значение "ISO-8859-8" подразумевает, что документ отформатирован визуально, и некоторая разметка будет использоваться неправильно (например, TABLE с выравниванием по правому краю без разбивки строк), чтобы гарантировать правильное отображение для более старых агентов пользователя, не поддерживающих двунаправленность. Такие документы не удовлетворяют настоящей спецификации. При необходимости их можно изменить (и одновременно они будут корректно отображаться в старых версиях агентов пользователей), добавив, где нужно, разметку BDO. Вопреки сказанному в [RFC1555] и [RFC1556], кодировка ISO-8859-6 (арабская) не представляет визуального порядка.
Поскольку иногда возникает двусмысленность относительно некоторых символов (например, символов пунктуации), спецификация [UNICODE] включает символы для правильного определения назначения. Спецификация Unicode также включает некоторые символы для управления объединением при необходимости (например, в некоторых ситуациях с арабскими символами). HTML 4.0 включает для этих символов ссылки на символы.
Следующее DTD определяет представление некоторых объектов направления:
<!ENTITY zwnj CDATA "‌"--=нулевая ширина без объединения --> <!ENTITY zwj CDATA "‍"--=объединитель нулевой ширины--> <!ENTITY lrm CDATA "‎"--=метка слева направо--> <!ENTITY rlm CDATA "‏"--=метка справа налево-->
Объект zwnj используется для блокировки объединения в тех контекстах, где объединение произойдет, но оно происходить не должно. Объект zwj имеет обратное действие; он производит объединение в случае, когда оно не предполагается, но должно произойти. Например, арабская буква "HEH" используется для сокращения "Hijri", названия исламской системы летоисчисления. Поскольку отдельный иероглиф "HEH" в арабской письменности выглядит как цифра пять, для того, чтобы не путать букву "HEH" с последней цифрой пять в годе, используется исходная форма буквы "HEH". Однако, нет последующего контекста (например, буквы для объединения), с которым можно объединить "HEH". Символ zwj предоставляет такой контекст.
Точно так же в персидских текстах буква может иногда объединяться с последующей буквой, в то время как в рукописном тексте этого быть не должно. Символ zwnj используется для блокировки объединения в таких случаях.
Символы порядка, lrm и rlm, используются для определения направления нейтральных по отношению к направлению символов. Например, если двойные кавычки ставятся между арабской (справа налево) и латинской (слева направо) буквами, направление кавычек неясно (относятся ли они к арабскому или к латинскому тексту?). Символы lrm и rlm имеют свойство направления, но не имеют свойств ширины и разделения слов/строк. Подробнее см. [UNICODE].
Отражение глифов символов. Вообще двунаправленный алгоритм не отражает глифы символов и не влияет на них. Исключением являются такие символы как скобки (см. [UNICODE], таблица 4-7). Если отражение желательно, например, для египетских иероглифов, греческих знаков или специальных эффектов дизайна, можно сделать это с помощью стилей.
Вообще использование таблиц стилей для изменения визуального представления элемента с уровня блока до встроенного и наоборот используется в прямом направлении. Однако, поскольку двунаправленный алгоритм использует различия встроенных элементов/элементов уровня блока, во время преобразования нужно быть внимательным.
Если встроенный элемент, не имеющий атрибута dir, преобразуется в стиль элемента уровня блока с помощью таблицы стилей, для определения основного направления блока он наследует атрибут dir от ближайшего родительского элемента блока.
Если элемент блока, не имеющий атрибута a dir, преобразуется к стилю встроенного элемента с помощью таблицы стилей, результирующее представление должно быть эквивалентным, в терминах двунаправленного форматирования, форматированию, получаемому путем явного добавления атрибута dir (которому назначено унаследованное значение) преобразованному элементу.
Содержание
Функции мультимедиа языка HTML позволяют авторам включать в свои страницы изображения, апплеты (программы, которые автоматически загружаются и выполняются на машине пользователя), видеоклипы и другие документы в формате HTML.
Например, чтобы включить в документ изображение в формате PNG, авторы могут использовать следующий код:
<BODY> <P>Около Большого Каньона: <OBJECT data="canyon.png" type="image/png"> <EM>Около</EM> Большого Каньона. </OBJECT> </BODY>
В предыдущих версиях HTML авторы могли включать изображения (с помощью IMG) и апплеты (с помощью APPLET). Эти элементы имеют несколько ограничений:
Для решения всех этих вопросов в HTML 4.0 вводится элемент OBJECT, обеспечивающий всестороннее решение для включения объектов. Элемент OBJECT позволяет авторам документов в формате HTML указывать всю информацию, необходимую для представления объекта агентом пользователя: исходный код, начальные значения и рабочие данные. В данной спецификации термин "объект" используется для описания всех объектов, которые Вы захотите включить в HTML-документы; другие термины: апплеты, подключаемые модули (plug-ins), дескрипторы устройств и т.д.
Новый элемент OBJECT, таким образом, subsumes некоторые задачи, выполняемые существующими элементами. Рассмотрим следующую классификацию функций:
Тип включения | Конкретный элемент | Общий элемент |
---|---|---|
Изображение | IMG | OBJECT |
Апплет | APPLET (Нежелателен.) | OBJECT |
Другой документ HTML | IFRAME | OBJECT |
Из таблицы видно, что каждый тип включения имеет конкретное и общее решение. Общий элемент OBJECT служит решением для использования возможных в будущем типов устройств.
Для включения изображений авторы могут использовать элемент OBJECT или элемент IMG.
Для включения апплетов авторам следует использовать элемент OBJECT, поскольку использование элемента APPLETнежелательно.
Для включения одного документа HTML в другой авторы могут использовать новый элемент IFRAME или элемент OBJECT. В обоих случаях внедренный документ не зависит от основного документа. Визуальные агенты пользователей могут представлять внедренный документ в виде отдельного окна в основном документе. Для сравнения элементов OBJECT и IFRAME обратитесь к замечаниям о внедряемых документов.
С изображениями и другими включаемыми объектами могут быть связаны ссылки, с помощью стандартных механизмов ссылок, а также и с помощью навигационных карт (image maps). На навигационной карте задаются геометрические области включаемого объекта, и каждой из них назначается ссылка. При активизации эти ссылки могут вызывать загрузку документа, запускать программу на сервере и т.д.
В следующих разделах мы обсудим различные механизмы, которые авторы могут использовать для включения мультимедиа и создания навигационных карт для этих объектов.
<!-Во избежание проблем с текстовыми агентами пользователей, а также для того, чтобы включение изображений было понятно пользователям невизуальных агентов и могло использоваться ими, Вы должны указывать описания в элементе ALT и избегать использования Серверных навигационных карт--> <!ELEMENT IMG - O EMPTY -- Внедренное изображение --> <!ATTLIST IMG %attrs; -- %coreattrs, %i18n, %events -- src %URI; #REQUIRED -- URI внедряемого изображения -- alt %Text; #REQUIRED -- краткое описание -- longdesc %URI; #IMPLIED -- ссылка на длинное описание (дополняет alt) -- height %Length; #IMPLIED -- переопределение высоты -- width %Length; #IMPLIED -- переопределение ширины -- usemap %URI; #IMPLIED -- использовать клиентскую навигационную карту -- ismap (ismap) #IMPLIED -- использовать серверную навигационную карту -- >
Начальный тег: обязателен, Конечный тег: запрещен
Определения атрибутов
Атрибуты, определенные в другом месте
Элемент IMG внедряет изображение в текущий документ по адресу из определения элемента. Элемент IMG не имеет содержимого; обычно он замещается изображением, назначаемым атрибутом src, исключение при этом составляют выровненные влево или вправо изображения, которые "floated" out of line.
В приведенном ранее примере мы определили ссылку на семейную фотографию. Здесь мы вставим фотографию непосредственно в текущий документ:
<BODY> <P>Я только что вернулся из отпуска! Вот фотография моей семьи на озере: <IMG src="http://www.somecompany.com/People/Ian/vacation/family.png" alt="Фотография моей семьи на озере."> </BODY>
Этого же эффекта можно достичь с помощью элемента OBJECT следующим образом:
<BODY> <P>Я только что вернулся из отпуска! Вот фотография моей семьи на озере: <OBJECT data="http://www.somecompany.com/People/Ian/vacation/family.png" type="image/png"> Фотография моей семьи на озере. </OBJECT> </BODY>
Атрибут alt задает альтернативный текст, который генерируется, если изображение невозможно отобразить (информацию о том, как указать альтернативный текст, см. ниже ). Агенты пользователей должны генерировать альтернативный текст, если они не поддерживают изображение, если они не поддерживают определенный тип изображений или если они сконфигурированы так, чтобы не выводить изображений.
В следующем примере показано, как можно использовать атрибут longdesc для ссылки на более подробное описание:
<BODY> <P> <IMG src="sitemap.gif" alt="Карта узла лабораторий HP" longdesc="sitemap.html"> </BODY>
Атрибут alt задает краткое описание изображения. Его должно быть достаточно для того, чтобы пользователи могли решить, хотят ли они следовать по ссылке, определяемой атрибутом longdesc для более получения подробного описания, здесь это ссылка "sitemap.html".
Информацию о размере изображения, выравнивании и границах см. в разделе о визуальном представлении объектов, изображений и апплетов.
<!ELEMENT OBJECT - - (PARAM | %flow;)* -- общий внедренный объект --> <!ATTLIST OBJECT %attrs; -- %coreattrs, %i18n, %events -- declare (declare) #IMPLIED -- объявить, но не instantiate флаг -- classid %URI; #IMPLIED -- определяет применение -- codebase %URI; #IMPLIED -- базовый URI для classid, data, archive-- data %URI; #IMPLIED -- ссылка на данные объекта -- type %ContentType; #IMPLIED -- тип содержимого для данных -- codetype %ContentType; #IMPLIED -- тип содержимого для кода -- archive %URI; #IMPLIED -- разделенный пробелами список архивов -- standby %Text; #IMPLIED -- сообщение, отображаемое при загрузке -- height %Length; #IMPLIED -- переопределение высоты -- width %Length; #IMPLIED -- переопределение ширины -- usemap %URI; #IMPLIED -- использовать клиентскую навигационную карту -- name CDATA #IMPLIED -- представить в качестве части формы -- tabindex NUMBER #IMPLIED -- положение в последовательности перехода -- >
Начальный тег: обязателен, Конечный тег: обязателен
Определения атрибутов
Атрибуты, определенные в другом месте
В большинстве агентов пользователей имеются встроенные механизмы для генерации основных типов данных, таких как текст, изображения в формате GIF, цвета, шрифты и ряд графических элементов. Для генерации типов данных типов данных, которые агенты пользователей не поддерживают по умолчанию, они обычно запускают внешние приложения. Элемент OBJECT позволяет авторам ууправлять генерацией данных - задавать внешнюю генерацию или использование некоторой определяемой автором программы, генерирующей данные в агенте пользователя.
В более общем случае автор должен будет определить три типа информации:
Элемент OBJECT позволяет авторам указать все три типа данных объекта, но авторы не обязательно должны указывать их все. Например, некоторым объектам не требуются данные (например, апплет, выполняющий анимацию). Другим может быть не нужна инициализация. Другим же может не понадобиться дополнительная информация о реализации, то есть сам агент пользователя может уже знать, как генерировать этот тип данных (например, изображения в формате GIF).
Авторы задают реализацию объекта и местоположение данных, генерируемых с помощью элемента OBJECT. Однако для указания рабочих значений авторы используют элемент PARAM, обсуждаемый в разделе об инициализации объекта.
Элемент OBJECT может также присутствовать внутри элемента HEAD. Поскольку агенты пользователей обычно не генерируют элементы в HEAD, авторам следует убедиться, что во всех элементах OBJECT в HEAD нет содержимого, которое можно генерировать. Пример включения элемента OBJECT в элемент HEAD см. в разделе о совместном использовании данных кадра.
Информацию об элементе OBJECT в формах см. в разделе об управлении формами.
Агент пользователя должен интерпретировать элемент OBJECT в соответствии со следующими правилами старшинства:
Авторам не следует включать содержимое в элементы OBJECT, расположенные в элементе HEAD.
В следующем примере мы вставляем в документ апплет, представляющий часы, с помощью элемента OBJECT. Апплету, написанный на языке Python, не нужны дополнительные и рабочие значения. Атрибут classid определяет местоположение апплета:
<P><OBJECT classid="http://www.miamachina.it/analogclock.py"> </OBJECT>
Обратите внимание на то, что часы будут генерироваться, как только агент пользователя интерпретирует это объявление OBJECT. Можно отложить генерацию объекта, начав с объявления объекта (описывается ниже).
Авторы должны выполнять объявление, включая альтернативный текст в качестве содержимого элемента OBJECT в случае, если агент пользователя не может сгенерировать часы.
<P><OBJECT classid="http://www.miamachina.it/analogclock.py"> Часы с анимацией. </OBJECT>
Одним важным последствием создания элемента OBJECT является то, что он предлагает механизм задания альтернативной генерации объектов; в каждом внедренном объявлении OBJECT могут задаваться альтернативные типы содержимого. Если агент пользователя не может сгенерировать outermost OBJECT, он пытается сгенерировать содержимое, которое может юыть другим элементом OBJECT и т.д.
В следующем примере мы внедряем несколько объявлений OBJECT для того, чтобы показать работу альтернативной генерации. Агент пользователя попытается сгенерировать первый элемент OBJECT, который он может, в следующем порядке: (1) апплет Earth, написанный на языке Python, (2) клип Земли в формате MPEG, (3) изображение Земли в формате GIF, (4) альтернативный текст.
<P> <!- Сначала попробовать апплет на языке Python --> <OBJECT title="Вид Земли из космоса" classid="http://www.observer.mars/TheEarth.py"> <!- Затем попробовать воспроизвести видеоклип в формате MPEG --> <OBJECT data="TheEarth.mpeg" type="application/mpeg"> <!- Затем попробовать изображение в формате GIF --> <OBJECT data="TheEarth.gif" type="image/gif"> <!- Затем сгенерировать текст --> Вид <STRONG>Земли</STRONG> из космоса. </OBJECT> </OBJECT> </OBJECT>
Внешнее объявление определяет апплет, которому не нужны данные или начальные значения. Второе объявление определяет клип в формате MPEG и, поскольку местоположение обработчика формата MPEG не указано, предполагается, что клип будет обрабатываться агентом пользователя. Мы также установили атрибут type, так что агент пользователя, который знает, что он не может сгенерировать клип в формате MPEG, не будет загружать файл "TheEarth.mpeg" из сети. В третьем объявлении задается местоположение файла в формате GIF и определяется альтернативный текст на случай, если все прочие механизмы не сработают.
Встроенные и внешние данные. Данные, которые должны генерироваться, могут указываться двумя способами: в виде встроенного или внешнего ресурса. Последний метод обычно обеспечивает более быструю генерацию, но неудобен при генерации большого объема данных.
Ниже приводится пример, показывающий, как встроенные данные могут be fed to an OBJECT:
<P> <OBJECT id="clock1" classid="clsid:663C8FEF-1EF9-11CF-A3DB-080036F12502" data="data:application/x-oleobject;base64, ...данные base64..."> Часы. </OBJECT>
Информацию о размере, выравнивании и границах объекта см. в разделе визуальное представление объектов, изображений и апплетов.
<!ELEMENT PARAM - O EMPTY -- значение именованного свойства --> <!ATTLIST PARAM id ID #IMPLIED -- идентификатор в пределах документа -- name CDATA #REQUIRED -- имя свойства -- value CDATA #IMPLIED -- значение свойства -- valuetype (DATA|REF|OBJECT) DATA -- Как интерпретировать значение -- type %ContentType; #IMPLIED -- тип содержимого для значения, если valuetype=ref -- >
Начальный тег: обязателен, Конечный тег: запрещен
Определения атрибутов
Атрибуты, определенные в другом месте
Элементы PARAM определяют набор значений, которые могут понадобиться объекту во время работы. В элементах OBJECT или APPLET может присутствовать любое число атрибутов PARAM в любом порядке, но они должны помещаться в начале тела включающего элемента OBJECT или APPLET.
Синтаксис имен и значений считается понятным обработчику объекта. Данный документ не указывает, как агенты пользователей должны загружать пары имя/значение, а также того, как они должны интерпретировать повторяющиеся имена параметров.
Вернемся к примеру с часами и покажем использование элемента PARAM: предположим, что апплет может принимать два рабочих параметра, определяющих его начальную высоту и ширину. Мы можем установить исходные размеры 40x40 пикселов с помощью двух элементов PARAM.
<P><OBJECT classid="http://www.miamachina.it/analogclock.py"> <PARAM name="height" value="40" valuetype="data"> <PARAM name="width" value="40" valuetype="data"> Этот агент пользователя не может сгенерировать приложение на языке Python. </OBJECT>
В следующем примере рабочие данные для параметра "Init_values" объекта задаются в виде внешнего ресурса (файл GIF). Таким образом для атрибута valuetype устанавливается значение "ref", а атрибутом value является адрес URI ресурса.
<P><OBJECT classid="http://www.gifstuff.com/gifappli" standby="Загрузка Элвиса..."> <PARAM name="Init_values" value="./images/elvis.gif"> valuetype="ref"> </OBJECT>
Обратите внимание, что мы также установили атрибут standby, так что агент пользователя может отобразить сообщение во время загрузки генерирующего механизма.
Когда элемент OBJECT сгенерирован, агенты пользователя должны выполнить поиск содержимого только для тех элементов PARAM, которые являются их прямыми дочерними элементами и "feed" их to the OBJECT.
Таким образом, в следующем примере, если сгенерирован "obj1", "param1" применяется к "obj1" (и не применяется к "obj2"). Если "obj1" не сгенерирован, а "obj2" сгенерирован, "param1" игнорируется, а "param2" применяется к "obj2". Если ни один OBJECT не сгенерирован, ни один PARAM не применяется.
<P> <OBJECT id="obj1"> <PARAM name="param1"> <OBJECT id="obj2"> <PARAM name="param2"> </OBJECT> </OBJECT>
Местоположение обработчика объекта задается адресом URI. Как было сказано во введении в URI, первый сегмент абсолютного адреса URI задает схему именования, используемую для передачи данных, назначаемых адресом URI. Для документов в формате HTML этой схемой часто является "http". Некоторые апплеты могут использовать внешние схемы именования. Например, при указании апплета Java авторы могут использовать адреса URI, начинающиеся с "java", я для аппелтов ActiveX авторы могут использовать "clsid".
В следующем примере мы вставляем апплет на языке Java в документ в формате HTML.
<P><OBJECT classid="java:program.start"> </OBJECT>
Установив атрибут codetype, агент пользователя может определить, нужно ли загружать ли приложение Java, в зависимости от своих возможностей.
<OBJECT codetype="application/java-archive" classid="java:program.start"> </OBJECT>
Некоторым схемам генерации для определения обработки необходима дополнительная информация, поэтому им необходимо указать, где находится эта информация. Авторы могут указать путь к обработчику объекта с помощью атрибута codebase.
<OBJECT codetype="application/java-archive" classid="java:program.start"> codebase="http://foooo.bar.com/java/myimplementation/" </OBJECT>
В следующем примере (с помощью атрибута classid) задается объект ActiveX в виде адреса URI, начинающегося со схемы именования "clsid". Атрибут data определяет местоположение генерируемых данных (еще одни часы).
<P><OBJECT classid="clsid:663C8FEF-1EF9-11CF-A3DB-080036F12502" data="http://www.acme.com/ole/clock.stm"> Это приложение не поддерживается. </OBJECT>
Чтобы объявить объект так, чтобы он не обрабатывался агентом пользователя при чтении, установите логический атрибут declare элемента OBJECT. В то же время авторы должны идентифицировать объявление, установив уникальное значение для атрибута id в элементе OBJECT. Инициализация объекта позже будет ссылаться на этот идентификатор.
Объявленный OBJECT должен присутствовать в документе до первого экземпляра OBJECT.
Объект, определенный с атрибутом declare, инициализируется каждый раз, когда необходима генерация элемента, ссылающегося на этот объект (например, активизируется ссылка на него, активизируется объект, ссылающийся на него и т.д.).
В следующем примере мы объявляем OBJECT и вызываем его инициализацию, указав его в ссылке. Таким образом объект можно активизировать, щелкнув, например, на выделенном тексте.
<P><OBJECT declare id="earth.declaration" data="TheEarth.mpeg" type="application/mpeg"> Вид <STRONG>Земли</STRONG> из космоса. </OBJECT> ...далее в документе... <P>Красивое<A href="#earth.declaration"> анимационное изображение Земли!</A>
В следующем примере показано, как указать рабочие значения, являющиеся другими объектами. В этом примере мы отправляем текст (стихотворение) гипотетическому механизму для просмотра стихотворений. Объект распознает рабочий параметр с именем "font" (скажем, для генерации текста стихотворения с использованием определенного шрифта). Значение этого параметра само является объектом, вставляющим (но не генерирующим) объект шрифта. Отношение между объектом шрифта и объектом механизма просмотра стихотворений достигается с помощью (1) назначения атрибута id в объявлении объекта шрифта и (2) ссылки на него в элементе PARAM объекта механизма просмотра стихотворений (с помощью valuetype и value).
<P><OBJECT declare id="tribune" type="application/x-webfont" data="tribune.gif"> </OBJECT> ...просмотр стихотворения из файла KublaKhan.txt... <P><OBJECT classid="http://foo.bar.com/poem_viewer" data="KublaKhan.txt"> <PARAM name="font" valuetype="object" value="#tribune"> <P>У вас нет такой классной программы просмотра стихотворений... </OBJECT>
Агенты пользователей, не поддерживающие атрибут declare, должны генерировать содержимое объявления OBJECT.
Формальное определение см. в Transitional DTD.
Определения атрибутов
Если апплет "deserialized", метод start() вызывается вместо метода init(). Атрибуты, допустимые при serialized исходного объекта, не восстанавливаются. Атрибуты, переданные в этот экземпляр APPLET, будут доступны апплету. Авторам следует очень осторожно использовать это свойство. Перед serialized вапплет должен быть остановлен.
Должен присутствовать один из атрибутов code или object. Если даны оба атрибута code и object, и в них указаны разные имена классов, это является ошибкой.
Атрибуты, определенные в другом месте
Этот элемент, поддерживаемый всеми программами просмотра с поддержкой Java, позволяет дизайнерам внедрять апплеты Java в документы HTML. Он является нежелательным, и вместо него следует использовать элемент OBJECT.
Содержимое элемента APPLET служит альтернативной информацией для агентов пользователей, не поддерживающих этот элемент или не сконфигурированных для поддержки апплетов. В противном случае агенты пользователей должны игнорировать содержимое.
ПРИМЕР НЕЖЕЛАТЕЛЬНОГО ИСПОЛЬЗОВАНИЯ:
В следующем примере элемент APPLET включает в документ апплет на языке Java. Поскольку атрибут codebase не установлен, предполагается, что апплет находится в том же каталоге, что и сам документ.
<APPLET code="Bubbles.class" width="500" height="500"> Java-апплет, рисующий движущиеся пузыри. </APPLET>
Этот пример можно переписать с использованием элемента OBJECT следующим образом:
<P><OBJECT codetype="application/java" classid="java:Bubbles.class" width="500" height="500"> Java-апплет, рисующий движущиеся пузыри. </OBJECT>
Задать для апплета исходные значения можно с помощью элемента PARAM.
ПРИМЕР НЕЖЕЛАТЕЛЬНОГО ИСПОЛЬЗОВАНИЯ:
Следующий апплет на языке Java:
<APPLET code="AudioItem" width="15" height="15"> <PARAM name="snd" value="Hello.au|Welcome.au"> Java-апплет, воспроизводящий звуковой файл приветствия. </APPLET>
можно определить с использованием элемента OBJECT следующим образом:
<OBJECT codetype="application/java" classid="AudioItem" width="15" height="15"> <PARAM name="snd" value="Hello.au|Welcome.au"> Java-апплет, воспроизводящий звуковой файл приветствия. </OBJECT>
Внедренный документ полностью независим от документа, в который он внедрен. Например, относительные адреса URI во внедренном документе разрешаются в соответствии с базовым адресом URI, указанным во внедренном документе, а не в основном документе. Внедренный документ только генерируется в другом документе (например, во вложенном окне); it во всех остальных отношениях он остается независимым.
Например, следующая строка внедряет содержимое файла embed_me.html в то место документа, в котором встречено определение OBJECT.
...предшествующий текст... <OBJECT data="embed_me.html"> Внимание: невозможно внедрить файл embed_me.html. </OBJECT> ...последующий текст...
Вспомните, что содержимое элемента OBJECT должно генерироваться, только если файл, задаваемый атрибутом data, невозможно загрузить.
Поведение агента пользователя в случаях, когда файл включает сам себя, не определено.
Навигационная карта создается путем назначения объекта с указанием соответствующих геометрических областей.
Имеется два типа навигационных карт:
Клиентские навигационные карты являются предпочтительными по отношению к серверным по крайней мере по двум причинам: они доступны пользователям неграфических агентов и позволяют незамедлительно определить, находится ли указатель в активной области.
<!ELEMENT MAP - - ((%block;)+ | AREA+) - клиентская навигационная карта --> <!ATTLIST MAP %attrs; -- %coreattrs, %i18n, %events -- name CDATA #REQUIRED - для ссылки usemap -- >
Начальный тег: обязателен, Конечный тег: обязателен
<!ELEMENT AREA - O EMPTY -- область клиентской навигационной карты --> <!ATTLIST AREA %attrs; -- %coreattrs, %i18n, %events -- shape %Shape; rect -- управляет интерпретацией координат -- coords %Coords; #IMPLIED -- разделенный запятыми список длин -- href %URI; #IMPLIED -- адрес URI связанного ресурса -- nohref (nohref) #IMPLIED -- для этого региона действие не назначено -- alt %Text; #REQUIRED -- краткое описание -- tabindex NUMBER #IMPLIED -- положение в последовательности перехода -- accesskey %Character; #IMPLIED -- символ доступа -- onfocus %Script; #IMPLIED -- элемент получил фокус -- onblur %Script; #IMPLIED -- элемент потерял фокус -- >
Начальный тег: обязателен, Конечный тег: запрещен
Определения атрибутов элемента MAP
Определения атрибутов элемента AREA
Координаты задаются относительно верхнего левого угла объекта. Все значения являются длинами. Все значения отделяются друг от друга запятыми.
Атрибут для установления связи навигационной карты с элементом
Атрибуты, определенные в другом месте
Элемент MAP определяет клиентскую навигационную карту, которая может быть связана с одним или несколькими элементами (IMG, OBJECT или INPUT). Навигационная карта связывается с элементом с помощью атрибута usemap этого элемента.
Наличие атрибута usemap в элементе OBJECT подразумевает, что объект включается в виде изображения. Более того, если с элементом OBJECT связана клиентская навигационная карта, агенты пользователей могут интерпретировать взаимодействие пользователя с элементом OBJECT исключительно в терминах клиентской навигационной карты. Это позволяет агентам пользователей (например, звуковым браузерам или роботам) взаимодействовать с элементом OBJECT, не обрабатывая его; агент пользователя может даже не загружать (или не обрабатывать) объект. Если с элементом OBJECT связана навигационная карта, авторы не могут быть уверены, что этот объект будет загружаться и обрабатываться всеми агентами пользователей.
Каждый элемент MAP может содержать следующее:
Если несколько определенных регионов перекрываются, приоритет имеет элемент, указанный в документе первым (т.е. на ввод пользователя отвечает именно этот элемент).
Агенты пользователей и авторы должны обеспечивать текстовые альтернативы графических навигационных карт на случай, если графика недоступна или пользователь не может получить к ней доступ. Например, агенты пользователей могут использовать текст атрибута alt для создания текстовых ссылок вместо графической навигационной карты. Такие ссылки могут активизироваться различными способами (клавиатура, голос и т.д.).
Примечание. Элемент MAP не совместим с агентами пользователей для языка HTML версии 2.0.
В следующем примере мы создаем клиентскую навигационную карту для элемента OBJECT. Сы не хотим генерировать содержимое карты при генерации элемента OBJECT, поэтому мы "скроем" элемент MAP в содержимом элемента OBJECT. Затем содержимое элемента MAP будет генерироваться, только если нельзя сегенировать содержимое элемента OBJECT.
<HTML> <HEAD> <TITLE>Крутая страница!</TITLE> </HEAD> <BODY> <P><OBJECT data="navbar1.gif" type="image/gif" usemap="#map1"> <MAP name="map1"> <P>Перемещение по узлу: <A href="guide.html" shape="rect" coords="0,0,118,28">Руководство по доступу</a> | <A href="shortcut.html" shape="rect" coords="118,0,184,28">Переход</A> | <A href="search.html" shape="circle" coords="184,200,60">Поиск</A> | <A href="top10.html" shape="poly" coords="276,0,373,28,50,50,276,0">Первые десять</A>< </MAP> </OBJECT> </BODY> </HTML>
Нам может понадобиться генерация содержимого карты, даже если агент пользователя может сгенерировать элемент OBJECT. Например, мы хотим связать навигационную карту с элементом OBJECT и включить текстовую навигационную панель внизу страницы. Чтобы это сделать, определим элемент MAP вне элемента OBJECT:
<HTML> <HEAD> <TITLE>Крутая страница!</TITLE> </HEAD> <BODY> <P><OBJECT data="navbar1.gif" type="image/gif" usemap="#map1"> </OBJECT> ...продолжение страницы... <MAP name="map1"> <P>Перемещение по узлу: <A href="guide.html" shape="rect" coords="0,0,118,28">Руководство по доступу</a> | <A href="shortcut.html" shape="rect" coords="118,0,184,28">Переход</A> | <A href="search.html" shape="circle" coords="184,200,60">Поиск</A> | <A href="top10.html" shape="poly" coords="276,0,373,28,50,50,276,0">Первые десять</A> </MAP> </BODY> </HTML>
В следующем примере мы создаем сходную навигационную карту, на этот раз используя элемент AREA. Обратите внимание на использование текста alt:
<P><OBJECT data="navbar1.gif" type="image/gif" usemap="#map1"> <P>Это навигационная панель. </OBJECT> <MAP name="map1"> <AREA href="guide.html" alt="Руководство по доступу" shape="rect" coords="0,0,118,28"> <AREA href="search.html" alt="Поиск" shape="rect" coords="184,0,276,28"> <AREA href="shortcut.html" alt="Переход" shape="circle" coords="184,200,60"> <AREA href="top10.html" alt="Первые десять" shape="poly" coords="276,0,373,28,50,50,276,0"> </MAP>
Вот версия с использованием элемента IMG вместо элемента OBJECT (с тем же самым объявлением MAP):
<P><IMG src="navbar1.gif" usemap="#map1" alt="навигационная панель">
В следующем примере показано, как элементы могут совместно использовать навигационные карты.
Вложенные элементы OBJECT полезны для обеспечения fallbacks в случае, если агент пользователя не поддерживает определенные форматы. Например:
<P> <OBJECT data="navbar.png" type="image/png"> <OBJECT data="navbar.gif" type="image/gif"> текст с описанием изображения... </OBJECT> </OBJECT>
Если агент пользователя не поддерживает формат PNG, он пытается сгенерировать изображение в формате GIF. Если он не поддерживает GIF (например, это речевой агент пользователя), он воспроизводит текстовое описание, указанное в содержимсом внутреннего элемента OBJECT. Если элементы OBJECT вложены таким образом, авторы могут обеспечивать совместное использование этими элементами навигационных карт:
<P> <OBJECT data="navbar.png" type="image/png" usemap="#map1"> <OBJECT data="navbar.gif" type="image/gif" usemap="#map1"> <MAP name="map1"> <P>Перемещение по узлу: <A href="guide.html" shape="rect" coords="0,0,118,28">Руководство по доступу</a> | <A href="shortcut.html" shape="rect" coords="118,0,184,28">Переход</A> | <A href="search.html" shape="circle" coords="184,200,60">Поиск</A> | <A href="top10.html" shape="poly" coords="276,0,373,28,50,50,276,0">Первые десять</A> </MAP> </OBJECT> </OBJECT>
В следующем примере показано, как можно указать anchors для создания неактивных зон в навигационной карте. Первый anchor определяет небольшую круглую область, с которой не связана ссылка. Второй anchor определяет круглую область большего размера с той же координатой центра. Обе они вместе образуют кольцо, центр которого неактивен, а внешняя часть активна. Порядок определения anchor важен, поскольку меньший круг должен иметь приоритет над большим.
<MAP name="map1"> <P> <A shape="circle" coords="100,200,50">Я неактивная.</A> <A href="outer-ring-link.html" shape="circle" coords="100,200,250">Я активная.</A> </MAP>
Точно так же атрибут nohref элемента AREA объявляет, что с геометрической областью не связана ссылка.
Серверные навигационные карты представляют интерес в случаях, когда карта слишком сложна.
Определить серверную навигационную карту можно только для элементов IMG и INPUT. В случае элемента IMG этот элемент должен быть включен в элемент A. В случае элемента INPUT он должен иметь тип "image". В обоих случаях для элемента должен быть установлен логический атрибут ismap [CI].
Когда пользователь активизирует ссылку, щелкнув на изображении, экранные координаты отправляются непосредственно на сервер, на котором располагается документ. Экранные координаты выражаются в виде пикселов относительно изображения. Нормативную информацию об определении пикселов и об их масштабировании см. в [CSS1].
В следующем примере активная область определяет серверную ссылку. Таким образом щелчок в любой точке изображения вызовет передачу координат на сервер.
<P><A href="http://www.acme.com/cgi-bin/competition"> <IMG src="game.gif" ismap alt="target"></A>
Координаты области, в которой произошел щелчок, передаются на сервер следующим образом. Агент пользователя получает новый адрес URI из адреса URI, указанного в атрибуте href элемента A, добавляя `?', за которым следуют координаты x и y, разделенные запятой. Затем происходит переход по ссылке с использованием нового адреса URI. Например, в данном примере, если пользователь щелкает в точке с координатами x=10, y=27, то новый адрес URI - "http://www.acme.com/cgi-bin/competition?10,27".
Агенты пользователей, не предлагающие пользователям средств выбора определенных координат (например, неграфические агенты пользователей, зависящие от ввода с клавиатуры, речевые агенты пользователей и т.д.) должны при активизации ссылки передавать на сервер координаты "0,0".
Определения атрибутов
Если указаны атрибуты width и height, они сообщают агентам пользователя о необходимости переопределения исходного размера изображения или объекта этими значениями.
Если объектом является изображение, оно масштабируется. Агенты пользователей должны наилучшим образом масштабировать объект или изображение, чтобы они соответствовали ширине и высоте, определенным автором. Обратите внимание, что длины, выраженные в процентах, зависят от доступного горизонтального или вертикального пространства, а не от исходного размера изображения, объекта или апплета.
Атрибуты height и width дают агентам пользователей представление о размере изображения или объекта, чтобы они могли зарезервировать соответствующее пространство и продолжать генерацию документа, ожидая данных об изображении.
Атрибуты vspace и hspace определяют свободное пространство слева и справа (hspace) и над и под (vspace) IMG, APPLET, OBJECT. По умолчанию значение этого атрибута не определено, но обычно это небольшое ненулевое значение. Оба атрибута имеют значение типа длина.
Изображение или объект может окружать граница (например, если она указана пользователем или изображение имеет содержимое элемента A).
Определения атрибутов
Атрибут align определяет положение IMG, OBJECT или APPLET относительно его содержимого.
Следующие значения атрибута align относятся к положению объекта относительно окружающего текста:
Два других значения, left и right, приводят к перемещению изображения к текущему левому или правому полю. Они обсуждаются в разделе о плавающих объектах.
Различие интерпретаций атрибута align. Агенты пользователей по-разному интерпретируют атрибут align. Некоторые принимают в расчет только текстовую строку, находящуюся перед элементом, некоторые учитывают текст по обеим сторонам элемента.
Определения атрибутов
Для некоторых нетекстовых элементов (IMG, AREA, APPLET и INPUT) авторы должны указывать альтернативный текст, служащий содержимым, если элемент нельзя нормально сгенерировать. Задание альтернативного текста помогает пользователям, не имеющих графических дисплеев, пользователям, браузеры которых не поддерживают формы, visually impaired users, пользователям синтезаторов речи, пользователям, графический агент которых сконфигурирован так, чтобы не выводить изображения и т.д.
Атрибут alt должен быть указан для элементов IMG и AREA. Он не является обязательным для элементов INPUT и APPLET.
В то время как альтернативный текст может быть очень полезным, использовать его нужно осторожно. Авторы должны иметь в виду следующее:
Информацию об обработке случаев, когда альтернативный текст отсутствует, разработчики могут найти в разделе о генерации альтернативного текста.
Примечание. Подробнее о создании доступных документов HTML см. [WAIGUIDE].
Содержание
HTML предлагает множество условных оборотов для текстовых и структурированных документов, но что отличает его от большинства других языков разметки - его возможности разметки гипертекста и интерактивных документов. В этом разделе вводится понятие ссылки (или гиперссылки или ссылки Web), основной гипертекстовой конструкции. Ссылки связывают один ресурс Web с другим. Несмотря на простоту, ссылки стали основным залогом успеха Web.
Ссылка имеет два конца - называемых anchors -- и направление. Ссылка начинается в "исходном" anchor (источнике) и указывает на "целевой" anchor, который может быть любым ресурсом Web (например, изображением, видеоклипом, звуковым файлом, программой, документом HTML, элементом в документе HTML и т.д.).
По умолчанию со ссылкой связана загрузка другого ресурса Web. Это поведение достигается обычно путем выбора ссылки (например, с помощью щелчка мыши, ввода с клавиатуры и т.д.).
В следующем HTML-фрагменте содержится две ссылки, у одной целевым anchor является документ HTML с именем "chapter2.html", а у второй целевой anchor - изображение в формате GIF, расположенное в файле "forest.gif":
<BODY> ...какой-то текст... <P>Подробнее см. в <A href="chapter2.html">главе два</A>. См. также <A href="../images/forest.gif">карту леса.</A> </BODY>
Путем активизации этих ссылок (с помощью щелчка мыши, ввода с клавиатуры, голосовых команд и т.д.) пользователи могут перейти к этим ресурсам. Обратите внимание, что атрибут href в каждом исходном anchor указывает адрес целевого anchor с использованием URI.
Целевой anchor ссылки может быть элементом в документе HTML. Целевому anchor должно даваться имя и адрес URI, адресующий этот anchor, Должен содержать это имя в качестве идентификатора фрагмента.
Целевые anchors в документах HTML могут указываться с помощью элемента A (именующего его с помощью атрибута name) или с помощью любого другого элемента (именующего с помощью атрибута id).
Таким образом, например, автор может создавать оглавление, элементы Которого являются ссылками на элементы заголовков H2, H3 и т.д. в том же документе. Используя элемент A для создания целевых anchors, можно записать:
<H1>Содержание;/H1> <P><A href="#section1">Введение</A><BR> <A href="#section2">Предыстория</A><BR> <A href="#section2.1">Более конкретные заметки</A><BR> ...продолжение содержания... ...тело документа... <H2><A name="section1">Введение</A></H2> ...раздел 1... <H2><A name="section2">Предыстория</A></H2> ...раздел 2... <H3><A name="section2.1">Более конкретные заметки</A></H3> ...раздел 2.1...
Этого же эффекта можно достигнуть, сделав якорями сами элементы заголовка:
<H1>Содержание</H1> <P><A href="#section1">Введение</A><BR> <A href="#section2">Предыстория</A><BR> <A href="#section2.1">Более конкретные заметки</A><BR> ...продолжение содержания... ...тело документа... <H2 id="section1">Введение</H2> ... раздел 1... <H2 id="section2">Предыстория</H2> ... раздел 2... <H3 id="section2.1">Более конкретные заметки</H3> ...раздел 2.1...
Наиболее часто сейчас ссылки используются для загрузки других ресурсов Web, как показано в предыдущих примерах. Однако авторы могут помещать в свои документы ссылки, выражающие иные отношения между ресурсами, чем просто "использование ссылки для Просмотра связанного ресурса". Для ссылок, выражающих другие типы отношений, В исходном якоре указываются один или более типов ссылок.
Роли ссылок, определяемых элементом A или LINK указываются с помощью атрибутов rel и rev.
Например, ссылки, определяемые элементом LINK, могут описывать положение документа в последовательности документов. В следующем примере ссылка в документе "Глава 5" указывает на предыдущую и последующую главы:
<HEAD> ...другая заголовочная информация... <TITLE>Глава 5</TITLE> <LINK rel="prev" href="chapter4.html"> <LINK rel="next" href="chapter6.html"> </HEAD>
Тип первой ссылки - "prev", второй - "next" (два из ряда распознаваемых типов ссылок). Ссылки, задаваемые элементов LINK, не генерируются с содержимым документа, хотя агенты пользователей могут отображать их различными способами (например, в виде средств перехода).
Даже если они не используются для перехода, эти ссылки могут интерпретироваться интересными способами. Например, агент пользователя, выполняющий печать ряда документов в формате HTML в виде одного документа, может использовать эту информацию для формирования последовательного линейного документа. Дальнейшая информация об использовании ссылок для поисковых систем приведена ниже.
Хотя некоторые элементы и атрибуты языка HTML создают ссылки на другие ресурсы (например, элемент IMG, элемент FORM и т.д.), в этой главе обсуждаются ссылки и якоря, создаваемые элементами LINK и A. Элемент LINK может присутствовать только в заголовке документа. Элемент A может присутствовать только в теле документа.
Если для элемента A установлен атрибут href, этот элемент определяет исходный якорь для ссылки, которая может активизироваться пользователем для загрузки ресурса Web. Исходный якорь - это местоположение экземпляра элемента A и целевой якорь ресурса Web.
Загруженный ресурс может обрабатываться агентом пользователя различными способами: открытием нового документа HTML в том же окне агента, открытием нового документа HTML в другом окне, запуском новой программы для обработки ресурса и т.д. Поскольку элемент A имеет содержание (текст, изображения и т.д.), агенты пользователей могут генерировать это содержимое так, чтобы показать наличие ссылки (например, подчеркивая содержимое).
Если установлены атрибуты name или id элемента A, этот элемент определяет якорь, который может служить целью других ссылок.
Авторы могут устанавливать атрибуты name и href одновременно в одном экземпляре элемента A.
Элемент LINK определяет отношение между текущим документом и другим ресурсом. Хотя элемент LINK не имеет содержимого, определяемые им отношения могут отображаться некоторыми агентами пользователей.
Атрибут title может устанавливаться как для элемента A, так и для элемента LINK; в нем указывается информация о природе ссылки. Эта информация может проговариваться агентом пользователя, отображаться в виде подсказки, изменять вид курсора и т.д.
Таким образом можно augment предыдущий пример, указав для каждой ссылки заголовок:
<BODY> ...некоторый текст... <P>Подробнее Вы можете узнать об этом в <A href="chapter2.html" title="Перейдите к главе 2">главе 2</A>. <A href="./chapter2.html" title="Переход к главе 2.">глава 2</A>. См. также <A href="../images/forest.gif" title="Изображение леса в формате GIF">карту леса.</A> </BODY>
Поскольку ссылки могут указывать на документы, использующие другие кодировки символов, элементы A и LINK поддерживают атрибут charset. Этот атрибут позволяет авторам рекомендовать агентам пользователей кодировку данных в связанном документе.
Атрибут hreflang предоставляет агенту пользователя информацию о языке связанного ресурса, точно так же, как атрибут lang предоставляет информацию о языке содержимого элемента или значениях атрибутов.
Имея дополнительные знания, агенты пользователей должны иметь возможность не представлять пользователю "мусор". Вместо этого они могут находить ресурсы, необходимые для корректного представления документа или, если они не могут найти эти ресурсы, по крайней мере уведомить пользователя о невозможности прочтения документа с указанием причины.
<!ELEMENT A - - (%inline;)* -(A) -- якорь (точка ссылки) --> <!ATTLIST A %attrs; -- %coreattrs, %i18n, %events -- charset %Charset; #IMPLIED -- кодировка символов связанного ресурса -- type %ContentType; #IMPLIED -- рекомендуемый тип содержимого -- name CDATA #IMPLIED -- конец именованной ссылки -- href %URI; #IMPLIED -- URI связанного ресурса -- hreflang %LanguageCode; #IMPLIED -- код языка -- rel %LinkTypes; #IMPLIED -- типы прямых ссылок -- rev %LinkTypes; #IMPLIED -- типы обратных ссылок -- accesskey %Character; #IMPLIED -- клавиша доступа -- shape %Shape; rect -- для использования с клиентскими навигационными картами -- coords %Coords; #IMPLIED -- для использования с клиентскими навигационными картами -- tabindex NUMBER #IMPLIED -- положение в последовательности перехода -- onfocus %Script; #IMPLIED -- фокус на элементе -- onblur %Script; #IMPLIED -- фокус вне элемента -- >
Начальный тэг: обязателен, Конечный тэг: обязателен
Определения атрибутов
Атрибуты, определяемые в другом месте
Каждый элемент A определяет якорь
Авторы также могут создавать элемент A, не определяющий ни одного якоря, и не указывающий href, name или id. Значения этих атрибутов могут устанавливаться позднее с помощью скриптов.
В следующем примере элемент A определяет ссылку. Исходным якорем является текст " Web-сайте W3C", а пунктом назначения - "http://www.w3.org/":
Подробнее о W3C Вы можете узнать на <A href="http://www.w3.org/"> Web-сайте W3C</A>.
Эта ссылка указывает на страницу World Wide Web Consortium. Если пользователь активизирует эту ссылку в своем агенте, агент загрузит ресурс, в данном случае - документ HTML.
Обычно агенты пользователей представляют ссылки так, чтобы они были очевидны для пользователей (подчеркивание, обратное видео и т.д.). Конкретное представление зависит от агента пользователя. Представление может различаться в зависимости от того, посещал ли уже пользователь указанную ссылку. Возможное визуальное представлением предыдущей ссылки:
Подробнее о W3C Вы можете узнать на Web-сайте W3C. ~~~~~~~~~~~~~
Чтобы дать агентам пользователей явное указание кодировки символов целевой страницы, установите атрибут charset:
Подробнее о W3C Вы можете узнать на <A href="http://www.w3.org/" charset="ISO-8859-1">Web-сайте W3C</A>
Предположим, мы определяем якорь с именем "anchor-one" в файле "one.html".
...текст до якоря... <A name="anchor-one">Это местоположение первого якоря.</A> ...текст после якоря...
В данном фрагменте вокруг текста "Это местоположение первого якоря" создается якорь. Обычно содержимое элемента A не представляется каким-либо особым образом, если элемент A определяет только якорь.
Определив якорь, мы можем связать его с этим же или с другим документом. URI, назначающие якорь, включают символ "#", за которым следует имя якоря (идентификатор фрагмента). Вот несколько примеров таких URI:
Таким образом, ссылка, определенная в файле "two.html", который находится в одном каталоге с файлом "one.html", будет указывать на этот якорь следующим образом:
...текст до ссылки... Подробнее см. <A href="./one.html#anchor-one"> первый якорь</A>. ...текст после ссылки...
Элемент A в следующем примере задает ссылку (с помощью атрибута href) и одновременно создает именованный якорь (с помощью атрибута name):
Я только что вернулся из отпуска! Вот <A name="anchor-two" href="http://www.somecompany.com/People/Ian/vacation/family.png"> фотография моей семьи на озере.</A>.
В этом примере содержится ссылка на другой тип ресурса Web (изображение в формате PNG). Активизация ссылки должна привести к загрузке изображения из Web (и, возможно, его отображению, если система сконфигурирована соответствующим образом).
Примечание. Агенты пользователей должны уметь находить якоря, созданные пустыми элементами A, но некоторые агенты не могут этого делать. Например, некоторые агенты пользователей могут не найти "empty-anchor" в следующем фрагменте HTML:
<A name="empty-anchor"></A> <EM>...некоторые текст в формате HTML...</EM> <A href="#empty-anchor">Ссылка на пустой якорь</A>
Именем якоря является значение атрибута name или атрибута id, используемого в контексте якоря. К именам якорей применяются следующие правила:
Таким образом, следующий пример является корректным в смысле соответствия строк и должен рассматриваться агентами пользователей как совпадение:
<P><A href="#xxx">...</A> ...некоторый текст... <P><A name="xxx">...</A>
ПРИМЕР НЕДОПУСТИМОГО ИСПОЛЬЗОВАНИЯ:
Следующий пример не является корректным в смысле уникальности, поскольку два имени отличаются только регистром:
<P><A name="xxx">...</A> <P><A name="XXX">...</A>
Хотя далее приводится допустимый код HTML, поведение агента пользователя в данном случае не определено; некоторые агенты пользователей могут (ошибочно) считать это совпадением, другие могут так не считать.
<P><A href="#xxx">...</A> ...некоторый текст... <P><A name="XXX">...</A>
Имена якорей должны содержать только символы набора ASCII. Подробнее см. в разделе об использовании символов, не входящих в набор ASCII, в значениях атрибутов URI.
Ссылки и якоря, определяемые элементом A, не могут быть вложенными; элемент A не должен содержать других элементов A.
Поскольку DTD определяет элемент LINK как пустой, элементы LINK также не могут быть вложенными.
Атрибут id может использоваться для создания якоря в начальном тэге любого элемента (включая элемент A).
В данном примере показано использование атрибута id для размещения якоря в элементе H2. Связь с якорем осуществляется с помощью элемента A.
Подробнее об этом Вы можете прочесть в <A href="#section2">Разделе 2</A>. ...далее в документе <H2 id="section2">Раздел 2</H2> ...далее в документе <P>Подробнее см. в <A href="#section2">Разделе 2</A> выше.
В следующем примере имя целевого якоря задается с помощью атрибута id:
Я только что вернулся из отпуска! Вот <A id="anchor-two">фотография моей семьи на озере.</A>.
Атрибуты id и name используют одно и то же пространство имен. Это означает, что они не могут определять якорь с одним и тем же именем в одном и том же документе.
ПРИМЕР НЕДОПУСТИМОГО ИСПОЛЬЗОВАНИЯ:
Далее показан недопустимый фрагмент кода HTML, поскольку эти атрибут объявляют одно и то же имя дважды в пределах одного документа.
<A href="#a1">...</A> ... <H1 id="a1"> ...страницы и страницы... <A name="a1"></A>
По спецификации в HTML DTD атрибут name может содержать ссылки на символы. Таким образом, значение Dürst является допустимым для атрибута name, так же как Dürst . Атрибут id не может содержать ссылки на символы.
Что использовать - id или name? При выборе элемента id или name для указания имени якоря авторы должны иметь в виду следующее:
Ссылка на недоступный или неопределяемый ресурс является ошибкой. Хотя агенты пользователей могут по-разному обрабатывать такие ошибки, рекомендуется следующее поведение:
<!ELEMENT LINK - O EMPTY -- независимая от устройства ссылка --> <!ATTLIST LINK %attrs; -- %coreattrs, %i18n, %events -- charset %Charset; #IMPLIED -- кодировка символов связанного ресурса -- href %URI; #IMPLIED -- URI связанного ресурса -- hreflang %LanguageCode; #IMPLIED -- код языка -- type %ContentType; #IMPLIED -- рекомендуемый тип содержимого -- rel %LinkTypes; #IMPLIED -- тип прямой связи -- rev %LinkTypes; #IMPLIED -- тип обратной связи -- media %MediaDesc; #IMPLIED -- для представления на этих устройствах -- >
Начальный тэг: обязателен, Конечный тэг: запрещен
Атрибуты, определяемые в другом месте
Этот элемент определяет связь. В отличие от элемента A, он может присутствовать только в разделе HEAD документа, хотя может присутствовать неограниченное число раз. Хотя элемент LINK не имеет содержимого, он содержит информацию об отношениях, которая может представляться агентами пользователей различными способами (например, в виде панели с выпадающим списком ссылок).
В данном примере показано, как несколько определений элемента LINK могут быть представлены в разделе HEAD документа. Текущим документом является "Chapter2.html". Атрибут rel указывает отношение связанного документа с текущим документом. Значения "Index", "Next" и "Prev" описаны в разделе, посвященном типам ссылок.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <HTML> <HEAD> <TITLE>Глава 2</TITLE> <LINK rel="Index" href="../index.html"> <LINK rel="Next" href="Chapter3.html"> <LINK rel="Prev" href="Chapter1.html"> </HEAD> ...продолжение документа...
Атрибуты rel и rev играют дополнительные роли - атрибут rel задает прямую ссылку, а атрибут rev - обратную.
Рассмотрим два документа - A и B.
Документ A: <LINK href="docB" rel="foo">
имеет точно то же значение, что и:
Документ B: <LINK href="docA" rev="foo">
Оба атрибута могут определяться одновременно.
Если элемент LINK ссылается на внешнюю таблицу стилей для документа, атрибут type указывает язык таблицы стилей, а атрибут media - предполагаемое устройство или устройства для представления документа. Агенты пользователей могут сэкономить время, загружая из сети только те таблицы стилей, которые применяются к текущему устройству.
Типы устройств обсуждаются в разделе, посвященном таблицам стилей.
Авторы могут использовать элемент LINK для указания различной информации для поисковых машин, включая:
В примерах ниже показано, как информация о языке, типах устройств и типах ссылок может использоваться для улучшения обработки документа поисковыми машинами.
В следующем примере мы используем атрибут hreflang, чтобы сообщить поисковым машинам, где находятся голландская, португальская и арабская версии документа. Обратите внимание на использование атрибутов dir и charset для руководства на арабском языке, а также на использование атрибута lang для указания того, что значением атрибута title для элемента LINK, указывающего руководство на французском языке, задано по-французски.
<HEAD> <TITLE>Руководство на английском языке</TITLE> <LINK title="Руководство на голландском языке" type="text/html" rel="alternate" hreflang="nl" href="http://someplace.com/manual/dutch.html"> <LINK title="Руководство на португальском языке" type="text/html" rel="alternate" hreflang="pt" href="http://someplace.com/manual/portuguese.html"> <LINK title="Руководство на арабском языке" dir="rtl" type="text/html" rel="alternate" charset="ISO-8859-6" hreflang="ar" href="http://someplace.com/manual/arabic.html"> <LINK lang="fr" title="La documentation en Français" type="text/html" rel="alternate" hreflang="fr" href="http://someplace.com/manual/french.html"> </HEAD>
В следующем примере мы сообщаем поисковым машинам, где находится печатная версия руководства.
<HEAD> <TITLE>Руководство</TITLE> <LINK media="print" title="Руководство в формате postscript" type="application/postscript" rel="alternate" href="http://someplace.com/manual/postscript.ps"> </HEAD>
В следующем примере мы сообщаем поисковым машинам, где находится первая страница набора документов.
<HEAD> <TITLE>Руководство - страница 5</TITLE> <LINK rel="Start" title="Первая страница руководства" type="text/html" href="http://someplace.com/manual/start.html"> </HEAD>
Дальнейшая информация приведена в замечаниях в приложении о том, как помочь поисковым машинам проиндексировать Ваш Web-сайт.
<!ELEMENT BASE - O EMPTY -- базовый URI документа --> <!ATTLIST BASE href %URI; #REQUIRED -- URI, служащий базовым -- >
Начальный тэг: обязателен, Конечный тэг: запрещен
Определения атрибутов
Атрибуты, определяемые в другом месте
В HTML ссылки на внешние изображения, апплеты, программы для обработки форм, таблицы стилей и т.д. всегда задаются с помощью URI. Относительные URI разрешаются в соответствии с базовым URI, который может определяться из различных источников. Элемент BASE позволяет авторам явно указать базовый URI документа.
Если элемент BASE указан, он должен присутствовать в разделе HEAD документа HTML, до элементов, ссылающихся на внешние ресурсы. Информация о пути, указанная в элементе BASE, влияет только на URI в документе, в котором присутствует этот элемент.
Например, даны следующее объявление BASE и объявление A:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <HTML> <HEAD> <TITLE>Наши продукты</TITLE> <BASE href="http://www.aviary.com/products/intro.html"> </HEAD> <BODY> <P>Вы видели наши <A href="../cages/birds.gif">клетки для птиц</A>? </BODY> </HTML>
относительный URI "../cages/birds.gif" будет разрешен в:
http://www.aviary.com/cages/birds.gif
Агенты пользователей должны вычислять базовый URI для разрешения относительных URI в соответствии с [RFC1808], раздел 3. Далее описано, как [RFC1808] применяется именно к HTML.
Агенты пользователей должны вычислять базовый URI в соответствии со следующим приоритетом (от высшего приоритет к низшему):
Кроме того, элементы OBJECT и APPLET определяют атрибуты, имеющие преимущество над значением, установленным для элемента BASE. Подробнее об относящихся к ним определениям URI см. в определениях этих элементов.
Ссылки, указанные в заголовках HTTP, обрабатываются в точности так, как элементы LINK, явно установленные в документе.
<!-- В данном HTML 4.0 Strict DTD исключаются атрибуты и элементы представления, использование которых для определения стиля W3C планирует постепенно прекратить. Авторам следует при возможности использовать Strict DTD, но в случае необходимости поддержки атрибутов и элементов представления допускается использование Transitional DTD. В HTML 4.0 включены механизмы поддержки таблиц стилей, скриптов, внедрения объектов, улучшена поддержка направления текста справа налево и смешанного текста, а также внесены изменения в формы с целью обеспечения удобства работы пользователей с физическими недостатками. Черновик: $Дата: 1997/12/18 09:36:02 $ Авторы: Дэйв Рэгетт <dsr@w3.org> Арно Ле Орс <lehors@w3.org> Ян Джейкобс <ij@w3.org> Подробную информацию о HTML 4.0 можно найти по адресу: http://www.w3.org/TR/REC-html40 --> <!-- Пример типичного использования: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html> <head> ... </head> <body> ... </body> </html> URI, используемый как идентификатор системы, позволяет агенту пользователя загрузить необходимые DTD и наборы комбинаций. FPI для Transitional HTML 4.0 DTD: "-//W3C//DTD HTML 4.0 Transitional//EN его URI: http://www.w3.org/TR/REC-html40/loose.dtd Создавая документ с фреймами, используйте следующий FPI: "-//W3C//DTD HTML 4.0 Frameset//EN" и URI: http://www.w3.org/TR/REC-html40/frameset.dtd По отношению к HTML 4.0 поддерживаются следующие URI "http://www.w3.org/TR/REC-html40/strict.dtd" (Strict DTD) "http://www.w3.org/TR/REC-html40/loose.dtd" (Loose DTD) "http://www.w3.org/TR/REC-html40/frameset.dtd" (Frameset DTD) "http://www.w3.org/TR/REC-html40/HTMLlat1.ent" (комбинации набора Latin-1) "http://www.w3.org/TR/REC-html40/HTMLsymbol.ent" (комбинации набора Symbol) "http://www.w3.org/TR/REC-html40/HTMLspecial.ent" (специальные комбинации) Эти URI указывают на последнюю версию каждого файла. Для ссылки на специальную версию используйте следующие URI: "http://www.w3.org/TR/REC-html40-971218/strict.dtd" "http://www.w3.org/TR/REC-html40-971218/loose.dtd" "http://www.w3.org/TR/REC-html40-971218/frameset.dtd" "http://www.w3.org/TR/REC-html40-971218/HTMLlat1.ent" "http://www.w3.org/TR/REC-html40-971218/HTMLsymbol.ent" "http://www.w3.org/TR/REC-html40-971218/HTMLspecial.ent" --> <!--================== Импортированные имена ====================================--> <!ENTITY % ContentType "CDATA" -- тип устройства в соответствии с [RFC2045] --> <!ENTITY % ContentTypes "CDATA" -- разделенный запятыми список типов устройств в соответствии с [RFC2045] --> <!ENTITY % Charset "CDATA" -- кодировка символов в соответствии с [RFC2045] --> <!ENTITY % Charsets "CDATA" -- разделенный пробелами список кодировок символов в соответствии с [RFC2045] --> <!ENTITY % LanguageCode "NAME" -- код языка в соответствии с [RFC1766] --> <!ENTITY % Character "CDATA" -- отдельный символ [ISO10646] --> <!ENTITY % LinkTypes "CDATA" -- разделенный пробелами список типов ссылок --> <!ENTITY % MediaDesc "CDATA" -- отдельный дескриптор устройства или разделенный запятыми список --> <!ENTITY % URI "CDATA" -- универсальный идентификатор ресурса, см. [URI] --> <!ENTITY % Datetime "CDATA" - информация о дате и времени. Формат даты ISO --> <!ENTITY % Script "CDATA" - выражение скрипта --> <!ENTITY % StyleSheet "CDATA" - данные таблицы стилей --> <!ENTITY % Text "CDATA"> <!-- Комбинации параметров --> <!ENTITY % head.misc "SCRIPT|STYLE|META|LINK|OBJECT" - повторяющиеся элементы заголовка --> <!ENTITY % heading "H1|H2|H3|H4|H5|H6"> <!ENTITY % list "UL | OL"> <!ENTITY % preformatted "PRE"> <!--================ Комбинации мнемоник символов =========================--> <!ENTITY % HTMLlat1 PUBLIC "-//W3C//ENTITIES Latin1//EN//HTML" "http://www.w3.org/TR/REC-html40-971218/HTMLlat1.ent"> %HTMLlat1; <!ENTITY % HTMLsymbol PUBLIC "-//W3C//ENTITIES Symbols//EN//HTML" "http://www.w3.org/TR/REC-html40-971218/HTMLsymbol.ent"> %HTMLsymbol; <!ENTITY % HTMLspecial PUBLIC "-//W3C//ENTITIES Special//EN//HTML" "http://www.w3.org/TR/REC-html40-971218/HTMLspecial.ent"> %HTMLspecial; <!--=================== Общие атрибуты ===============================--> <!ENTITY % coreattrs "id ID #IMPLIED -- уникальный идентификатор в пределах документа -- class CDATA #IMPLIED -- разделенный проблеами список классов -- style %StyleSheet; #IMPLIED -- связанная информация о стиле -- title %Text; #IMPLIED -- рекомендуемый заголовок/усиление --" > <!ENTITY % i18n "lang %LanguageCode; #IMPLIED -- код языка -- dir (ltr|rtl) #IMPLIED -- направление слабого/нейтрального текста --" > <!ENTITY % events "onclick %Script; #IMPLIED -- щелчок кнопки указующего устройства -- ondblclick %Script; #IMPLIED -- двойной щелчок кнопки указующего устройства -- onmousedown %Script; #IMPLIED -- нажата кнопка указующего устройства -- onmouseup %Script; #IMPLIED -- отпущена кнопка указующего устройства -- onmouseover %Script; #IMPLIED -- указатель перемещен на -- onmousemove %Script; #IMPLIED -- указатель перемещен в пределы -- onmouseout %Script; #IMPLIED -- указатель перемещен за пределы -- onkeypress %Script; #IMPLIED -- клавиша нажата и отпущена -- onkeydown %Script; #IMPLIED -- клавиша нажата -- onkeyup %Script; #IMPLIED -- клавиша отпущена --" > <!-- Переключатель зарезервированных возможностей --> <!ENTITY % HTML.Reserved "IGNORE"> <!-- Следующие атрибуты зарезервированы, и, возможно, будут использоваться в будущем --> <![ %HTML.Reserved; [ <!ENTITY % reserved "datasrc %URI; #IMPLIED -- один или несколько источников данных -- datafld CDATA #IMPLIED -- имя свойства или столбца -- dataformatas (plaintext|html) plaintext - текст или html --" > ]]> <!ENTITY % reserved ""> <!ENTITY % attrs "%coreattrs; %i18n; %events;"> <!--=================== Разметка текста ======================================--> <!ENTITY % fontstyle "TT | I | B | BIG | SMALL"> <!ENTITY % phrase "EM | STRONG | DFN | CODE | SAMP | KBD | VAR | CITE | ABBR | ACRONYM" > <!ENTITY % special "A | IMG | OBJECT | BR | SCRIPT | MAP | Q | SUB | SUP | SPAN | BDO"> <!ENTITY % formctrl "INPUT | SELECT | TEXTAREA | LABEL | BUTTON"> <!-- %inline; встроенные элементы или элементы "уровня текста" --> <!ENTITY % inline "#PCDATA | %fontstyle; | %phrase; | %special; | %formctrl;"> <!ELEMENT (%fontstyle;|%phrase;) - - (%inline;)*> <!ATTLIST (%fontstyle;|%phrase;) %attrs; -- %coreattrs, %i18n, %events -- > <!ELEMENT (SUB|SUP) - - (%inline;)* -- верхний и нижний индекс --> <!ATTLIST (SUB|SUP) %attrs; -- %coreattrs, %i18n, %events -- > <!ELEMENT SPAN - - (%inline;)* -- общий контейнер языка/стиля --> <!ATTLIST SPAN %attrs; -- %coreattrs, %i18n, %events -- %reserved; -- зарезервировано для использования в будущем -- > <!ELEMENT BDO - - (%inline;)* -- переопределение BiDi интернционализации --> <!ATTLIST BDO %coreattrs; -- id, class, style, title -- lang %LanguageCode; #IMPLIED -- код языка -- dir (ltr|rtl) #REQUIRED -- направление -- > <!ELEMENT BR - O EMPTY -- принудительный переход на следующую строку --> <!ATTLIST BR %coreattrs; -- id, class, style, title -- > <!--================== Модели содержимого HTML ===============================--> <!-- В HTML имеется две модели содержмого: %inline; элементы уровня символа и текстовые строки %block; элементы типа блока, например абзацы и списки --> <!ENTITY % block "P | %heading; | %list; | %preformatted; | DL | DIV | NOSCRIPT | BLOCKQUOTE | FORM | HR | TABLE | FIELDSET | ADDRESS"> <!ENTITY % flow "%block; | %inline;"> <!--=================== Тело документа ====================================--> <!ELEMENT BODY O O (%block;|SCRIPT)+ +(INS|DEL) - тело документа --> <!ATTLIST BODY %attrs; -- %coreattrs, %i18n, %events -- onload %Script; #IMPLIED -- доумент загружен -- onunload %Script; #IMPLIED -- документ удален -- > <!ELEMENT ADDRESS - - (%inline;)* -- информация об авторе --> <!ATTLIST ADDRESS %attrs; -- %coreattrs, %i18n, %events -- > <!ELEMENT DIV - - (%flow;)* -- общий контейнер языка/стиля --> <!ATTLIST DIV %attrs; -- %coreattrs, %i18n, %events -- %reserved; -- зарезервировано для использования в будущем -- > <!--================== элемент якоря ================================--> <!ENTITY % Shape "(rect|circle|poly|default)"> <!ENTITY % Coords "CDATA" - разделенный запятыми список длин --> <!ELEMENT A - - (%inline;)* -(A) -- якорь --> <!ATTLIST A %attrs; -- %coreattrs, %i18n, %events -- charset %Charset; #IMPLIED -- кодировка симвлов связанного ресурса -- type %ContentType; #IMPLIED -- рекомендуемый тип содержимого -- name CDATA #IMPLIED -- конец именованной ссылки -- href %URI; #IMPLIED -- URI связанного ресурса -- hreflang %LanguageCode; #IMPLIED -- код языка -- rel %LinkTypes; #IMPLIED -- типы прямых ссылок -- rev %LinkTypes; #IMPLIED -- типы обратных ссылок -- accesskey %Character; #IMPLIED -- клавиша доступа -- shape %Shape; rect -- для использвоания с клиентскими навигационными картами -- coords %Coords; #IMPLIED -- для использования с серверными навигационными картами -- tabindex NUMBER #IMPLIED -- положение в последовательности перехода -- onfocus %Script; #IMPLIED -- фокус перешел к элементу -- onblur %Script; #IMPLIED -- фокус ушел с элемента -- > <!--================== Клиентские навигационные карты ============================--> <!-- Их можно помещать в тот же документ или группировать в отдельный документ, хотя поддерживаются они пока еще не везде --> <!ELEMENT MAP - - ((%block;)+ | AREA+) - клиентсая навигационная карта --> <!ATTLIST MAP %attrs; -- %coreattrs, %i18n, %events -- name CDATA #REQUIRED - только в usemap -- > <!ELEMENT AREA - O EMPTY -- область клиентской навигационной карты --> <!ATTLIST AREA %attrs; -- %coreattrs, %i18n, %events -- shape %Shape; rect -- управляет представлением координат -- coords %Coords; #IMPLIED -- разделенный запятыми список длин -- href %URI; #IMPLIED -- URI связанного ресурса -- nohref (nohref) #IMPLIED -- с этой областью действие не связано -- alt %Text; #REQUIRED -- краткое описание -- tabindex NUMBER #IMPLIED -- положение в последовательности перехода -- accesskey %Character; #IMPLIED -- улавиша доступа -- onfocus %Script; #IMPLIED -- фокус перешел к элементу -- onblur %Script; #IMPLIED -- фокус ушел с элемента -- > <!--================== Элемент ссылки ==================================--> <!-- Значения отношения могут использоваться в основном: а) для панелей инструментов/меню в документе при использовании с элементом LINK в заголовке документа, например, начало, содержание, назад, далее, указатель, конец, справка б) для ссылки на отдельную таблицу стилей (rel=stylesheet) в) для установки ссылки на скрипт (rel=script) г) в таблицах стилей для управления представлением набора узлов html в печатных версиях документов д) для ссылки на печатную версию данного документа, например, на версию в формате postscript или pdf (rel=alternate media=print) --> <!ELEMENT LINK - O EMPTY -- независимая от устройства ссылка --> <!ATTLIST LINK %attrs; -- %coreattrs, %i18n, %events -- charset %Charset; #IMPLIED -- кодировка связанного ресурса -- href %URI; #IMPLIED -- URI связанного ресурса -- hreflang %LanguageCode; #IMPLIED -- код языка -- type %ContentType; #IMPLIED -- рекомендумый тип содержимого -- rel %LinkTypes; #IMPLIED -- типы прямых ссылок -- rev %LinkTypes; #IMPLIED -- типы обратных ссылок -- media %MediaDesc; #IMPLIED -- для представления на этих устройствах -- > <!--=================== Изображения ===========================================--> <!-- Длина, определенная в DTD для cellpadding/cellspacing --> <!ENTITY % Length "CDATA" -- nn в пикселах или nn% в процентах --> <!ENTITY % MultiLength "CDATA" - пикселы, проценты или относительная --> <!ENTITY % MultiLengths "CDATA" - разделенный запятыми список MultiLength --> <!ENTITY % Pixels "CDATA" - целое представление длины в пикселах --> <!-- Во избежание проблем с только текстовыми агентами пользователей, а также для того, чтобы сделать изображения доступными и полезными для пользователей с невизуальными агентами пользователей, необходимо определять описания в атрибуте ALT и не использовать серверные изображения-карты --> <!ELEMENT IMG - O EMPTY -- внедренное изображение --> <!ATTLIST IMG %attrs; -- %coreattrs, %i18n, %events -- src %URI; #REQUIRED -- URI внедряемого изображения -- alt %Text; #REQUIRED -- краткое описание -- longdesc %URI; #IMPLIED -- ссылка на длинное описание (дополняет alt) -- height %Length; #IMPLIED -- переопределение высоты -- width %Length; #IMPLIED -- переопределение ширины -- usemap %URI; #IMPLIED -- использовать клиентскую навигационную карту -- ismap (ismap) #IMPLIED -- использовать серверную навигационную карту -- > <!-- USEMAP указывает на элемент MAP, который может находиться в этом или внешнем документе, хотя последний вариант поддерживается не всегда --> <!--==================== OBJECT ======================================--> <!-- OBJECT используется для внедрения объектов в качестве части страниц HTML, другому содержимому должны предшествовать элементы PARAM. Модель смешанного содержимого SGML технически мешает такому формальному заданию... --> <!ELEMENT OBJECT - - (PARAM | %flow;)* -- общий внедренный объект --> <!ATTLIST OBJECT %attrs; -- %coreattrs, %i18n, %events -- declare (declare) #IMPLIED -- объявить, но не инициировать флаг -- classid %URI; #IMPLIED -- определение реализации -- codebase %URI; #IMPLIED -- базовый URI для classid, data, archive-- data %URI; #IMPLIED -- ссылка на данные объекта -- type %ContentType; #IMPLIED -- тип содержимого данных -- codetype %ContentType; #IMPLIED -- тип содержимого для кода -- archive %URI; #IMPLIED -- разделенный проблеами список архивов -- standby %Text; #IMPLIED -- сообщение, отображаемое при загрузке -- height %Length; #IMPLIED -- переопределение высоты -- width %Length; #IMPLIED -- переопределение ширины -- usemap %URI; #IMPLIED -- использовать клиентскую навигационную карту -- name CDATA #IMPLIED -- передать как часть формы -- tabindex NUMBER #IMPLIED -- положение в последовательности перехода -- %reserved; -- зарезервировано для использования в будущем -- > <!ELEMENT PARAM - O EMPTY -- значение именованного свойства --> <!ATTLIST PARAM id ID #IMPLIED -- уникальный идентификатор в пределах документа -- name CDATA #REQUIRED -- имя свойства -- value CDATA #IMPLIED -- значение свойства -- valuetype (DATA|REF|OBJECT) DATA -- как интерпретировать значение -- type %ContentType; #IMPLIED -- тип содержимого для значения, если valuetype=ref -- > <!--=================== Горизонтальный разделитель ==================================--> <!ELEMENT HR - O EMPTY - горизонтальный разделитель --> <!ATTLIST HR %coreattrs; -- id, class, style, title -- %events; > <!--=================== Абазцы =================================--> <!ELEMENT P - O (%inline;)* -- абзац <!ATTLIST P %attrs; -- %coreattrs, %i18n, %events -- > <!--=================== Заголовки ===============================--> <!-- Имеется шесть уровней заголовков: от H1 до H6 (наименее значимый). --> <!ELEMENT (%heading;) - - (%inline;)* -- заголовок --> <!ATTLIST (%heading;) %attrs; -- %coreattrs, %i18n, %events -- > <!--=================== Форматированный текст ================================--> <!-- исключает разметку для изображений и изменения размера шрифта --> <!ENTITY % pre.exclusion "IMG|OBJECT|BIG|SMALL|SUB|SUP"> <!ELEMENT PRE - - (%inline;)* -(%pre.exclusion;) - форматированный текст --> <!ATTLIST PRE %attrs; -- %coreattrs, %i18n, %events -- > <!--===================== Встроенные цитаты ==================================--> <!ELEMENT Q - - (%inline;)* -- короткая встроенная цитата --> <!ATTLIST Q %attrs; -- %coreattrs, %i18n, %events -- cite %URI; #IMPLIED -- URI для исходного документа или сообщения -- > <!--=================== Цитаты типа блока ================================--> <!ELEMENT BLOCKQUOTE - - (%block;|SCRIPT)+ -- длинная цитата --> <!ATTLIST BLOCKQUOTE %attrs; -- %coreattrs, %i18n, %events -- cite %URI; #IMPLIED -- URI исходного документа или сообщения -- > <!--=================== Вставленный/удаленный текст ============================--> <!-- INS/DEL are handled by inclusion on BODY --> <!ELEMENT (INS|DEL) - - (%flow;)* -- вставленный текст, удаленный текст --> <!ATTLIST (INS|DEL) %attrs; -- %coreattrs, %i18n, %events -- cite %URI; #IMPLIED -- информация о причинах изменения -- datetime %Datetime; #IMPLIED -- дата и время изменения -- > <!--=================== Списки ============================================--> <!-- списки определений - DT - термин, DD - определение --> <!ELEMENT DL - - (DT|DD)+ -- definition list --> <!ATTLIST DL %attrs; -- %coreattrs, %i18n, %events -- > <!ELEMENT DT - O (%inline;)* -- определяемый термин --> <!ELEMENT DD - O (%flow;)* -- определение --> <!ATTLIST (DT|DD) %attrs; -- %coreattrs, %i18n, %events -- > <!ELEMENT OL - - (LI)+ -- упорядоченный список --> <!ATTLIST OL %attrs; -- %coreattrs, %i18n, %events -- > <!-- Unordered Lists (UL) bullet styles --> <!ELEMENT UL - - (LI)+ -- неупорядоченный список --> <!ATTLIST UL %attrs; -- %coreattrs, %i18n, %events -- > <!ELEMENT LI - O (%flow;)* -- элемент списка --> <!ATTLIST LI %attrs; -- %coreattrs, %i18n, %events -- > <!--================ Формы ===============================================--> <!ELEMENT FORM - - (%block;|SCRIPT)+ -(FORM) - интерактивная форма --> <!ATTLIST FORM %attrs; -- %coreattrs, %i18n, %events -- action %URI; #REQUIRED -- серверный дексриптор формы -- method (GET|POST) GET -- метод HTTP, используемый для отправки формы -- enctype %ContentType; "application/x-www-form-urlencoded" onsubmit %Script; #IMPLIED -- форма отправлена -- onreset %Script; #IMPLIED -- форма сброшена -- accept-charset %Charsets; #IMPLIED -- список поддерживаемых наборов символов -- > <!-- Each label must not contain more than ONE field --> <!ELEMENT LABEL - - (%inline;)* -(LABEL) -- текст метки поля формы --> <!ATTLIST LABEL %attrs; -- %coreattrs, %i18n, %events -- for IDREF #IMPLIED -- совпадает со значением поля ID -- accesskey %Character; #IMPLIED -- клавиша доступа -- onfocus %Script; #IMPLIED -- фокус перешел к элементу -- onblur %Script; #IMPLIED -- фокус ушел с элемента -- > <!ENTITY % InputType "(TEXT | PASSWORD | CHECKBOX | RADIO | SUBMIT | RESET | FILE | HIDDEN | IMAGE | BUTTON)" > <!-- имя атрибута, обязательное для всех, кроме submit & reset --> <!ELEMENT INPUT - O EMPTY -- управляющий элемент формы --> <!ATTLIST INPUT %attrs; -- %coreattrs, %i18n, %events -- type %InputType; TEXT -- что должно вводиться -- name CDATA #IMPLIED -- отправить как часть формы -- value CDATA #IMPLIED -- необходим для кнопок с зависимой фиксацией и флажков -- checked (checked) #IMPLIED -- для кнопок с зависимой фиксацией и флажков -- disabled (disabled) #IMPLIED -- в данном контексте недоступен -- readonly (readonly) #IMPLIED -- для текста и паролей -- size CDATA #IMPLIED -- для различно каждого типа поля -- maxlength NUMBER #IMPLIED -- максимальное число исмволов для текстовых полей -- src %URI; #IMPLIED -- для полей с изображениями -- alt CDATA #IMPLIED -- краткое описание -- usemap %URI; #IMPLIED -- использовать клиентскую навиагционную карту -- tabindex NUMBER #IMPLIED -- положение в последовательности перехода -- accesskey %Character; #IMPLIED -- клавиша доступа -- onfocus %Script; #IMPLIED -- фокус перешел на элемент -- onblur %Script; #IMPLIED -- фокус ушел с элемента -- onselect %Script; #IMPLIED -- выделен некоторый текст -- onchange %Script; #IMPLIED -- изменено знчение элемента -- accept %ContentTypes; #IMPLIED -- список типов MIME для загрузки файлов -- %reserved; -- зарезервировано для использования в будущем -- > <!ELEMENT SELECT - - (OPTGROUP|OPTION)+ -- выбор вариантов --> <!ATTLIST SELECT %attrs; -- %coreattrs, %i18n, %events -- name CDATA #IMPLIED -- имя поля -- size NUMBER #IMPLIED -- видимые строки -- multiple (multiple) #IMPLIED -- по умолчанию в одинарном выборе -- disabled (disabled) #IMPLIED -- в данном контексте недоступно -- tabindex NUMBER #IMPLIED -- положение в последовательности перехода -- onfocus %Script; #IMPLIED -- фокус перешел к элементу -- onblur %Script; #IMPLIED -- фокус ушел с элемента -- onchange %Script; #IMPLIED -- значение элемента изменено -- %reserved; -- зарезервировано для использования в будущем -- > <!ELEMENT OPTGROUP - - (OPTION)+ -- группа параметров --> <!ATTLIST OPTGROUP %attrs; -- %coreattrs, %i18n, %events -- disabled (disabled) #IMPLIED -- в данном контексте недоступно -- label %Text; #REQUIRED - для использования в иерархических меню -- > <!ELEMENT OPTION - O (#PCDATA) -- выбираемый вариант --> <!ATTLIST OPTION %attrs; -- %coreattrs, %i18n, %events -- selected (selected) #IMPLIED disabled (disabled) #IMPLIED -- в данном контексте недоступно -- label %Text; #IMPLIED -- для использования в иерархических меню -- value CDATA #IMPLIED -- по умолчанию - содержимое элемента -- > <!ELEMENT TEXTAREA - - (#PCDATA) -- текстовое поле из нескольких строк --> <!ATTLIST TEXTAREA %attrs; -- %coreattrs, %i18n, %events -- name CDATA #IMPLIED rows NUMBER #REQUIRED cols NUMBER #REQUIRED disabled (disabled) #IMPLIED -- в данном контексте недоступно -- readonly (readonly) #IMPLIED tabindex NUMBER #IMPLIED -- положение в последовательности перехода -- accesskey %Character; #IMPLIED -- клавиша доступа -- onfocus %Script; #IMPLIED -- фокус перешел к элементу -- onblur %Script; #IMPLIED -- фокус ушел с элемента -- onselect %Script; #IMPLIED -- выделен некоторый текст -- onchange %Script; #IMPLIED -- изменено значение элемента -- %reserved; -- зарезервировано для использования в будущем -- > <!-- #PCDATA используется для решения проблемы смешанного содержимого, здесь допустимы только пробельные символы! --> <!ELEMENT FIELDSET - - (#PCDATA,LEGEND,(%flow;)*) - группа управляющих элементов формы --> <!ATTLIST FIELDSET %attrs; -- %coreattrs, %i18n, %events -- > <!ELEMENT LEGEND - - (%inline;)* -- описание набора полей --> <!ENTITY % LAlign "(top|bottom|left|right)"> <!ATTLIST LEGEND %attrs; -- %coreattrs, %i18n, %events -- accesskey %Character; #IMPLIED -- клавиша доступа -- > <!ELEMENT BUTTON - - (%flow;)* -(A|%formctrl;|FORM|FIELDSET) -- кнопка --> <!ATTLIST BUTTON %attrs; -- %coreattrs, %i18n, %events -- name CDATA #IMPLIED value CDATA #IMPLIED -- при передаче отправляетя на сервер -- type (button|submit|reset) submit -- используется в качестве кнопки в форме -- disabled (disabled) #IMPLIED -- в данном контексте недоступно -- tabindex NUMBER #IMPLIED -- положение в последовательности переходов -- accesskey %Character; #IMPLIED -- клавиша доступа -- onfocus %Script; #IMPLIED -- фокус перешел на элемент -- onblur %Script; #IMPLIED -- фокус ушел с элемента -- %reserved; -- зарезервировано для использования в будущем -- > <!--======================= Таблицы =======================================--> <!-- Стандарт таблиц IETF HTML, см. [RFC1942] --> <!-- Атрибут BORDER устанавливает толщину рамки вокруг таблицы. По умолчанию используются пикселы. Атрибут FRAME определяет, какие части рамки вокруг таблицы должны представляться. Значения не совпадают с CALS во избежание конфликтов имен с атрибутом VALIGN. Значение "border" включено для совместимости с предыдущими версиями <TABLE BORDER>, уступив место frame=border и border=implied Для <TABLE BORDER=1> введены border=1 и frame=implied. В этом случае оно может обрабатываться как frame=border для совместимости с браузерами более старых версий. --> <!ENTITY % TFrame "(void|above|below|hsides|lhs|rhs|vsides|box|border)"> <!-- Атрибут RULES определяет, какие rules между ячейками будут отображаться: Если атрибут RULES отсутстввует, предполагается: "none", если атрибут BORDER отсутствует или BORDER=0, в противном случае "all" --> <!ENTITY % TRules "(none | groups | rows | cols | all)"> <!-- горизонтальное размещение таблицы относительно документа --> <!ENTITY % TAlign "(left|center|right)"> <!-- атрибуты горизонтального вырвнивания содержимого ячеек --> <!ENTITY % cellhalign "align (left|center|right|justify|char) #IMPLIED char %Character; #IMPLIED -- символ выравнивания, например, char=':' -- charoff %Length; #IMPLIED -- смещение для символа выравнивания --" > <!-- атрибуты вертикального выравнивания содержимого ячеек --> <!ENTITY % cellvalign "valign (top|middle|bottom|baseline) #IMPLIED" > <!ELEMENT TABLE - - (CAPTION?, (COL*|COLGROUP*), THEAD?, TFOOT?, TBODY+)> <!ELEMENT CAPTION - - (%inline;)* -- caption таблицы --> <!ELEMENT THEAD - O (TR)+ -- заголовок таблицы --> <!ELEMENT TFOOT - O (TR)+ -- нижний заголовок таблицы --> <!ELEMENT TBODY O O (TR)+ -- тело таблицы --> <!ELEMENT COLGROUP - O (col)* -- группа столбцов таблицы --> <!ELEMENT COL - O EMPTY -- столбец таблицы --> <!ELEMENT TR - O (TH|TD)+ -- строка таблицы --> <!ELEMENT (TH|TD) - O (%flow;)* -- ячейка заголовка таблицы, ячейка данных таблицы--> <!ATTLIST TABLE -- элемент таблицы -- %attrs; -- %coreattrs, %i18n, %events -- summary %Text; #IMPLIED -- назнчение/структура для речевого вывода-- width %Length; #IMPLIED -- ширина таблицы -- border %Pixels; #IMPLIED -- управляет толщиной рамки вокруг таблицы -- frame %TFrame; #IMPLIED -- какие части рамки нужно представлять -- rules %TRules; #IMPLIED -- разделители между строками и столбцами -- cellspacing %Length; #IMPLIED -- расстояние между ячейками -- cellpadding %Length; #IMPLIED -- расстояние в ячейках -- %reserved; -- зарезервировано для использовния в будущем -- datapagesize CDATA #IMPLIED -- зарезервировано для использовния в будущем -- > <!ENTITY % CAlign "(top|bottom|left|right)"> <!ATTLIST CAPTION %attrs; -- %coreattrs, %i18n, %events -- > <!-- COLGROUP объяединяет ряд элементов COL. В можете группировать несколько семантически связанных столбцов. --> <!ATTLIST COLGROUP %attrs; -- %coreattrs, %i18n, %events -- span NUMBER 1 -- число столбцов в группе по умолчанию -- width %MultiLength; #IMPLIED -- ширина вложенных COL по умолчанию -- %cellhalign; -- горизонтальное выравнивание в ячейках -- %cellvalign; -- вертикальное вырвнивание в ячейках -- > <!-- Элементы COL определяют свойства выраванивания для ячеек в одном или нескольких столбцах. Атрибут WIDTH определяет ширину столбцов, например, width=64 ширина в пикселах width=0.5* относительная ширина 0.5 Атрибут SPAN приводит к тому, что атрибуты одного элемента COL приеняются к нскольким столбцам. --> <!ATTLIST COL -- группы и свойства столбцов -- %attrs; -- %coreattrs, %i18n, %events -- span NUMBER 1 -- атрибуты COL влияют на N столбцов -- width %MultiLength; #IMPLIED -- задание ширины столбца -- %cellhalign; -- горизонтальное выравнивание в ячейках -- %cellvalign; -- вертикальное выравнивание в ячейках -- > <!-- Используйте THEAD для дублирования заголовков при разрые таблицы на страницах ли для представления статических заголовков, когда разделы TBODY представляются на прокручиваемой панели. Используйте TFOOT для дублирования нижних заголовков при разрые таблицы на страницах ли для представления статических заголовков, когда разделы TBODY представляются на прокручиваемой панели. Используйте несколько разделов TBODY, если между группами строк таблицы необходимы rules. --> <!ATTLIST (THEAD|TBODY|TFOOT) -- раздел таблицы -- %attrs; -- %coreattrs, %i18n, %events -- %cellhalign; -- горизонтальное выравнивание в ячейках -- %cellvalign; -- вертикальное выравнивание в ячейках -- > <!ATTLIST TR -- строка таблицы -- %attrs; -- %coreattrs, %i18n, %events -- %cellhalign; -- горизонтальное выравнивание в ячейках -- %cellvalign; -- вертикальное выраванивание в ячейках -- > <!-- Атрибут Scope проще атрибута axes для большинства таблиц --> <!ENTITY % Scope "(row|col|rowgroup|colgroup)"> <!-- TH - для заголовков, TD - для данных, но для ячеек, действующих как то и другое используйте TD --> <!ATTLIST (TH|TD) -- ячейка заголовка или данных -- %attrs; -- %coreattrs, %i18n, %events -- abbr %Text; #IMPLIED -- сокращение ячейки заголовка -- axis CDATA #IMPLIED -- группы имен связанных заголовков-- headers IDREFS #IMPLIED -- списко идентификаторов ячеек заголовков -- scope %Scope; #IMPLIED -- область действия ячеек заголовков -- rowspan NUMBER 1 -- число строк, которые занимает ячейка -- colspan NUMBER 1 -- число столбцов, которые занимает ячейка -- %cellhalign; -- горизонтальное выравнивание в ячейках -- %cellvalign; -- вертикальное выравнивание в ячейках -- > <!--================ Заголовок документа =======================================--> <!-- %head.misc; определен ранее как "SCRIPT|STYLE|META|LINK|OBJECT" --> <!ENTITY % head.content "TITLE & BASE?"> <!ELEMENT HEAD O O (%head.content;) +(%head.misc;) - заголовок документа --> <!ATTLIST HEAD %i18n; -- lang, dir -- profile %URI; #IMPLIED -- именованный словарь метаинформации -- > <!-- Элемент TITLE не считается частью потока текста. Он должен отображаться, например, в виде заголовка страницы или окна. У кажого документа должен быть ровно один заголовок. --> <!ELEMENT TITLE - - (#PCDATA) -(%head.misc;) - заголовок документа --> <!ATTLIST TITLE %i18n> <!ELEMENT BASE - O EMPTY -- базовый URI документа --> <!ATTLIST BASE href %URI; #REQUIRED -- URI, служащий базовым -- > <!ELEMENT META - O EMPTY -- общая метаинформация --> <!ATTLIST META %i18n; -- lang, dir, для использования с содержимым -- http-equiv NAME #IMPLIED -- имя заголовка ответа HTTP -- name NAME #IMPLIED -- имя метаинформации -- content CDATA #REQUIRED - связанная инфомрация -- scheme CDATA #IMPLIED -- выбор формы содержимого -- > <!ELEMENT STYLE - - %StyleSheet -- информация о стиле --> <!ATTLIST STYLE %i18n; -- lang, dir, для использвоания с заголовком -- type %ContentType; #REQUIRED -- тип содержимого языка стиля -- media %MediaDesc; #IMPLIED -- для использования с данными устройствами -- title %Text; #IMPLIED -- необязательный заголовок -- > <!ELEMENT SCRIPT - - %Script; -- выражения скрипта --> <!ATTLIST SCRIPT charset %Charset; #IMPLIED -- кодировка связанного ресурса -- type %ContentType; #REQUIRED -- тип содержимого языка скрипта -- language CDATA #IMPLIED -- предопределенное имя языка скрипта -- src %URI; #IMPLIED -- URI внешнего скрипта -- defer (defer) #IMPLIED -- агент пользователя может отложить выполнение скрипта -- event CDATA #IMPLIED -- зарезервировано для использования в будущем -- for %URI; #IMPLIED -- зарезервировано для использования в будущем -- > <!ELEMENT NOSCRIPT - - (%block;)+ -- контейнер альтернативного содержимого для представления без использования скриптов --> <!ATTLIST NOSCRIPT %attrs; -- %coreattrs, %i18n, %events -- > <!--================ Структура документа ==================================--> <!ENTITY % html.content "HEAD, BODY"> <!ELEMENT HTML O O (%html.content;) -- корневой элмент документа --> <!ATTLIST HTML %i18n; -- lang, dir -- >
Примечание. Строго говоря, регистрационный номер ISO 177 относится к начальному состоянию [ISO10646] в 1993 году, в то время как в данной спецификации мы всегда подразумеваем последнюю версию ISO 10646. Изменения с 1993 года заключались в добавлении символов и one-time operation reallocating a large number of codepoints for Korean Hangul (Amendment 5).
<!SGML "ISO 8879:1986" -- Объявление SGML Языка разметки гипертекстов версии 4.0 С поддержкой первых 17 уровней ISO 10646 и увеличенной длиной тегов и литералов и т.д. -- CHARSET BASESET "ISO Registration Number 177//CHARSET ISO/IEC 10646-1:1993 UCS-4 with implementation level 3//ESC 2/5 2/15 4/6" DESCSET 0 9 UNUSED 9 2 9 11 2 UNUSED 13 1 13 14 18 UNUSED 32 95 32 127 1 UNUSED 128 32 UNUSED 160 55136 160 55296 2048 UNUSED -- SURROGATES -- 57344 1056768 57344 CAPACITY SGMLREF TOTALCAP 150000 GRPCAP 150000 ENTCAP 150000 SCOPE DOCUMENT SYNTAX SHUNCHAR CONTROLS 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 127 BASESET "ISO 646IRV:1991//CHARSET International Reference Version (IRV)//ESC 2/8 4/2" DESCSET 0 128 0 FUNCTION RE 13 RS 10 SPACE 32 TAB SEPCHAR 9 NAMING LCNMSTRT "" UCNMSTRT "" LCNMCHAR ".-_:" UCNMCHAR ".-_:" NAMECASE GENERAL YES ENTITY NO DELIM GENERAL SGMLREF SHORTREF SGMLREF NAMES SGMLREF QUANTITY SGMLREF ATTCNT 60 -- увеличено -- ATTSPLEN 65536 -- максимальные значения -- LITLEN 65536 -- допускается в объявлении -- NAMELEN 65536 -- избегайте фиксированных ограничений -- PILEN 65536 -- в реализации агентов пользователей HTML -- TAGLVL 100 TAGLEN 65536 GRPGTCNT 150 GRPCNT 64 FEATURES MINIMIZE DATATAG NO OMITTAG YES RANK NO SHORTTAG YES LINK SIMPLE NO IMPLICIT NO EXPLICIT NO OTHER CONCUR NO SUBDOC NO FORMAL YES APPINFO NONE >
<!-- В данном HTML 4.0 Strict DTD исключаются атрибуты и элементы представления, использование которых для определения стиля W3C планирует постепенно прекратить. Авторам следует при возможности использовать Strict DTD, но в случае необходимости поддержки атрибутов и элементов представления допускается использование Transitional DTD. В HTML 4.0 включены механизмы поддержки таблиц стилей, скриптов, внедрения объектов, улучшена поддержка направления текста справа налево и смешанного текста, а также внесены изменения в формы с целью обеспечения удобства работы пользователей с физическими недостатками. Черновик: $Дата: 1997/12/18 09:36:02 $ Авторы: Дэйв Рэгетт <dsr@w3.org> Арно Ле Орс <lehors@w3.org> Ян Джейкобс <ij@w3.org> Подробную информацию о HTML 4.0 можно найти по адресу: http://www.w3.org/TR/REC-html40 --> <!ENTITY % HTML.Version "-//W3C//DTD HTML 4.0 Transitional//EN" -- Пример типичного использования: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> <html> <head> ... </head> <body> ... </body> </html> URI, используемый как идентификатор системы, позволяет агенту пользователя загрузить необходимые DTD и наборы комбинаций. FPI для Strict HTML 4.0 DTD: "-//W3C//DTD HTML 4.0//EN" его URI: http://www.w3.org/TR/REC-html40/strict.dtd Авторы должны использовать Strict DTD, если только им не нужно использовать управление представленим для агентов пользователей, не поддерживающих (адекватынм образом) таблицы стилей. Если Вы создаете документ с фреймами, используйте следующий FPI: "-//W3C//DTD HTML 4.0 Frameset//EN" и URI: http://www.w3.org/TR/REC-html40/frameset.dtd По отношению к HTML 4.0 поддерживаются следующие URI "http://www.w3.org/TR/REC-html40/strict.dtd" (Strict DTD) "http://www.w3.org/TR/REC-html40/loose.dtd" (Loose DTD) "http://www.w3.org/TR/REC-html40/frameset.dtd" (Frameset DTD) "http://www.w3.org/TR/REC-html40/HTMLlat1.ent" (Latin-1 entities) "http://www.w3.org/TR/REC-html40/HTMLsymbol.ent" (Symbol entities) "http://www.w3.org/TR/REC-html40/HTMLspecial.ent" (Special entities) Эти URI указывают на последнюю версию каждого файла. Для ссылки на специальную версию используйте следующие URI: "http://www.w3.org/TR/REC-html40-971218/strict.dtd" "http://www.w3.org/TR/REC-html40-971218/loose.dtd" "http://www.w3.org/TR/REC-html40-971218/frameset.dtd" "http://www.w3.org/TR/REC-html40-971218/HTMLlat1.ent" "http://www.w3.org/TR/REC-html40-971218/HTMLsymbol.ent" "http://www.w3.org/TR/REC-html40-971218/HTMLspecial.ent" --> <!--================== Импортированные имена ====================================--> <!ENTITY % ContentType "CDATA" -- тип устройства в соответствии с [RFC2045] --> <!ENTITY % ContentTypes "CDATA" -- разделенный запятыми список типов устройств в соответствии с [RFC2045] --> <!ENTITY % Charset "CDATA" -- кодировка символов в соответствии с [RFC2045] --> <!ENTITY % Charsets "CDATA" -- разделенный пробелами список кодировок символов в соответствии с [RFC2045] --> <!ENTITY % LanguageCode "NAME" -- код языка в соответствии с [RFC1766] --> <!ENTITY % Character "CDATA" -- отдельный символ [ISO10646] --> <!ENTITY % LinkTypes "CDATA" -- разделенный пробелами список типов ссылок --> <!ENTITY % MediaDesc "CDATA" -- отдельный дескриптор устройства или разделенный запятыми список --> <!ENTITY % URI "CDATA" -- универсальный идентификатор ресурса, см. [URI] --> <!ENTITY % Datetime "CDATA" -- информация о дате и времени. Формат даты ISO --> <!ENTITY % Script "CDATA" -- выражение скрипта --> <!ENTITY % StyleSheet "CDATA" -- данные таблицы стилей --> <!ENTITY % FrameTarget "CDATA" - представление в этом фрейме --> <!ENTITY % Text "CDATA"> <!-- Комбинации параметров --> <!ENTITY % head.misc "SCRIPT|STYLE|META|LINK|OBJECT" -- повторяющиеся элементы заголовка --> <!ENTITY % heading "H1|H2|H3|H4|H5|H6"> <!ENTITY % list "UL | OL | DIR | MENU"> <!ENTITY % preformatted "PRE"> <!ENTITY % Color "CDATA" -- a color using sRGB: #RRGGBB as Hex values --> <!-- 16 широко известных названий цветов и их значения RGB: Black (черный) = #000000 Green (зеленый) = #008000 Silver (серебряный) = #C0C0C0 Lime (лимонный) = #00FF00 Gray (серый) = #808080 Olive (оливковый) = #808000 White (белый) = #FFFFFF Yellow (желтый) = #FFFF00 Maroon (коричневый) = #800000 Navy (синий) = #000080 Red (красный) = #FF0000 Blue (голубой) = #0000FF Purple (пурпурный) = #800080 Teal = #008080 Fuchsia (фуксия) = #FF00FF Aqua (бирюзовый) = #00FFFF --> <!ENTITY % bodycolors " bgcolor %Color; #IMPLIED -- цвет фона документа -- text %Color; #IMPLIED -- цвет текста документа -- link %Color; #IMPLIED -- цвет ссылок -- vlink %Color; #IMPLIED -- цвет просмотренных ссылок -- alink %Color; #IMPLIED -- цвет выбранных ссылок -- "> <!--================ Комбинации мнемоник символов =========================--> <!ENTITY % HTMLlat1 PUBLIC "-//W3C//ENTITIES Latin1//EN//HTML" "http://www.w3.org/TR/REC-html40-971218/HTMLlat1.ent"> %HTMLlat1; <!ENTITY % HTMLsymbol PUBLIC "-//W3C//ENTITIES Symbols//EN//HTML" "http://www.w3.org/TR/REC-html40-971218/HTMLsymbol.ent"> %HTMLsymbol; <!ENTITY % HTMLspecial PUBLIC "-//W3C//ENTITIES Special//EN//HTML" "http://www.w3.org/TR/REC-html40-971218/HTMLspecial.ent"> %HTMLspecial; <!--=================== Общие атрибуты ===============================--> <!ENTITY % coreattrs "id ID #IMPLIED -- уникальнй дентификатор в пределах документа -- class CDATA #IMPLIED -- разделенный пробелами список классов -- style %StyleSheet; #IMPLIED -- связанная информация о стиле -- title %Text; #IMPLIED -- рекомендуемый заголовок/усиление --" > <!ENTITY % i18n "lang %LanguageCode; #IMPLIED -- код языка -- dir (ltr|rtl) #IMPLIED -- направление слабого/нейтрального текста --" > <!ENTITY % events "onclick %Script; #IMPLIED -- щелчок кнопки указующего устройства -- ondblclick %Script; #IMPLIED -- двойной щелчок кнопки указующего устройства -- onmousedown %Script; #IMPLIED -- нажата кнопка указующего устройства -- onmouseup %Script; #IMPLIED -- отпущена кнопка указующего устройства -- onmouseover %Script; #IMPLIED -- указатель перемещен на -- onmousemove %Script; #IMPLIED -- указатель перемещен в пределы -- onmouseout %Script; #IMPLIED -- указатель перемещен за пределы -- onkeypress %Script; #IMPLIED -- клавиша нажата и отпущена -- onkeydown %Script; #IMPLIED -- клавиша нажата -- onkeyup %Script; #IMPLIED -- клавиша отпущена --" > <!-- Переключатель зарезервированных возможностей --> <!ENTITY % HTML.Reserved "IGNORE"> <!-- Следующие атрибуты зарезервированы, и, возможно, будут использоваться в будущем --> <![ %HTML.Reserved; [ <!ENTITY % reserved "datasrc %URI; #IMPLIED -- a один или несколько источников данных -- datafld CDATA #IMPLIED -- имя свойства или столбца -- dataformatas (plaintext|html) plaintext -- текст или html --" > ]]> <!ENTITY % reserved ""> <!ENTITY % attrs "%coreattrs; %i18n; %events;"> <!ENTITY % align "align (left|center|right|justify) #IMPLIED" -- по умолчанию left для абзацев с направлением слева направо, right для направления справа налево-- > <!--=================== Разметка текста ======================================--> <!ENTITY % fontstyle "TT | I | B | U | S | STRIKE | BIG | SMALL"> <!ENTITY % phrase "EM | STRONG | DFN | CODE | SAMP | KBD | VAR | CITE | ABBR | ACRONYM" > <!ENTITY % special "A | IMG | APPLET | OBJECT | FONT | BASEFONT | BR | SCRIPT | MAP | Q | SUB | SUP | SPAN | BDO | IFRAME"> <!ENTITY % formctrl "INPUT | SELECT | TEXTAREA | LABEL | BUTTON"> <!-- %inline; встроенные элементы или элементы "уровня текста"--> <!ENTITY % inline "#PCDATA | %fontstyle; | %phrase; | %special; | %formctrl;"> <!ELEMENT (%fontstyle;|%phrase;) - - (%inline;)*> <!ATTLIST (%fontstyle;|%phrase;) %attrs; -- %coreattrs, %i18n, %events -- > <!ELEMENT (SUB|SUP) - - (%inline;)* -- верхний и нижний индекс --> <!ATTLIST (SUB|SUP) %attrs; -- %coreattrs, %i18n, %events -- > <!ELEMENT SPAN - - (%inline;)* -- общий контейнер языка/стиля --> <!ATTLIST SPAN %attrs; -- %coreattrs, %i18n, %events -- %reserved; -- зарезервировано для использования в будущем -- > <!ELEMENT BDO - - (%inline;)* -- переопределение BiDi интернационализации --> <!ATTLIST BDO %coreattrs; -- id, class, style, title -- lang %LanguageCode; #IMPLIED -- код языка -- dir (ltr|rtl) #REQUIRED -- направление -- > <!ELEMENT BASEFONT - O EMPTY -- базовый размер шрифта --> <!ATTLIST BASEFONT id ID #IMPLIED -- уникальный идентификатор в пределах документа -- size CDATA #REQUIRED -- базовый размер шрифта для элементов FONT -- color %Color; #IMPLIED -- цвет текста -- face CDATA #IMPLIED -- разделенный запятыми список названий шрифтов -- > <!ELEMENT FONT - - (%inline;)* -- локлаьное переключение на шрифт --> <!ATTLIST FONT %coreattrs; -- id, class, style, title -- %i18n; -- lang, dir -- size CDATA #IMPLIED -- [+|-]nn, например, size="+1", size="4" -- color %Color; #IMPLIED -- цвет текста -- face CDATA #IMPLIED -- разделенный запятыми список названий шрифтов -- > <!ELEMENT BR - O EMPTY -- принудительный переход на новую строку --> <!ATTLIST BR %coreattrs; -- id, class, style, title -- clear (left|all|right|none) none -- управление обтеканием текста -- > <!--================== Модели содержимого HTML ===============================--> <!-- В HTML имеется две основных модели содержимого: %inline; элементы уровня символа и текстовые строки %block; элементы типа блока, например абзацы и списки --> <!ENTITY % block "P | %heading; | %list; | %preformatted; | DL | DIV | CENTER | NOSCRIPT | NOFRAMES | BLOCKQUOTE | FORM | ISINDEX | HR | TABLE | FIELDSET | ADDRESS"> <!ENTITY % flow "%block; | %inline;"> <!--=================== Тело документа ====================================--> <!ELEMENT BODY O O (%flow;)* +(INS|DEL) - тело документа --> <!ATTLIST BODY %attrs; -- %coreattrs, %i18n, %events -- onload %Script; #IMPLIED -- документ загружен -- onunload %Script; #IMPLIED -- документ удален -- background %URI; #IMPLIED -- текстура для фона документа -- %bodycolors; -- bgcolor, text, link, vlink, alink -- > <!ELEMENT ADDRESS - - ((%inline;)|P)* -- информация об авторе --> <!ATTLIST ADDRESS %attrs; -- %coreattrs, %i18n, %events -- > <!ELEMENT DIV - - (%flow;)* -- общий контейнер языка/стиля --> <!ATTLIST DIV %attrs; -- %coreattrs, %i18n, %events -- %align; -- выравнивание текста -- %reserved; -- зарезервировано для использования в будущем -- > <!ELEMENT CENTER - - (%flow;)* -- сокращение для DIV align=center --> <!ATTLIST CENTER %attrs; -- %coreattrs, %i18n, %events -- > <!--================== Элементя якоря ================================--> <!ENTITY % Shape "(rect|circle|poly|default)"> <!ENTITY % Coords "CDATA" -- разделенный запятыми список длин --> <!ELEMENT A - - (%inline;)* -(A) -- якорь --> <!ATTLIST A %attrs; -- %coreattrs, %i18n, %events -- charset %Charset; #IMPLIED -- кодировка связанного ресурса -- type %ContentType; #IMPLIED -- рекомендуемый тип содержимого -- name CDATA #IMPLIED -- конец именованной ссылки -- href %URI; #IMPLIED -- URI связанного ресурса -- hreflang %LanguageCode; #IMPLIED -- код языка -- target %FrameTarget; #IMPLIED -- генерировать в этом фрейме -- rel %LinkTypes; #IMPLIED -- типы прямых ссылок -- rev %LinkTypes; #IMPLIED -- типы обратных ссылок -- accesskey %Character; #IMPLIED -- клавиша доступа -- shape %Shape; rect -- для использования с клиентскими навигационными картами -- coords %Coords; #IMPLIED -- для использования с клиентскими навигационными картами -- tabindex NUMBER #IMPLIED -- положение в последовательности перехода -- onfocus %Script; #IMPLIED -- фокус перешел к элементу -- onblur %Script; #IMPLIED -- фокус ушел с элемента -- > <!--================== Клиентские навигационные карты ============================--> <!-- Они могут помещаться в тот же самый документ или располагаться в отдельном документе, хотя это поддерживается еще не повсеместно --> <!ELEMENT MAP - - ((%block;)+ | AREA+) -- клиентская навигационная карта --> <!ATTLIST MAP %attrs; -- %coreattrs, %i18n, %events -- name CDATA #REQUIRED -- используется в usemap -- > <!ELEMENT AREA - O EMPTY -- область клиентской навигационной карты --> <!ATTLIST AREA %attrs; -- %coreattrs, %i18n, %events -- shape %Shape; rect -- управляет интерпретацией координат -- coords %Coords; #IMPLIED -- разделенный запятыми список длин -- href %URI; #IMPLIED -- URI связанного ресурса -- target %FrameTarget; #IMPLIED -- генерировать в этом фрейме -- nohref (nohref) #IMPLIED -- с этой областью действие не связано -- alt %Text; #REQUIRED -- краткое описание -- tabindex NUMBER #IMPLIED -- положение в последовательности перехода -- accesskey %Character; #IMPLIED -- клавиша доступа -- onfocus %Script; #IMPLIED -- фокус перешел к элементу -- onblur %Script; #IMPLIED -- фокус ушел с элемента -- > <!--================== Элемент ссылки ==================================--> <!-- Значения отношения могут использоваться в основном: а) для панелей инструментов/меню в документе при использовании с элементом LINK в заголовке документа, например, начало, содержание, назад, далее, указатель, конец, справка б) для ссылки на отдельную таблицу стилей (rel=stylesheet) в) для установки ссылки на скрипт (rel=script) г) в таблицах стилей для управления представлением набора узлов html в печатных версиях документов д) для ссылки на печатную версию данного документа, например, на версию в формате postscript или pdf (rel=alternate media=print) --> <!ELEMENT LINK - O EMPTY -- независящая от устройства ссылка --> <!ATTLIST LINK %attrs; -- %coreattrs, %i18n, %events -- charset %Charset; #IMPLIED -- кодировка связанного ресурса -- href %URI; #IMPLIED -- URI связанного ресурса -- hreflang %LanguageCode; #IMPLIED -- код языка -- type %ContentType; #IMPLIED -- рекомендуемый тип содержимого -- rel %LinkTypes; #IMPLIED -- типы прямых ссылок -- rev %LinkTypes; #IMPLIED -- типы обратных ссылок -- media %MediaDesc; #IMPLIED -- для представления на этих устройствах -- target %FrameTarget; #IMPLIED -- генерировать в этом фрейме -- > <!--=================== Изображения ===========================================--> <!-- Длина, определяемая в strict DTD для cellpadding/cellspacing --> <!ENTITY % Length "CDATA" -- nn в пикселах или nn% в процентах --> <!ENTITY % MultiLength "CDATA" -- пикселы, проценты или относительная --> <!ENTITY % MultiLengths "CDATA" - разделенный запятыми список MultiLength --> <!ENTITY % Pixels "CDATA" - целое число, представляющее длину в пикселах --> <!ENTITY % IAlign "(top|middle|bottom|left|right)" -- центрировать? --> <!-- Во избежание проблем с только тестовыми агентами пользователей, а также сделать изображения доступными и полезными для пользователей с невизуальными агентами, необходимо определять описания в атрибуте ALT и не использовать серверные изображения-карты --> <!ELEMENT IMG - O EMPTY -- внедренное изображение --> <!ATTLIST IMG %attrs; -- %coreattrs, %i18n, %events -- src %URI; #REQUIRED -- URI внедряемого изображения -- alt %Text; #REQUIRED -- краткое описание -- longdesc %URI; #IMPLIED -- ссылка на длинное описание (дополняет alt) -- height %Length; #IMPLIED -- переопределение высоты -- width %Length; #IMPLIED -- переопределение ширины -- usemap %URI; #IMPLIED -- использовать клиентскую навигационную карту -- ismap (ismap) #IMPLIED -- использовать серверную навигационную карту -- align %IAlign; #IMPLIED -- вертикальное или горизонтальное выравнивание -- border %Length; #IMPLIED -- ширина границы ссылки -- hspace %Pixels; #IMPLIED -- горизонтальный gutter -- vspace %Pixels; #IMPLIED -- вертикальный gutter -- > <!-- USEMAP указывает на элемент MAP, который может находиться в этом же или в другом документе, хотя последнее поддерживается не всегда --> <!--==================== OBJECT ======================================--> <!-- OBJECT используется для внедрения объектов в качестве части страниц HTML, другому содержимому должны предшествовать элементы PARAM. Модель смешанного содержимого SGML технически мешает такому формальному заданию... --> <!ELEMENT OBJECT - - (PARAM | %flow;)* -- общий внедренный объект --> <!ATTLIST OBJECT %attrs; -- %coreattrs, %i18n, %events -- declare (declare) #IMPLIED -- объявить, но не инициализировать флаг -- classid %URI; #IMPLIED -- определяет реализацию -- codebase %URI; #IMPLIED -- базовый URI для classid, data, archive-- data %URI; #IMPLIED -- ссылка на аднные объекта -- type %ContentType; #IMPLIED -- тип содержимого данных -- codetype %ContentType; #IMPLIED -- тип содержимого кода -- archive %URI; #IMPLIED -- разделенный пробелами список архивов -- standby %Text; #IMPLIED -- сообщение, отображаемое во время загрузки -- height %Length; #IMPLIED -- переопределение высоты -- width %Length; #IMPLIED -- переопределение ширины -- usemap %URI; #IMPLIED -- использоватт клиентскую навигационную карту -- name CDATA #IMPLIED -- передать как часть формы -- tabindex NUMBER #IMPLIED -- положение в последовательности перехода -- align %IAlign; #IMPLIED -- вертикальное или горизонтальное выравнивание -- border %Length; #IMPLIED -- ширина границы ссылки -- hspace %Pixels; #IMPLIED -- горизонтальный gutter -- vspace %Pixels; #IMPLIED -- вертикальный gutter -- %reserved; -- зарезервировано для использования в будущем -- > <!ELEMENT PARAM - O EMPTY -- значение именованного свойства --> <!ATTLIST PARAM id ID #IMPLIED -- уникальный идентификатор в пределах документа -- name CDATA #REQUIRED -- имя свойства -- value CDATA #IMPLIED -- значение свойства -- valuetype (DATA|REF|OBJECT) DATA -- как интерпретировать значение -- type %ContentType; #IMPLIED -- тип содержимого для значение, если valuetype=ref -- > <!--=================== Апплет Java ==================================--> <!-- Должен присутствовать один из атрибутов кода или объекта. Помещайте элементы PARAM прежде другого содержимого. --> <!ELEMENT APPLET - - (PARAM | %flow;)* -- апплет Java --> <!ATTLIST APPLET %coreattrs; -- id, class, style, title -- codebase %URI; #IMPLIED -- необязательный базовый URI для апплета -- archive CDATA #IMPLIED -- разделенный запятыми список архивов -- code CDATA #IMPLIED -- файл класса апплета -- object CDATA #IMPLIED -- файл серийного апплета -- alt %Text; #IMPLIED -- краткое описание -- name CDATA #IMPLIED -- позволять апплетам обнаруживать друг друга -- width %Length; #REQUIRED -- начальная ширина -- height %Length; #REQUIRED -- начальная высота -- align %IAlign; #IMPLIED -- вертикальное или горизонтальное выравнивание -- hspace %Pixels; #IMPLIED -- горизонтальный gutter -- vspace %Pixels; #IMPLIED -- вертикальный gutter -- > <!--=================== Горизонтальный разделитель ==================================--> <!ELEMENT HR - O EMPTY - горизонтальный разделитель --> <!ATTLIST HR %coreattrs; -- id, class, style, title -- %events; align (left|center|right) #IMPLIED noshade (noshade) #IMPLIED size %Pixels; #IMPLIED width %Length; #IMPLIED > <!--=================== Абзацы =======================================--> <!ELEMENT P - O (%inline;)* -- абзац --> <!ATTLIST P %attrs; -- %coreattrs, %i18n, %events -- %align; -- выравнивание, выравнивание текста -- > <!--=================== Заголовки =========================================--> <!-- Имеется шесть уровней заголовков: от H1 до H6 (наименее значимый). --> <!ELEMENT (%heading;) - - (%inline;)* -- заголовок --> <!ATTLIST (%heading;) %attrs; -- %coreattrs, %i18n, %events -- %align; -- выравнивание, выравнивание текста -- > <!--=================== Форматированный текст ================================--> <!-- исключает разметку для изображений и изменения размера шрифта --> <!ENTITY % pre.exclusion "IMG|OBJECT|APPLET|BIG|SMALL|SUB|SUP|FONT|BASEFONT"> <!ELEMENT PRE - - (%inline;)* -(%pre.exclusion;) - форматирвоанный текст --> <!ATTLIST PRE %attrs; -- %coreattrs, %i18n, %events -- width NUMBER #IMPLIED > <!--===================== Встроенные цитаты ==================================--> <!ELEMENT Q - - (%inline;)* -- короткая встроенная цитата --> <!ATTLIST Q %attrs; -- %coreattrs, %i18n, %events -- cite %URI; #IMPLIED -- URI исходного документа или сообщения -- > <!--=================== Цитаты уровня блока ================================--> <!ELEMENT BLOCKQUOTE - - (%flow;)* -- длинная цитата --> <!ATTLIST BLOCKQUOTE %attrs; -- %coreattrs, %i18n, %events -- cite %URI; #IMPLIED -- URI исходного документа или сообщения -- > <!--=================== Вставленный/удаленный текст ============================--> <!-- INS/DEL are handled by inclusion on BODY --> <!ELEMENT (INS|DEL) - - (%flow;)* -- вставленный текст, удаленный текст --> <!ATTLIST (INS|DEL) %attrs; -- %coreattrs, %i18n, %events -- cite %URI; #IMPLIED -- информация о причинах изменений -- datetime %Datetime; #IMPLIED -- дата и время внесения изменений -- > <!--=================== Списки ============================================--> <!-- списки определений - DT -термин, DD - его определение --> <!ELEMENT DL - - (DT|DD)+ -- список определений --> <!ATTLIST DL %attrs; -- %coreattrs, %i18n, %events -- compact (compact) #IMPLIED -- сокращенное расстояние между элементами -- > <!ELEMENT DT - O (%inline;)* -- термин --> <!ELEMENT DD - O (%flow;)* -- определение --> <!ATTLIST (DT|DD) %attrs; -- %coreattrs, %i18n, %events -- > <!-- Упорядоченные списки (OL) стиль нумерации 1 арабские цифры 1, 2, 3, ... a буквы в нижнем регистре a, b, c, ... A буквы в верхнем регистре A, B, C, ... i римские цифры, нижний регистр i, ii, iii, ... I римские цифры, верхний регистр I, II, III, ... Этот стиль применяется к порядковым номерам, по умолчанию для первого элемента списка устанавливается 1. Непосредственно в SGML это выразить нельзя вследствие проблем с регистром. --> <!ENTITY % OLStyle "CDATA" -- ограничено: "(1|a|A|i|I)" --> <!ELEMENT OL - - (LI)+ -- упорядоченный список --> <!ATTLIST OL %attrs; -- %coreattrs, %i18n, %events -- type %OLStyle; #IMPLIED -- numbering style -- compact (compact) #IMPLIED -- сокращенное расстояние между элементами -- start NUMBER #IMPLIED -- начальный порядковый номер -- > <!-- Unordered Lists (UL) bullet styles --> <!ENTITY % ULStyle "(disc|square|circle)"> <!ELEMENT UL - - (LI)+ -- неупорядоченный список --> <!ATTLIST UL %attrs; -- %coreattrs, %i18n, %events -- type %ULStyle; #IMPLIED -- bullet style -- compact (compact) #IMPLIED -- сокращенное расстояние между элементами -- > <!ELEMENT (DIR|MENU) - - (LI)+ -(%block;) -- список каталогов, список меню --> <!ATTLIST DIR %attrs; -- %coreattrs, %i18n, %events -- compact (compact) #IMPLIED > <!ATTLIST MENU %attrs; -- %coreattrs, %i18n, %events -- compact (compact) #IMPLIED > <!ENTITY % LIStyle "CDATA" -- ограничено: "(%ULStyle;|%OLStyle;)" --> <!ELEMENT LI - O (%flow;)* -- элемент списка --> <!ATTLIST LI %attrs; -- %coreattrs, %i18n, %events -- type %LIStyle; #IMPLIED -- list item style -- value NUMBER #IMPLIED -- сброс порядкового номера -- > <!--================ Формы ===============================================--> <!ELEMENT FORM - - (%flow;)* -(FORM) -- интерактивная форма --> <!ATTLIST FORM %attrs; -- %coreattrs, %i18n, %events -- action %URI; #REQUIRED -- дескриптор серверной формы -- method (GET|POST) GET -- метод HTTP, используемый для отправки формы -- enctype %ContentType; "application/x-www-form-urlencoded" onsubmit %Script; #IMPLIED -- форма отправлена -- onreset %Script; #IMPLIED -- форма сброшена -- target %FrameTarget; #IMPLIED -- генерировать в этом фрейме -- accept-charset %Charsets; #IMPLIED -- список поддерживаемых наборов символов -- > <!-- Each label must not contain more than ONE field --> <!ELEMENT LABEL - - (%inline;)* -(LABEL) - текст метки поля формы --> <!ATTLIST LABEL %attrs; -- %coreattrs, %i18n, %events -- for IDREF #IMPLIED -- совпадает со значением ID поля -- accesskey %Character; #IMPLIED -- клавиша доступа -- onfocus %Script; #IMPLIED -- фокус перешел к элементу -- onblur %Script; #IMPLIED -- фокус ушел с элемента -- > <!ENTITY % InputType "(TEXT | PASSWORD | CHECKBOX | RADIO | SUBMIT | RESET | FILE | HIDDEN | IMAGE | BUTTON)" > <!-- атрибут name обязателен для всех элементов, кроме submit & reset --> <!ELEMENT INPUT - O EMPTY -- управляющий элемент формы --> <!ATTLIST INPUT %attrs; -- %coreattrs, %i18n, %events -- type %InputType; TEXT -- что должно быть введено -- name CDATA #IMPLIED -- передать как часть формы -- value CDATA #IMPLIED -- обязателен для кнопок с зависимой фиксацией и флажков -- checked (checked) #IMPLIED -- для кнопок с зависимой фиксацией и флажков -- disabled (disabled) #IMPLIED -- в данном контексте недоступно -- readonly (readonly) #IMPLIED -- для текста и пароля -- size CDATA #IMPLIED -- свое для каждого типа поля -- maxlength NUMBER #IMPLIED -- максимальное число символов для текстовых полей -- src %URI; #IMPLIED -- для полей с изображениями -- alt CDATA #IMPLIED -- краткое описание -- usemap %URI; #IMPLIED -- use клиентская навигационная карта -- tabindex NUMBER #IMPLIED -- положение в последовательности перехода -- accesskey %Character; #IMPLIED -- клавиша доступа -- onfocus %Script; #IMPLIED -- фокус перешел к элементу -- onblur %Script; #IMPLIED -- фокус ушел с элемента -- onselect %Script; #IMPLIED -- выделен некоторый текст -- onchange %Script; #IMPLIED -- изменено значение элемента -- accept %ContentTypes; #IMPLIED -- список типов MIME файлов для загрузки -- align %IAlign; #IMPLIED -- вертикальное или горизонтальное выравнивание -- %reserved; -- зарезервировано для использования в будущем -- > <!ELEMENT SELECT - - (OPTGROUP|OPTION)+ -- выбор вариантов --> <!ATTLIST SELECT %attrs; -- %coreattrs, %i18n, %events -- name CDATA #IMPLIED -- название поля -- size NUMBER #IMPLIED -- видимые строки -- multiple (multiple) #IMPLIED -- одиночный выбор по умолчанию -- disabled (disabled) #IMPLIED -- в данном контексте недоступно -- tabindex NUMBER #IMPLIED -- положение в последовательности перехода -- onfocus %Script; #IMPLIED -- фокус перешел к элементу -- onblur %Script; #IMPLIED -- фокус ушел с элемента -- onchange %Script; #IMPLIED -- изменено значение элемента -- %reserved; -- зарезервировано для использования в будущем -- > <!ELEMENT OPTGROUP - - (OPTION)+ -- группа параметров --> <!ATTLIST OPTGROUP %attrs; -- %coreattrs, %i18n, %events -- disabled (disabled) #IMPLIED -- в данном контексте недоступно -- label %Text; #REQUIRED -- для использования в иерархических меню -- > <!ELEMENT OPTION - O (#PCDATA) -- выбираемый вариант --> <!ATTLIST OPTION %attrs; -- %coreattrs, %i18n, %events -- selected (selected) #IMPLIED disabled (disabled) #IMPLIED -- в данном контексте недоступно -- label %Text; #IMPLIED -- для использования в иерархических меню -- value CDATA #IMPLIED -- по умолчанию - содержимое элемента -- > <!ELEMENT TEXTAREA - - (#PCDATA) -- текстовое поле из нескольких строк --> <!ATTLIST TEXTAREA %attrs; -- %coreattrs, %i18n, %events -- name CDATA #IMPLIED rows NUMBER #REQUIRED cols NUMBER #REQUIRED disabled (disabled) #IMPLIED -- в данном контексте недоступно -- readonly (readonly) #IMPLIED tabindex NUMBER #IMPLIED -- положение в последовательности перехода -- accesskey %Character; #IMPLIED -- клавиша доступа -- onfocus %Script; #IMPLIED -- фокус перешел к элементу -- onblur %Script; #IMPLIED -- фокус ушел с элемента -- onselect %Script; #IMPLIED -- выделен некоторый текст -- onchange %Script; #IMPLIED -- изменено значение элемента -- %reserved; -- зарезервировано для использования в будущем -- > <!-- #PCDATA используется для решения проблемы смешанного содержимого, здесь допустимы только пробельные символы! --> <!ELEMENT FIELDSET - - (#PCDATA,LEGEND,(%flow;)*) - группа управляющих элементов формы --> <!ATTLIST FIELDSET %attrs; -- %coreattrs, %i18n, %events -- > <!ELEMENT LEGEND - - (%inline;)* -- описание набора полей --> <!ENTITY % LAlign "(top|bottom|left|right)"> <!ATTLIST LEGEND %attrs; -- %coreattrs, %i18n, %events -- accesskey %Character; #IMPLIED -- клавиша доступа -- align %LAlign; #IMPLIED -- относительно набора полей -- > <!ELEMENT BUTTON - - (%flow;)* -(A|%formctrl;|FORM|ISINDEX|FIELDSET|IFRAME) -- кнопка --> <!ATTLIST BUTTON %attrs; -- %coreattrs, %i18n, %events -- name CDATA #IMPLIED value CDATA #IMPLIED -- отправлено на сервер при передаче -- type (button|submit|reset) submit -- для использования в качестве кнопки -- disabled (disabled) #IMPLIED -- в данном контексте недоступно -- tabindex NUMBER #IMPLIED -- положение в последовательности перехода -- accesskey %Character; #IMPLIED -- клавиша доступа -- onfocus %Script; #IMPLIED -- фокус перешел к элементу -- onblur %Script; #IMPLIED -- фокус ушел с элемента -- %reserved; -- зарезервировано для использования в будущем -- > <!--======================= Таблицы =======================================--> <!-- IETF HTML table standard, see [RFC1942] --> <!-- Атрибут BORDER устанавливает толщину рамки вокруг таблицы. По умолчанию используются пикселы. Атрибут FRAME определяет, какие части рамки вокруг таблицы должны представляться. Значения не совпадают с CALS во избежание конфликтов имен с атрибутом VALIGN. Значение "border" включено для совместимости с предыдущими версиями <TABLE BORDER>, уступив место frame=border и border=implied Для <TABLE BORDER=1> введены border=1 и frame=implied. В этом случае оно может обрабатываться как frame=border для совместимости с браузерами более старых версий. --> <!ENTITY % TFrame "(void|above|below|hsides|lhs|rhs|vsides|box|border)"> <!-- Атрибут RULES определяет, какие rules между ячейками будут отображаться: Если атрибут RULES отсутстввует, предполагается: "none", если атрибут BORDER отсутствует или BORDER=0, в противном случае "all" --> <!ENTITY % TRules "(none | groups | rows | cols | all)"> <!-- горизонтальное расположение таблицы относительно документа --> <!ENTITY % TAlign "(left|center|right)"> <!-- атрибуты горизонтального выравнивания содержимого ячейки --> <!ENTITY % cellhalign "align (left|center|right|justify|char) #IMPLIED char %Character; #IMPLIED -- символ выравнивания, например, char=':' -- charoff %Length; #IMPLIED -- смещение символа выравнивания --" > <!-- атрибуты вертикального выравниваиня содержимого ячейки --> <!ENTITY % cellvalign "valign (top|middle|bottom|baseline) #IMPLIED" > <!ELEMENT TABLE - - (CAPTION?, (COL*|COLGROUP*), THEAD?, TFOOT?, TBODY+)> <!ELEMENT CAPTION - - (%inline;)* -- table caption --> <!ELEMENT THEAD - O (TR)+ -- заголовок таблицы --> <!ELEMENT TFOOT - O (TR)+ -- нижний заголовок таблицы --> <!ELEMENT TBODY O O (TR)+ -- тело таблицы --> <!ELEMENT COLGROUP - O (col)* -- группа столбцов таблицы --> <!ELEMENT COL - O EMPTY -- столбец таблицы --> <!ELEMENT TR - O (TH|TD)+ -- строка таблицы --> <!ELEMENT (TH|TD) - O (%flow;)* -- ячейка заголовка таблицы, ячейка данных таблицы--> <!ATTLIST TABLE -- элемент таблицы -- %attrs; -- %coreattrs, %i18n, %events -- summary %Text; #IMPLIED -- назначение/структура речевого вывода-- width %Length; #IMPLIED -- ширина таблицы -- border %Pixels; #IMPLIED -- управляет толщиной рамки вокруг таблицы -- frame %TFrame; #IMPLIED -- какие части рамки должны геренироваться -- rules %TRules; #IMPLIED -- разделители между строками столбцами -- cellspacing %Length; #IMPLIED -- расстояние между ячейками -- cellpadding %Length; #IMPLIED -- расстояние в ячейках -- align %TAlign; #IMPLIED -- положение таблицы относительно окна -- bgcolor %Color; #IMPLIED -- цвет фона ячеек -- %reserved; -- зарезервировано для использования в будущем -- datapagesize CDATA #IMPLIED -- зарезервировано для использования в будущем -- > <!ENTITY % CAlign "(top|bottom|left|right)"> <!ATTLIST CAPTION %attrs; -- %coreattrs, %i18n, %events -- align %CAlign; #IMPLIED -- относительно таблицы -- > <!-- COLGROUP объяединяет ряд элементов COL. В можете группировать несколько семантически связанных столбцов. --> <!ATTLIST COLGROUP %attrs; -- %coreattrs, %i18n, %events -- span NUMBER 1 -- число столбцов в группе по умолчанию -- width %MultiLength; #IMPLIED -- ширина по умолчанию для вложенных COL -- %cellhalign; -- горизонтальное выравнивание в ячейках -- %cellvalign; -- вертикальное выравнивание в ячейках -- > <!-- Элементы COL определяют свойства выраванивания для ячеек в одном или нескольких столбцах. Атрибут WIDTH определяет ширину столбцов, например, width=64 ширина в пикселах width=0.5* относительная ширина 0.5 Атрибут SPAN приводит к тому, что атрибуты одного элемента COL приеняются к нскольким столбцам. --> <!ATTLIST COL -- группа и свойства столбцов -- %attrs; -- %coreattrs, %i18n, %events -- span NUMBER 1 -- атрибуты COL влияют на N столбцов -- width %MultiLength; #IMPLIED -- указание ширины столбца -- %cellhalign; -- горизонтальное выравнивание в ячейках -- %cellvalign; -- вертикальное выравнивание в ячейках -- > <!-- Используйте THEAD для дублирования заголовков при разрые таблицы на страницах ли для представления статических заголовков, когда разделы TBODY представляются на прокручиваемой панели. Используйте TFOOT для дублирования нижних заголовков при разрые таблицы на страницах ли для представления статических заголовков, когда разделы TBODY представляются на прокручиваемой панели. Используйте несколько разделов TBODY, если между группами строк таблицы необходимы rules. --> <!ATTLIST (THEAD|TBODY|TFOOT) -- table section -- %attrs; -- %coreattrs, %i18n, %events -- %cellhalign; -- горизонтальное выравнивание в ячейках -- %cellvalign; -- вертикальное выравнивание в ячейках -- > <!ATTLIST TR -- строка таблицы -- %attrs; -- %coreattrs, %i18n, %events -- %cellhalign; -- горизонтальное выравнивание в ячейках -- %cellvalign; -- вертикальное выравнивание в ячейках -- bgcolor %Color; #IMPLIED -- цвет фона строки -- > <!-- Атрибут Scope проще атрибута axes для большинства таблиц --> <!ENTITY % Scope "(row|col|rowgroup|colgroup)"> <!-- TH - для заголовков, TD 0 для данных, но для ячеек, действующих как то и другое используйте TD --> <!ATTLIST (TH|TD) -- ячейка заголовка или данных -- %attrs; -- %coreattrs, %i18n, %events -- abbr %Text; #IMPLIED -- аббревиатура ячейки заголовка -- axis CDATA #IMPLIED -- группы имен связаннх столбцов -- headers IDREFS #IMPLIED -- список идентификаторов ячеек заголовков -- scope %Scope; #IMPLIED -- область действия ячеек заголовков -- rowspan NUMBER 1 -- число строк, занимаемых ячейкой -- colspan NUMBER 1 -- число столбцов, занимаемых ячейкой -- %cellhalign; -- горизонтальное выравнивание в ячейках -- %cellvalign; -- вертикальное выравнивание в ячейках -- nowrap (nowrap) #IMPLIED -- подавление переноса слов -- bgcolor %Color; #IMPLIED -- цвет фона ячейки -- width %Pixels; #IMPLIED -- ширина ячейки -- height %Pixels; #IMPLIED -- высота ячейки -- > <!--================== Фреймы документа ===================================--> <!-- Модель содержимого документов HTML зависит от того, следует ли за элементом HEAD элемент FRAMESET или BODY. Широко растпространенный пропуск начального тега BODY не позволяет определить модель содержимого без использования размеченного раздела. --> <!-- Feature Switch for frameset documents --> <!ENTITY % HTML.Frameset "IGNORE"> <![ %HTML.Frameset; [ <!ELEMENT FRAMESET - - ((FRAMESET|FRAME)+ & NOFRAMES?) - подразделение окна --> <!ATTLIST FRAMESET %coreattrs; -- id, class, style, title -- rows %MultiLengths; #IMPLIED -- список длин, по умочланию: 100% (1 строка) -- cols %MultiLengths; #IMPLIED -- список длин, по умолчанию: 100% (1 столбец) -- onload %Script; #IMPLIED -- все фреймы загружены -- onunload %Script; #IMPLIED -- все фреймы удалены -- > ]]> <![ %HTML.Frameset; [ <!-- зарезервированные имена фреймов начинаются с "_", в противном случае - с буквы --> <!ELEMENT FRAME - O EMPTY -- вложенное окно --> <!ATTLIST FRAME %coreattrs; -- id, class, style, title -- longdesc %URI; #IMPLIED -- ссылка на длинное описание (дополняет title) -- name CDATA #IMPLIED -- имя целевого фрейма -- src %URI; #IMPLIED -- источник содержимого фрейма -- frameborder (1|0) 1 -- нужны границы фрейма? -- marginwidth %Pixels; #IMPLIED -- ширина полей в пикселах -- marginheight %Pixels; #IMPLIED -- высотав полей в пикселах -- noresize (noresize) #IMPLIED -- позволить пользователям изменять размеры фрейма? -- scrolling (yes|no|auto) auto -- наличие полосы прокрутки -- > ]]> <!ELEMENT IFRAME - - (%flow;)* -- встроенное вложенное окно --> <!ATTLIST IFRAME %coreattrs; -- id, class, style, title -- longdesc %URI; #IMPLIED -- ссылка на длинное описание (дополняет title) -- name CDATA #IMPLIED -- имя целевого фрейма -- src %URI; #IMPLIED -- источник содержимого фрейма -- frameborder (1|0) 1 -- нужны границы фрейма? -- marginwidth %Pixels; #IMPLIED -- ширина полей в пикселах -- marginheight %Pixels; #IMPLIED -- высота полей в пикселах -- scrolling (yes|no|auto) auto -- нужна ли полоса прокрутки -- align %IAlign; #IMPLIED -- вертикальное или горизонтальное выравнивание -- height %Length; #IMPLIED -- высота фрейма -- width %Length; #IMPLIED -- ширина фрейма -- > <![ %HTML.Frameset; [ <!ENTITY % noframes.content "(BODY) -(NOFRAMES)"> ]]> <!ENTITY % noframes.content "(%flow;)*"> <!ELEMENT NOFRAMES - - %noframes.content; -- контейнер альтернативного содержимого для представления без фреймов --> <!ATTLIST NOFRAMES %attrs; -- %coreattrs, %i18n, %events -- > <!--================ Заголовок документа =======================================--> <!-- %head.misc; определяется ранее как "SCRIPT|STYLE|META|LINK|OBJECT" --> <!ENTITY % head.content "TITLE & ISINDEX? & BASE?"> <!ELEMENT HEAD O O (%head.content;) +(%head.misc;) - заголовок документа --> <!ATTLIST HEAD %i18n; -- lang, dir -- profile %URI; #IMPLIED -- именованный словарь метаинформации -- > <!-- Элемент TITLE не считается частью потока текста. Он должен отображаться, например, в виде заголовка страницы или окна. У кажого документа должен быть ровно один заголовок. --> <!ELEMENT TITLE - - (#PCDATA) -(%head.misc;) -- заголовок документа --> <!ATTLIST TITLE %i18n> <!ELEMENT ISINDEX - O EMPTY -- запрос из одной строки --> <!ATTLIST ISINDEX %coreattrs; -- id, class, style, title -- %i18n; -- lang, dir -- prompt %Text; #IMPLIED -- сообщение запроса --> <!ELEMENT BASE - O EMPTY -- базовый URI документа --> <!ATTLIST BASE href %URI; #IMPLIED -- URI, служащий базовым -- target %FrameTarget; #IMPLIED -- генерировать в этом фрейме -- > <!ELEMENT META - O EMPTY -- общая метаинформация --> <!ATTLIST META %i18n; -- lang, dir, для использования с содержимым -- http-equiv NAME #IMPLIED -- HTTP имя заголовка ответа -- name NAME #IMPLIED -- имя метаинформации -- content CDATA #REQUIRED -- связанная информация -- scheme CDATA #IMPLIED -- выбор формы содержимого -- > <!ELEMENT STYLE - - %StyleSheet -- информация о стиле --> <!ATTLIST STYLE %i18n; -- lang, dir, для использования в заголовке -- type %ContentType; #REQUIRED -- тип содержимого языка стиля -- media %MediaDesc; #IMPLIED -- для использвоания с этими устройствами -- title %Text; #IMPLIED -- рекомендуемый заголовок -- > <!ELEMENT SCRIPT - - %Script; -- выражения скрипта --> <!ATTLIST SCRIPT charset %Charset; #IMPLIED -- кодировка связанного ресурса -- type %ContentType; #REQUIRED -- тип содержимого языка скрипта -- language CDATA #IMPLIED -- предопределенное имя языка скрипта -- src %URI; #IMPLIED -- URI внешнего скрипта -- defer (defer) #IMPLIED -- агент пользователя может отложить выполнение скрипта -- event CDATA #IMPLIED -- зарезервировано для использования в будущем -- for %URI; #IMPLIED -- зарезервировано для использования в будущем -- > <!ELEMENT NOSCRIPT - - (%flow;)* -- контейнер альтернативного содержимого для представления без скриптов --> <!ATTLIST NOSCRIPT %attrs; -- %coreattrs, %i18n, %events -- > <!--================ Структура документа ==================================--> <!ENTITY % version "version CDATA #FIXED '%HTML.Version;'"> <![ %HTML.Frameset; [ <!ENTITY % html.content "HEAD, FRAMESET"> ]]> <!ENTITY % html.content "HEAD, BODY"> <!ELEMENT HTML O O (%html.content;) -- корневой элемент документа --> <!ATTLIST HTML %i18n; -- lang, dir -- %version; >
<!-- Это объявление HTML 4.0 Frameset DTD должно использоваться для документов с фреймами. Это DTD совпадает с HTML 4.0 Transitional DTD за исключением модели содержимого элемента "HTML": в документах с фреймами элемент "FRAMESET" заменяет элемента "BODY". Черновик: $Дата: 1997/12/11 15:31:11 $ Авторы: Дэйв Рэгетт <dsr@w3.org> Арно Ле Орс <lehors@w3.org> Ян Джейкобс <ij@w3.org> Подробную информацию о HTML 4.0 можно найти по адресу: http://www.w3.org/TR/REC-html40. --> <!ENTITY % HTML.Version "-//W3C//DTD HTML 4.0 Frameset//EN" -- Пример типичного использования: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN" "http://www.w3.org/TR/REC-html40/frameset.dtd"> <html> <head> ... </head> <frameset> ... </frameset> </html> --> <!ENTITY % HTML.Frameset "INCLUDE"> <!ENTITY % HTML4.dtd PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> %HTML4.dtd;
Содержание
В данной версии HTML поддерживается несколько наборов ссылок на комбинации символов:
В следующих разделах представлены полные списки ссылок на комбинации символов. Хотя по соглашению имена [ISO10646] записываются буквами верхнего регистра, мы преобразовали их в нижний для удобства чтения.
Ссылки, перечисленные в данном разделе, позволяют обратиться к символам, числовые эквиваленты которых уже должны поддерживаться агентами пользователей, соответствующими спецификации HTML 2.0. Для доступа к знаку деления (÷) гораздо удобнее использовать ссылку ÷, чем ÷.
Для поддержки таких именованных комбинаций агентам пользователя необходимо лишь распознавать имена объектов и преобразовывать их в символы набора [ISO88591].
Символ 65533 (шестнадцатеричный код FFFD) является последним допустимым символом набора UCS-2. 65534 (шестнадцатеричный код FFFE) зарезервирован как версия НЕРАЗРЫВНОГО ПРОБЕЛА НУЛЕВОЙ ШИРИНЫ с перестановкой байтов с целью определения порядка байтов. Символ 65535 (шестнадцатеричный код FFFF) не назначен.
<!-- Частичное © Международная организация по стандартизации 1986 Разрешение на копирование в любой форме дается для использования с соответствующими системами и приложениями SGML в соответствии со стандартом ISO 8879 при условии, что данное замечание включено во все копии. --> <!-- Набор комбинаций символов. Типичный вызов: <!ENTITY % HTMLlat1 PUBLIC "-//W3C//ENTITIES Full Latin 1//EN//HTML"> %HTMLlat1; --> <!ENTITY nbsp CDATA " " -- неразрывный пробел, U+00A0 ISOnum --> <!ENTITY iexcl CDATA "¡" -- перевернутый восклицательный знак, U+00A1 ISOnum --> <!ENTITY cent CDATA "¢" -- знак цента, U+00A2 ISOnum --> <!ENTITY pound CDATA "£" -- знак фунта, U+00A3 ISOnum --> <!ENTITY curren CDATA "¤" -- знак валюты, U+00A4 ISOnum --> <!ENTITY yen CDATA "¥" -- знак йены и юаня, U+00A5 ISOnum --> <!ENTITY brvbar CDATA "¦" -- изломанная вертикальня черта, U+00A6 ISOnum --> <!ENTITY sect CDATA "§" -- знак раздела, U+00A7 ISOnum --> <!ENTITY uml CDATA "¨" -- трема, U+00A8 ISOdia --> <!ENTITY copy CDATA "©" -- знак авторского права, U+00A9 ISOnum --> <!ENTITY ordf CDATA "ª" -- указатель порядкового числительного женского рода, U+00AA ISOnum --> <!ENTITY laquo CDATA "«" -- двойные угловые левые кавычки, U+00AB ISOnum --> <!ENTITY not CDATA "¬" -- знак отрицания, U+00AC ISOnum --> <!ENTITY shy CDATA "­" -- мягкий перенос, U+00AD ISOnum --> <!ENTITY reg CDATA "®" -- знак зарегистрированной торговой марки, U+00AE ISOnum --> <!ENTITY macr CDATA "¯" -- знак долготы над гласными = overline = APL overbar, U+00AF ISOdia --> <!ENTITY deg CDATA "°" -- знак градуса, U+00B0 ISOnum --> <!ENTITY plusmn CDATA "±" -- знак плюс-минус, U+00B1 ISOnum --> <!ENTITY sup2 CDATA "²" -- два в верхнем индексе = квадрат, U+00B2 ISOnum --> <!ENTITY sup3 CDATA "³" -- три в верхнем индексе = куб, U+00B3 ISOnum --> <!ENTITY acute CDATA "´" -- знак ударения, U+00B4 ISOdia --> <!ENTITY micro CDATA "µ" -- знак микро, U+00B5 ISOnum --> <!ENTITY para CDATA "¶" -- знак pilcrow sign = знак абзаца, U+00B6 ISOnum --> <!ENTITY middot CDATA "·" -- средня точка = запятая в Грузии = средняя точка в Греции, U+00B7 ISOnum --> <!ENTITY cedil CDATA "¸" -- седиль, U+00B8 ISOdia --> <!ENTITY sup1 CDATA "¹" -- один в верхнем индексе, U+00B9 ISOnum --> <!ENTITY ordm CDATA "º" -- указатель порядкового числительного мужского рода, U+00BA ISOnum --> <!ENTITY raquo CDATA "»" -- правая двойная угловая кавычка, U+00BB ISOnum --> <!ENTITY frac14 CDATA "¼" -- одна четверть, U+00BC ISOnum --> <!ENTITY frac12 CDATA "½" -- одна вторая, U+00BD ISOnum --> <!ENTITY frac34 CDATA "¾" -- три четверти, U+00BE ISOnum --> <!ENTITY iquest CDATA "¿" -- перевернутый вопросительный знак, U+00BF ISOnum --> <!ENTITY Agrave CDATA "À" -- заглавная латинская буква A с тупым ударением, U+00C0 ISOlat1 --> <!ENTITY Aacute CDATA "Á" -- заглавная латинская буква A с ударением, U+00C1 ISOlat1 --> <!ENTITY Acirc CDATA "Â" -- заглавная латинская буква A с циркумфлексом, U+00C2 ISOlat1 --> <!ENTITY Atilde CDATA "Ã" -- заглавная латинская буква A с тильдой, U+00C3 ISOlat1 --> <!ENTITY Auml CDATA "Ä" -- заглавная латинская буква A с тремой, U+00C4 ISOlat1 --> <!ENTITY Aring CDATA "Å" -- заглавная латинская буква A с кружочком, U+00C5 ISOlat1 --> <!ENTITY AElig CDATA "Æ" -- заглавная латинская буква AE, U+00C6 ISOlat1 --> <!ENTITY Ccedil CDATA "Ç" -- заглавная латинская буква C с седилем, U+00C7 ISOlat1 --> <!ENTITY Egrave CDATA "È" -- заглавная латинская буква E с тупым ударением, U+00C8 ISOlat1 --> <!ENTITY Eacute CDATA "É" -- заглавная латинская буква E с ударением, U+00C9 ISOlat1 --> <!ENTITY Ecirc CDATA "Ê" -- заглавная латинская буква E с циркумфлексом, U+00CA ISOlat1 --> <!ENTITY Euml CDATA "Ë" -- заглавная латинская буква E с тремой, U+00CB ISOlat1 --> <!ENTITY Igrave CDATA "Ì" -- заглавная латинская буква I с тупым ударением, U+00CC ISOlat1 --> <!ENTITY Iacute CDATA "Í" -- заглавная латинская буква I с ударением, U+00CD ISOlat1 --> <!ENTITY Icirc CDATA "Î" -- заглавная латинская буква I с циркумфлексом, U+00CE ISOlat1 --> <!ENTITY Iuml CDATA "Ï" -- заглавная латинская буква I с тремой, U+00CF ISOlat1 --> <!ENTITY ETH CDATA "Ð" -- заглавная латинская буква ETH, U+00D0 ISOlat1 --> <!ENTITY Ntilde CDATA "Ñ" -- заглавная латинская буква N с тильдой, U+00D1 ISOlat1 --> <!ENTITY Ograve CDATA "Ò" -- заглавная латинская буква O с тупым ударением, U+00D2 ISOlat1 --> <!ENTITY Oacute CDATA "Ó" -- заглавная латинская буква O с ударением, U+00D3 ISOlat1 --> <!ENTITY Ocirc CDATA "Ô" -- заглавная латинская буква O с циркумфлексом, U+00D4 ISOlat1 --> <!ENTITY Otilde CDATA "Õ" -- заглавная латинская буква O с тильдой, U+00D5 ISOlat1 --> <!ENTITY Ouml CDATA "Ö" -- заглавная латинская буква O с тремой, U+00D6 ISOlat1 --> <!ENTITY times CDATA "×" -- знак умножения, U+00D7 ISOnum --> <!ENTITY Oslash CDATA "Ø" -- перечеркнутая заглавная латинская буква O, U+00D8 ISOlat1 --> <!ENTITY Ugrave CDATA "Ù" -- заглавная латинская буква U с тупым ударением, U+00D9 ISOlat1 --> <!ENTITY Uacute CDATA "Ú" -- заглавная латинская буква U с ударением, U+00DA ISOlat1 --> <!ENTITY Ucirc CDATA "Û" -- заглавная латинская буква U с циркумфлексом, U+00DB ISOlat1 --> <!ENTITY Uuml CDATA "Ü" -- заглавная латинская буква U с тремой, U+00DC ISOlat1 --> <!ENTITY Yacute CDATA "Ý" -- заглавная латинская буква Y с ударением, U+00DD ISOlat1 --> <!ENTITY THORN CDATA "Þ" -- заглавная латинская буква THORN, U+00DE ISOlat1 --> <!ENTITY szlig CDATA "ß" -- строчная латинская острая буква s = ess-zed, U+00DF ISOlat1 --> <!ENTITY agrave CDATA "à" -- строчная латинская буква a с тупым ударением, U+00E0 ISOlat1 --> <!ENTITY aacute CDATA "á" -- строчная латинская буква a с ударением, U+00E1 ISOlat1 --> <!ENTITY acirc CDATA "â" -- строчная латинская буква a с циркумфлексом, U+00E2 ISOlat1 --> <!ENTITY atilde CDATA "ã" -- строчная латинская буква a с тильдой, U+00E3 ISOlat1 --> <!ENTITY auml CDATA "ä" -- строчная латинская буква a с тремой, U+00E4 ISOlat1 --> <!ENTITY aring CDATA "å" -- строчная латинская буква a с кружком, U+00E5 ISOlat1 --> <!ENTITY aelig CDATA "æ" -- строчная латинская буква ae, U+00E6 ISOlat1 --> <!ENTITY ccedil CDATA "ç" -- строчная латинская буква c с седилем, U+00E7 ISOlat1 --> <!ENTITY egrave CDATA "è" -- строчная латинская буква e с тупым ударением, U+00E8 ISOlat1 --> <!ENTITY eacute CDATA "é" -- строчная латинская буква e с ударением, U+00E9 ISOlat1 --> <!ENTITY ecirc CDATA "ê" -- строчная латинская буква e с циркумфлексом, U+00EA ISOlat1 --> <!ENTITY euml CDATA "ë" -- строчная латинская буква e с тремой, U+00EB ISOlat1 --> <!ENTITY igrave CDATA "ì" -- строчная латинская буква i с тупым ударением, U+00EC ISOlat1 --> <!ENTITY iacute CDATA "í" -- строчная латинская буква i с ударением, U+00ED ISOlat1 --> <!ENTITY icirc CDATA "î" -- строчная латинская буква i с циркумфлексом, U+00EE ISOlat1 --> <!ENTITY iuml CDATA "ï" -- строчная латинская буква i с тремой, U+00EF ISOlat1 --> <!ENTITY eth CDATA "ð" -- строчная латинская буква eth, U+00F0 ISOlat1 --> <!ENTITY ntilde CDATA "ñ" -- строчная латинская буква n с тильдой, U+00F1 ISOlat1 --> <!ENTITY ograve CDATA "ò" -- строчная латинская буква o с тупым ударением, U+00F2 ISOlat1 --> <!ENTITY oacute CDATA "ó" -- строчная латинская буква o с ударением, U+00F3 ISOlat1 --> <!ENTITY ocirc CDATA "ô" -- строчная латинская буква o с циркумфлексом, U+00F4 ISOlat1 --> <!ENTITY otilde CDATA "õ" -- строчная латинская буква o с тильдой, U+00F5 ISOlat1 --> <!ENTITY ouml CDATA "ö" -- строчная латинская буква o с тремой, U+00F6 ISOlat1 --> <!ENTITY divide CDATA "÷" -- division sign, U+00F7 ISOnum --> <!ENTITY oslash CDATA "ø" -- строчная латинская буква o перечеркнутая, U+00F8 ISOlat1 --> <!ENTITY ugrave CDATA "ù" -- строчная латинская буква u с тупым ударением, U+00F9 ISOlat1 --> <!ENTITY uacute CDATA "ú" -- строчная латинская буква u с ударением, U+00FA ISOlat1 --> <!ENTITY ucirc CDATA "û" -- строчная латинская буква u с циркумфлексом, U+00FB ISOlat1 --> <!ENTITY uuml CDATA "ü" -- строчная латинская буква u с тремой, U+00FC ISOlat1 --> <!ENTITY yacute CDATA "ý" -- строчная латинская буква y с ударением, U+00FD ISOlat1 --> <!ENTITY thorn CDATA "þ" -- строчная латинская буква thorn with, U+00FE ISOlat1 --> <!ENTITY yuml CDATA "ÿ" -- строчная латинская буква y с тремой, U+00FF ISOlat1 -->
Ссылки, перечисленные в этом разделе, позволяют обратиться к символам, представляемым знаками широко используемого шрифта Symbolфимры Adobe, включая буквы греческого алфавита, различные скобки и ряд математических операторов типа градиента, произведения и суммы.
Для поддержки этих комбинаций агенты пользователей должны поддерживать полный набор [ISO10646] или использовать другие средства. Отображение иероглифов может достигаться за счет возможности отображения соответствующих символов набора [ISO10646] или иными средствами, например, внутренним отображением на перечисленные символы, числовыми ссылками на символы в соответствующей позиции в некотором шрифте, содержащем запрошенные иероглифы.
Когда нужно использовать греческие символы. Этот набор символов содержит все буквы, используемые в современном греческом языке. Однако сюда не входят греческие символы пунктуации, символы с ударением, а также неразрывные ударения (тонос, диалитика), необходимые для их составления. Не включены устаревшие буквы, коптские буквы и буквы политонического греческого языка. Определенные здесь объекты не предназначены для представления современного греческого текста; они предназначены для представления отдельных греческих букв, используемых в математических работах.
<!-- Математические символы и знаки и буквы греческого алфавита для HTML --> <!-- Набор ссылок на символы. Типичный вызов: <!ENTITY % HTMLsymbol PUBLIC "-//W3C//ENTITIES Symbolic//EN//HTML"> %HTMLsymbol; --> <!-- Частичное © Международная организация по стандартизации 1986: Разрешение на копирование в любой форме дается для использования с соответствующими системами и приложениями SGML в соответствии со стандартом ISO 8879 при условии, что данное замечание включено во все копии. --> <!-- Если имена не являются новыми, дается соответствующий объект ISO. Новые имена (не входящие в список ISO 8879) не конфликтуют с существующими именами объектов ISO 8879. Номера ISO 10646 даются для каждого символа в шестнадцатеричном формате. Значения CDATA являются десятичным выражением значений ISO 10646 и относятся к набору символов документа. Имена являются именами Unicode 2.0. --> <!-- Latin Extended-B --> <!ENTITY fnof CDATA "ƒ" -- строчная латинская буква f с крючком = флорин, U+0192 ISOtech --> <!-- Greek --> <!ENTITY Alpha CDATA "Α" -- греческая заглавная буква альфа, U+0391 --> <!ENTITY Beta CDATA "Β" -- греческая заглавная буква бета, U+0392 --> <!ENTITY Gamma CDATA "Γ" -- греческая заглавная буква гамма, U+0393 ISOgrk3 --> <!ENTITY Delta CDATA "Δ" -- греческая заглавная буква дельта, U+0394 ISOgrk3 --> <!ENTITY Epsilon CDATA "Ε" -- греческая заглавная буква эпсилон, U+0395 --> <!ENTITY Zeta CDATA "Ζ" -- греческая заглавная буква джета, U+0396 --> <!ENTITY Eta CDATA "Η" -- греческая заглавная буква эта, U+0397 --> <!ENTITY Theta CDATA "Θ" -- греческая заглавная буква тета, U+0398 ISOgrk3 --> <!ENTITY Iota CDATA "Ι" -- греческая заглавная буква йота, U+0399 --> <!ENTITY Kappa CDATA "Κ" -- греческая заглавная буква каппа, U+039A --> <!ENTITY Lambda CDATA "Λ" -- греческая заглавная буква лямбда, U+039B ISOgrk3 --> <!ENTITY Mu CDATA "Μ" -- греческая заглавная буква мю, U+039C --> <!ENTITY Nu CDATA "Ν" -- греческая заглавная буква ню, U+039D --> <!ENTITY Xi CDATA "Ξ" -- греческая заглавная буква кси, U+039E ISOgrk3 --> <!ENTITY Omicron CDATA "Ο" -- греческая заглавная буква омикрон, U+039F --> <!ENTITY Pi CDATA "Π" -- греческая заглавная буква пи, U+03A0 ISOgrk3 --> <!ENTITY Rho CDATA "Ρ" -- греческая заглавная буква ро, U+03A1 --> <!-- символы сигма ф и U+03A2 отсутствуют --> <!ENTITY Sigma CDATA "Σ" -- греческая заглавная буква сигма, U+03A3 ISOgrk3 --> <!ENTITY Tau CDATA "Τ" -- греческая заглавная буква тау, U+03A4 --> <!ENTITY Upsilon CDATA "Υ" -- греческая заглавная буква ипсилон, U+03A5 ISOgrk3 --> <!ENTITY Phi CDATA "Φ" -- греческая заглавная буква фи, U+03A6 ISOgrk3 --> <!ENTITY Chi CDATA "Χ" -- греческая заглавная буква хи, U+03A7 --> <!ENTITY Psi CDATA "Ψ" -- греческая заглавная буква пси, U+03A8 ISOgrk3 --> <!ENTITY Omega CDATA "Ω" -- греческая заглавная буква омега, U+03A9 ISOgrk3 --> <!ENTITY alpha CDATA "α" -- греческая строчная буква альфа, U+03B1 ISOgrk3 --> <!ENTITY beta CDATA "β" -- греческая строчная буква бета, U+03B2 ISOgrk3 --> <!ENTITY gamma CDATA "γ" -- греческая строчная буква гамма, U+03B3 ISOgrk3 --> <!ENTITY delta CDATA "δ" -- греческая строчная буква дельта, U+03B4 ISOgrk3 --> <!ENTITY epsilon CDATA "ε" -- греческая строчная буква эпсилон, U+03B5 ISOgrk3 --> <!ENTITY zeta CDATA "ζ" -- греческая строчная буква дзета, U+03B6 ISOgrk3 --> <!ENTITY eta CDATA "η" -- греческая строчная буква эта, U+03B7 ISOgrk3 --> <!ENTITY theta CDATA "θ" -- греческая строчная буква тета, U+03B8 ISOgrk3 --> <!ENTITY iota CDATA "ι" -- греческая строчная буква йота, U+03B9 ISOgrk3 --> <!ENTITY kappa CDATA "κ" -- греческая строчная буква каппа, U+03BA ISOgrk3 --> <!ENTITY lambda CDATA "λ" -- греческая строчная буква лямбда, U+03BB ISOgrk3 --> <!ENTITY mu CDATA "μ" -- греческая строчная буква мю, U+03BC ISOgrk3 --> <!ENTITY nu CDATA "ν" -- греческая строчная буква ню, U+03BD ISOgrk3 --> <!ENTITY xi CDATA "ξ" -- греческая строчная буква кси, U+03BE ISOgrk3 --> <!ENTITY omicron CDATA "ο" -- греческая строчная буква омикрон, U+03BF NEW --> <!ENTITY pi CDATA "π" -- греческая строчная буква пи, U+03C0 ISOgrk3 --> <!ENTITY rho CDATA "ρ" -- греческая строчная буква ро, U+03C1 ISOgrk3 --> <!ENTITY sigmaf CDATA "ς" -- греческая строчная буква конечная сигма, U+03C2 ISOgrk3 --> <!ENTITY sigma CDATA "σ" -- греческая строчная буква сигма, U+03C3 ISOgrk3 --> <!ENTITY tau CDATA "τ" -- греческая строчная буква тау, U+03C4 ISOgrk3 --> <!ENTITY upsilon CDATA "υ" -- греческая строчная буква ипсилон, U+03C5 ISOgrk3 --> <!ENTITY phi CDATA "φ" -- греческая строчная буква фи, U+03C6 ISOgrk3 --> <!ENTITY chi CDATA "χ" -- греческая строчная буква хи, U+03C7 ISOgrk3 --> <!ENTITY psi CDATA "ψ" -- греческая строчная буква пси, U+03C8 ISOgrk3 --> <!ENTITY omega CDATA "ω" -- греческая строчная буква омега, U+03C9 ISOgrk3 --> <!ENTITY thetasym CDATA "ϑ" -- греческая строчная буква тета, U+03D1 NEW --> <!ENTITY upsih CDATA "ϒ" -- греческий символ ипсилон с крючком, U+03D2 NEW --> <!ENTITY piv CDATA "ϖ" -- греческий символ пи, U+03D6 ISOgrk3 --> <!-- Общая пунктуция --> <!ENTITY bull CDATA "•" -- маркер = небольшой черный кружок, U+2022 ISOpub --> <!-- маркер и оператор маркера, U+2219 - не одно и то же --> <!ENTITY hellip CDATA "…" -- горизонтальное многоточие, U+2026 ISOpub --> <!ENTITY prime CDATA "′" -- штрих (минуты, футы), U+2032 ISOtech --> <!ENTITY Prime CDATA "″" -- двойной штрих (секунды, дюймы), U+2033 ISOtech --> <!ENTITY oline CDATA "‾" -- надчеркивание, U+203E NEW --> <!ENTITY frasl CDATA "⁄" -- дробная черта, U+2044 NEW --> <!-- Символы типа букв --> <!ENTITY weierp CDATA "℘" -- рукописная заглавня P, U+2118 ISOamso --> <!ENTITY image CDATA "ℑ" -- заглавная готическая I = мнимая часть, U+2111 ISOamso --> <!ENTITY real CDATA "ℜ" -- готическая заглавная R = реальня часть, U+211C ISOamso --> <!ENTITY trade CDATA "™" -- знак торговой марки, U+2122 ISOnum --> <!ENTITY alefsym CDATA "ℵ" -- символ алеф = первое трансфинитное числительное, U+2135 NEW --> <!-- символ алеф - это НЕ бква алеф ивритского алфавита, U+05D0, хотя для обозначения обоих символов может использоваться один иероглиф--> <!-- Arrows --> <!ENTITY larr CDATA "←" -- стрелка влево, U+2190 ISOnum --> <!ENTITY uarr CDATA "↑" -- стрелка вверх, U+2191 ISOnum--> <!ENTITY rarr CDATA "→" -- стрелка вправо, U+2192 ISOnum --> <!ENTITY darr CDATA "↓" -- стрелка вниз, U+2193 ISOnum --> <!ENTITY harr CDATA "↔" -- стрелка влево и вправо, U+2194 ISOamsa --> <!ENTITY crarr CDATA "↵" -- угловая стрелка влево вниз = возврат каретки, U+21B5 NEW --> <!ENTITY lArr CDATA "⇐" -- двойная стрелка влево, U+21D0 ISOtech --> <!-- В Unicode не говорится, что lArr и стрелка 'импликации' - одно и то же, но для этой функции не имеется специального символа. Поэтому для 'импликации' может использовать ? lArr в соответствии с ISOtech --> <!ENTITY uArr CDATA "⇑" -- двойная стрелка вверх, U+21D1 ISOamsa --> <!ENTITY rArr CDATA "⇒" -- двойная стрелка вправо, U+21D2 ISOtech --> <!-- В Unicode не говорится, что rArr и стрелка 'импликации' - одно и то же, но для этой функции не имеется специального символа. Поэтому для 'импликации' может использовать rArr в соответствии с ISOtech --> <!ENTITY dArr CDATA "⇓" -- двойная стрелка вниз, U+21D3 ISOamsa --> <!ENTITY hArr CDATA "⇔" -- двойная стрелка влево-вправо, U+21D4 ISOamsa --> <!-- Математические операторы --> <!ENTITY forall CDATA "∀" -- для всех, U+2200 ISOtech --> <!ENTITY part CDATA "∂" -- частичный дифференциал, U+2202 ISOtech --> <!ENTITY exist CDATA "∃" -- существует, U+2203 ISOtech --> <!ENTITY empty CDATA "∅" -- пустое множество = нулевое множество = диаметр, U+2205 ISOamso --> <!ENTITY nabla CDATA "∇" -- набла = левая разность, U+2207 ISOtech --> <!ENTITY isin CDATA "∈" -- входит, U+2208 ISOtech --> <!ENTITY notin CDATA "∉" -- не входит, U+2209 ISOtech --> <!ENTITY ni CDATA "∋" -- содержит, U+220B ISOtech --> <!-- нужно ли другое, боле езапоминающееся название? --> <!ENTITY prod CDATA "∏" -- n-арное произведение = знак произведения, U+220F ISOamsb --> <!-- prod и U+03A0 'греческая заглавная буква pi' - НЕ одно и то же, хотя для их представления используется один и тот же знак --> <!ENTITY sum CDATA "∑" -- n-арное суммироание, U+2211 ISOamsb --> <!-- sum и U+03A3 'греческая заглавная буква sigma' - НЕ одно и то же, хотя для их представления используется один и тот же знак --> <!ENTITY minus CDATA "−" -- знак минус, U+2212 ISOtech --> <!ENTITY lowast CDATA "∗" -- оператор звездочка, U+2217 ISOtech --> <!ENTITY radic CDATA "√" -- квадратный корень = знак радикала, U+221A ISOtech --> <!ENTITY prop CDATA "∝" -- пропорционально, U+221D ISOtech --> <!ENTITY infin CDATA "∞" -- бесконечность, U+221E ISOtech --> <!ENTITY ang CDATA "∠" -- угол, U+2220 ISOamso --> <!ENTITY and CDATA "∧" -- логическое И, U+2227 ISOtech --> <!ENTITY or CDATA "∨" -- логическое ИЛИ, U+2228 ISOtech --> <!ENTITY cap CDATA "∩" -- пересечение, U+2229 ISOtech --> <!ENTITY cup CDATA "∪" -- объединение, U+222A ISOtech --> <!ENTITY int CDATA "∫" -- интеграл, U+222B ISOtech --> <!ENTITY there4 CDATA "∴" -- следовательно, U+2234 ISOtech --> <!ENTITY sim CDATA "∼" -- оператор тильда = приблизительно равно, U+223C ISOtech --> <!-- оператор тильда и тильда, U+007E, - это НЕ один и тот же символ, хлтя для их представления может использоваться один и тот же знак --> <!ENTITY cong CDATA "≅" -- приблизительно равно, U+2245 ISOtech --> <!ENTITY asymp CDATA "≈" -- почти равно = асимптотически равно, U+2248 ISOamsr --> <!ENTITY ne CDATA "≠" -- не равно, U+2260 ISOtech --> <!ENTITY equiv CDATA "≡" -- совпадает с, U+2261 ISOtech --> <!ENTITY le CDATA "≤" -- меньше или равно, U+2264 ISOtech --> <!ENTITY ge CDATA "≥" -- больше или равно, U+2265 ISOtech --> <!ENTITY sub CDATA "⊂" -- является подмножеством, U+2282 ISOtech --> <!ENTITY sup CDATA "⊃" -- является надмножеством, U+2283 ISOtech --> <!-- обратите внимание, что знак nsup, 'не является надмножеством, U+2283' не включен в шрифт Symbol и не включен сюда. Нужно ли это, для симметрии? Это ISOamsn --> <!ENTITY nsub CDATA "⊄" -- не является подмножеством, U+2284 ISOamsn --> <!ENTITY sube CDATA "⊆" -- является подмножеством или совпадает, U+2286 ISOtech --> <!ENTITY supe CDATA "⊇" -- является надмножеством или совпадает, U+2287 ISOtech --> <!ENTITY oplus CDATA "⊕" -- плюс в кружке = прямая сумма, U+2295 ISOamsb --> <!ENTITY otimes CDATA "⊗" -- оператор умножения в кружке = произведение векторов, U+2297 ISOamsb --> <!ENTITY perp CDATA "⊥" -- перпендикулярно, U+22A5 ISOtech --> <!ENTITY sdot CDATA "⋅" -- оператор точка, U+22C5 ISOamsb --> <!-- оператор точка и средняя точка, U+00B7, - НЕ одно и то же --> <!-- Прочие технические символы --> <!ENTITY lceil CDATA "⌈" -- левый верхний предел, U+2308 ISOamsc --> <!ENTITY rceil CDATA "⌉" -- правый верхний предел, U+2309 ISOamsc --> <!ENTITY lfloor CDATA "⌊" -- левый нижний предел, U+230A ISOamsc --> <!ENTITY rfloor CDATA "⌋" -- правй нижний предел, U+230B ISOamsc --> <!ENTITY lang CDATA "〈" -- левая угловая скобка, U+2329 ISOtech --> <!-- lang и U+003C 'меньше' или U+2039 'левая одинарная угловая кавычка' - это НЕ одни и те же символы --> <!ENTITY rang CDATA "〉" -- правая угловая скобка, U+232A ISOtech --> <!-- rang и символ U+003E 'больше' или U+203A 'правая одинарная угловая кавычка' - НЕ одно и то же --> <!-- Геометрические формы --> <!ENTITY loz CDATA "◊" -- ромб, U+25CA ISOpub --> <!-- Прочие символы --> <!ENTITY spades CDATA "♠" -- черные пики, U+2660 ISOpub --> <!-- 'черный' здесь означает 'заполненный, непустой' --> <!ENTITY clubs CDATA "♣" -- черные трефы, U+2663 ISOpub --> <!ENTITY hearts CDATA "♥" -- черные червы, U+2665 ISOpub --> <!ENTITY diams CDATA "♦" -- черные бубны, U+2666 ISOpub -->
В этом разделе перечислены ссылки на символы для обозначения значимых для разметки символов (те же, что и в HTML 2.0 и 3.2) для обозначения пробелов и тире. Другие символы в этом разделе относятся к вопросам интернационализации, таким как однозначность двунаправленного текста (см. раздел о двунаправленном тексте).
Кроме того, добавлены комбинации для других символов кодировки CP-1252, не входящих в наборы HTMLlat1 или HTMLsymbol. Все они находятся в диапазоне от 128 до 159 в наборе cp-1252. Эти объекты позволяют определять символы независимо от платформы.
Для поддержки этих объектов агенты пользователей могут поддерживать весь [ISO10646] или использовать другие средства. Отображение знаков для этих символов может достигаться за счет возможности отображения соответствующих символов [ISO10646] другими средствами, например, за счет внутреннего отображения перечисленных объектов, числовых ссылок на символы и символов в соответствующие позиуии в каком-либо шрифте, содержащем необходимые знаки.
<!-- Специальные символы для HTML --> <!-- Набор символов. Типичный вызов: <!ENTITY % HTMLspecial PUBLIC "-//W3C//ENTITIES Special//EN//HTML"> %HTMLspecial; --> <!-- Частичное © Международная организация по стандартизации 1986 Разрешение на копирование в любой форме дается для использования с соответствующими системами и приложениями SGML в соответствии со стандартом ISO 8879 при условии, что данное замечание включено во все копии. --> <!-- Если имена не являются новыми, дается соответствующий объект ISO. Новые имена (не входящие в список ISO 8879) не конфликтуют с существующими именами объектов ISO 8879. Номера ISO 10646 даются для каждого символа в шестнадцатеричном формате. Значения CDATA являются десятичным выражением значений ISO 10646 и относятся к набору символов документа. Имена являются именами Unicode 2.0. --> <!-- Управляющие элементы C0 и Basic Latin --> <!ENTITY quot CDATA """ -- кавычка, U+0022 ISOnum --> <!ENTITY amp CDATA "&" -- амперсанд, U+0026 ISOnum --> <!ENTITY lt CDATA "<" -- знак меньше, U+003C ISOnum --> <!ENTITY gt CDATA ">" -- знак больше, U+003E ISOnum --> <!-- Latin Extended-A --> <!ENTITY OElig CDATA "Œ" -- латинский заглавный символ OE, U+0152 ISOlat2 --> <!ENTITY oelig CDATA "œ" -- латинский строчный символ oe, U+0153 ISOlat2 --> <!-- в некоторых языка это отдельный символ --> <!ENTITY Scaron CDATA "Š" -- заглавная латинская буква S с кароном, U+0160 ISOlat2 --> <!ENTITY scaron CDATA "š" -- строчная латинская буква s с кароном, U+0161 ISOlat2 --> <!ENTITY Yuml CDATA "Ÿ" -- заглавная латинская буква Y с тремой, U+0178 ISOlat2 --> <!-- Символы изменения --> <!ENTITY circ CDATA "ˆ" -- ударение циркумфлекс, U+02C6 ISOpub --> <!ENTITY tilde CDATA "˜" -- малая тильда, U+02DC ISOdia --> <!-- Общая пунктуация --> <!ENTITY ensp CDATA " " -- en space, U+2002 ISOpub --> <!ENTITY emsp CDATA " " -- em space, U+2003 ISOpub --> <!ENTITY thinsp CDATA " " -- узкий пробел, U+2009 ISOpub --> <!ENTITY zwnj CDATA "‌" -- zero width non-joiner, U+200C NEW RFC 2070 --> <!ENTITY zwj CDATA "‍" -- zero width joiner, U+200D NEW RFC 2070 --> <!ENTITY lrm CDATA "‎" -- left-to-right mark, U+200E NEW RFC 2070 --> <!ENTITY rlm CDATA "‏" -- right-to-left mark, U+200F NEW RFC 2070 --> <!ENTITY ndash CDATA "–" -- en dash, U+2013 ISOpub --> <!ENTITY mdash CDATA "—" -- em dash, U+2014 ISOpub --> <!ENTITY lsquo CDATA "‘" -- левая одинарная кавычка, U+2018 ISOnum --> <!ENTITY rsquo CDATA "’" -- правая одинарная кавычка, U+2019 ISOnum --> <!ENTITY sbquo CDATA "‚" -- одинарная кавычка low-9, U+201A NEW --> <!ENTITY ldquo CDATA "“" -- левая двойная кавычка, U+201C ISOnum --> <!ENTITY rdquo CDATA "”" -- правая двойная кавычка, U+201D ISOnum --> <!ENTITY bdquo CDATA "„" -- двойная кавычка low-9, U+201E NEW --> <!ENTITY dagger CDATA "†" -- крестик, U+2020 ISOpub --> <!ENTITY Dagger CDATA "‡" -- двойной крестик, U+2021 ISOpub --> <!ENTITY permil CDATA "‰" -- знак на тысячу, U+2030 ISOtech --> <!ENTITY lsaquo CDATA "‹" -- одинарная левая угловая кавычка, U+2039 ISO proposed --> <!-- Символ lsaquo предложен, но еще не стандартизован ISO --> <!ENTITY rsaquo CDATA "›" -- одинарная правая угловая кавычка, U+203A ISO proposed --> <!-- Символ rsaquo предложен, но еще не стандартизован ISO --> <!ENTITY euro CDATA "€" -- знак евро, U+20AC NEW -->
В следующих разделах содержится формальное определение SGML языка HTML 4.0. Сюда входят объявление SGML, определение типа документа (Document Type Definition, DTD) и ссылки на комбинации символов, а также пример каталога SGML.
Эти файлы можно также получить в формате ASCII:
Многие авторы проверяют свои документы в ограниченном наборе браузеров, считая, что, если эти браузеры могут представить их документ, то документ является допустимым. К сожалению, это весьма неэффективное средство проверки документов, поскольку браузеры разработаны так, чтобы поддерживать и некорректные документы, представляя их настолько хорошо, насколько это возможно.
Для проверки корректности следует проверять документы с помощью грамматического анализатора SGML типа nsgmls (см. [SP]), чтобы убедиться в их соответствии HTML 4.0 DTD. Если объявление типа Вашего документа включает URI, а синтаксический анализатор SGML поддерживает такой тип системных идентификаторов, он получит DTD прямо. В противном случае Вы можете использовать примерный каталог SGML. Предполагается, что DTD сохранено в виде файла "strict.dtd", а комбинации находятся в файлах "HTMLlat1.ent", "HTMLsymbol.ent" и "HTMLspecial.ent". В любом случае убедитесь, что синтаксический анализатор SGML поддерживает Unicode. Подробнее см. в документации по утилите для проверки корректности.
Помните, что несмотря на то, что такая проверка полезна и настоятельно рекомендуется, она не гарантирует полного соответствия документа спецификации HTML 4.0. Причина заключается в том, что синтаксический анализатор SGML использует только данное DTD SGML, в котором не отражены все аспекты корректного документа HTML 4.0. В частности, синтаксический анализатор SGML гарантирует корректность синтаксиса, структуры, списка элементов и их атрибутов. Но он не может отследить, например, такие ошибки как установка недопустимого значения атрибута width элемента IMG (например, "foo" или "12.5"). Хотя в данной спецификации значение этого атрибута ограничивается только "целыми числами, представляющими длину в пикселах", в DTD оно определено только как тип CDATA, для которого допустимы любые значения. Проверить полностью соответствие HTML 4.0 может только специальная программа.
Тем не менее, такая проверка все равно настоятельно рекомендуется, поскольку она позволяет обнаружить большой спектр ошибок.
В этот каталог включаются заменяющие директивы, гарантирующие, что для обрабатывающего программного обеспечения, такого как nsgmls, общие идентификаторы будут иметь приоритет над системными. Это означает, что пользователи не обязательно должны быть подключены к Web при загрузке системных идентификаторов на базе URI.
OVERRIDE YES PUBLIC "-//W3C//DTD HTML 4.0//EN" strict.dtd PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" loose.dtd PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN" frameset.dtd PUBLIC "-//W3C//ENTITIES Latin1//EN//HTML" HTMLlat1.ent PUBLIC "-//W3C//ENTITIES Special//EN//HTML" HTMLspecial.ent PUBLIC "-//W3C//ENTITIES Symbols//EN//HTML" HTMLsymbol.ent
Условные обозначения: Необязательный, Запрещен, Пустой, Нежелательный, Loose DTD, Frameset DTD
Имя | Нач. тег | Кон. тег | Пуст | Нежелат. | DTD | Описание |
---|---|---|---|---|---|---|
A | якорь | |||||
ABBR | сокращенная форма (например, WWW, HTTP и т.д.) | |||||
ACRONYM | ||||||
ADDRESS | информация об авторе | |||||
APPLET | Н | L | апплет Java | |||
AREA | З | П | область клиентского изображения-карты | |||
B | полужирный текст | |||||
BASE | З | П | базовый URI документа | |||
BASEFONT | З | П | Н | L | базовый размер шрифта | |
BDO | I18N BiDi over-ride | |||||
BIG | большой текст | |||||
BLOCKQUOTE | цитата | |||||
BODY | Н | Н | тело документа | |||
BR | З | П | жесткий перевод строки | |||
BUTTON | кнопка | |||||
CAPTION | заголовок таблицы | |||||
CENTER | Н | L | сокращение для DIV align=center | |||
CITE | цитата | |||||
CODE | фрагмент компьютерного кода | |||||
COL | З | П | столбец таблицы | |||
COLGROUP | Н | группа столбцов таблицы | ||||
DD | Н | описание определения | ||||
DEL | удаленный текст | |||||
DFN | определение экземпляра | |||||
DIR | Н | L | список каталогов | |||
DIV | общий контейнер языка/стиля | |||||
DL | список определений | |||||
DT | Н | определяемый термин | ||||
EM | выделение | |||||
FIELDSET | группа управляющих элементов формы | |||||
FONT | Н | L | локальное изменение шрифта | |||
FORM | интерактивная форма | |||||
FRAME | З | П | F | вложенное окно | ||
FRAMESET | F | разделение окна | ||||
H1 | заголовок | |||||
H2 | заголовок | |||||
H3 | заголовок | |||||
H4 | заголовок | |||||
H5 | заголовок | |||||
H6 | заголовок | |||||
HEAD | Н | Н | заголовок документа | |||
HR | F | П | горизонтальный разделитель | |||
HTML | Н | Н | корневой элемент документа | |||
I | курсив | |||||
IFRAME | L | встроенное окно | ||||
IMG | З | П | внедренное изображение | |||
INPUT | З | П | управляющий элемент формы | |||
INS | вставленный текст | |||||
ISINDEX | З | П | Н | L | запрос из одной строки | |
KBD | текст, вводимый пользователем | |||||
LABEL | текст метки поля формы | |||||
LEGEND | описание набора полей | |||||
LI | Н | элемент списка | ||||
LINK | З | П | не зависящая от устройства ссылка | |||
MAP | клиентское изображение-карта | |||||
MENU | Н | L | список меню | |||
META | З | П | общая метаинформация | |||
NOFRAMES | F | альтернативный контейнер содержимого для представления без фреймов | ||||
NOSCRIPT | альтернативный контейнер содержимого для представления без скриптов | |||||
OBJECT | общий внедренный объект | |||||
OL | упорядоченный список | |||||
OPTGROUP | группа опций | |||||
OPTION | Н | выбираемый элемент | ||||
P | Н | абзац | ||||
PARAM | З | П | значение именованного свойства | |||
PRE | форматированный текст | |||||
Q | короткая встроенная цитата | |||||
S | Н | L | перечеркнутый текст | |||
SAMP | пример вывода программы, скрипта и т.д. | |||||
SCRIPT | выражения скрипта | |||||
SELECT | выбор варианта | |||||
SMALL | мелкий текст | |||||
SPAN | общий контейнер языка/стиля | |||||
STRIKE | З | L | перечеркнутый текст | |||
STRONG | усиленное выделение | |||||
STYLE | инфомрация о стиле | |||||
SUB | нижний индекс | |||||
SUP | верхний индекс | |||||
TABLE | ||||||
TBODY | Н | Н | тело таблицы | |||
TD | Н | ячейка данных таблицы | ||||
TEXTAREA | текстовое поле из нескольких строк | |||||
TFOOT | Н | сноска таблицы | ||||
TH | Н | заголовок ячейки таблицы | ||||
THEAD | Н | заголовок таблицы | ||||
TITLE | название документа | |||||
TR | Н | строка таблицы | ||||
TT | шрифт пишущей машинки (моноширинный) | |||||
U | Н | L | подчеркнутый текст | |||
UL | неупорядоченный список | |||||
VAR | экземпляр переменной или аргумента программы |
Условные обозначения: Нежелателен, Loose DTD, Frameset DTD
Имя | Элементы | Тип | По умолчанию | Нежелат. | DTD | Комментарий |
---|---|---|---|---|---|---|
abbr | TD, TH | %Text; | #IMPLIED | сокращение для ячейки заголовка | ||
accept-charset | FORM | %Charsets; | #IMPLIED | список поддерживаемых наборов символов | ||
accept | INPUT | %ContentTypes; | #IMPLIED | список типов MIME для выгрузки файлов | ||
accesskey | A, AREA, BUTTON, INPUT, LABEL, LEGEND, TEXTAREA | %Character; | #IMPLIED | клавиша доступа | ||
action | FORM | %URI; | #REQUIRED | серверный обработчик формы | ||
align | CAPTION | %CAlign; | #IMPLIED | Н | L | относится к таблицам |
align | APPLET, IFRAME, IMG, INPUT, OBJECT | %IAlign; | #IMPLIED | Н | L | вертикальное или горизонтальное выравнивание |
align | LEGEND | %LAlign; | #IMPLIED | Н | L | относится к набору полей |
align | TABLE | %TAlign; | #IMPLIED | Н | L | положение таблицы относительно окна |
align | HR | (left | center | right) | #IMPLIED | Н | L | |
align | DIV, H1, H2, H3, H4, H5, H6, P | (left | center | right | justify) | #IMPLIED | Н | L | выравнивание текста |
align | COL, COLGROUP, TBODY, TD, TFOOT, TH, THEAD, TR | (left | center | right | justify | char) | #IMPLIED | |||
alink | BODY | %Color; | #IMPLIED | Н | L | цвет выбранных ссылок |
alt | APPLET | %Text; | #IMPLIED | Н | L | краткое описание |
alt | AREA, IMG | %Text; | #REQUIRED | краткое описание | ||
alt | INPUT | CDATA | #IMPLIED | краткое описание | ||
archive | OBJECT | %URI; | #IMPLIED | разделенный пробелами список архивов | ||
archive | APPLET | CDATA | #IMPLIED | Н | L | разделенный запятыми список пробелов |
axis | TD, TH | CDATA | #IMPLIED | группы имен связанных заголовков | ||
background | BODY | %URI; | #IMPLIED | Н | L | текстура и фон документа |
bgcolor | TABLE | %Color; | #IMPLIED | Н | L | цвет фона для ячеек |
bgcolor | TR | %Color; | #IMPLIED | Н | L | цвет фона для строки |
bgcolor | TD, TH | %Color; | #IMPLIED | Н | L | цвет фона ячейки |
bgcolor | BODY | %Color; | #IMPLIED | Н | L | цвет фона документа |
border | IMG, OBJECT | %Length; | #IMPLIED | Н | L | толщина границы |
border | TABLE | %Pixels; | #IMPLIED | толщина кадра вокруг таблицы | ||
cellpadding | TABLE | %Length; | #IMPLIED | интервал между граничей ячейки и текстом в ней | ||
cellspacing | TABLE | %Length; | #IMPLIED | расстояние между ячейками | ||
char | COL, COLGROUP, TBODY, TD, TFOOT, TH, THEAD, TR | %Character; | #IMPLIED | символ выравнивания, например char=':' | ||
charoff | COL, COLGROUP, TBODY, TD, TFOOT, TH, THEAD, TR | %Length; | #IMPLIED | смещение для символа выравнивания | ||
charset | A, LINK, SCRIPT | %Charset; | #IMPLIED | кодировка символов связанного ресурса | ||
checked | INPUT | (checked) | #IMPLIED | для флажков и кнопок с зависимой фиксацией | ||
cite | BLOCKQUOTE, Q | %URI; | #IMPLIED | URI исходного документа или сообщения | ||
cite | DEL, INS | %URI; | #IMPLIED | причина изменения | ||
class | Все элементы, кроме BASE, BASEFONT, HEAD, HTML, META, PARAM, SCRIPT, STYLE, TITLE | CDATA | #IMPLIED | разделенный пробелами список классов | ||
classid | OBJECT | %URI; | #IMPLIED | идентифицирует реализацию | ||
clear | BR | (left | all | right | none) | none | Н | L | управление разбиением текста |
code | APPLET | CDATA | #IMPLIED | Н | L | файл класса апплета |
codebase | OBJECT | %URI; | #IMPLIED | базовый URI для classid, данных, архива | ||
codebase | APPLET | %URI; | #IMPLIED | Н | L | необязательный базовый URI для апплета |
codetype | OBJECT | %ContentType; | #IMPLIED | тип содержимого для кода | ||
color | BASEFONT, FONT | %Color; | #IMPLIED | Н | L | цвет текста |
cols | FRAMESET | %MultiLengths; | #IMPLIED | F | список длин, по умолчанию: 100% (1 столбец) | |
cols | TEXTAREA | NUMBER | #REQUIRED | |||
colspan | TD, TH | NUMBER | 1 | число столбцов, объединяемых в ячейке | ||
compact | DIR, MENU | (compact) | #IMPLIED | Н | L | |
compact | DL, OL, UL | (compact) | #IMPLIED | Н | L | уменьшение расстояния между элементами |
content | META | CDATA | #REQUIRED | связанная информация | ||
coords | AREA | %Coords; | #IMPLIED | разделенный запятыми список длин | ||
coords | A | %Coords; | #IMPLIED | для использования с клиентскими изображениями-картами | ||
data | OBJECT | %URI; | #IMPLIED | ссылка на данные объекта | ||
datetime | DEL, INS | %Datetime; | #IMPLIED | дата и время изенения | ||
declare | OBJECT | (declare) | #IMPLIED | объявить, но не инициализировать флаг | ||
defer | SCRIPT | (defer) | #IMPLIED | агент пользователя может отложить выполнение скрипта | ||
dir | Все элементы, кроме APPLET, BASE, BASEFONT, BDO, BR, FRAME, FRAMESET, HR, IFRAME, PARAM, SCRIPT | (ltr | rtl) | #IMPLIED | направление слабого/нейтрального текста | ||
dir | BDO | (ltr | rtl) | #REQUIRED | направление | ||
disabled | BUTTON, INPUT, OPTGROUP, OPTION, SELECT, TEXTAREA | (disabled) | #IMPLIED | в данном контексте недоступно | ||
enctype | FORM | %ContentType; | "application/x-www- form-urlencoded" | |||
face | BASEFONT, FONT | CDATA | #IMPLIED | Н | L | разделенный запятыми список названий шрифтов |
for | LABEL | IDREF | #IMPLIED | совпадает со значением ИД поля | ||
frame | TABLE | %TFrame; | #IMPLIED | какие части фрейма следует генерировать | ||
frameborder | FRAME, IFRAME | (1 | 0) | 1 | F | запросить границы фрейма? | |
headers | TD, TH | IDREFS | #IMPLIED | список ИД ячеек заголовков | ||
height | IFRAME | %Length; | #IMPLIED | L | высота фрейма | |
height | IMG, OBJECT | %Length; | #IMPLIED | переопределение высоты | ||
height | APPLET | %Length; | #REQUIRED | Н | L | начальная высота |
height | TD, TH | %Pixels; | #IMPLIED | Н | L | высота ячейки |
href | A, AREA, LINK | %URI; | #IMPLIED | URI ресурса, на который указывает ссылка | ||
href | BASE | %URI; | #IMPLIED | Н | L | URI, служащий базовым |
hreflang | A, LINK | %LanguageCode; | #IMPLIED | код языка | ||
hspace | APPLET, IMG, OBJECT | %Pixels; | #IMPLIED | Н | L | горизонтальный gutter |
http-equiv | META | NAME | #IMPLIED | имя заголовка ответа HTTP | ||
id | Все элементы, кроме BASE, HEAD, HTML, META, SCRIPT, STYLE, TITLE | ID | #IMPLIED | уникальный ИД в переделах документа | ||
ismap | IMG | (ismap) | #IMPLIED | использовать серверное изображение-карту | ||
label | OPTION | %Text; | #IMPLIED | для исопльзования в иерархических меню | ||
label | OPTGROUP | %Text; | #REQUIRED | для использования в иерархических меню | ||
lang | Все элементы, кроме APPLET, BASE, BASEFONT, BR, FRAME, FRAMESET, HR, IFRAME, PARAM, SCRIPT | %LanguageCode; | #IMPLIED | код языка | ||
language | SCRIPT | CDATA | #IMPLIED | имя предпочитаемого языка скрипта | ||
link | BODY | %Color; | #IMPLIED | Н | L | цвет ссылок |
longdesc | IMG | %URI; | #IMPLIED | ссылка на длинное описание (дополняет alt) | ||
longdesc | FRAME, IFRAME | %URI; | #IMPLIED | F | ссылка на длинное поисание (дополняет title) | |
marginheight | FRAME, IFRAME | %Pixels; | #IMPLIED | F | высота поля в пикселах | |
marginwidth | FRAME, IFRAME | %Pixels; | #IMPLIED | F | ширина полей в пикселах | |
maxlength | INPUT | NUMBER | #IMPLIED | максимальное число символов в текстовом поле | ||
media | STYLE | %MediaDesc; | #IMPLIED | для использования с этими устройствами | ||
media | LINK | %MediaDesc; | #IMPLIED | для представления на этих устройствах | ||
method | FORM | (GET | POST) | GET | метод HTTP, используемой для передачи формы | ||
multiple | SELECT | (multiple) | #IMPLIED | по умолчанию используется одно выделение | ||
name | BUTTON, TEXTAREA | CDATA | #IMPLIED | |||
name | APPLET | CDATA | #IMPLIED | Н | L | позволяет апплетам находить друг друга |
name | SELECT | CDATA | #IMPLIED | имя поля | ||
name | FRAME, IFRAME | CDATA | #IMPLIED | F | имя целевого фрейма | |
name | A | CDATA | #IMPLIED | конец именованной ссылки | ||
name | INPUT, OBJECT | CDATA | #IMPLIED | передать как часть формы | ||
name | MAP | CDATA | #REQUIRED | для ссылки в usemap | ||
name | PARAM | CDATA | #REQUIRED | имя свойства | ||
name | META | NAME | #IMPLIED | имя метаинформации | ||
nohref | AREA | (nohref) | #IMPLIED | для этой области действие не назначено | ||
noresize | FRAME | (noresize) | #IMPLIED | F | позволить пользователям изменять размеры фреймов? | |
noshade | HR | (noshade) | #IMPLIED | Н | L | |
nowrap | TD, TH | (nowrap) | #IMPLIED | Н | L | отключить перенос слов |
object | APPLET | CDATA | #IMPLIED | Н | L | серийный файл апплета |
onblur | A, AREA, BUTTON, INPUT, LABEL, SELECT, TEXTAREA | %Script; | #IMPLIED | фокус перешел на другой элемент | ||
onchange | INPUT, SELECT, TEXTAREA | %Script; | #IMPLIED | значение элемента изменилось | ||
onclick | Все элементы, кроме APPLET, BASE, BASEFONT, BDO, BR, FONT, FRAME, FRAMESET, HEAD, HTML, IFRAME, ISINDEX, META, PARAM, SCRIPT, STYLE, TITLE | %Script; | #IMPLIED | нажата кнопка указующего устройства | ||
ondblclick | Все элементы, кроме APPLET, BASE, BASEFONT, BDO, BR, FONT, FRAME, FRAMESET, HEAD, HTML, IFRAME, ISINDEX, META, PARAM, SCRIPT, STYLE, TITLE | %Script; | #IMPLIED | кнопка указующего устройства нажата дважды | ||
onfocus | A, AREA, BUTTON, INPUT, LABEL, SELECT, TEXTAREA | %Script; | #IMPLIED | фокус переведен на элемент | ||
onkeydown | Все элементы, кроме APPLET, BASE, BASEFONT, BDO, BR, FONT, FRAME, FRAMESET, HEAD, HTML, IFRAME, ISINDEX, META, PARAM, SCRIPT, STYLE, TITLE | %Script; | #IMPLIED | нажата клавиша на клавиатуре | ||
onkeypress | Все элементы, кроме APPLET, BASE, BASEFONT, BDO, BR, FONT, FRAME, FRAMESET, HEAD, HTML, IFRAME, ISINDEX, META, PARAM, SCRIPT, STYLE, TITLE | %Script; | #IMPLIED | клавиша нажата и отпущена | ||
onkeyup | Все элементы, кроме APPLET, BASE, BASEFONT, BDO, BR, FONT, FRAME, FRAMESET, HEAD, HTML, IFRAME, ISINDEX, META, PARAM, SCRIPT, STYLE, TITLE | %Script; | #IMPLIED | клавиша отпущена | ||
onload | FRAMESET | %Script; | #IMPLIED | F | все фреймы загружены | |
onload | BODY | %Script; | #IMPLIED | документ загружен | ||
onmousedown | Все элементы, кроме APPLET, BASE, BASEFONT, BDO, BR, FONT, FRAME, FRAMESET, HEAD, HTML, IFRAME, ISINDEX, META, PARAM, SCRIPT, STYLE, TITLE | %Script; | #IMPLIED | нажата кнопка указательного устройства | ||
onmousemove | Все элементы, кроме APPLET, BASE, BASEFONT, BDO, BR, FONT, FRAME, FRAMESET, HEAD, HTML, IFRAME, ISINDEX, META, PARAM, SCRIPT, STYLE, TITLE | %Script; | #IMPLIED | указатель перемещен в пределах | ||
onmouseout | Все элементы, кроме APPLET, BASE, BASEFONT, BDO, BR, FONT, FRAME, FRAMESET, HEAD, HTML, IFRAME, ISINDEX, META, PARAM, SCRIPT, STYLE, TITLE | %Script; | #IMPLIED | указатель перемещен за пределы | ||
onmouseover | Все элементы, кроме APPLET, BASE, BASEFONT, BDO, BR, FONT, FRAME, FRAMESET, HEAD, HTML, IFRAME, ISINDEX, META, PARAM, SCRIPT, STYLE, TITLE | %Script; | #IMPLIED | указатель помещен на | ||
onmouseup | Все элементы, кроме APPLET, BASE, BASEFONT, BDO, BR, FONT, FRAME, FRAMESET, HEAD, HTML, IFRAME, ISINDEX, META, PARAM, SCRIPT, STYLE, TITLE | %Script; | #IMPLIED | кнопка указательного устройства отпущена | ||
onreset | FORM | %Script; | #IMPLIED | форма сброшена | ||
onselect | INPUT, TEXTAREA | %Script; | #IMPLIED | выделен некоторый текст | ||
onsubmit | FORM | %Script; | #IMPLIED | форма отправлена | ||
onunload | FRAMESET | %Script; | #IMPLIED | F | все фреймы удалены | |
onunload | BODY | %Script; | #IMPLIED | документ удален | ||
profile | HEAD | %URI; | #IMPLIED | именованный словарь или метаинформация | ||
prompt | ISINDEX | %Text; | #IMPLIED | Н | L | текст запроса |
readonly | TEXTAREA | (readonly) | #IMPLIED | |||
readonly | INPUT | (readonly) | #IMPLIED | для текста и паролей | ||
rel | A, LINK | %LinkTypes; | #IMPLIED | ссылки типа вперед | ||
rev | A, LINK | %LinkTypes; | #IMPLIED | ссылки типа назад | ||
rows | FRAMESET | %MultiLengths; | #IMPLIED | F | список длин, по умолчанию: 100% (1 строка) | |
rows | TEXTAREA | NUMBER | #REQUIRED | |||
rowspan | TD, TH | NUMBER | 1 | число строк, объединяемых ячейкой | ||
rules | TABLE | %TRules; | #IMPLIED | границы между строками и столбцами | ||
scheme | META | CDATA | #IMPLIED | выбор формы содержимого | ||
scope | TD, TH | %Scope; | #IMPLIED | область действия ячеек заголовка | ||
scrolling | FRAME, IFRAME | (yes | no | auto) | auto | F | полоса прокрутки или ее отсутствие | |
selected | OPTION | (selected) | #IMPLIED | |||
shape | AREA | %Shape; | rect | управляет интерпретацией координат | ||
shape | A | %Shape; | rect | для использования с клиентскими изображениями-картами | ||
size | HR | %Pixels; | #IMPLIED | Н | L | |
size | FONT | CDATA | #IMPLIED | Н | L | [+|-]nn, например, size="+1", size="4" |
size | INPUT | CDATA | #IMPLIED | зависит от типа поля | ||
size | BASEFONT | CDATA | #REQUIRED | Н | L | базовый размер шрифта для элементов FONT |
size | SELECT | NUMBER | #IMPLIED | видимые строки | ||
span | COL | NUMBER | 1 | атрибуты COL, влияющие на N столбцов | ||
span | COLGROUP | NUMBER | 1 | число столбцов в группе, используемое по умолчанию | ||
src | SCRIPT | %URI; | #IMPLIED | URI внешнего скрипта | ||
src | INPUT | %URI; | #IMPLIED | для полей с изображениями | ||
src | FRAME, IFRAME | %URI; | #IMPLIED | F | исходный файл содержимого фрейма | |
src | IMG | %URI; | #REQUIRED | URI внедряемого изображения | ||
standby | OBJECT | %Text; | #IMPLIED | сообщение, которое отображается во время загрузки | ||
start | OL | NUMBER | #IMPLIED | Н | L | начальный номер последовательности |
style | Все элементы, кроме BASE, BASEFONT, HEAD, HTML, META, PARAM, SCRIPT, STYLE, TITLE | %StyleSheet; | #IMPLIED | связанная инфомрация о стиле | ||
summary | TABLE | %Text; | #IMPLIED | назначение/структура для речевого вывода | ||
tabindex | A, AREA, BUTTON, INPUT, OBJECT, SELECT, TEXTAREA | NUMBER | #IMPLIED | позиция в последовательности перехода | ||
target | A, AREA, BASE, FORM, LINK | %FrameTarget; | #IMPLIED | Н | L | представление в этом фрейме |
text | BODY | %Color; | #IMPLIED | Н | L | цвет текста документа |
title | STYLE | %Text; | #IMPLIED | рекомендуемый заголовок | ||
title | Все элементы, кроме BASE, BASEFONT, HEAD, HTML, META, PARAM, SCRIPT, STYLE, TITLE | %Text; | #IMPLIED | рекомендуемый заголовок/усиление | ||
type | A, LINK | %ContentType; | #IMPLIED | рекомендуемый тип содержимого | ||
type | OBJECT | %ContentType; | #IMPLIED | тип содержимого для данных | ||
type | PARAM | %ContentType; | #IMPLIED | тип содержимого для значения при valuetype=ref | ||
type | SCRIPT | %ContentType; | #REQUIRED | тип содержимого языка скрипта | ||
type | STYLE | %ContentType; | #REQUIRED | тип содержимого языка стилей | ||
type | INPUT | %InputType; | TEXT | тип ввода | ||
type | LI | %LIStyle; | #IMPLIED | Н | L | стиль элемента списка |
type | OL | %OLStyle; | #IMPLIED | Н | L | стиль нумерации |
type | UL | %ULStyle; | #IMPLIED | Н | L | стиль маркера |
type | BUTTON | (button | submit | reset) | submit | кнопка формы | ||
usemap | IMG, INPUT, OBJECT | %URI; | #IMPLIED | использовать клиентское изображение-карту | ||
valign | COL, COLGROUP, TBODY, TD, TFOOT, TH, THEAD, TR | (top | middle | bottom | baseline) | #IMPLIED | вертикальное выравнивание в ячейках | ||
value | OPTION | CDATA | #IMPLIED | по умолчанию содержимое элемента | ||
value | PARAM | CDATA | #IMPLIED | значение свойства | ||
value | INPUT | CDATA | #IMPLIED | для флажков и кнопок с зависимой фиксацией | ||
value | BUTTON | CDATA | #IMPLIED | отправляется на сервер при отправке | ||
value | LI | NUMBER | #IMPLIED | Н | L | сброс номера последовательности |
valuetype | PARAM | (DATA | REF | OBJECT) | DATA | как интерпретировать значение | ||
version | HTML | CDATA | %HTML.Version; | Н | L | постоянная |
vlink | BODY | %Color; | #IMPLIED | Н | L | цвет просмотренных ссылок |
vspace | APPLET, IMG, OBJECT | %Pixels; | #IMPLIED | Н | L | вертикальный gutter |
width | HR | %Length; | #IMPLIED | Н | L | |
width | IFRAME | %Length; | #IMPLIED | L | ширина фрейма | |
width | IMG, OBJECT | %Length; | #IMPLIED | переопределение ширины | ||
width | TABLE | %Length; | #IMPLIED | ширина таблицы | ||
width | APPLET | %Length; | #REQUIRED | Н | L | начальная ширина |
width | COL | %MultiLength; | #IMPLIED | задание ширины столбца | ||
width | COLGROUP | %MultiLength; | #IMPLIED | ширина по умолчанию для вложенных COL | ||
width | TD, TH | %Pixels; | #IMPLIED | Н | L | ширина ячейки |
width | PRE | NUMBER | #IMPLIED | Н | L |
Содержание
World Wide Web (Web) - это сеть информационных ресурсов. Для того, чтобы сделать эти ресурсы доступными наиболее широкой аудитории, в Web используются три механизма:
Связи между этими тремя механизмами становятся очевидными по прочтении этой спецификации.
Каждый ресурс в Web - документ HTML, изображение, видеоклип, программа и т.д. - имеет адрес, который может быть закодирован с помощью универсального идентификатора ресурсов (Universal Resource Identifier), или URI.
URI обычно состоят из трех частей:
Рассмотрите URI этой спецификации HTML на сервере W3C:
http://www.w3.org/TR/PR-html4/cover.html
Этот URI может читаться следующим образом: этот документ можно получить по протоколу HTTP (см. [RFC2068]), он располагается на машине www.w3.org, путь к этому документу - "/TR/PR-html4/cover.html". Кроме того, в документах в формате HTML Вы можете увидеть схемы "mailto" для электронной почты и "ftp" для протокола FTP.
Вот еще один пример URI. Он относится к почтовому ящику пользователя:
...текст... Комментарии отправляйте <A href="mailto:joe@someplace.com">Джо Кулу</A>.
Примечание. Большинство читателей уже знакомо с термином "URL", но не знает термина "URI". URL образуют подмножество более общей схемы наименования URI.
Некоторые URI указывают на местоположение внутри ресурса. Этот тип URI заканчивается символом "#", за которым следует указатель (идентификатор фрагмента). Например, следующий URI указывает на фрагмент с именем section_2:
http://somesite.com/html/top.html#section_2
Относительный URI не содержит информации о схеме наименования. Путь в нем указывает на ресурс на машине, на которой находится текущий документ. Относительные URI могут содержать компоненты относительного пути (например, ".." означает один уровень выше в иерархии) и идентификаторы фрагментов.
Относительные URI приводятся к полным URI с помощью базового URI. В качестве примера приведения относительного URI предположим, что у нас имеется базовый URI "http://www.acme.com/support/intro.html". Относительный URI в следующей ссылке:
<A href="suppliers.html">Suppliers</A>
будет преобразован в полный URI "http://www.acme.com/support/suppliers.html", а относительный URI в следующем фрагменте
<IMG src="../icons/logo.gif" alt="logo">
будет преобразован в полный URI "http://www.acme.com/icons/logo.gif".
В HTML URI используются для:
Подробнее об URI см. в разделе о типах URI.
Чтобы представить информацию для глобального использования, нужен универсальный язык, который понимали бы все компьютеры. Языком публикации, используемым в World Wide Web, является HTML (HyperText Markup Language - язык разметки гипертекстов).
HTML дает авторам средства для:
Язык HTML был разработан Тимом Бернерс-Ли во время его работы в CERN и распространен браузером Mosaic, разработанным в NCSA. В 1990-х годах он добился особенных успехов благодаря быстрому росту Web. В это время HTML был расширен и дополнен. В Web очень важно использование одних и тех же соглашений HTML авторами Web-страниц и производителями. Это явилось причиной совместной работы над спецификациями языка HTML.
HTML 2.0 (ноябрь 1995, см. [RFC1866]) был разработан под эгидой Internet Engineering Task Force (IETF) для упорядочения общепринятых положений в конце 1994 года. HTML+ (1993) и HTML 3.0 (1995, см. [HTML30]) - это более богатые версии языка HTML. Несмотря на то, что в обычных дискуссиях согласие никогда не было достигнуто, эти черновики привели к принятию ряда новых свойств. Усилия Рабочей группы World Wide Web Consortium по HTML в упорядочении общепринятых положений в 1996 привели к версии HTML 3.2 (январь 1997, см. [HTML32]). Изменения по отношению к HTML 3.2 перечислены в Приложении А
Большинство людей признают, что документы HTML должны работать в различных браузерах и на разных платформах. Достижение совместимости снижает расходы авторов, поскольку они могут разрабатывать только одну версию документа. В противном случае возникает еще больший риск, что Web будет представлять собой смесь личных несовместимых форматов, что в конечном счете приведет к снижению коммерческого потенциала Web для всех участников.
В каждой версии HTML предпринималась попытка отразить все большее число соглашений между работниками и пользователями этой индустрии, чтобы усилия авторов не были потрачены впустую, а их документы не стали бы нечитаемыми в короткий срок.
Язык HTML разрабатывался с той точки зрения, что все типы устройств должны иметь возможность использовать информацию в Web: персональные компьютеры с графическими дисплеями с различным разрешением и числом цветов, сотовые телефоны, переносные устройства, устройства для вывода и ввода речи, компьютеры с высокой и низкой частотой и т.д.
В HTML 4.0 вводятся механизмы таблиц стилей, скриптов, кадров, внедрения объектов, улучшенная поддержка разных направлений письма и направления справа налево, таблицы с большим количеством возможностей и новые свойства форм, обеспечивая лучшие возможности доступа для людей с физическими недостатками.
Эта версия HTML разработана с помощью экспертов в области интернационализации, так что документы можно писать на любом языке и легко передавать их по всему миру. Это достигается за счет использования [RFC2070], относящегося к интернационализации HTML.
Важным шагом стало принятие стандарта ISO/IEC:10646 (см. [ISO10646]) в качестве набора символов для документов HTML. Это наиболее содержательный стандарт в мире, в котором решены вопросы представления национальных символов, направления письма, пунктуации и других языковых вопросов.
HTML теперь предоставляет лучшую поддержку различных языков в одном документе. Это обеспечивает более эффективное индексирование документов для поисковых машин, типографию высшего качества, преобразование текста в речь, более удобные переносы и т.д.
Поскольку сообщество Web растет, и возможности и умения его членов различаются, очень важно, чтобы основные технологии соответствовали потребностям. Язык HTML разработан так, чтобы сделать Web-страницы более доступными для пользователей с физическими недостатками. В HTML 4.0 имеются следующие дополнения, продиктованные соображениями доступности:
Авторы, разрабатывающие страницы с учетом доступности, получат не только эту возможность, но также и некоторые другие: хорошо разработанные документы HTML с разделенными структурой и представлением будут легче адаптироваться к новым технологиям.
Примечание. Подробнее о разработке доступных документов HTML Вы можете прочесть в [WAIGUIDE].
Новая модель таблиц в HTML основана на [RFC1942]. Теперь авторы имеют большую власть над структурой и компоновкой таблицы (например, группы столбцов). Возможность дизайнеров рекомендовать ширину столбцов позволяет агентам пользователей отображать данные таблицы постепенно (по мере получения) и не ждать всю таблицу до создания изображения.
Примечание. Во время написания этого документа некоторые средства разработки документов в формате HTML широко использовали для форматирования страниц таблицы, что вызывало проблемы совместимости.
В HTML теперь имеется стандартный механизм для внедрения объектов и приложений в документы HTML. Элемент OBJECT (а также более специфичные элементы, его преемники, IMG и APPLET) обеспечивает механизм включения в документ изображений, видеофайлов, звуковых файлов, математических выражений, специализированных приложений и других объектов. Он также позволяет авторам указывать иерархию или альтернативный способ создания изображения для агентов пользователей, не поддерживающих указанный способ создания изображения.
Таблицы стилей упрощают разметку HTML и существенно снижают участие языка HTML в представлении документа. Они предоставляют как авторам, так и пользователям возможность управлять представлением документов - шрифтами, выравниванием, цветами и т.д.
Информацию о стиле можно указать для отдельных элементов или групп элементов, в документе HTML или во внешних таблицах стилей.
Механизмы связи таблиц стилей с документами не зависят от языка таблиц стилей.
До появления таблиц стилей возможности управления созданием изображения у авторов были ограничены. В HTML 3.2 был включен ряд атрибутов и элементов для управления выравниванием, размером шрифта и цветом текста. Авторы также использовали для компоновки страниц таблицы и изображения. Поскольку на обновление браузеров у пользователей уйдет довольно долгое время, эти средства еще будут использоваться в течение какого-то времени. Однако поскольку таблицы стилей обеспечивают более мощные механизмы представления, World Wide Web Consortium существенно сократит число элементов и атрибутов представления в HTML. В этой спецификации элементы и атрибуты, которые могут быть впоследствии исключены, помечены как "нежелательные". Они сопровождаются примерами полдостижения того же эффекта с помощью других элементов или таблиц стилей.
С помощью скриптов авторы могут создавать динамичные Web-страницы (например, "интеллектуальные формы", изменяющиеся по мере заполнения их пользователем) и использовать HTML как средство построения сетевых приложений.
Механизмы, обеспечивающие включение скриптов в документы HTML, не зависят от языка скриптов.
Иногда авторы хотят упростить для пользователей печать текущего документа. Если документ является частью другого документа, отношения между ними можно описать с помощью элемента HTML LINK или языка описания ресурсов (Resource Description Language - RDF) W3C (см. [RDF]).
Авторам и разработчикам для работы с HTML 4.0 рекомендуется ознакомиться со следующими общими принципами.
HTML происходит из SGML, который всегда был языком определения структурной разметки. По мере развития HTML все большее количество его элементов и атрибутов для представления заменяется другими механизмами, в частности, таблицами стилей. Опыт показывает, что отделение структуры документа от аспектов его представления снижает стоимость обслуживания широкого диапазона платформ, носителей и т.д. и упрощает изменение документов.
Чтобы сделать свой Web-сервер доступным для всех пользователей, особенно для пользователей с физическими недостатками, авторы должны предполагать, как их документы могут отображаться на различных платформах: речевых браузерах, программах чтения азбуки Бройля и т.д. Мы не рекомендуем авторам ограничивать творческий процесс, но рекомендуем предусматривать альтернативные методы подачи информации. HTML предлагает ряд таких механизмов (например, атрибут alt, атрибут accesskey и т.д.)
Авторам также следует иметь в виду, что к их документам могут обращаться пользователи с другой конфигурацией компьютеров. Для корректной интерпретации документов авторам следует включать в свои документы информацию о языке и направлении письма в тексте, о кодировке документа и прочую подобную информацию.
При тщательной разработке таблиц и использовании новых возможностей HTML 4.0 авторы могут ускорить отображение документов агентами пользователей. Авторы могут прочесть здесь о том, как создавать таблицы для последовательного представления (см. элемент TABLE). Разработчики могут получить информацию об алгоритмах последовательного представления в замечаниях о таблицах в приложении.
Содержание
В этом разделе документа Вы познакомитесь с SGML и узнаете о его отношении к HTML. Полное описание SGML не входит в этот стандарт (см. [ISO8879]).
SGML - это система определения языков разметки. Авторы размечают свои документы, представляя информацию о структуре, представлении и семантике в одном документе. HTML является одним из примеров языка разметки. Вот пример документа на языке HTML:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <HTML> <HEAD> <TITLE>My first HTML document</TITLE> </HEAD> <BODY> <P>Hello world! </BODY> </HTML>
Документ HTML состоит из раздела заголовка (здесь - между тэгами <HEAD> и </HEAD>) и тела (здесь - между заголовками <BODY> и </BODY>). Заголовок документа отображается в заголовке (вместе с другой информацией о документе), а содержимое документа находится в теле. В этом примере тело документа состоит только из одного абзаца, помеченного <P>.
Каждый язык разметки, определенный в SGML, называется приложением SGML. Приложение SGML характеризуется:
Спецификация HTML 4.0 включает объявление SGML , три определения типа документов (описание их см. в разделе информация о версии HTML ) и список character references.
В следующих разделах Вы познакомитесь с конструкциями SGML, используемыми в HTML.
В приложении перечислены некоторые функции SGML, которые не поддерживаются средствами HTML и агентами пользователей, и использования которых следует избегать.
Определение типа документа SGML объявляет типы элементов, представляющие структуры или желательное поведение. HTML включает типы элементов, представляющие абзацы, гипертекстовые ссылки, списки, таблицы, изображения и т.д.
Каждое объявление типа элемента обычно включает три части: начальный тэг, содержимое и конечный тэг.
Имя элемента отображается в начальном тэге (пишется <имя-элемента>) и в конечном тэге (пишется </имя-элемента>); не забывайте про слеш перед именем элемента в конечном тэге. Например, начальные и конечные тэги элемента UL определяют список:
<UL> <LI><P>...элемент списка 1... <LI><P>...элемент списка 2... </UL>
Некоторые типы элементов HTML позволяют авторам опускать конечные тэги (например, типы элементов P and LI). Несколько типов элементов также позволяют опускать начальные тэги; например, HEAD и BODY. HTML DTD указывает для каждого типа элемента, являются ли начальный и конечный тэги обязательными.
Некоторые типы элементов HTML не имеют содержимого. Например, элемент перехода на следующую строку BR не имеет содержимого; его роль - прерывание строки текста. Такие пустые элементы никогда не имеют конечных тэгов. Определение типа документа и текст спецификации указывают, является ли тип элемента пустым (не имеет содержимого) или, если он может иметь содержимое, что является допустимым содержимым.
Имена элементов всегда учитывают регистр.
Информацию о правилах, управляющих элементами, (например, что они могут быть вложенными соответствующим образом, конечный тэг закрывает все опущенные начальные тэги вплоть до соответсвующего ему начального тэга (раздел 7.5.1) и т.д.) см. в стандарте SGML.
Например, следующий абзац:
<P>Это первый абзац.</P> ...элемент блока...
можно перезаписать без конечного тэга:
<P>Это первый абзац. ...элемент блока...
поскольку начальный тэг <P> закрывается следующим элементом блока. Точно так же, если абзац включен в элемент блока, например:
<DIV> <P>Это абзац. </DIV>
конечный тэг включающего элемента блока (здесь - </DIV>) служит также конечным тэгом открытого начального тэга <P>.
Элементы - это не тэги. Некоторые люди называют элементы тэгами (например, "тэг P "). Помните, что элемент - это одно, а тэг (начала или конца, неважно) - другое. Например, элемент HEAD всегда присутствует, даже если начальный и конечный тэги HEAD отсутствуют.
Все типы элементов, объявленные в этой спецификации, перечислены в указателе элементов.
С элементами могут быть связаны свойства, называемые атрибутами, которые могут иметь значения (стандартные или устанавливаемые авторами или сценариями). Пары атрибут/значение помещаются перед закрывающей скобкой ">" начального тэга элемента. В начальном тэге элемента может быть любое число (допустимых) пар атрибут/значение, разделенных пробелами. Они могут указываться в любом порядке.
В данном примере для элемента H1 установлен атрибут id:
<H1 id="section1"> Это определенный заголовок, спасибо атрибуту id </H1>
По умолчанию в SGML необходимо, чтобы все значения атрибутов были разделены с помощью двойных (десятичный код ASCII 34) или одинарных кавычек (десятичный код ASCII 39). Одинарные кавычки могут включаться в значение атрибута, если значение отделяется двойными кавычками, и наоборот. Авторы могут также использовать цифровые ссылки на символы для представления двойных (") и одинарных кавычек ('). Для двойных кавычек авторы могут также использовать character entity reference ".
В определенных случаях авторы могут указывать значение атрибута без кавычек. Значение атрибута может включать только буквы (a-z и A-Z), цифры (0-9), знаки переноса (десятичный код ASCII 45) и точки (десятичный код ASCII 46). Рекомендуется всегда использовать кавычки.
Имена атрибутов всегда учитывают регистр
Значения атрибутов обычно учитывают регистр. Определение кажого атрибута в списке атрибутов указывается, учитывает ли значение регистр.
Список всех атрибутов, определенных в этой спецификации, приводится в указателе атрибутов.
Ссылки на символы - это числовые или символьные имена символов, которые могут быть включены в документ HTML. Они удобны для обращения к редко используемым символам или к символам, которые трудно или невозможно вводить в средствах разработки документов. Вы увидите ссылки на символы в этом документе; они начинаются со знака "&" и заканчиваются точкой с запятой (;). Вот некоторые примеры:
Ссылки на символы в HTML подробно обсуждаются дальше в этом разделе под заголовком набор символов документа HTML. В спецификации также содержится список ссылок на символы, которые могут использоваться в документах в формате HTML 4.0.
Комментарии в HTML имеют следующий синтаксис:
<!-- это комментарий --> <!-- это тоже комментарий, он занимает несколько строк -->
Проблемы между открывающим разделителем разметки ("<!") и открывающим разделителем комментария ("--") недопустимы, но их можно использовать между закрывающим разделителем комментария ("--") и закрывающим разделителем разметки (">"). Распространенной ошибкой является включение строки символов переноса ("---") в комментарий. Следует избегать использования в комментариях двух или более символов переноса.
Информация в комментариях не имеет специального значения (например, ссылки на символы не интерпретируются).
Каждое объявление элемента и атрибута в этой спецификации сопровождается фрагментом его определения типа документа. Мы решили включить фрагменты DTD в спецификацию вместо того, чтобы искать более доступные, но более длинные и менее точные средства описания свойств элементов. При помощи следующего учебника читатели, не знакомые с SGML, смогут научиться читать DTD и понимать технические подробности спецификации HTML.
В DTD комментарии могут занимать несколько строк. В DTD комментарии отделяются парой меток "--", например,
<!ELEMENT PARAM - O EMPTY -- значение именованного свойства -->
HTML DTD начинается с ряда определений parameter entity. Определение parameter entity определяет макрос, на который можно ссылаться в любом месте DTD. Эти макросы не отображаются в документах HTML, они отображаются только в DTD. Другие типы макросов, называемые ссылками на символы, могут использоваться в тексте документа в формате HTML или в значениях атрибутов.
Когда на parameter entity ссылаются в DTD по имени, он разворачивается в строку.
Определение parameter entity начинается с ключевого слова <!ENTITY %, за которым следует имя entity, строка в кавычках, в которую разворачивается entity и наконец закрывающий >. Экземпляры parameter entities в DTD начинаются со знака "%", затем идет имя parameter entity и заканчивается необязательным символом ";".
В следующем примере определяется, в какую строку бедет разворачиваться "%fontstyle;".
<!ENTITY % fontstyle "TT | I | B | BIG | SMALL">
Строка, в которую расворачивается parameter entity, может содержать другие имена parameter entity. Эти имена разворачиваются рекурсивно. В следующем примере "%inline;" parameter entity включает "%fontstyle;", "%phrase;", "%special;" и "%formctrl;" parameter entities.
<!ENTITY % inline "#PCDATA | %fontstyle; | %phrase; | %special; | %formctrl;">
Вы часто будете встречать в HTML DTD два DTD entities: "%block;" "%inline;". Они используются, если модель содержимого включает block-level and inline elements соответственно (определенные в разделе глобальная структура документа HTML).
HTML DTD состоит из объявлений типов элементов и их атрибутов. Объявление начинается с ключевого слова <!ELEMENT и заканчивается символом >. Между ними указываются:
В этом примере:
<!ELEMENT UL - - (LI)+>
В этом примере показано объявление пустого типа элемента:
<!ELEMENT IMG - O EMPTY>
Модель содержимого описывает, что может содержаться в экземпляре типа элемента. Определения модели содержимого могут включать:
Модель содержимого элемента указывается с использованием следующего синтаксиса:
Вот некоторые примеры HTML DTD:
<!ELEMENT UL - - (LI)+>
Элемент UL должен содержать один или несколько элементов LI.
<!ELEMENT DL - - (DT|DD)+>
Элемент DL должен содержать один или несколько элементов DT или DD в любом порядке.
<!ELEMENT OPTION - O (#PCDATA)>
Элемент OPTION может содержать только текст и такие entities как & -- это определяется типом данных SGML #PCDATA.
Некоторые типы элементов HTML используют дополнительную функцию SGML для исключения элементов из модели содержимого. Исключенным элементам предшествует символ переноса. Явные исключения имеют приоритет по отношению к допустимым элементам.
В этом примере -(A) означает, что элемент A не может находиться в другом элементе A (то есть ссылки не могут быть вложенными).
<!ELEMENT A - - (%inline;)* -(A)>
Помните, что тип элемента A является частью DTD parameter entity "%inline;", но явно исключается выражением -(A).
Точно так же следующее объявление типа элемента FORM запрещает вложенные формы:
<!ELEMENT FORM - - (%block;|SCRIPT)+ -(FORM)>
Объявление атрибутов, которые может иметь элемент, начинается с ключевого слова <!ATTLIST. За ним следует имя элемента in question, список определений атрибутов и закрывающий символ >. Каждое определение атрибута - это тройка, определяющая:
В этом примере атрибут имя определен для элемента MAP. Атрибут на является обязательным для этого элемента.
<!ATTLIST MAP name CDATA #IMPLIED >
Тип значений, допустимых для этого атрибута, дается как CDATA, тип данных SGML. CDATA - это текст, который может содержать ссылки на символы.
Подробнее о типах данных "CDATA", "NAME", "ID" и др. см. в разделе типы данных HTML.
В следующих примерах показано несколько определений атрибутов:
rowspan NUMBER 1 -- number of rows spanned by cell -- http-equiv NAME #IMPLIED -- HTTP response header name -- id ID #IMPLIED -- document-wide unique id -- valign (top|middle|bottom|baseline) #IMPLIED
Для атрибута rowspan необходимы значения типа NUMBER. Значение по умолчанию дается явно - "1". Для необязательного атрибута http-equiv необходимы значения типа NAME. Для необязательного атрибута id необходимы значения типа ID. Необязательный атрибут valign ограничен значениями из набора {top, middle, bottom, baseline}.
Определения атрибутов могут также содержать ссылки на parameter entity.
В этом примере мы видим, что список определений атрибутов для элемента LINK начинается с "%attrs;" parameter entity.
<!ELEMENT LINK - O EMPTY -- a media-independent link --> <!ATTLIST LINK %attrs; -- %coreattrs, %i18n, %events -- charset %Charset; #IMPLIED -- char encoding of linked resource -- href %URI; #IMPLIED -- URI for linked resource -- hreflang %LanguageCode; #IMPLIED -- language code -- type %ContentType; #IMPLIED -- advisory content type -- rel %LinkTypes; #IMPLIED -- forward link types -- rev %LinkTypes; #IMPLIED -- reverse link types -- media %MediaDesc; #IMPLIED -- for rendering on these media -- >
Start tag: required, End tag: forbidden
"%attrs;" parameter entity определен следующим образом:
<!ENTITY % attrs "%coreattrs; %i18n; %events;">
"%coreattrs;" parameter entity в определении "%attrs;" разворачивается следующим образом:
The "%attrs;" parameter entity определен для удобства, поскольку эти атрибуты определены для большинства типов элементов HTML.
Таким же образом DTD определяет "%URI;" parameter entity как расширение строки "CDATA".
Как показано в этом примере, parameter entity "%URI;" предоставляет читателям DTD больше информации, чем для типа данных, ожидаемого для этого атрибута. Похожие entities определены для "%Color;", "%Charset;", "%Length;", "%Pixels;" и т.д.
Некоторые атрибуты играют роль булевых переменных (например, атрибут selected для элемента OPTION). ИХ наличие в начальном тэге элемента подразумевает, что значением атрибута является "истина". Их отсутствие означает "ложь".
Булевы атрибуты могут принимать только одно значение: соственно имя атрибута (например, selected="selected").
В этом примере атрибут selected определяется как булев.
selected (selected) #IMPLIED -- reduced inter-item spacing --
Для атрибута устанавливается значение "истина", поскольку он находится в начальном тэге элемента:
<OPTION selected="selected"> ...contents... <OPTION>
В HTML булевы атрибуты могут быть в минимизированной форме -- в начально тэге элемента находится только значение атрибута. Таким образом, selected можно установить, написав:
<OPTION selected>
вместо:
<OPTION selected="selected">
Авторам следует знать, что многие агенты пользователей распознают только минимизированную форму булевых атрибутов и не распознают полную.