廃止された要素とバリデーション
私たちは、Guy Carberry から下記の質問を受けた。彼は、HTML や XHTML ページの doctype を HTML5 の doctype に変更したら、最新のドラフトでは廃止されてしまった要素にどんな影響があるのかを心配していた。
質問
この質問からいろいろな側面で考慮すべきことが出てくる。Guy の質問の全文を見てから始めよう。
Jeremy Keith は、私たちは XHTML 1.0 構文のページの Doctype 宣言を、
<!DOCTYPE html>に変更することができ、これで、すぐに HTML5 になるのだ、と言っている。廃止になったり変更された要素と属性の情報がここで詳細に述べられているが、それがどんな意味を持つのか、私はちょっと混乱している: http://www.w3.org/TR/html5-diff/#absent-elements
"HTML4 のいくつかの属性が、HTML5 ではもう使えない。もし、それらが、互換性の理由でユーザーエージェントで効果を与える必要があるなら、それは、どのように、それらが、それらのシナリオで機能するべきか定義されている。"それで、もし、これがそのようなケースに該当するなら、なぜ、doctype 宣言を切り替えることができるのか、そして、それで問題ないのか?
協力に感謝する。
Guy より
Doctor の回答
質問の回答にあたり、私たちは、次のように、質問をかみ砕く必要があるだろう:
- どの要素と属性が廃止されるのか?
- 私は、自分のサイトで、これらの要素や属性を使えるのか?
- 私は、バリデーションについてどれくらい気にする必要があるのか?
- これは、後方互換性に対して、どんな効果があるのか?
- 私のコンテンツは、自分が対象とするブラウザーやユーザーエージェントすべてからアクセスできるのか?
では、次から、それぞれについて詳細に考えていこう。
1. どの要素と属性が廃止されるのか?
HTML5 仕様から(HTML 4.01 から)廃止された要素: basefont, big, center, font, s, strike, tt, u, frame, frameset, noframes, acronym, applet, isindex, dir
これらの要素や属性のリストは、削除された詳細な理由も含めて、HTML 5 differences from HTML 5 を読めば分かる。
2. 私は、自分のサイトで、これらの要素や属性を使えるのか?
もし、あなたのサイトが前述の要素や属性を使っているなら、それらを、HTML5 で導入された要素のうち、よりセマンティックな要素に変更することを検討してほしい。<font> や <center> の場合なら、それらを削除して、そのプレゼンテーションには CSS を使うことができるだろう。
Guy は大きな大学で働いていると言っていた。そのサイトでは <acronym> タグが大量に使われているが、前述の通り、HTML5 から削除されてしまった。もし彼がそのサイトを HTML5 にしたいのであれば、私は、Guy のこの問題を解決するために、彼には 3 つの選択肢があるだろう、と思う:
- doctype を HTML5 に変更し、
<acronym>要素はそのままにしておく。(HTML は妥当ではない点に留意してほしい) - doctype を HTML5 に変更し、
<acronym>要素を、仕様で推奨されているように、<abbr>に訂正する。 - 何もせず、そのサイトを HTML 4.01 か XHTML のままにしておく。
Guy に、どの選択肢を選択するべきかを助言するのは難しい。これらの解決策を実行するのにどれくらいの努力が必要なのかが分からないし、そのサイトの目標や、妥当性に対するプロジェクトチームの考え方が分からないからだ。妥当性についていうと、地雷原だらけといえるのだが、それについては、次で説明しよう。
3. 私は、バリデーションについてどれくらい気にする必要があるのか?
バリデーションは、あなたのマークアップや CSS にとっては間違いなく重要なものではあるが、私の考えでは、それはサイトにとってはさほど重要なことではない。言い訳になるかもしれないが、私たちは最近、このサイトは妥当でない、と指摘するメールをいくつか受信した。以前はエラーだったが、今は正しい、というものもあるが、主な理由は、マークアップに ARIA の役割を担わせるためだ。これらの属性は、現在のところ、最新の仕様では許されていない。しかし、これを起こそうする作業が進行中だ。
この点を説明するために、検索大手の Google を見てみよう。Google の検索ページのソースを見ると、HTML5 の doctype が使われていることに気づくだろう。
<!DOCTYPE html>
しかし、これらのページは妥当ではない。なぜなら、彼らは <font> と <center> などを使っているからだ。これらは、すでに仕様から削除されたはずだ。これでユーザーが Google を訪問しなくなるとえいるだろうか? そんなことはないはずだ。
仕様はまだ完了しておらず変更されるかもしれないことも忘れないでほしい(ゆえに、あなたが完璧に妥当なドキュメントを作ったとしても、ダメになるかもしれない)。バリデータの実装も、すぐにこの仕様の変更に追随するかどうかわからない。HTML5 は開発に "牛道を舗装する" アプローチを取っている点にも、私たちは留意する必要がある。つまり、Hixie たちは、ウェブ制作者がすでにどうしているのか、そして、それをどのように改善していくのかを見ていきながら開発を進めていく、という意味だ。
4. これは、後方互換性に対して、どんな効果があるのか?
すでに言ったように、Google についての指摘を見ると、Google のサイトはバリデーションを全く気にしていないことが分かるが、後方互換性はどうだろう?もちろん Yes だ。私たちが知る限り、すべてのブラウザーは <font> タグをサポートしている。バリデーターはそうではない。もし、旧式の要素を使いたいなら、そうすればいい。それでも、ブラウザーはそれを処理してくれる。ブラウザーはバリデーションなんてしないのだから。
後方互換性についていえば、あなたが HTML 4.01 や XHTML 1.x のドキュメントに、HTML5 で新たに導入された要素を使い始めてはいけないという理由はどこにもない。それどころか、プログレッシブ・エンハンスメントになるのだ。例えば、<video> 要素を入れてはどうか?それは有効にならないかもしれないが、たぶん問題はないだろ? それでも、ブラウザーはビデオをレンダリングすることができるようになるだろう。それゆえに、"牛道を舗装する" のだ。もしあなたが新要素を入れるつもりなら、とことんまでやって、doctype も変更してみたらどうだい?
5. 私のコンテンツは、自分が対象とするブラウザーやユーザーエージェントすべてからアクセスできるのか?
Google をもう一度見てほしい。古いブラウザーやデバイスでもレンダリングされる。どうみても、これは HTML5 だ。別の見方をすると、仕様では、新機能は、古いブラウザーでも、動作するか、または、壊れることがないようにするべきと定義されている。
Remy は返信で Guy に次のように指摘した。
HTML5 がこれをサポートしているかどうかにかかわらず、ブラウザーは今でもこれを処理できることを忘れないでほしい。XHTML ドキュメントではフレームが認められていないけれども、ブラウザーは、それでもなお、フレームをサポートして、ちゃんとレンダリングしている。まさに、これと同じだ。
ブラウザーは廃止要素でもレンダリングする、ということで、ここで終わりにしたいと思う。
まとめ
最後に、私たちは Guy の質問に yes と答えることができると思う。doctype を変更して、サイトを HTML5 にするのだ。しかし、それで本当によいのかどうかについては、本質的には、個人的もしくはビジネス的な要因で決まってくるだろう。これが、HTML5 の新要素や JavaScript API や offline storage を最大限に活用することを意味するかどうかは、ぜんぜん違う話だ。