要約
HTML5 はワールド・ワイド・ウェブの中核言語である HTML の第 5 番目のメジャー・リビジョンを規定するものです。"HTML 5 differences from HTML 4"は HTML4 と HTML5 との違いを説明し、変更の根拠を提示します。HTML5 の仕様はまだ策定中のため、本文書の情報は正確ではないかもしれません。疑わしい時は、HTML5 仕様を必ずチェックしてください。[HTML5]
本文書の状態
このセクションでは、発行時における本文書の状態を説明します。本文書は他の文書によって置き換えられるかもしれません。を現在のW3Cの発行と最新リビジョンの技術レポートの一覧は、http://www.w3.org/TR/ の W3C technical reports
index でご覧いただけます。
本文書は、 HTML Activity の一部である HTML ワーキンググループが作成した 2010 年 06 月 24 日版の W3C 草案です。ワーキンググループは、本文書を HTML5 仕様に付随した Working Group Note として発行することを考えています。コメントがあれば、公開アーカイブ付きのメーリングリスト public-html-comments@w3.org までお願いします。
草案としての発行は、W3C 会員による承認を意味するものではありません。これは草案文書であり、変更されたり、他の文書に差し替えられたり廃止されるかもしれません。進行中の作業であることを前提とせずに本文書を引用するのは適切ではありません。
本文書は、 5 February 2004 W3C Patent Policy に基づき運営するグループによって作られました。W3C は、グループの成果物に関連して作られた public list of any patent disclosures を管理しています。そのページには、特許を開示する方法も掲載されています。自分の実知識に Essential Claim(s) が含まれるようであれば、W3C 特許ポリシーの第 6 章 に従って情報を開示しなければいけません。
目次
1. はじめに
HTML は、1990 年代はじめにインターネットに導入されてからどんどん進化してきました。仕様で導入された機能もあれば、ソフトウェアリリースで導入された機能もあります。ある面、実装とウェブ制作の現場が、お互いに仕様と標準とともに近づいてきましたが、離れてしまった面もあります。
HTML4 は 1997 年に W3C 勧告になりました。 HTML4 は多くの HTML の中核機能へのおおまかな指針として役立ち続けていますが、お互いに、そしてさらに重要なことに、広く使われているコンテンツの相互運用できる実装を構築するには十分な情報を提示しているとはいえません。XHTML1 や DOM Level 2 HTML についても同じことがいえます。XHTML1 は HTML4 の XML シリアライゼーションを規定し、DOM Lebel 2 HTML は HTML と XHTML 用の JavaScript API を規定していますが、HTML5は、これらの仕様に代わるものとなるでしょう。[DOM2HTML] [HTML4] [XHTML1]
最新の HTML 実装や、すでに広く使われているコンテンツの研究が 2004 年に開始されましたが、HTML5 草案は、その成果を反映しています。この草案は:
- HTML5 というひとつの言語を定義します。これは、HTML 構文と XML 構文で書くことができます。
- 相互運用可能な実装を促進するために、詳細な処理モデルを定義します。
- ドキュメントのマークアップを改善します。
- ウェブ・アプリケーションといった新興のイディオムに対応するマークアップと API を取り入れます。
1.1. 未解決の問題
HTML5 はまだ草案です。 HTML5 の内容は、HTML5 に依存している本文書の内容もしかりですが、今なお HTML Working Group と WHATWG のメーリングリストで議論されているところです。未解決の問題については、HTML5 草案からリンクされています。
1.2. 下位互換
HTML5は、すでに広く使われているコンテンツをユーザエージェントが取り扱う方法において下位互換性が保たれるように規定されています。オーサリング言語をコンテンツ製作者にとって比較的にシンプルに保つよう、いくつかの要素と属性は、本文書の他のセクションの説明の通り、含まれていません。例えば、CSS で扱った方が良いプレゼンテーショナルな要素です。
しかし、ユーザエージェントは、いつまでたってもこのような旧来の要素をサポートしなければいけないでしょう。そのため、この仕様では、ウェブ製作者とユーザエージェントそれぞれの要件をはっきりと区別しています。例えば、ウェブ製作者は isindex や plaintext 要素を使うことはできないが、ユーザエージェントは、これらの要素の旧来の挙動の仕方と互換性を保つように、これらの要素をサポートしなければいけないことを意味します。
HTML5 は、ウェブ製作者とユーザエージェントの適合性要件を区別しているため、もう "非推奨(deprecated)" とマーキングする必要はないのです。
1.3. 開発モデル
HTML 5の仕様は、2 つ以上の完全な仕様実装が出てこないと、完了できないようになっています。実装の完成度を測るためには、テスト・スイートが使われます。これは、旧バージョンの HTML とは異なるアプローチです。旧バージョンでは、通常は、実際に実装される前に、委員会によって最終仕様が承認されていました。これは、完了した際には、確実にこの仕様がデザイナや開発者によって実装や利用が可能となることを目標とした変更です。
2. 構文
HTML5は、ウェブに掲載された HTML4 および XHTML1 ドキュメントと互換性がある HTML 構文を定義します。しかし、processing
instructions や shorthand
markup といった HTML4 の難解な SGML 機能との互換性はありません。これらの機能は、ほとんどのユーザーエージェントでサポートされていません。HTML 構文を使うドキュメントは、メディア・タイプを text/html としなければいけません。
HTML5は、 ポピュラーな実装と広く互換性があるこの構文に対して、詳細な構文解析規則("エラーハンドリング"も含みます)も規定しています。ユーザエージェントは、これらの text/html MIMEタイプを持ったリソースに対して、この規則を使わなければいけません。これは、HTML 構文に準拠したドキュメントの例です:
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>ドキュメントの例</title>
</head>
<body>
<p>段落の例</p>
</body>
</html>
HTML5 では、HTML 構文を使ったドキュメント用に text/html-sandboxed も定義しています。これは、信用できないコンテンツを組み込む場合に使うことができます。
HTML5では、このほかにも XML 構文を使うことができます。この構文は、XHTML1 の文書およびその実装と互換性があります。この構文を使ったドキュメントは、XML MIME タイプで提供する必要があります。また、すでに XML 仕様に記載されている規則に従って、要素を http://www.w3.org/1999/xhtml 名前空間に入れる必要があります。[XML]
下記の例は、HTML5 の XML 構文に準拠したドキュメントです。XML ドキュメントは、application/xhtml+xml または application/xml のような XML メディア・タイプを持たなければいけないことに注意してください。
<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>ドキュメントの例</title>
</head>
<body>
<p>段落の例</p>
</body>
</html>
2.1. 文字エンコーディング
HTML5 でウェブ制作をする際、文字エンコーディングを指定する方法が3つ用意されています:
- 転送段階で、例えば、HTTP
Content-Type ヘッダを使う。
- ファイルの先頭に Unicode Byte Order Mark (BOM) をセットする。この文字は、利用されているエンコードに対応した符号定数を提供するものです。
- ファイルの 512 バイト以内に、エンコーディングを特定する
charset 属性を持った meta 要素を使う。例えば、<meta charset="UTF-8"> で、UTF-8 エンコーディングを指定することができます。これは、<meta
http-equiv="Content-Type" content="text/html; charset=UTF-8"> に代わるものですが、どちらも認められています。
XML 構文では、文字エンコーディングをセットするために、XML 仕様に掲載された規則を使わなければいけません。
2.2. DOCTYPE
HTML5 の HTML 構文は、確実にブラウザが標準モードでページをレンダリングするよう、DOCTYPE を必要とします。DOCTYPE は、それ以外の用途で使われることはないため、XML では必須ではありません。XML MIME タイプの文書は、常に標準モードで取り扱われます。 [DOCTYPE]
DOCTYPE 宣言は <!DOCTYPE html> で、大文字・小文字は区別されません。旧来の HTML の DOCTYPE は長いものでした。それは、HTML 言語が SGML ベースであるため、DTD への参照が必要だったからです。HTML5 では、もうそのようなことはなく、 DOCTYPE は、HTML 構文を使って書かれた文書を標準モードで認識させるためだけに必要とされます。ブラウザはすでに <!DOCTYPE
html> で標準モードになります。
2.3. MathML と SVG
HTML5 の HTML 構文では、ドキュメントの中で MathML や SVG 要素を使うことができます。例えば、ごく少数の構文機能を使ったとてもシンプルなドキュメントは、次のようになるでしょう:
<!doctype html>
<title>SVG in text/html</title>
<p>
緑色の円:
<svg> <circle r="50" cx="50" cy="50" fill="green"/> </svg>
</p>
もっと複雑な組み合わせも可能です。例えば、SVG フラグメントが HTML の中にあり、さらに、その SVG の foreignObject 要素を使って、MathML または HTML、またはその両方を、その SVG フラグメントの中にネストすることができるでしょう。
2.4. その他
言及すべき構文上の変更点が他にもいくつかあります:
- ドキュメントのエンコーディングが UTF-8 か UTF-16 でないと完全に使うことができませんが、HTML は IRI をネイティブでサポートしました。
lang 属性は、まさに XML の xml:lang と同様に、妥当な言語識別子に加え、空の文字列とすることもできます。
3. 言語
このセクションでは、いくつかに区切って、HTML4 と HTML5 の間にある様々な違いをより分かりやすく解説します。
3.1. 新たな要素
このセクションにあるリンクは、要素の名前が変更されたり削除された場合、無くなるかもしれません。これらのリンクは、この最新版の草案の中で機能するはずです。
構造を改善するために、次の要素が導入されました:
-
section は、一般的なドキュメント、または、アプリケーション・セクションを表します。h1, h2, h3, h4, h5, h6 と一緒に使うことで、ドキュメント構造を表すことができます。
-
article は、ブログエントリや新聞記事のような、ドキュメントのコンテンツの独立した部分を表します。
-
aside は、そのページと関連性が薄いコンテンツの部分を表します。
-
hgroup は、セクションのヘッダーを表します。
-
header は、前置きやナビゲーションの補助となるグループを表します。
-
footer は、セクションのフッターを表し、ウェブ製作者、コピーライト情報などの情報を入れることができます。
-
nav は、その文書のナビゲーションに特化したセクションを表します。
-
figure は、自己完結するフロー・コンテンツを表します。通常は、その文書の本文から、ひとつの単位として参照されます。:
<figure>
<video src="ogg"></video>
<figcaption>Example</figcaption>
</figure>
figcaption がキャプションに使えます(必須ではありません)。
そのほかにもいくつかの新しい要素があります:
-
video と audio はマルチメディアコンテンツ用です。いずれも、アプリケーション・コンテンツ製作者が自身のユーザ・インタフェースをスクリプトできるよう API を提供します。しかし、ユーザエージェントによって提供されるユーザ・インタフェースを起動する方法もあります。異なるタイプのストリームが複数利用可能であれば、これらの要素と一緒に source 要素を使います。
-
embed はプラグイン・コンテンツに使います。
-
mark は、他の文脈での関連性に起因して、参照を目的として、ドキュメントの中の一連のテキストにマーク付けしたりハイライトしたりします。
-
progress は、タスクの完了度を表します。ダウンロードや、重い処理を実行する場合などに使います。
-
meter は、ディスク使用率のような計測結果を表します。
-
time は日時を表します。
-
ruby, rt, rp でルビ注記をマークアップできます。
-
wbr は改行の機会を表します。
-
canvas は、グラフやゲームなどのような、その場で動的なビット・マップグラフィックを描くために使います。
-
command は、ユーザが呼び出すことができるコマンドを表します。
-
details は、ユーザが要求に応じて得られる追加情報やコントロールを表します。summary 要素は、その概要や説明やキャプションを与えます。
-
新たに追加された input の list 属性と一緒に datalist を使えば、コンボ・ボックスを作ることができます:
<input list="browsers">
<datalist id="browsers">
<option value="Safari">
<option value="Internet Explorer">
<option value="Opera">
<option value="Firefox">
</datalist>
-
keygen は鍵ペア生成用のコントロールを表します。
-
output は、スクリプトを通して実行された計算結果のような出力を表します。
input 要素の type 属性には、次の値が加わりました:
これらの新しいタイプの狙いは、例えば、カレンダーから日付を選択したり、アドレス・ブックを統合したりして、サーバに所定のフォーマットで送信できるようなユーザー・インタフェースを提供するといった、ユーザー・インタフェースをユーザーエージェントが提供できるという点です。ユーザーの入力をサーバからのフィードバックを待たずにチェックすることができますので、ユーザーに、より良いエクスペリエンスを提供します。
3.2. 新たな属性
HTML5 は、すでに HTML4 に導入されている各種要素に、いくつか新たな属性を導入しました:
-
a と area 要素に、link 要素との整合性のため、 media 属性が加わりました。
-
a と area 要素に、ping と呼ばれる新たな属性が加わりました。これは、ハイパーリンクをたどるときに ping を送らなければならない URI のリストをスペース区切りで指定します。現在は主にリダイレクトでユーザ追跡をしています。この属性を使えば、ユーザエージェント側で、どの URI を ping しようとするのかをユーザに知らせることができるだけでなく、プライバシーを気にするユーザにはこの機能を無効にする方法を与えることもできます。
-
area 属性にも、 a と link 要素との整合性のため、hreflang と rel 属性が加わりました。
-
base 要素にも target 属性を使うことができます。これは主に a 要素との整合性をわせるためです(これはすでに広くサポートされています)。また、a と area 要素の target 属性は、例えば iframe と併用で、ウェブ・アプリケーションでは役に立ちますので、もう非推奨になることはありません。
-
li 要素の value 属性は、プレゼンテーショナルではありませんので、廃止になることはありません。ol 要素の start 属性も同様です。
-
meta 要素に charset 属性が加わりました。これはすでに広くサポートされておりますが、ドキュメントの文字エンコーディングを指定する良い方法を提供します。
-
新たに加えられた autofocus 属性を、input (type 属性が hidden の場合を除く)、select、textarea、button 要素に指定することができます。この属性を使えば、ページのロード中にフォームコントロールにフォーカスを当てるための宣言的な方法を提供します。この機能を使えば、ユーザ・エクスペリエンスが向上するはずです。例えば、ユーザは嫌ならそれを無効にできます。
-
新たに加えられた placeholder 属性は input と textarea 要素で指定することができます。これは、ユーザーのデータ入力を助けるヒントを表します。
-
form 属性が、input, output, select, textarea, button, fieldset 要素用に新たに加わりました。この属性によって、コントロールをフォームと関連付けることができます。つまり、これらの要素を、ページのどこに配置しても良いのです。もう、form 要素に入れなくても良いのです。
<label>Email:
<input type=email form=x name=email>
</label>
<form id=x></form>
-
新たに、required 要素が、input 要素(type 属性が hidden, image の場合や、submit のようなボタンの場合を除く)と textarea 要素で使えるようになります。この属性によって、フォームを送信するためには値を入力しなければいけないことを示すことができます。
-
fieldset に disabled 属性が使えるようになりました。これを指定すれば、子孫となるすべてのコントロールを無効にすることができるようになります。
-
input 要素に、autocomplete, min, max, multiple, pattern, step 属性が加わりました。これらの属性では、入力の制約を指定することができます。前述のとおり、この要素には list 属性も加えられ、datalist 要素とともに使うことができます。
-
form 要素に novalidate 属性が加わりました。この属性を使えば、フォーム・バリデーション・サブミッションを無効にすることができます(つまり、そのフォームはいつでもサブミットできます)。
-
input と button 要素に formaction, formenctype, formmethod, formnovalidate, formtarget 属性が加わりました。それらの属性が存在すれば、form 要素の action, enctype, method, novalidate, target 属性より優先されます。
-
menu 要素に、type と label の2つの属性が加わりました。これらの属性は、グローバルの contextmenu 属性と組み合わせることで、一般的なユーザー・インタフェースに見られるようなメニューになったり、コンテキスト・メニューを提供することができます。
-
style 要素に scoped 属性が加わりました。この属性は、スタイルシートの適用範囲を限定することができます。このような style 要素内にあるスタイルのルールはローカル・ツリーだけに適用されます。
-
script 要素に async と呼ばれる属性が加わりました。この属性は、スクリプトのロードと実行に作用します。
-
html 要素に manifest と呼ばれる属性が加わりました。この属性は、オフライン Web アプリケーション用の API と組み合わせて利用されるアプリケーション・キャッシュ・マニフェストを指し示します。
-
link 要素に sizes と呼ばれる属性が加わりました。この属性は、icon の関連性( rel 属性でセットされる)と組み合わせて使うことができ、参照アイコンのサイズを表します。そのため、異なるアイコンのサイズを指定することができるようになります。
-
ol 要素に reversed と呼ばれる属性が加わりました。この属性は、リストの順番が降順であることを表します。
-
iframe 要素に sandbox, seamless, srcdoc という 3 つの属性が加わりました。これらの属性は、ブログコメントのようなサンドボックス化したコンテンツを実現します。
HTML4 からあるいくつかの属性が、すべての要素に加えられました。このような属性をグローバル属性と呼びます。:class, dir, id, lang, style, tabindex, title
また新たに加えられたグローバル属性もいくつかあります:
contenteditable 属性は、該当の要素が編集可能な領域であることを指示します。ユーザは要素の内容を変更したり、マークアップを操作することができます。
contextmenu 属性は、コンテンツ製作者によって提供されるコンテキスト・メニューを指し示すために使われます。
data-* はコンテンツ制作者が定義する属性です。コンテンツ制作者は、data- から始まる名前にすれば、好きな属性を定義することができ、将来の HTML のバージョン機能との衝突を避けられます。これらの属性は、ユーザーエージェントが拡張機能として同じ名前の属性が使っていない限り、特に制約はありません。
draggable 属性は、新たに追加されたドラッグ&ドロップ API といっしょに使うことができます。
hidden 属性は、要素が、まだ関連性がない、または、もう関連性がないということを表します。
role と aria-* 属性は、支援テクノロジー向けに使うことができます。
spellcheck 属性は、コンテンツのスペルをチェックするかどうかを示すことができます。
HTML5 でも、HTML4 からある onevent-name という形式を取るすべてのイベント・ハンドラ属性を使うことができます。そして、新たに導入されたイベント向けに新たなイベント・ハンドラがいくつか加えられました。例えば、play イベントは、 video や audio といったメディア要素向けの API で使われます。
3.3. 変更された要素
これらの要素は、ウェブ上での使われ方をよりよく反映するため、もしくは、さらに便利にするために、HTML5 上での意味が少しだけ変更されました:
-
href 属性がない a 要素は、 "プレースホルダー・リンク" を表わすことになります。つまり、本来なら、そこにはリンクがセットされるはずだったことを表します。これは、段落コンテンツに限定されているわけではなく、フロー・コンテンツも入れることができます。
-
address 要素は、新しく導入されたセクショニングという概念で適用範囲が限定されることになります。
-
b 要素は、特別な重要度を伝達はしないけれども、通常の文から文体的に区別したいテキストの範囲を表すことになります。例えば、文書の概要にあるキーワードや、レビューにある商品名や、一般的なな印刷用表現で太字で表されるテキストの範囲です。
-
cite 要素は、これ単独で、作品のタイトルを表すようになりました(例:本、雑誌、エッセイ、詩、スコア、歌、台本、映画、テレビ番組、ゲーム、彫刻、絵画、演劇、芝居、オペラ、ミュージカル、展示会、訴訟事件報告など)。特に、HTML4 で使われていたような、人の名前をマークアップするといったことは、もう非準拠となります。
-
hr 要素は、段落レベルのテーマの区切りを表すことになります。
-
i 要素は、声またはムードの中のテキストの範囲を表すことになります。そうでなければ、通常の文から区別したいテキストの範囲を表すようになります。例えば、分類上の意味、技術用語、別の言語ならでわの言い回し、考え、船の名前、一般的な印刷表現がイタリック体となる文です。使い方は言語によって大きく異なります。
-
label 要素では、ブラウザは、そのプラットフォームのユーザー・インタフェース基準でない限り、そのラベルからコントロールにフォーカスを動かすべきではありません。
-
menu 要素は、ツールバーやコンテキスト・メニューに使えるよう再定義されました。
-
small 要素は、細目(サイド・コメント、法文に使われる)を表すようになります。
-
strong 要素は、強調ではなく重要性を表すようになります。
-
head 要素にはもう object 要素を入れることができなくなりました。
3.4. 変更された属性
次の属性は認められますが、それらを使わずに代替の方法を使うことが強く推奨されます:
-
img の border 属性。もし使うなら、その値は "0" でなければいけません。代わりに CSS を使うことができます。
-
script の language 属性。もし使うなら、その値は "JavaScript" (大文字・小文字は区別されません)でなければいけません。type 属性と不整合があってはいけません。これは全く役に立たない機能なので、単に省略することができます。
-
a の name 属性。代わりに id 属性を使うことができます。
-
table の summary 属性。HTML5 草案は、いくつかの代替の方法を定義しています。
3.5. 削除された要素
ウェブ製作者は、このセクションの要素を使ってはいけません。しかし、ユーザエージェントは、これらの要素をサポートしなければいけないでしょうが、HTML5 の各種セクションでその方法を定義しています。例えば、廃止となった isindex 要素はパーサーのセクションで扱われています。
次の要素は HTML5 にはありません。なぜなら、それらの効果は純粋にプレゼンテーショナルなものであり、CSS で扱った方がよいからです:
basefont
big
center
font
s
strike
tt
u
次の要素は、HTML5 にはありません。なぜなら、それらの用途は、エンドユーザのユーザビリティとアクセシビリティに悪影響を及ぼすからです:
次の要素は含まれておりません。なぜなら、それらはあまり使われておらず、混乱を招いており、他の要素で代用できるからです:
acronym は多くの混乱を招いたため含まれていません。ウェブ制作者は、略称には abbr を使うべきです。
applet は廃止され、object が推奨されました。
isindex の利用なら、フォームコントロールの利用に置き換えられます。
dir は廃止され、ul が推奨されました。
最後に、noscript は HTML 構文では準拠しています。その利用は HTML パーサに依存したものであるため、XML 構文には含まれておりません。
3.6. 削除された属性
HTML5 では、HTML4 からある属性のうち、いくつかがもう使えなくなりました。それらの属性が、下位互換性の理由によりユーザエージェント上でいくらかの効果を持つ必要があるなら、それらのシナリオでどのように機能すべきかが定義されています。
link と a の rev と charset 属性
a の shape と coords 属性
img と iframe の longdesc 属性
link の target 属性
area の nohref 属性
head の profile 属性
html の version 属性
img の name 属性(代わりに id を使う)
meta の scheme 属性
object の archive, classid, codebase, codetype, declare, standby 属性
param の valuetype と type 属性
td と th の axis と abbr 属性
td の scope 属性
さらに、HTML5では、HTML4 で規定されていたものの、CSS で扱った方がよいようなプレゼンテーショナルな属性は無くなりました:
caption, iframe, img, input, object, legend, table, hr, div, h1, h2, h3, h4, h5, h6, p, col, colgroup, tbody, td, tfoot, th, thead, tr の align 属性
body の alink, link, text, vlink 属性
body の background 属性
table, tr, td, th, body の bgcolor 属性
table と object の border 属性
table の cellpadding と cellspacing 属性
col, colgroup, tbody, td, tfoot, th, thead, tr の char と charoff 属性
br の clear 属性
dl, menu, ol, ul の compact 属性
table の frame 属性
iframe の frameborder 属性
td と th の height 属性
img と object の hspace と vspace 属性
iframe の marginheight と marginwidth 属性
hr の noshade 属性
td と th の nowrap 属性
table の rules 属性
iframe の scrolling 属性
hr の size 属性
li, ol, ul の type 属性
col, colgroup, tbody, td, tfoot, th, thead, tr の valign 属性
hr, table, td, th, col, colgroup, pre の width 属性
4. API
HTML5 では、ウェブ・アプリケーションを作成する際の助けとなるいくつかの API を導入しました。これらの API は、アプリケーション用に新たに導入された要素と一緒に使うことができます:
video と audio 要素とともに使うビデオとオーディオを再生する API。
- オフライン・ウェブ・アプリケーションを可能にする API。
- ウェブ・アプリケーションを特定のプロトコルやメディアタイプ用に登録することができる API。
contenteditable グローバル属性と組み合わせて使う編集用 API。
draggable 属性と組み合わせて使うドラッグ & ドロップ用の API。
- 履歴を取り出し、back ボタンを壊すことがないよう、それにページを追加することができる API。
4.1. HTMLDocument の拡張
HTML5 は、さまざまな形で、DOM Level 2 HTML の HTMLDocument インタフェースを拡張しました。そのインタフェースは、Document インタフェースを実装するすべてのオブジェクトに組み込まれることになります。そのため、複合ドキュメントのコンテキストにおいて重要であることに変わりはありません。このインタフェースには、いくつか注目すべき新たな機能も加わりました:
-
getElementsByClassName() を使えば、class 名から要素を選択することができます。このメソッドは、class 属性がセットされたコンテンツ、および、SVG や MathML といった Document オブジェクトに対して機能するよう規定されます。
-
innerHTML は、HTML や XML ドキュメントを構文解析したりシリアル化する簡単な方法として利用できます。この属性は、以前は、ウェブ・ブラウザでは HTMLElement でのみ利用可能で、標準ではありませんでした。
-
activeElement と hasFocus は、要素がいまフォーカスされているかを判定したり、個々に Document がフォーカスされたかを判定するために使います。
-
getSelection() は、現在の選択対象を表すオブジェクトを返します。
4.2. HTMLElement の拡張
HTML5では、HTMLElement インタフェースにもいくつかの拡張が加えられました:
-
getElementsByClassName() が追加されました。基本的に HTMLDocument にもある同メソッドの範囲限定バージョンです。
-
今日のウェブ・ブラウザで使える innerHTML が追加されました。また、XML コンテキスト(XML ドキュメントで使われる場合)でも動作するよう定義されました。
-
classList は、className 用の便利なアクセサです。それが返すオブジェクトは、要素の class を操作するための contains(), add(), remove(), toggle() といったメソッドを提供します。 a, area, link 要素は、relList と呼ばれるよく似た属性を持ちますが、これは rel 属性に対して同じ機能を提供します。
5. HTML5 変更履歴
このセクションの変更履歴は、HTML5 草案の公開における変更点まとめたものです。変更の理由については public-html@w3.org と whatwg@whatwg.org のメーリングリストアーカイブをご覧ください。This Week in
HTML5 のブログ投稿にもある程度あります。多くの編集上の変更や小さなテクニカルな変更は、この変更履歴に含まれていません。つまり、実装者は、頻繁にメインの仕様の開発状況を追って、実装に影響を受ける変更点のすべてに気がつくようにすることが、強く推奨されます。
変更履歴の変更点は、このドキュメントを簡単に編集できるようにするため、大まかな年代順になっています。
5.1. 2010年3月4日版からの変更点
iframe srcdoc ドキュメントや、電子メールを扱うようなケースなどタイトルがすでに取得可能なシナリオに対しては、title 要素は必須でなくなりました。
meta 要素の keywords が、標準メタデータ名になりました。
iframe 要素の sandbox 属性に、allow-top-navigation という値が追加されました。これが指定されると、組み込まれたコンテンツから、その親へナビゲートすることができるようになります。
wbr 要素が追加されました。
link 要素の rel 属性用の alternate キーワードが再びフィードを指し示すために使えるようになりました。そのフィードが、そのドキュメントの代替かどうかは問いません。
- HTML から Atom へのマッピングが、HTML5 の W3C バージョンから削除されました。
さらに数多くのマイナーな変更や明確化や修正がなされました。
5.2. 2009年8月25日版から2010年3月4日版までの変更点
dialog 要素が削除されました。それに代わり、会話のマークアップ方法についてアドバイスするセクションが設けられました。
document.head が導入されました。スクリプトから head 要素に簡単にアクセスできるようになります。
- リンク・タイプの
feed が削除されました。代わりに、特定のメディア・タイプを伴った alternate が使われることになります。
createHTMLDocument() が導入されました。HTML ドキュメントを簡単に生成することができる API です。
meter と progress 要素のいずれからも、そのコンテンツのマジカルな処理が無くなりました。それは、国際的に対応できなかったからです。
meter と progress 要素が、output 要素と同様に、label 要素を使ってラベル付けできるようになりました。
text/html-sandboxed という新たなメディア・タイプが導入されました。有害となる可能性があるコンテンツを、害を受けることがないよう、組み込むことができるようになります。
iframe 要素に srcdoc 属性が導入されました。有害となる可能性があるコンテンツをインラインで組み込みことができるようになります。これは、sandbox や seamless 属性と組み合わせて利用することを想定しています。
figure 要素には、legend ではなく、新たに導入された figcaption 要素を使うことになりました。これは、みんなが、W3C 勧告より早くから HTML5 を使えるようにしたかったからです。
details 要素には、まったく同じ理由で、新たに導入された summary 要素を使うことになりました。
- メディア要素の
autobuffer 属性が preload に変更されました。
他にも数多くのちょっとした問題が解決されました。 前述のリストは、ウェブ制作者に関心があると思われるものを要約したものです。
前述の項目に加え、Microdata、canvas の 2D context API、Web Messaging(postMessage() API)が、W3C で、それぞれ別々の草案に分割されました(WHATWG は、今でも、これらを含めた HTML5 のバージョンを公開しています):
microdata ボキャブラリーの仕様は、W3C の HTML5 草案においては、ひとつにまとめられ、分割された草案として公開されていません。WHATWG の HTML5 の草案は、今でも、それらを含んでいます。
5.3. 2009年4月23日版から2009年8月25日版までの変更点
time 要素が空のとき、ユーザーエージェントは時間を現地の習慣に合わせてレンダリングしなければいけない。
load イベントは Window で発出されることになった。しかし、そのターゲットは Document ではなくなった。
pushState() は Referer(sic)ヘッダーに作用することとなった。
onundo と onredo は Window 上のものとなった。
- メディア要素は、現在のリソースがどこから開始するのかを表す
startTime メンバーを持つこととなった。
header は hgroup に変更され、新たに header 要素が導入された。
createImageData() は ImageData オブジェクトも引数に取るようになった。
createPattern() は video 要素も引数として受け取ることができるようになった。
footer 要素は header の中に入れることができなくなった。そして、header は address や footer の中に入れることはできない。
- 新たなコントロールが導入された:
<input type="tel">
- コマンドAPIがすべての要素で動作するようになった。
accesskey が適切に定義された。
section と article は cite 属性を取るようになった。
- Microdata と呼ばれる新機能が導入され、HTMLドキュメントに独自データ構造を埋め込むことができるようになった。
- Microdata モデルの3つの規定語彙の利用も加えられた:vCard, vEvent, ライセンシング向けモデル
- ドラッグとドロップが Microdata モデルで動作するようアップデータとされた。
- The last of the
parsing quirks が定義された。
textLength が textarea 要素のメンバーとして追加された。
rp 要素は、単一文字というよりフレージング・コンテンツを取るようになった。
location.reload() が定義された。
hashchange イベントが非同期に発出することとなった。
- XPath 1.0 と XSLT 1.0 との互換性のための規則が追加された。
spellcheck DOM 属性が、DOMString にマッピングされることとなった。
hasFeature() サポートが最小限に縮小された。
Audio() コンストラクタが autobuffer 属性をセットすることとなった。
td 要素を thead に入れることができないようになった。
input 要素と DataTransfer オブジェクトは、files DOM 属性を持つこととなった。
datagrid と bb が、その設計において同意が得られなかったため、削除された。
- キュー・レンジ API が、メディア要素から削除された。
- WAI-ARIA のサポートが統合された。
このリストに加え、相当数の明確化不足、タイポ、実装固有の問題、その他、小さな問題が解決した。
さらに、HTML 5 から次の部分が取り出され、IETF で開発を進めることになった:
- URL の定義
- Content-Type スニッフィングの定義
5.4 2009年2月12日版から2009年4月23日版までの変更点
spellcheck と呼ばれるグローバル属性が新たに追加された。
- グローバル・オブジェクトにおける ECMAScript の
this は、Window オブジェクトではなく、WindowProxy オブジェクトを返すと定義された。
- File Upload 状態にある
input 要素の value DOM 属性が新たに定義された。
designMode の定義が旧来の実装にもっと沿うように変更された。
- 2D 描画 API の
drawImage() メソッドが、video 要素でも使えるようになった。
- メディア要素がリソースをロードする方法が変更された。
document.domain が IPv6 互換となった。
video 要素に、ヒントとしての役割を担う autobuffer 論理属性が加えられた。
- XML ドキュメントで
charset 属性を伴った meta 要素を指定することができるようになった。ただし、その属性の値が、そのドキュメントのエンコーディングと一致する場合に限る。(これは値を指定するものではなく、単にお守りみたいなものに過ぎないことに注意すること)
- メディア要素から、
bufferingRate と bufferingThrottled が削除された。
- メディア要素リソース選択アルゴリズムが非同期となった。
postMessage() API は、MessagePort オブジェクト一つだけではなく、その配列を引数にとることとなった。
select 要素の add() メソッドと、select 要素の options が、オプショナルとなった。
input と button 要素の action, enctype, method, novalidate, target 属性が、formaction, formenctype, formmethod, formnovalidate, formtarget に命名変更された。
- "ストレージ・ミューテックス" の概念に、別々のページからのストレージ・オブジェクト(
document.cookie と localStorage)の同時変更の扱いが加えられた。Navigator に、明示的にリリースできる getStorageUpdates() メソッドが加えられた。
- MathML に似た SVG 向けの構文が定義され、SVG を
text/html リソースに入れることができるようになった。
placeholder 属性が textarea 要素に加えられた。
- 鍵ペアー生成用に
keygen 要素が追加された。
datagrid 要素が改訂され、API がさらに非同期となり、グリッドの未ロード部分を考慮するようになった。
さらに、HTML 5 からいくつかの部分が取り出され、単独の仕様として、Web Applications ワーキング・グループで開発が進められることとなった:
- Web Sockets
- Server-Sent Events
- Web Storage (永続的ストレージとデータベース・ストレージ機能)
5.5 2008年6月10日版から2009年2月12日版までの変更点
ImageData オブジェクトの data メンバが、配列から CanvasPixelArray オブジェクトに変更された。
canvas 要素とそのAPIでシャドーが必須となった。
canvas のセキュリティ・モデルが明瞭になった。
- 実装およびウェブ制作者のフィードバックに応えて、
canvas の処理モデルにさまざまな変更が行われた。例えば、NaN や無限大が引き渡されたときに何が起こるのかが明確になり、arc() and arcTo() の定義がフィックスした。
- XML での
innerHTML に若干の変更が加えられ、ラウンド・トリッピングが改善した。
canvas 要素の toDataURL() メソッドで、メディアタイプの引数が image/jpeg のとき、品質レベルをセットできるようになった。
video 要素の poster 属性が、その固有の寸法に作用ようになった。
link 要素の type 属性のビヘイビアが明確化された。
- 期待するタイプがイメージのとき、
link 要素に対してスニッフィングが認められた。
- URLに関するセクションが導入された。URLの値がどのように解釈されるべきか、そして、ウェブ制作者には正確に何が求められるのかについて扱う。仕様にあるURLを使うすべての機能が、この新しいURLのセクションを考慮に入れて、書き換えられた。
base 要素の href 属性が xml:base に依存しないという点が明確になった。
- base URL が変わると、そのビヘイビアはどうあるべきかが定義された。
- URL 分解 DOM 属性が、Internet
Explorer とさらに協調することになった。
- すべてのHTML要素で、値が
http://www.w3.org/1999/xhtml となる xmlns 属性を使えるようになった。
embed 要素の data-* 属性と独自属性が、XML の Name 生成と一致しなければならず、コロンを入れることができなくなった。
- サーバーとの双方向通信ができる Web Socket API が導入された。現在は、テキストメッセージに限定される。
- メディア要素の
volume のデフォルト値が、0.5から1.0になった。
event-source が eventsource に命名変更された。ハイフンを使う要素が、HTMLでは他にないため。
postMessage()を加えたメッセージ・チャネル API が導入された。
bb という名前の新要素が追加された。この要素は、ユーザーが呼び出すことができるユーザーエージェントのコマンドを表す。
- メディア要素の
addCueRange() メソッドが、コールバックから取得可能な識別子を引数に取るよう変更された。
- DOM を infoset に変化させる方法が定義された。
Window オブジェクトの parent 属性が定義された。
embed 要素が、 text/plain として Flash を配布するサーバーとの互換性のため、拡張スニッフィングをするよう定義された。(これは、仕様の中で、もっと良い方法ないかを見つけ出すため、課題としてマークされている)
embed が src 属性なしで使えるようになった。
getElementsByClassName() が、CSS と整合性を取るため、quirks モードでは大文字・小文字を区別しないよう定義された。
- HTML ドキュメントでは、もう
localName は大文字でノード名を返さないようになった。
data-* 属性は常に小文字と定義された。
target="_blank" や rel="noreferrer" となるリンクからページが開かれたときには、Window オブジェクトの opener 属性は存在するべきではないことになった。
Window オブジェクトの top 属性が定義された。
a 要素は、ネストしたフロー・コンテンツを認めることとなったが、ネストしたインタラクティブ・コンテンツは認められない。
header 要素がドキュメントやテーブルコンテンツにとってどんな意味を持つのかが定義された。
- リソースをフェッチするとはどういう意味かが定義された。
canvas 要素ではパターンは必須となった。
autosubmit 属性が menu 要素から削除された。
outerHTML と insertAdjacentHTML() のサポートが追加された。
xml:lang は、lang も同じ値で指定されれば、HTMLでも認められた。
Window オブジェクトの frameElement 属性が定義された。
- イベント・ループとタスク・キューが、スクリプト実行とイベントについて詳細に定義された。すべての機能が、このメカニズムの観点からアップデートされた。
alt 属性が省略されたなら、title 属性が必須に、そして、該当の要素を包含するものとして、子孫に legend 要素を持つ figure 要素、もしくは、関連の見出しを持ったセクションが必須となった。
irrelevant 属性が hidden にリネームされた。
- MathML の
definitionURL 属性が厳密にサポートされることとなった。以前は、パース中にすべて小文字になってしまうようになっていた。
- ユーザーエージェントは、互換性のため、US-ASCII を Windows-1252 として扱わなければいけない。
DOCTYPE 用の代替構文として、いくらかの XML ツールが認められた。
- データ・テンプレートが削除された(
datatemplate, rule, nest 要素で構成されていた)。
- メディア要素に、ひとつだけ
loop 属性がサポートされることとなった。
- メディア要素の
load() メソッドが非同期として再定義された。また、source 要素の type 属性を探すだけだったのが、順にファイルを実際に試してみるようになった。
canPlayType() と呼ばれる新メンバがメディア要素に追加された。
totalBytes と bufferedBytes 属性がメディア要素から削除された。
Location オブジェクトに resolveURL() メソッドが加えられた。
q 要素が、再度、変更された。再び、引用符はユーザーエージェントから提供されることとなった。
- ウェブサイトが求めるビヘイビアにもっと応えられるよう、HTMLパーサーのアルゴリズムに、さまざまな変更が加えられた。
unload と beforeunload イベントが定義されることとなった。
- 仕様の IDL ブロックが、来たる Web IDL 仕様に合うよう、修正された。
- テーブル・ヘッダーはヘッダーを持つことができるようになった。ユーザーエージェントは、
td 要素か th 要素を指し示す headers 属性をサポートすることが求められる。しかし、ウェブ制作者は、それらが th 要素しか指し示さないようにしなければいけない。
- 関係者は、
http-equiv に新規の値を登録できることとなった。
meta 要素が charset 属性を持つとき、それは最初の512バイト以内に現れないといけない。
StorageEvent オブジェクトに storageArea 属性が加えられることとなった。
- SVG の
foreignObject 要素の中で、HTML はどのように使われるべきかについて、定義された。
- ノーティフィケーション API が落とされた。
- どのようにしたら
HTMLDocument と Window オブジェクトの役に立つかについて、定義された。
Window オブジェクトに、ユーザーエージェントに関する情報を提供する locationbar, menubar, personalbar, scrollbars, statusbar, toolbar 属性が加えられた。
document.domain は Public Suffix List に依存することとなった。[PSL]
- 非準拠のレンダリングのセクションが追加された。廃止となった要素と準拠要素の両方を扱うユーザーエージェント・レンダリング規則を説明する。
- 非規定のセクションが追加された。Selectors や CSS ベーシック・ユーザーインタフェース・モジュールで定義されているようなセレクタが、HTML要素に一致する場合を定義している。[SELECTORS] [CSS-UI]
Web Forms 2.0 は、以前は単独の仕様だったが、最新の公開からは HTML5 に完全に統合された。forms の章では、次の点が変更された:
- XML サブミッションのサポートが削除された。
- フォーム・フィリングのサポートが削除された。
data 属性を使った select と datalist 要素のフィリングのサポートが削除された。
- フィールドの複数フォームと関連付けのサポートが削除された。しかし、
form 属性を使えば、フィールドがフォームの中に入っていなくても関連づけができる。
dispatchFormInput() と dispatchFormChange() メソッドが削除された。
- 反復テンプレートが削除された。
inputmode 属性が削除された。
- File Upload 状態にある
input 要素は、min と max 属性をサポートしないこととなった。
- File Upload 状態にある
input 要素の allow 属性は、正式なものではなくなった。
textarea の pattern と accept 属性が削除された。
- RFC 3106 は、明確にサポートしないこととなった。
submit() メソッドはサブミットするだけで、フォーム・コントロールが妥当かを見ないようになった。
- Range 状態にある
input 要素は、最小値ではなく、中間をデフォルトとすることとなった。
input 要素の size 属性は準拠となった(廃止ではない)。
object 要素がフォーム・サブミッションに加わることとなった。
input 要素の type 属性の値に color と search が加えられた。
input 要素に multiple 属性が加えられた。type 属性の値に応じて、複数の e-mail や複数のファイルを扱うことができるようになる。
input, button, form 要素に novalidate 属性が加えられた。該当のフォーム・フィールドはサブミッションにおいて妥当な値を持つことが要求されるべきではないことを指示することができるようになる。
label 要素が input を含んでいても、その label 要素がその input 要素を指し示さないのであれば、その label 要素に for 属性を使うことができる。
input 要素に indeterminate 属性が加えられた。
input 要素に placeholder 属性が加えられた。
5.6 2008年1月22日版から2008年6月10日版までの変更点
ping 属性に関する実装とオーサリングの詳細が変更された。
<meta http-equiv=content-type> が文字エンコーディングをセットする方法として準拠となった。
canvas 要素の API が整理された。テキストのサポートが追加された。
globalStorage が same-origin ポリシーに制限されることとなり、localStorage にリネームされた。関連のイベント発出が明確になった。
postMessage() API が変更された。URL ではなく、メッセージの origin だけにアクセス可能となった。ターゲットとなるドキュメントの origin を表す第2引数が必須となった。
- Drag and drop API が明確になった。
dataTransfer オブジェクトに、転送仕様としているデータのタイプを表す types 属性が加えられた。
m 要素は mark と呼ばれるようになった。
- Server-sent events が変更され、明確化された。旧来の実装に支障がでないよう、新たなフォーマットを使う。
figure 要素にキャプションが必須でなくなった。
ol 要素に、新たに reversed 属性が加えられた。
- 文字エンコーディング検知が、フィードバックに応えて、変更された。
- HTML パーサーのセクションが、実装のフィードバックを受けて、いろいろ変更された。
- 編集のセクションがいろいろ変更された。
queryCommandEnabled() の追加や関連メソッドが含まれる。
headers 属性が td 要素に加えられた。
table 要素に、新たに createTBody() メソッドが加えられた。
- MathML のサポートが、HTML パーサーのセクションに追加された。(SVG のサポートはまだ SVG WG 待ち)
- ウェブ制作者が定義できる属性が追加された。ウェブ制作者は、
data-name という形式で要素に属性を追加することができ、該当の要素の dataset[name] を使って、DOM を通してこれらにアクセスすることができる。
q 要素には引用符を入れなければならず、ブラウザは引用符をレンダリングしない、と変更された。
target 属性の値に _blank が加えられた。
showModalDialog API が追加された。
document.domain API が定義された。
source 要素に、新たに pixelratio 属性が加えられた。何かしらのエンコーディング・エラーがあるビデオに対して役に立つ。
bufferedBytes, totalBytes, bufferingThrottled DOM 属性が video 要素に追加された。
- Progress Events のセクションと整合性を合わせるため、メディアの
begin イベントが loadstart にリネームされた。
charset 属性が script に追加された。
iframe 要素に、サンドボックス機能を提供する sandbox と seamless 属性が加えられた。
ruby, rt, rp 要素がルビ注記をサポートするために追加された。
showNotification() メソッドが、ユーザーへの通知メッセージを表示するために、追加された。
beforeprint と afterprint イベントのサポートが追加された。
謝辞
The editor would like to thank Ben Millard, Cameron McCormack, Charles
McCathieNevile, Dan Connolly, David Håsäther, Dennis German,
Frank Ellermann, Frank Palinkas, Gordon P. Hemsley, Henri Sivonen, James
Graham, Jens Meiert, Jeremy Keith, Jürgen Jeka, Krijn Hoetmer, Leif
Halvard Silli, Maciej Stachowiak, Marcos Caceres, Mark Pilgrim, Martijn
Wargers, Martyn Haigh, Masataka Yakura, Michael Smith, Olivier Gendrin,
Øistein E. Andersen, Philip Taylor, Simon Pieters, Toby Inkster,
and Yngve Spjeld Landro for their contributions to this document as well
as to all the people who have contributed to HTML5 over the years for
improving the Web!
リファレンス
- [CSS-UI]
- CSS3 Basic User
Interface Module, T. Çelik. W3C.
- [DOCTYPE]
- Activating Browser
Modes with Doctype, H. Sivonen.
- [DOM2HTML]
- Document Object
Model (DOM) Level 2 HTML Specification, J. Stenback, P. Le
Hégaret, A. Le Hors. W3C.
- [HTML4]
- HTML 4.01
Specification, D. Raggett, A. Le Hors, I. Jacobs, editors.
W3C.
- [HTML5]
- HTML5, I.
Hickson. W3C.
- HTML5 (editor's draft), I. Hickson. WHATWG.
- HTML5 (editors' draft), I. Hickson. W3C.
- [PSL]
- Public Suffix
List, Mozilla Foundation.
- [SELECTORS]
- Selectors, D.
Glazman, T. Çelik, I. Hickson. W3C.
- [XHTML1]
- XHTML™ 1.1 -
Module-based XHTML (Second Edition), S. McCarron, M. Ishikawa.
W3C.
- [XML]
- Extensible Markup Language
(XML) 1.0 (Fifth Edition), T. Bray, J. Paoli, C.
Sperberg-McQueen, E. Maler, F. Yergeau. W3C.
- Namespaces in XML 1.0
(Third Edition), T. Bray, D. Hollander, A. Layman, R. Tobin,
H. S. Thompson. W3C.