пространству имен. Для элемента

<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-схемой

Вы читаете Технология XSLT
Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату