#?SuikaWiki/0.9 * head 要素型 (HTML, XHTML 1) [3] [CODE(HTMLe)[head]] 要素は、[[文書]]の[[内容]]とはみなされない文書に関する情報 ([[メタ情報]]) を記述するのに使います。 仕様書: [HTML 4] [4] [[UA]] は通常この要素の内容を[[レンダリング]]しませんが、何らかの手段で[[利用者]]にその情報を提示しても構わないと HTML 4 仕様書は言っています。 メタ情報の重要性が説かれる現在では、 汎用 UA はむしろその手段を必ず用意する'''べき'''でしょう。 [5] :[[開始タグ]] (HTML 4):省略可能 :開始タグ (XHTML):必須 :[[終了タグ]] (HTML 4):省略可能 :終了タグ (XHTML):必須 :[[内容模型]]:[CODE(SGML)[([CODE(HTMLe)[[[title]]]] & [CODE(HTMLe)[[[base]]]]?) +([VAR[%[[head.misc]]]])]] :出現できる文脈:[CODE(HTMLe)[[[html]]]] 第1子要素 :[[属性]]: ,属性名 ,属性値型 ,既定値 ,意味 ,出典 ,[CODE(HTMLa)[[[lang]]]] ,[[言語札]] ,(継承) ,[[自然言語]] ,"[HTML4], [XHTML1]" ,[CODE(HTMLa)[[[xml]]:lang]] ,言語札 ,(継承) ,自然言語 ,[XHTML1] ,[CODE(HTMLa)[[[profile]]]] ,[CODE(ABNF)[[[URI参照]] *([[空白]] URI参照)]] ,(なし) ,メタ情報の辞書 ,"[HTML4], [XHTML1]" [[#comment]] ** 内容模型 [6] HTML 4 では、内容模型に[[添加要素指定]]が使われていて少々分かりにくくなっていますが、 その主張は簡単なことで、[Q[すべての要素の出現順序は無制限。 [CODE(HTMLe)[[[title]]]] は丁度1つ必要。 [CODE(HTMLe)[[[base]]]] は高々1つ必要。他は任意個 OK。]]です。 ただし、 DTD に現れない仕様書本文での制限で、 [CODE(HTMLa)[[[http-equiv]]]] が [CODE(HTTP)[[[Content-Type]]]] の [CODE(HTMLe)[[[meta]]]] を使う時は可能な限りはじめの方にいれることになっています。 [7] 古い時代の DTD 案では、 [CODE(HTMLe)[title]] が必須でなかったこともありました。 実際の文書では今でも [CODE(HTMLe)[title]] が欠けていることがしばしばあります。 また、 [CODE(HTMLe)[base]] が ([CODE(HTMLa)[[[href]]]] と [CODE(HTMLa)[[[target]]]] などで) 複数あることもたまにあります。 [[#comment]] ** 歴史 [8] 一番初めの [[SGML]] もどきな頃の HTML に [CODE(HTMLe)[head]] 要素型はありませんでした。 その後 SGML 的形式を整えるに当たって、 本文そのものではない [CODE(HTMLe)[title]] 要素を収納する要素が考えられました。 [[Dan Conolly]] は、新しい要素型の導入にあたって、 次のようなことを言っています。 > [CODE(HTMLe)[document]] は文書の「本体」 のほとんどを含みます。これで[[混合内容]]の問題を解決できます。 この要素を [CODE(HTMLe)[body]] という名前にして、 [CODE(HTMLe)[title]] や [CODE(HTMLe)[nextid]] や [CODE(HTMLe)[isindex]] を囲む省略可能な [CODE(HTMLe)[header]] を導入することもできます。 [INS[(1992年11月19日 )]] 混合内容の問題と言うのは、後に [CODE(HTMLe)[[[fieldset]]]] などでもかかわることになる、ある意味で因縁の問題です。 当時の HTML の書式を素直に記述すると、 [CODE(SGML)[((TITLE? & ISINDEX?), (H1|H2|DL|OL|XMP|#PCDATA)+)]] になります。ところが、これは[[混合内容]]になってしまいます。 SGML の仕様上、 [CODE(HTMLe)[title]] 要素や [CODE(HTMLe)[isindex]] 要素の前に [CODE(SGML)[[[s]]]] を入れることができなくなってしまうのです。 これへの対策はタグが省略可能なダミーの要素を [CODE(SGML)[PCDATA]] が含まれる部分に入れるのが定石で、 それを Dan は [CODE(HTMLe)[document]] or [CODE(HTMLe)[body]] にしようと言っています。 これに対して、 [[TimBL]] が、 > 後者がいいですね。 Header と Body というのはメイルの名付け方にも似ていますし。 [INS[(1992年11月19日 )]] と答えております。その後 TimBL が > [CODE(HTMLe)[header]] と [CODE(HTMLe)[body]] も [INS[(DTD に)]] 入れて欲しいです。 [INS[(1992年12月1日 )]] と言いますと、 Dan は、ずっと取り組んでいるけどうまくいかないと答えています。 (1992年12月1日 ) この時 Dan が考えていた文書の構造は [CODE(SGML)[]] でした。 この内容模型の前半部分を [CODE(HTMLe)[header]] 要素にした時に、 既存データとの互換性のために、 - [CODE(HTMLe)[header]] のタグは省略可能 - [CODE(HTMLe)[title]] など3種類の要素が任意の順序で、 いずれについても高々1個認められる という要件を満たす DTD を書くのに苦心していた模様です。 同じ日の では、諦めて [CODE(HTMLe)[title]] を文書中どこでも良いことにしちゃえ! とか、 上位プロトコルの [CODE(822)[[[Subject]]]] とか使えばいいじゃん! なんて言ってます。 更に同じ日の では、 Tim は [CODE(HTMLe)[header]] や [CODE(HTMLe)[body]] を使ってるけど、その方法だと既存の文書と互換な DTD が書けないよと嘆いてます。 しばらくして、 12月4日の では、構造が壊れてしまうものの、 [CODE(HTMLe)[head]] と [CODE(HTMLe)[body]] を既存の文書と互換に追加する方法を思いついたと書いています。 (ここでなぜか [CODE(HTMLe)[header]] が [CODE(HTMLe)[head]] に変わっています。) その方法はメイルには書かれていないのですが、 12月3日の Dan の [CODE(file)[html.dtd]] には次のようにあります。 [PRE(SGML)[ ]PRE] [9] 1993年1月11日の Dan の では [CODE(HTMLe)[header]] を出力するプログラムを [CODE(HTMLe)[head]] に修正するように言っています。すぐ後に Tim が何も言わずに修正しています。 ([[名無しさん]]) [10] 1993年4月9日の Dan の [CODE(file)[html.dtd]] から、 [PRE(SGML)[ ]]> ]PRE] で [CODE(HTMLe)[head]] も [CODE(HTMLe)[body]] もタグ省略可能な現在と同じ形の宣言になりました。 (初めからこうしておけばよかったと思うのですが、 Dan が最初に試した当時の [[sgmls]] ではうまく通らなかったのでしょうか?) ([[名無しさん]]) [[#comment]] * メモ