HTMLの仕様書を読み始めた

僕は商品としてHTMLを納品するような仕事をやっているわけではないので、これまでのHTMLの学習は教養程度にXHTMLの入門書を読んだだけで済ませていました。そんなわけでW3Cの規格書をちゃんと読んだことは無くてタグの省略の規則とかもよく知らなかったのですが、昨日のエントリで初めてのはてなブックマークをもらったこともあり、これを機会にHTML4.01の規格書を読み始めてみました。

今日読んだのは、Abstract〜第4章まで。全体からしたらたぶん1割くらいですが、かなり収穫あり。「このHTML、XML的に整形式になってないキモいよー」な部分がどういう規則から起こっているのかが、第3章に書いてあります。

終了タグの省略

3.2.1 に記載があります。

Some HTML element types allow authors to omit end tags (e.g., the P and LI element types). A few element types also allow the start tags to be omitted; for example, HEAD and BODY.

http://www.w3.org/TR/html401/intro/sgmltut.html#h-3.2.1

開始タグを省略する、というケースもあるんですね。文法上のトリック的なところかもしれませんが、びっくり。
どの要素がタグを省略できるかの一覧は、要素インデックスにまとめられています。もちろんDTDにもしっかり書かれています。

空要素に/を書かない

<BR> とか <HR> とかのアレ。同じく3.2.1 に記載が。

Some HTML element types have no content. For example, the line break element BR has no content; its only role is to terminate a line of text. Such empty elements never have end tags.

http://www.w3.org/TR/html401/intro/sgmltut.html#h-3.2.1

空要素では終了タグは禁止なのか。初めて知りました。まあ確かに、スキーマで内容が空なことが分かってるんだったらタグを閉じなくても構造は自明だしね。
XHTML的な書き方の <br /> が許されているのかどうかは今の段階ではよくわかっていません。SGML文法の詳細の話らしい?[参考:bakera.jp > 鳩丸よもやま話 > SGML の短縮タグ機構
どの要素が空要素かは、タグの省略と同じく要素インデックスにまとめられています。

属性名だけの属性

<OPTION selected> とかのアレ。3.3.4に記載あり。

Some attributes play the role of boolean variables (e.g., the selected attribute for the OPTION element). Their appearance in the start tag of an element implies that the value of the attribute is "true". Their absence implies a value of "false".
…(中略)…
In HTML, boolean attributes may appear in minimized form -- the attribute's value appears alone in the element's start tag. Thus, selected may be set by writing:

<OPTION selected>

instead of:

<OPTION selected="selected">

http://www.w3.org/TR/html401/intro/sgmltut.html#didx-boolean_attribute

属性の中には、その属性があるかないかだけが意味のあるものがある。そのような属性をboolean attributeと呼んで、値まで書かずに属性名だけで書けばいいよ、とのこと。
どの属性がboolean attributeなのかは、属性インデックスでTYPEが1通りの値しか取らないものを探せばよいのかな。

感想

ずいぶん規則は理解しましたが、どうしたって

<DIV><P>paragraph</DIV>

みたいなのが閉じタグ忘れの文法エラーにしか見えないのは相変わらずです。一朝一夕に慣れるもんじゃない。

これらの例外的規則でタイプ量は減ってくれるものの、使おうという気にはなりませんな。どの要素が閉じタグを省略できるか覚えるよりは、統一された文法で閉じタグは一律に書く、となっていたほうがシンプルで嬉しい、と思ってしまいます。時折、JavaAPIのJavadocドキュメントや当のW3Cの文書で、タグの対応ミスらしき原因で表示がおかしくなっているのを見ますし。
これがXML脳なのか。