[5] [DFN[[CODE(XML)[xml-stylesheet]] [[処理指令]]]]
を使うと、その [[XML]] [[文書]]に[[スタイル・シート]]を関連付けることができます。
[3] [CODE(XML)[xml-stylesheet]] 処理指令は、
その[[対象名]]が [CODE(XML)[xml-stylesheet]],
[[データ]]は[[開始タグ]]の[[属性指定並び]]と同じ構文です。
* 定義
[33] [[処理指令情報項目]]の[CODE(InfoProp)[[RUBYB[[[対象]]]@en[target]]]][[特性]]が
[CODE(XML)@en[[[xml-stylesheet]]]] であって、その[[処理指令情報項目]]が[[文書情報項目]]の[CODE(InfoProp)[[RUBYB[[[子供]]][children]]]][[特性]]の中で[[要素情報項目]]より前にあるか、または[[文書型宣言情報項目]]の[CODE(InfoProp)[[RUBYB[[[子供]]][children]]]][[特性]]の中にある場合、その[[処理指令情報項目]]は[DFN[[RUBYB[潜在]@en[potential]] [CODE(XML)@en[xml-stylesheet]] [RUBYB[処理指令]@en[processing instruction]]]]であるといいます。 [SRC[>>43]]
[37] 潜在 [CODE(XML)@en[[[xml-stylesheet]]]] [[処理指令]]は、
[[文字列から擬似属性を構文解析する規則]]を適用した[[構文解析結果]]が[[誤り]]ではないとき、
[DFN[[CODE(XML)@en[[[xml-stylesheet]]]] [RUBYB[[[処理指令]]]@en[processing instruction]]]]であると言います。 [SRC[>>43]]
[38] [[文書]]は [CODE(XML)@en[[[xml-stylesheet]]]] [RUBYB[[[処理指令]]]@en[processing instruction]]
''以外''に[CODE(InfoProp)[[RUBYB[[[対象]]]@en[target]]]][[特性]]が
[CODE(XML)@en[[[xml-stylesheet]]]] である[[処理指令情報項目]]を用いては[['''なりません''']]。 [SRC[>>43]]
* 文脈
[48] >>38 の規定により、 [CODE(XML)@en[[[xml-stylesheet]]]] [[処理指令]]は[[文書要素]]よりも前
([[XML]] でいうところの[RUBYB[[[前書き]]]@en[prolog]]) にしか書くことができません。
第1版は [[XML]] の構文ベースで定義されていたので、
[[前書き]]に入れなければならないと規定されていました [SRC[>>45]]。
[49] ただし[[XML]]では[[外部部分集合実体]]や[[引数実体]]が[[処理]]されることが保障されないため、
第1版も第2版も注意を促しています。更に第2版は >>39 のように[[文書型宣言]]内での利用を原則禁止しています。
[39] [[文書]]は[[文書型宣言情報項目]]の[CODE(InfoProp)[[RUBYB[[[子供]]][children]]]][[特性]]で
[CODE(XML)@en[[[xml-stylesheet]]]] [RUBYB[[[処理指令]]]@en[processing instruction]]を使う[['''べきではありません''']]。 [SRC[>>43]]
[50] 現実には、 [CODE(XML)@en[[[xml-stylesheet]]]] [[処理指令]]が[[文書要素]]の内側で使われることすら存在しています。
[WEAK[(それが実際に[[実装]]によってどう処理されるのかはまた別ですが・・・。)]]
例えば [[W3C勧告]]であるところの [[XHTML 1.1]] は [CODE(HTMLe)@en[[[link]]]] [[要素]]と並べて
[CODE(XML)@en[[[xml-stylesheet]]]] [[処理指令]]を記述しています。
;; [CITE[XHTML 1.1 - Module-based XHTML]] ([TIME[2001-05-31 11:23:22 +09:00]] 版)
;; この文書は [[XHTML]] でありながら [CODE(MIME)@en[[[text/html]]]] ですが、
この時代はまだそれが一般的でした。 [WEAK[(といっても [[XHTML]] はまだ一般的ではありませんでしたが、その中では一般的でしたw)]]
* 擬似属性
[44] [CODE(XML)@en[[[xml-stylesheet]]]] [[処理指令]]には[[属性]]を指定できます。
[[XML]] では[[属性]]といえば[[要素]]の[[開始タグ]]に指定するものなので、
正式にはこれを「[[属性]]」とはいわず、「[[擬似属性]]」といわれています。
,[CODE(XML)[[[alternate]]]] ,'yes' / 'no' ,'no' ,代替か否か
,[CODE(XML)[[[charset]]]] ,[[charset]] ,(暗示) ,charset
,[CODE(XML)[[[href]]]] ,[[URI]] ,必須 ,URI
,[CODE(XML)[[[media]]]] ,[[媒体記述子]] ,(暗示) ,対象媒体
,[CODE(XML)[[[title]]]] ,[[CDATA]] ,(暗示) ,題
,[CODE(XML)[[[type]]]] ,[[媒体型]] ,'''(暗示)''' ,媒体型
[40] [[文書]]は仕様上認められている以外の[[擬似属性]]を指定しては[['''なりません''']]。 [SRC[>>43]]
* 処理モデル
- [34] [[xml-stylesheet処理器]]は、[[潜在xml-stylesheet処理指令]]について、[CODE(InfoProp)[[RUBYB[[[内容]]][content]]]][[特性]]を[[文字列]]として[[文字列から擬似属性を構文解析する規則]]を呼び出し、その[[構文解析結果]]を[[xml-stylesheet応用]]に報告します。 [SRC[>>43]]
-- [35][[文書情報項目]]の[CODE(InfoProp)[[RUBYB[[[子供]]][children]]]][[特性]]の中にある場合は、報告しなければ[['''なりません''']]。 [SRC[>>43]]
-- [35][[文書型宣言情報項目]]の[CODE(InfoProp)[[RUBYB[[[子供]]][children]]]][[特性]]の中にある場合は、報告して[['''構いません''']]。[[応用]]に報告しない場合は、[[処理指令情報項目]]は[DFN[[RUBYB[無視された]@en[ignored]]]]といいます。 [SRC[>>43]]
-- [36] なお、[[XML処理器]]は[[引数実体]]や[[外部部分集合]]を[[読む]]ことを要求されていないので、そこにある[[処理指令]]はそもそも[[XML情報集合]]に含まれていない可能性があります。 [SRC[>>43]]
これは上記の定義の「無視」ではありませんが、結果的に無視されるのと同じことになります。
- [41] [CODE(HTTP)@en[[[Link:]]]] [[頭欄]]など[[文書]]の外側で指定された[[スタイル・シート]]への[[リンク]]は、 [CODE(XML)@en[[[xml-stylesheet]]]] [[処理指令]]による関連付けよりも前に作られた関連付けとみなします。 [SRC[>>43]]
-- [42] 順序を元にどう処理するかなどは[[xml-stylesheet応用]]の責任の範囲となります。 [SRC[>>43]]
* 仕様書
- [43] [CITE@en[Associating Style Sheets with XML documents 1.0 (Second Edition)]] ([TIME[2010-10-28 23:13:17 +09:00]] 版)
* 歴史
** 版
- [29] [[xml-stylesheet 1.0 1e]]
- [30] [[xml-stylesheet 1.0 2e]]
- [31] [[xml-stylesheet5]]
- [32] [[xml-stylesheet 1.1]]
** 第1版
[45] [CODE(XML)@en[[[xml-stylesheet]]]] [[処理指令]]を最初に規定した公式な仕様書は
[[xml-stylesheet 1.0 1e]] で、1999年6月に [[W3C勧告]]となりました。
;; [CITE[Associating Style Sheets with XML documents]] ([TIME[2000-05-03 23:40:39 +09:00]] 版)
[8] この処理指令は、 XML 文書にスタイル・シートを関連付ける
(XML 文書内での記述の) 標準化された方法がない一方で、
その需要に応えるべくとりあえずということで勧告されました。
[52] 仕様書中にも、[[スタイル・シート]]の関連付けの方法には議論があること、
[[処理指令]]を使うことが望ましい慣習であるとは言い切れないことが断られつつも、
主要[[ブラウザー]]のリリースが迫っているから急いで[[勧告]]にした、などと書いてあります。
;;
- [CITE[Associating Style Sheets with XML documents]] ([TIME[2000-05-03 23:40:39 +09:00]] 版)
- [CITE[Associating Style Sheets with XML documents]] ([TIME[2000-05-03 23:40:39 +09:00]] 版)
[53] しかしながら、これに代わる方法はまだ規定されていません。
今後も当分この処理指令が使われ続けることでしょう。
[51] この勧告は元々は [[XLink]] [[WG]] の担当でしたが、
その重要性から XML 中核 WG に移管されたそうです。
** 第2版
2009年に [[W3C XML中核作業部会]]で改訂が始まり、2010年6月に第2版 [[xml-stylesheet 1.0 2e]]
が [[W3C勧告]]となりました。
* メモ
[46]
擬似属性の値の指定 ([[属性値表記]]に対応する部分)
も属性の場合と同じですが、[[一般実体参照]]は[[定義済み実体]]
5種類しか使うことが出来ません。
(その他の文字は[[数値文字参照]]を使うことになります。)
また、処理指令の構文上、 [CODE(XML)[?>]]
という文字列を含めることも出来ません。その場合は
[CODE(XML)[?&[[gt]];]] とでもしなければなりません。
[47] >>46 第1版は [[EBNF]] で文字列として定義していましたが、第2版は[[XML情報集合]]で定義していて、
[[EBNF]] は説明でしかないので、第2版に従うなら[[擬似属性]]の[[属性値]]に「[CODE(XML)[?>]]」が
([[エスケープ]]されずに) 含まれることも一応認められてはいるのですが、
[[XML]] の[[文字列]]として表現することができないのは変わりありません。
[WEAK[([[DOM]] や [[XDM]] では存在できますが。)]]
[6] [CODE(XML)[alternate]] 擬似属性を除いて、
対応する [[HTML4]] の [CODE(HTML)[[[link]]]]
[[要素型]]の属性と同じ意味を持ちます。
[CODE(XML)[alternate]] 擬似属性が [CODE(XML)[no]]
なら HTML 4 では[[リンク型]]が
[CODE(HTML)[[[rel]]="[[stylesheet]]"]], [CODE(XML)[yes]] なら
[CODE(HTML)[rel="stylesheet [[alternate]]"]]
に対応します。
[2] 勧告では [[type]] 擬似属性が必須 ([[REQUIRED]])
になっていますが、 Errata で暗示 ([[IMPLIED]])
の誤りとされています。
必須だとしたら[[内容折衝]]ができないことになりますが、
省略可に訂正されたので
[SAMP(XML)[]]
とだけ書けば十分ということになります。
[4] >>2 draft でずっと [[IMPLIED]] ではなく [[REQUIRED]] だったのですから、最後に変更されたけど修正し忘れたんでしょう。
[7] [CODE(XML)[href]] 擬似属性の値は [[URI参照]]ですが、
[[相対URI]] はもちろん、[[素片識別子]]だけのもの
(例: [SAMP(URI)[#foo]]) でも構いません。
この場合、同じ文書内のもの ([[XHTML]] の [CODE(HTML)[[[style]]]]
要素型とか。) を指すことになります。
- [1] ''Baykit Stylesheet Broker FAQ'' : 困ったことに、 [CODE(XML)[xml-stylesheet]] 処理命令を独自拡張している。サーバー側で処理されるからネットワークは流れないとはいえ、感心できないなあ。
- [9] この処理指令を書けるのは、生成規則 [CODE(XML)[prolog]] ([[前書き]]) の中で処理指令が認められている場所です。つまり、 [[XML宣言]]の直後から[[文書要素]]の[[開始タグ]]の前までです。また、 [[DTD]] 中にもかけるみたいです。 [WEAK[(前書き内、では曖昧だと思うんですが、注記を読むと確実に、[[外部部分集合]]に書くことも認められているようです。もっとも、その注記によれば外部部分集合や[[外部引数実体]]に書くと[[妥当性を検証しない]][[XML処理系]]でどうなるかわからないので注意しましょうと言っています。)]]
- [10] [[WinIE6.0]] と [[Mozilla]] 1.4βで試してみました。
- [11] WinIE は、 [CODE(XML)[type]] 擬似属性がないと無視します。また、 DTD 中にこの処理指令がある場合も内部/外部問わず無視します。
- [12] Mozilla はもちろん [CODE(XML)[type]] 擬似属性の有無にかかわらず解釈します。 DTD の内部部分集合にある場合も理解します。 (外部部分集合は元々読みません。)
- [13] いずれの場合も、前書き以外、すなわち文書要素内や文書要素の後にあっても無視するみたいです。
- [14] >>9,>>13 [[W3C]] もこんなミスを・・・
[15]
>>1 なくなってる。移転先 −>
[CODE(XMLa)[[[client]]]] 擬似属性 ([CODE(XML)[yes]] or [CODE(XML)[no]]) で、鯖側処理と蔵側処理を分けるらしい。
[CODE(XMLa)[media]] 擬似属性は特定のブラウザ名を指定できるらしい (使える名前の一覧は見つからず)。
例:
> [SAMP(XML)[]]
([[名無しさん]])
[16]
[CITE[Bug 61675 - Can't link XML document to embedded stylesheet (Support )]]
[18]
[CITE[How to add style to XML]]
[19]
[CSECTION@en[C.14. Referencing Style Elements when serving as XML]]
([[名無しさん]])
[20]
[CITE[www-style@w3.org from February 2006: by thread]]
([[名無しさん]])
[21]
[CSECTION@en[2.7 Embedding Stylesheets]]
[23]
[CITE[www-xml-stylesheet-comments@w3.org Mail Archives]]
([[名無しさん]])
[24]
[CITE[FW: XML Style Sheet PI and fragment IDs from Paul Grosso on 2005-02-09 (www-xml-stylesheet-comments@w3.org from February 2005)]]
([[名無しさん]])
[25]
[CITE[Re: xml-stylesheet base resource identifier from Henry S. Thompson on 2006-10-02 (www-xml-linking-comments@w3.org from October to December 2006)]]
([[名無しさん]])
[26]
>>21
[CITE@EN[XSL Transformations (XSLT) Version 2.0]] ([CODE[2007-01-19 07:23:20 +09:00]] 版)
([[名無しさん]] [WEAK[2007-01-25 12:43:25 +00:00]])
[27]
[CITE[A Proposal for XSL]] ([CODE[2006-09-22 18:57:20 +09:00]] 版)
[28]
[CITE@en[Regarding XML Core WG agenda item on Associating stylesheets]] ([[Grosso, Paul]] 著, [CODE[2007-04-02 23:37:13 +09:00]] 版)
2年待ったらなにもしないという結論が帰ってきたからなにもしないでおk?? はぁ??
([[名無しさん]] [WEAK[2007-04-03 13:16:41 +00:00]])