熱湯3分

熱湯注いで、フタして3分。何が飛び出す? / 書感、ヲチ、ほか / って小説読む時間が無いよ orz

某所で、<a href=""><img ><a href=""></a> なる記述を見付けた。見ての通り </a> が足りない。当然 HTML として invalid なのだが、念の為に裏付けを、と調べてみる。

HTML 2.0 (RFC1866) の場合。

<!ELEMENT A - - %A.content -(A)>
9.1. HTML DTD [Page 53]

HTML 3.0 の場合。

<!ELEMENT A - - %A.content -(A)>

HTML 3.2 の場合。

<!ELEMENT A - - (%text)* -(A)>

Anchors can't be nested and always require start and end tags.

HTML 4.01 の場合。

<!ELEMENT A - - (%inline;)* -(A) -- anchor -->

A要素で定めるリンク及びアンカーは、入れ子にしてはならない。すなわちA要素は、他のA要素を内容に含んではならない。

HTML 5 (W3C Working Draft 23 April 2009) の場合。a要素のタグ省略について明確な言及は見付けられなかったが、Optional tags に記述されていないため、おそらく従来の HTML と同様、省略不可。

Content model:
Transparent, but there must be no interactive content descendant.

HTML 5 ― HTML 4 からの変更点 (2009 年 4 月 23 日付 W3C 草案 (Working Draft)) によれば、

  • a 要素について) これまで phrase content (インライン要素またはテキスト) のみに限定された内容モデルが変更され、flow content (ブロック要素) も含むことができるようになりました。

という変更が施されている。 これは 2009 年 2 月 12 日版で導入された模様。

ちなみに2008 年 1 月 22 日版から2008 年 6 月 10 日版までは Phrasing content, but there must be no interactive content descendant. だった。

XHTML 1.0 の場合。

a
must not contain other a elements.

XHTML Modularization 1.1 の場合。

Hypertext Module の Minimal Content Model を見ると (PCDATA | Inline - a)* であり、a要素が除外されている。

XHTML 2.0 (W3C Working Draft 26 July 2006) の場合。

Hypertext Module の Content Model を見ると (PCDATA | Text)* であり、また Text Modulea要素を含まない。ただし XHTML 2.0 では href属性Hypertext Attributes Module で定義されている。

If elements contained within an element using an href also use an href attribute, the User Agent must provide a mechanism for actuating any of these "nested" URIs.

HTML Tidy を通すと、

$ cat | tidy 2>&1 | fgrep href
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <title>sample</title> <a href="a">xxx<a href="b">yyyy</a>

閉じタグ </a> が補われた。

<a href="a">xxx</a><a href="b">yyyy</a>

▼この記事へのコメント(あれば表示)

■ コメントを投稿する
管理者にだけ表示を許可する
 
この記事のトラックバックURL

▼この記事へのトラックバック(あれば表示)