rNote で application/xhtml+xml
2004-08-16
rNote は 動的生成なので、ページを application/xhtml+xml として送出するのも容易だろうとちょっといじってみた。書いておかないと忘れて rNote がバージョンアップしたときに泣きを見るので自分用にメモ。
まずは、rNote の設定ファイル、rnote_config.phpに、以下を追加。
define(CONTENT_TYPE_XHTML,"Content-Type: application/xhtml+xml; charset=".SITE_CHARSET);
次に、rnote.php のhtmlを生成する Build HTML の1500行目付近の、if($_GET['c']=='xml') header(CONTENT_TYPE_XML); else header(CONTENT_TYPE_HTML);
というところを以下のように書き換え。
if($_GET['c']=='xml'){
header(CONTENT_TYPE_XML);
}else{
if(eregi("application/xhtml\+xml", $_SERVER['HTTP_ACCEPT'])){
header(CONTENT_TYPE_XHTML);
}else{
header(CONTENT_TYPE_HTML);
}
}
これで、application/xhtml+xml を解する UA には、そのように、そうでない UA (インターネットエクスプローラとか)には、text/html として送出するようになるはず。
注意点としては、記事だけでなくスキンも well-formed でないと xml パースエラーで表示できなくなります。たとえば、html_body.skin などは、デフォルト状態だとファイルの先頭にスキンのコメント文が書いてあるわけですが、そのままだと xml 宣言の前に空行が入るのであっさり xml パースエラーとなります。あと、writeback.skin の date 属性のダブルコーテーションのエスケープ忘れ(何)とか。掲示板用の html_body.skin や html_item.skin にも input 要素周りでいくつかあるのでそこらも要チェック。
rNote web 更新用 php スクリプト v0.12
2004-08-09
rNote 0.9.5 が出たので、web更新用スクリプトもそれに合わせて若干書き換えてみました。
これまでは、画像のアップローダーは新規記事作成画面にあったんですが、既存記事編集画面にあったほうが画像の追加の際に便利になるような気がしてきたので、そっちへ移しました。画像付きの記事をアップするときはまず新規作成で記事を作成後、既存記事の編集で画像をアップ、タグ埋め込みという手順になります。複数回繰り返すことも可能なので複数の画像をひとつの記事に張り込む場合はそのようにしてください。
前回同様 rnote.php と同階層に置いた edit.php にアクセスすることで編集画面に行くわけですが、rNote 0.9.5 本体がベーシック認証を使うようになったので、このスクリプトのユーザ名とパスワードも rNote のものとあわせる必要があります。
whatsnew.cgi バージョンアップ
2004-08-06
弊社(何)で提供している、更新履歴更新 cgi、名付けて whatsnew.cgi ですが、恥ずかしいバグを発見したので更新しました。
この cgi は更新履歴の html と同時に rss も吐き出すのですが恥ずかしいバグというのは、rss の dc:date のフォーマットが不正だったというものです。:p)
使っていらっしゃる方はほとんどおられないと思いますが、バージョンアップされるか、whatsnew.cgi の18行目あたりの以下の記述を入れ替えていただくとよろしいかと。
$now = sprintf("%4d-%02d-%02d",$date[5],$date[4],$date[3]);
んで、修正したものをそのままアップしていただけばいいわけですが、それだとこれまでのものが不正なままなので、サーバ上のログファイルをダウンロードして修正してやらないといけません。以下そのための手順です。
今回の間違いは、<dc:date>2004-08-06</dc:date> となるべきところが、<dc:date>2004- 8- 6</dc:date> となっているので、ログファイルの該当個所を手作業で書き換える必要があります。サーバからバイナリモードでログファイル、new.log をダウンロードします。このファイルには、エディタによっては^@みたいな変な文字が見えるかもしれませんが、これをいじらないようにして、各行末あたりにある日付の部分のみ修正してください。修正が終わったら再度バイナリモードでサーバにアップしてください。一度記事の空更新をするなどして、html と rss を再生成させれば完了です。
お手数ですが、よろしくお願いいたします。
- whatsnew.cgi 配布場所
-
ダウンロード - 新川ネットウエア
- 追記
- その後、他にも微修正して午後6時頃にアップしなおしました。あらたにダウンロードしなおしていただいたほうがいいです。すみません。
rNote がおもしろいので、移行できるものかどうか試し中です。とりあえずこれまでの日記ログをぶち込んでみるべく、rNote 用の xml に変換してみた。
以下の xslt を捏造して、過去ログに適用。
<?xml version="1.0" encoding="Shift_JIS"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:redirect="org.apache.xalan.xslt.extensions.Redirect"
xmlns:x="http://www.w3.org/1999/xhtml"
extension-element-prefixes="redirect"
exclude-result-prefixes="x">
<xsl:output method="xml" version="1.0" encoding="UTF-8"
indent="yes"
omit-xml-declaration="no"/>
<xsl:template match="x:html/x:body/x:div/x:div/x:div">
<redirect:write select="concat(x:h3/@class,'/',@id,'.xml')">
<rNote xml:lang="ja" xmlns="http://rinn.e-site.jp/rnote/">
<Title><xsl:value-of select="x:h3"/></Title>
<Description><xsl:variable name="first" select="1"></xsl:variable><xsl:value-of select="x:p[$first]"/></Description>
<Date><xsl:value-of select="../x:h2"/></Date>
<Category><xsl:value-of select="x:h3/@class"/></Category>
<Id><xsl:value-of select="@id"/></Id>
<Text xmlns="http://www.w3.org/1999/xhtml">
<xsl:copy-of select="child::node()[position()>2 and position()<last()-1]"/>
</Text>
</rNote>
</redirect:write>
</xsl:template>
</xsl:stylesheet>
これまでの日記の過去ログ35ファイルに、これを適用したところ、約700個の xml が10分ほどで生成されました。xalan-java のリダイレクトエクステンションを使用しています。日付の表記が違うのは面倒なので、あとで xyzzy の Gresreg で一括置換しました。:p)
出来上がった xml にある、Id 要素と Category 要素は、私が適当にでっちあげたものです。もとの記事の id と、カテゴリーですが、のちのちさらに何かすることがあれば埋めておくと便利かなと考えました。
今は、ぼちぼちスキンをいじっていますが、移行するかどうかはその出来次第という感じかな。
xalan-java を入れた
2004-07-30
ひとつのソースに、xslt かまして、複数ファイルで結果が欲しいと思って調べてみたら、xalan-java の拡張 redirect というのを使えばできるらしいというので入れてみた。実は前のマシンには入っていたのですが、今のマシンには入っていなかったという。ま、バージョンも上がっているだろうし、いい機会です。ということで、インストールメモ。
まずは、http://www.apache.org/dyn/closer.cgi/xml/xalan-j より適当なところを選んで、xalan-j-current-bin.zip をダウンロード。C ドライブのルートに解凍したら、xalan-j_2_6_0 なるディレクトリつきで出てきたので、xalan-jにリネーム。
続いて環境変数の設定。以下のような感じで追加。
set XALAN=C:\xalan-j
set XALAN_JAR=%XALAN%\bin\xalan.jar
set CLASSPATH=%CLASSPATH%;%XALAN_JAR%
xalan を実行するときは、java org.apache.xalan.xslt.Process -in xmlソース -xsl スタイルシート -out 出力ファイル
みたいな面倒書き方をしないといけないので、以下のようなバッチファイルを パスの通ったところに置いておいた。以下、xalan.bat の内容。
java org.apache.xalan.xslt.Process -in %1 -xsl %2 -out %3
これで、xalan xmlソース スタイルシート 出力ファイル
という形式で実行できるようになります。
さて、環境が整ったところで次は xslt を書くだけです。が、xslt の書き方とかは忘却のかなただったり。:p)