仕事のからみで、XML と RDB を適当に (適切に) 組み合わせて扱う必要に迫られたので、実験など。
XML を Perl のモジュールっぽく扱うには、XML::DOM のラッパーとして実装されている XML::EasyOBJ を使って、XML::EasyOBJ のオブジェクトを Template-Toolkit に放り込んでみるといい感じ。
たとえば、扱う XML が
<thread> <article> <no>1</no> <title>そうですね</title> <message>どうしたものでしょうかね</message> <author>ふじわら</author> </article> <article> <no>2</no> <title>Re: そうですね</title> <message>まあ、ぼちぼち。</message> <author>ふじさん</author> </article> </thread>
のような構造だった場合 (掲示板を XML で表現したような場合ね)。 この XML から XML::EasyOBJ のオブジェクトを生成して Template に突っ込めば、
<dl> [% FOREACH article = thread.article %] <dt>[% article.no.getString %] : [% article.title.getString %]</dt> <dd>[% article.message.getString %]<br> by [% article.author.getString %] </dd> [% END %] </dl>
てなテンプレートを書くことで、
- 1 : そうですね
- どうしたものでしょうかね
by ふじわら- 2 : Re: そうですね
- まあ、ぼちぼち。
by ふじさん
というふうに展開できる。
今まで好んで使っていた HTML::Template と比較すると、「オブジェクトを突っ込めばいい」 (そうすれば良きに計らってくれる) という点が魅力的。かつ危険な香り。
HTML::Template は (多分かなり意識的に) テンプレート側に機能を持たさないように実装されているのだが、その気持ちはよく分かる。
テンプレートでいろいろできちゃうと便利なのだが、しかし、無節操にやってしまうとメンテ不能に陥るからねえ。
# かつて PHP でそれをやってしまって、今も面倒を見るのに苦労していることもあり。