body 要素の内容モデルの実現のメカニズム

構造モジュールにおける body 要素の内容モデル %body.content の定義は次のようになっています:

<!ENTITY % body.content "( %Block.mix; )+" >

XHTML 1.1 DTD ドライバで取り込む内容モデルモジュールでは、 %Block.mix; は次のように定義されています:

<!ENTITY % Block.mix
     "%Heading.class;
      | %List.class;
      | %Block.class;
      %Misc.class;"
>

一般的に、接尾辞 .mix を持つパラメタ実体は、異なるクラスに属する要素の集合であり、雑多なな要素の集合を意味します。要素の秩序的な集合である接尾辞 .class を持つパラメタ実体は次のように展開されます:

<!ENTITY % Heading.class
     "%h1.qname; | %h2.qname; | %h3.qname;
      | %h4.qname; | %h5.qname; | %h6.qname;" >
<!ENTITY % List.class "%ul.qname; | %ol.qname; | %dl.qname;" >
<!ENTITY % Block.class
     "%BlkStruct.class;
      %BlkPhras.class;
      %BlkPres.class;
      %BlkSpecial.class;
      %Block.extra;"
>
<!ENTITY % Misc.class
     "%Edit.class;
      %Script.class;
      %Misc.extra;"
>

接尾辞 .qname とあるのは、要素名そのものと置き換えができます。

更に %Block.class 内のパラメタ実体を展開すると:

<!ENTITY % BlkStruct.class "%p.qname; | %div.qname;" >
<!ENTITY % BlkPhras.class
     "| %pre.qname; | %blockquote.qname; | %address.qname;" >
<!ENTITY % BlkPres.class "| %hr.qname;" >
<!ENTITY % BlkSpecial.class
     "%Table.class;
      %Form.class;
      %Fieldset.class;"
>
<!ENTITY % Block.extra "" >

更に展開して、次のようになります:

<!ENTITY % Table.class "| %table.qname;" >
<!ENTITY % Form.class  "| %form.qname;" >
<!ENTITY % Fieldset.class  "| %fieldset.qname;" >

一方、 %Misc.class; は次のように展開されます:

<!ENTITY % Edit.class "| %ins.qname; | %del.qname;" >
<!ENTITY % Script.class "| %script.qname; | %noscript.qname;" >
<!ENTITY % Misc.extra "" >

Copyright © 2001, SUGAI, Manabu. All rights reserved. 著作権は放棄していません。
FC2> ƒ‚ƒrƒbƒg