<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body><section><h1>xslt:key 要素 (XSLT)</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="2" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[2]</anchor-end> <code class="XSLTe"><var>xslt:</var>key</code> 要素
(<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://www.w3.org/TR/xslt#element-key">http://www.w3.org/TR/xslt#element-key</anchor-external>)
は、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">鍵</anchor>を設定するのに使います。</p><p>属性:<table><tbody><tr><td><code class="XSLTa"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">match</anchor></code></td><td><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">パターン</anchor></td><td>(必須)</td><td>鍵対象節</td></tr><tr><td><code class="XSLTa"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">name</anchor></code></td><td><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">QName</anchor></td><td>(必須)</td><td>鍵名</td></tr><tr><td><code class="XSLTa"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">use</anchor></code></td><td><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">式</anchor></td><td>(必須)</td><td>鍵値取得元</td></tr></tbody></table></p></section><section><h1>文脈</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="7" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[7]</anchor-end> この要素は<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">強制空要素</anchor>で、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">最上位要素</anchor>です。</p><p>他の最上位要素とは異なり、この要素型では<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">輸入優先度</anchor>による取捨選択がありません。
輸入優先度とは全く無関係に、全ての要素が使われます。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="3" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[3]</anchor-end> <code class="XSLTa">match</code> 属性及び
<code class="XSLTa">use</code> 属性で<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">変数参照</anchor>を使うのは<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">誤り</anchor>です。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="8" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[8]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Schematron</anchor> でも使うことができます。</p><section><h1>処理</h1><p><code class="XSLTa">use</code> 属性は <code class="XSLTa">match</code>
の式に一致した節それぞれについて、
その節を<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">現在節</anchor>, その節だけを<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">現在節並び</anchor>として評価します。
その結果が鍵名になりますが、節集合ならその構成要素それぞれの<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文字列値</anchor>
(複数になることもある!), それ以外なら
<code class="XPathf"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">string</anchor></code> 関数に通した結果が採用されます。</p></section></section><section><h1>key 関数 (XSLT)</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="4" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[4]</anchor-end> <code><var>節集合</var> <code class="XPathf">key</code> (<var><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">QName</anchor></var>, <var>物体</var>)</code>
は、条件に合致する鍵の節を返します。
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://www.w3.org/TR/xslt#function-key">http://www.w3.org/TR/xslt#function-key</anchor-external></p><p>第1引数は鍵の名前、第2引数は鍵の値です。
第2引数が節集合以外であれば、
<code class="XPathf"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">string</anchor></code> 関数を通した値と鍵の値の一致をみます。
節集合であれば、構成するそれぞれの節の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文字列値</anchor>についての結果の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">和集合</anchor>となります。</p><form xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" ref="comment"></form><section><h1>メモ</h1><ul><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="1" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[1]</anchor-end> <em><anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="xsl:key">xsl:key</anchor-external>を使おう(1)</em> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://www.yuragi.jp/playxslt/p003.asp">http://www.yuragi.jp/playxslt/p003.asp</anchor-external></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="5" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[5]</anchor-end> <em>はてなダイアリー - Hatena::agenda</em> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://d.hatena.ne.jp/jintrick/20031004">http://d.hatena.ne.jp/jintrick/20031004</anchor-external> : 仕様書に挙げられている例なんて簡単に XPath 式で代替できる、もっとまともな例を出せよ!という話。</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="6" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[6]</anchor-end> <em>key関数の考察(XSLT1.0) - agenda 2003-10(上旬) - Personnel</em> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://members.jcom.home.ne.jp/jintrick/Personal/d200310f.html#d4_1">http://members.jcom.home.ne.jp/jintrick/Personal/d200310f.html#d4_1</anchor-external> : <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="5" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;5</anchor-internal> ということで key についての考察キター(AA略)</li></ul></section></section></body></html>