酒日記

2002 06 25

Tue, 25 Jun 2002

初孫 いなほ 純米吟醸 (15.5% × 300 ml)


一番絞り 樽生 (5.5% × 900 ml)

仕事のからみで、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 でそれをやってしまって、今も面倒を見るのに苦労していることもあり。


powered by blosxom