XML空要素タグのHTML的解釈・付記

前のの続きです。securecatのMTのていうか、簡略終了タグで閉じるscript要素があると、IEどころかFirefoxでも表示できなかったより。

WinIE6が表示できないのではなく、HTMLの妥当な解釈として、scriptタグ以降をscript要素の内容とするために表示できない、ということではないでしょうか。

それがつまり「WinIE6はXHTML的な解釈をできない」ということでもあるように思いましたが、よくよく思えばapplication/xhtml+xmlを読めないという時点で、WinIE6は事実上text/htmlとしてしか解釈できないブラウザであって、常に(?)HTML的な妥当な解釈をするわけであり、であればscript要素が閉じられていないなら続く文字列はCDATA扱いになって……という流れになるのは必然的ですか。

前提で少々混乱があるような気がします。そもそも、どんなアプリケーションであっても、text/htmlの文書をHTMLとして解釈するのは、至極当然の動作なのでは。そのアプリケーションが他のメディア型を読めるかどうかというのは、また別の問題だと思います。

逆に、text/htmlである文書をXML(XHTML)として解釈するアプリケーションがあるとすると、それはそれで問題というか、余計なお節介であるように思います。それは例えば、text/plainで文書を送っているのに、HTMLタグが書かれているとHTML文書として解釈してしまうブラウザと似たようなものであり。

ひとたびHTMLとして解釈すると決まれば、<script /> というタグはHTML的解釈により単なる開始タグと扱われ、その後に続く文字列がCDATA扱いとなるのは、やはり必然的だと思います。

ところでコレ、そもそもは“「 」 - 日記 - 最新3日分”を見てて、なんでIEだと背景しか表示されないの?というところから始まった話なんです。そんで、Firefoxでは表示されるのですが、HTTP Response Header の Content-Type は text/html じゃないのかなァ……というか、Firefoxのエラー処理で表示されているという感じなのでしょうか。

そういう感じだと思います。Firefoxが内部でどういう解釈をしているかについては、右クリックメニューの「選択した部分のソースを表示」で見ることができ、また「全てを選択」(Ctrl + A)してから「選択した部分のソースを表示」すると、head要素内も含めて確認することができたりしますが、試しに、

<html>
<head>
<script>
<title>test</title>
</head>
<body>
<p>this is test.</p>
</body>
</html>

というHTML文書をFirefoxで開き、Ctrl + A → 「選択した部分のソースを表示」してみると、

<html><head>
<script></script>
<title>test</title></head>
<body>
<p>this is test.</p>
</body></html>

となりました。script開始タグ直後でscript終了タグが補われていることが分かります。ちなみにscriptタグを <script /> としても、同じ結果でした。

先の記事で「エラー処理」と書きましたが、CDATA中に"<"や">"が現れるのはエラーではないので、違う言い方をすべきだったかもです。「より妥当なHTMLとなるような解釈を試みる処理」ということになるのかな。

* * *

更に追記。securecatのMTのRe: XML空要素タグのHTML的解釈・付記より。

というか、XHTML 1.0文書はメディアタイプがtext/htmlだったら、HTMLとして扱われるのが普通なのかしら。

正にその通りだと思います。……って、思うだけでなく根拠を示さないと駄目なので、ここで(またしても)XHTML Media Types(原文)をひきます。3.1. text/htmlより。

text/html として提供された XHTML 文書は、XML [XML10] としては処理されない。例えば、UA は整形式性に関するエラーを検証しないかも知れない。また、DOM やスタイルシートに対しても HTML の構文が適用されるであろうという点にも注意されたい

実際、MozillaやMozilla Firefoxではそういう動作――text/htmlで提供されたXHTML 1.0/1.1文書をHTMLとして扱う動作――をしています。