Технология XSLT - [14]

Шрифт
Интервал

Количество, с которым элемент может появляться в этой последовательности, формально записывается с использованием символов-модификаторов ">*", ">?", ">+", которые имеют следующие значения:

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

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

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

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

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

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

Выбор элемента задается аналогично перечислению, только разделительным символом является не запятая, а знак '>|'. Например, (>a | b | c) задает выбор одного из трех элементов >a, >b или >c.

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

Пример

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

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

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

Пример

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

задает содержимое, первым элементом которого является >a или >b, вторым — элемент или >d.

Содержимое элементов может также включать символьные данные, которые обозначаются при помощи ключевого слова >#PCDATA (parsable character data — разбираемые символьные данные).

Пример

>

означает, что элемент >product должен содержать только символьные данные.

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

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

Пример

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

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

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

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

□ элемент >classified не имеет содержимого.

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

Листинг 1.4

>

>

>

>

>

>]>

>

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

>

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

>[45] elementdecl ::= ''

Нетерминал >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? ')'

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

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

>элемент

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

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

> и т. д...>

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

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

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

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

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

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

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

□ >ENTITY — сущность;

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

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

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

□ >NOTATION — нотация;

□ перечисление возможных значений атрибута.

Следует поподробнее остановиться на типе >ID, поскольку атрибуты этого типа играют важную роль в повышении эффективности обработки XML-документов. Атрибуты типа >ID могут содержать значения, которые однозначным образом идентифицируют элемент в документе. То есть, если тип атрибута объявлен как >ID, его значение должно быть уникальным внутри документа. Это позволяет создавать для элементов с


Рекомендуем почитать
Pro Git

Разработчику часто требуется много сторонних инструментов, чтобы создавать и поддерживать проект. Система Git — один из таких инструментов и используется для контроля промежуточных версий вашего приложения, позволяя вам исправлять ошибки, откатывать к старой версии, разрабатывать проект в команде и сливать его потом. В книге вы узнаете об основах работы с Git: установка, ключевые команды, gitHub и многое другое.В книге рассматриваются следующие темы:основы Git;ветвление в Git;Git на сервере;распределённый Git;GitHub;инструменты Git;настройка Git;Git и другие системы контроля версий.


Java 7

Рассмотрено все необходимое для разработки, компиляции, отладки и запуска приложений Java. Изложены практические приемы использования как традиционных, так и новейших конструкций объектно-ориентированного языка Java, графической библиотеки классов Swing, расширенной библиотеки Java 2D, работа со звуком, печать, способы русификации программ. Приведено полное описание нововведений Java SE 7: двоичная запись чисел, строковые варианты разветвлений, "ромбовидный оператор", NIO2, новые средства многопоточности и др.


MFC и OpenGL

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


Симуляция частичной специализации

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


Обработка событий в С++

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


Питон — модули, пакеты, классы, экземпляры

Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.


Тотальное превосходство

Художник? любовник? убийца? адепт тайного знания?.. Герой романа знает о себе только одно, он должен добиться тотального превосходства во всем…Интеллектуальный триллер, колеблющийся между «Американской мечтой» Нормана Мейлера и «Шатунами» Юрия Мамлеева.Новый блестящий талант в «Мастер серии».


Наркокурьер Лариосик

Кинематографическая природа остросюжетной прозы Григория Ряжского очевидна — как несомненны и ее чисто литературные достоинства. Мир страшен и кровав — и страшнее всего, пожалуй, в заглавной повести «Наркокурьер Лариосик», — но и не восхититься его красотой нельзя.В литературу — с парадного подъезда престижной серии — входит зрелый мастер.


Месторождение ветра

Проза Марины Палей не поддается расчленению на внутреннее и внешнее, на сюжет и стиль. Суверенный мир, созданный этим писателем, существует благодаря виртуозному стилю и обусловлен разнообразием интонации. Огромный дар свободы не может ограничить себя одним героем, одной темой или одной страной.


Приемы создания интерьеров различных стилей

Книга по созданию трехмерных проектов интерьеров при помощи популярного редактора трехмерной графики 3ds Max позволит каждому, кто хочет заняться моделированием 3D-интерьеров, найти необходимую информацию для воплощения идеи в жизнь. Описывается моделирование элементов и стили оформления интерьеров, работа с материалами и текстурами, способы повышения реалистичности изображений, визуализация. Рассматриваются особенности создания интерьеров в различных стилях: минимализм, ренессанс, барокко, античный, рококо, хай-тек, техно и др.