RSS feed の HTML 埋め込み雑感
「メディア・パブ - RSSフィード論争,“抜粋 vs 記事全文”」を読んでいて思ったんですけれど,この頃 XHTML を RSS feed の discription 要素に埋め込むケースが随分と増えてきました。この扱い方,普通はどうしてるんでしょう。
RSS によるシンジケーションは,もともとプレインテキストを埋め込むつもりだったようなので,その内容である description 要素も単純に文字列として解釈したいはずです。実際,RSS の DTD をみると,どのバージョンも,
<!ELEMENT description (#PCDATA)>
となっています。
それじゃ,どうやって XHTML を埋め込んだんでしょう。ちょっと気になったので,InfoWord の RSS feed (RSS 2.0)を拝見しました。かなりはしょって引用すると,次のとおり。
<description> <p>Microsoft Distinguished Engineer ... </p> <p><i>InfoWorld</i>: What was ...</p> <p>Hejlsberg: It was effectively to create ...</p> <!-- snip --> </description>
うーん……やっぱり文字列として扱っているみたいですね。XHTML と RSS の名前がかち合うことはないんだろうけど,名前空間は別だから一緒に書くことはできません。そんなわけで,文字列に直した上の例の場合,これはこれで Valid なはずです。
おそらく,もう少しスマートなやり方は,CDATA セクションで区切ってしまうことなんだと思います。上記の例なら以下のような感じ。
<description> <![CDATA[ <p>Microsoft Distinguished Engineer ... </p> <p><i>InfoWorld</i>: What was ...</p> <p>Hejlsberg: It was effectively to create ...</p> <!-- snip --> ]]> </description>
いずれにしても,文字列として扱うことには変わりありません。
ただ,こうすると XHTML 部分の構文解析が(少なくとも RSS feed を解析する段階では)全くできないという不都合があります。処理としては,RSS feed の XML 構文解析をしてから HTML の文字列を取り出して,それをさらに XHTML として構文解析することになるんでしょう(多分)。feed の解析段階で一気に XHTML 部分も解析したい場合は,名前空間を使うことになります。例えば,以下のような感じ。
<rss version="2.0" xmlns:html="http://www.w3.org/1999/xhtml"> <!-- snip --> <description> <html:p>Microsoft Distinguished Engineer ... </html:p> <html:p><html:i>InfoWorld</html:i>: What was ...</html:p> <html:p>Hejlsberg: It was effectively to create ...</html:p> <!-- snip --> </description> </rss>
なんでこんなにまどろっこしいことを考えているのかというと,これからの feed シンジケーションを考えたときに,RSS はしんどいんじゃないかと思ったからです。例えば,冒頭記事にもあるとおり feed に広告を載せるとかいう話になると,シンジケーション自体がかなりリッチなメディアになりえます。そして,このことは当然のことながら,feed クライアント(feed リーダー)も高機能化していくことを意味します。
この話,広告みたいな牧歌的なモノならどうでもいいんですけれど,もう少し押し進めると feed によからぬスクリプトを埋め込む向きも現れることを考える必要があります。そうしたときに,RSS に埋め込まれたのプレインテキストを泥臭く XML (の一部)としてパースし直すというのは,あまり現実的だとは思えません。つまり,サニタイズ(無害化)するためのライブラリができる程度に,フォーマットの側が抽象化(構造化)できてなくてはならないということです。
一方,Atom の content 要素の場合は,ここら辺の手当てがある程度なされていて,type 属性によって (X)HTML を直接埋め込むことができます。type 属性の値が将来的に MIME の方向に動くのかはよく分からないんですけれど,今後 content 要素の中身が充実していくことは予想できます。もしかしたら,そのうちテキスト中心のコンテンツを配信するサイトは feed を中心としたメディアになるかもしれないわけで(ブログのようなコンテンツとして配信するのは,もっぱらバックナンバー),そうしたときに feed にどのような内容を盛り込むべきなのかは,案外重要な問題になってくるようにも思えます。
憶測ばかりの話になっちゃったんですけれど,とりあえず,そろそろ feed の中身について立ち止まって考える時期なのかな,とか思っちゃったというハナシでした。ちゃんちゃん。(考えてなかったのは,あたしだけだったんでしょうが。)

