要素の分類

カテゴリー (要素)

[1] 要素は、カテゴリー (category) >>4 に属すると定義されることがあります。 複数のカテゴリーに属することもあります。

仕様書

一覧

[2] 要素のカテゴリー

[5] どのカテゴリーに属するかは、要素名前空間局所名のみならず、 属性値祖先子孫にも影響されます。

[6] 要素のみならず、テキストもいくつかのカテゴリーには属しています。

[8] ここに示した要素のカテゴリーは、 HTML Standard で定義されています。 どの要素がどのカテゴリーに属するかも、 HTML Standard で定義されていますし、他の仕様書が定義する場合もあります。 (それぞれの項を参照。)

[10] ARIArole 属性値に基づく HTML要素カテゴリーを追加で規定しています >>4

[11] これはおおむね HTML Standard による要素のカテゴリーにより定められる内容モデルの制約と矛盾しませんが、 本来フロー内容ではない次の要素が、 role 属性値次第でフロー内容とみなされ得ることになります。 ARIA の規定をそのまま文字通り採用すると内容モデルの検査は破綻します。

同じく role=heading見出し内容となることになっていますが、 そのまま従うと summary 要素hgroup 要素内容モデルの検査に影響がありますし、 outline algorithm の動作まで変わってしまいます。

内容モデルも参照。

[12] 現実的には、本来の要素の制約を更に厳しく限定する場合のみ role 属性値による分類を適用するべきでしょう。

文脈

[3] 内容モデルの記述に使われます。具体例やその他の用法は、各カテゴリーの項を参照。

歴史

[13] 内容モデルの概念の歴史は内容モデルを参照。

SGML 時代

[14] HTMLSGML であると信じられていた時代、 HTMLSGML DTD内容モデルの記述では、 便宜のため似たような制約を持つ要素型引数実体としてまとめられていました。 %inline%flow のような分類はここから生まれていきました。

[15] HTML4行内要素ブロック水準要素といった仕様書本文の用語としてもこの分類を活用し、 各要素の制約を規定していました。

[16] 以前から DTD 内の引数実体として存在していた「厳密」モードと非「厳密」モードの違いは、 HTML4 により厳密DTD移行用DTDとして明確に区別されるようになりました。 両者の大きな違いの1つとして、各要素内容モデルの違いがありました。 特に移行用DTD%flow子供として認めていた要素の多くが厳密DTD では %block のみしか認められない (%inline が認められない) 点が際立っていました。

HTML5 時代前期

[17] 当初の HTML5 (Web Applications 1.0) は、 HTML4XHTML 1.0厳密DTDXHTML 1.1 の流れを汲んだ、比較的厳格な内容モデルの制約を定めていました。 HTML4 が曖昧だった点を明確化したり、 SGML DTD の技術的制約のため記述できなかった細部を改めたりといった変更を加え、 どちらかといえばより厳格化する方向の規定が含まれていました。

HTML5 時代後期以降

[18] その後の HTML5 の改訂により、 要素の分類内容モデルの規定は大きく改められました。 この変更は、 厳しい基準を設けて世の中の大量の文書著者に変更を強いる (そして無視される) という10年以上続いてきた HTML の標準化の方針を転換し、 特別有害と考えられる場合を除き制約を緩和するもので、 HTML4移行用DTDと比較しても更に緩い制限しか課さないものでした。 この方針は現在の HTML Standard にも引き継がれています。