Safariの実体参照の扱いに関する話

  1. XHTMLの利点云々の前に yamさん
  2. 誰の非なのかを考えろ 真名垣さん
  3. 暗愚はどっちだ yamさん

というやりとりを拝見していて、自分も ™ の実体参照を展開しないのはSafariの問題だと思っていたので、yamさんから再批判が出たことにあれれと思ったのでした。以下、暗愚はどっちだより。

DTDが云々なんて問題では無いので、

実体宣言はDTD内でされるので、この話はまさしくSafariが(外部)DTDに記載された実体宣言を解釈するかしないかという問題なのでは。

Safariは件のリソースを単なるXML文書として認識しているようだ。XML1.0には当然™なんて実体参照は定義されていないので、当然のようにエラーが発生している

たとえ単なるXML文書だとしても、妥当性を検証するXMLプロセサであれば、DTDを解釈して文書中の実体参照を展開するのが当然の動作です。ただ、妥当性を検証しないプロセサであれば、外部のDTDを読み込む必要は無いのですが、だとしてもそれはあくまでアプリケーションの処理能力の問題であって、XML文書の問題ではないと思います。

なぜ単なるXML文書として認識されてしまっているかというと、真名垣氏がスタイルシートの呼び出しに単なるXML文書用の呼び出し方法を使用しているため。

これはどうでしょう。通常、ブラウザはHTTPレスポンスヘッダのContent-Typeを見てメディア型を判断するものなのでは。IEのような、文書の内容からメディア型を判断する処理はあっても構わないかもしれませんが、それで判別を誤ることがあっても、やはりブラウザ側の問題でしかないように思います。

真名垣氏はご自分の公開されているリソースをXML文書として公開するのか、(X)HTML文書として公開するのか、はっきりさせた方がよいのではないか?

無為徒食日記のレスポンスヘッダを見れば分かる通り、Content-Typeを application/xhtml+xml; charset=utf-8 として出力しているのだから、真名垣さんが文書をXHTMLとして公開しているのは明らかだと思うのですが……。(と言うかそもそも該当のページはXML文書・XHTML文書いずれであっても問題無いものはありますが)

* * *

ありみかさんは「やはり Safari がおかしいんでわ」という見解を出されていますが、Safariが「妥当性を検証しないプロセサ」だとすると、外部DTDで定義された実体参照を展開しないのもやむをえないのかなという気はします。ただ、(application/xmlではなく)application/xhtml+xmlの文書を読めるのであれば、W3C XHTMLの文書型宣言を持つ文書に対しては、せめてXHTMLで定義されている文字実体参照を展開してほしいような。しかし仕様からは「そうしなくてはならない」とは言えないようであり、難しいところ。

一方、XML文書作成者の対処としては、相互運用性を考慮して実体参照を用いない(数値文字参照(™)を使う、或いはUTF-8等のエンコーディングで文字をそのまま(™)使う)という選択はあると思います(自分も実体参照を避ける派です)。しかしこちらも「そうしなくてはならない」というものではありません。

追記: 2005-12-21: XHTML と実体参照で、satoshiiさんがより詳しい解説を述べています。