開始タグ

開始タグ

開始タグ (HTML)

仕様書

開始タグ直後の改行

[27] HTML のいくつかの要素では、開始タグ直後の改行が1つだけ無視されることになっています。

[28] 例えば、

<textarea>
hoge fuga
</textarea>
... の textarea 要素内容は、 「hoge fuga」の後に改行が1つであり、先頭の改行は無視されます。

[29] SGML の同様の規定に影響されたのか、それとも偶然 (あるいは必然? どっち?) に一致したのかは不明です。

[31] これに該当するのは、次の2つの要素です >>30

[32] これらの要素にあっては、開始タグの直後に改行を1つ置いても構いません。 特に内容の先頭が改行である場合には、改行が1つ余分になければなりません>>30

[34] HTML構文解析器に関する規定 >>33 によると、 >>31 の他に更に listing 要素も同様の扱いを受けます。

[35] listing 要素廃止されているので、HTML構文の適合性の規定上は存在しないことになっています。

[37] HTML直列化の規定でも、 >>31>>34 の3つの要素の最初の子供テキスト節点U+000A から始まる場合、 U+000A を2つにしなければならないとなっています >>36

[38] 他に U+000D の場合も余分に U+000A を挿入しないと改行が失われてしまうのですが、 直列化算法は全体的に U+000D を想定していないようです。

開始タグ (SGML)

[1] 要素が始まる場所の目印となるタグが、 開始タグ (start tag) です。 [4] 開始タグの中には、要素の属性を記述できます (属性指定並び)。

仕様書

開始タグの構文

[15]

[17] 構文の通り、基本文書型以外では net 可能開始タグが利用できないことになっています。 (基本文書型のタグ以外は読み飛ばすという処理がやや面倒になるからでしょうか。)

[18] 閉じない開始タグが使えるのは、直後に stago 又は etago と同じ文字列が続く場合のみです。但し、 それらの文字列が実際に開始タグ又は終了タグの開きとして認知されるかは別問題になります。

[16] 開始タグの長さは、属性指定並び中の参照を置換する前の状態で、区切子 stago, tagc, net を除き、 TAGLEN 以下でなければなりません。 (JIS 6.4.2 参照。)

開始タグの省略

[2] SGML では、条件が揃っていれば曖昧でない限り開始タグを省略できます。例えば、電話番号要素が必ず国番号要素から始まると定義されていて、その開始タグが省略可能と宣言されていれば、国番号要素の開始タグは省略できます。

[3] XML では開始タグは省略できませんから、 どんな場合でも必ず書かなければなりません。

[10] 開始タグが省略できるのは、次の条件を満たす時です。

  1. [4] [タグの省略が許されていること] SGML宣言OMITTAG YES になっていることが大前提として必要です。 JIS X 4151‐1992 6.3.1
  2. [5] [開始タグの省略が許されていること] 当該要素型要素型宣言において、 開始タグの省略が許されている (o である) ことが必要です。
  3. [6] [文脈上自明であること] その要素が文脈上必須であって、 しかもそこに現れ得る他の要素型の要素がどれも文脈上任意選択でなければなりません。 JIS X 4151‐1992 6.3.1.1
    • 例 : <!ELEMENT parent - - (c?, d)>, <!ELEMENT c - - ANY>, <!ELEMENT d o o (#PCDATA)> において、 <parent><d>d-content</d></parent> の開始タグ <d> は省略できます。
  4. [7] [必須属性を持たないこと] 但し、必須の属性があるときは省略できません。 JIS X 4151‐1992 6.3.1.1 (1)
  5. [8] [宣言内容でないこと] 宣言内容を持つ時 (すなわち、内容が文字データの時、 解析可能文字データの時、任意の時、強制空要素である時) には省略できません。 JIS X 4151‐1992 6.3.1.1 (1)
  6. [9] [空要素でないこと] その要素の実現値内容であるときは、 省略できません。 JIS X 4151‐1992 6.3.1.1 (2)
  7. [12] [曖昧性を生じないこと] 以上の条件を満たしたとしても、他の要素との関係で曖昧性が生じるときは、省略できません。 JIS X 4151‐1992 6.3.1

[11] なお、開始タグを省略した場合、属性指定並びは空とみなされます。

[20] 2003-12-15: 謎のサンプル - マーク付けノート <http://www.satoshii.org/markup/notes/2003/12#date15>: >>6 に該当すると思われる例。

[25] 冬様もすなる☆日記というもの (2007年9月) (わかば 著, 2007-09-23 12:18:20 +09:00 版) <http://suika.fam.cx/~wakaba/d/d200709>

一見開始タグに見えない開始タグの存在

[23] 実体参照を使用することで、 文書実体中に直接開始タグを記述しなくても開始タグを含めることができます。

例:

<!ENTITY start "<p>">
...
&start;あれこれそれどれ</p>

名前指定実体参照ではなく短縮参照を使用すると、 より開始タグらしからぬ記述ができます。例えば、 前例の一般実体 start記録終了記録開始の2連続と関連付けられているとすると、

<p>段落その1
段落その2

のように書けます (ここでは、終了タグは省略可能であるとしています)

(短縮参照はタグの存在を隠しますが、依然としてタグは存在しています。 その点で >>2- のタグの省略とは異なります。)

[24] ちなみに、実体を宣言する時に

<!ENTITY start STARTTAG "p">

と書いても同じ結果が得られます。鍵語 STARTTAG は、実体の置換文の最初に STAGO を、 最後に TAGC を補うことを求めています。

stago の直後の s

[19] <http://groups.google.co.jp/groups?threadm=ahjfl6%24e3l%241%40yagi.ecei.tohoku.ac.jp>: < A> が開始タグとして認知されるかどうかの話題。

認知されるのではないかという kabe たんの主張に対し、 mimasa たんは認知されないとのご意見。

[21] 特許出願用 HTML のように >>19 を認めている仕様もあります。 <http://openlab.ring.gr.jp/k16/htmllint/notice.html#jpo>

メモ

[26] WEB受付窓口及び金融円滑化「大臣目安箱」 ( 版) <https://www.fsa.go.jp/opinion/>

<body< text="#10115f">

[13] Elements with duplicated attributes are not nonceable. (mikewest著, ) <https://github.com/w3c/webappsec-csp/commit/649393514b9aaf9277bfd21ee1834f4befd029be>

[14] Update customized built-in elements is="" interaction (domenic著, ) <https://github.com/whatwg/html/commit/e5dc6bf18f356225d90decc47ac6ed3be94728a7>