Программа, обрабатывающая документ с таким заголовком, сможет по публичному идентификатору понять, что документ создан на языке 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
.
Определение элемента задает имя и тип содержимого элемента в следующем виде:
>
Имя элемента должно начинаться с буквы, подчеркивания (">_
") или двоеточия (">:
") и содержать буквы, цифры, некоторые знаки пунктуации (такие, как ">_
" — подчеркивание, ">:
" — двоеточие, ">.
" — точка, ">-
" — тире или знак минуса) и модифицирующие символы (см. разд. "Базовые продукции ХМL" данной главы).
Примером имени элемента может быть ">A
", ">B:12
", ">MyEasyName
", ">doc.xml
".
В качестве содержимого элемента может быть указано:
□ >EMPTY
, в случае, когда элемент обязан быть пустым;
□ >ANY
, в случае, когда элемент может содержать что угодно;
□ формальное правило, определяющее элементы, и данные, которые может содержать элемент, а также порядок их следования.