* 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]]
-- <IW:HTML4:"struct/global.html#edef-HEAD">

[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]"



* 内容

[FIG(short list)[ [35] [CODE[head]] [[要素]]の[[内容]]

- [CODE[base]]
- [CODE[link]]
- [CODE[meta]]
- [CODE[script]]
- [CODE[style]]
- [CODE[title]]

[HISTORY[

- [CODE[basefont]]
- [CODE[object]]
- [CODE[rdf:RDF]]
- [CODE[transliterate]]

]HISTORY]


]FIG]

[HISTORY[

[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]]]] などで)]] 
複数あることもたまにあります。

]HISTORY]


* レンダリング

[4] [ABBR[[[UA]]][利用者エージェント]] 
は通常この要素の内容を[[レンダリング]]しませんが、
何らかの手段で[[利用者]]にその情報を提示しても構いません 
[SRC[HTML 4]]。

メタ情報の重要性が説かれる現在では、
汎用 [ABBR[UA][利用者エージェント]] 
はむしろその手段を積極的に用意する'''べき'''でしょう。

[CODE(HTMLe)[title]] 要素、 [CODE(HTMLe)[[[style]]]] 要素のように、
[[内容]]を持ち得る要素が含まれ得ますから、
それらを通常の表示モードでレンダリングすることが無いように注意が必要です。
[CODE(HTMLe)[head]] 要素内では [CODE(HTMLe)[[[object]]]]
要素も使えますが、その[[物体]]または[[代替内容]]も表示しないように注意する必要があります。

[[#comment]]

* 歴史

;; [33] ここまでの経緯は [[HTML2]] 参照。

[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日 <http://ksi.cpsc.ucalgary.ca/archives/WWW-TALK/www-talk-1992.messages/315.html>)]]

混合内容の問題と言うのは、後に [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日 <http://ksi.cpsc.ucalgary.ca/archives/WWW-TALK/www-talk-1992.messages/319.html>)]]

と答えております。その後 [ABBR[[[TimBL]]][Tim Berners‐Lee]] が

> [CODE(HTMLe)[header]] と [CODE(HTMLe)[body]] も [INS[(DTD に)]]
入れて欲しいです。 [INS[(1992年12月1日 <http://ksi.cpsc.ucalgary.ca/archives/WWW-TALK/www-talk-1992.messages/380.html>)]]

と言いますと、 [ABBR[Dan][Dan Connolly]] は、
ずっと取り組んでいるけどうまくいかないと答えています。
(1992年12月1日 <http://ksi.cpsc.ucalgary.ca/archives/WWW-TALK/www-talk-1992.messages/383.html>)

この時 [ABBR[Dan][Dan Connolly]] が考えていた文書の構造は
[CODE(SGML)[<!ELEMENT HTML O O  ((TITLE? & NEXTID? & ISINDEX?), BODY)>]]
でした。
この内容模型の前半部分を [CODE(HTMLe)[header]] 要素にした時に、
既存データとの互換性のために、
- [CODE(HTMLe)[header]] のタグは省略可能
- [CODE(HTMLe)[title]] など3種類の要素が任意の順序で、
いずれについても高々1個認められる

という要件を満たす [ABBR[DTD][文書型定義]] 
を書くのに苦心していた模様です。

同じ日の <http://ksi.cpsc.ucalgary.ca/archives/WWW-TALK/www-talk-1992.messages/390.html> 
では、諦めて [CODE(HTMLe)[title]] を文書中どこでも良いことにしちゃえ! とか、
上位プロトコルの [CODE(822)[[[Subject]]]] とか使えばいいじゃん!
なんて言ってます。 
更に同じ日の
<http://ksi.cpsc.ucalgary.ca/archives/WWW-TALK/www-talk-1992.messages/393.html>
では、 [ABBR[Tim][Tim Berners‐Lee]] は [CODE(HTMLe)[header]] 
や [CODE(HTMLe)[body]] を使ってるけど、
その方法だと既存の文書と互換な [ABBR[DTD][文書型定義]]
が書けないよと嘆いてます。



-[118] [CITE[HTML providers: please grab sgmls and the DTD]], [TIME[2003-08-04T15:50:21.000Z]], [TIME[2024-09-29T09:13:30.097Z]] <https://lists.w3.org/Archives/Public/www-talk/1992NovDec/0143.html>
-- [119] [CITE[Re: HTML providers: please grab sgmls and the DTD]], [TIME[2003-08-04T15:50:21.000Z]], [TIME[2024-09-29T09:15:25.213Z]] <https://lists.w3.org/Archives/Public/www-talk/1992NovDec/0146.html>



しばらくして、 12月4日の
<http://ksi.cpsc.ucalgary.ca/archives/WWW-TALK/www-talk-1992.messages/402.html>
では、構造が壊れてしまうものの、
[CODE(HTMLe)[head]] と [CODE(HTMLe)[body]]
を既存の文書と互換に追加する方法を思いついたと書いています。
(ここでなぜか [CODE(HTMLe)[header]] が
[CODE(HTMLe)[head]] に変わっています。)

その方法はメイルには書かれていないのですが、
12月3日の [ABBR[Dan][Dan Connolly]] の [CODE(file)[html.dtd]] 
には次のようにあります。

[PRE(SGML)[
<!ENTITY % anyelement "HEAD | %headelement; | BODY | %bodyelement;">
<!ELEMENT HTML O O  ((%anyelement|#PCDATA)*, PLAINTEXT?)>
<!ELEMENT HEAD - -  (TITLE? & ISINDEX? & NEXTID?)>
<!ELEMENT BODY - -  (%bodyelement|#PCDATA)*>
]PRE]





[9]
1993年1月11日の [ABBR[Dan][Dan Connolly]] の <http://ksi.cpsc.ucalgary.ca/archives/WWW-TALK/www-talk-1993q1.messages/39.html> では [CODE(HTMLe)[header]] を出力するプログラムを [CODE(HTMLe)[head]] に修正するように言っています。すぐ後に [ABBR[Tim][Tim Berners‐Lee]]
が何も言わずに修正しています。


[10]
1993年4月9日の Dan の [CODE(file)[html.dtd]] から、
[PRE(SGML)[
<![ %HTML.PLAINTEXT [ <!ENTITY % html-content "(HEAD, BODY), PLAINTEXT?"> ]]>
<!ENTITY % html-content "HEAD, BODY">
<!ELEMENT HTML O O  (%html-content)>
]PRE]
で [CODE(HTMLe)[head]] も [CODE(HTMLe)[body]] 
もタグ省略可能な現在と同じ形の宣言になりました。

(初めからこうしておけばよかったと思うのですが、 
[ABBR[Dan][Dan Connolly]] が最初に試した当時の [[sgmls]] 
ではうまく通らなかったのでしょうか?)


[FIG(data)[ [27] [[HTML要素概説]]

:[F[要素名]]:[CODE[head]]
:[F[要素名]]:[CODE[header]]
:日付:[TIME[1992-12-03]]
:説明:
[TIME[1992-12-03]]版 
[[HTML DTD]]
に
[CODE[head]]
がある。
[SRC[HTML19921203]]
[CODE[head]] の初出と思われる。
このときまで
[[Tim Berners‑Lee]]
は
[CODE[header]] 
と呼んでいた[SEE[>>34]]が、改称理由は不明。
:出典:
[REFS[

- [28] 
[DFN[HTMLTodoDan]]:
[CITE[HTML todo list]],
[DATA(.author)[[[Dan Connolly]]]],
[TIME(.published)[Mon, 11 Jan 93 22:36:43 CST][1993-01-11T22:36:43-06:00]], 
[TIME[1995-08-08T03:09:23.000Z]], [TIME[2024-08-12T12:45:30.898Z]] <https://ksi.cpsc.ucalgary.ca/archives/WWW-TALK/www-talk-1993q1.messages/39.html>
- 
[DFN[HTML19921203]]:
[CITE@en[Document Type Definition for the HyperText Markup Language as used by the World Wide Web application (HTML DTD)]],
[TIME(.published)[1992/12/03 02:04:29][1992-12-03T02:04:29]] [DATA(.author)[[[connolly]]]]
<https://suika.suikawiki.org/gate/2007/schema/schema/0c635118f8e63a549e57c5cd27195774/cache.html>

]REFS]
:注釈:
-
[34] 
[TIME[1993-01-11]]付の
[[Dan Connolly]]
の [[www-talk]]
への投稿は、
[[CERN]]
が
[CODE[header]]
を実装しているとして、
[CODE[head]]
への修正を求めている。 
[SRC[>>28]]

]FIG]

- [31] 
[CITE[Re: The <PRE> tag]], [TIME[2003-08-04T15:50:21.000Z]], [TIME[2024-08-30T09:50:43.993Z]] <https://lists.w3.org/Archives/Public/www-talk/1992NovDec/0133.html>
- [32] [CITE[Re: The <PRE> tag]], [TIME[2003-08-04T15:50:21.000Z]], [TIME[2024-08-30T09:50:59.739Z]] <https://lists.w3.org/Archives/Public/www-talk/1992NovDec/0136.html>




-
[29] 
[CITE[Change history for NextStep WorldWideWeb]], 
[TIME(.published)[1992-11-25T15:08:01.000Z]], 
[TIME[2024-08-14T02:13:44.672Z]] <https://www.w3.org/History/19921103-hypertext/hypertext/WWW/NeXT/Implementation/Features.html>



* 文書 [CODE(HTMLe)@en[head]] 要素、[CODE(JS)@en[document.head]]

[22] [CODE(HTMLe)@en[[[head]]]] [[要素]]の第1[[子要素]]たる [CODE(HTMLe)@en[[[head]]]]
[[要素]]を[DFN[[RUBYB[文書 [CODE(HTMLe)@en[head]] 要素]@en[the [CODE(HTMLe)@en[head]] element]]]]といいます。

[23] [CODE(DOMi)@en[[[Document]]]] [[オブジェクト]]の [DFN[[CODE(DOMa)@en[[[head]]]]]]
[[属性]]は、[[取得時]]に[[文書[CODE(HTMLe)@en[head]]要素]]を返します。

** 歴史

[20]
[CITE@en[Web Applications 1.0 r4082 Add document.head.]] ([TIME[2009-10-06 08:32:00 +09:00]] 版) <http://html5.org/tools/web-apps-tracker?from=4081&to=4082>

* [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]]
<http://www.w3.org/TR/1998/REC-smil-19980615/#head>

* [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]] 版) <http://www.opml.org/spec#whatIsALtheadgt>

** 内容モデル

[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]]]]

* HTML 以外

[2] [[HTML]] 由来で [[DTBook]] や [[NCX]] や資源DTDにもありました。
[SRC[>>26]]

- [26] [CITE@en-US[[[DAISY]] ANSI/NISO Z39.86-2002 - The DAISY Consortium]], [TIME[2023-11-23T08:52:40.000Z]] <https://daisy.org/info-help/document-archive/archived-projects/daisy-ansi-niso-z39-86-2002-archived/>

[FIG(data)[ [30] [[HTML要素概説]]

:[F[要素名]]:[CODE[head]]
:借用先:[[WML1]]
:借用先:[[DTBook]]
:借用先:[[DjVu XML]]
:借用先:[[OPML]]
:借用先:[[SMIL]]
:借用先:[[XFrames]]

]FIG]


** [CODE(XMLe)@en[head]] 要素 (XFrames)

[21] [CITE@en[XFrames]] ([TIME[2010-12-17 00:45:08 +09:00]] 版) <http://www.w3.org/TR/2010/NOTE-xframes-20101216/#s_head-element>

** [CODE[HEAD]] 要素 (DjVu XML)

[273] 
[[DjVu XML]]
には
[[HTML]]
の
[CODE[head]]
[[要素]]から派生した
[DFN[[CODE[HEAD]]]]
[[要素]]がありました。

* メモ

[19] [CITE@ja[ちょっとしたメモ - いろいろなAtom]] ([[Masahide Kanzaki]] 著, [TIME[2008-05-28 09:21:23 +09:00]] 版) <http://www.kanzaki.com/memo/2004/10/22-1>


[24] [CITE[''''''[''''''whatwg'''''']'''''' Fwd: Allow Select SVG Elements In <head>]]
( ([TIME[2011-12-22 23:20:49 +09:00]] 版))
<http://lists.whatwg.org/htdig.cgi/whatwg-whatwg.org/2011-December/034255.html>

[25] [CITE[ncsa-mosaic/CHANGES at master · alandipert/ncsa-mosaic]]
( ([TIME[2014-04-07 05:27:04 +09:00]] 版))
<https://github.com/alandipert/ncsa-mosaic/blob/master/CHANGES#L63>

[FIG(quote)[
[FIGCAPTION[
[1] [CITE@en-US[Vaulting Out of Walled Gardens with Fancy Links ★ Mozilla Hacks – the Web developer blog]]
([TIME[2016-09-28 01:00:56 +09:00]])
<https://hacks.mozilla.org/2016/09/vaulting-out-of-walled-gardens-with-fancy-links/>
]FIGCAPTION]

> Unfortunately for developers, each of these internet industry titans has implemented their own metadata formats for this: Twitter has Cards, Facebook and Pinterest use Open Graph metadata and Google uses Schema.org markup.
> Thus creating a <header> soup of doom for each and every individual developer who dares to tread this path:

]FIG]
