WML 2.0 文書を MSXML で表示できなかった、という話。エラーメッセージからして例の相対パスまわりのバグのせいかと思いきや、単純な DTD のエラーが原因だった。WML Deprecated Module に次のような記述がある。
<!ENTITY % xhtml-inlpres.mod PUBLIC "-//W3C//ELEMENTS XHTML Inline Presentation 1.0//EN" "xhtml-inlpres-1.mod"> %xhtml-inlpres.mod;
本来は "http://www.w3.org/TR/xhtml-modularization/DTD/xhtml-inlpres-1.mod"
とすべきところなのだが、誤って相対パスで記述してしまったのだろう。正真正銘の Not Found であって、MSXML は悪くない。
# もっとも、カタログを利用して公開識別子 -//W3C//ELEMENTS XHTML Inline Presentation 1.0//EN
を適切なシステム識別子に対応付けている環境では問題は起こらないのだが、これは XML の世界では余り標準的な方法ではないような気がする。
ad hoc な対処としては、DOCTYPE 宣言を削除するか (僕は WML 2.0 の仕様書を読んでいないので、これが仕様の要件に反するかどうかは知らない)、もしくは次のように記述するかすれば良い。
<!DOCTYPE html PUBLIC "-//WAPFORUM//DTD WML 2.0//EN" "http://www.wapforum.org/dtd/wml20.dtd" [ <!ENTITY % xhtml-inlpres.mod PUBLIC "-//W3C//ELEMENTS XHTML Inline Presentation 1.0//EN" "http://www.w3.org/TR/xhtml-modularization/DTD/xhtml-inlpres-1.mod" > ]>
# 現実の WML (対応を謳っている) UA は、この手の記述を正しく処理できるんですかね。
# つーか、WAP Forum Specifications を参照すると、フィードバックは Technical-Comments mailing list に送るようにと書かれているんですが、実際に送信してみたら Host not found でエラーメールが返ってきてしまいました。どうしたもんでしょ。