今の実装だと「カテゴリごとの latest」とかが作れない。いらないっちゃいらないけど、もうちょい汎用性を高くしたい。そうすればソースも綺麗になるはず。まじめに設計とかしたほうがいいんだけど、頭悪くてできない罠。設計って実装してるときよりつまらんし。
まず、今のところ変換に使う xsl ファイルの名前を完全に決めうちしてる。latest とか 日付別のときを完全に別に (switch) 処理してる。この辺もうちょい綺麗にしよう。速度落ちても、綺麗なほうがいい。読みにくいソース書いてると未来の自分が激しく困る。俺書いたの絶対覚えてないし。
latest は日付と考えるべし。ってことで /web/latest /web/2004 /web/2004/06 とかが形的に等価。category.xsl を作るんじゃなくて、year.xsl, month.xsl, latest.xsl をカテゴリに対応させるほうがいいな。よく考えればあたりまえだ……。/web とか / とかでアクセスされたときはどうしようか? 一覧だけ表示させて、カテゴリが指定されているときはそれをリンクパスに含めるだけでいいか。
param にカテゴリーが指定されていたら、そのカテゴリを含むセクションだけを抜き出して、されてなかったら全部表示。year.xsl が問題だ。一年分を読み込んで変換させるのはどれぐらいコストかかるだろう。
path info の最後の部分に /\..+?$/
があったら取り除いて、flavor にする。xsl 適用するまえに xsl ファイル名 + .flavor が存在するかを fileexists
で調査。あったらそれを適用させて出力。なかったらデフォルト (XHTML とか) 適用させる。このとき設定ファイルに指定された flavor の content-type が指定されていたら、それを送信する。指定されてなかったらデフォルト (text/xml) 送る。ただし application/xhtml+xml の場合は馬鹿なブラウザのために特別に accept で (それ以上のことはしない) 振り分けてあげる。