* XSLT 1.0 の定義

[1] [DFN[HTML 出力方式]] (HTML output method)
では、[[結果木]]を [[HTML]]として出力します。

[10] 仕様書:
- [[XSLT 1.0]]
-- [CITE[16.2 HTML Output Method]]
<http://www.w3.org/TR/xslt#section-HTML-Output-Method>

[2] [CODE(XSLTe)[[VAR[xslt:]][[output]]]] 要素の
[CODE(XSLTa)[[[version]]]] 属性で HTML 
の版を指定します。既定値は [CODE(XSLTa)[4.0]]
ですが、これは望ましくありません。スタイルシート著者は
[CODE(XSLTa)[4.01]] と明示するべきです。
([[HTML4.0]] は [[HTML4.01]] に置き換えられました。)

版番号を指定するだけでは十分ではありません。
[CODE(XSLTa)[[[doctype-public]]]] 属性[[及び/又は]]
[CODE(XSLTa)[[[doctype-system]]]] 属性が指定されていれば、
[[文書型宣言]]が出力されるので、
これも合わせて指定しておく必要があります。

[3] null 名前空間以外の要素は、 [[XML出力方式]]と同じように出力するべきです。
Null 名前空間では、 >>4-5、>>11、>>13 のような配慮があります。

[4] [[強制空要素]]では、[[開始タグ]]だけを出力し、
[[終了タグ]]は省略するべきです。

[CODE(HTML)[[[style]]]], [CODE(HTML)[[[script]]]]
両要素では内容は SGML [[CDATA]] として扱います。
[WEAK[ちなみに、 [CODE(XSLTa)[[[cdata-section-elements]]]] は HTML 出力方式では無効です。]]

[CODE(SGML)[[[pic]]]] は [CODE(SGML)[>]] にするべきです。

[5] [[URI]] が値になる属性では、 [[HTML 4.0]] [[勧告]]で[[推奨]]されている方法で[[符号化]] (非 [[ASCII]] 
文字 [WEAK[(非 URI 安全文字じゃないよ。)]] を 
[[UTF-8]] に変換した上で [[URI符号化]]) するべきです。

;; [12] [[URI]] の[[並び]]が[[属性値]]である
[CODE(HTMLa)@en[[[profile]]]] や [CODE(HTMLa)@en[[[archive]]]]
にも適用されるのかは不明です。

;; [[IRI]] の項も参照してください。

[11] 
[[真偽値属性]]値は最小化して属性名を省略した形とするべきです。

[13] 
属性値 [WEAK[(CDATA に限らず。)]] に文字列
[CODE[&{]] が含まれる時 ([[スクリプト・マクロ]]) は、
これを [SAMP(HTML)[&amp;{]] と[[逃避]]せずにそのまま出力します。

[6]  [CODE(XSLTa)[[[indent]]]]
属性の既定値は [CODE(XSLTa)[yes]] です。
字下げするときには、 HTML [[UA]] の解釈に変化がでないであろうように(謎)するべきです。

[7] [CODE(HTML)[[[head]]]] 要素があれば、
その最初の子要素として
[SAMP(HTML)[<[[meta]] [[http-equiv]]="[CODE(HTTP)[[[Content-Type]]]]" [[content]]="[VAR[charset name]]">]]
みたいなのを出力するべきです。

必要なら当該 HTML で規定されている[[文字実体参照]]を使っても構いません。
[WEAK[でも実装は、公開識別子又はシステム識別子を出力する場合に限って使うべきでしょうね。]]

[8] [CODE(XSLTa)[[[media-type]]]] 属性の既定値は
[CODE(MIME)[[[text/html]]]] です。
- [9] >>2,>>7 「当該 HTML で規定されている」ということは、当然文字実体参照を使う実装はその版でどの実体が定義されているのかを知っていないといけません。外部識別子で識別される [[DTD]] を一々読めとは言いませんが、せめて型録的に内部で情報を持ってないといけませんよね。で、定義されていなくて、出力する[[符号化文字集合]]に存在しない文字は[[数値文字参照]]にしないと・・・と書いてて思ったのですが、 [[SGML宣言]]の指定がないのはちょっと不備ですよね。 SGML 宣言がないと、文字参照でどういう[[文字番号]]を使えばいいのかわからないし、[[十六進文字参照]]が使えるのか判断できないし。[[マーク最小化]]がどれだけ許されるのかも分からないと不便。そういうのって、 [CODE(XSLTa)[version]] 属性があるからそれで十分というお考えなのかな? でもそしたら外部識別子をわざわざ指定できる嬉しさが6割引くらいじゃない? それに [[HTML2.x]] の立場は・・・。

* XSLT 2.0 / XQuery 1.0 の定義

@@ ・・・

[14] 仕様書:
-[CITE@en[XSLT 2.0 and XQuery 1.0 Serialization]] ([[W3C]] [[勧告]])
-- [CSECTION@en[C List of URI Attributes]]
<http://www.w3.org/TR/2007/REC-xslt-xquery-serialization-20070123/#list-of-uri-attributes>

[15] 附属書 C に[[百分率符号化]]の対象になる [[HTML]] [[属性]]の一覧があります。
それによると [CODE(HTMLe)@en[[[applet]]]] [[要素]]の
[CODE(HTMLa)@en[[[archive]]]] や [CODE(HTMLa)@en[[[code]]]] は対象外だそうです。
[CODE(HTMLe)@en[[[object]]]] [[要素]]の
[CODE(HTMLa)@en[[[archive]]]] や
[CODE(HTMLe)@en[[[head]]]] [[要素]]の
[CODE(HTMLa)@en[[[profile]]]]
は対象内です。

[CODE(HTMLe)@en[[[a]]]] [[要素]]の [CODE(HTMLa)@en[[[name]]]]
[[属性]]まで対象内になっているのですが、これは附属書 C が引用している [[HTML 4]]
の注記の誤読、というか [[HTML 4]] の注記の意味が不明瞭なせいでしょうな。


[16] [CITE@en[XSLT 2.0 and XQuery 1.0 Serialization (Second Edition)]]
( ([TIME[2010-12-17 00:08:20 +09:00]] 版))
<http://www.w3.org/TR/2010/REC-xslt-xquery-serialization-20101214/#html-output>