Технология XSLT
Шрифт:
Теперь, когда более или менее ясно, что же мы имеем в виду под переменными, на новой строчке полужирным шрифтом напишем следующее:
Разработчикам, которые использовали в своей практике только процедурные языки и не имеют опыта функционального или логического программирования будет очень нелегко смириться с такой ситуацией. То, что переменные не могут быть изменены дискредитирует само название — переменные, ибо они уже более похожи на константы.
Практически во всех процедурных языках оператор
с незначительными вариациями работает приблизительно следующим образом:
□ сначала вычисляется присваиваемое выражение;
□ затем вычисляется адрес переменной;
□ затем значение, полученное на первом шаге, копируется в ячейки памяти, начиная с адреса, полученного на втором шаге присваивания.
В XSLT нет оператора присваивания. Переменным и параметрам никогда не присваиваются значения в приведенном выше смысле, объявление переменной или параметра лишь связывает указанное имя со значением некоторого выражения. Иными словами, объявление переменной есть создание ассоциации между объектом и именем.
В конце этой главы мы вернемся к неизменяемым переменным и попытаемся объяснить, почему их нельзя изменить — но прежде мы должны научиться их использовать.
Элемент xsl:variable
Синтаксис этого элемента в XSLT определен так:
Для объявления переменных в XSLT служит элемент
Таким образом, объявление переменной в XSLT происходит всего в два шага:
□ сначала вычисляется значение присваиваемого выражения;
□ затем полученное значение связывается с указанным именем.
Значение присваиваемого выражения вычисляется в зависимости от того, как был определен элемент
□ если в элементе
□ если атрибут
□ если атрибут
Использовать значения, присвоенные переменным при инициализации, можно, указывая впереди имени переменной символ "
Имя переменной соответствует синтаксическому правилу
Область видимости переменных
Каждая из переменных имеет собственную область видимости (англ. scope) — область, в которой может быть использовано ее значение. Область видимости определяется следующим образом.
□ Областью видимости глобальной переменной является все преобразование, то есть значение переменной, объявленной элементом верхнего уровня, может быть использовано в преобразовании где угодно. К такой переменной можно обращаться даже до ее объявления, единственным ограничением является то, что переменная не должна определяться через собственное значение — явно или неявно.
□ Локальную переменную можно использовать только после ее объявления и только в том же родительском элементе, которому принадлежит объявляющий элемент
Для того чтобы до конца прояснить ситуацию, приведем несколько примеров.
Предположим, что мы определяем переменную с именем
Несложно видеть, что здесь мы определили глобальную переменную, а значит, ее значение можно использовать в преобразовании в любом месте. Например, мы можем определить через нее другие глобальные переменные, либо использовать в шаблоне: