[1] 要素は、カテゴリー >>4 に属すると定義されることがあります。 複数のカテゴリーに属することもあります。
[5] どのカテゴリーに属するかは、要素の名前空間と局所名のみならず、 属性値や祖先、子孫にも影響されます。
[6] 要素のみならず、テキストもいくつかのカテゴリーには属しています。
[8] ここに示した要素のカテゴリーは、 HTML Standard で定義されています。 どの要素がどのカテゴリーに属するかも、 HTML Standard で定義されていますし、他の仕様書が定義する場合もあります。 (それぞれの項を参照。)
[10] ARIA は role
属性値に基づく
HTML要素のカテゴリーを追加で規定しています >>4。
[11] これはおおむね HTML Standard による要素のカテゴリーにより定められる内容モデルの制約と矛盾しませんが、
本来フロー内容ではない次の要素が、 role
属性値次第でフロー内容とみなされ得ることになります。
ARIA の規定をそのまま文字通り採用すると内容モデルの検査は破綻します。
同じく role=heading
も見出し内容となることになっていますが、
そのまま従うと summary
要素や hgroup
要素の内容モデルの検査に影響がありますし、
outline algorithm の動作まで変わってしまいます。
[14] HTML が SGML であると信じられていた時代、
HTML の SGML DTD の内容モデルの記述では、
便宜のため似たような制約を持つ要素型が引数実体としてまとめられていました。
%inline
や %flow
のような分類はここから生まれていきました。
[15] HTML4 は行内要素やブロック水準要素といった仕様書本文の用語としてもこの分類を活用し、 各要素の制約を規定していました。
[16] 以前から DTD 内の引数実体として存在していた「厳密」モードと非「厳密」モードの違いは、
HTML4 により厳密DTDと移行用DTDとして明確に区別されるようになりました。
両者の大きな違いの1つとして、各要素の内容モデルの違いがありました。
特に移行用DTDで %flow
を子供として認めていた要素の多くが厳密DTD
では %block
のみしか認められない (%inline
が認められない)
点が際立っていました。
[17] 当初の HTML5 (Web Applications 1.0) は、 HTML4 や XHTML 1.0 の厳密DTDや XHTML 1.1 の流れを汲んだ、比較的厳格な内容モデルの制約を定めていました。 HTML4 が曖昧だった点を明確化したり、 SGML DTD の技術的制約のため記述できなかった細部を改めたりといった変更を加え、 どちらかといえばより厳格化する方向の規定が含まれていました。
[18] その後の HTML5 の改訂により、 要素の分類と内容モデルの規定は大きく改められました。 この変更は、 厳しい基準を設けて世の中の大量の文書と著者に変更を強いる (そして無視される) という10年以上続いてきた HTML の標準化の方針を転換し、 特別有害と考えられる場合を除き制約を緩和するもので、 HTML4 の移行用DTDと比較しても更に緩い制限しか課さないものでした。 この方針は現在の HTML Standard にも引き継がれています。