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

на главную

Жанры

Технология XSLT

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

Шрифт:

Выбор шаблонов для элементов пространства имен, определенного по умолчанию

Одним из значительных неудобств первой версии XSLT была невозможность сменить пространство имен, определенное по умолчанию для паттернов. То есть, если шаблон будет определен как

<xsl:template match="foo">

 ...

</xsl:template>

то обрабатывать он будет только те элементы

foo
, которые принадлежат нулевому пространству имен. Для элемента

<bar:foo xmlns:bar="urn:bar-namespace"/>

придется

писать шаблон вида

<xsl:template match="ns:foo" xmlns:ns="urn:bar-namespace">

 ...

</xsl:template>

В случае целого документа принадлежащего ненулевому пространству имен, определения подобного рода могут оказаться слишком громоздкими. Решение этой проблемы может быть очень простым и элегантным.

Листинг 12.8. Изменение пространства имен для паттерна

<xsl:stylesheet

 version="2.0"

 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"

 xmlns="urn:bar-namespace">

 <xsl:template match="foo">

...

 </xsl:template>

</xsl:stylesheet>

В элементе xsl:stylesheet пространство имен с URI

"urn:bar-namespace"
определяется как пространство имен по умолчанию и паттерн
foo
соответствует элементу с локальной частью имени
"foo"
и URI пространства имен
"urn:bar-namespace"
.

Средства для форматирования даты и времени

В первых версиях XSLT элемент

xsl:decimal-format
и функция
format-number
обеспечивали форматирование чисел при их текстовом отображении. К сожалению, подобных инструментов для форматирования даты предусмотрено не было.

Поскольку связка элемента, определяющего именованный формат и функции, выполняющей форматирование, оказалась очень удачной, по всей вероятности, подобную схему мы будем наблюдать и в версии 2.0. Скорее всего, связка для форматирования даты и времени будет состоять из элемента

xsl:date-format
и функции
format-date
.

Функции id и key на внешних документах

В XSLT 1.1 функции

id
и
key
возвращают множества узлов документа, который содержит текущий узел преобразования. То есть для того, чтобы использовать ключи или уникальные идентификаторы для выбора узлов внешнего документа, необходимо сначала сменить контекст, например:

<xsl:for-each select="document('ext.xml')">

 <xsl:copy-of select="key('name', 'value')"/>

</xsl:for-each>

Требования

ко второй версии XSLT предполагают упрощение работы с ключами и уникальными идентификаторами на внешних документах.

Включение неразбираемых внешних сущностей в виде текста

В первых версиях XSLT отсутствовала возможность включения внешних сущностей, не разбирая их как XML-документы. Без помощи расширений было невозможно включить в выходящий документ простой внешний текстовый файл. Между тем, вполне подходящим решением была бы функция типа

unparsed-entity
, которая по данному URI возвращала бы содержимое ресурса в виде строки. Естественно, при этом необходимо учитывать кодировку внешней сущности и Unicode-символы, которые не могут присутствовать в XML (например, управляющие символы).

Использование именованных сущностей вместо кодов символов

Это требование связано с желанием пользователей видеть в выходящем документе вместо сущности

&#xA0;
ее более привычный вариант
&nbsp;
. В настоящее время приходится прибегать ко всяким хитростям вроде

<xsl:text disable-output-escaping="yes">&amp;nbsp;</xsl:text>

совсем не гарантирующим, кстати, что в выходящем файле окажется именно

&nbsp;
.

В самом преобразовании сущности можно определять в DTD-заголовке следующим образом:

<!DOCTYPE xsl:stylesheet [

 <!ENTITY nbsp "&#хА0;">

]>

<xsl:stylesheet ... >

 ...

</xsl:stylesheet>

Однако на выходящий документ эти определения никоим образом не сказываются.

Обращение ссылок по ID/IDREF

Функция

id
позволяет отыскать в документе элементы по заданным значениями
ID
– атрибутов. Это особенно полезно при работе с
IDREF
– атрибутами, которые ссылаются на
ID
– атрибуты: можно с легкостью выбрать элементы, на которые ссылается текущий элемент. Новым требованием к XSLT 2.0 является возможность "обращать" такого рода ссылки — то есть находить элементы, которые ссылаются на данный элемент (включают определенные значения в свои
IDREF
– атрибуты).

Другие требования

В числе прочих требований, предъявленных к XSLT 2.0, можно перечислить следующие:

□ поддержка группировки;

□ поддержка Unicode-нормализации строк;

□ сортировка узлов в соответствии с информацией о их типах, сообщенной XML-схемой документа;

□ создание и копирование узлов с учетом информации об их типах;

□ создание пространства имен с вычисляемым префиксом и URI.

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

Я не князь. Книга XIII

Дрейк Сириус
13. Дорогой барон!
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Я не князь. Книга XIII

Мастер порталов

Лисина Александра
8. Гибрид
Фантастика:
боевая фантастика
попаданцы
технофэнтези
аниме
фэнтези
5.00
рейтинг книги
Мастер порталов

Испытание золотом

Распопов Дмитрий Викторович
6. 30 сребреников
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Испытание золотом

Эволюция мага

Лисина Александра
2. Гибрид
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Эволюция мага

Я все еще не князь. Книга XV

Дрейк Сириус
15. Дорогой барон!
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Я все еще не князь. Книга XV

Я еще барон. Книга III

Дрейк Сириус
3. Дорогой барон!
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Я еще барон. Книга III

Ну, здравствуй, перестройка!

Иванов Дмитрий
4. Девяностые
Фантастика:
попаданцы
альтернативная история
6.83
рейтинг книги
Ну, здравствуй, перестройка!

Испытание Системы III

Котов Артём
3. Испытания системы
Фантастика:
попаданцы
рпг
фэнтези
фантастика: прочее
5.00
рейтинг книги
Испытание Системы III

Купец из будущего 2

Чайка Дмитрий
2. Третий Рим
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Купец из будущего 2

Жестокая свадьба

Тоцка Тала
Любовные романы:
современные любовные романы
4.87
рейтинг книги
Жестокая свадьба

Идеальный мир для Демонолога 11

Сапфир Олег
11. Демонолог
Фантастика:
боевая фантастика
аниме
5.00
рейтинг книги
Идеальный мир для Демонолога 11

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

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

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

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

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

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