[1] [CODE(XSLTe)[[VAR[xslt:]]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]] は誤りではありません。 しかし、結果木に [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[ <[VAR[xslt:]]attribute name="attr1">val2 <[VAR[xslt:]]attribute name="attr2">val3 <[VAR[xslt:]]attribute name="attr2">val4 ]PRE] なら結果木は [PRE[ ]PRE] になります。 [5] - 他の種類の[[子節]]が追加された後から属性節を追加しようとするとき、 それは誤りとします。 -- 例: ×[SAMP(XSLT)[]] -- 誤りを報告するか、または追加しようとする属性節は追加せずに無視します。 - [[要素節]]以外に属性節を追加しようとする時、 これは誤りとします。 -- 誤りを報告するか、または追加しようとする属性節は追加せずに無視します。 - 属性節の内容の[[実現値化]]の過程で[[文節]]以外が生成されようとしたとき、 これを誤りとします。 -- 例: ×[SAMP[attr val attr val]] -- 誤りを報告するか、または追加しようとする属性節は追加せずに無視します。