Category taglibro.

たぶんやらないけど、やりたいことを書いとく。

  • まず libxml-ruby を捨てて REXML を使う。もともと libxml-ruby を使おうと思ったのは REXML が名前空間をまともに処理してないからだったんだけど、名前空間とかどうでもよくなった。んで、libxml-ruby は Pure Ruby じゃないのでいちいち環境間で面倒くさい。REXML は標準添付だからその辺は心配ない。できるだけ Pure Ruby じゃない外部ライブラリを使わないようにしたい。
  • ちゃんとライブラリ化する。
  • 公開できるようにする。
  1. トップ
  2. taglibro
  3. taglibro の今後の予定
  1. トップ
  2. site
  3. taglibro の今後の予定

Accept ヘッダによるコンテントネゴシエーションを実装した。昨日 UA による振り分けでごちゃったばっかりだけど、そいつらはコメントアウト。

とりあえず設定ファイルを用意しといて、Accept ヘッダをパースし、品質を割り当て、鯖側の設定値 (qs) と掛け合わせて一番大きいのを選ぶ。application/xhtml+xmltext/html が同じ優先値になった場合は text/html を選ぶようにしてある。これは IE*/* 送ってくる対策。Opera や Firefox は text/html の順位を少しさげてる (0.9) ので、application/xhtml+xml が選択される。

選択といっても flavor の切り替えなので問題があったりする。同じメディアタイプの flavor の扱いがアレ。コメント用 flavor (.comment) も application/xhtml+xml にしたいんだけど、これだと IE でダウンロードされてしまう。とりあえず XHTML 1.0 にして常に text/html で送信するように変えた。この辺は仕方ないというかなんというか……回避するには UA で判定してやる以外ない。flavor がメディアタイプの選択以外の役割を持っているのが悪いっちゃ悪いんだけど、他にいい方法が思いつかない。

  1. トップ
  2. taglibro
  3. Accept によるネゴシエーション実装
  1. トップ
  2. web
  3. Accept によるネゴシエーション実装

全部 XML から XSLT プロセッサを通して XHTML やらなにやらを生成してる。日記部分は動的に、/about とかは静的に、それぞれ別のスクリプトが変換を担当している。日記は taglibro と呼ばれるスクリプト。静的リソースは名前のない build.rb というスクリプトが変換してる。build.rb は Makefile の類でもよさそうだけど、Ruby で書いておいたほうがなんでもできるのでいいや、みたいな。

common.xsl
サイト共通のテンプレートが書いてある。例えば head 要素内やつ。CSS とか、スクリプトを加えたいときはコレだけ編集してサイト全体を再変換させている。XHTML 用。
2html.xsl
静的リソースを変換するためのファイル。ソース XML はちょっとキモイんだけど、実用上問題ないのでいいや、みたいなヤッツケ的スタイルシート。だいぶ前に書いた。
logs/common.xsl
taglibro (日記) 用の共通部分。各種変数 (Content-type 非依存) なものがまとめて書いてある。flavor.(\w+).xsl から include されてる。
logs/flavor.xhtml.xsl
taglibro の XHTML 用テンプレート。

本当なら、taglibro は Accept ヘッダを解析してそれにあったやつを返すべきなんだけどめんどっちくて実装してない。これを実装すると IE に application/xhtml+xml を送らないようにする処理がなくせていいんだけど……(text/html を受け付けるなら flavor.html.xsl を読み込むようにする、flavor.html.xsl は flavor.xhtml.xsl なり、共通部分を分離した他の .xsl を include してやる、みたいな。)

  1. トップ
  2. web
  3. このサイトの構築構造
  1. トップ
  2. xslt
  3. このサイトの構築構造
  1. トップ
  2. taglibro
  3. このサイトの構築構造