Книга: Технология XSLT
"Внешние" типы данных
Разделы на этой странице:
"Внешние" типы данных
Четыре основных типа данных языка XPath (булевый, численный, строковый типы и множества узлов) в первой версии XSLT были расширены типом результирующего фрагмента дерева. В некотором смысле, фрагменты деревьев были "внешним" типом по отношению к XPath, но, тем не менее, многие из функций базовой библиотеки с успехом с этим типом работали.
В XSLT 1.1 была впервые представлена поддержка произвольных внешних типов данных. Функции расширения могут возвращать и оперировать любыми типами данных. Например, в XSLT-процессорах, написанных на Java, в случае использования расширений в качестве значений часто используются произвольные классы.
Пример
Форматирование текущей даты и времени, которое было продемонстрировано в главе 10 элементом ext:date
, может быть переписано при помощи функций расширения следующим образом.
Листинг 12.7. Использование внешних типов данных в преобразовании
<xsl:stylesheet
version="1.1"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:Date="java:java.util.Date"
xmlns:SimpleDateFormat="java.text.SimpleDateFormat">
<xsl:variable name="df" select="SimpleDateFormat:new('HH:mm')"/>
<xsl:variable name="now" select="Date:new()"/>
<xsl:template match="/">
<xsl:value-of select="SimpleDateFormat:format($df, $now)"/>
</xsl:template>
</xsl:stylesheet>
Пространства имен с префиксами Date
и SimpleDateFormat
определяют привязку к Java-классам java.util.Date
и java.text.SimpleDateFormat
соответственно (в этом примере мы используем формат URI пространств имен, принятый в процессоре Saxon).
Объявление
<xsl:variable name="df" select="SimpleDateFormat:new('HH:mm')"/>
присваивает переменной df
результат выполнения конструктора класса SimpleDateFormat
со строковым параметром "HH:mm"
, что эквивалентно Java-коду
SimpleDateFormat df = new SimpleDateFormat("НН:mm");
Иными словами, переменной df
был присвоен "внешний" тип данных java.text.SimpleDateFormat
. Аналогично, переменная now содержит данные типа java.util.Date
. Фактически, этим переменным были присвоены экземпляры соответствующих классов.
Выражение SimpleDateFormat:format($df, $now)
, использованное в этом преобразовании, представляет собой ни что иное, как применение метода format
экземпляра класса SimpleDateFormat
, присвоенного переменной df
к экземпляру класса Date
, присвоенного переменной now
. В переводе на Java:
df.format(now);
Надо сказать, что оперирование внешними типами — отнюдь не нововведение XSLT 1.1. Во многих процессорах интерфейсы расширения позволяют функциям возвращать произвольные типы данных. Важно, что теперь эта возможность закреплена в официальном документе Консорциума W3, и следует полагать, что и из второй версии языка она никуда не денется.
- Резервное копирование базы данных InterBase
- Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ
- Резервное копирование многофайловых баз данных
- Восстановление из резервных копий многофайловых баз данных
- Владелец базы данных
- ЧАСТЬ IV. База данных и ее объекты.
- Перевод базы данных InterBase 6.x на 3-й диалект
- Типы данных для работы с датой и временем
- Большие целые типы
- Практическая работа 53. Запуск Access. Работа с объектами базы данных
- Обзор основных причин повреждения базы данных
- Ошибки проектирования базы данных