フレームセットの場合は、 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML Frameset//EN"> と宣言するとなっています。これは、以下のような記載になっています。
<!ENTITY % HTML.Frameset "INCLUDE"> <!ENTITY % HTML4.dtd PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> %HTML4.dtd;
<!ENTITY % HTML4.dtd PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
に、%HTML.FramesetをINCLUDEと宣言し、マーク区分で%HTML.Framesetを使います。
以下のコメントが記載されています。
%HTML.Framesetとは、をDTDでみましょう。
<!--
これはHTML 4.0フレームセット用DTD(HTML 4.0 Frameset DTD)で、フ
レームのある文書の場合に使います。このDTDは、"HTML"要素の内容モ
デルがframeset文書で、"BODY"要素が"FRAMESET"要素に置き換わること
以外はHTML 4.0 Transitional DTDと同じです。
-->
マーク部分(区分)の見方は、 <![ INCLUDE [*****************************************]]> *****************************************を無視しないで、文書の一部として 解釈する。 <![%HTML.Frameset; [*****************************************]]> は、<!ENTITY % HTML.Frameset "INCLUDE">と宣言されているので、 <![ INCLUDE [*****************************************]]> ということになります。 <![ %HTML.Frameset; [<!ENTITY % html.content "HEAD, FRAMESET">]]> <!ENTITY % html.content "HEAD, BODY"> %HTML.Frameset;なら(マーク区分でのINCLUDEと同じで補足説明になっています)、 <!ENTITY % html.content "HEAD, FRAMESET">で、HEADに続いてFRAMESETです。 Transitionalでは(このDTDはTransitionalのDTDですので)、 <!ENTITY % html.content "HEAD, BODY">で、HEADに続いてBODYです です。
<!ENTITY % HTML4.dtd PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> では、 <!--================ Document Structure ==================================--> <!ENTITY % version "version CDATA #FIXED '%HTML.Version;'"> <![ %HTML.Frameset; [ <!ENTITY % html.content "HEAD, FRAMESET"> ]]> <!ENTITY % html.content "HEAD, BODY"> <!ELEMENT HTML O O (%html.content;) -- document root element --> <!ATTLIST HTML %i18n; -- lang, dir -- %version; >
<!ENTITY % HTML4.dtd PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
では、
<!--================== Document Frames ===================================-->
<!--
HTML文書の内容モデルは、HEADに続いてFRAMESET要素がくるのかBODY要素が
くるのかで、ことなります。
BODY開始タグの省略が広く行き渡っていますが、マークセクションが使用さ
れていないと内容モデルを定義するのに実際上こまります。
-->
<!-- Feature Switch for frameset documents -->
<!-- frameset文書への切り替え-->
<!ENTITY % HTML.Frameset "IGNORE">
<!ENTITY % HTML.Framesetは、transitionalでは無視します。>
%HTML.Framesetであれば、マーク部分で補足説明
==================================================
<![ %HTML.Frameset; [
<!ELEMENT FRAMESET - - ((FRAMESET|FRAME)+ & NOFRAMES?) -- window subdivision-->
<!ATTLIST FRAMESET
%coreattrs; -- id, class, style, title --
rows %MultiLengths; #IMPLIED -- list of lengths,
default: 100% (1 row) --
cols %MultiLengths; #IMPLIED -- list of lengths,
default: 100% (1 col) --
onload %Script; #IMPLIED -- all the frames have been loaded --
onunload %Script; #IMPLIED -- all the frames have been removed --
>
]]>
%HTML.Framesetであれば、マーク部分で補足説明
==========================================
<![ %HTML.Frameset; [
<!-- reserved frame names start with "_" otherwise starts with letter -->
<!ELEMENT FRAME - O EMPTY -- subwindow -->
<!ATTLIST FRAME
%coreattrs; -- id, class, style, title --
longdesc %URI; #IMPLIED -- link to long description
(complements title) --
name CDATA #IMPLIED -- name of frame for targetting --
src %URI; #IMPLIED -- source of frame content --
frameborder (1|0) 1 -- request frame borders? --
marginwidth %Pixels; #IMPLIED -- margin widths in pixels --
marginheight %Pixels; #IMPLIED -- margin height in pixels --
noresize (noresize) #IMPLIED -- allow users to resize frames? --
scrolling (yes|no|auto) auto -- scrollbar or none --
>
]]>
%HTML.Framesetであれば、の条件終。
=================================
<!ELEMENT IFRAME - - (%flow;)* -- inline subwindow -->
<!ATTLIST IFRAME
%coreattrs; -- id, class, style, title --
longdesc %URI; #IMPLIED -- link to long description
(complements title) --
name CDATA #IMPLIED -- name of frame for targetting --
src %URI; #IMPLIED -- source of frame content --
frameborder (1|0) 1 -- request frame borders? --
marginwidth %Pixels; #IMPLIED -- margin widths in pixels --
marginheight %Pixels; #IMPLIED -- margin height in pixels --
scrolling (yes|no|auto) auto -- scrollbar or none --
align %IAlign; #IMPLIED -- vertical or horizontal alignment --
height %Length; #IMPLIED -- frame height --
width %Length; #IMPLIED -- frame width --
>
%HTML.Framesetであれば、マーク部分で補足説明
==========================================
<![ %HTML.Frameset; [
<!ENTITY % noframes.content "(BODY) -(NOFRAMES)">
]]>
つまり、NOFRAMESの内容がBODYでNOFRAMESの入れ子はできません。 前述の様に、BODYは省略しないこと。
<!ENTITY % noframes.content "(%flow;)*"> transitionalでは(transitionalのDTDですので)、%flow;ということです
<!ELEMENT NOFRAMES - - %noframes.content; -- alternate content container for non frame-based rendering --> <!ATTLIST NOFRAMES %attrs; -- %coreattrs, %i18n, %events -- >
<!ELEMENT NOFRAMES - - %noframes.content; -- alternate content container for non frame-based rendering -->
となっていても、条件によって、%noframes.contentの意味が異なってきています。