□ Если первый в порядке просмотра документа узел переданного множества не принадлежит никакому пространству имен, функция возвращает пустую строку.
□ В противном случае функция возвращает URI пространства имен первого в порядке просмотра документа узла переданного множества.
Функция
name
возвратит имя вида
QName
, которое будет соответствовать расширенному имени первого в порядке просмотра документа узла переданного ей множества.
Это имя должно соответствовать расширенному имени узла, то есть должны совпадать локальные части и пространства имен. Вместе с тем, это вовсе не означает, что префиксы также будут
совпадать. Например, если в элементе определены несколько префиксов для одного пространства, функция
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
.
Документ, описывающий этот граф, может выглядеть следующим образом.