OPML
ちょっとOPMLについて調べようとした.
googleでOPMLを検索するとトップに来るのがここ
- What is OPML?
- http://www.opml.org/
確かにXMLのFormatの説明だけど何か変だなと思ったら
Outline Processor Markup Languageってあなた......
あれっと思ったけど,これで正しいらしい.
同じ事を考えた人はいるようで
ところで、OPML って元々「アウトラインフォーマットを XML で記述する」(mojix.org)ための規格だと思うのですが、RSS アグリゲーターの巡回先リストをそれで表現するというのは本来想定されていた使い方として正しいのかな?
OPMLの仕様は公開されている...とあちこちのBlogなんかでは書いてあるが,実際には仕様なんてものはガチガチのXML屋である僕に言わせればないに等しい.どうもoutlineというElemenetに好きな属性を定義して適当にぶち込んでねというものらしい.DTDに%OtherAttributes;って書いてある.
したがってOPMLの仕様を読むだけでは,OPML(正確にはRSSアグリゲーターが使用するOPML)を読み書きするソフトを作るには不足で,一般的なRSS アグリゲーターが使用している%OtherAttributes;の仕様がわからないとだめである.
RSS アグリゲーター用の%OtherAttributes;の仕様はどうも業界慣習的にというかデファクト,つまり著名なRSS アグリゲーターが吐き出したり,読めたりする属性ということになっているらしい.やれやれ.
追記
「王様の耳はロバの耳」な話なのかもしれないが、OPMLって本来のアウトラインプロセッサー用のフォーマットとしては使い物にならない出来がよろしくないんじゃないかという気がしてきた。
理由はOPMLの設計方針が何でもかんでも属性値に詰め込もうとしていることである。
たとえば以下のようなテキストをOPMLのoutlineエレメントに格納しようとする。
ある晴れた昼下がり市場へ続く道
これはHTMLライクなフォーマットなのでデータ的には以下のような文字列になる。
ある<i>晴れた</i>昼下がり<b>市場</b>へ続く道
これをoutlineエレメントに格納しようとすると当然こうなる
<outline text="ある<i>晴れた</i>昼下がり<b>市場</b>へ続く道"/>
でもXML的にはこんなことは許されないのだ.
アンド記号(&)及び不等号(小なり) (<)は,マーク付けの区切り子として,又はコメント,処理命令若しくはCDATAセクション内で使用する場合にだけ,そのままの形で出現してよい。これらの文字は,内部実体宣言のリテラル実体値内に記述してもよい。詳しくは,"4.3.2 整形式の解析対象実体"を参照。 これらの文字が他の部分で必要な場合,番号による文字参照又は文字列"&"及び文字列"<"を使用して別扱いしなければならない。不等号(大なり) (>)は,文字列">"を使用して表現してもよい。内容の中で列"]]>"を使用するときは,それが,CDATAセクションの終了をマーク付けしない限り,互換性のため,">"又は文字参照を使用して別扱いしなければならない。
したがって,上の例で言うと,textの属性値の扱いは,中身は修飾情報をとっぱらってプレーンなテキストだけにするか,あるいはテキスト中のタグを文字参照に変えちゃうかのどっちかということになる.どっちにしろうまいスマートな解決策ではない.
ちなみにOPMLを採用している何だかよくわからないソフトRadio Userlandはどうしているかというと,タグを文字参照に変えてしまうやり方で解決している.
なんつうか頭悪すぎるフォーマットだ.センス悪すぎ.こんなフォーマット作るなよ.もうちょっとましな作り方があるだろう.
ちなみにOPMLはRSS界の有名人,Dave Winer氏が関わっているらしい.なんかRSSもすっきりしないフォーマットだと思っていたが,なるほろ.
毀誉褒貶が激しい人らしいが,個人的には嫌いになる理由が明確に出来たにゃ.
追記
どのへんが気持ちわるいかを書くのもネタになるかな。
とりあえず
- XMLにのせるならタグは閉じるのが筋だと思う
- コンテンツみたいな状態は属性じゃなく要素として扱うのが筋だと思う
の二点