公開
2001-07-14
最終改訂
2002-04-29

HTML 4.01 FramesetのDOCTYPE宣言はどの文書に書くものなの?

フレーム對應のブラウザに、ウェブサイトをフレーム表示するやう指示する文書でのみ、HTML 4.01 FramesetのDOCTYPE宣言を記述すれば大丈夫です。XHTMLの場合は、HTML 4.01 Framesetの代りにXHTML 1.0 Framesetを記述します。(以下、HTMLの場合について、解説します。XHTMLの場合は適宜、讀み替へて下さい)

「フレームの中に表示される文書」とは何か

「フレームを使つてゐるサイト」の中のコンテンツだから、とにかく全ての文書で「Frameset」のDOCTYPE宣言を記述しておけば良いや、と考へてはなりません。

フレームの中に表示される文書でもHTML 4.01 FramesetのDOCTYPE宣言を記述してゐなければならないのではないか、と考へる人がゐます。それは誤りです。フレームの中に表示されるHTML文書のヴァージョンは不定です。

良く考へて貰ひたいのですが、「フレームの中に表示される文書」と云ふのは、單にウェブ制作者のあなたの頭の中でのみ「フレームの中に表示される文書」であるだけでしかありません。檢索エンジンのロボットは、「フレームの中に表示される文書」であつても、他の個々のHTML文書と對等に扱ひます。URIを直接指定された「フレームの中に表示される文書」は、フレームなしで、それ自體、單獨でブラウザに表示されます。

フレームの中に表示される文書は、自分の制作した文書でない可能性があります。餘所のサイトの文書をフレームの中に表示して、自分のサイトの一部に見せかけるのは、「マナー違反」だと言はれますが、技術的には全く問題なく出來る事です。餘所のサイトの文書ですから、どんな文書であるか、わかつたものではありません。XHTMLの文書である事もありますし、HTML 2.xの文書である事もあり得ます。或は、HTML 4.01 Framesetを宣言してゐる文書を讀込んだ場合、ブラウザは、フレームの中にフレームを表示するでせう。

そもそもフレームは、複數の文書を一つのウィンドウに表示しようと云ふものです。その、まとめて表示させる爲の指定に必要な文書でのみ、frameset要素は記述されるものであり、HTML 4.01 Framesetは宣言されるべきものです。

仕樣

HTML 4.01 Frameset

HTML 4.01 Framesetの文書では、html要素の直下にframeset要素を記述出來ます。このframeset要素の直下には、frameset要素、frame要素、noframes要素を記述出來ます。それ以外の一切の要素は、frameset要素の直下に記述してゐてはなりません。

frame要素
空要素。フレームの内容や表示などに關する設定をします。
noframes要素
frameset要素の中に配置されたnoframes要素の中身には、フレーム非對應の、或はフレーム機能の使用を停止されてゐるブラウザでその文書がロードされた場合に表示されるべき内容が記述されてゐなければなりません。
サーチエンジンによつては、檢索結果に文書の内容の一部を表示するものもあります。framesetのベースに當るHTML文書の場合、noframesの中身が屡々利用されます。
frameset要素の中に配置されたnoframes要素の中身は、body要素になります。屡々noframes要素の直下にブロック要素やインライン要素が記述されてゐますが、HTMLの場合、body要素の開始タグ・終了タグは記述を省略出來る、と云ふだけの事に過ぎません。frameset要素の中のnoframes要素の中身は飽くまでbody要素である、と云ふ事に注意して下さい。
HTML 4.01 Framesetの場合には、noframesの中に再びnoframesを記述してはならない事になつてゐます。XHTML 1.0 Framesetの場合には、noframes要素は一つの文書に一囘しか出現出來ない事になつてゐます。

HTML 4.01 Transitional

framset要素の記述は禁止
HTML 4.01 Transitionalの文書では、html要素、body要素の直下に、frameset要素を記述してゐてはならない事になつてゐます。
よくHTML 4.01 TransitionalのDOCTYPE宣言をしてゐるにもかかはらず、frameset要素を記述してゐる文書を見かけます。しかし、ブラウザが制作者のDOCTYPE宣言を信用しない爲にフレームとして扱はれてゐるだけなので、注意して下さい。
noframes要素はbodyの中身に出現可能
HTML 4.01 Transitionalの文書の場合、body要素の中にnoframes要素を記述出來ます
この場合のnoframesの中身は、HTML 4.01 Transitionalでbody要素の中身に出現可能な要素全てとなります。既にbodyの中身になつてゐるので、HTML 4.01 Transitionalのnoframes要素の中に再びbody要素を記述する事は出來ません
フレームの中に表示される事を制作者が意圖して記述された文書であるにもかかはらず、その文書がフレームとしてではなく個別の文書として、ブラウザや檢索エンジンのロボット等のUser Agentに扱はれる事は、屡々あります。また、フレームに對應してゐないブラウザに單獨で表示される事があります。その場合、body要素の中に記述されたnoframes要素の中身をブラウザは表示して、閲覽の助けとします(仕樣では)。
逆に、フレームの中にその文書を表示する時には、全うなフレーム對應のブラウザならば、body要素の中のnoframes要素を隱して呉れます。