hAtomを含むXHTMLをサーバサイドでもAtomテンプレートとして使うのはどうか
Ruptaに続いては、MVCのVに関わるライブラリを作ろうと思っています。
さて、あるリソースについて、さまざまな表現でクライアントに返したいことがあります。単純な例は、コレクションリソースをHTML文書として返したり、Atomフィード文書として返したりするケースです。
上記のような場面で使いやすいライブラリとしてまず浮かぶのは、表現非依存のコレクションリソースオブジェクトでしょう。こんなイメージです。
# コレクションリソースオブジェクトを作る resources = MyResources.new resources.title = '岩本隆史の日記帳' resources.author.name = 'IwamotoTakashi' ... # リソースオブジェクトを作る resource = MyResource.new resource.title = 'hAtomを含むXHTMLをサーバサイドでも云々' resource.content = '<div><p>どうしたもんかねぇ。</p></div>' ... # コレクションリソースオブジェクトにリソースオブジェクトを追加する resources.add(resource) # 指定の表現形式で返す case request_format when REQUEST_FORMAT_HTML return resources.html when REQUEST_FORMAT_ATOM return resources.atom end
Atom形式の文字列を生成する MyResources#atom メソッドの内部実装として考えているのは、hAtomを含むXHTMLをXSLTでAtom形式に変換する方式です。そのため、MyResources#html メソッドでは、hAtomを含むXHTMLを返します。
MyResources#atom メソッドの内部実装イメージはこんな感じです。
class MyResources def atom @xslt_processor.transform(self.html, 'hAtom2Atom.xsl') end end
ERBなどのテンプレートやREXMLなどのビルダを使うよりコストが高いでしょうが、セマンティック・ウェブに貢献すべくXHTMLにhAtomを含めるならば、テンプレートを別に持たなくてよいぶん、XSLT変換のほうがDRYに実装できるはずです。
今のところ、そんなことを考えているという話でした。