validなFeedとwell-formed XML

xmlnsを利用して、Feedを拡張した場合、validatorにvalidじゃないと怒られる事がある。

個人的に、「だからどうした、読めればいいだろ」と思ったりもするんだけど、validatorを利用してエラー処理をしてるFeed処理系とかがあるとまずい。メジャーなフィードリーダーはその辺ゆるめだよね?少なくとも、ブログフィードでよく利用されてるFeedburnerをはじくような事があるなら、結構大々的に取り上げられてるはず。なので、きっとvalidかどうかは問題じゃないんだと思う。

以前どこかで、『IE7はwell-formed XMLしか読まない』といったニュースを読んだ気がするんだけど(IE6もそう?)、well-formed(整形式) XMLである事とvalidなFeedである事はイコールじゃないよね?Feedのvalidatorがどうやって実装されてるのか知らないんだけど、あれはFeedの各仕様に沿って判定してるんだよね?

Feedが有効であるかどうかを判断したい場面は結構あって、その時に何を使って判断するかはちょっと考えた方がいいのかも。個人的に、『仕様に沿っているかどうか』よりも、多くの処理系で『必要な情報を正しく読み取る事が出来るか』が問題なんだと思う。なので、well-formed XMLであればいいんじゃないかと思う。(RSS2.0の場合)item内にtitle,description,linkがあるかも知りたいけど、無きゃ無いでデフォルトで埋めても何とかなるし。

この辺の認識ってどんな感じで同意されてたり共有されてたりするのかな?ひょっとして、かなり恥ずかしい事を今更考えてたりするのかな。

『Feedはサマリ情報であって、RSSとかの規格は関係ない』みたいな事は一般的(?)だと思うんだけど、それを考えると『Feedを利用するアプリケーション』を作る場合は『妥当な体裁』を保てていればよしとしていいと思う。勿論、RSSという規格ありきの『厳密性』が大事である場合は、ちゃんと仕様に沿ったvalidatorを通すべきなんだとは思うけど。

けど、『折角仕様を決めたんだから、それは守りなさい』という気持ちもあると言えばある。HTMLみたいに、ブラウザのベンダごとに独自仕様が作られて混乱気味の世界がある訳だしね。

RSS/Atom用に作られたparserライブラリの事も考えないと駄目なのかな。これがvalidであるかどうかを前提に実装されてるなら、validである事にこだわらないといけない。けど、RSSにしろAtomにしろ、parserは受け取るデータをXMLだって解釈するよね?きっと、libxmlだかなんだか辺りを奥底では使ってる気がする。それであれば、結局well-formed XMLであれば問題は無いんだよね?文字コードの問題は別として(well-formed XMLと関係あるのかな?)。

というわけで、会社で『それvalidじゃないよ』ツッコミをいただいて、validじゃない場合の影響がよくわからくなってたので頭を整理してみました。validatorに怒られるのは気持ちいい事じゃないけど、『大概使える』のであれば問題ないというのが結論でいいのかな?


補足ですが、『フィードリーダーで読み込むデータはwell-formed XMLであれば何でもいい』という話ではありません。あくまで、標準化されたデータフォーマットの利用が前提です。ただ、原則として仕様には従うけど、多少余計な(validじゃない)要素が増えてても対応出来る事が現実的だよねという事を確認しましたという話です。

追加で、ちょっと気になったのですが、is_validでなくて、レベルを返すfeed用validator(tester?)ってあるんでしたっけ?

$level = array('valid_xml_feed' => 0, 'well_formed_xml_feed' => 1, ...);
if (xml_feed_test($xml_feed) <= $level['well_formed_xml_feed']) {
    ....
} else {
    
}

適当ですが、上の様な感じで妥当とするレベルで処理を判断したらやり易いかな、と。きっと知らないだけでもっと適切なものがあるんでしょうね。
あまり気にする必要はないと思いますが(アプリケーションが処理出来れば問題ない)、『妥当なRSS/Atom(well-formed Feed?)』という判定が出来合いのサービスやライブラリで出来るなら、名前だけでも知りたいかな、と。

Googleをさまよっていると、どうもRSS parserのエラーメッセージが目につきます。『... not well-formed XML ...』。一般的なRSS parserでは、well-formed XMLであれば処理しますというスタンスという事でしょうか。


Perlでは、XML::LiberalというCPANモジュールを利用すれば、well-formedでないXMLも扱えるらしいです。

プロフィール

このブログ記事について

このページは、koshigoeが2006年7月11日 22:06に書いたブログ記事です。

ひとつ前のブログ記事は「マイヘルプ」です。

次のブログ記事は「会社の技術チーム用ブログ」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。