содержимое дочернего элемента xsl:fallback.

Пример

На тот случай, если процессор не сможет выполнить наш элемент расширения ext:date, мы можем 'подстраховать' его следующим образом:

<ext:date pattern='HH:mm'>

 <xsl:fallback>unknown time</xsl:fallback>

</ext:date>

В этом случае шаблон

<xsl:template match='/'>

 <!-- ... -->

 <p>This page was generated at <ext:date pattern='HH:yy'>

  <xsl:fallback>unknown time</xsl:fallback>

 </ext:date>.</p>

</xsl:template>

в случае невозможности выполнить ext:date выведет

<p>This page was generated at unknown time.</p>

Заметим, что xsl:fallback применим не только для обработки исключительных ситуаций, связанных с элементами расширения. Наборы доступных процессору элементов XSLT будут также меняться от версии к версии, и xsl:fallback вполне пригодится для обеспечения обратной совместимости. Например, если в версии XSLT 2.0 будет определен элемент xsl:for-each- group, то xsl:fallback можно использовать при создании альтернативного варианта для процессоров, которые еще не поддерживают новую версию:

<xsl:for-each-group select='item' group-by='@number'>

 <!-- ... -->

 <xsl:fallback>

  <xsl:for-each select='item[generate-id(.)=

   generate-id(key('item', @number))]'>

   <!-- ... -->

  </xsl:for-each>

 </xsl:fallback>

</xsl:for-each>

Инициатива EXSLT

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

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

Для конечного пользователя EXSLT — это множество библиотек расширений, которые можно загрузить с сайта http://www.exslt.org. Помимо этого, EXSLT-расширения уже являются встроенными для некоторых процессоров. Например, в процессоре Saxon реализовано большинство элементов и функций расширения EXSLT.

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

□ Common — общие функции и элементы расширения. Включает функции exslt:node-set и exslt:object-type и элемент exslt:document.

□ Math — математические функции.

□ Sets — функции для работы с множествами узлов (как-то: пересечение, разность и так далее).

□ Functions — элементы для определения пользовательских функций.

□ Dates and Times — элементы и функции для работы с временными параметрами.

□ Strings — модуль для работы со строками.

□ Regular Expressions — функции для работы с регулярными выражениями.

EXSLT покрывает большинство стандартных задач расширений — поэтому, прежде, чем браться за разработку собственных модулей расширения, следует проверить — нет ли уже реализованных аналогов. Кроме того, библиотеки EXSLT могут послужить хорошим примером программирования расширений.

Глава 11

Готовые решения

Группировка

Мы уже рассматривали задачу группировки, когда разбирали устройство и функционирование ключей — это была та самая задача, в которой из документа вида.

Листинг 11.1 Входящий документ

<items>

 <item source='a' name='A'/>

 <item source='b' name='B'/>

 <item source='a' name='C'/>

 <item source='c' name='D'/>

 <item source='b' name='E'/>

 <item source='b' name='F'/>

 <item source='c' name='G'/>

 <item source='a' name='H'/>

</items>

нужно было получить документ вида.

Листинг 11.2. Требуемый результат

<sources>

 <source name='а'>

  <item source='a' name='A'/>

  <item source='a' name='C'/>

  <item source='a' name='H'/>

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

0

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

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