文書head要素

文書head要素

head 要素型 (HTML, XHTML 1)

[3] HTMLhead 要素は、 文書内容とはみなされない文書に関する情報 (メタ情報) を記述するのに使います。

[11] 仕様書:

[5]

開始タグ
省略可能 (HTML 2, HTML 4) または必須 (XHTML 1)
終了タグ
省略可能 (HTML 2, HTML 4) または必須 (XHTML 1)
内容模型
(title & base?) +(%head.misc)
出現できる文脈
html 第1子要素
属性
属性名属性値型既定値意味出典
lang言語札(継承)自然言語[HTML 4], [XHTML 1]
xml:lang言語札(継承)自然言語[XHTML 1]
profileURI参照 *(空白 URI参照)(なし)メタ情報の辞書[HTML 4], [XHTML 1]

内容模型

[6] HTML 4 などでは、 内容模型の表現に添加要素指定が使われていて少々分かりにくくなっていますが、 その主張は簡単なことで、 すべての要素の出現順序は無制限。 title は丁度1つ必要。 base は高々1つ必要。他は任意個 OK。 です。

ただし、 DTD に現れない仕様書本文での制限で、 http-equiv 属性が Content-Type である meta を使う時は可能な限りはじめの方にいれることになっています HTML 4

[7] 古い時代の DTD 案では、 title が必須でなかったこともありました。

実際の文書では今でも title が欠けていることがしばしばあります。 また、 base(hreftarget などで) 複数あることもたまにあります。

レンダリング

[4] UA は通常この要素の内容をレンダリングしませんが、 何らかの手段で利用者にその情報を提示しても構いません HTML 4

メタ情報の重要性が説かれる現在では、 汎用 UA はむしろその手段を積極的に用意するべきでしょう。

title 要素、 style 要素のように、 内容を持ち得る要素が含まれ得ますから、 それらを通常の表示モードでレンダリングすることが無いように注意が必要です。 head 要素内では object 要素も使えますが、その物体または代替内容も表示しないように注意する必要があります。

歴史

[8] 一番初めの SGML もどきな頃の HTMLhead 要素型はありませんでした。 その後 SGML 的形式を整えるに当たって、 本文そのものではない title 要素を収納する要素が考えられました。

Dan Connolly は、 新しい要素型の導入にあたって、 次のようなことを言っています。

document は文書の本体 のほとんどを含みます。これで混合内容の問題を解決できます。 この要素を body という名前にして、 titlenextidisindex を囲む省略可能な header を導入することもできます。 (1992年11月19日 http://ksi.cpsc.ucalgary.ca/archives/WWW-TALK/www-talk-1992.messages/315.html)

混合内容の問題と言うのは、後に fieldset などでもかかわることになる、ある意味で因縁の問題です。 当時の HTML の書式を素直に記述すると、 ((TITLE? & ISINDEX?), (H1|H2|DL|OL|XMP|#PCDATA)+) になります。ところが、これは混合内容になってしまいます。 SGML の仕様上、 title 要素や isindex 要素の前に s を入れることができなくなってしまうのです。 これへの対策はタグが省略可能なダミーの要素を PCDATA が含まれる部分に入れるのが定石で、 それを Dandocument or body にしようと言っています。

これに対して、 TimBL が、

後者がいいですね。 Header と Body というのはメイルの名付け方にも似ていますし。 (1992年11月19日 http://ksi.cpsc.ucalgary.ca/archives/WWW-TALK/www-talk-1992.messages/319.html)

と答えております。その後 TimBL

headerbody(DTD に) 入れて欲しいです。 (1992年12月1日 http://ksi.cpsc.ucalgary.ca/archives/WWW-TALK/www-talk-1992.messages/380.html)

と言いますと、 Dan は、 ずっと取り組んでいるけどうまくいかないと答えています。 (1992年12月1日 http://ksi.cpsc.ucalgary.ca/archives/WWW-TALK/www-talk-1992.messages/383.html)

この時 Dan が考えていた文書の構造は <!ELEMENT HTML O O ((TITLE? & NEXTID? & ISINDEX?), BODY)> でした。 この内容模型の前半部分を header 要素にした時に、 既存データとの互換性のために、

  • header のタグは省略可能
  • title など3種類の要素が任意の順序で、 いずれについても高々1個認められる

という要件を満たす DTD を書くのに苦心していた模様です。

同じ日の http://ksi.cpsc.ucalgary.ca/archives/WWW-TALK/www-talk-1992.messages/390.html では、諦めて title を文書中どこでも良いことにしちゃえ! とか、 上位プロトコルの Subject とか使えばいいじゃん! なんて言ってます。 更に同じ日の http://ksi.cpsc.ucalgary.ca/archives/WWW-TALK/www-talk-1992.messages/393.html では、 Timheaderbody を使ってるけど、 その方法だと既存の文書と互換な DTD が書けないよと嘆いてます。

しばらくして、 12月4日の http://ksi.cpsc.ucalgary.ca/archives/WWW-TALK/www-talk-1992.messages/402.html では、構造が壊れてしまうものの、 headbody を既存の文書と互換に追加する方法を思いついたと書いています。 (ここでなぜか headerhead に変わっています。)

その方法はメイルには書かれていないのですが、 12月3日の Danhtml.dtd には次のようにあります。

<!ENTITY % anyelement "HEAD | %headelement; | BODY | %bodyelement;">
<!ELEMENT HTML O O  ((%anyelement|#PCDATA)*, PLAINTEXT?)>
<!ELEMENT HEAD - -  (TITLE? & ISINDEX? & NEXTID?)>
<!ELEMENT BODY - -  (%bodyelement|#PCDATA)*>

[9] 1993年1月11日の Danhttp://ksi.cpsc.ucalgary.ca/archives/WWW-TALK/www-talk-1993q1.messages/39.html では header を出力するプログラムを head に修正するように言っています。すぐ後に Tim が何も言わずに修正しています。

[10] 1993年4月9日の Dan の html.dtd から、

<![ %HTML.PLAINTEXT [ <!ENTITY % html-content "(HEAD, BODY), PLAINTEXT?"> ]]>
<!ENTITY % html-content "HEAD, BODY">
<!ELEMENT HTML O O  (%html-content)>
headbody もタグ省略可能な現在と同じ形の宣言になりました。

(初めからこうしておけばよかったと思うのですが、 Dan が最初に試した当時の sgmls ではうまく通らなかったのでしょうか?)

文書 head 要素、document.head

[22] head 要素の第1子要素たる head 要素文書 head 要素 (the head element) といいます。

[23] Document オブジェクトhead 属性は、取得時文書head要素を返します。

歴史

[20] Web Applications 1.0 r4082 Add document.head. ( 版) http://html5.org/tools/web-apps-tracker?from=4081&to=4082

head 要素 (SMIL)

[12] SMILhead 要素は、時間的な動作に関係のない情報を含める要素です SMIL 1.0

要素名
head (おそらく HTML head より)
内容モデル
layout または switch のいずれかと、零個以上の meta の両方 SMIL 1.0
属性
id

head 要素 (OPML)

[13] OPMLhead 要素は、文書全体に関係する情報を含める要素です。

[14]

局所名
head
文脈
opml子要素として
内容モデル
0個以上の子要素
属性

[15] 仕様書:

内容モデル

[16] OPML 1.0 によると、次の子要素を0個以上指定できます。

[17] どの要素も1個だけしか出現するべきではないと思うのですが、特にそういう規定はないみたいです。

処理モデル

[18] どの子要素も無視してかまいません。 OPML 1.0

HTML 以外

[2] HTML 由来で DTBookNCX や資源DTDにもありました。 >>26

head 要素 (XFrames)

[21] XFrames ( 版) http://www.w3.org/TR/2010/NOTE-xframes-20101216/#s_head-element

HEAD 要素 (DjVu XML)

[273] DjVu XML には HTMLhead 要素から派生した HEAD 要素がありました。

メモ

[19] ちょっとしたメモ - いろいろなAtom (Masahide Kanzaki 著, 版) http://www.kanzaki.com/memo/2004/10/22-1

[24] [whatwg] Fwd: Allow Select SVG Elements In <head> ( ( 版)) http://lists.whatwg.org/htdig.cgi/whatwg-whatwg.org/2011-December/034255.html

[25] ncsa-mosaic/CHANGES at master · alandipert/ncsa-mosaic ( ( 版)) https://github.com/alandipert/ncsa-mosaic/blob/master/CHANGES#L63

[1] Vaulting Out of Walled Gardens with Fancy Links ★ Mozilla Hacks – the Web developer blog () https://hacks.mozilla.org/2016/09/vaulting-out-of-walled-gardens-with-fancy-links/

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: