- •Лекция 4-07
- •Тема 5.3. Языки xslt и xsl
- •Тема 5.3. Языки xslTиXsl
- •5.3.1. Связывание документовXmLс таблицами стилей
- •5.3.2. Язык xsLи его компоненты
- •5.3.3. Преобразование документа с помощьюXslt
- •5.3.3.1. Технология преобразования
- •5.3.3.2. Процессоры xslt
- •5.3.4.1. Пространство именXslt
- •5.3.4.2. Корневые элементы и элементы верхнего уровня документаXslt
- •5.3.4. Структура документаXslt
- •5.3.4.3. Условное включение элемента
- •5.3.4.4. Модульная структура преобразованийXslt
- •5.3.4.4.1. Включение внешних файлов
- •5.3.4.4.2. Импорт внешних файлов
- •5.3.4.4.3. Использование сущностей
- •5.3.4.4.4. Импорт схем
- •5.3.5. Совместное использование преобразований и документовXml
- •5.3.6. Управление выводом вXslt
- •5.3.6.1. Элементxsl:output
- •5.3.6.2. Метод вывода "xml"
- •5.3.6.3. Метод вывода "xhtml"
- •5.3.6.4. Метод вывода "html"
- •5.3.6.5. Метод вывода "text"
- •5.3.7. Правила шаблона вXslt
- •5.3.7.1. Образцы и шаблоны
- •5.3.7.2. Объявлениешаблона
- •5.3.7.3. Вызов неименованных правил шаблона
- •5.3.7.4. Упрощенные преобразования
- •5.3.8. Создание узлов элементов и атрибутов вXslt
- •5.3.8.1. Элементxsl:element
- •5.3.8.2. Элементxsl:attribute
- •5.3.8.3. Элементxsl:attribute-set
5.3.6.5. Метод вывода "text"
При значении атрибута method, равном"text", результатом преобразования будет строковое сложение всех текстовых узлов исходного документа.
Атрибуты encoding, normalization-form, byte-order-mark и use-character-maps действуют также, как и для метода "xml".
Атрибут media-type
По умолчанию в качестве значения атрибута media-type, используемого для простого текста, указывается"text/plain". Значение атрибутаmedia-typeможет быть использовано сервером, преобразующим документ в качестве MIME-типа.
Примеры вывода для различных значений атрибута methodбудут приведены далее.
5.3.7. Правила шаблона вXslt
5.3.7.1. Образцы и шаблоны
Основными компонентами документа XSLT являются правила шаблона. Правило шаблона состоит из двух частей: этообразец(pattern), который сопоставляется с узлами в исходном дереве, ишаблон(template), который содержит конструктор последовательности, используемой для создания фрагментов результирующей иерархической структуры.
Преобразование в XSLTсостоит не из последовательности действий, как в языках программирования, а изнабора правил шаблона, каждое из которых обрабатывает свою часть документа XML.
Чтобы получить фрагмент результирующей структуры, шаблон обрабатывается для определенного элемента в исходной структуре. Шаблон может содержать элементы, определяющие фиксированную структуру элемента в результирующей структуре (аналог прямого конструктора в XQuery), а также элементы из пространства имен XSLT, содержащие инструкции по формированию фрагментов результирующей структуры (аналог вычисляемого конструктора в XQuery).
При поиске соответствующего правила шаблона может возникнуть ситуация, когда обрабатываемому элементу соответствует не одно, а несколько правил. В этом случае выбирается правило с самым большим приоритетом (если правил с одинаковым приоритетом окажется несколько, генерируется ошибка).
В правиле шаблона образец задает перечень условий для обрабатываемого узла. Узел, который отвечает этим условиям, шаблону соответствует, а узел, который условиям не отвечает, шаблону не соответствует. Синтаксис шаблонов является подмножеством синтаксиса выражений XPath. В частности, в качестве шаблонов могут использоваться пути адресации, которые отвечают определенным ограничениям.
Образец для пути адресации – это некоторый путь адресации, на всех шагах которого используются лишь оси childилиattribute. Хотя образцы и не должны использовать осьdescendant-or-self, в образцах могут использоваться как оператор "//", так и оператор "/". Образцы путей адресации могут начинаться также с вызова функцийidилиkeyс фиксированным аргументом. В предикатах образца могут использоваться произвольные выражения.
Примеры образцов:
Образец "/" соответствует корневому узлу.
Образец "*" соответствует любому элементу.
Образец "document-node()" соответствует узлу документа.
Образец "schema-element(book:publisher)" соответствует любому элементу в документе, определенному как реализация элементаbook:publisherв схеме документа.
Образец "attribute(*, xs:gYear)" соответствует любому атрибуту документа, имеющему типxs:gYear.
Образец "chapter" соответствует любому элементуchapter.
Образец "chapter|appendix" соответствует любому элементуchapterи любому элементуappendix.
Образец "list/item" соответствует любому элементуitemс родителемlist.
Образец "partition//paragraph" соответствует любому элементуparagraph, предком которого является элементpartition.
Образец "paragraph[1]" соответствует любому первому дочернему элементуparagraph.
Образец "text()" соответствует любому текстовому узлу.
Образец "node()" соответствует любому узлу за исключением узла атрибута и корневого узла.
Образец "div[@class="chapter"]//p" соответствует любому элементуp, предком которого является элементdiv, имеющий атрибутclassсо значениемchapter.
Образец "@class" соответствует любому атрибутуclass(но не любому элементу, имеющему атрибутclass).
Образец "@*" соответствует любому атрибуту.
Образец "id('p1')" соответствует элементу с уникальным ID p1.
В шаблонах атрибутов могут присутствовать фиксированные и вычисляемые компоненты. Вычисляемые компоненты, как и в конструкторах XQuery заключаются в фигурные скобки "{" и "}". При преобразовании эти компоненты будут вычислены и заменены своим результатом.
Если символы "{" и "}" используются в шаблонах атрибутов как обычные символы, они должны быть удвоены, т.е. заменены символами "{{" и "}}".
