rNoteが各地で好評なようなので、SDF対応版を作ろうと目論んでみた。
が、名前空間まではサポートしているのかと思いきや、ソースを読んでみるとそうでもない感じだった。文字列の単純な比較でXMLをパースしているようだが、どうもこれは将来的には危ない感じがする。XHTMLだけで終わるなら要素名に制限を持たせることで何とかなるだろうが、名前空間が入り乱れると恐ろしいことになりそうだ。
HIMMELの場合、XSLTそのものなので当たり前だが、スキン的存在である「S3」はXMLを完全にサポートしている。またPHPでの操作も<br/>を<br />に変換するようなごく一部(本当はこれですら嫌)を除いて、DOM以外は使っていない。一々面倒なDOMをわざわざ使うのはXMLデータの操作がそう簡単には行えないからだ。
まず名前空間の扱いが難しい。接頭辞から名前空間をルックアップして処理していくのはかなり大変だ。正規表現を使い文字列比較で処理していくとCDATAセクション内が壊滅する可能性もある。こういった部分に対応しつつ、全て自分で実装していくと、恐らく最終的にはDOMやXSLと同じものが完成するのではないだろうか。言うまでもなく、最初から標準化されているDOMやXSLTを使った方が早い。
rNoteは「XML版blosxom」、というよりも、「(データの区切りにXML的タグを使った)blosxom」に近いと思う(「サイト全体の構築」という点は別にして)。データ形式自体はXMLだが、残念なことに、rNoteはXMLを処理し切れていない。
これから先XMLが普及していくと、XMLを完全にサポートしつつ、ライトユーザーでも手軽にカスタマイズできるような仕組みが必要になっていくのかも知れない(HIMMELはXSLT未経験者には混乱をもたらすことが既に分かっている)。DOMやXSLTをライトユーザーに教え込むのはなかなか大変だ。困ったことに、私にはDOMやXSLT以上に簡単に使えそうな仕組みが思いつかないのだが……。
ところで、2004-01-01T12:00:00
はW3C-DTFとしては不正だ。W3C-DTFで秒まで表記する場合(Complete date plus hours and minutes
)にはタイムゾーンの明示が必要になる。
XMLを扱うと少しのミスでも敏感にエラーがでるので慣れるまでは大変かも知れません。慣れると逆に安心です。
PHP5で回しているなら比較的親切なエラーメッセージが出るので参考にして見てください。こちらに質問してくださっても結構です。
PHP部分がバグっている可能性も十分にあります。見つけたら報告して頂ければ対応します。
XSLTは慣れると結構柔軟な上、色々なところで使えます。がんばってください。名前空間を理解していないと意味不明なエラーに悩むことになるのでご注意を。
BOMでエラーが出る可能性が有ります(恐らく無いと思いますが)。文字コードはUTF-8のBOM無しにしてください。
rNote 0.9.4は再構築を管理者だけに限定する手段としてクエリー(URI引数)にパスワードを持たせているが、これはマズい。危険すぎる。
URIにパスワードが含まれていると、何かの拍子にリファラとしてこのクエリーが流れる可能性がある。関係ないウィンドウのURIをリファラとして送信するブラウザもあるのでかなり危険だ。アクセス解析にこのURIが残ってしまうと第三者にパスワードを知られてしまう。
ブラウザの履歴にも意図せずにパスワードが残る可能性があるので重要なパスワードを同じPCを使っている人間に知られてしまう可能性もある。
再構築自体は大した問題にならないかも知れないが、パスワードを他の用途と共用している場合は致命的な問題が発生する可能性がある。
クエリーは手軽だが重要な情報を載せるべきではない。さすがにSSLを使うのは無理があるにしても、パスワードはBasic認証かPOSTで送信することをお奨めしたい。
とりあえず、メールで報告しておこう。
XSLTの欠点はファイルシステムにアクセスできなかったり現在時刻を手に入れることが出来なかったりすることだ。プラグインをXSLとして定義する場合、これは致命的な問題になる。
PHP5ではXSL文章中にPHPの関数を呼び出せるようになった(関数が呼び出せるだけで制御構文は書けない。恐らく制御部分はXSLTを使えと言うことなのだろう)。EXSLTも使えるのでそれなりに複雑な処理をこなすことも出来る。が、しかし、こういう独自拡張を使うと他のプロセッサーではそのXSL文章を使うことが出来なくなる。
互換性を取るか独自拡張を取るか。