name может использовать любой из них.

Пример

Для следующего элемента

<a:body

 xmlns:a='http://www.a.com'

 xmlns:b='http://www.a.com'

 xmlns:c='http://www.a.com'/>

функция name может вернуть a:body, b:body или c:body.

Большинство процессоров все же возвращает префикс, с которым узел был объявлен.

Так же как local-name и namespace-uri, функция name имеет следующие особенности использования.

□ Если аргумент опущен, то его значением по умолчанию является множество, содержащее единственный контекстный узел.

□ Если аргументом является пустое множество, то функция возвращает пустую строку.

□ Если первый в порядке просмотра документа узел переданного множества не имеет расширенного имени, то функция возвращает пустую строку.

□ В противном случае функция возвращает имя вида QName, соответствующее расширенному имени первого в порядке просмотра документа узла переданного множества.

Пример

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

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

<a:a

 xmlns:a='http://www.a.com'

 xmlns:b='http://www.b.com'>

 <b:b>

  <c/>

 </b:b>

</a:a>

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

<xsl:stylesheet

 version='1.0'

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

 xmlns:a='http://www.a.com'

 xmlns:b='http://www.b.com'>

 <xsl:output indent='yes'/>

 <xsl:template match='*'>

  <element

   name='{name()}'

   namespace-uri='{namespace-uri()}'

   local-name='{local-name()}'>

   <xsl:apply-templates/>

  </element>

 </xsl:template>

</xsl:stylesheet>

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

<element

 xmlns:a='http://www.a.com'

 xmlns:b='http://www.b.com'

 name='a:a'

 namespace-uri='http://www.a.com'

 local-name='a'>

 <element name='b:b'

  namespace-uri='http://www.b.com'

  local-name='b'>

  <element name='c'

   namespace-uri=''

   local-name='c'/>

 </element>

</element>

Функция id

node-set id(object)

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

Функция id выполняется по-разному в зависимости от того, какой тип данных ей передается.

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

□ Если аргументом функции является множество узлов, результатом ее выполнения будет объединение результатов функции id, примененной к строковому значению каждого из узлов множества.

□ Если аргументом функции является объект другого типа, аргумент вначале преобразуется в строку и функция id выполняется как со строковым параметром.

Пример

Предположим, что мы используем XML для того, чтобы описать граф — множество вершин, соединенных дугами (рис. 6.11).

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

Каждой вершине будет соответствовать элемент vertex. Для того чтобы описать все связи, мы дадим каждой вершине уникальное имя, которое будет записано в ее ID-атрибуте name. Имена вершин, с которыми она соединена, будут перечислены в атрибуте connects типа IDREFS.

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

Листинг 6.13. Документ gemini.xsl

<!DOCTYPE vertices SYSTEM 'gemini.dtd'>

<vertices>

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

0

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

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