HTML 4.01では、下のページで O がつけられているタグは省略することができる。
具体的には、
<table> <tbody> <tr> <th>header1</th> <th>header2</th> </tr> <tr> <td>content1</td> <td>content2</td> </tr> </tbody> </table>
は次のように省略して書くことが許される。
<table> <tr> <th>header1 <th>header2 <tr> <td>content1 <td>content2 </table>
ふと、SGMLの縛りがなくなったHTML5ではこういった省略に関する仕様がどのようになっているか気になったので、調べてみた。 結論から言うと、W3CのCR版、WHATWGのLiving Standard版どちらの場合も、後続する要素や内容に制限はあるものの、基本的にはHTML 4.01と違いはないようだ。
- http://www.w3.org/TR/2013/CR-html5-20130806/syntax.html#optional-tags
- http://www.whatwg.org/specs/web-apps/current-work/multipage/syntax.html#optional-tags
自分は、HTMLを手で書く場合は省略できるタグは省略するようにしている。 なぜなら、省略する場合もしない場合もDOMでは同一の構造となるし、正規表現でスクレイピングする場合も(そのページに限った話であれば)閉じタグの代わりに改行または開始タグを指定すればよく、大した差はないからだ。
XHTMLへの移行がうまくいかず、HTMLが受け入れられた理由の一つには、この手で書く場合も考慮した仕様があると思う。 zen-codingが流行して久しい昨今ではあるけれど、今後もHTMLは手で書けるマークアップ言語であり続けてほしいと思う。