<axsl:copy>

   <axsl:apply-templates select='@*|node()'/>

  </axsl:copy>

 </axsl:template>

</axsl:stylesheet>

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

Атрибуты stylesheet-prefix и result-prefix элемента xsl:namespace-alias могут иметь значения '#default'. Определение вида

<xsl:namespace-alias

 stylesheet-prefix='a'

 result-prefix='#default'/>

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

<xsl:namespace-alias

 stylesheet-prefix='#default'

 result-prefix='a'/>

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

Пример Листинг 8.17. Преобразование

<xsl:stylesheet

 version='1.0'

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

 xmlns:a='urn:a'

 xmlns='urn:b'>

 <xsl:namespace-alias

  stylesheet-prefix='#default'

  result-prefix='a'/>

 <xsl:namespace-alias

  stylesheet-prefix='a'

  result-prefix='#default'/>

 <xsl:template match='root'>

  <result>

   <a:element/>

  </result>

 </xsl:template>

</xsl:stylesheet>

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

<result xmlns='urn:a' xmlns:a='urn:b'>

 <a:element/>

</result>

Результатом этого преобразования является то, что пространство имен с URI 'urn:а' стало пространством имен по умолчанию, а пространство имен с URI 'urn:b' изменило префикс на а.

В преобразованиях можно объявлять несколько псевдонимов пространств имен при условии, что одно и то же пространство имен преобразования не должно быть объявлено элементами xsl:namespace-alias с одинаковым порядком импорта псевдонимом для различных пространств имен выходящего документа.

Пример

Если преобразование a.xsl содержит определение

<xsl:namespace-alias

 stylesheet-prefix='x'

 result-prefix='a'/>

а преобразование b.xsl — определение

<xsl:namespace-alias

 stylesheet-prefix='x'

 result-prefix='b'/>

где в обоих преобразованиях префикс x представляет одно пространство имен, а пространства имен a и b — разные, то преобразование a.xsl не сможет включать преобразование b.xsl и наоборот, потому что они будут иметь одинаковый порядок импорта и содержать элементы xsl:namespace-alias, назначающие разным пространствам имен одинаковые псевдонимы. В одном преобразовании такие псевдонимы также не имеют права встречаться. Если же подобное все же случилось, процессор может сигнализировать ошибку или использовать определение, которое было дано в преобразовании последним.

Совсем иначе обстоит дело с импортированием. При импортировании определения старших в порядке импорта преобразований могут переопределять определения младших преобразований. Таким образом, если преобразование a.xsl будет импортировать преобразование b.xsl, пространство имен x будет назначено псевдонимом пространству имен а и наоборот.

Ключи

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

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

<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>

Пусть входящий документ представляет собой список объектов (элементов item), каждый из которых имеет имя (атрибут name) и источник (атрибут source). Требуется сгруппировать объекты по своим источникам и получить документ приблизительно следующего вида.

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

0

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

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