но и этого в большинстве случаев будет достаточно. В будущем предполагается включить в новые версии языка более мощные функции для работы с регистрами символов.
Для того чтобы изменять регистр слов русского языка, мы можем определить две переменные, lowercase и uppercase, которые будут содержать строчные и прописные символы основного русского алфавита (мы включили в него букву ё — строчную ('ё') и прописную ('Ё'), хотя в соответствии с Unicode она относится к расширениям). Мы также создадим два именованных шаблона, которые будут менять регистр символов строкового параметра str. Для удобства использования мы вынесем определения переменных и шаблонов во внешний модуль ru.xsl.
<xsl:stylesheet
version='1.0'
xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
<xsl:variable
name='uppercase'
select='concat('АБВГ',
'ДЕЁЖЗ',
'ИЙКЛ',
'МНОП',
'РСТУ',
'ФХЦЧ',
'ШЩЪЫ',
'ЬЭЮЯ')'/>
<xsl:variable
name='lowercase'
select='concat('абвг',
'деёжЗ',
'ийкл',
'мноп',
'рсту',
'фхцч',
'шщъы',
'ьэюя')'/>
<xsl:template name='lower'>
<xsl:param name='str'/>
<xsl:value-of select='translate($str, $uppercase, $lowercase)'/>
</xsl:template>
<xsl:template name='upper'>
<xsl:param name='str'/>
<xsl:value-of select='translate($str, $lowercase, $uppercase)'/>
</xsl:template>
</xsl:stylesheet>
Использовать этот модуль можно, включив или импортировав его в основное преобразование элементами xsl:include или xsl:import. После этого в основном преобразовании будут доступны переменные lowercase и uppercase, которые можно будет использовать в функции translate и шаблоны с именами lower и upper.
Использовать функцию translate с переменными lowercase и uppercase можно следующим образом:
translate('Дом', $uppercase, $lowercase) → 'дом'
translate('Дом', $lowercase, $uppercase) → 'ДОМ'
Именованные шаблоны можно вызывать элементом xsl:call-template, передавая параметр при помощи xsl:with-param. Например, следующий фрагмент шаблона
...
<xsl:call-template name='lower'>
<xsl:with-param name='str' select=''Дом''/>
</xsl:call-template>
...
создаст в выходящем дереве текстовый узел со значением 'дом'.
Функции множеств узлов
Функции
Функция last возвращает текущий размер контекста — число, которое показывает, сколько узлов находится в обрабатываемом в данный момент множестве.
Функция position возвращает позицию контекста — число, показывающее порядковый номер контекстного узла в обрабатываемом множестве.
В этом примере мы будем заменять все элементы элементами вида
<element name='...' position='...'>
...
</element>
где атрибут name будет содержать имя, a position — через дробь позицию элемента в контексте и размер контекста.
<а>
<b/>
<c/>
<d>
<e/>
<f/>
</d>
</a>
<xsl:stylesheet
