ИНФОРМАЦИЯ,    ДИЗАЙН,    ПЕРЕВОДЫ,    РЕКЛАМА   .   .   .
w a p - с а й т
Информационный портал
Сегодня:  
admin@aranea.ru
+79068922256

  aranea.ru || Спецификация HTML 4.01 | 3. О SGML и HTML

3. О SGML и HTML

3.3. Как читать файл DTD для HTML

3.3.1. Комментарии в DTD
3.3.2. Определения примитивов параметров
3.3.3. Объявление элементов
   • Определение модели содержания
3.3.4. Объявление атрибутов
   • Примитивы DTD в определениях атрибутов
   • Булевы атрибуты

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

3.2.1 Элементы

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

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

Имя элемента появляется в начальном теге (пишется - <element-name>) и в конечном теге (пишется - </element-name>); обратите внимание на то, что обратная черта (slash) находится перед именем элемента в конечном теге. Например, начальный и конечный тег элемента UL ограничивает пункты списка:

<UL>
<LI><P>...list item 1...
<LI><P>...list item 2...
</UL>

Некоторые типы элементов HTML позволяют авторам опускать конечные теги (например, P и LI). Немногие типы элементов тоже могут позволить опустить начальные теги; например, HEAD и BODY. Файл HTML DTD указывает для каждого типа элемента, требуется ли начальный или конечный тег.

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

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

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

Например, следующий параграф:

<P>This is the first paragraph.</P>
...a block element...

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

<P>This is the first paragraph.
...a block element...

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

<DIV>
<P>This is the paragraph.
</DIV>

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

Элементы не являются тегами. Некоторые люди обращаются к элементам, как к тегам (например, "the P tag" – "Тег Р"). Помните, что элемент – это одно, а тег (начальный и конечный) – это другое. Например, элемент HEAD всегда присутствует, даже если оба тега HEAD, начальный и конечный, отсутствуют в разметке.

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

3.2.2 Атрибуты

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

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

<H1 id="section1">
This is an identified heading thanks to the id attribute
</H1> 

По умолчанию язык SGML требует, чтобы все значения атрибутов были бы ограничены либо двойными кавычками (десятичное значение ASCII - 34), либо одинарными (десятичное значение ASCII - 39). Одинарные кавычки могут быть включены внутрь значения атрибута, когда само значение заключено в двойные кавычки, и наоборот. Авторы могут также использовать числовые замены для предоставления двойных кавычек (& # 3 4 ;) и одинарных (& # 3 9 ;). Для двойных кавычек авторы также могут использовать примитив символа - & q u o t ;.

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

Имена атрибутов всегда не чувствительны к регистру.

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

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

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

  • "& l t ; " представляет знак <.
  • "& g t ; " представляет знак >.
  • "& q u o t ; " представляет символ ".
  • "& # 2 2 9 ; " (десятичный) представляет буку "a" с маленьким кружком над ней.
  • "& # 1 0 4 8 ; " (десятичный) представляет кириллическую заглавную букву "I".
  • "& # x 6 C 3 4 ; " (шестнадцатиричный) представляет китайский символ "вода".

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

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

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

<!-- this is a comment -->
<!-- and so is this one,
    which occupies more than one line -->

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

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

Обратите внимание, что комментарии являются разметкой.

3.3 Как читать файл DTD для HTML

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

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

В DTD комментарии могут распространяться на несколько строк, и они ограничены парой знаков "--", например:

<!ELEMENT PARAM - O EMPTY       -- named property value -->

Здесь комментарий "named property value" объясняет использование типа элемента PARAM. Комментарии в DTD только информативные.

3.3.2 Определения примитивов параметров

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

Когда к примитиву параметра обращаются по имени в файле DTD, то он расширяется до строки.

Определение примитива параметра начинается с ключевого слова <!ENTITY %, с последующим именем примитива (строки, заключенной в кавычки) и, в конце, - закрывающий символ >. Примеры примитивов параметра в DTD начинаются с "%", затем следует имя примитива параметра, и завершает все это факультативные точка с запятой ";".

Следующий пример определяет строку, которая будет расширять примитив "%fontstyle;".

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

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

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

Вы часто можете встречать два примитива DTD в файле HTML DTD: "%block;" "%inline;". Они используются тогда, когда модель содержания включает элементы блочного и внутристрочного уровня, соответственно (эти примитивы определяются в разделе по глобальной структуре 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 (например, элемент LABEL содержит примеры "%inline;" примитива параметров).
  • Текст документа (указанного конструкцией языка SGML - "#PCDATA"). Текст может содержать специальные символы. Вызов, который начинается с символа & и заканчивается точкой с запятой (например, "Herg & e a c u t e ;'s adventures of Tintin"), включает ссылку на примитив символа для символа "e acute" - é).

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

( ... )
Ограничивает группу.
A
Должен появляться только один раз.
A+
Должен появляться один или более раз.
A?
Должен появляться ноль или один раз.
A*
Должен появляться ноль или более раз.
+(A)
Может появляться.
-(A)
Не должен появляться.
A | B
Должна появляться либо A, либо B, но не оба одновременно.
A , B
Должны появляться оба, A и B, в таком порядке.
A & B
Должны появляться оба, A и B, в любом порядке.

Ниже приведены примеры из файла HTML DTD:

   <!ELEMENT UL - - (LI)+>

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

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

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

   <!ELEMENT OPTION - O (#PCDATA)>

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

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

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

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

Обратите внимание на то, что тип элемента A является частью примитива параметра "%inline;" в DTD, но исключается явным образом благодаря -(A).

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

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

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

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

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

В следующем примере атрибут name определяется для элемента 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 в определениях атрибутов

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

В следующем примере мы видим, что перечень определений атрибутов для элемента LINK начинается с примитива параметра "%attrs;".

<!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 --
  >

Начальный тег: обязательный, Конечный тег: запрещенный

Примитив параметров "%attrs;" определяется следующим образом:

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

Примитив параметров "%coreattrs;" в определении "%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 --"
  >

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

Похожим образом, DTD определяет примитив параметров "%URI;", как расширяющийся в строке "CDATA".

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

Как показывает этот пример, примитив параметров "%URI;" предоставляет читателям файла DTD информацию, касающуюся типа данных, ожидаемого для атрибута. Также, примитивы определенны для "%Color;", "%Charset;", "%Length;", "%Pixels;" и т.д.

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

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

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

Следующий пример определяет атрибут selected как булев атрибут.

selected     (selected)  #IMPLIED  -- option is pre-selected --

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

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

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

<OPTION selected>

вместо:

<OPTION selected="selected">

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


← Назад | Вперед →
Copyright © 2006 -  aranea.ru