На главную
Определения комбинаций параметров
HTML DTD начинается с ряда определений комбинаций параметров.
Определение комбинации
параметров определяет макрос, на который можно
ссылаться в любом месте DTD. Эти макросы не отображаются в документах
HTML, они отображаются только в DTD. Другие типы макросов, называемые
ссылками на символы, могут использоваться в тексте документа в
формате HTML или в значениях атрибутов.
Когда на комбинацию параметров ссылаются в DTD по имени, она
разворачивается в строку.
Определение комбинации параметров начинается с ключевого слова
<!ENTITY %, за которым следует имя entity, строка в кавычках, в
которую разворачивается entity и наконец закрывающий >.
Экземпляры комбинаций параметров в DTD начинаются со знака "%", затем
идет имя комбинации и заканчивается необязательным символом ";".
В следующем примере определяется, в какую строку будет
разворачиваться "%fontstyle;".
<!ENTITY % fontstyle "TT | I | B | BIG | SMALL">
Строка, в которую разворачивается комбинация параметров, может
содержать другие имена комбинаций параметров. Эти имена разворачиваются
рекурсивно. В следующем примере "%inline;" комбинация параметров
включает комбинации "%fontstyle;", "%phrase;", "%special;" и
"%formctrl;".
<!ENTITY % inline "#PCDATA | %fontstyle; | %phrase; | %special; | %formctrl;">
Вы часто будете встречать в
HTML DTD два DTD entities:
"%block;"
"%inline;". Они
используются, если модель содержимого включает
элементы уровня блока и встроенные элементы соответственно
(определенные в разделе
глобальная структура документа HTML).
HTML DTD состоит из объявлений
типов элементов и их
атрибутов. Объявление начинается с ключевого слова <!ELEMENT и
заканчивается символом >. Между ними указываются:
- Имя элемента.
-
Обязателен ли конечный тэг
элемента. Два символа переноса после имени элемента означают, что
начальный и конечный тэги являются обязательными. Один символ
переноса, за которым следует буква "O", указывает, что конечный тэг
можно опустить. Две буквы "O" указывают на то, что можно опустить
как начальный, так и конечный тэги.
- Содержимое элемента, если таковое имеется. Допустимым содержимым
элемента называется его
модель содержимого.
Типы элементов, не имеющие содержимого, называются
пустыми элементами.
Модель содержимого для таких типов элементов объявляется при помощи
ключевого слова "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é's adventures
of Tintin" содержит ссылку на комбинацию символов для отображения
символа "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 как & -- это определяется типом данных SGML
#PCDATA.
Некоторые типы элементов HTML используют дополнительную функцию SGML
для исключения элементов из модели содержимого.
Исключенным элементам
предшествует символ переноса. Явные исключения имеют приоритет по
отношению к допустимым элементам.
В этом примере
-(A) означает, что элемент
A не может находиться в другом
элементе
A (то есть ссылки не могут быть
вложенными).
<!ELEMENT A - - (%inline;)* -(A)>
Помните, что тип элемента
A является частью DTD комбинации
параметров "%inline;", но явно исключается выражением -(A).
Точно так же следующее объявление типа элемента
FORM запрещает вложенные формы:
<!ELEMENT FORM - - (%block;|SCRIPT)+ -(FORM)>
Объявление атрибутов, которые может
иметь элемент, начинается с ключевого слова <!ATTLIST. За ним следует
имя элемента с вопросительным знаком, список определений атрибутов и
закрывающий символ >. Каждое определение атрибута - это тройка,
определяющая:
- Имя атрибута.
- Тип значения атрибута или явный набор допустимых значений.
Значения, определенные явным образом при помощи DTD,
учитывают регистр. Подробнее о
типах значений атрибутов см. в разделе
основные типы данных HTML.
- Является ли значение атрибута по умолчанию
неявным (ключевое
слово "#IMPLIED"), то есть значение по умолчанию устанавливается
агентом пользователя (в некоторых случаях с использованием
наследования от родительских элементов); всегдаобязательным
(ключевое слово "#REQUIRED"); или
фиксированным данным
значением (ключевое слово "#FIXED"). Некоторые определения атрибутов
явным образом указывают значение атрибута по умолчанию.
В этом примере атрибут
имя определен для элемента
MAP. Атрибут на является обязательным
для этого элемента.
<!ATTLIST MAP
name CDATA #IMPLIED
>