Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Глава 17. Как читать HTML DTD



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

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

В DTD комментарии могут занимать несколько строк.

В DTD комментарии отделяются парой меток «--», например,

<! ELEMENT PARAM — O EMPTY -- значение именованного свойства -->

Здесь комментарий «значение именованного свойства» объясняет использование типа элемента PARAM. Комментарии в DTD носят информативный характер.

Определения 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 и inline elements соответственно.

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

HTML DTD состоит из объявлений типов элементов и их атрибутов. Объявление начинается с ключевого слова <! ELEMENT и заканчивается символом >. Между ними указываются:

Имя элемента

Если конечный тэг элемента необязателен Два символа переноса после имени элемента означают, что начальный и конечный тэги являются обязательными. Один символ переноса, за которым следует буква « O », указывает, что конечный тэг можно опустить. Две буквы «O» указывают на то, что можно опустить как начальный, так и конечный тэги.

Содержимое элемента

Если таковое имеется. Допустимым содержимым элемента называется его модель содержимого. Типы элементов, не имеющие содержимого, называются пустыми элементами. Модель содержимого для таких типов элементов объявляется при помощи ключевого слова « EMPTY ».

В этом примере: <! ELEMENT UL — — (LI)+> объявляется тип элемента UL. Два знака переноса указывают, что начальный тэг < UL> и конечный тэг < /UL> для этого элемента обязательны.

Модель содержимого для типа элемента

По крайней мере один элемент LI. В примере показано объявление пустого типа элемента — объявляется тип элемента IMG:

<! ELEMENT IMG — O EMPTY>

Знак переноса, за которым следует буква « 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)>

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

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

Имя атрибута

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

В следующем примере атрибут имя определен для элемента MAP. Атрибут на является обязательным для этого элемента.

<! ATTLIST MAP name CDATA #IMPLIED >

Тип значений, допустимых для этого атрибута, дается как CDATA, тип данных SGML. CDATA — это текст, который может содержать ссылки на символы.

В следующих примерах показано несколько определений атрибутов:

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

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


Поделиться:



Популярное:

Последнее изменение этой страницы: 2017-03-03; Просмотров: 553; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.025 с.)
Главная | Случайная страница | Обратная связь