[39] 著者は、文書の適合性の要件に従って文書を制作しなければなりません。 要素においては、要素の内容が、その制約に従わなければなりません。
[1] 内容モデル (内容模型) とは、 要素の内容に関する制約、あるいはそれを記述する方法のことを言います。
[56] 内容モデルは、基本的にその要素を定義する仕様書で規定されています。 HTML要素の内容モデルは HTML Standard で規定されています >>55。
[57] ARIA は role
が明示的または暗示的に指定された要素の子孫の
HTML要素の制約を定めています >>54。
[60] ARIA の role
に関する規定は HTML Standard
の要素に関する規定を覆す道理はありませんから、
両者の制約が共に適用されると考えられます。 role
の制約は多くの場合はフロー内容で、
多くのHTML要素の内容の制約もフロー内容ですから、
特に問題はありません。また語句内容やテキストや空要素の内容モデルを持つ
HTML要素は、すべてフロー内容の部分集合と考えられますから、
やはり問題はありません。 role
の制約が語句内容でHTML要素の制約が語句内容またはフロー内容の場合も、
問題はありません。それ以外に次のような場合があります。
role
がフロー内容を求めるため、
両方の制約を満たす要素はなくなります。<tr role=row>
<table role=table>
<tbody role=row>
(または thead
, tfoot
)<ul role=list>
(または ol
, dl
, menu
) 他幾つかの role
<select role=listbox>
他幾つかの role
<datalist role=listbox>
<optgroup role=group>
<svg role=document>
他幾つかの role
(ARIA の当該規定は HTML要素のみ適用されると考えれば問題なしだが...))<math role=math>
(ARIA の当該規定は HTML要素のみ適用されると考えれば問題なしだが...))figure
要素に role=figure
, role=presentation
が指定された場合、フロー内容であることが求められますが、
figcaption
がフロー内容ではないため、使えないことになります。details
要素に role=group
が指定された場合、フロー内容であることが求められますが、
summary
がフロー内容ではないため、使えないことになります。fieldset
要素に role=group
, role=presentation
が指定された場合、フロー内容であることが求められますが、
legend
がフロー内容ではないため、使えないことになります。video
要素や audio
要素に role=application
が指定された場合、フロー内容であることが求められますが、
source
や track
がフロー内容ではないため、使えないことになります。object
要素に role=document
他幾つかの role
が指定された場合、フロー内容であることが求められますが、
param
がフロー内容ではないため、使えないことになります。div
要素に role=list
他幾つかの role
が指定された場合で、 dl
要素で使われている場合、
dt
も dd
もフロー内容ではないため、使えないことになります。ruby
要素に role=list
他幾つかの role
が指定された場合、フロー内容であることが求められますが、
rt
, rp
がフロー内容ではないため、使えないことになります。[41] 節点の節点文書の閲覧文脈が null なら、 文書の適合性に関する規定は適用されません。 HTML Standard
[43] その場合であっても、 HTML構文やXHTML構文の制約は適用されます HTML Standard。
[44] この規定を文字通り適用すると、
Webブラウザー以外の適合検査器が意味をなさなくなってしまいます。
また、Webブラウザーが扱う閲覧文脈と切り離された文書、
例えば responseXML
や new Document
の文書の適合性検査ができなくなってしまいます。
[62] また、雛形内容にまったく何の検査もしないとすると、 適合性検査の主要な目的である文書中のエラーを発見して著者を助けるという目的が十分に達成できない可能性があります。
[63] 例えば雛形内容に a
要素がある場合、
その href
属性は雛形の時点では使われることがなく、
スクリプトが設定した上で文書に挿入するかもしれませんから、
href
属性がないことで直ちにこれを不適合とすると、不便です。
これが HTML Standard が適合性の規定を適用しないとする根拠と思われます。
[64] しかし、スクリプトが href
属性を設定するわけではなく、
単に著者が指定し忘れただけの可能性もあります。
そうした著者のミスを検出することが適合性検査の目的ですから、
href
属性の不存在を警告など何らかの形で表示する方が良いかもしれません。
意図的に省略している場合には、著者が設定で警告の表示を抑制できるような機能があると良いでしょう。
[65] 雛形内容は作成時は閲覧文脈を持たないのですが、
これを adopt すると閲覧文脈に属する場合があります。
特殊ケースではありますが、 template
内であるにも関わらず適合性検査の対象となる場合があります。
[66] XSLTスタイルシートでは雛形内容が template
要素の子孫であるものとして処理されることになっています。
するとXSLTスタイルシートの適合性検査のときは、
雛形内容を XSLT 仕様書の規定に従って検査するべきだということになります。
[35] template
要素は、通常の内容とは別に、
雛形内容を持ちます。
[36] 要素に影木が attach されている場合、 通常の内容とは別に、影木を持ちます。通常の内容も、 スロットの割り当て関係を持つことがあります。
[61] HTML における内容モデルの種別の歴史は、 要素の分類を参照。
[25] HTML でも内容モデルという語が使われています。語源としては XML や SGML の内容モデルに由来していますが、 HTML は DTD を採用しておらず、実態は大きく異なっています。
文書の中で要素の開始タグと終了タグとの間に出現する文字。 Content。
備考1. その文字は、データ, 真の部分要素, 天下部分要素, その他のマーク又はこれらが混在したものとして解釈される。
備考2. 要素が明示内容参照又はその宣言済み内容が
EMPTY
ならば、内容は空である。 その場合、応用自身が内容のデータを生成してもよい。 (JISX4151‐1992 定義 (189))
[10] JIS X 4151‐1992 6.6 に詳しい定義があります。
内容 := [ 混合内容 / 要素内容 / 置換可能文字データ / 文字データ ] ;; (24)
混合内容 := *(データ文字 / 要素 / 他の内容) ;; (25)
要素内容 := *(要素 / 他の内容 / s) ;; (26)
他の内容 := 注釈宣言 / 短縮参照使用宣言 / 連結集合使用宣言 / 処理指令 / shortref
/ 文字参照 / 一般実体参照 / マーク区間宣言 / Ee ;; (27)
[8] では、マーク区間の「内容」とは何か? →マーク区間 (>>11)参照。
[14] SGML や XML における内容モデルは、 要素の内容についての制約を記述する要素宣言の引数(群)です。
ある型の要素について、 出現可能な子要素・子文字データの種類とその順序を規定する単純な文法。 (<http://www.w3.org/TR/REC-xml#dt-content-model>, <http://www.w3.org/TR/REC-xml#sec-mixed-content>, <http://www.w3.org/TR/REC-xml#determinism> を参照。)
[15] SGML ではモデル群と例外のことを内容モデルと呼んでいるようです。
CDATA
などのキーワードは内容モデルと呼ばないようですが、
ANY
は内容モデルと呼ばれることもあり、
その指す範囲は必ずしも明確ではありません。
[20] XML では、要素内容におけるモデル群のことを内容モデルと定義しています
>>122。 EMPTY
などのキーワードや混合内容におけるモデル群はこの定義から除外されています。
[21] 一般的には、内容モデルという語の指す範囲は文脈にも依存しますが、 要素内容でも混合内容でもモデル群を総称して内容モデルと呼ぶことが多いようです。 キーワードをも内容モデルに含めることもよくあります。
[26] (広義の)内容モデルとして利用できるキーワードには、 次のものがあります。
[27] XML で利用できるのは、 EMPTY
と
ANY
だけです >>122。
[28] SGML の内容モデルでは、 ANY
の場合とモデル群の場合に、例外をも指定できます。それ以外のキーワードの時には、
指定できません。
[30] 非構文的制約:
|
/ ,
)
ではないべきです。[114] 要素字句とパラメタ実体参照 - 2003年12月 - マーク付けノート <http://www.satoshii.org/markup/notes/2003/12#date12-3>
[115] >>114 は、 <!ENTITY % foo "foo"> <!ELEMENT bar (%foo;+)> のように出現標識が別の実体に分断されていてはいけないという話。
直接内容モデルに
%baz.qname;+
と記述すればエラーになることに注意して下さい。ちなみに、XML にはこの辺りの規則についての明確な記述はありません。 何らかのエラーになるのは間違いありませんが、invalid なのか not well-formed なのかも判然としない状態です。
という話の答えが今更ながら判った気がするので書いてみます。
When a parameter-entity reference is recognized in the DTD and included, its replacement text MUST be enlarged by the attachment of one leading and one following space (#x20) character; the intent is to constrain the replacement text of parameter entities to contain an integral number of grammatical tokens in the DTD. (XML 4.4.8 Included as PE <http://www.w3.org/TR/REC-xml/#as-PE>, <http://www.w3.org/TR/xml11/#as-PE>)
という規定 (XML にだけあって SGML にはない。) に従えば、 %baz.qname;+ は引数実体参照を展開すると baz + のようになります。
これは 48 番の生成規則 <http://www.w3.org/TR/REC-xml/#NT-cp> に違反します。 ですから非整形式になります。
[4] XBL 2.0 ( ( 版)) <http://dev.w3.org/2006/xbl2/Overview.html#xbl-elements>
[38] Allow anything in <template> for document conformance (zcorpan著, ) <https://github.com/whatwg/html/commit/950d3015bead974bec1d7d86c00d641655ea0b66>
role
属性が指定されている場合、その要素の制約に加えて、 役割の制約も課されます。