Перейти к первому, предыдущему, следующему, последнему разделу, оглавлению.


ProgrammerBook.ru: Обратите внимание, что

  1. данный документ является переводом документа «Hypertext Markup Language - 2.0 - HTML as an Application of SGML»;
  2. данный документ может содержать неточности, опечатки и ошибки перевода;
  3. официальным документом по данной тематике является оригинальный документ на английском языке, расположенный на сайте W3C.

HTML как Приложение SGML

HTML является приложением ISO 8879:1986 -- Стандартный Обобщённый Язык Разметки (Standard Generalized Markup Language, SGML). SGML -- это система для определения структурированных типов документов и языков разметки, предназначенных для репрезентации экземпляров этих типов документов [SGML]. Публичный текст -- ОТД и SGML объявление -- определения типа документа HTML содержатся в разделе Публичный Текст HTML.

Термин HTML относится как к типу документа, определённого здесь, так и к языку разметки для репрезентации экземпляров этого типа документа.

SGML Документы

HTML документ является SGML документом; то есть последовательность символов, физически организована в виде набора сущностей и логически в виде иерархии элементов.

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

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

SGML объявление также определяет набор символов синтаксис-ссылок документа, а также несколько других параметров, которые связывают абстрактный синтаксис SGML с конкретным синтаксисом. Этот конкретный синтаксис определяется, как последовательность символов документа отображаемая в последовательности заключений в грамматике пролога.

Например, рассмотрим следующий документ:

<!DOCTYPE html PUBLIC "-//IETF//DTD HTML 2.0//EN">
<title>Синтаксически анализируемый Пример</title>
<p>Некоторый текст. <em>&#42;вау&#42;</em></p>

HTML агенту пользователя следует использовать SGML объявление, которое приводится в разделе SGML Объявления для HTML. В соответствии с его набором символов документа, ссылка `&#42;' обозначает символ звёздочки, `*'.

Экземпляр, указанный выше, рассматривается как следующая последовательность заключений:

  1. начальный тег: TITLE
  2. символы данных: «Синтаксически анализируемый Пример»
  3. конечный тег: TITLE
  4. начальный тег: P
  5. символы данных «Некоторый текст. »
  6. начальный тег: EM
  7. символы данных: «*вау*»
  8. конечный тег: EM
  9. конечный тег: P

Начальным обозначением ОТД грамматики является HTML, а технологии даются в публичном тексте, идентифицированном как `-//IETF//ОТД HTML 2.0//EN' (раздел ОТД HTML). Заключения, указанные выше, синтаксически интерпритируются, как:

   HTML
    |
    \-HEAD
    |  |
    |  \-TITLE
    |      |
    |      \-<TITLE>
    |      |
    |      \-«Разбираемый Пример»
    |      |
    |      \-</TITLE>
    |
    \-BODY
      |
      \-P
        |
        \-<P>
        |
        \-«Некоторый текст. »
        |
        \-EM
        |  |
        |  \-<EM>
        |  |
        |  \-«*вау*»
        |  |
        |  \-</EM>
        | 
        \-</P>

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

Лексический Синтаксис HTML

SGML определяет абстрактный синтаксис и ссылку на конкретный синтаксис. Помимо определённых величин и возможностей (например, ограничение длины имени), все HTML документы используют ссылку на конкретный синтаксис. В частности, все символы разметки имеются в наборе [ISO-646]. Символы данных берутся из набора символов документа (смотрим раздел Символы, Слова и Абзацы).

Полное описание интерпретации SGML, например, представление последовательности символов как последовательности тегов и данных, остаётся в стандарте SGML [SGML]. В этом разделе указана только краткая информация.

Символы данных

Любая последовательность символов, которая не является разметкой (смотрим 9.6 «Признание Разделителем» [SGML]) отображается непосредственно в виде строк символов данных. Разметка также отображается в строках символов данных. Числовые ссылки на символ отображаются в одно-символьных строках, с помощью набора символов документа. Каждая ссылка на одну из общих сущностей, определённых в ОТД HTML отображается в виде одно-символьной строки.

Например,

abc&lt;def    => "abc","<","def"
abc&#60;def   => "abc","<","def"

Завершающая точка с запятой в ссылках на сущности символов или числовых ссылках на символы необходима только тогда, когда символ следующий после ссылки, при прочих условиях, мог бы быть признан в качестве части имени (смотрите 9.4.5 «Конец Ссылки» в [SGML]).

abc &lt def     => "abc ","<"," def"
abc &#60 def    => "abc ","<"," def"

Амперсанд признаётся в качестве символа разметки только в тех случаях, когда за ним следует буква либо символ `#' и цифра:

abc & lt def    => "abc & lt def"
abc &# 60 def    => "abc &# 60 def"

Полезным методом по преобразованию обычного текста в HTML, является метод, включающий в себя замену каждого '<', '&' и '>' символа с помощью ссылки на сущности символов или числовой ссылки на символ следующим образом:

               ССЫЛКА НА   ЧИСЛОВАЯ
       СИМВОЛ  СУЩН СИМВ   ССЫЛ НА СИМВ  ОПИСАНИЕ СИМВОЛА
       ------  ----------  ------------  ----------------
         &     &amp;       &#38;         Амперсанд 
         <     &lt;        &#60;         Меньше, чем
         >     &gt;        &#62;         Больше чем

(5)

Теги

Теги определяют границы таких элементов, как заголовки, абзацы, списки, выделения символа, а также ссылки. Большинство HTML элементов обозначаются в документе в виде начального тега, который указывает имя элемента и его атрибуты, после чего следует содержимое, которое завершается конечным тегом. Начальные теги обозначаются символами `<' и `>'; конечные теги обозначаются символами `</' и `>'. Примером может служить:

<H1>Это Заголовок</H1>

Некоторые элементы имеют только начальный тег и не имеют конечного тега. Например, чтобы создать разрыв строки, используйте тег `<BR>'. Кроме того, конечные теги некоторых других элементов, таких как Абзац (`</P>'), Пункт Списка (`</LI>'), Определение Термина (`</DT>') и Определение Описания (`</DD>') могут быть опущены.

Содержимое элемента представляет собой последовательность строк символов данных и вложенных элементов. Некоторые элементы, такие как якоря, не могут быть вложенными. Якоря и выделение символов могут быть помещены внутрь других конструкций. Сморите ОТД HTML, раздел ОТД HTML для получения более подробной информации. (6)

Имена

Имя состоит из буквы, за которой могут следовать буквы, цифры, точки или дефисы. Длина имени ограничена 72 символами в соответствии с определением параметра `NAMELEN' в SGML объявлении для HTML, в разделе SGML Объявления для HTML. Имена элементов и атрибутов не чувствительны к регистру, за исключением имён сущностей. Например, `<BLOCKQUOTE>', `<BlockQuote>' и `<blockquote>' эквивалентны, в то время как `&amp;' отличается от `&AMP;'.

В начальном теге, имя элемента должно следовать сразу после открывающего разделителя тега, т.е. после `<'.

Атрибуты

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

Значением атрибута может быть либо:

В этом примере, img это имя элемента, src это имя атрибута, а `http://host/dir/file.gif' является значением атрибута:

<img src='http://host/dir/file.gif'>

Полезным методом по вычислению значения литерала атрибута для данной строки является метод, заключающийся в замене каждой кавычки и пробельного символа ссылкой на сущность символа или числовой ссылкой на символ следующим образом:

               ССЫЛКА НА   ЧИСЛОВАЯ
       СИМВОЛ  СУЩН СИМВ   ССЫЛ НА СИМВ  ОПИСАНИЕ СИМВОЛА
       ------  ----------  ------------  -----------------
         HT                &#9;          Табуляция
         LF                &#10;         Перевод Строки
         CR                &#13;         Возврат Каретки
         SP                &#32;         Пробел
         "     &quot;      &#34;         Кавычка 
         &     &amp;       &#38;         Амперсанд 

Например:

<IMG SRC="image.jpg" alt="Первый &quot;реальный&quot; пример">

Параметр `NAMELEN' в SGML объявлении (раздел SGML Объявление для HTML) ограничивает длину значения атрибута до 1024 символов.

Такие атрибуты, как ISMAP и COMPACT могут быть написаны с использованием минимизированного синтаксиса (смотрите 7.9.1.2 «Пропуск Имени Атрибута» в [SGML]). Разметка:

<UL COMPACT="compact">

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

<UL COMPACT>

(9)

Комментарии

Для включения комментариев в HTML документ, используйте объявление комментария. Объявление комментария состоит из `<!', за которым следует от нуля и более комментариев, после которых следует `>'. Каждый комментарий начинается с `--' и включает в себя весь текст до следующего вхождения `--'. В объявлении комментария, пробельные символы допускаются после каждого комментария, но не перед первым комментарием. Всё объявление комментария игнорируется. (10)

Например:

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<HEAD>
<TITLE>Пример HTML Комментария</TITLE>
<!-- Id: html-sgml.sgm,v 1.5 1995/05/26 21:29:50 connolly Exp  -->
<!-- другой -- -- комментарий -->
<!>
</HEAD>
<BODY>
<p> <!- не комментарий, просто обычные старые символьные данные ->

Публичные Текстовые Идентификаторы HTML

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

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">

Это объявление типа документа относится к ОТД HTML в разделе ОТД HTML. (11)

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0 Level 2//EN">

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

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0 Level 1//EN">

Это объявление типа документа относится к ОТД HTML 1-го уровня, в разделе ОТД HTML 1-го Уровня. В документах 1-го уровня не должны появляться элементы формы.

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0 Strict//EN">
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0 Strict Level 1//EN">

Это объявление типа документа относится к ОТД HTML, в разделе Строгое ОТД HTML и Строгое ОТД HTML 1-го уровня. Они относятся к структурно более жёсткому определению HTML.

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

Пример HTML Документа

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<HTML>
<!-- Вот хорошее место, чтобы разместить комментарий. -->
<HEAD>
<TITLE>Структурный Пример</TITLE>
</HEAD><BODY>
<H1>Первый Заголовок</H1>
<P>Это абзац в примере HTML-файла. Имейте в виду, 
что название не отображается в тексте документа, 
но отображается заголовок (определяется H1).</P>
<OL>
<LI>Первый пункт в упорядоченном списке.
<LI>Второй пункт в упорядоченном списке.
  <UL COMPACT>
  <LI> Обратите внимание, что списки могут быть вложенными;
  <LI> Для облегчения чтения исходного кода HTML могут 
       быть использованы пробелы.
  </UL>
<LI>Третий пункт в упорядоченном списке.
</OL>
<P>Это дополнительный абзац. Технически, абзацам не требуются 
конечные теги, хотя они допустимы. Вы можете задействовать
подсветку символов в абзаце. <EM>Подчёркивается значимость 
этой фразы абзаца.</EM> Обратите внимание, что
конечный тег &lt;/P&gt; был опущен.
<P>
<IMG SRC ="triangle.xbm" alt="Внимание: ">
Обязательно прочитайте эти <b>важные инструкции</b>.
</BODY></HTML>

Перейти к первому, предыдущему, следующему, последнему разделу, оглавлению.