記事本文
IE 6 では XML 宣言を書くと後方互換モードでレンダリングされる→ XML 宣言を省略するソリューション
昨日 DOCTYPE スイッチについてのまとめと一覧表 (HTML 5 や IE 8 Beta 2 のモードスイッチなどの情報も含んだ 2008 年版 ) にて DOCTYPE スイッチについてまとめましたが、 IE 6 では XML 宣言が書かれていると後方互換モードでレンダリングされるというバグがあるため、 IE 6 では XML 宣言を書かないようにして標準準拠モードでレンダリングさせる、という対処が一般的になっていました。
しかし、 XML 1.0 の 2.8 Prolog and Document Type Declaration では、
XML documents SHOULD begin with an XML declaration which specifies the version of XML being used.
と、 XML 1.0 文書は XML 宣言で始まるべきであるとされています。
(XML 1.1 文書の場合は
XML 1.1 documents MUST begin with an XML declaration which specifies the version of XML being used.
と、 XML 宣言で始まらなければならないとされています。 )
IE 6 がバグによってレンダリングモードが切り替わってしまうから、という理由だけで安易に XML 宣言を書かない、という対処をして良いものなのでしょうか。
XML の仕様から XML 宣言を紐解く
さて、XML 宣言を省略できる条件、というのは実は仕様には書かれてありません。 表現の問題でもありますが、「このような条件の場合に省略できる」というよりは、「省略した場合はこのように扱われる」ということだけが示されています。
XML 宣言がどのような構造になっているか見てみましょう。
XML 1.0 の XMLDecl の部分では、
と示されています。
EncodingDecl( 文字エンコーディング宣言 ) と SDDecl( スタンドアロン文書宣言 ) には XMLDecl ::= '<?xml' VersionInfo EncodingDecl? SDDecl? S? '?>'
? が付いていますので、ひとつだけ記述するか、あるいは記述しないということになります。
- EncodingDecl は、 XML 文書の文字エンコーディングが UTF-8 あるいは UTF-16 以外で、かつハイレベルのプロトコルから文字エンコーディングが明示されない場合に記述します。
- よって、 EncodingDecl を記述しないようにするためには、文字エンコーディングを UTF-8 あるいは UTF-16 とするか、それ以外の文字エンコーディングの場合はよりハイレベルのプロトコルで明示する必要があります。
- SDDecl は、その XML 文書の外部に参照すべき外部マークアップ宣言が存在するかどうかを指定します。この記述をしなければ、
standalone="no"として扱われます。- なお、 XHTML 文書であれば DTD 内で文字実体を参照するため、
standalone="no"ということになります、
- なお、 XHTML 文書であれば DTD 内で文字実体を参照するため、
- VersionInfo は、それぞれの XML 文書の仕様内の VersionNum で示されているバージョン番号を記述します。 XML 1.0 文書であれば 1.0 を、 XML 1.1 文書であれば 1.1 を記述します。
- XML 宣言自体を省略した場合は、 VersionNum は 1.0 となります。
まとめます。 XML 宣言を省略すると、その文書は
- 文字エンコーディングはハイレベルなプロトコルで明示されている。あるいは UTF-8 か UTF-16 で記述されている。
- スタンドアロン文書宣言は no である。
- XML 1.0 文書である。
という文書であるとして取り扱われます。
これを更にまとめると、文字エンコーディングが UTF-8 か UTF-16 か、またはそれ以外の文字コードであればハイレベルなプロトコルで明示されている XHTML 文書であれば XML 宣言が省略されていてもまあ何とか OK かな、ということです。
( 省略条件が揃っていても、
XML documents SHOULD begin with an XML declaration which specifies the version of XML being used.
ということには変わりありませんので。 )
XHTML Media Types の Second Edition の登場
......と、これまではそういった話でまとまっていました。 ところが、最近は DOCTYPE スイッチによる理由以外でも XML 宣言の記述の有無について考慮する動きが起こっています。
XML宣言とDOCTYPE宣言 - vantguarde - web:g に詳しく書いてありますが、
XML宣言とかPIとか書かないように
というガイドラインが示されています。
更に遡ると、 XHTML Media Types (2nd Ed.) - vantguarde - web:g や XHTML Media Types改訂の動き | Web標準Blog | ミツエーリンクスというリソースに行き当たります。 これを元に考えを深めていくと、 XML 宣言以外にも変更点があるようです。
なお、 XHTML Media Types の Second Edition は現時点では Editor's Draft であり、 W3C 公式の仕様ではありませんが、初版の XHTML Media Types も W3C Notes ( 現在での Working Group Notes) という位置付けであり、 XHTML Document Development Area の XHTML Media Types を見ても、
Last Public Draft
は
None
という状態なので、 Editor's Draft ではありますが新しい仕様を参考にします。
XML宣言とDOCTYPE宣言 - vantguarde - web:g で参照しているのは XHTML Media Types - Second Edition (Editor's Draft 23 April 2008) ですが、この記事の時点では新たに XHTML Media Types - Second Edition (Editor's Draft 27 August 2008) が公開されています。 ( http://www.w3.org/MarkUp/Drafts/#xhtmlmime を参照すると良いですよ、と id:vantguarde さんに教えていただきました。 )
XHTML Media Types の First Edition と Second Edition (Editor's Draft 27 August 2008) の違い (1)
それでは、 XHTML Media Types の First Edition と Second Edition (Editor's Draft 27 August 2008) の違いを考えてみます。 まず目に付く違いとして、 XHTML の種類によって選択する Media Types が違っています。
まずは First Edition の 3.5. Summary の表です。
| Media type | HTML 4 | XHTML 1.0 (HTML 互換 ) | XHTML 1.0 ( その他 ) | XHTML Basic / 1.1 | XHTML+MathML |
|---|---|---|---|---|---|
| text/html | 推奨 | 可能 | 非推奨 | 非推奨 | 非推奨 |
| application/xhtml+xml | 禁止 | 推奨 | 推奨 | 推奨 | 推奨 |
| application/xml | 禁止 | 可能 | 可能 | 可能 | 可能 |
| text/xml | 禁止 | 可能 | 可能 | 可能 | 可能 |
その表が、 Second Edition (Editor's Draft 27 August 2008) の 3.5. Summary では次のように変わっています。
| Media type | HTML 4 | XHTML ファミリ文書型 (HTML 互換 ) | XHTML ファミリ文書型 ( その他 ) | XHTML ファミリ文書型 + 拡張 |
|---|---|---|---|---|
| text/html | 推奨 | 可能 | 非推奨 | 非推奨 |
| application/xhtml+xml | 禁止 | 可能 | 推奨 | 推奨 |
| application/xml | 禁止 | 可能 | 可能 | 可能 |
| text/xml | 禁止 | 可能 | 可能 | 可能 |
First Edition では、 XHTML 1.0 (First Edition) の Appendix C. HTML Compatibility Guidelines に沿った XHTML 1.0 であれば text/html の指定が可能、 application/xhtml+xml の指定を推奨ということだったのですが、 Second Edition (Editor's Draft 27 August 2008) では同一文書内の Appendix A. Compatibility Guidelines に沿った XHTML ファミリ文書型であれば text/html の指定が可能、 application/xhtml+xml の指定が可能というように変わっています。
これまでは XHTML Media Types First Edition を参考にするならば、 text/html で XHTML 文書を公開する場合に XHTML 1.0 (First Edition) の Appendix C. HTML Compatibility Guidelines に沿った上で、かつ XHTML 1.0 を選択すると示されていたのに対し、 Second Edition (Editor's Draft 27 August 2008) などの Second Edition を参考にするならば Appendix A. Compatibility Guidelines に沿っていれば XHTML Family document type であれば良い、という変更です。
視点を変えると、これまでは XHTML 1.1 では text/html は非推奨で、 application/xhtml+xml が推奨とされていたため、 application/xhtml+xml の表示に対応していない IE に対して XHTML 1.1 の使用が躊躇われていました。
これは text/html と XHTML 1.1 でも触れていた点でもありますし、 XHTML Media Types (2nd Ed.) - vantguarde - web:g でも
(ガイドラインに沿えば)XHTML 1.1をある意味「合法的」にIEで表示できるようになりそうです
とのコメントが述べられています。
XHTML Media Types の First Edition と Second Edition (Editor's Draft 27 August 2008) の違い (2)
前項では Media Types の違いについて触れましたが、それに合わせて参照するガイドラインも変更になっています。 それは次項にまとめるとして、他に小さな相違点を。
- application/xml や application/xhtml+xml として文書を公開する場合の meta http-equiv の指定
-
First Edition では
Note that a meta http-equiv statement will not be recognized by XML processors, and authors SHOULD NOT include such a statement in an XHTML document served as 'application/xml' (and 'application/xhtml+xml' as well for that matter).
のように、「 XML プロセサは<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />のような指定を解釈しないこと、よって application/xml および application/xhtml+xml として提供される XHTML 文書に対してそのような指定を行うべきでない」と示されていました。Second Edition (Editor's Draft 27 August 2008) では
Note that a meta http-equiv statement will not be recognized by XML processors, and while authors MAY include such a statement a statement in an XHTML document served as 'application/xml' it will not effect processing of the document since the higher level protocol and the XML PI both take precedence.
と、「 XML プロセサは<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />のような指定を解釈しないこと、文書作成者はそのような指定を今なおしてくるかもしれないが、よりハイレベルのプロトコルや XML 処理命令が優先される」 と変更されています。 - application/xhtml+xml として文書を公開する場合の xml-stylesheet 処理命令
-
First Edition では
When serving an XHTML document with this media type, authors SHOULD include the XML stylesheet processing instruction [XMLstyle] to associate style sheets.
のように、「 application/xhtml+xml を指定する場合は、文書作成者はスタイルシートを関連付けるために xml-stylesheet 処理命令を含むべきである」と示されていました。Second Edition (Editor's Draft 27 August 2008) では
When serving an XHTML document with this media type, authors MAY include the XML stylesheet processing instruction [XMLstyle] to associate style sheets.
のように、「 application/xhtml+xml を指定する場合は、文書作成者はスタイルシートを関連付けるために xml-stylesheet 処理命令を含んでもよい」 と変更されています。
XHTML Media Types の First Edition と Second Edition (Editor's Draft 27 August 2008) の違い (3)
さて、いよいよ互換性ガイドラインの変更点です。 最初からここだけまとめておけばよかったような気がしてきました。 この部分は訳文を用意する元気がありません......。
| Media type | XHTML 1.0 (First Edition) の Appendix C. HTML Compatibility Guidelines | XHTML Media Types Second Editon (Editor's Draft 27 August 2008) の Appendix A. Compatibility Guidelines |
|---|---|---|
| C.1 Processing Instructions → A.1. Processing Instructions and the XML Declaration |
|
|
| C.2 Empty Elements → A.2. Elements that can never have content |
|
|
| C.3 Element Minimization and Empty Element Content → A.3. Elements that have no content |
|
|
| C.4 Embedded Style Sheets and Scripts → A.4. Embedded Style Sheets and Scripts |
|
|
| C.5 Line Breaks within Attribute Values → A.5. Line Breaks within Attribute Values |
|
|
| C.6 Isindex → |
|
|
C.7 The lang and xml:lang Attributes → A.7. The lang and xml:lang Attributes |
|
|
| C.8 Fragment Identifiers → A.8. Fragment Identifiers |
|
|
| C.9 Character Encoding → A.9. Character Encoding |
|
|
| C.10 Boolean Attributes → A.10. Boolean Attributes |
|
|
| C.11 Document Object Model and XHTML → A.11. Document Object Model and XHTML |
|
|
| C.12 Using Ampersands in Attribute Values → A.12. Using Ampersands |
|
|
| C.13 Cascading Style Sheets (CSS) and XHTML → A.13. Cascading Style Sheets (CSS) and XHTML |
|
|
| → A.14. Referencing Style Elements when serving as XML |
|
|
| → A.15. Formfeed Character in HTML vs. XML |
|
|
| → A.16. The Named Character Reference ' |
|
XHTML Media Types Second Edition が今後ドラフトになれば XML 宣言を省略する機会も増える ?
......さて、だいぶ話がそれましたが、冒頭で「 IE 6 がバグによってレンダリングモードが切り替わってしまうから、という理由だけで安易に XML 宣言を書かない、という対処をして良いものなのでしょうか」と自問していましたが、今後 XHTML Media Types Second Edition が Recommendation track に乗るようになっていけば、 XML 宣言の記述を行う・行わないの選択の理由が増えますね。
今回は自分の拙い解釈・邦訳で考えている部分があるので、「いや その解釈は おかしい」とか「それ邦訳じゃなくて超訳やん」といったご指摘をよろしくお願いします。
あと勘のいい方なら気が付いているかもしれませんが、今回の内容や昨日の DOCTYPE スイッチについてのまとめと一覧表 (HTML 5 や IE 8 Beta 2 のモードスイッチなどの情報も含んだ 2008 年版 ) は、以前実践 Web Standards Design に執筆した内容です。


