開始タグの省略は、HTMLではあまり行なわれないようですが、仕様上は省略が許されているタグがあります。<HTML> や <HEAD>、<BODY> などの開始タグは省略することができます。だからといって、省略はしないようにしましょう。
Another HTML-lint : Explanationより
しばしば見かけるこの「省略しないようにしましょう」というのは一体何を根拠に言っているのだろうか。AHL自体は素晴らしいのだが、解説には不親切なものが時折ある。
特定のブラウザで問題を起こさないCSSの書き方にはNN4とIE3でスタイルの指定ができなくなる、とあるが、探してもそれくらいしか理由といった理由はないように思われる。他にはXHTMLなどタグの省略が出来ないマークアップ言語もあるため、省略しない方が良いと思われます
、といった「理由」が多くみられる。おそらくXHTMLに変換するときに不便だから、という話なのだろう。でもそれは何重にもおかしい。まずXHTMLへの移行を前提にするのは大きなお世話だ。次にHTMLを人力でXHTMLに変換することを前提にしているのがおかしい。普通何らかのソフトウェアを使うのだし、使うべきだからだ。そしてそうしたソフトウェアを使うのなら、省略の許されたタグ、つまり存在の自明なタグを自動で補完することなどたやすいことであり、省略されていようといまいと手間に有意な差など出ないだろう。
なにやらソースが見づらいという意見もみられた。確かにHTML文書のソースを見慣れていない人が、省略だらけのソースを読むと不思議な感じがするのは分かる。私もそうだった。しかし今では遙かに見やすいし編集しやすい。編集する側が見やすければ全く問題ないだろう。また、ソースなんかを見るならDOM Inspectorでも眺めていたほうが数倍役立つぞと言いたい気分だ。こちらはできれば1バイトでも無駄な記述を減らしたいんだよ。改行(CR, LF)等の空白文字は私がソースを編集するときのために必要なものであって、無駄な記述ではない。
自分でも考えてみた。body要素の開始タグを省略できないのは、body要素の最初の子要素としてscript要素を記述する場合くらいではないだろうか。まあ個人的にそれはないだろう。html要素にlang属性をつけたい時やhead要素にprofile属性をつけたい時なども省略できない。そういった属性をつける必要が出てきたらその時明示すれば問題ない筈だ。
ただ、推奨すべきでないのは痛いほど分かる。――あ、それかなAHLの解説の理由は。AHLは学習のために利用されるケースが多いから。
HTML4.01(J)には、スクリプトを使用する場合は
<META>
内にベースとなるスクリプト言語を明示しておくように書かれています。<META http-equiv="Content-Script-Type" content="text/javascript">
Another HTML-lint : Explanationより
本気で全然関係ないけど、IE向けのスクリプトはtype="text/vbscript"で書いてみようかな、と仕様書を読み返してみてちょっとだけ思った。それはさておき。
イベントハンドラ用の属性を書くのでなかったら、このmeta要素を指定することに何の意味があるのか、本気でさっぱり理解できない。邦訳のほうでは指定しなければならない
と誤訳※1しているが、後続のセクションを見れば自明なように、著者がonclick属性などを書いたときにその文書が不正になってしまわないように、あらかじめmeta要素でデフォルトのスクリプト言語を指定すべきという話だ。わかっていてあえて書かない分には問題ない筈。
でもなんか気まずくて、HTTP応答ヘッダの方でContent-Script-Typeを返すようにしてみたのだけれども、よく考えてみたら自分がイベントハンドラをHTMLで記述することなんてまずない。本当に特殊なテストスイートとかだけだろう。というわけで速効取りやめた。
※1 読みようによっては誤訳ではない