
[1] [CODE(XSLTe)[[VAR[xslt:]]attribute]] 要素型は、
[[雛形]]中で、[[属性節]]を生成するのに使います。
<http://www.w3.org/TR/xslt#element-attribute>

[2] 属性:
,[CODE(XSLTa)[[[name]]]]	,{[[QName]]}	,(必須)	,属性名
,[CODE(XSLTa)[[[namespace]]]]	,{[[URI参照]]}	,([CODE(XSLTa)[name]] 属性による)	,[[名前空間名]]

[3] 属性名の決定は、
[CODE(XSLTe)[[VAR[xslt:]][[element]]]]
要素の場合とほぼ同じ手順で行われます。但し、
- [CODE(XSLTa)[name]] 属性の評価結果が接頭辞なしで、
[CODE(XSLTa)[namespace]] 属性でも名前空間名がなしになる場合は
null 名前空間です。 ([[既定名前空間]]ではありません。)
- [CODE(XSLTa)[name]] 属性の評価結果が [[QName]]
にならない場合だけでなく、丁度 [CODE(XML)[[[xmlns]]]]
になった場合も[[誤り]]とし、報告するか、又は属性を追加しないことで誤りから回復しなければなりません。
- 名前空間接頭辞が [CODE(XML)[xmlns]]
であった場合、結果木でも同じこの接頭辞にしてはいけません。
-- 例えば、 [SAMP(XML)[<[VAR[xslt:]]attribute name="xmlns:xslt" namespace="whatever">http://www.w3.org/1999/XSL/Transform</xsl:attribute>]]
は誤りではありません。
しかし、結果木に [CODE(XML)[xmlns:xslt]]
属性ができてはいけません。
例えば [SAMP(XML)[<[VAR[element]] [VAR[whatever]]:xslt="http://www.w3.org/1999/XSL/Transform" xmlns:[VAR[whatever]]="whatever"/>]]
のような結果が得られるべきです。
-- それではこの例と同じで、但し [CODE[whatever]]
の代わりに xmlns の名前空間 URI が指定されていたらどうかは仕様書には書かれていません。
XSLT 1.0 仕様書が xmlns の名前空間 URI が決定される以前に書かれたからでしょう。
単なる [CODE(XML)[xmlns]] 属性と同様に誤りとするのが適当だと思われます。

[4] 既に存在する名前の属性を追加しようとした場合、
後の方に置き換えられます。
例えば、
[PRE[
<element attr1="val1">
  <[VAR[xslt:]]attribute name="attr1">val2</[VAR[xslt:]]attribute>
  <[VAR[xslt:]]attribute name="attr2">val3</[VAR[xslt:]]attribute>
  <[VAR[xslt:]]attribute name="attr2">val4</[VAR[xslt:]]attribute>
</element>
]PRE]

なら結果木は
[PRE[
<element attr1="val2" attr2="val4"/>
]PRE]

になります。

[5] 
- 他の種類の[[子節]]が追加された後から属性節を追加しようとするとき、
それは誤りとします。
-- 例: ×[SAMP(XSLT)[<template>text<attribute/></template>]]
-- 誤りを報告するか、または追加しようとする属性節は追加せずに無視します。
- [[要素節]]以外に属性節を追加しようとする時、
これは誤りとします。
-- 誤りを報告するか、または追加しようとする属性節は追加せずに無視します。
- 属性節の内容の[[実現値化]]の過程で[[文節]]以外が生成されようとしたとき、
これを誤りとします。
-- 例: ×[SAMP[<attribute>attr val <element/> attr val</attribute>]]
-- 誤りを報告するか、または追加しようとする属性節は追加せずに無視します。
