Именованных наборов атрибутов создаются с помощью элемента верхнего уровня xsl:attribute-set
, и затем могут быть использованы в других инструкциях, таких как xsl:element
, xsl:copy
и в самом элементе xsl:attribute-set
. Именованный набор атрибутов представляет собой определенную совокупность атрибутов (т.е. пар имя = «значение»), не относящихся к определенному элементу. Эта совокупность имеет имя, по которому к ней можно обратиться из другой инструкции, и таким образом добавить все атрибуты из совокупности к конечному элементу.
Синтаксис:
1 2 3 4 5 | <xsl:attribute-set name = "строка" use-attribute-sets = "строка"> Инструкции xsl:attribute </xsl:attribute-set> |
Атрибуты:
name
– является обязательным и задает имя набора атрибутов. По этому имени впоследствии можно обратиться к набору из другой инструкции с помощью атрибутаuse-attribute-sets
, и добавить тем самым атрибуты из набора к конечному элементу.use-attribute-sets
– позволяет как бы импортировать в текущий набор атрибуты из другого набора. Значением данного атрибута будет имя импортируемого набора.
Содержимое элемента xsl:attribute-set
может состоять из нуля или нескольких элементов xsl:attribute
, с помощью которых и создаются атрибуты в этом наборе.
Для использования именованного набора атрибутов в других инструкциях применяется атрибут use-attribute-sets
, значением которого должен быть перечень имен наборов атрибутов через пробел. Включение в указанные инструкции атрибута use-attribute-sets
равнозначно добавлению элементов xsl:attribute
для каждого атрибута из каждого именованного набора атрибутов в начало содержимого того элемента, где этот атрибут use-attribute-sets
находится, причем в том же порядке, в котором названия этих наборов были перечислены в атрибуте use-attribute-sets
. Так как добавленный к элементу атрибут заменяет любой из уже имевшихся атрибутов этого элемента с таким же именем, то если добавляемые инструкциями xsl:attribute
и элементом xsl:attribute-set
атрибуты повторяются, они будут заменяться в соответствии с указанным порядком.
Если в результате использования атрибутов use-attribute-sets
в элементах xsl:attribute-set
набор атрибутов начинает прямо или косвенно использовать сам себя, фиксируется ошибка.
Набор атрибутов так же можно добавить и к фиксированным конечным элементам, использовав в них все тот же атрибут use-attribute-sets
. Его использование в данном случае даст тот же результат, что и в случае с инструкциями, но порядок включения атрибутов в конечный элемент будет немного другим: сначала будут добавлены атрибуты из наборов (причем в том же порядке, в котором названия этих наборов были перечислены в атрибуте use-attribute-sets
), потом будут добавлены атрибуты, указанные в фиксированном конечном элементе, и наконец, будут добавлены все атрибуты, заданные элементами xsl:attribute
. Это нужно учитывать в виду замены атрибутов с одинаковыми именами.
Поскольку набор атрибутов может вызываться из разных шаблонов (xsl:template
), а в самих наборах могут использоваться выражения XPath, следует четко понимать, какой элемент будет в каждом случае являться текущим. Во всех случаях текущим будет являться тот же элемент, который является текущим в инструкции, вызывающей набор (т.е. содержащей атрибут use-attribute-sets
).
Если стиль содержит несколько наборов атрибутов с одинаковым именем, то эти наборы объединяются. При этом если один или несколько наборов был импортирован в стиль, учитывается приоритет импорта.