HTML か XHTML か、それが問題だ
サイト内の文書を HTML 4.01 Strict から XHTML 1.0 Strict に変更中。
今までこのサイトは UA の互換性などの配慮から、ウェブログも含めすべてを HTML で公開してきたのですが、最近 RDF などのセマンティック ウェブ関連の知識を得るにつれ、やはり XHTML に移行すべきと思うようになりました。
しかし XHTML に移行すると、どうしても避けられないのが UA の互換性問題です。XHTML 1.0 は従来の HTML との互換性も最大限に配慮された規格ですが、それでも細かい部分の相違点は少なくありません。
XHTML 化にあたって、私が感じた問題は下記の点です。
- XHTML は属性の最小化ができない。つまり HTML の
<input type="checkbox" checked>などは<input type="checkbox" checked="checked" />のように書かねばならない。ところが古い UA はこれを解釈できない。 - IE の新しいバージョンは DOCTYPE 宣言により標準準拠モードと後方互換モードの切り替えを行うようになったが、XML 宣言を記述した XHTML 文書は DOCTYPE 宣言に関わらず後方互換モードでレンダリングされてしまう。
- Mac 版 IE 4.5 は XHTML で XML 宣言が行われていると、そのファイルをソース表示してしまう。
- XHTML では XML 宣言を行うことが強く推奨されており、また文書の文字コードが UTF-8 または UTF-16 以外で、なおかつサーバーのヘッダ情報で文字コードを指定できない場合は
encoding="Shift_JIS"のように encoding 宣言が必須。しかし文書中で文字コードを指定した場合、一部の文字コードを強制的に変換してキャッシュするプロクシ サーバを利用している環境では、変換された文書と encoding 宣言の文字コードが矛盾していると文字化けする。
属性値の最小化以外は XHTML に全く非はないのですが (XHTML 文書の解釈を間違う IE や、勝手に文字コードを変換するプロクシの責任)、どれも頭の痛い問題ばかりです。特に DOCTYPE 宣言の問題は多くの CSS 派の人々を悩ませていますし、Mac 版 IE 4.5 に至っては表示すらできないことになります。
文字コードについてはサーバー側で HTTP ヘッダに指定できれば問題ないのですが、それでも文書をローカルに保存した場合を考えると、文字コードは文書側にも指定するのが無難です。ところがそうすると、前述のプロクシ問題が発生する…と。
実は以前にも私はサイト内文書の XHTML 化を行ったことがあるのですが、上記のようなデメリットばかりが目立ったので、結局は HTML に戻してしまったのです。しかし今後を考えると、やはりサイトの XHTML 化は必須に思えます。
ならばどうするか。手っ取り早い解決方法としては、文書の XHTML 化はするけれども XML 宣言は行わない方法があります。こうすれば、上記のうち XML 宣言が原因の不都合はすべて解決することになります。また、Netscape Navigator 3.0x や携帯電話のブラウザなど XHTML に対応しない UA の中には、DOCTYPE 宣言より前に出現する XML 宣言を文字列としてレンダリングしてしまうものが存在しますが、これも XML 宣言を除去することにより解消します。
ただしこの方法を行った場合、完成した文書を Another HTML-lint でチェックすると XHTML 文書は XML 宣言をすることが強く求められています。と怒られ激しく減点されます。まあ私は Another HTML-lint で 100 点を取るためにサイトを作っているのではないのでそれ自体は別にかまわないのですが、でも XHTML 文書として不正であるのならそれは直すべきです。ところがそうすると上記の問題が浮上するわけですね。なんかもう振り出しに戻るみたいな感じ。
そんなわけでベストな解決方法は見つからないままに、今日は悶々としながら HTML ファイルを書き換えています。今の私の心理状況は、次のようなせりふで表されます。
「千歌音ちゃん…私、どうしたらいいのかな」
また、次のような一言で簡潔に表すことができます。
「どうすればいいんだ!」
千歌音ちゃん…私、どうすればいいんだ!
- Posted at 17:44:45 in HTML/CSS
- Comments (0) | TrackBacks (0)
