DTDの問題について

IEXMLパーサであるMSXMLにおける問題について

MSXMLにおいては、DTDの宣言内でURIを指定されている場合、そのURIのファイルを解析しようとします。

サンプル

SVG1.1の場合、

<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">

のようにして、SVGファイルの冒頭にxml宣言とともに付けられることが多いようです。
このとき、MSXML6.0はhttp://www.w3. org/Graphics/SVG/1.1/DTD/svg11.dtdのファイルの読み込みと解析を試みた挙句、パーサエラーが検出されます。

SIEでは宣言の削除

W3CDTDそのものが原因なのか、IEの方に原因があるのかはわかりませんが、SIEでは、パーサエラーがあると、画像が表示されなくなるため、DOCTYPE宣言を削除しています。

削除すれば、実体参照が困難に

しかしながら、宣言を削除すると、実体参照であるENTITY宣言までも削除されてしまい、その結果、実体参照が困難となります。
この問題については、開発初期から把握していました。とはいっても、打開策を見出せないのが現状なのです。

これからの方策について

とにかく、SIEでは、http://oshiete1.watch.impress.co.jp/qa4512636.htmlhttp://us.generation-nt.com/answer/msxml-problem-specifying-url-address-doctype-declarati-help-80224512.htmlを参考にしながら、方策を見出していくつもりです。