[1] [[HTML]] では、[[void要素]]と[[外来要素]]の末尾 ([CODE[[[>]]]] の直前)
に [CODE(char)[[[/]]]] ([DFN[[RUBYB[[[認められている斜線]]]@en[permitted slash]]]]) 
を置くことができます。これは当該[[要素]]が [DFN[[[self-closing]]]]
であること、すなわち[[内容]]が[[空]]で[[終了タグ]]がないことを表します。

[9] [[void要素]]においては、この[[斜線]]はただの飾りです。偉い人にはそれがわからんのです。

[EG[
[22] [CODE[<br/>]] や [CODE[<br />]] は、 [CODE[<br>]] とまったく同じ意味です。
[RUBY[[[斜線]]][スラッシュ]]には意味がありません。
]EG]

[10] [[外来要素]]においては、この[[斜線]]がなければ[[終了タグ]]までが[[内容]]とみなされ、
あれば[[終了タグ]]がなく[[内容]]は[[空]]です。

[EG[
[23] [CODE[<svg/>]] は [CODE[<svg></svg>]] とまったく同じ意味です。また、
[CODE[<svg><g/></svg>]] と [CODE[<svg><g></g></svg>]] も同じ意味です。
]EG]

* 仕様書

[REFS[
- [8] [CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2014-08-01 23:14:59 +09:00]] 版) <http://www.whatwg.org/specs/web-apps/current-work/#syntax-start-tag>
- [31] [CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2014-08-01 23:14:59 +09:00]] 版) <http://www.whatwg.org/specs/web-apps/current-work/#foreign-elements>
- [28] [CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2014-08-01 23:14:59 +09:00]] 版) <http://www.whatwg.org/specs/web-apps/current-work/#self-closing-flag>
]REFS]

* 構文

[29] [[void要素]]と[[外来要素]]では、[[開始タグ]]の [CODE[[[>]]]]
の直前に [CODE[[[/]]]] を1つ挿入できます [SRC[>>8]]。

[30] [[外来要素]]の [CODE[[[/]]]] は、当該[[開始タグ]]が [DFN[[[self-closing]]]]
であることを表します [SRC[>>8]]。[[self-closing]] な[[開始タグ]]を持つ[[外来要素]]は、
[[内容]]と[[終了タグ]]を持てません [SRC[>>31]]。

;; [39] [[XML]] ではこれに相当する構文は[[空要素タグ]]と呼ばれています。

* 構文解析

[32] [[開始タグ字句]]と[[終了タグ字句]]は、 [DFN[[[self-closing flag]]]]
を持ちます [SRC[>>28]]。その初期状態は未設定で [SRC[>>28]]、 
[[タグ]]の[[構文解析]]中に [CODE[[[/]]]] が現れると設定されます。

[33] [[開始タグ字句]]の [[self-closing flag]] は、[[木構築器]]によって
[DFN[[[acknowledge]]]] されることがあります ([[void要素]]や[[外来要素]]で
[[acknowledge]] されるように規定されています)。 [[acknowledge]]
されない場合は、[[構文解析誤り]]です [SRC[>>28]]。

;; [36] [[void要素]]でも、無視される場合 [[acknowledge]] されず、
[[構文解析エラー]]になります。例えば次のような場合です。
[FIG(list)[

- [38] [[in body]] の [CODE(HTML)@en[<[[frame]]/>]] や [CODE(HTML)@en[<[[col]]/>]]
- [40] [[in frameset]] の [CODE[frame]] 以外の[[void要素]]
- [41] [[in body]] ([CODE[select]] 関係の[[素片構文解析]]) の [CODE[input]]

[HISTORY[
- [37] [CODE(HTMLe)@en[[[form]]]] 内の [CODE(HTML)@en[<[[isindex]]/>]]
]HISTORY]

]FIG]

[34] [[終了タグ字句]]で [[self-closing flag]] が設定されている場合も、
[[構文解析誤り]]です [SRC[>>28]]。

[35] [[木構築器]]は、[[外来要素]]を作った時、 [[self-closing flag]]
があれば即座にその[[要素]]を[[開いている要素のスタック]]から除去します。

* 歴史

[11] [[HTML]] で[[認められている斜線]]が使われるようになったのは、
90年代末に [[XML]] ([[XHTML]]) への移行が謳われるようになった頃からです。
[[XML]] は [[DTD]] 無しで構文解析を可能とするため、構文上[[空要素]]とそれ以外を区別できる必要があり、
[[空要素タグ]]構文が導入されました。

;; 詳しくは [[XHTML]]、[[空要素タグ]]を参照してください。

[17] 当時の実装は必ずしもこの構文に対応していませんでしたが、 [CODE[[[/]]]]
の前に必ず[[空白]]を入れることで、未知の[[属性]]とみなされるのか、
どの[[Webブラウザー]]でも意図通り無視されることが知られており、
[[空要素]]には[[空白]]と [CODE[[[/]]]] を挿入するのが新しい良い慣習と宣伝されるようになりました。

[18] しかし00年代も中頃になると [[XML]] への移行が失敗だったことが徐々に明らかになります。
依然として [CODE[[[/]]]] を挿入するのが良い慣習と言われていましたが、
実際には何の意味もなしておらず、 [[HTML5]] は
[WEAK[([[XHTML]] を [CODE(MIME)@en[[[text/html]]]] で送信することは間違いだと説く [[Ian Hickson]] が編集していたこともあり)]]
この[[斜線]]を認めていませんでした。

[19] とはいえ[[斜線]]は意味がなくてもかなり広範囲で使われており、
[[プログラミング言語]]の[[ライブラリー]]などが[[斜線]]を挿入することも多くありましたから、
これを禁止するのは非生産的でした。そのため2006年12月には、
[[void要素]]で[[斜線]]を使うことを認めるようになりました [SRC[>>6, >>4]]。
この[[斜線]]は[DFN[[RUBYB[認められている斜線]@en[permitted slash]]]]と呼ばれました [SRC[>>6]]。

[REFS[
- [6] [CITE@en[Web Applications 1.0 r395 appease the XML gods]]
( ([TIME[2006-12-01 12:25:00 +09:00]] 版))
<http://html5.org/tools/web-apps-tracker?from=394&to=395>
- [4] [CITE@en[Web Applications 1.0 r396 space characters in start tags: the return]]
( ([TIME[2006-12-02 01:19:00 +09:00]] 版))
<http://html5.org/r/396>
]REFS]

[20] ただし、当時の [[HTML5]] には次のような注意書きが含まれていました [SRC[>>6]]。

[FIG(quote)[
> This character has no
effect except to appease the markup gods. As this character is
therefore just a symbol of faith, atheists [['''should''']] omit it.

> この[[文字]]は[[マーク付け]]の神々を鎮める以外には効果を持ちません。
つまりこの[[文字]]はただの信仰の証であり、
無神論者は省略する[['''べき''']]です。
]FIG]

;; [21] >>6 のコミットメッセージからもわかるように、 [[HTML]] に [[XML]]
の構文を意味なく持ち込む“邪教徒”への皮肉が込められています。
この時代にはまだ (実際には [[HTML]] なのに) [[XHTML]] の構文を用いることを良い慣習と考え、
布教する自称専門家が数多くいました。

[24] なお、[[斜線]]が認められたのは[[void要素]]のみでした。 
それ以外の[[要素]]でも[[斜線]]は ([[構文解析誤り]]になる以外は) 無視されるのは同じですが、
無視されても[[内容]]が[[空]]とみなされる[[void要素]]とは違って、
普通の[[要素]]は無視されて[[内容]]も存在するので、認めたとしたら混乱の元でしかありません。

;; [25] 当時は [[Mac OS]] の [[Dashboard]] の[[ウィジェット]]として使われる [[WebKit]]
や [[Opera Widgets]] で使われる [[Presto]] で、 
[CODE(HTMLe)@en[[[script]]]] [[要素]]で[[斜線]]を使うと[[空要素タグ]]とみなされる
(こともある) 実装がなされていました。
これは便利ではあるので、標準化してほしいとの要望も度々寄せられましたが、
[[Web互換]]ではないため却下されています。 [CODE(HTMLe)@en[[[script]]]]
[[要素]]の歴史の項も参照。

[26] 2008年4月には [[SVG]] と [[MathML]] を直接[[HTML文書]]に埋め込めるようになりました
[SRC[>>5, >>7]]。
この時[[外来要素]]にも[[斜線]]が認められるようになりました。
この[[外来要素]]の[[斜線]]は、 [[XML]] の[[空要素タグ]]と同じく、
実際に[[内容]]や[[終了タグ]]の有無に影響するものとして規定されています。

[27] [[XML]] の機能そのものが一部とはいえ [[HTML]] に取り込まれてしまったからか、 >>20
の記述はこの時削除されてしまいました。また、[[認められている斜線]]という用語もなくなっています
[SRC[>>5]]。

[REFS[
- [5] [CITE@en[Web Applications 1.0 r1400  Define the syntax for the upcoming SVG+MathML-in-text/html revolution.]]
( ([TIME[2008-04-05 19:35:00 +09:00]] 版))
<http://html5.org/r/1400>
- [7] [CITE@en[Web Applications 1.0 r1404        MathML and SVG support in text/html: the parsing infrastructure]]
( ([TIME[2008-04-05 22:00:00 +09:00]] 版))
<http://html5.org/r/1404>
]REFS]

[REFS[
- [12] [CITE[IRC logs: freenode / #whatwg / 20090625]]
([TIME[2009-09-05 10:49:16 +09:00]] 版)
<http://krijnhoetmer.nl/irc-logs/whatwg/20090625#l-656>
- [3] [CITE@en[Web Applications 1.0 r4689  Allow space in <br /> syntax.]]
( ([TIME[2010-02-11 18:47:00 +09:00]] 版))
<http://html5.org/tools/web-apps-tracker?from=4688&to=4689>
- [2] [CITE[IRC logs: freenode / #whatwg / 20121104]]
( ([TIME[2012-11-24 02:00:05 +09:00]] 版))
<http://krijnhoetmer.nl/irc-logs/whatwg/20121104#l-337>
]REFS]

* メモ

[13] [CITE@ja[drry+@-> view-source:xhtml:empty tags on Fx2]] ([CODE[2007-02-25 20:03:55 +09:00]] 版) <http://blog.drry.jp/2007/02/05/view-source-xhtml>

[14] >>13 [[Firefox]] 1.5.0.10 で [CODE(MIME)@en[[[text/html]]]]
の[[文書]]で[[空要素タグ]]を見ると赤くなる。

[15] ま、 [[HTML 5]] で[[斜線]]が一応認められることになった以上、
[[Firefox]] もそのうち赤くしなくするんじゃないですか?

[16] [CITE@ja[はてなアイデア - 【Invalid html】link要素タグの終了部分 /> のスラッシュを外してほしい]] ([TIME[2007-08-11 00:52:19 +09:00]] 版) <http://i.hatena.ne.jp/idea/14889>