Книга: Технология XSLT

Декларация типа документа (DTD)

Декларация типа документа (DTD)

Декларация типа документа состоит из одного или нескольких правил-ограничений структуры документа. В частности, DTD позволяет задавать следующие правила:

ELEMENT — определение элемента;

ATTLIST — определение списка атрибутов элемента;

ENTITY — определение сущности;

NOTATION — определение нотации.

Эти определения могут быть заданы с использованием конструкции DOCTYPE непосредственно в документе:

<!DOCTYPE advert [
<!-- определение -->
<!-- определение -->
и т.д.
]>

Другой возможностью определения декларации документа является использование внешнего файла:

<!DOCTYPE advert SYSTEM "advert.dtd">

В этом случае можно также дополнять внешние определения внутренними:

<!DOCTYPE advert SYSTEM "advert.dtd" [
<!-- определение -->
<!-- определение -->
и т.д.
]>

Декларация типа документа определяется следующей EBNF-продукцией:

[28] doctypedecl ::= '<!DOCTYPE' S Name (S ExternalID)? S?
                     ('[' (markupdecl | DeclSep)* ']' S?)? '>'

Имя, соответствующее продукции Name, которая идет следом за ключевым словом DOCTYPE, определяет имя корневого элемента ХМL-документа. В предыдущем примере в корне документа должен стоять элемент advert.

Выражение (S ExternalID) ? указывает на то, что декларация типа документа может указываться во внешнем источнике (например, в файле), который описывается внешним идентификатором ExternalID.

[75] ExternalID ::= 'SYSTEM' S SystemLiteral
                    | 'PUBLIC' S PubidLiteral S SystemLiteral

В случае системного идентификатора ("SYSTEM"), SystemLiteral определяет URI определения типа документа. В случае публичного идентификатора, к этому параметру добавляется PubidLiteral, сообщающий дополнительную информацию о ресурсе. Обрабатывающее программное обеспечение может включать в себя DTD для заданного публичного идентификатора. Например, документы, написанные на языке XHTML, должны начинаться следующим объявлением:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Basic 1.0//EN"
 "http://www.w3.org/TR/xhtml-basic/xhtml-basic10.dtd">

Программа, обрабатывающая документ с таким заголовком, сможет по публичному идентификатору понять, что документ создан на языке XHTML, а значит, обрабатывать его нужно в соответствии со стандартом этого языка. Если же обрабатывающая программа не в курсе определений XHTML, она сможет загрузить декларацию типа по адресу http://www.w3.org/TR/xhtml-basic/xhtml-basic10.dtd. Публичные идентификаторы, как правило, используются в языках, получающих широкое распространение, поскольку в этом случае формат логической структуры будет известен и без загрузки DTD.

Выражение ('[' (markupdecl | DeclSep) * ']' S?) ? в продукции doctypedecl означает, что в декларации типа документа в квадратных скобках может содержаться последовательность нетерминалов markupdecl и DeclSep.

Первый из этих нетерминалов, markupdecl, показывает, определения какого вида содержатся в DTD:

[29] markupdecl ::= elementdecl
                    | AttlistDecl
                    | EntityDecl
                    | NotationDecl
                    | PI
                    | Comment

С правилами PI и Comment мы уже знакомы — в данной продукции они показывают, что в DTD также можно использовать инструкции по обработке и комментарии.

Нетерминалы elementdecl, AttlistDecl, EntityDecl и NotationDecl соответствуют определениям элемента, списка атрибутов, сущности и нотации. Они будут подробно разобраны в следующих четырех разделах.

Нетерминал DeclSep соответствует разделителю объявлений, которые перечисляются в DTD. Этот разделитель может быть либо пробельным пространством, либо параметризованной сущностью:

[28а] DeclSep ::= PEReference | S

В случае, если определения в DTD разделяются сущностью-параметром, ее содержимое интерпретируется как обычные определения вида markupdecl.

Оглавление книги


Генерация: 2.303. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз