本を読む

読書やコンピュータなどに関するメモ

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でやるのが正攻法らしい。後で調べる。  というわけで...

 | HOME | 

Categories

Recent Entries

Recent Comments

Recent Trackbacks

Appendix

emasaka

emasaka

フリーター。
連絡先はこのへん

Monthly


FC2Ad