Re: 空要素タグの文法

※ML が処理できていないようですので、再送します。

こんにちは。渡部巧といいます。

北村 (kits) さん >
9.1.2.1 に関連した、より詳細なアルゴリズムが記述されている "9.2.4 Tokenization" を追いかけてみました。
結論としては、次のことがいえました:

 「9.2.4 の定義では <br > <br /> <br/> <br> をすべて許容する」

よって、"9.1.2.1 Start tags" の説明が誤解を招く表現であり、修正する必要がある……といえるのではないかと思われます。

各位 >
ツッコミなどありましたらお願いします。

----------

以下詳細です。

長くなるので、<br /> の場合のみ記述しています。
他の場合も同様に追いかけることができます。

(1) 9.2.4.8 Tag open state
解析済:<
次文字(註1):b
http://www.whatwg.org/specs/web-apps/current-work/multipage/tokenization.html#tag-open-state
U+0061 LATIN SMALL LETTER A through to U+007A LATIN SMALL LETTER Z
→ "tag name state" へ

(2) 9.2.4.10 Tag name state
解析済:<b
次文字:r
http://www.whatwg.org/specs/web-apps/current-work/multipage/tokenization.html#tag-name-state
Anything else
→ "tag name state" を続行

(3) 9.2.4.10 Tag name state
解析済:<br
次文字:U+0020
U+0009 CHARACTER TABULATION
U+000A LINE FEED (LF)
U+000C FORM FEED (FF)
U+0020 SPACE
→ "before attribute name state" へ

(4) 9.2.4.34 Before attribute name state
解析済:<br
次文字:/
U+002F SOLIDUS (/)
http://www.whatwg.org/specs/web-apps/current-work/multipage/tokenization.html#before-attribute-name-state
→ "self-closing start tag state" へ

(5) 9.2.4.43 Self-closing start tag state
解析済:<br /
次文字:>
http://www.whatwg.org/specs/web-apps/current-work/multipage/tokenization.html#self-closing-start-tag-state
U+003E GREATER-THAN SIGN (>)
-> 終了(註2)


註1:「次文字」は原文では "next input character"(次の入力文字)です。
see also: http://www.whatwg.org/specs/web-apps/current-work/multipage/parsing.html#next-input-character

註2:本当は少し処理が続きますが割愛。

--
Taku Watabe (taku_eof)
http://end-of-file.net/
Be strict with yourself.


2009年11月30日21:55 kitamura <kits@akatsukinishisu.net>:
> 北村と申します。はじめまして。
>
> 最近になって、HTML5の空要素の詳細な文法規則を確認しようと思い、
> 9.1.2.1 Start tags
> http://www.whatwg.org/specs/web-apps/current-work/multipage/syntax.html#start-tags
> を読んだのですが、気付いたことがあったので報告してみます。
>
> 箇条書きのところをざっと訳してみると、
>
>  1. 開始タグの先頭文字は U+003C LESS-THAN SIGN (<) でなければ
>     なりません。
>  2. 開始タグの次の数文字が要素のタグ名でなければなりません。
>  3. 次の段階に何か属性があれば、最初に、1つ以上の空白文字が
>     なければなりません。
>  4. そして、開始タグには、幾つかの属性があるかもしれません
>     (その文法は以下で説明されます)。属性は1つ以上の空白文字に
>     よって互いに分けられるかもしれません。
>  5. 属性の後に、1つ以上の空白文字があるかもしれません。(いくつかの
>     属性は、空白が後に続くことを必要とします。以下の「属性」の
>     項を見てください)
>  6. そして、要素が空要素の1つであるか、または要素が外部要素で
>     あれば、一つの U+002F SOLIDUS (/) があるかもしれません。
>     この文字は空要素においては何の効果もありませんが、外部要素に
>     おいては、この文字は開始タグが自身を終了するものであることを
>     示します。
>  7. 最後に、U+003E GREATER-THAN SIGN (>) により開始タグを
>     閉じなければなりません。
>
> となりました。この文に沿って考えると、例えば属性なしのbr要素について、
> <br> や <br/> はどちらもOK、ということは言えますが、
> <br > や <br /> のような、要素名の後に任意の空白が入る書き方を
> 認めていないように見えます。
> (要素名からタグ閉じまでの空白は3番、5番で説明されていますが、
>  どちらも属性が存在する場合に限定された記述となっています)
>
> しかし仕様の意図としては、HTML4, XHTML1双方からの移行を容易に
> するという意図で / があってもなくてもよいようにしていると
> 思うので、であれば、XHTML1で多く使われている <br /> のような
> 書き方でも可となるよう、仕様の文章を修正すべきではと考えます。
>
> 参照: WHATWG FAQ - 日本語訳 - HTML5.JP
> http://www.html5.jp/trans/whatwg_html5faq.html#Should_I_close_empty_elements_with_.2F.3E_or_.3E.3F
>
>
> ※以上の話は以下の記事でも言及しました。
> http://www.akatsukinishisu.net/itazuragaki/html/html5_void_elements_syntax.html
>
>
> --
> 北村曉 kits@akatsukinishisu.net
> http://www.akatsukinishisu.net/

Received on Tuesday, 1 December 2009 08:31:51 UTC