3 Об SGML и HTML

В этом разделе документа Вы познакомитесь с SGML и узнаете о его отношении к HTML. Полное описание SGML не входит в этот стандарт (см. [ISO8879]).

3.1 Введение в SGML

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 характеризуется:

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

Спецификация HTML 4.0 включает объявление SGML , три определения типа документов (описание их см. в разделе информация о версии HTML ) и список character references.

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

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

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

3.2.1 Элементы

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

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

3.2.2 Атрибуты

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

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

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

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

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

Имена атрибутов всегда учитывают регистр

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

Список всех атрибутов, определенных в этой спецификации, приводится в указателе атрибутов.

3.2.3 Ссылки на символы

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

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

Ссылки на символы в HTML подробно обсуждаются дальше в этом разделе под заголовком набор символов документа HTML. В спецификации также содержится список ссылок на символы, которые могут использоваться в документах в формате HTML 4.0.

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

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

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

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

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

3.3 Как читать HTML DTD

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

3.3.1 Комментарии DTD

В DTD комментарии могут занимать несколько строк. В DTD комментарии отделяются парой меток "--", например,

<!ELEMENT PARAM - O EMPTY       -- значение именованного свойства -->
Здесь комментарий "значение именованного свойства" объясняет использование типа элемента PARAM. Комментарии в DTD носят информативный характер.

3.3.2 Определениея Parameter entity

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).

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

HTML DTD состоит из объявлений типов элементов и их атрибутов. Объявление начинается с ключевого слова <!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).
  • DTD entities (например, элемент LABEL включают экземпляры "%inline;" parameter entity).
  • Текст документа (указываемый SGML-конструкцией "#PCDATA"). Текст может включать ссылки на символы. Помните, что они начинаются с & и заканчиваются точкой с запятой (например, "Herg&eacute;'s adventures of Tintin" содержиту ссылку на character entity для символа "e со знаком ударения").

Модель содержимого элемента указывается с использованием следующего синтаксиса:

( ... )
Разделяет группы.
A | B
Происходит A или B, но не оба.
A , B
Происходят A и B в указанном порядке.
A & B
Происходят A и B в любом порядке.
A?
A происходит ноль или один раз.
A*
A происходит ноль или более раз.
A+
A происходит один или несколько раз.

Вот некоторые примеры HTML DTD:

   <!ELEMENT UL - - (LI)+>

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

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

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

   <!ELEMENT OPTION - O (#PCDATA)>

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

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

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

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

Помните, что тип элемента A является частью DTD parameter entity "%inline;", но явно исключается выражением -(A).

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

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

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

Объявление атрибутов, которые может иметь элемент, начинается с ключевого слова <!ATTLIST. За ним следует имя элемента in question, список определений атрибутов и закрывающий символ >. Каждое определение атрибута - это тройка, определяющая:

  • Имя атрибута.
  • Тип значения атрибута или явный набор допустимых значений. Значения, определенные явным образом при помощи DTD, учитывают регистр. Подробнее о типах значений атрибутов см. в разделе основные типы данных HTML.
  • Является ли значение атрибута по умолчанию неявным (ключевое слово "#IMPLIED"), то есть значение по умолчанию устанавливается агентом пользователя (в некоторых случаях с использованием наследования от родительских элементов); всегдаобязательным (ключевое слово "#REQUIRED"); или фиксированным данным значением (ключевое слово "#FIXED"). Некоторые определения атрибутов явным образом указывают значение атрибута по умолчанию.

В этом примере атрибут имя определен для элемента 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}.

DTD entities в определениях атрибутов 

Определения атрибутов могут также содержать ссылки на 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;" разворачивается следующим образом:

<!ENTITY % coreattrs
 "id          ID             #IMPLIED  -- document-wide unique id --
  class       CDATA          #IMPLIED  -- space separated list of classes --
  style       %StyleSheet;   #IMPLIED  -- associated style info --
  title       %Text;         #IMPLIED  -- advisory title/amplification --"
  >

The "%attrs;" parameter entity определен для удобства, поскольку эти атрибуты определены для большинства типов элементов HTML.

Таким же образом DTD определяет "%URI;" parameter entity как расширение строки "CDATA".

<!ENTITY % URI "CDATA"
    -- a Uniform Resource Identifier,
       see [URI]
    -->

Как показано в этом примере, parameter entity "%URI;" предоставляет читателям DTD больше информации, чем для типа данных, ожидаемого для этого атрибута. Похожие entities определены для "%Color;", "%Charset;", "%Length;", "%Pixels;" и т.д.

Boolean attributes 

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

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

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

selected     (selected)  #IMPLIED  -- reduced inter-item spacing --

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

<OPTION selected="selected">
...contents...
<OPTION>

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

<OPTION selected>

вместо:

<OPTION selected="selected">

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



Наш баннер
Вы можете установить наш баннер на своем сайте или блоге, скопировав этот код:
RSS новости