Чтение онлайн

на главную - закладки

Жанры

Технология XSLT

Валиков Алексей Н.

Шрифт:

 <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, и следует полагать, что и из второй версии языка она никуда не денется.

Стандартные интерфейсы расширений

Важным дополнением в XSLT 1.1 по сравнению с первой версией языка является определение стандартных интерфейсов расширения для языков IDL, JavaScript/ECMAScript и Java на основе интерфейсов DOM2.

Одна из проблем, с которыми всегда приходится сталкиваться при работе с расширениями, является проблема переносимости. Вследствие того, что интерфейсы привязки к конкретным языкам программирования отдали в первой версии на усмотрение разработчиков процессоров, несовместимость интерфейсов не позволяет гарантировать работоспособность расширений при переходе с одного процессора на другой (даже если речь идет о процессорах одного типа, например, написанных на языке Java процессорах Saxon, Xalan и Oracle XSLT Processor).

Ситуация, действительно, довольно досадная. С одной стороны, и XSLT, и Java являются переносимыми языками, с другой стороны, их сочетание в случае использования расширений оказывается непереносимым даже на Java-платформах. Стандартные интерфейсы, выработанные в XSLT 1.1, по всей вероятности, намного упростят положение вещей — ведь если написанное единожды Java-расширение будет работать на всех Java-платформах, этого уже будет достаточно, для того чтобы смело использовать всю мощь расширений.

Другие изменения

Помимо приведенных выше отличий версии 1.1 от первой версии языка, новый вариант включает в себя также некоторые другие добавления и исправления:

□ добавлена

расширенная поддержка пространств имен при преобразовании;

□ добавлена поддержка XML Base;

□ добавлена возможность использования параметров при вызове шаблонов элементом

xsl:apply-imports
;

□ расширено множество атрибутов элементов XSLT, которые могут содержать шаблоны значений атрибутов;

□ добавлено определение лексикографического порядка (наподобие

'а' < 'b'
true
);

□ добавлено сравнение строк без учета регистра символов;

□ добавлены операторы для проверки порядка следования узлов в документе;

□ исправлены обнаруженные ошибки.

Отличия XSLT 2.0 от XSLT 1.1

Прежде чем приступить к описанию отличий второй версии XSLT от версии 1.1 (и, соответственно, 1.0), следует сделать одно существенное замечание. Лицензионные соглашения Консорциума W3 не позволяют раскрывать широкой общественности внутренние материалы рабочих групп W3C до того, как они будут официально опубликованы. Потому, строго говоря, все, что будет ниже сказано о версии 2.0 — это не более чем совокупность гипотез, пожеланий и выводов, сделанных на основе спецификации XSLT 1.1 и требований к XSLT 2.0 и XPath 2.0. Эти документы доступны публично.

Изменения в XPath 2.0

Разрабатываемая версия языка XPath, вследствие интеграции с XQuery, очевидно, претерпит серьезные изменения. Новая спецификация уже сейчас разбита на два документа: документ, описывающий модель данных и документ, описывающий функции и операторы. Поэтому на данный момент сложно делать точный прогноз относительно того, что же получится в итоге. Мы ограничимся перечислением основных требований:

□ поддержка группы XML-стандартов: определение модели в терминах XML Information Set, выделение общего синтаксиса и семантики с XQuery 1.0;

□ переопределение операторов сравнения на множествах;

□ определение операторов пересечения и разности множеств;

□ расширение множества агрегатных функций (наподобие

sum
,
count
,
min
,
max
функций, работающих на множествах);

□ возможность использования выражений, возвращающих множества узлов в качестве шагов выборки, например

/a/(b|c)/d
вместо
/а/b/d | /a/c/d
;

□ введение оператора аналогичного оператору

?
в Java и С (выражение
a ? b : с
, где
а
имеет булевый тип, возвращает
b
, если
a
— "истина" и
с
, если
a
— "ложь");

□ дополнительные строковые функции как-то: замена подстроки, выравнивание, изменение регистра символов;

□ поддержка регулярных выражений;

□ поддержка примитивных типов XML Schema;

□ использование информации о структуре документа, определенной в его схеме;

□ поддержка экспоненциальной нотации чисел (наподобие

2Е10
= 1024);

□ поддержка функций приведения и преобразования (аналог

CAST
и
CONVERT
из SQL).

Поделиться:
Популярные книги

Кодекс Охотника XXVIII

Винокуров Юрий
28. Кодекс Охотника
Фантастика:
фэнтези
боевая фантастика
попаданцы
5.00
рейтинг книги
Кодекс Охотника XXVIII

Мое ускорение

Иванов Дмитрий
5. Девяностые
Фантастика:
попаданцы
альтернативная история
6.33
рейтинг книги
Мое ускорение

Двойник Короля 2

Скабер Артемий
2. Двойник Короля
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Двойник Короля 2

Неудержимый. Книга III

Боярский Андрей
3. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Неудержимый. Книга III

Миллионщик

Шимохин Дмитрий
3. Подкидыш
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Миллионщик

Ваше Сиятельство 2

Моури Эрли
2. Ваше Сиятельство
Фантастика:
фэнтези
альтернативная история
аниме
5.00
рейтинг книги
Ваше Сиятельство 2

Третий Генерал: Том IV

Зот Бакалавр
3. Третий Генерал
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Третий Генерал: Том IV

Бастард Императора. Том 6

Орлов Андрей Юрьевич
6. Бастард Императора
Фантастика:
городское фэнтези
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Бастард Императора. Том 6

Вперед в прошлое!

Ратманов Денис
1. Вперед в прошлое
Фантастика:
попаданцы
5.00
рейтинг книги
Вперед в прошлое!

Имя нам Легион. Том 3

Дорничев Дмитрий
3. Меж двух миров
Фантастика:
боевая фантастика
рпг
аниме
5.00
рейтинг книги
Имя нам Легион. Том 3

Бестужев. Служба Государевой Безопасности

Измайлов Сергей
1. Граф Бестужев
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Бестужев. Служба Государевой Безопасности

Хозяйка забытой усадьбы

Воронцова Александра
5. Королевская охота
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Хозяйка забытой усадьбы

Камень. Книга пятая

Минин Станислав
5. Камень
Фантастика:
боевая фантастика
6.43
рейтинг книги
Камень. Книга пятая

Королевская кровь-13. Часть 1

Котова Ирина Владимировна
14. Королевская кровь
Фантастика:
городское фэнтези
фэнтези
эпическая фантастика
5.00
рейтинг книги
Королевская кровь-13. Часть 1