Образцы и шаблоны

Основными компонентами документа XSLT являются правила шаблона. Правило шаблона состоит из двух частей: это образец (pattern), который сопоставляется с узлами в исходном дереве, и шаблон (template), который содержит конструктор последовательности, используемой для создания фрагментов результирующей иерархической структуры.

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

Чтобы получить фрагмент результирующей структуры, шаблон обрабатывается для определенного элемента в исходной структуре. Шаблон может содержать элементы, определяющие фиксированную структуру элемента в результирующей структуре (аналог прямого конструктора в XQuery), а также элементы из пространства имен XSLT, содержащие инструкции по формированию фрагментов результирующей структуры (аналог вычисляемого конструктора в XQuery).

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

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

Образец для пути адресации – это некоторый путь адресации, на всех шагах которого используются лишь оси child или attribute. Хотя образцы и не должны использовать ось descendant-or-self, в образцах могут использоваться как оператор "//", так и оператор "/". Образцы путей адресации могут начинаться также с вызова функций id или key с фиксированным аргументом. В предикатах образца могут использоваться произвольные выражения.

 

Примеры образцов:

1. Образец "/" соответствует корневому узлу.

2. Образец "*" соответствует любому элементу.

3. Образец "document-node()" соответствует узлу документа.

4. Образец "schema-element(book:publisher)" соответствует любому элементу в документе, определенному как реализация элемента book:publisher в схеме документа.

5. Образец "attribute(*, xs:gYear)" соответствует любому атрибуту документа, имеющему тип xs:gYear.

6. Образец "chapter" соответствует любому элементу chapter.

7. Образец "chapter|appendix" соответствует любому элементу chapter и любому элементу appendix.

8. Образец "list/item" соответствует любому элементу item с родителем list.

9. Образец "partition//paragraph" соответствует любому элементу paragraph, предком которого является элемент partition.

10. Образец "paragraph[1]" соответствует любому первому дочернему элементу paragraph.

11. Образец "text()" соответствует любому текстовому узлу.

12. Образец "node()" соответствует любому узлу за исключением узла атрибута и корневого узла.

13. Образец "div[@class="chapter"]//p" соответствует любому элементу p, предком которого является элемент div, имеющий атрибут class со значением chapter.

14. Образец "@class" соответствует любому атрибуту class (но не любому элементу, имеющему атрибут class).

15. Образец "@*" соответствует любому атрибуту.

16. Образец "id('p1')" соответствует элементу с уникальным ID p1.

 

В шаблонах атрибутов могут присутствовать фиксированные и вычисляемые компоненты. Вычисляемые компоненты, как и в конструкторах XQuery заключаются в фигурные скобки "{" и "}". При преобразовании эти компоненты будут вычислены и заменены своим результатом.

Если символы "{" и "}" используются в шаблонах атрибутов как обычные символы, они должны быть удвоены, т.е. заменены символами "{{" и "}}".








Дата добавления: 2015-03-20; просмотров: 677;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.004 сек.