RSS 0.9のDTDをXMLカタログでさしかえる
Plaggerで、今月に入ってからRSS 0.9のフィードのパースエラーが起きていたので、調べてみた。
の続き。
面倒なのでwiresharkで調べてみたら、libxmlのパーサーはDTDのURLに本当にアクセスしていた。へー。
避ける方法ぐらいあるんじゃなかろうかと思って、libxmlやXMLについて付け焼き刃で勉強してみた。どうやらXMLにはXMLカタログという機構があって、リソースの参照先を指定したり変更したりできるらしい。
というわけで、RSS 0.91のDTDの参照先を設定してみる。以下、Debianでの例。
まず、DTDとXMLカタログを置くディレクトリを適当なところに作る。
$ sudo mkdir /usr/local/share/xml/schema/rss
次にDTDをダウンロードする。
$ wget http://www.rssboard.org/rss-0.91.dtd
以下のようなXMLカタログを作る。ここではcatalog.xmlという名前とする。
<?xml version='1.0'?>
<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog">
<public publicId="-//Netscape Communications//DTD RSS 0.91//EN"
uri="file:///usr/local/share/xml/schema/rss/rss-0.91.dtd"/>
</catalog>
カタログとDTDをコピーする。
$ sudo cp catalog.xml rss-0.91.dtd /usr/local/share/xml/schema/rss
最後に、/etc/xml/catalogを編集して、<catalog 〜>と</catalog>の間に以下のような行を追加する。
<delegatePublic publicIdStartString="-//Netscape Communications//DTD RSS"
catalog="file:///usr/local/share/xml/schema/rss/catalog.xml"/>
とりあえず、PerlのXML::RSS::LibXMLのテストケースは通るようになった。
追記2008-09-21:Debian的には上記の操作を/usr/sbin/update-xmlcatalogでやるのが正攻法らしい。後で調べる。
コメント
コメントの投稿
トラックバック
http://emasaka.blog65.fc2.com/tb.php/451-ce5a0142
DebianやUbuntuでXMLカタログを変更する
RSS 0.9のDTDをXMLカタログでさしかえる
Debian的には上記の操作を/usr/sbin/update-xmlcatalogでやるのが正攻法らしい。後で調べる。
というわけで...
