Язык преобразований XSL


Ключи - часть 3


Заметим также, что одному узлу может соответствовать несколько элементов xsl:key. В этом случае будут использованы все совпавшие элементы xsl:key, даже если они имеют разный .

Если значение атрибутов use или match содержит , фиксируется ошибка.

Функция: набор-узлов key(строка, объект)

Функция играет для ключей ту же роль, что и функция для идентификаторов ID. Первый аргумент функции указывает имя ключа. Значением данного аргумента должно быть , которое приводится к расширеному имени как было описано в главе . Если вторым аргументом функции является список узлов, то результатом вызова будет объединение результатов вызова функции для строкового каждого узла в списке, указанном в аргументе. Если же второй аргумент функции имеет какой-либо иной тип, то этот аргумент преобразуется в строку, как при вызове функции . При этом функция возвращает набор узлов из того же документа, где находится узел контекста, значение именованного ключа которых соответствует этой строке.

Например, дана декларация

<xsl:key name="idkey" match="div" use="@id"/>

выражение key("idkey",@ref) возвратит тот же набор узлов, что и id(@ref), при условии, что в исходном XML-документе был декларирован единственный атрибут ID:

<!ATTLIST div id ID #IMPLIED>

а атрибут ref текущего узла не содержит пробельных символов.

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

<prototype name="key" return-type="node-set"> <arg type="string"/> <arg type="object"/> </prototype>

а чтобы обратиться к названию функции используется элемент function

<function>key</function>

В таком случае представленный стиль может генерировать гиперссылки между указанными ссылками и определениями следующим образом:

<xsl:key name="func" match="prototype" use="@name"/> <xsl:template match="function"> <b> <a href="#{generate-id(key('func',.))}"> <xsl:apply-templates/> </a> </b> </xsl:template>




- Начало -  - Назад -  - Вперед -