* head 要素型 (HTML, XHTML 1) [3] [ABBR[[[HTML]]][Hypertext Markup Language]] の [CODE(HTMLe)[head]] 要素は、 [[文書]]の[[内容]]とはみなされない文書に関する情報 ([[メタ情報]]) を記述するのに使います。 [11] 仕様書: - [[HTML 2.0]]: [[RFC 1868]] -- [CITE[5.2. Head: HEAD]] - [[HTML 4]] -- [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]]]] ,[[言語札]] ,(継承) ,[[自然言語]] ,"[HTML 4], [XHTML 1]" ,[CODE(HTMLa)[[[xml]]:lang]] ,言語札 ,(継承) ,自然言語 ,[XHTML 1] ,[CODE(HTMLa)[[[profile]]]] ,[CODE(ABNF)[[[URI参照]] *([[空白]] URI参照)]] ,(なし) ,メタ情報の辞書 ,"[HTML 4], [XHTML 1]" [[#comment]] ** 内容模型 [6] [ABBR[HTML][Hypertext Markup Language]] 4 などでは、 [[内容模型]]の表現に[[添加要素指定]]が使われていて少々分かりにくくなっていますが、 その主張は簡単なことで、 [Q[すべての要素の出現順序は無制限。 [CODE(HTMLe)[[[title]]]] は丁度1つ必要。 [CODE(HTMLe)[[[base]]]] は高々1つ必要。他は任意個 OK。]] です。 ただし、 [ABBR[DTD][文書型定義]] に現れない仕様書本文での制限で、 [CODE(HTMLa)[[[http-equiv]]]] 属性が [CODE(HTTP)[[[Content-Type]]]] である [CODE(HTMLe)[[[meta]]]] を使う時は可能な限りはじめの方にいれることになっています [SRC[HTML 4]]。 [7] 古い時代の [ABBR[DTD][文書型定義]] 案では、 [CODE(HTMLe)[title]] が必須でなかったこともありました。 実際の文書では今でも [CODE(HTMLe)[title]] が欠けていることがしばしばあります。 また、 [CODE(HTMLe)[base]] が [WEAK[([CODE(HTMLa)[[[href]]]] と [CODE(HTMLa)[[[target]]]] などで)]] 複数あることもたまにあります。 [[#comment]] ** レンダリング [4] [ABBR[[[UA]]][利用者エージェント]] は通常この要素の内容を[[レンダリング]]しませんが、 何らかの手段で[[利用者]]にその情報を提示しても構いません [SRC[HTML 4]]。 メタ情報の重要性が説かれる現在では、 汎用 [ABBR[UA][利用者エージェント]] はむしろその手段を積極的に用意する'''べき'''でしょう。 [CODE(HTMLe)[title]] 要素、 [CODE(HTMLe)[[[style]]]] 要素のように、 [[内容]]を持ち得る要素が含まれ得ますから、 それらを通常の表示モードでレンダリングすることが無いように注意が必要です。 [CODE(HTMLe)[head]] 要素内では [CODE(HTMLe)[[[object]]]] 要素も使えますが、その[[物体]]または[[代替内容]]も表示しないように注意する必要があります。 [[#comment]] ** 歴史 [8] 一番初めの [ABBR[[[SGML]]][標準一般化マーク付け言語]] もどきな頃の [ABBR[HTML][ハイパーテキスト・マーク付け言語]] に [CODE(HTMLe)[head]] 要素型はありませんでした。 その後 [ABBR[[[SGML]]][標準一般化マーク付け言語]] 的形式を整えるに当たって、 本文そのものではない [CODE(HTMLe)[title]] 要素を収納する要素が考えられました。 [ABBR[[[Dan Connolly]]][Daniel W. Connolly]] は、 新しい要素型の導入にあたって、 次のようなことを言っています。 > [CODE(HTMLe)[document]] は文書の[Q[本体]] のほとんどを含みます。これで[[混合内容]]の問題を解決できます。 この要素を [CODE(HTMLe)[body]] という名前にして、 [CODE(HTMLe)[title]] や [CODE(HTMLe)[[[nextid]]]] や [CODE(HTMLe)[[[isindex]]]] を囲む省略可能な [CODE(HTMLe)[[[header]]]] を導入することもできます。 [INS[(1992年11月19日 )]] 混合内容の問題と言うのは、後に [CODE(HTMLe)[[[fieldset]]]] などでもかかわることになる、ある意味で因縁の問題です。 当時の [ABBR[HTML][ハイパーテキスト・マーク付け言語]] の書式を素直に記述すると、 [CODE(SGML)[((TITLE? & ISINDEX?), (H1|H2|DL|OL|XMP|#PCDATA)+)]] になります。ところが、これは[[混合内容]]になってしまいます。 [ABBR[[[SGML]]][標準一般化マーク付け言語]] の仕様上、 [CODE(HTMLe)[title]] 要素や [CODE(HTMLe)[isindex]] 要素の前に [CODE(SGML)[[[s]]]] を入れることができなくなってしまうのです。 これへの対策はタグが省略可能なダミーの要素を [CODE(SGML)[[[PCDATA]]]] が含まれる部分に入れるのが定石で、 それを [ABBR[Dan][Dan Connolly]] は [CODE(HTMLe)[document]] or [CODE(HTMLe)[body]] にしようと言っています。 これに対して、 [ABBR[[[TimBL]]][Tim Berners‐Lee]] が、 > 後者がいいですね。 Header と Body というのはメイルの名付け方にも似ていますし。 [INS[(1992年11月19日 )]] と答えております。その後 [ABBR[[[TimBL]]][Tim Berners‐Lee]] が > [CODE(HTMLe)[header]] と [CODE(HTMLe)[body]] も [INS[(DTD に)]] 入れて欲しいです。 [INS[(1992年12月1日 )]] と言いますと、 [ABBR[Dan][Dan Connolly]] は、 ずっと取り組んでいるけどうまくいかないと答えています。 (1992年12月1日 ) この時 [ABBR[Dan][Dan Connolly]] が考えていた文書の構造は [CODE(SGML)[]] でした。 この内容模型の前半部分を [CODE(HTMLe)[header]] 要素にした時に、 既存データとの互換性のために、 - [CODE(HTMLe)[header]] のタグは省略可能 - [CODE(HTMLe)[title]] など3種類の要素が任意の順序で、 いずれについても高々1個認められる という要件を満たす [ABBR[DTD][文書型定義]] を書くのに苦心していた模様です。 同じ日の では、諦めて [CODE(HTMLe)[title]] を文書中どこでも良いことにしちゃえ! とか、 上位プロトコルの [CODE(822)[[[Subject]]]] とか使えばいいじゃん! なんて言ってます。 更に同じ日の では、 [ABBR[Tim][Tim Berners‐Lee]] は [CODE(HTMLe)[header]] や [CODE(HTMLe)[body]] を使ってるけど、 その方法だと既存の文書と互換な [ABBR[DTD][文書型定義]] が書けないよと嘆いてます。 しばらくして、 12月4日の では、構造が壊れてしまうものの、 [CODE(HTMLe)[head]] と [CODE(HTMLe)[body]] を既存の文書と互換に追加する方法を思いついたと書いています。 (ここでなぜか [CODE(HTMLe)[header]] が [CODE(HTMLe)[head]] に変わっています。) その方法はメイルには書かれていないのですが、 12月3日の [ABBR[Dan][Dan Connolly]] の [CODE(file)[html.dtd]] には次のようにあります。 [PRE(SGML)[ ]PRE] [9] 1993年1月11日の [ABBR[Dan][Dan Connolly]] の では [CODE(HTMLe)[header]] を出力するプログラムを [CODE(HTMLe)[head]] に修正するように言っています。すぐ後に [ABBR[Tim][Tim Berners‐Lee]] が何も言わずに修正しています。 [10] 1993年4月9日の Dan の [CODE(file)[html.dtd]] から、 [PRE(SGML)[ ]]> ]PRE] で [CODE(HTMLe)[head]] も [CODE(HTMLe)[body]] もタグ省略可能な現在と同じ形の宣言になりました。 (初めからこうしておけばよかったと思うのですが、 [ABBR[Dan][Dan Connolly]] が最初に試した当時の [[sgmls]] ではうまく通らなかったのでしょうか?) [[#comment]] ** メモ [[#comment]] * [CODE(XMLe)@en[head]] 要素 (SMIL) [12] [[SMIL]] の [DFN[[CODE(XMLe)@en[[[head]]]] [[要素]]]]は、時間的な動作に関係のない情報を含める[[要素]]です [SRC[[[SMIL 1.0]]]]。 :[[要素名]]:[CODE(XMLe)@en[[[head]]]] (おそらく [[HTML]] [CODE(HTMLe)@en[[[head]]]] より) :[[内容モデル]]:[CODE(XMLe)@en[[[layout]]]] または [CODE(XMLe)@en[[[switch]]]] のいずれかと、零個以上の [CODE(XMLe)@en[[[meta]]]] の両方 [SRC@en[[[SMIL 1.0]]]] :[[属性]]:[CODE(XMLa)@en[[[id]]]] -[[SMIL 1.0]] ([[W3C]] [[勧告]]) --[CSECTION@en[3.1 The [CODE(XMLe)@en[head]] Element]] * [CODE(XMLe)@en[head]] 要素 (OPML) [13] [[OPML]] の [DFN[[CODE(XMLe)@en[head]] [[要素]]]]は、[[文書]]全体に関係する情報を含める[[要素]]です。 [14] :[[局所名]]:[CODE(XMLe)@en[[[head]]]] :文脈:[CODE(XMLe)@en[[[opml]]]] の[[子要素]]として :[[内容モデル]]:0個以上の[[子要素]] :[[属性]]: [15] 仕様書: -[CITE[OPML 1.0 Specification]] ([TIME[2008-12-02 16:47:13 +09:00]] 版) ** 内容モデル [16] [[OPML 1.0]] によると、次の[[子要素]]を0個以上指定できます。 - [CODE(XMLe)@en[[[dateCreated]]]] - [CODE(XMLe)@en[[[dateModified]]]] - [CODE(XMLe)@en[[[expansionState]]]] - [CODE(XMLe)@en[[[ownerName]]]] - [CODE(XMLe)@en[[[owenrEmail]]]] - [CODE(XMLe)@en[[[title]]]] - [CODE(XMLe)@en[[[vertScrollState]]]] - [CODE(XMLe)@en[[[windowBottom]]]] - [CODE(XMLe)@en[[[windowLeft]]]] - [CODE(XMLe)@en[[[windowRight]]]] - [CODE(XMLe)@en[[[windowTop]]]] [17] どの[[要素]]も1個だけしか出現するべきではないと思うのですが、特にそういう規定はないみたいです。 ** 処理モデル [18] どの[[子要素]]も無視してかまいません。 [SRC@en[[[OPML 1.0]]]] * メモ [19] [CITE@ja[ちょっとしたメモ - いろいろなAtom]] ([[Masahide Kanzaki]] 著, [TIME[2008-05-28 09:21:23 +09:00]] 版) [20] [CITE@en[(X)HTML5 Tracking]] ([TIME[2009-10-06 08:33:22 +09:00]] 版)