2004年 08月 04日

msxsl | xmllintmsxsl | xmllint

サイト全体を XML + XSLT 化? の続き。ファイル名から判断して msxsl に突っ込むスクリプトを書く。具体的には index.html.xml というファイルがあったら 2html.xsl を使って index.html に出力するというもの。

書いたはいいとして、何故か実行するたびにエラーがでたりでなかったり……パイプの使い方を間違っているんだろうかとかなんとか思ったり思わなかったり。

xyzzy で CDATA 領域に -- が奇数個あるとそれ以降ファイルの最後までコメントとみなされて困る……

2004年 08月 03日

マルチランゲージ。ネゴシエーションな風景multilanguage. the sight of negotiation

/latest /latest.ja /latest.rdf /latest.rdf.ja /latest.en.rdf のようなパスを全部受け入れるとしたら、どうやって言語部分とフレーバー部分を区別したらいいだろう? どう考えてもどっちがフレーバーでどっちが言語コードかなんてプログラム側には理解不能だから、設定として言語コードとして扱う文字列を設定する必要があると思うけど、ホントはもっとスマートな方法があるんじゃないかとかって考えたりもする。設定項目が多いのはうざったいし。まぁ Apache の mod_mime AddLanguage みたいになるんだろうけど。

XSLT 側で殆どやることになることに間違いない (そういうものだから!) 。大体カテゴリによるフィルタリングと同じようなことをするし。でも複数言語を対比させて表示させるのも面白いんじゃないか、とか思わなくもなかったりしたりとかしなかったりとかこれやろうとすると多分ひどく面倒くさい。動的に XSLT の条件部分の式が増えたりすると思うから。つか無理? できるとしたら latest.ja+en とかになるのかな。。面倒なのは latest の場合の表示だろうなぁ。latest の場合はスクリプト側にちょっと手を入れる必要がある。その言語(カテゴリ)が含まれていないセクションは無視して、最近の n 日分を表示しないといけないし、その分を考えてスクリプト側で合成する必要があるから。

つーか一番面倒くさそうなのは変換後の xml:lang だよなぁ。ルート要素をどうするとか、いろんなメッセージをどうするかとか。

と、実装方法だけ考える夏の日。気づいたら夜。昼寝る。夜寝る。朝寝る。私寝てる。いつも寝てる。夢を見る。桜がふる夢を見る。雨がふる夢を見る。落ち葉がふる夢を見る。雪がふる夢を見る。一年がすぎる夢をみる。一生がすぎる夢を見る。

セクションは常に表示すべきか。指定した言語で書かれていないとしても、他の言語へのポインタは書いておかないと「あるかどうか」さえわからないし。もしこうするなら、スクリプトの修正が無駄に終わったことになる。(つっても XPath 書き換えただけだけど)

なんかなんとなく結局実装中。んで頭カオス

大体やった。でも何故か PHP がクラッシュしたりするので、一部やってない。つまり、言語指定したページでもリンク先は言語指定してないページになったりする。

まじもう最高に混沌ブレインなので今日はやめよう……ぶっちゃけ使わないし

RSS のカテゴリ別

RSS をカテゴリに対応させるのを忘れてた。あとでやろう。

直したつもり

2004年 08月 02日

RSS と Atom の Content-Type ヘッダを変更

した (RSS1.0 = application/rdf+xml, Atom = application/atom+xml) のだけれど、これマトモに設定するとダウンロードになっちゃうんだよなぁ……まぁ分かってたことだから今まで text/xml で送ってたんだけど……なんでダウンロードしちゃうかなぁ。application だからだよなぁ。XML のときはパースしてくれりゃいいのに。せっかく xsl-stylesheet とか書いてるんだからさー

RSS の並び順の修正

RSS と Atom の並び順が新しい順じゃなかったのを修正。d:section も <xsl:sort select="@datetime" order="descending" /> でソートするようにした。この場合 position() だけでセクション位置を取得するとカオスるので last() - position() + 1 でOK。

検索

検索ってどうやってやろうかなぁーあれないと俺不便だよなーって考えてて思った。別に俺不便じゃないのよ。grep すればいいんだもん。あーそうか。あーそうか。んじゃグーグルに任せていいや。

サイト全体を XML + XSLT 化?

少し前現状 PHP にクエリ突っ込むような形しかないけど とか書いてるけど、別にローカルで変換させてふつーの HTML を転送したっていいじゃん。っていうかそのほうがいいじゃん。

2004年 08月 01日

section/@datetime についてのメモ

section/@datetime が存在しなくても問題ないようにしよう。そうすれば tDiary のデータをもっとスマートに移行できる。ただ、tDiary のデータを XML にするのがひどく面倒くさいけれど……

せっかく tDiary とほぼ同じデータ構成なのだから、できれば完全にこちらにデータを移したい。

section/@datetime がなくても問題がないようにしてみた。といっても XSLT ファイルを修正しただけ。しかも表示しないようにするとか、そういう……

2004年 07月 31日

サイト全体を XML + XSLT ?

サイト全体を XML データをもとにして XSL 変換したほうが楽っぽいなぁ。辞書とか、ヘッダ・フッタとかの共通部分を完全に一箇所にまとめられるし、XSLT っつうちゃんと仕様の決まってるやつをテンプレートとして使うから他人が構造を見ても (まずないけど) 理解しやすいし。

とりあえずそれっぽい XML データを変換する XSLT を書いてみた。んでも XML データがどうしても脳内 DTD なわけで……ただ単に簡略化した XHTML のほうがいいだろうか。でも h 要素使ってるテンプレ側で h1 要素を固定した場合、データに直接 h1, h2 と書いてしまうと面倒くさいので。し……どうやって変換すればいいだろう。っていっても現状 PHP にクエリ突っ込むような形しかないけど……

2004年 07月 30日

Namespace の問題

ネームスペース関連でめんどくさいことが……。共通化した XSL ファイルの中で本文を変換したりとか、共通部分を出力するテンプレートとか書いているのだけれど、デフォルトネームスペースの違うほかのフレーバーファイルでそれをインクルードして、その共通化されたテンプレートを適用すると、ネームスペースが新たにコピーされてしまう。本文を出力しているやつはかなりアドホックな対応<xsl:text disable-output-escaping="yes">&lt;</xsl:text> のようなのを書いて直接タグ作ってやるっちゅうローテクな方法。で見ないことにしてきたけれど、abbr 要素簡略化やらにそのアドホックな方法を適用すると非常に醜い。

共通化した XSL ファイルでデフォルトネームスペースをなくせばいいかと思いきや、それでも xmlns="" という属性が付いてしまう。どうしたらよいやら……

フレーバーごとに別の共通 XSL ファイルを作るのが(全く同じことを繰り返すのでスマートではないが)一番単純明快だよなぁ。それ以外に今のところ解決方法を思い浮かばない。ただ、Atom のように、ちゃんとネームスペースを宣言した中で呼び出す限りは問題ないので、RSS のフレーバーだけ同じことを書き直すことになる。うーむ。

とりあえず RSS のやつだけほぼ同じのをコピペRSS の場合は footnote の出力を変えなきゃいけないから、まぁいいかもしれない。どっちにしろ同じのを何度も書くのは好きじゃないけど……