18c0693f

Функции id() и key()


Образец может начинаться с вызова функции id() или функции key(). Единственным аргументом функции id() служит уникальный идентификатор узла, т.е. значение его атрибута типа ID. Например, образцу id(@xref) соответствует узел-элемент, на идентификатор которого ссылается значение атрибута xref. Образцу id(<h12>) соответствует узел-элемент с идентификатором h12, а образцу id(<h12>)//street - его потомки street любого уровня вложенности.

Функция id(), работающая с атрибутами типа ID, подвержена всем ограничениям этого типа, а именно:

Функция key() менее требовательна. Она снимает ограничения функции id(), обращаясь не к атрибуту элемента, находящегося в документе ХМL, а к атрибуту use специального элемента xsl:key, расположенного в таблице стилей. У нее два аргумента:

Образец с функцией key() выглядит примерно так: key("addr", 230007)//street.

Элемент xsl:key определяет ключ и множество значений, а функция key() выбирает из этого множества те значения, что совпадают со вторым аргументом функции key(). Таким образом, при необходимости создания новых ссылок в исходном документе XML, его не надо изменить, достаточно добавить новые элементы xml:key в таблицу стилей.