![]() |
||
|
aranea.ru || Спецификация HTML 4.01 | 3. О SGML и HTML
3. О SGML и HTML3.3. Как читать файл DTD для HTML3.3.1. Комментарии в DTD3.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-документ. Они полезны для обращения к редко используемым символам, или к таким, которые трудно или невозможно ввести компьютерным инструментарием. Вы будете встречать такие символы постоянно в этом документе; они начинаются со знака "&" и заканчиваются точкой с запятой (;). Самые простые примеры включают:
Мы обсудим замещающие символы 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 начинает объявление, и символ > заканчивает его. Между ними определяют:
В следующем примере:
<!ELEMENT UL - - (LI)+>
Этот пример иллюстрирует объявление типа пустого элемента:
<!ELEMENT IMG - O EMPTY>
Определение модели содержанияМодель содержания описывает, что может содержать пример типа элемента. Определения модели содержания могут включать:
Модель содержания элемента определяется следующим синтаксисом. Пожалуйста, обратите внимание на то, что список внизу является упрощением правил синтаксиса языка SGML.
Ниже приведены примеры из файла 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 начинает объявление атрибутов, которые элемент может принимать. Затем идет имя элемента, список определений атрибутов и закрывающий символ >. Каждое определение атрибута состоит из трех элементов, которые устанавливают:
В следующем примере атрибут 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"> Авторам следует знать, что многие устройства вывода распознают только минимизированную форму булевых атрибутов, а не полную. |