2004年 11月 30日

CRON で殺される。

何か Killed って言われるので6時から3時にしてみた。Ruby で日記の XML をセクションごとに HTML にわけるところで Killed。mknmz も中途半端に終わったらしく NMZ.lock2 が残ってた。謎。

横スクロール

img 要素がはみ出したり、Gecko では URI が折り返されなかったりで横スクロールがでるけど確実にうざいので対策。

CSSimg { max-with: 100% }, p, dt, dd, li { overflow: hidden } にしてみた。どんな弊害があるかしら。

と思ったら後者で float したところに流れ込まなくなった。なんでだろう。

float させてる中に画像があると大きさが 0 になっちゃうか。だめだなこりゃ。さくじょー

2004年 11月 29日

XSLT と XPath の理解

とりあえずカレントノードとコンテキストノード。

カレントノード = current() で、コンテキストノード = self::node()。カレントノードは XSLT のもの。XPath には current() という関数はないし、そもそも必要ない。

current() が変わるのは xsl:template 又は xsl:for-each。選択 (select) されたノードが current() になる。

self::node() が変わるのは /, [ ]。(別に変わるとは限らない……)

基準点とノードテストがまだあんまり理解できてない……

画像をてきとーに一覧表示する。

/view-img/2003/ みたいな。

RDF は画像ファイル自身に埋め込んだのを取り出していちいち動的に合成してる。現状では同じディレクトリに samp-meta.rdf があるからそっち直接読んでもいいんだけど……実験ってことで……

合成するとき REXML 使ってるから怪しい XML (名前空間接頭辞が他のファイルと違うとか) があるとたぶんパースエラーになる。稀なケースだし Ruby のライブラリでガッチリキッチリ実装した使いやすいやつを知らないので仕方ない。

ローカル側では RDF を埋め込む (ファイル名に -meta.rdf をつけたやつを突っ込む) ときに画像サイズが一定以上だったらサムネイルを作って、その情報 (foaf:thumbnail) も追加して埋め込む。

サーバー側は同じディレクトリの画像をスキャンして RDF を取り出し、@rdf:about を書き換えて合成。合成したヤツを XSLT エンジンに渡す。あとはまぁ普通に XSLT テンプレの仕事で……

ちなみにファイル名のリストは別に XML 作って渡してる。丁度いい語彙があれば RDFRDF として突っ込んだほうがスマートだけど考えるのが面倒だった。

だいぶソースが汚い。

2004年 11月 28日

Sablotron にノード集合を渡す。

XSLT エンジンにノード集合渡したいことが多々あるけど、params にナマの XML を渡しても当たり前にサニタライズされたただの文字列が渡るだけ。じゃあどうすりゃいいねんと諦めていたわけだけど、FOAF Explorer のソース見ててわかった。arguments のほうに XML とか XSLT とか渡すのと同じように渡せばいいんだ。

Sablotron は arguments を内部的に URI として (スキーム arg:) 扱っているから、そっちに適当に渡してやればやりほうだいらしい。エロイ。

$arguments = array(
'/_xml' => file_get_contents($xml),
'/_xsl' => file_get_contents($xsl),
'/foo' => "<test><f>aa</f><f>bb</f></test>"
);
$result = xslt_process($xh, 'arg:/_xml', "arg:/_xsl", NULL, $arguments);

で、XSLT 側からは document('arg:/foo') でアクセスできる。結局 <xsl:param name="foo" select="document('arg:/foo')"/> とかやっとけば OK。Sablotron イイ

2004年 11月 27日

暇なので最近のめも

メタデータと密着した画像管理システム。例えば複数の画像から一つの画像に合成したら dc:source 使って元の画像の URI を記録しておくとか。ライセンスも画像に一緒に記録しとけば一番いいはず。

更にキーワードとかを書いておけば画像を検索できたりとか。

結局のとこ、Flickr に似たような感じになるわけだけども……

cygwin sablotron

動かない。sabcmd は (たぶん) 動いてるけど、Ruby の sablot 作ろうと (ruby extconf.rb で) すると libsablot.a で大量にエラーが出る。検索しても何か妙に情報なし。壮大な勘違いでもしてるんだろうか?

ローカルにこれ入れられないといちいち XREA にうぷしてやらなきゃいけない……嫌だ。wakewakame.

画像メタデータを表示

メタデータを含む画像の例

とりあえず中途半端だけど書いた。画像に含まれる RDF を抽出して表示するだけ。そのうちちゃんと整形させたい。

nulog の画像参照については全部こっちにリンクが張られるようにした。nulog のデータの href とか src はそのままにして、img を含むリンクや、img 単体が存在する場合に view-img を付けてリンクをはる (はりなおす)

URI が微妙だよなぁ……もっといい感じにならないかなぁ。

特定ディレクトリ以下の画像を一覧表示 (サムネイルで。なければない旨の画像? サイズもちゃんと書いておいて条件分岐? 面倒) とかも面白いかなぁ……形にならないとよくわからない。

FOAF Explorer でのエラー

なんかエラーでるので原因を特定すると、foaf:nick に rdf:Alt があるとエラーになる。FOAF Explorer の XSLT を見てみると <xsl:template mode="title" match="*"> というテンプレートの中身が悪さしてる。xsl:choose で選択しているので上のほうに書いてある要素で rdf:Alt を含まなければエラーにならないんじゃないかと思ってやってみたらヒット。foaf:name は書いていなかったので適当に書いておいた。この回避法だと foaf:name を既に書いていてエラーが出る場合無理。あっちの対策を待ちましょうみたいな?

でもこっちで回避するより何かフィードバック送ったほうがいいだろうなぁ。っていっても既に誰か送ってると思うんだけど……むしろエンジンのエラーな気がする。

XSLT での name()

マジメな実装をするなら name() を select や @test で使う機会はまずないはず。 (もちろん name() をそのまま出力する用途では使うけど) そのかわりにちゃんと namespace-uri()local-name() を使うはずだから。

今まで name() を使うときなんかひっかかりつつ使っていたけどやっと変なことに気付いた。