blob: e3888ab698133fdf314ee5accbbdb19e9d4faf9d (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
|
---
title: PIパラメータ
slug: Web/XSLT/PI_Parameters
tags:
- XSLT
translation_of: Web/XSLT/PI_Parameters
---
<h3 id="概要">概要</h3>
<p>XSLT は実行時にパラメータをスタイルシートに渡すという概念をサポートしています。これによりしばらくの間は JavaScriptで <a href="/ja/docs/Web/API/XSLTProcessor">XSLTProcessor</a> を使用することが可能です。しかし、 <code><?xml-stylesheet?></code> 処理命令(PI)を使用するときは、パラメータを提供する方法がありませんでした。<br>
<br>
これを解決するために2つの新しい PI 、つまり <code><?xslt-param?></code> および <code><?xslt-param-namespace?></code> が <a href="/ja/docs/XSLT/en/Firefox_2">Firefox 2</a> (詳細については{{ Anch("Supported versions") }}を参照) で実装されています。どちらのPIにも、<code>xml-stylesheet</code> PI と同じ方法で「擬似属性」を含めることができます。<br>
<br>
次のドキュメントは "color" と "size" の2つのパラメータをスタイルシート "style.xsl" に渡します。</p>
<pre class="eval"><?xslt-param name="color" value="blue"?>
<?xslt-param name="size" select="2"?>
<?xml-stylesheet type="text/xsl" href="style.xsl"?>
</pre>
<p>これらの PI は JavaScript で <code>XSLTProcessor</code> オブジェクトを使用して変換が行われても効果がありません。</p>
<h3 id="Processing_instructions" name="Processing_instructions">処理の指示</h3>
<p><code>xslt-param</code> および <code>xslt-param-namespace</code> PIの属性は、<a href="http://www.w3.org/TR/xml-stylesheet/">xml-stylesheet</a> で定義されている規則を使用して解析されます。認識できない属性はすべて無視する必要があります。属性の解析は、 <code>xml-stylesheet</code> の構文に従う限り、認識できない属性が存在するせいで失敗してはなりません。</p>
<p><code>xslt-param</code> と <code>xslt-param-namespace</code> PIの両方はドキュメントのプロローグ、つまり最初の要素タグの前になければなりません。プロローグ内のすべての PI は、<code>xml-stylesheet</code> PIの前後に発生する必要があります。</p>
<p>複数の <code>xml-stylesheet</code> PIがある場合、パラメータはすべてのスタイルシートに適用され、その結果すべてのスタイルシートがXSLT仕様に従って単一のスタイルシートにインポートされます。複数の <code>xml-stylesheet</code> XSLT PI は現在 Firefox ではサポートされていません。</p>
<h4 id="xslt-param" name="xslt-param">xslt-param</h4>
<p><code>xslt-param</code> PI は 4つの属性をサポートしています。</p>
<dl>
<dt>name </dt>
<dd>パラメータ名のローカル名部分。属性の構文チェックは行われませんが、有効な <a href="http://www.w3.org/TR/REC-xml-names/#NT-NCName">NCName</a> でない場合は、スタイルシートのどのパラメータにも一致しません。</dd>
<dt>namespace </dt>
<dd>パラメータ名の名前空間。属性の構文チェックは行われません。</dd>
<dt>value </dt>
<dd>パラメータの文字列値を格納します。属性の値はパラメータの値として使用されます。データ型は常に最適です。</dd>
<dt>select </dt>
<dd>パラメータの <a href="/ja/docs/XPath">XPath</a> 式。属性の値は XPath 式として解析されます。式を評価した結果はパラメータの値として使用されます。</dd>
</dl>
<p><strong>name</strong> 属性がないか空の場合、PI は無視されます。</p>
<p><strong>namespace</strong> 属性がないか空の場合、null 名前空間が使用されます。</p>
<p>スタイルシートに存在しない (またはスタイルシート内の変数である) パラメータ名を指定するのはエラーではありません。PI は単に無視されます。</p>
<p><strong>value</strong> と <strong>select</strong> の両方が存在する場合、または <strong>value</strong> も <strong>select</strong> も存在しない場合、PI は無視されます。</p>
<p><code>value="..."</code> はアポストロフィと引用文字の両方を含むことができるので、厳密には <code>select="'...'"</code> と等しくないことに注意してください。</p>
<h5 id="Examples" name="Examples">例</h5>
<p>パラメータ 'color' を文字列 'red' に設定します。</p>
<pre class="eval"><?xslt-param name="color" value="red"?>
</pre>
<p>パラメータ 'columns' を2に設定します。</p>
<pre class="eval"><?xslt-param name="columns" select="2"?>
</pre>
<p>パラメータ 'books' を null 名前空間のすべての <code><book></code> 要素を含むノードセットに設定します。</p>
<pre class="eval"><?xslt-param name="books" select="//book"?>
</pre>
<p>パラメータ 'show-toc' を真偽値 <code>true</code> に設定します。</p>
<pre class="eval"> <?xslt-param name="show-toc" select="true()"?>
</pre>
<h5 id="The_select_attribute_context" name="The_select_attribute_context">select属性コンテキスト</h5>
<p>次のコンテキストは、<strong>select</strong> 属性の式の解析と評価に使用されます。</p>
<ul>
<li>コンテキストノードは、スタイルシートを実行するときに使用される初期カレントノードとして使用されるノードです</li>
<li>コンテキストポジションは、スタイルシートを実行する際に使用される初期カレントノードリスト内のコンテキストノードの位置です</li>
<li>コンテキストサイズは、スタイルシートを実行する際に使用される初期の現在のノードリストのサイズです</li>
<li>変数はありません</li>
<li>関数ライブラリは標準の XPath 関数ライブラリです。</li>
<li>名前空間宣言は <code>xslt-param-namespace</code> PI によって決まります。以下を参照してください</li>
</ul>
<p><strong>select</strong> 属性が解析または実行に失敗した場合、PI は無視されます (特に、<strong>value</strong> 属性に戻ることはありません)。</p>
<h4 id="xslt-param-namespace" name="xslt-param-namespace">xslt-param-namespace</h4>
<p><code>xslt-param-namespace</code> は2つの属性を使用します。</p>
<dl>
<dt>prefix </dt>
<dd>マッピングされている接頭辞</dd>
<dt>namespace </dt>
<dd>接頭辞がマップされる名前空間</dd>
</dl>
<p><code>xslt-param-namespace</code> PI は、それに続くすべての xslt-params のselect属性の式に影響します。 これは、xslt-param-namespaceとxslt-param PIの間にコメントや他のPIなどの他のノードがある場合でも適用されます。</p>
<p>複数の PI が同じプレフィックスを使用するのはエラーではなく、新しい PI はすべてプレフィックスがマップする名前空間を変更するだけです。</p>
<p><strong>接頭辞</strong>がないか、空もしくは無効な NCName と等しい場合、PI は無視されます。<br>
<br>
<strong>名前空間</strong>がない場合、PI は無視されます。<strong>名前空間</strong>が空の場合、接頭辞マッピングは削除されます。</p>
<h5 id="Examples_2" name="Examples_2">例</h5>
<p>パラメータ 'books' を 'http://www.example.org/myNamespace' 名前空間のすべての <code><book></code> 要素を含むノードセットに設定します。</p>
<pre class="eval"><?xslt-param-namespace prefix="my" namespace="<span class="nowiki">http://www.example.org/myNamespace</span>"?>
<?xslt-param name="books" select="//my:book"?>
</pre>
<h3 id="Supported_versions" name="Supported_versions">サポート対象バージョン</h3>
<p>Firefox 2.0.0.1以降でサポートされています。<strong>value</strong> 属性は Firefox 2 ではサポートされていますが、2.0 リリースの一部の式では <strong>select</strong> 属性がクラッシュします。</p>
<h3 id="Possible_future_developments" name="Possible_future_developments">可能性のある将来の開発</h3>
<p>式に XSLT 関数を許可する必要がありますか? <code>document()</code> は役に立ちそうですが、<code>generate-id()</code> が同じ文書に対して同じ文字列を生成しなければならない不変条件を維持するのは難しいようです。</p>
<p>XSLT スタイルシートで URL パラメータをクエリするとどうなりますか? 例えば、それらを指定された <xsl:param>に渡します。</p>
|