Чтение онлайн

на главную

Жанры

Технология XSLT

Валиков Алексей Н.

Шрифт:

Выражение

('[' (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
.

Определение элемента

Определение элемента задает имя и тип содержимого элемента в следующем виде:

<!ELEMENT имя содержимое>

Имя элемента должно начинаться с буквы, подчеркивания ("

_
") или двоеточия ("
:
") и содержать буквы, цифры, некоторые знаки пунктуации (такие, как "
_
" — подчеркивание, "
:
" — двоеточие, "
.
" — точка, "
" — тире или знак минуса) и модифицирующие символы (см. разд. "Базовые продукции ХМL" данной главы).

Примером имени элемента может быть "

A
", "
B:12
", "
MyEasyName
", "
doc.xml
".

В качестве содержимого элемента может быть указано:

□ 

EMPTY
, в случае, когда элемент обязан быть пустым;

□ 

ANY
, в случае, когда элемент может содержать что угодно;

□ формальное правило, определяющее элементы, и данные, которые может содержать элемент, а также порядок их следования.

Первые два случая определения элемента довольно просты. Их использование может быть продемонстрировано на следующем примере:

Декларация

<!DOCTYPE advert [

<!ELEMENT advert ANY>

<!ELEMENT product ANY>

<!ELEMENT classified EMPTY>

]>

определяет

документ с корневым элементом
advert
, в котором могут встречаться также элементы
product
и
classified
, причем элементы
advert
и
product
могут содержать любые данные и любые из объявленных элементов, а элемент
classified
всегда должен быть пустым.

Приведем пример документа, построенного в соответствии с этой декларацией.

Листинг 1.3. Документ с декларацией типа

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE advert [

<!ELEMENT advert ANY>

<!ELEMENT product ANY>

<!ELEMENT classified EMPTY>

]>

<advert>

 <product>

Покупайте наших слонов!

 </product>

 <classified/>

</advert>

В третьем случае содержимое элемента определяется при помощи формальных правил, которые очень похожи на те, которые используются в расширенных формах Бэкуса-Наура. Подобно тому, как в EBNF формальные правила используются для того, чтобы стандартизировать последовательность символов, составляющую конструкции некоторого языка, в определениях элементов они используются для описания содержимого элемента — последовательности из символьных данных и дочерних элементов.

Количество, с которым элемент может появляться в этой последовательности, формально записывается с использованием символов-модификаторов "

*
", "
?
", "
+
", которые имеют следующие значения:

□ 

а?
— означает, что элемент
а
может быть пропущен в последовательности;

□ 

а
— означает, что элемент
а
должен присутствовать в последовательности на этом месте ровно один раз;

□ 

а*
— задает последовательность из нуля или более элементов
а
;

□ 

a+
— задает последовательность из одного или более элементов
а
.

Кроме того, содержимое может моделироваться как перечисление и выбор элементов.

Элементы перечисляются через запятую в круглых скобках, например

(a, b, c)
— это последовательность, состоящая из элементов
a
,
b
,
c
. Такая запись означает, что первым должен идти элемент
a
, затем сразу же за ним элемент
b
и элемент
c
.

Поделиться:
Популярные книги

Прометей: повелитель стали

Рави Ивар
3. Прометей
Фантастика:
фэнтези
7.05
рейтинг книги
Прометей: повелитель стали

Гром над Академией Часть 3

Машуков Тимур
4. Гром над миром
Фантастика:
фэнтези
5.25
рейтинг книги
Гром над Академией Часть 3

Уязвимость

Рам Янка
Любовные романы:
современные любовные романы
7.44
рейтинг книги
Уязвимость

Войны Наследников

Тарс Элиан
9. Десять Принцев Российской Империи
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Войны Наследников

Законы рода

Flow Ascold
1. Граф Берестьев
Фантастика:
фэнтези
боевая фантастика
аниме
5.00
рейтинг книги
Законы рода

«Три звезды» миллиардера. Отель для новобрачных

Тоцка Тала
2. Три звезды
Любовные романы:
современные любовные романы
7.50
рейтинг книги
«Три звезды» миллиардера. Отель для новобрачных

Мимик нового Мира 13

Северный Лис
12. Мимик!
Фантастика:
боевая фантастика
юмористическая фантастика
рпг
5.00
рейтинг книги
Мимик нового Мира 13

Месть за измену

Кофф Натализа
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Месть за измену

Мастер 3

Чащин Валерий
3. Мастер
Фантастика:
героическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Мастер 3

Не грози Дубровскому! Том 11

Панарин Антон
11. РОС: Не грози Дубровскому!
Фантастика:
фэнтези
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Не грози Дубровскому! Том 11

Наваждение генерала драконов

Лунёва Мария
3. Генералы драконов
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Наваждение генерала драконов

Огненный князь 4

Машуков Тимур
4. Багряный восход
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Огненный князь 4

Мужчина не моей мечты

Ардова Алиса
1. Мужчина не моей мечты
Любовные романы:
любовно-фантастические романы
8.30
рейтинг книги
Мужчина не моей мечты

Золушка по имени Грейс

Ром Полина
Фантастика:
фэнтези
8.63
рейтинг книги
Золушка по имени Грейс