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

на главную - закладки

Жанры

Технология XSLT

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

Шрифт:

Выбор элемента задается аналогично перечислению, только разделительным символом является не запятая, а знак '

|
'. Например, (
a | b | c
) задает выбор одного из трех элементов
a
,
b
или
c
.

При записи выбора и перечисления элементы могут также указываться с использованием модификаторов количества.

Пример

(a* | b? | с | d+)

определяет содержимое, как последовательность, состоящую из нуля или более элементов

a
или
одного элемента
b
, который может быть пропущен, или ровно одного элемента
с
, или последовательностью, состоящей из одного или более элементов
d
.

Помимо этого, формальные правила могут использовать при записи другие формальные правила.

Пример

((a | b), (с | d))

задает содержимое, первым элементом которого является

a
или
b
, вторым — элемент
с
или
d
.

Содержимое элементов может также включать символьные данные, которые обозначаются при помощи ключевого слова

#PCDATA
(parsable character data — разбираемые символьные данные).

Пример

<!ELEMENT product (#PCDATA)>

означает, что элемент

product
должен содержать только символьные данные.

Помимо текста элементы могут также включать в себя другие элементы. Содержимое такого типа называется смешанным. Формальные правила смешанного содержимого должны всегда иметь вид

(#PCDATA | ... | ... ) *
.

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

Пример

Предположим, мы хотим определить документ со следующей логической структурой:

□ корневым элементом документа является элемент

advert
;

□ элемент

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

□ элемент

product
может содержать текст и другие элементы
product
в любом порядке;

□ элемент

classified
не имеет содержимого.

Документ соответствующей логической структуры может быть задан следующим образом.

Листинг 1.4

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

<!DOCTYPE advert [

<!ELEMENT advert (product+, classified*)>

<!ELEMENT product (#PCDATA | product)*>

<!ELEMENT classified EMPTY>

]>

<advert>

 <product>

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

 </product>

 <classified/>

</advert>

Определению элемента соответствует EBNF-продукция

elementdecl
:

[45] elementdecl ::= '<!ELEMENT' S Name S contentspec S? '>'

Нетерминал

contentspec
, следующий через пробельное пространство за именем элемента, определяет тип содержимого, которое может иметь этот элемент:

[46] contentspec ::= 'EMPTY' | 'ANY' | Mixed | children

Строка "

EMPTY
" соответствует пустому элементу, "
ANY
" — любому содержимому, нетерминал
Mixed
— смешанному содержимому,
children
— содержимому, которое определяется формальными правилами.

[47] children ::= (choice | seq) ('?' | '*' | '+')?

[48] cp ::= (Name | choice | seq) ('?' | '*' | '+')?

[49] choice ::= '(' S? cp ( S? '|' S? cp )+ S? ')'

[50] seq ::= '(' S? cp ( S? ',' S? cp )* S? ')'

[51] Mixed ::= '(' S? '#PCDATA' (S? '|' S? Name)* S? ')*'

| '(' S? '#PCDATA' S? ')'

Определение списка атрибутов

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

<!ATTLIST элемент

 атрибут1 тип1 значение1

 атрибут2 тип2 значение2

 и т. д...>

В этом определении

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

Имя
атрибута отвечает в XML тем же самым требованиям, что и имя элемента — оно должно начинаться с буквы и может содержать другие буквы, цифры и некоторые знаки препинания.

Тип
атрибута может быть одним из следующих:

□ 

CDATA
— символьные данные;

□ 

ID
— уникальный идентификатор;

□ 

IDREF
— ссылка на уникальный идентификатор;

□ 

IDREFS
— набор ссылок;

□ 

ENTITY
— сущность;

□ 

ENTITIES
— набор сущностей;

□ 

NMTOKEN
— именной токен;

□ 

NMTOKENS
— набор именных токенов;

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

Кодекс Охотника XXVIII

Винокуров Юрий
28. Кодекс Охотника
Фантастика:
фэнтези
боевая фантастика
попаданцы
5.00
рейтинг книги
Кодекс Охотника XXVIII

Отмороженный 11.0

Гарцевич Евгений Александрович
11. Отмороженный
Фантастика:
боевая фантастика
рпг
попаданцы
фантастика: прочее
фэнтези
5.00
рейтинг книги
Отмороженный 11.0

Боевая ботаника и с чем ее едят

Дэвлин Джейд
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Боевая ботаника и с чем ее едят

Настроение – Песец

Видум Инди
7. Под знаком Песца
Фантастика:
альтернативная история
аниме
5.00
рейтинг книги
Настроение – Песец

Как я строил магическую империю 3

Зубов Константин
3. Как я строил магическую империю
Фантастика:
попаданцы
постапокалипсис
аниме
фэнтези
5.00
рейтинг книги
Как я строил магическую империю 3

Эволюционер из трущоб. Том 6

Панарин Антон
6. Эволюционер из трущоб
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Эволюционер из трущоб. Том 6

Наемный корпус

Вайс Александр
5. Фронтир
Фантастика:
боевая фантастика
космическая фантастика
космоопера
5.00
рейтинг книги
Наемный корпус

Имя нам Легион. Том 4

Дорничев Дмитрий
4. Меж двух миров
Фантастика:
боевая фантастика
рпг
аниме
5.00
рейтинг книги
Имя нам Легион. Том 4

Око василиска

Кас Маркус
2. Артефактор
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Око василиска

Неудержимый. Книга IV

Боярский Андрей
4. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Неудержимый. Книга IV

Восхитительная ведьма

Джейн Анна
1. Восхитительная ведьма
Любовные романы:
современные любовные романы
4.67
рейтинг книги
Восхитительная ведьма

Идеальный мир для Лекаря 2

Сапфир Олег
2. Лекарь
Фантастика:
юмористическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 2

Первый среди равных. Книга III

Бор Жорж
3. Первый среди Равных
Фантастика:
попаданцы
аниме
фэнтези
6.00
рейтинг книги
Первый среди равных. Книга III

Страж Кодекса

Романов Илья Николаевич
1. КО: Страж Кодекса
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Страж Кодекса