Использование нескольких ключей в одном преобразовании
В случае, когда к узлам в преобразовании нужно обращаться по значениям различных свойств, можно определить несколько ключей — каждый со своим именем. Например, если мы хотим в одном случае обращаться к объектам, принадлежащим одному источнику, а во втором — к объектам с определенными именами, мы можем определить в документе два ключа — один с именем src
, второй — с именем name
:
Множество ключей, созданных этими двумя определениями, будет выглядеть следующим образом:
(<item name="А".../>, 'src', 'а')
(<item name="А".../>, 'name', 'А')
(<item name="В".../>, 'src', 'b')
(<item name="В".../>, 'name', 'В')
(<item name="C".../>, 'src', 'a')
(<item name="C".../>, 'name', 'С')
(<item name="D".../>, 'src', 'с')
(<item name="D".../>, 'name', 'D')
...
(<item name="H".../>, 'src', 'a')
(<item name="H".../>, 'name', 'H')
В этом случае функция key('src', 'а')
возвратит объекты с именами A
, C
и H
, а функция key('name', 'а')
— объект с именем А
.
Имя ключа является расширенным именем. Оно может иметь объявленный префикс пространства имен, например
name="data:src"
match="item"
use="@source"
xmlns:data="urn:user-data"/>
В этом случае функция key(key-name, key-value)
будет возвращать узлы, значение ключа с расширенным именем key-name
которых равно key-value
. Совпадение расширенных имен определяется как обычно — по совпадению локальных частей и URI пространств имен.