[1] XSLT の最上位要素
xslt:output (強制空要素)
を使うと、結果木の出力方法を指定できます。
<http://www.w3.org/TR/xslt#element-output>
但し、実装は必ずしもこの指定を反映させる必要はありません。 特に、結果木を出力せずに次の処理にまわすような場合は全く反映できない (する必要もない) かもしれません。
[2] 属性:
| 属性名 | 属性値 | 既定値 | 説明 | 状態 | 出典 |
cdata-section-elements | qnames | CDATA区間使用要素 | |||
| Saxon 6 | ||||
| Saxon 8 | ||||
charset | charset | 符号化方式 | |||
| XALAN | ||||
doctype-public | 文字列 | 公開識別子 | |||
doctype-system | 文字列 | システム識別子 | |||
| XALAN | ||||
indent | 'yes' / 'no' | 字下げ | |||
| XALAN | ||||
| Saxon 6 | ||||
| Saxon 8 | ||||
media-type | 媒体型 | 媒体型 | |||
method | QName | 出力形式 | |||
| Saxon 6 | ||||
| XALAN | ||||
omit-xml-declaration | 'yes' / 'no' | XML 宣言省略 | |||
standalone | 'yes' / 'no' | 単独文書 | |||
| XALAN | ||||
version | 名前字句 | 出力形式の版 |
xslt:output 要素が複数ある場合、
cdata-section-element 属性についてはすべての
QName を併合, それ以外の属性については輸入優先度最高のものを採用します。
輸入優先度同位の時は誤りで、通知するか又は最後のものを採用します。
以上で定まらない属性の値は既定値となりますが、
既定値は method に依存します。
[3] method の既定値は、
"HTML" で、名前空間URI が null であるの条件が揃えば html,
それ以外のときは xml です。
なお、 method 属性の値は
html,
xml,
text 又は接頭辞つきの修飾名です。
[4] encoding 属性の値は出力する符号化方式の名前で、
1*( %x21-7E ) でなければなりません。
この名前は IANA の charset 登録簿の名前か、
または x- で始まる名前であるべきです。
media-type 属性の値は媒体型ですが、
charset 引数は指定するべきではありません。
text/* 媒体型の場合は自動的に
encoding を参考に適当な名前の
charset 引数を与えるべきです。
[5] >>4 とはいっても、実装側は「text/*
の場合は与えるべき」であって、「与えなければならない」
じゃないですし、非 text/*
のときは与えるべきでさえないわけです。
だから、例えば encoding="iso-2022-jp" media-type="application/xhtml+xml; charset=iso-2022-jp"
のように多少面倒でも明記しておいた方がいいんじゃないですかね?
method | 出力方式 | 状態 | 出典 |
html | HTML出力方式 | W3C 勧告 | XSLT 1.0 |
text | 文出力方式 | W3C 勧告 | XSLT 1.0 |
xml | XML出力方式 | W3C 勧告 | XSLT 1.0 |
| 非 XML 出力方式 | XT | |
| 非 XML 出力方式 (= xt:nxml) | XT |
cdata-section-elements 属性の接頭辞なしの名前は既定名前空間になるんですが、これは XML 処理方式の説明の中にあります。つまり、拡張処理方式で既定名前空間ではなく別の目的で無接頭辞名を使うというのもあり得るということです。ところが、複数 xslt:output 要素の併合時には修飾名を展開した状態にしないといけないわけです。この辺、実装の仕方によってはちょっと厄介なことになるかもね。