Спецификация языка HTML

О SGML и HTML

Разбить на страницы
Показывать лекцию целиком

Введение в SGML

SGML - это система определения языков разметки . Авторы размечают свои документы, вводя структурную, представительную и семантическую информацию параллельно с основным содержимым.

HTML - это один из языков разметки. Вот пример документа HTML:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
     "http://www.w3.org/TR/html4/strict.dtd">
<HTML>
   <HEAD>
      <TITLE>My first HTML document</TITLE>
   </HEAD>
   <BODY>
      <P>Hello world!</P>
   </BODY>
</HTML>

Документ HTML состоит из раздела-шапки (здесь - между <HEAD> и </HEAD> ) и тела (здесь - между <BODY> и </BODY> ). Название документа содержится в шапке (наряду с другой информацией о документе), а содержимое документа находится в его теле/body. Тело в этом примере состоит из одного параграфа, помеченного <P>.

Каждый язык разметки, определённый в SGML, называется SGML приложением. Приложение SGML обычно характеризуется:

  • Объявлением SGML. Объявление SGML определяет, какие символы и ограничители могут появляться в приложении.
  • Определением типа документов (ОТД). ОТД определяет синтаксис конструкций разметки. ОТД может включать дополнительные определения, такие как символьные ссылки-мнемоники.
  • Спецификация, описывающая семантику, относится к разметке. Эта спецификация также даёт ограничения синтаксиса, которые не могут быть выражены внутри ОТД.
  • Объектами документа, содержащими данные (содержимое) и разметку. Каждый объект содержит ссылку на ОТД, чтобы иметь возможность быть интерпретированным.
  • Эта спецификация включает объявление SGML, три определения типа документов (см. раздел информация о версии HTML) список ссылок-мнемоник.

    Конструкции SGML, используемые в HTML

    Следующие разделы посвящены конструкциям SGML, используемым в HTML.

    В приложении описаны некоторые возможности SGML, которые не поддерживаются широко утилитами HTML и пользовательскими агентами (ПА), и использование которых должно быть исключено.

    Элементы

    Определение типа документа в SGML определяет типы элементов, представляющих структуру или необходимое поведение. HTML содержит типы элементов, представляющих параграфы, гипертекстовые ссылки, списки, таблицы, изображения и т.д.

    Каждое объявление типа элемента обычно описывает три части: начальный тег, содержимое и конечный тег.

    Название элемента появляется в начальном теге ( <название-элемента> ) и в конечном теге ( </название-элемента> ); обратите внимание на слэш " / " перед названием элемента в конечном теге. Например, стартовый и конечный теги типа элемента UL обозначают границы списка:

    <UL>
    <LI><P>...элемент списка 1...
    <LI><P>...элемент списка 2...
    </UL>

    Некоторые элементы HTML допускают отсутствие конечного тега (напр., типы элементов P и LI ).

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

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

    Названия элементов всегда нечувствительны к регистру.

    См. в стандарте SGML информацию о правилах использования элементов (напр., они должны быть правильно вложены, конечный тег закрывает, назад по направлению к соответствующему начальному тегу, все незакрытые начальные теги с отсутствующими конечными тегами (раздел 7.5.1) и т.д.).

    Например, этот параграф:

    <P>Это первый параграф.</P>
    ...элемент блок...

    может быть переписан без конечного тега:

    <P>Это первый параграф.
    ...элемент блок...

    поскольку начальный тег <P> закрывается следующим после него блоком. То же самое, если параграф закрыт элементом блок:

    <DIV>
    <P>Это параграф.
    </DIV>

    конечный тег окружающего элемента блок (здесь - </DIV> ) подразумевает конечный тег открытого начального тега <P>.

    Элементы это не теги. Многие полагают, что элементы - это и есть теги (напр., "тег P "). Помните, что элемент - это одно, а тег ( начальный или конечный) - это другое. К примеру, элемент HEAD всегда представлен, даже если оба тега HEAD, начальный и конечный, отсутствуют в разметке.

    Все типы элементов, объявленные в этой спецификации, перечислены в Индексе элементов.

    Атрибуты

    Элементы могут иметь ассоциированные свойства, называемые атрибутами, которые могут иметь значения (по умолчанию или устанавливаемые автором или скриптом). Пары атрибут/значение появляются перед конечным символом " > " начального тега элемента. Любое количество (допустимое) пар атрибута-значений, разделённых пробелами, может появляться в начальном теге элемента. Они могут появляться в любом порядке.

    В этом примере атрибут id установлен для элемента H1:

    <H1 id="section1">
    Это идентифицируемый заголовок, благодаря атрибуту id
    </H1>

    По умолчанию SGML требует, чтобы все значения атрибутов были ограничены с использованием двойных кавычек либо метки двойной кавычки (ASCII десятеричная 34) или метки одиночной кавычки (ASCII десятеричная 39). Знак одиночной кавычки может быть включен в значение атрибута, если это значение ограничено знаком двойной кавычки, и наоборот. Авторы могут также использовать цифровые ссылки-мнемоники для представления двойной (#34;) и одинарной (#39;) кавычек. Для двойных кавычек можно использовать также символьную ссылку-мнемонику quot;.

    В некоторых случаях авторы могут устанавливать значение атрибута без использования кавычек. Значение атрибута может содержать только буквы (a-z и A-Z), цифры (0-9), дефисы (ASCII десятеричная 45), точку (ASCII десятеричная 46), символ подчёркивания (ASCII десятеричная 95) и двоеточие (ASCII десятеричная 58).

    Мы рекомендуем использовать знак кавычек даже тогда, когда можно обойтись без него.

    Названия атрибутов всегда нечувствительны к регистру.

    Значения атрибутов вообще нечувствительны к регистру. В определении каждого атрибута в справочнике указано, является ли его значение нечувствительным к регистру.

    Все атрибуты, определённые в этой спецификации, перечислены в индексе атрибутов.

    Ссылки-мнемоники

    Ссылки-мнемоники это цифровые или символьные имена символов, которые могут быть включены в документ HTML. Они употребляются как ссылки на редко используемые или затруднительные для воспроизведения авторскими утилитами символы. Вы встретите такие ссылки-мнемоники в этом документе повсюду, они начинаются знаком " " и заканчиваются точкой с запятой ( ; ). Вот некоторые распространённые сочетания:

  • " lt; " - знак <
  • " gt; " - знак >
  • " quot; " - знак "
  • " #229; " (десятеричная) буква "a" с маленьким кружком наверху
  • " #1048; " (десятеричная) кириллическая "И"
  • " #x6C34; " (шестнадцатеричная) китайский "водяной" символ.
  • Мы детально обсудим ссылки-мнемоники HTML позже в разделе набор символов документа HTML. В этой спецификации есть также список символьных ссылок, которые могут употребляться в документах HTML 4.

    Комментарии

    Комментарии HTML имеют следующий синтаксис:

    <!-- это комментарий -->
    <!-- и это тоже комментарий,
        занимающий более одной строки -->

    Не допускаются пробелы между открывающим ограничителем объявления разметки (" <!") и открывающим ограничителем комментария (" -- "), но разрешаются между закрывающим ограничителем комментария (" -- ") и закрывающим ограничителем объявления разметки (" > "). Обычная ошибка - включение внутрь комментария строки (" --- "). Авторы должны исключить использование внутри комментариев двух или более смежных дефисов.

    Информация комментариев не имеет специального значения (напр., ссылки-мнемоники не интерпретируются как таковые).

    Обратите внимание, что комментарии это разметка.

    Как читать Определение Типа Документа (ОТД) HTML

    Каждое объявление элемента или атрибута в этой спецификации сопровождается соответствующим фрагментом определения типа документа. Мы решили включать фрагменты ОТД в спецификацию вместо того, чтобы использовать более подходящие, но и более длинные и менее точные способы описания свойств элемента.

    Этот учебник должен помочь читателям, не знакомым с SGML, разобраться в ОТД и понять технические детали этой спецификации HTML.

    Комментарии в ОТД

    Комментарии в ОТД могут быть одно- или многострочными. Комментарии в ОТД это текст, ограниченный парами знаков " -- ", например:

    <!ELEMENT PARAM - O EMPTY       -- именованное значение свойства -->

    Данный комментарий "именованное значение свойства" поясняет использование типа элемента PARAM. Комментарии в ОТД носят исключительно информативный характер.

    Определения объектов-параметров

    ОТД HTML начинается серией определений объектов-параметров. Определение объекта-параметра определяет макрос особого типа, на который можно ссылаться и который может быть развёрнут где-либо в ОТД. Эти макросы могут не появляться в самом документе HTML, а только в ОТД. Макросы других типов, называемые ссылки-мнемоники, могут быть использованы в тексте документа HTML или внутри значений атрибутов.

    Если на объект-параметр ссылаются по имени из ОТД, он разворачивается в строку.

    Определение объекта-параметра начинается ключевым словом <!ENTITY % с последующим именем объекта-параметра, строки в кавычках, в которую объект-параметр разворачивается, и конечного закрывающего >. Появления объектов-параметров в ОТД начинаются со знака " % ", затем имени объекта-параметра и необязательного заключительного знака " ; ".

    Вот определение строки, в которую разворачивается объект-параметр " %fontstyle; ".

    <!ENTITY % fontstyle "TT | I | B | BIG | SMALL">

    Строка, в которую разворачивается объект-параметр, может содержать имена других объектов-параметров. Эти имена разворачиваются рекурсивно. В следующем примере, объект-параметр " %inline; " определён с включением объектов-параметров " %fontstyle; ", " %phrase; ", " %special; " и " %formctrl; ".

    <!ENTITY % inline "#PCDATA | %fontstyle; | %phrase; | %special; | %formctrl;">

    Вы можете заметить далее, что два объекта-параметра ОТД часто появляются в ОТД HTML: " %block; " и " %inline; ". Они используются, если модель содержимого включает соответственно элементы уровня блока/block-level и инлайн/ inline (определены в разделе глобальная структура документа HTML).

    Объявление элементов

    Как правило, ОТД HTML состоит из объявления типа элемента и его атрибута. Ключевое слово <!ELEMENT открывает объявление, а символ > закрывает. Между ними определяются:

  • имя элемента ;
  • обязательно ли указывать теги элемента. Два дефиса после имени элемента означают, что начальный и конечный теги должны присутствовать. Один дефис и буква " O " означают, что конечный тег может отсутствовать. Две буквы " O " означают, что и начальный, и конечный теги могут отсутствовать;
  • содержимое элемента, если есть. Допустимое для данного элемента содержимое называется моделью содержимого . Типы элементов, которые разработаны так, чтобы не иметь содержимого, называются пустыми элементами . Модель содержимого для таких типов элементов объявляется ключевым словом " EMPTY ".
  • В этом примере:

    <!ELEMENT UL - - (LI)+>
  • объявляемый тип элемента - UL ;
  • два дефиса означают, что оба тега, начальный <UL> и конечный </UL>, для этого типа элементов должны присутствовать;
  • модель содержимого этого типа элементов объявлена как "не менее одного элемента LI ". Ниже объясняется, как специфицировать модель содержимого.
  • В этом примере иллюстрируется объявление пустого типа элемента:

    <!ELEMENT IMG - O EMPTY>
  • объявляется тип элемента - IMG ;
  • дефис и последующая " O " означают, что конечный тег может быть опущен, но, в сочетании с моделью содержимого " EMPTY ", это значение усиливается: конечный тег должен отсутствовать;
  • ключевое слово " EMPTY " означает, что объект этого типа обязан не иметь содержимого.
  • Определение модели содержимого

    Модель содержимого указывает, что может содержать в себе объект данного типа элементов. Определение модели содержимого может включать:

  • имена допустимых или запрещённых типов элементов (напр., элемент UL содержит объекты типа элементов LI, а тип элемента P может не содержать других элементов P );
  • объекты ОТД (напр., элемент LABEL содержит объекты объекта-параметра " %inline; ");
  • текст документа (обозначаемый конструкцией SGML " #PCDATA "). Текст может содержать ссылки-мнемоники. Напоминаем, что они начинаются знаком и заканчиваются точкой с запятой (напр., " Hergeacute;'s adventures of Tintin " содержит мнемонику символа "e acute").
  • Синтаксис спецификации модели содержимого элемента следующий. Обратите внимание, что данный список является упрощённым по сравнению с полным синтаксисом SGML и не адресует, напр., старшинство.

    ( ... )

    Ограничивает группу.

    A

    A должно появляться только однократно.

    A+

    A должно появляться один раз или более.

    A?

    A должно появляться 0 или 1 раз.

    A*

    A может появляться 0 или более раз.

    +(A)

    A может появляться.

    -(A)

    A не должно появляться.

    A | B

    Может появиться A или B, но не оба вместе.

    A , B

    Оба A и B должны появиться в данном порядке.

    A B

    Оба A и B должны появиться в любом порядке.

    Вот некоторые примеры ОТД HTML:

    <!ELEMENT UL - - (LI)+>

    Элемент UL должен содержать один или более элементов LI.

    <!ELEMENT DL    - - (DT|DD)+>

    Элемент DL должен содержать один или более элементов DT или DD в любом порядке.

    <!ELEMENT OPTION - O (#PCDATA)>

    Элемент OPTION может содержать только текст и мнемоники, такие как amp; - это указано SGML типом данных #PCDATA.

    Некоторые типы элементов HTML используют дополнительные возможности SGML для того, чтобы исключить элементы из их модели содержимого. Исключаемым элементам предшествует дефис. Явные исключения переопределяют допустимые элементы.

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

    <!ELEMENT A - - (%inline;)* -(A)>

    Заметьте, что тип элемента A является частью ОТД объекта-параметра " %inline; ", но явно исключён, поскольку указано -(A).

    Таким же образом, следующее объявление типа элемента FORM запрещает вложение форм:

    <!ELEMENT FORM - - (%block;|SCRIPT)+ -(FORM)>

    Объявление атрибутов

    Ключевое слово <!ATTLIST открывает объявление атрибутов, которые могут быть приняты элементом. Следом идёт имя элемента, список определений атрибутов и закрывающий >.

    Каждое определение атрибута состоит из трёх частей:

  • имя атрибута ;
  • тип значения атрибута или явно указанный список возможных значений. Значения, определённые явно в ОТД, нечувствительны к регистру. Дополнительную информацию о типах значений атрибутов можно найти в базовых типах данных HTML;
  • предполагается ли значение атрибута по умолчанию (ключевое слово "#ПРЕДПОЛАГАЕТСЯ"), в этом случае значение по умолчанию должно быть предоставлено пользовательским агентом (ПА) (в некоторых случаях - путём наследования от элементов-предков); требуется всегда (ключевое слово "#НЕОБХОДИМ"), или фиксируется данным значением (ключевое слово "#ФИКСИРОВАННЫЙ"). Некоторые определения атрибутов явно определяют для атрибута значение по умолчанию.
  • В этом примере атрибут name определён для элемента MAP. Атрибут для этого элемента не обязателен.

    <!ATTLIST MAP
      name        CDATA     #ПРЕДПОЛАГАЕТСЯ
    >

    Тип допустимых значений атрибута даётся как CDATA типа данных SGML. CDATA это текст, который может содержать символьные ссылки-мнемоники.

    Дополнительную информацию о " CDATA ", " NAME ", " ID " и других типах данных см. в разделе типы данных HTML.

    Следующие примеры иллюстрируют различные определения атрибутов:

    rowspan     NUMBER     1                -- количество рядов таблицы, занимаемых ячейкой --
    http-equiv  NAME       #ПРЕДПОЛАГАЕТСЯ  -- имя "шапки" ответа HTTP --
    id          ID         #ПРЕДПОЛАГАЕТСЯ  -- уникальный идентификатор документа id -- 
    valign      (top|middle|bottom|baseline) #IMPLIED

    Атрибут rowspan требует значение типа NUMBER. Значение по умолчанию даётся явно как "1". Предполагаемый атрибут http-equiv требует значений типа NAME. Предполагаемый атрибут id требует значений типа ID. Предполагаемый атрибут valign сконструирован так, чтобы принимать значения из списка {top, middle, bottom, baseline}.

    Объекты ОТД в определениях атрибутов

    Определения атрибутов могут также содержать ссылки на объекты-параметры.

    В этом примере мы видим, что список определения атрибута элемента LINK начинается объектом-параметром " %attrs; ":

    <!ELEMENT LINK - O EMPTY               -- независимая от типа носителя ссылка -->
    <!ATTLIST LINK
      %attrs;                                 -- %coreattrs, %i18n, %events --
      charset     %Charset;      #ПРЕДПОЛАГАЕТСЯ  -- набор символов связанного ресурса --
      href        %URI;          #ПРЕДПОЛАГАЕТСЯ  -- URI связанного ресурса --
      hreflang    %LanguageCode; #ПРЕДПОЛАГАЕТСЯ  -- код языка --
      type        %ContentType;  #ПРЕДПОЛАГАЕТСЯ  -- информативный тип содержимого --
      rel         %LinkTypes;    #ПРЕДПОЛАГАЕТСЯ  -- типы ссылки вперёд --
      rev         %LinkTypes;    #ПРЕДПОЛАГАЕТСЯ  -- типы ссылки назад --
      media       %MediaDesc;    #ПРЕДПОЛАГАЕТСЯ  -- для представления данным носителем --
      >
    Начальный тег: необходим, Конечный тег: запрещён

    Объект-параметр " %attrs; " определён так:

    <!ENTITY % attrs "%coreattrs; %i18n; %events;">

    Объект-параметр " %coreattrs; " в определении " %attrs; " расширяется так:

    <!ENTITY % coreattrs
     "id          ID             #ПРЕДПОЛАГАЕТСЯ  -- уникальный идентификатор документа id --
      class       CDATA          #ПРЕДПОЛАГАЕТСЯ  -- список разделённых пробелами классов --
      style       %StyleSheet;   #ПРЕДПОЛАГАЕТСЯ  -- ассоциированная информация о стиле --
      title       %Text;         #ПРЕДПОЛАГАЕТСЯ  -- информативное название --"
      >

    Объект-параметр " %attrs; " определён по соглашению, поскольку эти атрибуты определены для большинства типов элементов HTML.

    Таким же образом ОТД определяет объект-параметр " %URI; " и расширяет его в строку " CDATA ".

    <!ENTITY % URI "CDATA"
        -- Uniform Resource Identifier,
           см. [URI]
        -->

    Как показано в этом примере, объект-параметр " %URI; " даёт читателю больше информации как об ОТД, так и о типе данных, ожидаемых для данного атрибута. Так же определяются объекты-параметры " %Color; ", " %Charset; ", " %Length; ", " %Pixels; " и т.д.

    Булевы атрибуты

    Некоторые атрибуты играют роль булевых переменных (напр., атрибут selected элемента OPTION ). Их появление в начальном теге элемента подразумевает, что значение атрибута - " true ". Их отсутствие подразумевает, что значение - " false ".

    Булевы атрибуты могут принимать единственное значение: само имя атрибута (напр., selected="selected" ).

    В этом примере атрибут selected является булевым атрибутом.

    selected     (selected)  #IMPLIED  -- опция предустановлена --

    Этот атрибут установлен " true " в начальном теге элемента:

    <OPTION selected="selected">
    ...содержимое...
    </OPTION>

    В HTML булевы атрибуты могут появляться в минимизированной форме - значение атрибута value появляется без дополнения в начальном теге элемента. Таким образом, selected можно установить:

    <OPTION selected>

    вместо:

    <OPTION selected="selected">

    Авторы должны учитывать, что многие ПА могут распознавать только минимизированные формы булевых атрибутов, но не полные.

    Страницы:

    Введение в SGML

    SGML - это система определения языков разметки . Авторы размечают свои документы, вводя структурную, представительную и семантическую информацию параллельно с основным содержимым.

    HTML - это один из языков разметки. Вот пример документа HTML:

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
         "http://www.w3.org/TR/html4/strict.dtd">
    <HTML>
       <HEAD>
          <TITLE>My first HTML document</TITLE>
       </HEAD>
       <BODY>
          <P>Hello world!</P>
       </BODY>
    </HTML>

    Документ HTML состоит из раздела-шапки (здесь - между <HEAD> и </HEAD> ) и тела (здесь - между <BODY> и </BODY> ). Название документа содержится в шапке (наряду с другой информацией о документе), а содержимое документа находится в его теле/body. Тело в этом примере состоит из одного параграфа, помеченного <P>.

    Каждый язык разметки, определённый в SGML, называется SGML приложением. Приложение SGML обычно характеризуется:

  • Объявлением SGML. Объявление SGML определяет, какие символы и ограничители могут появляться в приложении.
  • Определением типа документов (ОТД). ОТД определяет синтаксис конструкций разметки. ОТД может включать дополнительные определения, такие как символьные ссылки-мнемоники.
  • Спецификация, описывающая семантику, относится к разметке. Эта спецификация также даёт ограничения синтаксиса, которые не могут быть выражены внутри ОТД.
  • Объектами документа, содержащими данные (содержимое) и разметку. Каждый объект содержит ссылку на ОТД, чтобы иметь возможность быть интерпретированным.
  • Эта спецификация включает объявление SGML, три определения типа документов (см. раздел информация о версии HTML) список ссылок-мнемоник.

    Конструкции SGML, используемые в HTML

    Следующие разделы посвящены конструкциям SGML, используемым в HTML.

    В приложении описаны некоторые возможности SGML, которые не поддерживаются широко утилитами HTML и пользовательскими агентами (ПА), и использование которых должно быть исключено.

    Элементы

    Определение типа документа в SGML определяет типы элементов, представляющих структуру или необходимое поведение. HTML содержит типы элементов, представляющих параграфы, гипертекстовые ссылки, списки, таблицы, изображения и т.д.

    Каждое объявление типа элемента обычно описывает три части: начальный тег, содержимое и конечный тег.

    Название элемента появляется в начальном теге ( <название-элемента> ) и в конечном теге ( </название-элемента> ); обратите внимание на слэш " / " перед названием элемента в конечном теге. Например, стартовый и конечный теги типа элемента UL обозначают границы списка:

    <UL>
    <LI><P>...элемент списка 1...
    <LI><P>...элемент списка 2...
    </UL>

    Некоторые элементы HTML допускают отсутствие конечного тега (напр., типы элементов P и LI ).

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

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

    Названия элементов всегда нечувствительны к регистру.

    См. в стандарте SGML информацию о правилах использования элементов (напр., они должны быть правильно вложены, конечный тег закрывает, назад по направлению к соответствующему начальному тегу, все незакрытые начальные теги с отсутствующими конечными тегами (раздел 7.5.1) и т.д.).

    Например, этот параграф:

    <P>Это первый параграф.</P>
    ...элемент блок...

    может быть переписан без конечного тега:

    <P>Это первый параграф.
    ...элемент блок...

    поскольку начальный тег <P> закрывается следующим после него блоком. То же самое, если параграф закрыт элементом блок:

    <DIV>
    <P>Это параграф.
    </DIV>

    конечный тег окружающего элемента блок (здесь - </DIV> ) подразумевает конечный тег открытого начального тега <P>.

    Элементы это не теги. Многие полагают, что элементы - это и есть теги (напр., "тег P "). Помните, что элемент - это одно, а тег ( начальный или конечный) - это другое. К примеру, элемент HEAD всегда представлен, даже если оба тега HEAD, начальный и конечный, отсутствуют в разметке.

    Все типы элементов, объявленные в этой спецификации, перечислены в Индексе элементов.

    Атрибуты

    Элементы могут иметь ассоциированные свойства, называемые атрибутами, которые могут иметь значения (по умолчанию или устанавливаемые автором или скриптом). Пары атрибут/значение появляются перед конечным символом " > " начального тега элемента. Любое количество (допустимое) пар атрибута-значений, разделённых пробелами, может появляться в начальном теге элемента. Они могут появляться в любом порядке.

    В этом примере атрибут id установлен для элемента H1:

    <H1 id="section1">
    Это идентифицируемый заголовок, благодаря атрибуту id
    </H1>

    По умолчанию SGML требует, чтобы все значения атрибутов были ограничены с использованием двойных кавычек либо метки двойной кавычки (ASCII десятеричная 34) или метки одиночной кавычки (ASCII десятеричная 39). Знак одиночной кавычки может быть включен в значение атрибута, если это значение ограничено знаком двойной кавычки, и наоборот. Авторы могут также использовать цифровые ссылки-мнемоники для представления двойной (#34;) и одинарной (#39;) кавычек. Для двойных кавычек можно использовать также символьную ссылку-мнемонику quot;.

    В некоторых случаях авторы могут устанавливать значение атрибута без использования кавычек. Значение атрибута может содержать только буквы (a-z и A-Z), цифры (0-9), дефисы (ASCII десятеричная 45), точку (ASCII десятеричная 46), символ подчёркивания (ASCII десятеричная 95) и двоеточие (ASCII десятеричная 58).

    Мы рекомендуем использовать знак кавычек даже тогда, когда можно обойтись без него.

    Названия атрибутов всегда нечувствительны к регистру.

    Значения атрибутов вообще нечувствительны к регистру. В определении каждого атрибута в справочнике указано, является ли его значение нечувствительным к регистру.

    Все атрибуты, определённые в этой спецификации, перечислены в индексе атрибутов.

    Ссылки-мнемоники

    Ссылки-мнемоники это цифровые или символьные имена символов, которые могут быть включены в документ HTML. Они употребляются как ссылки на редко используемые или затруднительные для воспроизведения авторскими утилитами символы. Вы встретите такие ссылки-мнемоники в этом документе повсюду, они начинаются знаком " " и заканчиваются точкой с запятой ( ; ). Вот некоторые распространённые сочетания:

  • " lt; " - знак <
  • " gt; " - знак >
  • " quot; " - знак "
  • " #229; " (десятеричная) буква "a" с маленьким кружком наверху
  • " #1048; " (десятеричная) кириллическая "И"
  • " #x6C34; " (шестнадцатеричная) китайский "водяной" символ.
  • Мы детально обсудим ссылки-мнемоники HTML позже в разделе набор символов документа HTML. В этой спецификации есть также список символьных ссылок, которые могут употребляться в документах HTML 4.

    Комментарии

    Комментарии HTML имеют следующий синтаксис:

    <!-- это комментарий -->
    <!-- и это тоже комментарий,
        занимающий более одной строки -->

    Не допускаются пробелы между открывающим ограничителем объявления разметки (" <!") и открывающим ограничителем комментария (" -- "), но разрешаются между закрывающим ограничителем комментария (" -- ") и закрывающим ограничителем объявления разметки (" > "). Обычная ошибка - включение внутрь комментария строки (" --- "). Авторы должны исключить использование внутри комментариев двух или более смежных дефисов.

    Информация комментариев не имеет специального значения (напр., ссылки-мнемоники не интерпретируются как таковые).

    Обратите внимание, что комментарии это разметка.

    Как читать Определение Типа Документа (ОТД) HTML

    Каждое объявление элемента или атрибута в этой спецификации сопровождается соответствующим фрагментом определения типа документа. Мы решили включать фрагменты ОТД в спецификацию вместо того, чтобы использовать более подходящие, но и более длинные и менее точные способы описания свойств элемента.

    Этот учебник должен помочь читателям, не знакомым с SGML, разобраться в ОТД и понять технические детали этой спецификации HTML.

    Комментарии в ОТД

    Комментарии в ОТД могут быть одно- или многострочными. Комментарии в ОТД это текст, ограниченный парами знаков " -- ", например:

    <!ELEMENT PARAM - O EMPTY       -- именованное значение свойства -->

    Данный комментарий "именованное значение свойства" поясняет использование типа элемента PARAM. Комментарии в ОТД носят исключительно информативный характер.

    Определения объектов-параметров

    ОТД HTML начинается серией определений объектов-параметров. Определение объекта-параметра определяет макрос особого типа, на который можно ссылаться и который может быть развёрнут где-либо в ОТД. Эти макросы могут не появляться в самом документе HTML, а только в ОТД. Макросы других типов, называемые ссылки-мнемоники, могут быть использованы в тексте документа HTML или внутри значений атрибутов.

    Если на объект-параметр ссылаются по имени из ОТД, он разворачивается в строку.

    Определение объекта-параметра начинается ключевым словом <!ENTITY % с последующим именем объекта-параметра, строки в кавычках, в которую объект-параметр разворачивается, и конечного закрывающего >. Появления объектов-параметров в ОТД начинаются со знака " % ", затем имени объекта-параметра и необязательного заключительного знака " ; ".

    Вот определение строки, в которую разворачивается объект-параметр " %fontstyle; ".

    <!ENTITY % fontstyle "TT | I | B | BIG | SMALL">

    Строка, в которую разворачивается объект-параметр, может содержать имена других объектов-параметров. Эти имена разворачиваются рекурсивно. В следующем примере, объект-параметр " %inline; " определён с включением объектов-параметров " %fontstyle; ", " %phrase; ", " %special; " и " %formctrl; ".

    <!ENTITY % inline "#PCDATA | %fontstyle; | %phrase; | %special; | %formctrl;">

    Вы можете заметить далее, что два объекта-параметра ОТД часто появляются в ОТД HTML: " %block; " и " %inline; ". Они используются, если модель содержимого включает соответственно элементы уровня блока/block-level и инлайн/ inline (определены в разделе глобальная структура документа HTML).

    Объявление элементов

    Как правило, ОТД HTML состоит из объявления типа элемента и его атрибута. Ключевое слово <!ELEMENT открывает объявление, а символ > закрывает. Между ними определяются:

  • имя элемента ;
  • обязательно ли указывать теги элемента. Два дефиса после имени элемента означают, что начальный и конечный теги должны присутствовать. Один дефис и буква " O " означают, что конечный тег может отсутствовать. Две буквы " O " означают, что и начальный, и конечный теги могут отсутствовать;
  • содержимое элемента, если есть. Допустимое для данного элемента содержимое называется моделью содержимого . Типы элементов, которые разработаны так, чтобы не иметь содержимого, называются пустыми элементами . Модель содержимого для таких типов элементов объявляется ключевым словом " EMPTY ".
  • В этом примере:

    <!ELEMENT UL - - (LI)+>
  • объявляемый тип элемента - UL ;
  • два дефиса означают, что оба тега, начальный <UL> и конечный </UL>, для этого типа элементов должны присутствовать;
  • модель содержимого этого типа элементов объявлена как "не менее одного элемента LI ". Ниже объясняется, как специфицировать модель содержимого.
  • В этом примере иллюстрируется объявление пустого типа элемента:

    <!ELEMENT IMG - O EMPTY>
  • объявляется тип элемента - IMG ;
  • дефис и последующая " O " означают, что конечный тег может быть опущен, но, в сочетании с моделью содержимого " EMPTY ", это значение усиливается: конечный тег должен отсутствовать;
  • ключевое слово " EMPTY " означает, что объект этого типа обязан не иметь содержимого.
  • Определение модели содержимого

    Модель содержимого указывает, что может содержать в себе объект данного типа элементов. Определение модели содержимого может включать:

  • имена допустимых или запрещённых типов элементов (напр., элемент UL содержит объекты типа элементов LI, а тип элемента P может не содержать других элементов P );
  • объекты ОТД (напр., элемент LABEL содержит объекты объекта-параметра " %inline; ");
  • текст документа (обозначаемый конструкцией SGML " #PCDATA "). Текст может содержать ссылки-мнемоники. Напоминаем, что они начинаются знаком и заканчиваются точкой с запятой (напр., " Hergeacute;'s adventures of Tintin " содержит мнемонику символа "e acute").
  • Синтаксис спецификации модели содержимого элемента следующий. Обратите внимание, что данный список является упрощённым по сравнению с полным синтаксисом SGML и не адресует, напр., старшинство.

    ( ... )

    Ограничивает группу.

    A

    A должно появляться только однократно.

    A+

    A должно появляться один раз или более.

    A?

    A должно появляться 0 или 1 раз.

    A*

    A может появляться 0 или более раз.

    +(A)

    A может появляться.

    -(A)

    A не должно появляться.

    A | B

    Может появиться A или B, но не оба вместе.

    A , B

    Оба A и B должны появиться в данном порядке.

    A B

    Оба A и B должны появиться в любом порядке.

    Вот некоторые примеры ОТД HTML:

    <!ELEMENT UL - - (LI)+>

    Элемент UL должен содержать один или более элементов LI.

    <!ELEMENT DL    - - (DT|DD)+>

    Элемент DL должен содержать один или более элементов DT или DD в любом порядке.

    <!ELEMENT OPTION - O (#PCDATA)>

    Элемент OPTION может содержать только текст и мнемоники, такие как amp; - это указано SGML типом данных #PCDATA.

    Некоторые типы элементов HTML используют дополнительные возможности SGML для того, чтобы исключить элементы из их модели содержимого. Исключаемым элементам предшествует дефис. Явные исключения переопределяют допустимые элементы.

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

    <!ELEMENT A - - (%inline;)* -(A)>

    Заметьте, что тип элемента A является частью ОТД объекта-параметра " %inline; ", но явно исключён, поскольку указано -(A).

    Таким же образом, следующее объявление типа элемента FORM запрещает вложение форм:

    <!ELEMENT FORM - - (%block;|SCRIPT)+ -(FORM)>

    Объявление атрибутов

    Ключевое слово <!ATTLIST открывает объявление атрибутов, которые могут быть приняты элементом. Следом идёт имя элемента, список определений атрибутов и закрывающий >.

    Каждое определение атрибута состоит из трёх частей:

  • имя атрибута ;
  • тип значения атрибута или явно указанный список возможных значений. Значения, определённые явно в ОТД, нечувствительны к регистру. Дополнительную информацию о типах значений атрибутов можно найти в базовых типах данных HTML;
  • предполагается ли значение атрибута по умолчанию (ключевое слово "#ПРЕДПОЛАГАЕТСЯ"), в этом случае значение по умолчанию должно быть предоставлено пользовательским агентом (ПА) (в некоторых случаях - путём наследования от элементов-предков); требуется всегда (ключевое слово "#НЕОБХОДИМ"), или фиксируется данным значением (ключевое слово "#ФИКСИРОВАННЫЙ"). Некоторые определения атрибутов явно определяют для атрибута значение по умолчанию.
  • В этом примере атрибут name определён для элемента MAP. Атрибут для этого элемента не обязателен.

    <!ATTLIST MAP
      name        CDATA     #ПРЕДПОЛАГАЕТСЯ
    >

    Тип допустимых значений атрибута даётся как CDATA типа данных SGML. CDATA это текст, который может содержать символьные ссылки-мнемоники.

    Дополнительную информацию о " CDATA ", " NAME ", " ID " и других типах данных см. в разделе типы данных HTML.

    Следующие примеры иллюстрируют различные определения атрибутов:

    rowspan     NUMBER     1                -- количество рядов таблицы, занимаемых ячейкой --
    http-equiv  NAME       #ПРЕДПОЛАГАЕТСЯ  -- имя "шапки" ответа HTTP --
    id          ID         #ПРЕДПОЛАГАЕТСЯ  -- уникальный идентификатор документа id -- 
    valign      (top|middle|bottom|baseline) #IMPLIED

    Атрибут rowspan требует значение типа NUMBER. Значение по умолчанию даётся явно как "1". Предполагаемый атрибут http-equiv требует значений типа NAME. Предполагаемый атрибут id требует значений типа ID. Предполагаемый атрибут valign сконструирован так, чтобы принимать значения из списка {top, middle, bottom, baseline}.

    Объекты ОТД в определениях атрибутов

    Определения атрибутов могут также содержать ссылки на объекты-параметры.

    В этом примере мы видим, что список определения атрибута элемента LINK начинается объектом-параметром " %attrs; ":

    <!ELEMENT LINK - O EMPTY               -- независимая от типа носителя ссылка -->
    <!ATTLIST LINK
      %attrs;                                 -- %coreattrs, %i18n, %events --
      charset     %Charset;      #ПРЕДПОЛАГАЕТСЯ  -- набор символов связанного ресурса --
      href        %URI;          #ПРЕДПОЛАГАЕТСЯ  -- URI связанного ресурса --
      hreflang    %LanguageCode; #ПРЕДПОЛАГАЕТСЯ  -- код языка --
      type        %ContentType;  #ПРЕДПОЛАГАЕТСЯ  -- информативный тип содержимого --
      rel         %LinkTypes;    #ПРЕДПОЛАГАЕТСЯ  -- типы ссылки вперёд --
      rev         %LinkTypes;    #ПРЕДПОЛАГАЕТСЯ  -- типы ссылки назад --
      media       %MediaDesc;    #ПРЕДПОЛАГАЕТСЯ  -- для представления данным носителем --
      >
    Начальный тег: необходим, Конечный тег: запрещён

    Объект-параметр " %attrs; " определён так:

    <!ENTITY % attrs "%coreattrs; %i18n; %events;">

    Объект-параметр " %coreattrs; " в определении " %attrs; " расширяется так:

    <!ENTITY % coreattrs
     "id          ID             #ПРЕДПОЛАГАЕТСЯ  -- уникальный идентификатор документа id --
      class       CDATA          #ПРЕДПОЛАГАЕТСЯ  -- список разделённых пробелами классов --
      style       %StyleSheet;   #ПРЕДПОЛАГАЕТСЯ  -- ассоциированная информация о стиле --
      title       %Text;         #ПРЕДПОЛАГАЕТСЯ  -- информативное название --"
      >

    Объект-параметр " %attrs; " определён по соглашению, поскольку эти атрибуты определены для большинства типов элементов HTML.

    Таким же образом ОТД определяет объект-параметр " %URI; " и расширяет его в строку " CDATA ".

    <!ENTITY % URI "CDATA"
        -- Uniform Resource Identifier,
           см. [URI]
        -->

    Как показано в этом примере, объект-параметр " %URI; " даёт читателю больше информации как об ОТД, так и о типе данных, ожидаемых для данного атрибута. Так же определяются объекты-параметры " %Color; ", " %Charset; ", " %Length; ", " %Pixels; " и т.д.

    Булевы атрибуты

    Некоторые атрибуты играют роль булевых переменных (напр., атрибут selected элемента OPTION ). Их появление в начальном теге элемента подразумевает, что значение атрибута - " true ". Их отсутствие подразумевает, что значение - " false ".

    Булевы атрибуты могут принимать единственное значение: само имя атрибута (напр., selected="selected" ).

    В этом примере атрибут selected является булевым атрибутом.

    selected     (selected)  #IMPLIED  -- опция предустановлена --

    Этот атрибут установлен " true " в начальном теге элемента:

    <OPTION selected="selected">
    ...содержимое...
    </OPTION>

    В HTML булевы атрибуты могут появляться в минимизированной форме - значение атрибута value появляется без дополнения в начальном теге элемента. Таким образом, selected можно установить:

    <OPTION selected>

    вместо:

    <OPTION selected="selected">

    Авторы должны учитывать, что многие ПА могут распознавать только минимизированные формы булевых атрибутов, но не полные.

    Вернуться к учебному плану