DOCTYPEと文法

HTML4.01までのHTMLは、SGMLという国際規格に則って作られていました。標準化団体W3CはHTMLの進化を4.01で停止し、XHTMLを選択しました。XMLの規格に沿ったXHTMLは文書構造が整ったコードできれいなものでしたが、続いて発表されたXHTML2.0では、後方互換性を無視したさらに論理的なものとなっていました。

これら後方互換性を失ったXHTMLとは違ったコンセプトで、WHATWGというグループによって設計されたのがHTML5です。HTML5にはXHTMLのようなDTD(文書型定義)はありません。HTMLとXHTML両方のシンタックスに対応し、タグの省略や大文字小文字の混在が許されるなど後方互換性に配慮された、文法に対して寛容な言語になっています。HTML5はW3Cにより正式にHTMLのバージョン5として再び進化することになり仕様の策定が進んでいます。

DOCTYPE宣言

仕様書で文法が定義されたHTML5にはDTD(文書型定義)はありません。HTML5のDOCTYPE宣言はブラウザの標準モードをトリガーするために使用されます。大文字で書くことによってHTMLとXMLの両方に準拠できるようになります。

<!DOCTYPE html>

文字コードの指定

HTMLの文字コードはHTTPのcontent-typeでも指定できますが、文書でも定義しておくことが望ましいです。文書の中では、最初の512バイト内に置く必要があります。特に理由がなければUTF-8を指定するのがお勧めです。

<!DOCTYPE html>
<meta charset=utf-8>

文法

これまでのXHTMLとそれ以前のHTMLへの後方互換性に配慮されたHTML5は、HTMLとXHTML(XML)両方のシンタックスに対応し、タグの省略や大文字小文字の混在が許されるなど文法に対して寛容な言語になっています。

上記の文字コード指定のmetaタグであれば、以下のような書き方はいずれも有効です(文字コード指定は重複できません)。

<meta charset="utf-8">
<meta charset="utf-8" />
<META CHARSET=utf-8>
<META CHARSET=utf-8 />
<meta CHARset=utf-8>
<meta CHARrset="utf-8" />
<!-- 下のような従来の長い記法も使用できますがメリットはありません -->
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

HTML5でこのような緩い文法が許されるのは、ブラウザがtext/htmlとして送信されたものがXHTMLに準拠しているかどうかにかまわない」ためです。文法を検証するバリデーターでインバリッド(無効)となる文書でも、ブラウザは完璧に動作しようとします。

例えば、headタグやbodyタグが無くてもブラウザがうまく補完して動作します。どのみちそれらを前提としているためです。

<!DOCTYPE html>
<meta charset="utf-8" />
<title>Valid HTML5</title>
<p>
このHTML5は、ブラウザでうまく動作し、検証ソフトウェアでもバリデートできます。
</p>

ただし、自由があるからと言って、マークアップを省略したり記法がごちゃ混ぜになった、メンテナンス性の悪い文書になるのは避けるべきです。自分にあった自然な書き方があるなら、その統一されたシンタックスの元で書くことが重要です。