SGML内容モデル

要素の内容 (DOM)

[37] 要素子供のことを、内容 (content) ともいいます。

仕様書

要素の内容の適合性

[39] 著者は、文書の適合性の要件に従って文書を制作しなければなりません。 要素においては、要素内容が、その制約に従わなければなりません。

[40] 原則として、要素内容は、適用可能な仕様書内容モデルその他の制約に従わなければなりません。

[53] role 属性が指定されている場合、その要素の制約に加えて、 役割の制約も課されます。

内容モデル

[1] 内容モデル (content model) (内容模型) とは、 要素内容に関する制約、あるいはそれを記述する方法のことを言います。

[56] 内容モデルは、基本的にその要素を定義する仕様書で規定されています。 HTML要素内容モデルHTML Standard で規定されています >>55

[6] 内容モデルの記述

[3] 既に消失した内容モデル:

[7] HTML4 から HTML5 で大きな変更がありました。

[5] HTML5 内でも に大きな変更がありました。

[57] ARIArole が明示的または暗示的に指定された要素子孫HTML要素の制約を定めています >>54

[60] ARIArole に関する規定は HTML Standard要素に関する規定を覆す道理はありませんから、 両者の制約が共に適用されると考えられます。 role の制約は多くの場合はフロー内容で、 多くのHTML要素の内容の制約もフロー内容ですから、 特に問題はありません。また語句内容テキスト空要素内容モデルを持つ HTML要素は、すべてフロー内容部分集合と考えられますから、 やはり問題はありません。 role の制約が語句内容HTML要素の制約が語句内容またはフロー内容の場合も、 問題はありません。それ以外に次のような場合があります。

[59] ARIA には role による要素のカテゴリーの規定もあります (要素のカテゴリー参照)。 これを文字通り適用すればこれらも見かけ上解決できる場合がありますが、 要素内容モデルの制約は破綻します。例えば li 要素role=presentation を指定するとフロー内容になると解釈すれば、 <ul role=list><li role=presentation> は問題ないことになります。ところが同時に <div><li role=presentation> も許されることになります。このような規則は誰も利しません。

閲覧文脈にない文書

[41] 節点節点文書閲覧文脈null なら、 文書の適合性に関する規定は適用されません。 HTML Standard

[42] 雛形内容節点文書閲覧文脈中にない時、この条項が適用されます HTML Standard。つまりほとんどの場合 template 要素の中身の内容モデル属性値の制約は適用されません。

[43] その場合であっても、 HTML構文XHTML構文の制約は適用されます HTML Standard

[44] この規定を文字通り適用すると、 Webブラウザー以外の適合検査器が意味をなさなくなってしまいます。 また、Webブラウザーが扱う閲覧文脈と切り離された文書、 例えば responseXMLnew Document文書適合性検査ができなくなってしまいます。

[62] また、雛形内容にまったく何の検査もしないとすると、 適合性検査の主要な目的である文書中のエラーを発見して著者を助けるという目的が十分に達成できない可能性があります。

[63] 例えば雛形内容a 要素がある場合、 その href 属性雛形の時点では使われることがなく、 スクリプトが設定した上で文書挿入するかもしれませんから、 href 属性がないことで直ちにこれを不適合とすると、不便です。 これが HTML Standard が適合性の規定を適用しないとする根拠と思われます。

[64] しかし、スクリプトhref 属性を設定するわけではなく、 単に著者が指定し忘れただけの可能性もあります。 そうした著者のミスを検出することが適合性検査の目的ですから、 href 属性の不存在を警告など何らかの形で表示する方が良いかもしれません。 意図的に省略している場合には、著者が設定で警告の表示を抑制できるような機能があると良いでしょう。

[65] 雛形内容は作成時は閲覧文脈を持たないのですが、 これを adopt すると閲覧文脈に属する場合があります。 特殊ケースではありますが、 template 内であるにも関わらず適合性検査の対象となる場合があります。

[66] XSLTスタイルシートでは雛形内容template 要素子孫であるものとして処理されることになっています。 するとXSLTスタイルシート適合性検査のときは、 雛形内容XSLT 仕様書の規定に従って検査するべきだということになります。

雛形内容

[35] template 要素は、通常の内容とは別に、 雛形内容を持ちます。

雛形内容参照。

[46] 普通、雛形内容内容モデル等の制約が適用されません (>>42)。

[45] 2016年7月までは template 要素においては雛形内容要素内容であると定められていました。

影木

[36] 要素影木attach されている場合、 通常の内容とは別に、影木を持ちます。通常の内容も、 スロットの割り当て関係を持つことがあります。

影木スロットを参照。

[51] 普通、影木光木と同じ節点文書に属しますから、 内容モデル等の制約は等しく適用されます。

歴史

[61] HTML における内容モデルの種別の歴史は、 要素の分類を参照。

SGML / XML

[25] HTML でも内容モデルという語が使われています。語源としては XMLSGML内容モデルに由来していますが、 HTMLDTD を採用しておらず、実態は大きく異なっています。

[9]

文書の中で要素開始タグ終了タグとの間に出現する文字。 Content。

備考1. その文字は、データ, 真の部分要素, 天下部分要素, その他のマーク又はこれらが混在したものとして解釈される。

備考2. 要素が明示内容参照又はその宣言済み内容EMPTY ならば、内容はである。 その場合、応用自身が内容のデータを生成してもよい。 (JISX4151‐1992 定義 (189))

[10] JIS X 4151‐1992 6.6 に詳しい定義があります。

[8] では、マーク区間の「内容」とは何か? →マーク区間 (>>11)参照。

[14] SGMLXML における内容モデル (content model) は、 要素内容についての制約を記述する要素宣言引数(群)です。

[22]

内容モデル (content model)
許容できる要素内容を定義するモデル群及び例外を指定する要素宣言引数。 (JIS X 4151‐1992 3. (192))

[13]

ある型の要素について、 出現可能な子要素・子文字データの種類とその順序を規定する単純な文法。 (<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> を参照。)

[16] 要素内容モデル:

  • children = (choice / seq) [ occur ] ;; [47]
  • cp = (child-type / choice / seq) [ occur ] ;; [48]
  • choice = "(" [ S ] cp 1*( [ S ] "|" [ S ] cp) [ S ] ")" ;; [49]
  • seq = "(" [ S ] *( [ S ] "," [ S ] cp) [ S ] ")" ;; [50]
  • occur = "?" / "*" / "+"
  • child-type = Name ;; 子要素型名

[24] 混合内容モデル:

  • Mixed = "(" [S] '#PCDATA' *([S] "|" [S] child-type) [S] ")" "*" / "(" [S] '#PCDATA' [S] ")"

[15] SGML ではモデル群例外のことを内容モデルと呼んでいるようです。 CDATA などのキーワード内容モデルと呼ばないようですが、 ANY内容モデルと呼ばれることもあり、 その指す範囲は必ずしも明確ではありません。

[20] XML では、要素内容におけるモデル群のことを内容モデルと定義しています >>122EMPTY などのキーワード混合内容におけるモデル群はこの定義から除外されています。

[21] 一般的には、内容モデルという語の指す範囲は文脈にも依存しますが、 要素内容でも混合内容でもモデル群を総称して内容モデルと呼ぶことが多いようです。 キーワードをも内容モデルに含めることもよくあります。

  1. |
    1. キーワード
    2. モデル群
  2. ?
    1. +
      1. ps
    2. 例外

[26] (広義の)内容モデルとして利用できるキーワードには、 次のものがあります。

[27] XML で利用できるのは、 EMPTYANY だけです >>122

[28] SGML内容モデルでは、 ANY の場合とモデル群の場合に、例外をも指定できます。それ以外のキーワードの時には、 指定できません。

例外を参照。

[29] XML では例外は指定できません。

[30] 非構文的制約:

  • [104] [決定的内容モデル] ある要素が内容モデル中の複数の要素型の指定に該当しうる時、互換性のため、これを誤りとする。 (決定的内容モデル, SGML の言葉では曖昧でない内容モデル。)
  • [105] [群・引数実体が適当に入れ子になっていること] 開き括弧と閉じ括弧は同じ実体置換文中になければなりません。 (妥当性制約)
  • [106] [引数実体中の群の完全性] 相互運用性のため、 引数実体の置換文は1つ以上の非空白文字を含むべきです。 また、その最初及び最後の非空白文字は接続子 (| / ,) ではないべきです。
  • [31] [要素型の重複がないこと] 混合内容モデルでは、1つの要素型は1度しか出現しては行けません。 (妥当性制約)

[32] >>104 に反する例:

  • ( (b , c) | (b , d) ) (正 ( b , ( c | d ) ) )
  • [11] 2003-09-29 02:10:01 +00:00 aaa: aaa

[33] >>105 に反する例:

  • ( %model;

[34] >>106 に反する例:

  • <!ENTITY % model " ">; ( %model; foo )
  • <!ENTITY % model " bar | ">; ( %model; foo )
  • <!ENTITY % con " | ">; ( bar %con; foo )

[2] SGMLXML における内容モデルの分類:

[19]

内容模型 (content model)
ある要素型実現値中で認められると宣言されたマーク構造。 XML 1.0要素内容だけを含む (文字データなしの) 要素混合内容 (文字データに加えて子要素を散在させられる要素) の2種類に分けています。後者は内容の規定が #PCDATA (文字データを表します。) で始まります。 XHTML m12n Term、>>151

[114] 要素字句とパラメタ実体参照 - 2003年12月 - マーク付けノート <http://www.satoshii.org/markup/notes/2003/12#date12-3>

[115] >>114 は、 <!ENTITY % foo "foo"> <!ELEMENT bar (%foo;+)> のように出現標識が別の実体に分断されていてはいけないという話。

[17] >>114-115

直接内容モデルに %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> に違反します。 ですから非整形式になります。


[52] バリエーションのようなものとして、 HyTimeHyLex を規定していました。

WF2

[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>