document関数の概要(XSLT1.0)
XSLT1.0 のdocument関数の定義をはっきりさせる試み。
仕様書のdocument関数の説明が曖昧で分かりづらいと思われたので、適当に意訳してみました。間違った解説、不十分な解説が多いのも理由です。
尚、ノード集合は {} (一対のカーリブラケット)で表記し、各ノードはその中にカンマで区切って列挙しています。
document(ノード集合) の場合
- あるdocument関数 が、唯一つの引数 A を持ち、A がノード集合 { a1, a2, .. am } である場合、その戻り値は、A に含まれる各ノード an (n = 1, 2, .. m) について、an の文字列値を第一引数とし、an のみ含むノード集合を第二引数にもつ document関数、即ち、 document(string({ an }), { an }) (n = 1, 2, .. m) の結果の和集合になる。
もう少し短くしますと:
- あるdocument関数 が、唯一つの引数 A を持ち、A がノード集合 { a1, a2, .. am } であるならば、その戻り値は、document(string({ an }), { an }) (n = 1, 2, .. m) の戻り値の和集合になる。
因みにこのケースについてきちんと説明している解説を見たことがありません。
document(ノード集合) の例に続きます。
document(ノード集合, ノード集合) の場合
- あるdocument関数が二つの引数 A, B を持ち、A がノード集合 { a1, a2, .. am } であり、B がノード集合 { b1, b2, .. } であるならば、その戻り値は、document(string({ an }), { b1 }) (n = 1, 2, .. m) の結果の和集合となる。
document(文字列) の場合
document(絶対URI) の場合
- あるdocument関数が唯一つの引数 A を持ち、A が絶対URIを表す文字列であったなら、その戻り値は、ノード集合 { B } になる。但し B は、絶対URI A が識別するリソースのXMLツリーのルートノードであると定義する。
document(絶対URI) の例に続きます。
document(相対URI) の場合
- あるdocument関数が唯一つの引数 A を持ち、A が相対URIを表す文字列であったなら、その戻り値は、ノード集合 { B } になる。但し B は、そのdocument関数を呼び出したXSLTの要素が持つBase URIを基底として、相対URI A を絶対URI A' に解決したときの A' が識別するリソースのXMLツリーのルートノードであると定義する。
document(文字列, ノード集合) の場合
document(絶対URI, ノード集合) の場合
- あるdocument関数が二つの引数 A, B を持ち、A が絶対URIを表す文字列であったなら、その戻り値は、ノード集合 { C } になる。但し C は、 絶対URI A が識別するリソースのXMLツリーのルートノードであると定義する。 URIの解決に不要である為 B は無視される。
document(相対URI, ノード集合) の場合
- あるdocument関数が二つの引数 A, B を持ち、A が相対URIを表す文字列、B がノード集合 { b1, b2, .. } であったなら、その戻り値は、ノード集合 { C } になる。但し C は、ノード集合 B における ノード b1 のBase URIを基底として、A を絶対URI A' に解決したときの A' が識別するリソースのXMLツリーのルートノードであると定義する。
document(文字列でもノード集合でもないデータ型, ノード集合?) の場合
- あるdocument関数 document(A, B?) の第一引数 A が、文字列でもノード集合でもないならば、その戻り値は、document(string(A), B?) の結果と同じである。
私はまずこの方法は使いません。最初からstring関数で文字列に変換しておきます。ややこしいからエラーにしてしまえば良いのに。
さて
それぞれの例については後ほど(長すぎるので)。
webmaster@jintrick.net
公開: 2003年09月11日
カテゴリ: XSLT