HTML 4.01では、終了タグが省略可能な要素がいくつかあります(OMITTAG YESなため)。何かの書籍あるいはサイトで、タグは省略しない方がいいと書いてあったので、特に気にすることもありませんでしたが、暇なのでメモ。
どの要素の終了タグが省略可能かは、採用しているDTDを見れば分かります。当サイトで採用しているXHTML 1.0 Strictは、そもそも要素を省略することがNGなので(まぁそれが理由で採用しているのですが)、HTML 4.01 Strict DTDを見てみます。要素宣言の部分を見ればOK。
例えばp要素は!ELEMENT P - O
となっています。開始タグ 終了タグで見ていき、「-」は省略不可、「O」は省略可(Omissible)なので、p要素は開始タグ省略不可、終了タグ省略可ということになります。省略の可不可の組み合わせは「- -」両方省略不可、「O O」両方省略可、「- O」終了タグのみ省略可の3つしかありません。以下は、両方省略可か、終了タグのみ省略可の要素宣言の一覧。また、EMPTYとなっている空要素は、終了タグを書いてはいけません。
!ELEMENT BR - O EMPTY !ELEMENT BODY O O !ELEMENT AREA - O EMPTY !ELEMENT LINK - O EMPTY !ELEMENT IMG - O EMPTY !ELEMENT HR - O EMPTY !ELEMENT P - O !ELEMENT DT - O !ELEMENT DD - O !ELEMENT LI - O !ELEMENT INPUT - O !ELEMENT OPTION - O !ELEMENT THEAD - O !ELEMENT TFOOT - O !ELEMENT TBODY O O !ELEMENT COLGROUP - O !ELEMENT COL - O EMPTY !ELEMENT TR - O !ELEMENT (TH|TD) - O !ELEMENT HEAD O O !ELEMENT BASE - O EMPTY !ELEMENT META - O EMPTY !ELEMENT HTML O O
上記を用いてHTMLを書いてみる。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<meta http-equiv="content-type" content="text/html;charset=UTF-8">
<title>HTML 4.01 Omissible Elements Example</title>
<h1>HTML 4.01 Omissible Elements Example</h1>
<p>Sample text 1
<p>Sample text 2
<p>Sample text 3
<ul>
<li>Sample list 1
<li>Sample list 2
<li>Sample list 3
</ul>
<table summary="Sample table"><tr>
<td>Sample table 1<td>Sample table 2<td>Sample table 3
<tr>
<td>Sample table 4<td>Sample table 5<td>Sample table 6
</table>
そのファイル。上記でもValid HTML 4.01 Strictというカッコいい(?)横文字になります。
でも、この書き方は全くおススメできません。どの要素が終了タグを省略できるかを探すよりも、全部終了タグを書いた方が楽だし、分かりやすいです。
凶悪www