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

  1. данный документ является переводом документа «Understanding HTML and SGML»;
  2. данный документ может содержать неточности, опечатки и ошибки перевода;
  3. официальным документом по данной тематике является оригинальный документ на английском языке, расположенный на сайте W3C.

Понимание HTML и SGML

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

В случае возникновения какого-либо явного конфликта между стандартами HTML и SGML, стандарт SGML является определяющим.

Каждый SGML-документ состоит из трёх частей:

SGML объявление
Связывает SGML объём обработки и синтаксис имён лексем для определённых значений. Например, SGML-объявление в ОТД HTML определяет, что строкой, которая открывает конечный тег является </, а максимальная длина имени составляет 72 символа.
Пролог
Включает в себя один или несколько объявлений типа документа (ОТД), которые определяют типы элементов, отношения элементов и атрибутов. ОТД HTML 3.0 обеспечивает окончательное определение допустимого синтаксиса для HTML 3.0 документов.
Ссылки
Может быть репрезентирована разметкой. Экземпляр, который содержит данные и разметку документа.

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


Понимание HTML-Элементов

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

    <H1>Это Заголовок</H1>
    <P>Это абзац.

Некоторые элементы указываются в виде одного лишь начального тега. Например, для того чтобы создать разрыв строки, используйте <BR>. Кроме того, конечные теги некоторых других элементов (например, P, LI, DT, DD), могут быть опущены, так как положение конечного тега явно вытекает из контекста.

Содержимое элемента представляет собой последовательность символов и вложенных элементов. Некоторые элементы, такие как якоря, не могут быть вложенными. Якоря и выделение символов могут быть помещены внутрь других конструкций. Модель содержимого для тега определяет синтаксис, разрешённый для содержимого.

Примечание: SGML объявление для HTML определяет SHORTTAG YES, что означает, что присутствуют и другие допустимые синтаксисы для тегов, таких как теги NET, <EM/.../; пустые начальные теги, <>; и пустые конечные теги, </>. Пока что поддержка этих идиом развёрнута не широко и поэтому настоятельно не рекомендуется их использование.


Имена

Имя элемента следует сразу за разделителем открывающего тега. Имя элемента состоит из буквы, за которой следует до 72 букв, цифр, точек или дефисов. Имена не чувствительны к регистру. Например, H1 эквивалентно h1. Это ограничение в 72 символа задаётся параметром NAMELEN в SGML объявлении для HTML 3.0.


Атрибуты

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

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

  1. Строковый литерал, заключённый в одинарные или двойные кавычки
  2. Имя лексемы (последовательность букв, цифр, точек или дефисов)

В данном примере «a» это имя элемента, «href» это имя атрибута, а «http://host/dir/file.html» это значение атрибута:

    <A HREF="http://host/dir/file.html">

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

    <IMG SRC="eq1.ps" alt="a &#62; b">

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

    <IMG SRC="image.ps" alt="Первый 'реальный' пример">

В качестве альтернативы, вы так же можете использовать такую репрезентацию символа &quot; как в:

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

Длина значения атрибута (после замены ссылок на сущности символов и числовых ссылок на символы) ограничена 1024 символами. Это число определено параметром LITLEN в SGML объявлении для HTML 3.0.

Примечание: Некоторые реализации в имени лексемы позволяют любой символ, кроме пробела или >. Значения атрибутов должны быть заключены в кавычки только, если они не удовлетворяют синтаксису имени лексемы.

Атрибуты с явным значением NAME (например, ISMAP, COMPACT) могут быть записаны с использованием минимизированного синтаксиса. Разметка:

    <UL COMPACT="compact">

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

    <UL COMPACT>

Примечание: Некоторые реализации могут не понять, использованного вами минимизированного синтаксиса.


Неопределённые Теги и Имена Атрибутов

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

WWW-приложениям, читающим HTML-документы и обнаруживающим теги или имена атрибутов, которые они не понимают, следует вести себя так, как будто, в случае наличия такого тега, тега там не было, но вместо него было его содержимое, или в случае атрибута -- атрибут не был представлен.


Специальные Символы

Символы между тегами репрезентируют текст, составленный из набора символов ISO-Latin-1, который является надмножеством ASCII. Поскольку некоторые символы будут интерпретированы как разметка, их следует репрезентировать в виде разметки -- ссылки на сущности символов или числовых ссылок на символ, например, символ «&» должен быть репрезентирован как сущность &amp;. Смотрите раздел Специальные Символы, определённый в данной спецификации для получения более подробной информации.


Комментарии

Для того, чтобы в HTML-документ добавить комментарии, которые будут проигнорированы анализатором, необходимо окружить нужный участок документа разделителями <!-- и -->. После разделителя комментария, весь текст до следующего вхождения разделителя --> игнорируется. Поэтому комментарии не могут быть вложенными. Допускается пробельное пространство между закрывающим -- и >, но не между открывающим <! и --.

Например:

<HEAD>
<TITLE>HTML Руководство: Рекомендации по Использованию</TITLE>
<!-- Id: Text.html,v 1.6 1994/04/25 17:33:48 connolly Exp -->
</HEAD>

Примечание: Некоторые исторические реализации неправильно рассматривают знак >, заканчивающий комментарий


Официальные Варианты HTML 3.0

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

HTML.Recommended

Некоторые функции языка необходимы для совместимости, ввиду их широко распространённого применения, но они могут поставить под угрозу структурную целостность документа. Сущность HTML.Recommended следует определять как INCLUDE в подмножестве ОТД, чтобы позволить более нормативную версию HTML 3.0, которая устраняет перечисленные выше функции. Например:

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 3.0//EN"
[ <!ENTITY % HTML.Recommended "INCLUDE"> ] >
В частности, это предотвращает появление текста за пределами блочных элементов.

HTML.Deprecated

По умолчанию для обратной совместимости, сущность %HTML.Deprecated определённая как INCLUDE, позволяет использование некоторых функций, которые теперь являются нерекомендованными. Эти функции могут быть исключены путём определения этой сущности как IGNORE в подмножестве ОТД. Например:

    <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 3.0//EN" [
<!ENTITY % HTML.Deprecated "IGNORE"> ] >

Примечание: определение %HTML.Recommended как INCLUDE автоматически устанавливает %HTML.Deprecated в IGNORE.

Либеральный принцип состоит в том, что вы принимаете, а строгий принцип в том, что вы создаёте; HTML агентам пользователей рекомендуется принимать синтаксис, соответствующий спецификации с включённой поддержкой %HTML.Deprecated, в то время как HTML агентам пользователей, создающим HTML рекомендуется создавать документы, которые соответствуют спецификации с включённой поддержкой %HTML.Recommended.