- •Лабораторная работа 4-03
- •3.1.2. Пространство имен xslt
- •3.1.3. Корневые элементы и элементы верхнего уровня документаXslt
- •3.1.4. Условное включение элемента
- •3.1.5. Модульная структура преобразованийXslt
- •3.1.4. Совместное использование преобразований и документов xml
- •3.2. Управление выводом в xslt
- •3.2.1. Элементxsl:output
- •3.2.2. Метод вывода "xml"
- •3.2.3. Метод вывода "xhtml"
- •3.2.4. Метод вывода "html"
- •3.2.5. Метод вывода "text"
- •3.3.Язык xslt
- •3.3.1. Образцы и шаблоны
- •3.3.2. Объявлениешаблона
- •3.3.3. Вызов неименованных правил шаблона
- •3.3.4. Создание узлов элементов и атрибутов вXslt
- •3.3.4.1. Элемент xsl:element
- •3.3.4.2. Элементxsl:attribute
- •3.3.4.3. Элементxsl:attribute-set
- •3.3.5. Создание текстовых узлов вXslt
- •3.3.5.1. Элементxsl:text
- •3.3.5.2. Элементxsl:value-of
- •3.3.5.3. Встроенные правила шаблона
- •3.3.5.4. Обработка пробельных символов
- •3.3.6. Создание узлов документа, комментариев, инструкций по обработке и пространства имен в xslt
- •3.3.6.1. Элемент xsl:document
- •3.3.6.2. Элементxsl:result-document
- •3.3.6.3. Элементxsl:comment
- •3.3.6.4. Элемент xsl:processing-instruction
- •3.3.6.5. Элементxsl:namespace
- •3.3.7. Копирование узлов вXslt
- •3.3.7.1. Элементxsl:copy
- •3.3.7.2. Элементxsl:copy-of
- •3.3.7.3. Элементxsl:sequence
- •3.3.8. Условная и циклическая обработка вXslt
- •3.3.8.1. Элементxsl:if
- •3.3.8.2. Элементы xsl:choose, xsl:when и xsl:otherwise
- •3.3.8.3. Элементxsl:for-each
- •3.3.9. Сортировка в xslt
- •3.3.10. Нумерация в xslt
- •3.3.11. Переменные и параметры в xslt
- •3.3.11.1. Переменные в xslt
- •3.3.11.2. Вызов именованных правил шаблона
- •3.3.11.3. Параметры в xslt
- •3.4. Выполнение преобразований документов в xmlSpy
- •3.4.1. Создание документа xslt
- •3.4.2. Выполнение преобразования xslt
- •4. Порядок выполнения работы
- •Вариант 5-01
- •Вариант 5-02
- •Вариант 5-03
- •Вариант 5-04
- •Вариант 5-05
- •Вариант 5-06
- •Вариант 5-07
- •Вариант 5-08
- •Вариант 5-09
- •Вариант 5-10
- •Вариант 5-11
- •Вариант 5-12
- •Вариант 5-13
- •Вариант 5-14
- •Вариант 5-15
- •Вариант 5-16
- •Вариант 5-17
- •Вариант 5-18
- •Вариант 5-19
- •Вариант 5-20
- •Вариант 5-21
- •Вариант 5-22
- •Вариант 5-23
- •Вариант 5-24
- •Вариант 5-25
- •Вариант 5-26
- •Вариант 5-27
- •Вариант 5-28
- •Вариант 5-29
- •Вариант 5-30
- •5. Содержание отчета
- •6. Вопросы для самоконтроля
3.3.11. Переменные и параметры в xslt
Переменные и параметры в XSLTпохожи между собой и сильно отличаются от переменных в других языках программирования.
3.3.11.1. Переменные в xslt
Переменные в XSLT не могут быть изменены, т.е. фактически они эквиваленты переменным с модификатором const в C или переменным с модификатором final в Java. По этой причине вXSLT нет оператора присваивания, а переменные и параметры только инициализируются при объявлении.
Для объявления переменных в XSLTслужит элементxsl:variable, который может как присутствовать в теле правила шаблона, так и быть элементом верхнего уровня. Синтаксис этого элемента в XSLT определен следующим образом:
<xsl:variable
name="имя"
select="выражение"
as="тип-переменной"
>
<!--
Содержимое: конструктор последовательности
-->
</xsl:variable>
Элемент xsl:variableсвязывает имя, указанное в обязательном атрибутеname, со значением выражения, указанного в необязательном атрибутеselectили с деревом, которое является результатом выполнения правила шаблона, содержащегося в этом элементе. В том случае, если объявление переменной было произведено элементом верхнего уровня, переменная называется глобальной переменной. Переменные, определенные элементамиxsl:variableв правилах шаблона (то есть не на верхнем уровне) называются локальными переменными.
Необязательный атрибут asзадает тип переменной (один из типов XPath).
Значение присваиваемого выражения вычисляется в зависимости от того, как был определен элемент xsl:variable:
если в элементе xsl:variableопределен атрибутselect, то значением присваиваемого выражения будет результат вычисления выражения, указанного в этом атрибуте;
если атрибут selectне определен, но сам элементxsl:variableимеет дочерние узлы (иными словами, содержит шаблон), значением определяемой переменной будет результирующий фрагмент дерева, полученный в результате выполнения содержимогоxsl:variable;
если атрибут selectне определен и при этом сам элементxsl:variableпуст, значением параметра по умолчанию будет пустая строка.
Использовать значения, присвоенные переменным при инициализации, можно, указывая впереди имени переменной символ "$", например для переменнойx–$x.
Имя переменной соответствует синтаксическому правилу QName, т.е. может иметь видимяилипрефикс:имя. Как правило, имена переменным даются без префиксов, однако в том случае, если префикс все же указан, переменная ассоциирует с некоторым объектом не простое, а расширенное имя. Соответственно, обращение к объекту должно будет производиться также посредством расширенного имени.
Каждая из переменных имеет собственную область видимости (scope), т.е. область, в которой может быть использовано ее значение. Область видимости определяется следующим образом:
областью видимости глобальной переменной является все преобразование, то есть значение переменной, объявленной элементом верхнего уровня, может быть использовано в преобразовании где угодно. К такой переменной можно обращаться даже до ее объявления, единственным ограничением является то, что переменная не должна определяться через собственное значение – явно или неявно.
локальную переменную можно использовать только после ее объявления и только в том же родительском элементе, которому принадлежит объявляющий элемент xsl:variable.
В терминах XPathобласть видимости локальной переменной будет определяться выражением
following-sibling:node()/descendant-or-self:node().
В XSLTдействует то же правило, что и во многих других языках программирования: нельзя дважды определять переменную с один и тем же именем, за исключением следующих случаев:
имена двух глобальных переменных могут совпадать в том и только том случае, когда они имеют разный порядок импорта. Например, если переменные с одинаковыми именами определены в разных преобразованиях, одно из них может быть импортировано. В этом случае переменная будет иметь значение, которое задано элементом xsl:variableсо старшим порядком импорта.
допускается совпадение имен локальной и глобальной переменных – в этом случае в области видимости локальной переменной будет использоваться локальное значение, в области видимости глобальной (но не локальной) – глобальное значение.
две локальные переменные могут иметь совпадающие имена в том и только том случае, если их области видимости не пересекаются.
Переменные в XSLT используются в следующих основных случаях:
переменные могут содержать значения выражений, которые много раз используются в преобразовании (это избавит процессор от необходимости пересчитывать выражение каждый раз по-новому);
переменной может присваиваться результат преобразования, что позволяет манипулировать уже сгенерированными частями документа;
переменные могут использоваться для более прозрачного доступа к внешним документам.
