XML の本文部分の名前空間あたりがうまいこと決まらないので思いつくまで放置。
なんか軽いのが書きたい。
ある関数の比較
function _load_flavors() { $xns = $this->_xpc->xpath_eval("/config:config/config:flavors/config:flavor"); foreach ($xns->nodeset as $node) { $ext = $node->get_elements_by_tagname("extension"); $ext = $ext[0]->get_content(); $content_type =$node->get_elements_by_tagname("content-type"); $content_type = $content_type[0]->get_content(); $this->flavor[$ext] = $content_type; } $this->default_flavor = $this->_xpc->xpath_eval_expression("string(/config:config/config:flavors/@default)"); $this->default_flavor = $this->default_flavor->value; }
private def load_flavors @flavors = {} @doc.elements.each("/config/flavors/flavor") do |ele| @flavors[ele.text("extension")] = ele.text("content-type") end @default_flavor = @doc.root.elements["flavors"].attributes["default"] end
でもここで使ってる Ruby の REXML
というパーサは名前空間をあんまり (ほとんど?) 考慮してない (だから接頭辞がついてない。読み込んでいるドキュメントはデフォルト名前空間でやっていて接頭辞がないから) REXML
は XPath とか使えるしイケてるけど、やっぱ微妙な部分がいくつかあるわけです。
PHP は書いた気になれる。んで後から読むと読み難い。実際には一回の代入が二行になっていたりするから。だからといって一行に纏めても読み難い。
PHP4 には例外もない。5 からあるけど、5 でやっと?みたいな勢い。
XML は中間データとして使うようにしてみる。もちろんデータを XML で書いてもいいし、てきとーにデータベースから XML 生成するような実装をすればデータベースを元データとして使えるように。
例えば XMLDB
みたいなクラス作っといて、get_latest_xml($num)
, get_month_xml($year, $month)
みたいなメソッドを実装 (できればインターフェイスだけ定義したクラスを作っておきたいけど PHP4 じゃ無理くさい) しとく。それぞれのメソッドは決まった XML を返す。
スクリプトは設定に応じてどのクラスを使うかを決めてインスタンス化&メッセージを投げて XML を得る。あとはそいつを XSLT エンジンに丸投げして、結果を設定した Content-type で出力。
別に PHP でなくてもいいんだけど、Ruby は三郎拡張がローカルで動かないから……
新しくするスクリプトではカテゴリではなくてタグという形にしてみる。そもそもカテゴリ的な使い方 (ツリー構造) で使っていないのでそのまま猫要素を tag 要素にするだけ。
理由は、カテゴリのツリー構造を表現するのが面倒くさいし、実際のところカテゴリのツリー構造ってあんまり上手くいかなかったりするから。
なにやらeval('$db = new ' . $config->dbclass . '($config, $lang, $tags);');
と $db = new $config->dbclass($config, $lang, $tags);
は同じっぽい。もちろん $config->dbclass
はただの文字列。ナンダコレ。
それと $ext = $node->get_elements_by_tagname("extension")[0]->get_content();
がパースエラーって何よ。前にも書いた気がする。
$ext = $node->get_elements_by_tagname("extension"); $ext = $ext[0]->get_content();
上記のようにしないとダメ。
書いてて途中で PHP 捨て実行のために sablot/Ruby とか sablotron を一からやりなおしたりした。まー無理だったわけですが orz
つまり、PHP では汚いコードを心置きなく書けるわけです。あら素敵?
PHP でコードを書く理由って Sablot と mod_php のためだけなんだよね。ホント。関数の命名規則もバラバラだし、謎が多い。
25 日終わったからもとのスタイルに戻したよ。
クリスマスにまず損しない (金は減るけど) 投資 (謎) して、ドレぐらい返ってくるかなぁ、とか思ってみたけど損しない分しか返ってこなかった。残念。まぁ全然いいんだけどももももも。
もっと寒いスタイル作りたいなぁ。モニターに息吹きかけると白くなるぐらい寒いスタイルシート書きたいなぁ。スポットライトと観覧車ってとこかなぁ。遊園地って人が多くて好きじゃないけど、観覧車っつう言葉の響きは好きだ。母親の実家に行く途中古ぼけた遊園地があって、その中に観覧車があるんだけど、幼稚園生のときその観覧車が動いているかどうかを何故か毎回確かめてた。この前通りかかったとき遊園地自体が潰れてた。ついでにもう通りかかることもなさそうだ。
まーとにかく Helvetica ってフォントの名前だよね。
Taglibro を少し作り直そうと思い始めたわけだけど、実際日記本文に使う空間を何にするかとかで悩んでる。今は殆ど XHTML 1.0 と同じだけど、ホントにコレでいいかなぁとか何とか、だからといって XHTML 2.0 はまだ勧告されていないし、XML Schema の場所も決まっていない (TBD) ……一応どっちでもいけるようにはしてみてるけど、実際書くのはどっちかだし。
それと、できるだけ自然に書くため (つまりミスタイプを少なくするため) 名前空間接頭辞をできるだけ付けない様にしたい。ということはデフォルト名前空間を多用する (セクションごとに名前空間書く) ことになるけど、XML Shema の仕様を眺めてみる限り、実態参照の宣言方法がない。というか DTD でいうところの内部サブセットをどうやってやればいいか分からない……名前空間を省略したいだけの参照をスキーマで宣言するのはおかしいから内部サブセット的なものが必要。実態参照だけ DTD 使うのがいいかなとか思ったけど Validator がエラー出す (DTD で要素が宣言されていないよ!っていう) のでダメっぽい。併用すること自体アレだし……
書こうと思ったんだけどうまく説明できない。たぶん前にも少し見たことがある。
坂がある。高床式の木で出来た小屋が沢山ある。そこに行くために坂がある。木で出来た少し大きめの小屋がある。坂の下には近代的でかなり大きい (とはいえ面積が広いだけで高さはそんなでもない) 建物がある。建物の一階部分はまるまる外で、グレイッシュレッドの柱がたくさん立ってる。二階以上の部分の壁の色はクリームホワイト。たくさん白いテーブルがある。料理が置いてある。人がいっぱいいる。顔見知りばっかりだ。
いくつかやること (忘れた) があった。不安がいくつかありつつもやることは無事に終わった。やることは大き目の小屋で行った。
他には、ロッカー、携帯電話、パーカーぐらい。