Слайд 1Языки описания информации
Лекция 4.
Кафедра «ОСУ»
Весенний семестр 2010/2011 уч. года
XSLT
Слайд 2Язык XSLT
(расширяемый язык преобразований,
XSL таблицы стилей)
(eXtensible Stylesheet Language Transformations)
Слайд 3
Язык таблиц разметки – XSL (eXtensible Stylesheet Language) это набор стандартов
организации W3C, описывающих языки преобразования и визуализации XML-документов.
Основными частями данного языка являются:
язык преобразований XML-документов – XSL Transformations (XSLT);
язык разметки типографских макетов и иных предпечатных материалов – XSL Formatting Objects (XSL-FO).
Слайд 4Язык XSL-FO
XSL Formatting Objects (XSL-FO) - язык разметки типографских макетов и
иных предпечатных материалов.
Документ на языке XSL-FO (XSL Formatting Objects) представляет собой XML файл, в котором хранятся данные для печати или вывода на экран (например, просто текст).
Эти данные находятся внутри специальных тэгов fo:block, fo:table, fo:simple-page-master и д.р., с помощью которых задаются отступы, переводы строк и т.д.
Общая идея использования XSL состоит в следующем
вначале пользователь создаёт документ в виде обычного XML документа (а не в виде форматированного объекта XSL-FO).
затем применяется XSLT-преобразование, которое формирует XML документ на языке XSL-FO.
Полученный XSL-FO документ передаётся приложению (FO-процессор), который конвертирует XSL-FO-документ в какой-либо читаемый и/или печатаемый формат.
Наиболее часто используется преобразование в PDF или RTF-файлы, либо просто выполняется отображение документа в окне программы.
Слайд 5Пример XSL-FO документа
Hello, world!
Слайд 6Язык XSLT
С помощью языка XSLT можно преобразовать XML-документ в любой другой
XML документ, например, HTML, WML или RTF.
Для обработки XML документа c помощью XSLT, необходимо в него включить следующую инструкцию:
Самым доступным XSLT-процессором на данный момент для Microsoft Windows является MSXML (поставляется с Internet Explorer начиная с версии 4.5 и выше);
для систем на основе GNU — xsltproc.
Слайд 7Преобразование XML документа
Слайд 8Использование XSLT преобразования
Слайд 9Использование XSLT на промежуточном уровне ПО
Слайд 19Выходной синтаксис для XSLT
XSLT может создать результат с использованием трех выходных
синтаксисов
XML файлы
HTML файлы
Text (не размеченные тэгами файлы)
ASCII email message
comma-separated file
desktop publishing system format (e.g., XTags for QuarkXPress)
Слайд 20Назначение XSLT
XSLT was designed to process XML
Takes full advantage of the
tree
XML constructs are built in ( no special programming)
Solves problems with
order of the material
document model/processing mismatch
interchange (mine different from yours different from ours)
personalization/localization
Part of the XML family, so applications built to support
Makes content fluid, as XML and SGML have always promised
Слайд 21Что может делать XSLT
Извлечь что-либо из входного документа.
Изменить последовательность элементов (rearrange
/ sort)
Удалить что-либо из входного документа.
Использовать один и тот же элемент или атрибут многократно.
Добавить сгенерированный текст.
Слайд 22XSLT легко преобразует XML документ в разные XML форматы
Переименовать элемент или
атрибут.
Изменить элемент xxx в элемент yyy
Преобразовать элементы в атрибуты.
Преобразовать атрибуты в элементы.
Слайд 23XSLT хорошо работает с размеченными документами
XSLT работает лучше всего, когда
Требуется получить
размеченный тэгами результат!
Иерархия задается явно .
Наиболее важными отношениями являются древовидные отношения
включение (parent / child)
siblings
attributes
Слайд 24XSLT не подходит для любых преобразований
Совершенно не подходит
Для преобразования произвольных документов
в XML формат.
Для обработки не XML данных (Word, QuarkXPress, SGML).
Не так эффективен, как большинство универсальных языков программирования для:
обработки чисел (arithmetic and higher math)
обработки строк (parsing)
обработки очень больших файлов
создания структуры там, где ее не было
(преобразование плоского файла в иерархию).
Слайд 25XSLT имеет слабые возможности работы с текстом (строками)
An XSLT processor expects
to work on
a tree of nodes
not an XML file of tags and text
If you have untagged files
(comma delimited, space delimited, tab delimited)
there is no tree
strings must be “parsed” into pieces
XSLT does this awkwardly
(XSLT 2.0 has better string manipulation than XSLT 1.0, but…)
Слайд 26
Любая задача в XSLT подразумевает выполнение двух взаимосвязанных операций:
определить, какие
узлы XML-документа следует посетить (отбор),
определить, в каком порядке это делать (обход).
Задача отбора решается в основном средствами языка XPath, который описывается отдельной спецификацией, тесно связанной с XSLT.
Обход реализуется встроенными в XSLT конструкциями и зависит от того, как вы организуете шаблоны, в которых эти конструкции используются.
Слайд 27Язык XSLT
XSLT это декларативны язык описания преобразований структуры XML документов.
XSLT
документы называются XSL-таблица стилей или XSLT трансформациями.
Каждая XSL-таблица стилей должна иметь корневой элемент, представленный ниже.
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
Первым атрибут элемента stylesheet задает версию XSLT,
Второй атрибут xmlns:xsl задает пространство имен для элементов языка XSLT.
В соответствии с этим тэгом все XSL-элементы принадлежат пространству имен, заданным префиксом «xsl» (т. е. перед XSL элементами пишется префикс «xsl:».
Слайд 28Как процессор XSL трансформирует исходный документ
Язык XSLT работает не с синтаксисом
документа, а с его моделью:
Исходный формат и создаваемый формат являются приложениями XML и подлежащая структура в обоих случаях представляет собой дерево.
Таблица стилей XSL — это документ XML, и потому она также может быть представлена в виде дерева.
Процессоры XSLT работают с тремя деревьями.
Слайд 29
Язык XSLT является декларативным, т.е. в таблице стилей описывается:
как должен
выглядеть результат,
а не то, как он должен быть трансформирован;
именно для выполнения этой работы нужен процессор XSL.
Таблица стилей XSL состоит из шаблонов (templates), описывающих, как некоторый узел исходного дерева должен быть представлен в дереве результата.
Процессор проходит по дереву источника, начиная с корня, и ищет соответствующие шаблоны в дереве таблицы стилей.
Обнаружив шаблон, он с помощью содержащихся в нем правил записывает абстрактное представление результата в дерево результата.
Так он перемещается по документу узел за узлом (это определяется инструкцией XSLT ) и ищет соответствия в таблице стилей.
Слайд 30
Если соответствующего шаблона не обнаруживается, он переходит к следующему.
Можно сказать,
что в таком случае он выполняет шаблон по умолчанию, который не приводит к результату на выходе.
По завершении работы процессора дерево результата можно представить в виде
XML документ,
HTML документа,
текста, или в другой желаемой форме.
Теоретически события должны происходить в описанной последовательности. Однако в методах создания обработчиков XSLT используются различные вариации.
Слайд 31Конструктор последовательности
Конструктор последовательности это набор (последовательность) дочерних (sibling) узлов в трансформации
(stylesheet), которые могут быть обработаны (evaluated), чтобы вернуть последовательность узлов или атомарных значений.
Способ использования полученной последовательности зависит от содержащейся инструкции.
[Definition: A sequence constructor is a sequence of zero or more sibling nodes in the stylesheet that can be evaluated to return a sequence of nodes and atomic values. The way that the resulting sequence is used depends on the containing instruction.]
Слайд 32Элементы языка XSLT
В языке XSLT определено около полусотни элементов.
Элементы верхнего
уровня (17 элементов) (или декларации), которые могут включаться в корневой элемент «xsl:stylesheet»
К таким элементам относятся: xsl: import, xsl: include, xsl: attribute-set, xsl:character-map, xsl:date-format, xsl:decimal-format, xsl:function, xsl:import-schema, xsl:key, xsl:namespace-alias, xsl:output, xsl:param, xsl:preserve-space, xsl:sort-key, xsl:strip-space, xsl:template, xsl:variable.
Кроме xsl:param и xsl: variable все другие элементы верхнего уровня могут включаться только непосредственно в к корневой элемент «xsl:stylesheet».
Другие элементы (более 30) - могут записываться в теле элементов верхнего уровня.
Наиболее часто используемыми элементами являются: xsl:apply-templates, xsl:value-of, xsl:copy-of, xsl:sort, xsl:text.
Все элементы являются необязательными и могут располагаться в любом порядке, за одним исключением: декларации xsl:import, (если они есть) должны быть записаны первыми.
Слайд 33Инструкции
Формально инструкции XSLT определяются как элементы, которые можно вставлять в конструктор
последовательности.
Инструкции являются элементами не верхнего уровня вложенности.
К инструкциям относятся следующие элементы
элементы, создающие узлы всех семи видов и последовательности узлов: xsl:element, xsl:attribute, xsl:text, xsl:comment, xsl:processing-instruction, xsl:namespace, xsl:result-document, xsl:sequence.
элементы xsl:apply-templates, xsl:value-of, xsl: variable и др. (всего более двадцати элементов).
элементы, определяющие правила выбора преобразования: xsl:if, xsl:for-each, xsl:choose,
элементы, копирующие узлы xsl:copy, xsl:copy-of.
Слайд 34Инструкция xsl:output
Задает параметры сериализации результирующего дерева.
| "text" | QName
version = nmtoken
encoding = string
omit-xml-declaration = "yes" | "no"
standalone = "yes" | "no"
doctype-public = string
doctype-system = string
cdata-section-elements = QNames
indent = "yes" | "no"
media-type = string />
Слайд 35Декларация xsl:import
Элемент xsl:import записывается очень просто:
Его
можно записать только непосредственно в корневом элементе xsl:stylesheet и только в самом начале таблицы стилей.
Элементов xsl: import может быть несколько.
Процессор XSLT отыскивает таблицу стилей по указанному атрибутом href адресу и подставляет ее на место элемента xsl:import перед преобразованием.
Некоторые правила преобразования из таблиц, импортируемых элементами xsl:import, могут конфликтовать с правилами, импортированными из других таблиц или определенными в самой таблице стилей. В таком случае чаще всего применяются те правила, которые записаны последними. Поэтому порядок записи элементов xsl:import в таблицу стилей имеет большое значение.
Слайд 36Декларация xsl:include
Элемент xsl:include также включает внешние таблицы стилей в текущую таблицу.
Он записывается точно так же, как элемент xsl:import, и оказывает такое же действие:
Его можно записать в любом месте таблицы стилей (в отличие от элемента xsl:import, который можно записывать только непосредственно в корневом элементе xsl:stylesheet).
В отличие от элемента xsl:import порядок записи элементов xsl:include в таблице стилей не имеет значения.
Слайд 37Шаблон (pattern)
Прежде чем сделать преобразование дерева документа XML, из него следует
выбрать те узлы, которые подвергнутся тому или иному преобразованию.
Их можно выбирать по некоторому образцу (XPath выражению), который может содержать
имени элементов,
имена атрибутов
содержимое атрибутам
другие признаки.
Условия отбора узлов задаются образцом (pattern), записанным в виде одного или нескольких выражений языка XPath 2.0.
Выражения, содержащиеся в образце, объединяются вертикальной чертой |, означающей, что выбираемый узел должен удовлетворять хотя бы одному выражению образца.
Слайд 38Декларация xsl:template
Шаблоны описываются с помощью элемента xsl:template, который содержит:
не обязательный атрибут
«match» в котором задается XPath маршрут поиска (XPath выражение, образец) для отбора узлов, подлежащих преобразованию,
не обязательный атрибут «name», в котором определяется имя шаблона.
тело содержит конструктор последовательности узлов и атомарных значений, которая и будет результатом преобразования отобранных по образцу узлов.
Например
Конструктор
хsl:template>
Слайд 39Атрибуты xsl:template
Каждый из атрибутов «match» и «name» не обязателен, но хотя
бы один из них должен присутствовать.
Шаблон можно вызвать по имени элементом «xsl:call-template», а если он не содержит атрибута «match», то такой вызов обязателен, поскольку неизвестны узлы, к которым его надо применить, и он не будут применяться автоматически.
Очень часто именованный шаблон содержит параметры, заданные элементами «xsl:param», и вызывается с различным параметрами совсем как обычная функция.
Слайд 40
У элемента xsl: template могут быть дополнительные атрибуты «mode», «as», «priority»:
атрибут
«mode» определяет режим обработки.
атрибут «as» указывает желаемый тип результата (полученная последовательность будет приведена к этому типу).
атрибут «priority» назначает правилу приоритет, который будет учитываться при отборе правил, применимых к некоторому узлу.
При вызове именованного шаблона элементов xsl:call-template атрибуты match, mode и priority не используются (игнорируются).
Если у именованного шаблона нет атрибута «match», то у него не должно быть и атрибутов “mode” и “priority”, в них просто нет никакого смысла.
Слайд 41
В образце можно записать не всякое выражение XPath, а только путь,
каждый шаг которого определяется осью, причем допускаются только три оси:
child (по умолчанию),
// и
attribute.
Это означает, что, находясь в каком-то узле, можно "видеть", кроме него самого, только его атрибуты и узлы-потомки.
Обратите внимание на то, что явная запись оси descendant-or-self недопустима, применяется только сокращенная запись //.
Запись оси attribute:: можно сократить до одной "собачки" @.
Текущий узел очень часто обозначается точкой.
Слайд 42
Каждое XSLT-преобразование должна содержать один и только один шаблон с атрибутом
match, который имеет значение "/".
Слайд 43
Хотя образец и строится как выражение языка XPath, но его цель
— не отобрать последовательность узлов, а проверить соответствие узла данному образцу.
Узел Node соответствует образцу (pattern) тогда и только тогда, когда узел Node принадлежит последовательности узлов -результату вычисления выражения //Pattern.
Например, образцу person//street будут соответствовать все узлы из последовательности //person//street, а именно все узлы street, вложенные в узлы-элементы person даже через несколько промежуточных узлов.
Перечисленные ограничения касаются только образцов.
В других конструкциях языка XSLT можно применять выражения XPath в полном объеме.
Слайд 44XSLT копирующее входной документ в выходной
Если таблица стилей состоит из единственного
правила, предназначенного для обработки корневого узла, в результате просто копируется всё содержимое шаблона, а XSLT-инструкции (элементы 'xsl:…') заменяются вычисляемым содержимым.
XSLT предлагает даже специальный формат («literal result element as stylesheet») для таких простых, одношаблонных трансформаций.
XSLT по умолчанию в XML-редакторе VS 2010
xmlns:xsl=http://www.w3.org/1999/XSL/Transform
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
exclude-result-prefixes="msxsl">
Слайд 45Инструкция xsl:apply-templates
Элемент xsl:apply-templates указывает XSLT процессору найти для применения подходящий шаблон,
на основе типа и контекста, каждого выбранного узла.
Элемент xsl:apply-templates, записываемый чаще всего внутри элемента xsl: template, в простейшем виде пуст:
Он предписывает обработать рекурсивно все узлы-потомки узлов, отобранных родительским элементом xsl:template.
Слайд 46Атрибуты элемента
«xsl:apply-templates»
У элемента xsl:apply-templates есть необязательные атрибуты «select» и «mode».
атрибут
select, в котором задается выражение, дающее последовательность узлов.
Если атрибут «select» задан, то список узлов формируется на основе указанного запроса XPath.
В противном случае список содержит все дочерние узлы.
атрибут mode выбирает режим обработки из режимов, уже определенных в элементах xsl:template. Режим — это любое имя, но два режима предопределены.
текущий режим, отмечаемый словом #current, и
режим по умолчанию, принимаемый при отсутствии атрибута mode, или отмечаемый явно словом #default.
Содержимым элемента xsl: apply-templates могут служить элементы xsl:sort и xsl:with-param.
Слайд 47Встроенные шаблоны (правила)
Встроенные шаблоны (правила) выполняют обход дерева входного документа (depth-first
обход) и переписывают в выходной документ содержание всех встречающихся текстовых узлов и атрибутов.
Встроенные шаблоны включают следующие три правила:
для текущего узла или корневого узла вызвать шаблоны, которые подходят для его дочерних узлов:
если текущий узел является текстовым узлом или атрибутом, то его значение переносится в результирующий документ:
если текущий узел является инструкцией для XML процессора или комментарием, то ничего не делается:
Слайд 48Шаблонное правило по умолчанию для узлов элементов и корневого узла
Самое важное
шаблонное правило гарантирует обработку дочерних элементов. Правило выглядит следующим образом:
Символ «звездочка» (*) является подстановочным выражением XPath, соответствующим всем узлам элементов, независимо от имени и пространства имен, к которому они относятся. Но звездочка не соответствует атрибутам, текстовым узлам, комментариям или узлам инструкций обработки.
Косая черта (/) – это выражение XPath, соответствующее корневому узлу, который выбирается для обработки первым, следовательно, и этот шаблон процессор исполняет первым (если только не существует другого шаблона, отличного от встроенного, который также соответствовал бы корневому узлу).
Слайд 49
Если рассматривать данное правило изолированно, оно означает, что XSLT в итоге
находит и применяет шаблоны ко всем узлам, кроме узлов атрибутов и пространств имен
так как любой узел, кроме узлом атрибутов или пространств имен, является корневым узлом или его наследником (дочерним узлом корневого узла или дочерним узлом элемента).
Только узлы атрибутов и пространств имен не являются дочерними узлами своих родителей (их можно рассматривать как узлы, «лишенные наследства»).
Конечно, конкретные шаблоны могут переопределить это встроенное правило.
Например, когда в таблицу преобразований включен шаблон, соответствующий элементам person, дочерние элементы person не обязательно будут обрабатываться, если только особый шаблон не укажет на необходимость их обработки.
Слайд 50Шаблонное правило по умолчанию для текстовых узлов и узлов атрибутов
Самое основное
из встроенных шаблонных правил копирует значение текстовых узлов и узлов атрибутов в выходной документ. Это выглядит следующим образом:
Функция text() – это выражение XPath, соответствующее всем текстовым узлам, аналогично тому, как first_name является выражением XPath, соответствующим всем узлам элементов first_name.
@* – это выражение XPath, соответствующее всем узлам атрибутов. Вертикальная черта объединяет эти два выражения, выбирая и текстовые узлы и узлы атрибутов.
Содержимое этого шаблона говорит о том, что при обнаружении текстового узла или узла атрибута процессор должен вывести значение этого узла.
Для текстового узла это значение равно просто его тексту.
Для атрибута значение равно значению атрибута узла, но не его имени.
Слайд 51Шаблон по умолчанию для узлов комментариев и узлов инструкций обработки
Встроенное шаблонное
правило для комментариев и инструкций обработки выглядит следующим образом:
match="processing-instruction()|comment()"/>
Это правило относится ко всем комментариям и инструкциям обработки.
Оно ничего не выводит в дерево результата.
Если не предоставить конкретных правил для комментариев и инструкций обработки, никакие части этих узлов не будут скопированы из входного документа в выходной.
Слайд 52Инструкция xsl:value-of
Элемент value-of добавляет текстовое содержимое заданного XML-элемента – а также
любых его дочерних элементов, которые он имеет – в выходной XML документ.
Заданный XML-элемент указывается заданием образца, который присваиваете атрибуту «select» XSL-элемента value-of.
Элемент «xsl:value-of» вычисляет выражение, записанное в его обязательном атрибуте select, и преобразует его в строку.
Например, чтобы для ранее определенного объекта var2, получить значение надо записать:
Если в результате вычисления выражения получается последовательность, то процессор XSLT выберет из нее только первый элемент, преобразованный в строку.
Слайд 53
На рисунке показано как браузер генерирует первую часть блока HTML-разметки для
документа и таблицы стилей.
Слайд 55Подготовка к трансформации
Прочитать таблицу стилей XSLT с помощью XML-парсера и перевести
его содержимое в дерево узлов (дерево таблицы стилей), согласно модели данных XPath.
Прочитать входные данные XML с помощью XML-парсера перевести его содержимое в дерево узлов (исходное дерево), согласно модели данных XPath.
К XSLT-дереву добавляются три правила, которые задают поведение по умолчанию для любых типов узлов, которые могут быть встречены при обработке:
Для текущего и корневого узла задаётся инструкцию обработки их потомков.
Для всех текстовых узлов или узлов атрибутов задается инструкция сделать копию их содержимого в результирующее дерево.
Для всех узлов комментария и узлов-инструкций обработки задается правило их обработку.
Шаблоны, явно заданные в XSLT, могут перекрывать часть или все шаблоны-правила, заданные по умолчанию.
Если шаблон не содержит явных правил, встроенные правила будут применены для рекурсивного обхода исходного дерева и только текстовые узлы будут скопированы в результирующее дерево (узлы атрибутов не будут достигнуты, так как они не являются «детьми» их родительских узлов).
Полученный таким образом результат является просто конкатенацией всех текстовых фрагментов из исходного XML-документа.
Слайд 56Последовательность работы процессора XSLT
Строится дерево, являющуюся внутренним представлением XML документа.
Создается
структура для XSLT документа (это может быть также дерево или структура любого типа, оптимизированная для обработки шаблонов и соответствия образцов).
Выбирается корневой элемент входного документа (оно становится контекстным).
Каждый раз, встретив элемент типа , процессор формируется список узлов и работа продолжается с этим списком.
Если элемент содержит атрибут «select», список узлов формируется на основе указанного запроса XPath.
В противном случае список содержит все дочерние узлы.
Каждый раз, встретив элемент типа , процессор извлекает значение из исходного дерева, основываясь на выражении XPath его атрибута select.
Трансформация не ограничивается только трансляцией типа один-к-одному: она позволяет добавлять новое информационное содержание, добавлять и удалять элементы, а также осуществлять преобразование типа один-ко-многим.
Слайд 57
Затем процессор проделывает следующие шаги для получения и сериализации результирующего дерева:
Создаёт
корневой узел результирующего дерева.
Обрабатывает корневой узел исходного дерева. Процедура обработки узла описана ниже.
Сериализует результирующее дерево, если необходимо, согласно подсказкам, описанным инструкцией xsl:output.
Слайд 58Порядок обработки текущего узла
Поиск наиболее подходящего шаблона правила.
Выполняется проверка соответствия шаблона (который
является выражением XPath) для каждого правила, указывая узлы, для которых правило может быть применено.
XSLT процессор назначает каждому шаблону относительный приоритет и старшинство для облегчения разрешения конфликтов.
Порядок шаблонных правил в таблице стилей также может помочь разрешению конфликтов между шаблонами, которые соответствуют одинаковым узлам,
но это не оказывает влияния на порядок, в котором узлы будут обрабатываться.
Выполнение содержания правил шаблона .
Не XSLT-элементы и текстовые узлы, обнаруженные в правиле, копируются, «дословно», в результирующее дерево.
Комментарии и управляющие инструкции игнорируются.
XSLT элементы рассматриваются, как инструкции и имеют специальную семантику, которая указывает на то, как они должны интерпретироваться.
Одни XSLT элементы предназначены для добавления узлов в результирующее дерево,
другие XSLT элементы являются управляющими конструкциями.
Обработка инструкции xsl:apply-templates приводит к выборке и обработке нового набора узлов.
Узлы идентифицируются с помощью выражения XPath. Все узлы обрабатываются в том порядке, в котором они содержатся в исходном документе.
Слайд 59
XSLT расширяет библиотеку XPath функций и позволяет определять XPath-переменные.
Эти переменные
имеют разную область видимости в таблице стилей, в зависимости от того, где они были определены и их значения могут задаваться за пределами таблицы стилей.
Значения переменных не могут быть изменены во время обработки.
Хотя эта процедура может показаться сложной, однако она делает XSLT по возможностям похожей на другие языки web-шаблонов.
Если таблица стилей состоит из единственного правила, предназначенного для обработки корневого узла, в результате просто копируется всё содержимое шаблона, а XSLT-инструкции (элементы 'xsl:…') заменяются вычисляемым содержимым.
XSLT предлагает даже специальный формат («literal result element as stylesheet») для таких простых, одношаблонных трансформаций.
Однако, возможность определять отдельные шаблоны и правила сильно увеличивает гибкость и эффективность XSLT, особенно при генерации результата, который очень похож на исходный документ.
Слайд 61Пример преобразования XML документа
Moby-Dick
Herman
Melville
hardcover 724 $9.95
Book Description
Author:
Title:
Price:
Binding type:
Number of pages:
Слайд 63Использование нескольких шаблонов
Другой способ отображения повторяющихся XML-элементов состоит в создании отдельного
шаблона для каждого элемента с последующим вызовом этого шаблона с использованием XSL-элемента apply-templates.
Например:
Book Inventory
Title:
Author:
Binding type:
Number of pages:
Price:
Слайд 64
В данном примере таблицы преобразования содержится два шаблона.
Один шаблон содержит
инструкции для отображения всего документа (путем установки match="/", указывающей на корневую часть документа).
Все XSL-таблицы стилей требуют наличия такого шаблона.
Другой шаблон содержит инструкции для отображения элемента BOOK (шаблон с установкой match="BOOK").
Сначала браузер обрабатывает шаблон, соответствующий корневой части элемента:
Book Inventory
XSL-элемент apply-templates сообщает браузеру, что для каждого элемента BOOK внутри корневого элемента INVENTORY он должен обрабатывать шаблон, отвечающий элементу BOOK – т. е. шаблон, для атрибута match которого установлено значение "BOOK".
Слайд 65
Таблица стилей включает следующий шаблон, отвечающий элементу BOOK:
STYLE="font-style:italic">Title:
Author: Binding type: Number of pages: Price: Поскольку этот шаблон отвечает элементу BOOK, элемент BOOK является текущим элементом в контексте шаблона. В связи с этим доступ к дочерним элементам BOOK осуществляется посредством образца, содержащего только имя элемента, как в нашем примере:
Слайд 66Пример простого XML документа
Алан
Тьюринг
специалист по информатике
математик
криптограф
died="1988">
Ричард
Ф
Фейнман
физикИгра на бонгах
Слайд 67Результат обработки вcтроенными правилами (пустое XSLT)
Алан
Тьюринг
специалист по информатике
математик
криптограф
Ричард
Ф
Фейнман
физик
Игра на бонгах
Слайд 68Именованные шаблоны
Именованный шаблон это шаблон, котором задан атрибут «name».
Он принимает
переданные параметры с помощью инструкции «xsl:param». Например:
Вызов на выполнение именованного шаблона выполняется с помощью инструкции xsl:call-template (вместо использования инструкции xsl:apply-templates). Например:
select="'See if it prints this message.'"/>
Слайд 69Режимы
Иногда одно и то же содержимое из входного документа должно появиться
в выходном документе несколько раз, каждый раз отформатированное в соответствии с разными шаблонами.
Например, заголовки глав книги могут форматироваться в одном стиле в самих главах и в другом – в оглавлении книги.
Оба элемента – xsl:apply-templates и xsl:template – могут иметь необязательный атрибут «mode», ставящий разные шаблоны в соответствие разным применениям.
Атрибут mode элемента xsl:template указывает, в каком режиме следует активизировать этот шаблон. Элемент xsl:apply-templates с атрибутом mode активизирует только шаблоны с соответствующими атрибутами mode.
Слайд 70Таблица стилей, использующая режимы
Знаменитые ученые
Шаблоны режима оглавления -->
,
Слайд 71Пример использования шаблонов в таблице стилей, начинающей выходной документ со списка
имен.
Знаменитые ученые
,
Слайд 72Результат
Знаменитые ученые
Тьюринг,
Алан
Фейнман,
Ричард
Алан
Тьюринг
специалист по информатике
математик
криптограф
Ричард
М
Фейнман
физик
Игра на бонгах
Слайд 74
Знаменитые ученые
Алан
Тьюринг
Ричард
Ф
Фейнман