#?SuikaWiki/0.9
* head 要素型 (HTML, XHTML 1)
[3] [CODE(HTMLe)[head]] 要素は、
[[文書]]の[[内容]]とはみなされない文書に関する情報
([[メタ情報]]) を記述するのに使います。
[11]
仕様書:
- [[HTML 2.0]]: [[RFC 1868]] 5.2. Head: HEAD
- [[HTML 4]]:
[4] [[UA]] は通常この要素の内容を[[レンダリング]]しませんが、
何らかの手段で[[利用者]]にその情報を提示しても構いません。 [SRC[HTML 4]
メタ情報の重要性が説かれる現在では、
汎用 UA はむしろその手段を必ず用意する'''べき'''でしょう。
[5]
:[[開始タグ]] (HTML 2, HTML 4):省略可能
:開始タグ (XHTML 1):必須
:[[終了タグ]] (HTML 2, HTML 4):省略可能
:終了タグ (XHTML 1):必須
:[[内容模型]]:[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]]
** メモ
[[#comment]]
* メモ