Спецификация HTML 4.01, рекомендации W3C от 24 декабря 1999 года

3   О  SGML и HTML

   Этот раздел посвящен SGML и его взаимосвязям с HTML. Полное обсуждение SGML находится в стандарте (см. [ISO8879]).


3.1
Введение в 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!
 </BODY>
</HTML>

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

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

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

   Эта спецификация включает  объявление SGML, три определения типа документов (см. раздел информация о версии HTML) список ссылок-мнемоник.


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

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

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

3.2.1 Элементы

   Определение типа документа в 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, начальный и конечный, отсутствуют в разметке.

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

3.2.2 Атрибуты

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

   В этом примере атрибут 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).
Мы рекомендуем использовать знак кавычек даже тогда, когда можно обойтись без него..

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

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

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

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

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

  • "&lt;" - знак <
  • "&gt;" - знак >
  • "&quot;"  - знак "
  • "&#229;" (десятеричная) буква "a" с маленьким кружком наверху
  • "&#1048;" (десятеричная) кириллическая "И".
  • "&#x6C34;" (шестнадцатеричная) китайский "водяной" символ.

   Мы детально обсуждаем ссылки-мнемоники HTML позже в разделе набор символов документа HTML. В этой спецификации есть также список символьных ссылок, которые могут употребляться в документах HTML 4.

3.2.4 Комментарии

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

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

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

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

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


3.3
  Как читать Определение Типа Данных (ОТД) HTML

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

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

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

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

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

   ОТД 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).

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

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

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

   В этом примере:

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

   В этом примере иллюстрируется объявление пустого типа элемента:

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

Определение модели содержимого 

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

  • имена допустимых или запрещенных типов элементов (напр., элемент ul содержит объекты типа элементов li, а тип элемента p может не содержать других элементов p);
  • объекты ОТД (напр., элемент LABEL содержит объекты объекта-параметра "%inline;");
  • текст документа (обозначаемый конструкцией SGML "#PCDATA"). Текст может содержать ссылки-мнемоники. Напоминаем, что они начинаются знаком & и заканчиваются точкой с запятой (напр., "Herg&eacute;'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)>

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

   Ключевое слово <!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">

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

 

Наши ссылки на веб-страницы, можно скопировать html-код ссылки


Книги по математике и физике, программы HTML, компьютерные технологии

Документация HTML, XML, JavaScript на русском языке для разработчиков W3C

   Примечание. Удобная текстовая ссылка для форумов, блогов, цитирования материалов веб-сайта, код html можно скопировать и просто вставить в Ваши веб-страницы при цитировании материалов нашего веб-сайта. Материал носит неофициальный характер и приведен для ознакомления.