document()

document()

[3] XSLT の関数 節集合 document (物体, 節集合?)]] は、外部 (>>10) XML 文書を節集合として返します。

[10] 外部 XML 文書とは言っても、 XSLT スタイル・シート自分自身を指定することもできます。

[11] 引数の解釈は微妙に複雑です。

引数 1引数 2結果
{1,...,n}(なし)document(文字列値 (1), {1}) | document(文字列値 (n), {n})
{1,...,n}節集合document(文字列値 (1), 節集合) | document(文字列値 (n), 節集合)
節集合以外節集合?string (節集合以外) という URI の木の節集合

[9] 基底 URI: 第1引数が相対URI である場合には、 第2引数の節集合のうち、文書順で最初の文字列値基底URI として解決します。第2引数が与えられていない場合には、 document() 関数が含まれる式が含まれる節の基底 URI を使います。

[4] >>3 第2引数が空節集合だったらどうするんだろう。。。

[7] >>4 誤りとし、通知又は空節集合を結果にします。 <http://www.w3.org/1999/11/REC-xslt-19991116-errata/#E14>

[5] 資源を得られない場合: 与えられた URI 参照の資源を得られなかった場合には、 誤りとし、通知するか又は空節集合を返します。 なお、実装者は対応している URI scheme を文書化しておくべきです。 資源は媒体型に関わらず XML として解釈します。 text/* であれば text/xml と同様に、 そうでなければ application/xml として扱います。

[8] 素片識別子: URI参照素片識別子を含む場合、その素片識別子が識別する部分を返します。 但し、例えば文節の何文字目から〜のような XPath 的に扱えない素片などは扱えません。 扱えない素片は誤りとし、通知するか、又は空節集合を返します。 実装は素片を扱える媒体型を文書化しておくべきです。

[6] >>8 RFC 3023 とは違った独自の定義がある XML 系媒体型だとまずいことになる予感。。。

[14] 実装によっては安全上の理由から取得できる資源を URI 参照の種類やホスト名などによって制限していることもあります。

そうである場合もそうでない場合も、 単純に変換して Web ブラウザで表示するなどのごく簡単な操作以上のことをする場合は、 利用者の入力に依存して URI 参照を決定したり外部の資源を使ったりする時には安全について十分な配慮が必要です。 (名無しさん [sage])

[15] Firefox で document() が機能しない: Firefoxdocument() が機能しないことがあります。ブラウザ画面には異常を示すメッセージなどは表示されませんが、意図した通りの結果木ができません。

そのような場合は、 JavaScript コンソール (ツール → JavaScript コンソール) にメッセージが出ていないか確認してみてください。 他の鯖にある XML 文書を参照しようとすると、安全のために制限されて取得できないようです。