話題に乗り遅れた感があるが、XSLTの勉強に使った書籍を挙げてみることにする。いろいろ買ったほうではあるけど、どれほど身になっているのやら。とにかく読んで使って感じてみたことをごしょうか〜い。
このコンテンツでのHTML規格採用の推移を簡単に振り返ってみると、昨年3月の開始時はHTML 4.01Transitional、5月からはXHTML 1.0 Transitional、12月からはXHTML 1.1となっている。XHTML 1.0で書き始めてからXHTML 1.1に移行するまでの期間がゆっくりだったのは、実は5月の最初の記事でもネタにしたXHTMLのMIMEタイプの問題があり、それのうまい採用方法がわからなかったというのがある。
実際、11月にPHPでHTTPヘッダーを書き変えるという方法論がわかってからは、対応はPHPの練習も含めて2週間ほど。対応と勉強に使う時間はそれほどかからなかったのに、結果だけ見るとポインターが見つからなかった半年近くの間ボサっとしていたことになるわけだ。<2ちゃんねるで遊んでいたせいもあるが( ̄△ ̄;。
それはともかく利用の方法がわかった以上は先に進みたい、おいらはせっかちなのだ。移行第2幕としては、先人と同様に自分の管理しやすい形態でマークアップ文章を作り、それを元にHTMLを生成する方法を採ることにした。
このような形態を採る理由のひとつには、ページ内リンクの生成や更新毎に執筆しているリード文の管理を楽にしたいという要望があったからだ。
まず毎度くだらないことを書いているページ初頭のリード文だが、次の更新の際は別のファイルにカット&ペーストしてバックアップするようにしている。これが当日分のみが表示されるようになるといいなぁ、という妄想がおいらの中にあった。
また、ページ内リンクはなんらかのスクリプトによる自動生成も考えたんだが、上手い方法が見つからず手書きのまま。だが結構この作業がおっくうなのだ。これを慣れたXSLTによる自動生成に切り替えるだけでも、それなりのメリットが出てくる。
マークアップに使うXMLだが、独自に作ってみることにした。自分の目的に合った構造とXSLTを書くときのXPathの記述を分りやすくしたいという2つの要望を両立させたかったからだ。ただ闇雲に書くのもなんなので、RSSのソースを見ながらXMLらしい書き方ってなんだろうなぁ、と思いながら記述していった。まだ満足のいく出来ではないので、今後のコンテンツの記述によってあれこれいじっていって、かたまった段階でスキーマを書こうかなぁ、と。
ただし、自分で語彙を作るのはコンテンツの「ロジック」に必要な部分のみ。「プレゼン」にあたる部分は、XLinkの語彙を使うことを試してみた。この方法を採用したのは、ハイパーリンク、画像の埋め込み、引用などを同じ語彙でこなせそうだな、という目論見があるのだ。それにXLinkは専門家が考えただけあって非常に興味深い語彙が用意されている。Webページの記述に生かせる部分は少ないが、憶えておくと何かいいことありそう。
さらになるべく自動化を進めたいので、記事ごとのid付けや最新日のみに振っているlatestというidも自動で振るように試みた。XSLTの段階でコンテクストを活用するマークアップが必要になったが、いくつかの関数を活用して目的を達成。こういったプログラム処理を馴染みのあるXMLの書式で書けるのもおいらにとってはありがたいのだ。
この辺の工夫点は今後少しずづ書いていくつもり。元のXMLとXSLTをアップしておくので、興味のある人はツッコミなどいただけるとありがたいかな。特にXSLTはクソみたいな記述になっているから、改善の余地ありのような気がするし( ̄△ ̄;
時代は変わりましたなぁ( ̄△ ̄;。古のXTとXercesを使った方法でXSLT環境を構築しようとして、何故かXercesのクラスパスが見つかないと言われてしまう。それで全くないJavaの知識を基にあれこれ設定したんだが、どうしても動かず苦しんでいたとこなんだ。
んで、sonorous howlの1月11日分XML Tools & XSLT Toolsを見て、AppleScriptからアクセスできるXSLTプロセッサー「XSLT Tools」の存在を知った。渡りに舟とばかりに、おいらはすぐに飛び付いたね。
よく使い方はわからないのだが、サンプルにあった「Transform XML files」を使ってAppleScriptのディレクトリに置いたターゲットファイルとトランスレーションファイルを読み込ませると、同じディレクトリ内に結果が吐き出されることが判った。この作業ディレクトリを書き替えるのにどのようにスクリプトを記述すればいいのかはおいらにはわからないのだが、このディレクトリにファイルを持って来てから処理すれば、とりあえず用が足りてしまう気もした。
もし、綺麗な使いかたができるように改造するなら、インフォテリアの出している、超高機能だがくそ高いXSLT変換ソフトのようなインターフェースがかぶると使いやすいんだろうけどね。
11月から更新記録をRSSフォーマットにて配信しているわけだが、どうもRSSの語彙を勘違いしていたらしく、ページロゴに使う画像へのリンクとその画像が差し示すページへのリンクが逆に指定されていた。これは暁に死すの北村さんの指摘によって解決したもの、どうもありがとうございます。
実際、おいらが知っているRSS表示ページの中でこの影響を受ける(つまり画像を拾おうとしていた)ものがいくつかあった。北村さんの某方面RSSをHTML表示 (via rss-jp.net)を始めとするRSS-JP.netのスクリプト採用ページや、my.opera.comで提供されているOperaのカスタムパネル向けのRSS表示CGIを通した場合がそれにあたる。
こういうのってつまるところ、いい加減なマークアップで発信すると、自分の知らないところで、多大なる影響が出てしまうってことだ。元々ウェブがリソースの相互提供を目指している部分がある以上、こういうことがあるってことはしっかり認識しておかないと、というのを肝に命じた一件でありました。
ちなみに、RSSにこのページのヘッドラインをPHPを拾わせることも考えているんだけど、.htaccessで.xmlにPHPを上手く設定できなかったり、任意のパスをPHPで拾わせる方法を見つけられなかったりして悩んでいる<ヘタレなんで( ̄△ ̄; 。どうせいつもの通り、方法がわかればすぐなんだろうけど。
ここしばらく、RSSについていくつかの重要な言及があったのでまとめておこうと思う。
まず、上に紹介した北村さんの徒書1月12日分「RSSを作ってみる」だが、CGIを使った自動生成の方法にてRSS発信を導入したいきさつが書いてある。
その際に参考になったのはRSSの実用例を見ていると、「色んなサイトのRSSファイルを収集 → ツールにより見やすい形に加工して更新情報を表示」というのが一般的な利用法のようであ り、必ずしも1つのRSSファイルを直《じか》にブラウザで読みやすくする必要はないのかも
という見解。おいらのサイトはThe WebKanzakiのThe Web KANZAKI - Updates as RSSにならって、XSLTを使ってページにHTMLのスタイルをかぶせている。これは当時、情報をてっとり早く見せる意味もあってこの方法を採用した。だが、現在はこれ以外にも「NetNewsWire Lite」を始めとするRSSリーダーソフトの存在も確認しているので、無理にブラウザーで表示させる必要がなくなってきているのも確か、というわけだ。第一、普段Operaを使っているので、うっかりあのページに移動してしまうと、えらいことに( ̄△ ̄;。
また、RSSのMIMEタイプの件もとりあげられている。これも非常に参考になるので、十分に調べたのちに検討してみようと思う。
その徒書経由で知ったそふぃあさんのagenda 2002年9月20日分「rss:channel要素のrdf:about属性」では、RSSで採用されているマークアップ法についての見解が書かれている。
おいら自身まだ慣れていないこともあり、XMLでの理想のマークアップがどのようなものかがはっきりとは判っていない。先日の記事でRSSのソースを見ながらXMLらしい書き方ってなんだろうなぁ、と思いながら記述していった
と書いた通り、RSSが提供するメタデータをある程度参考にしたわけだが、今後もこれは課題にしたほうがよさそうだ。なにせ、このリンク先に書いてあることはおいらにとってはまだレベルの高い話題のように感じてしまったのだ。RSSの仕様書も読むようにしよう。
その他、最近よく話題に登るRSS-JP.netやThe Web Kanzakiの「簡単なRDF Site Summary (RSS)の説明」なんかは、RSSを確実に自分のものにするまで何度もチェックしていいものだと思う。
ちなみに、さっきのRSSリーダーソフトのリンク先ってひろりんさんから複数紹介してもらっているので、本当は複数書きたかったんだ。XLinkの語彙を使うと、下のようなマークアップをするのが適当か。
これはこれで便利なんだけど、実際にHTMLに置き替える際の上手い方法論が見つからない。link要素が差し示しているリソースには註釈みたいなリンクを作って記事の一番後に飛はして、そこにリストを作るというのも考えているんだけど、さてどうXSLTを書けばいいものやら。。。
おいらのサイトに対するさとみかんの捕捉対象が.htmlから.phpに変ったのだが、どうやら更新日時をうまく取得できていない模様。正しい更新日時を拾わせるためにはを見ると、HTTPヘッダのLast-Modifiedなるものを見ると書いてあるのだが、どうやらおいらのところはそれを吐き出していない模様。
.htaccessなんかはおいらにはさっぱりなので、phpで吐く方法がないかと思っていたらひろりんさんが以前にその方法を書いてくれていた。
ただ、headerとして埋め込もうとするとヘッダー用のファイルが別ファイルなんで上手くいかない。しょうがないので文書の末尾に記述されるようにしたっす。アンテナで捕捉されている方、この値を見るようにしていただけないでしょうか( ̄△ ̄;。
何度も紹介しているMac OS X用のRSSリーダーのNetNewsWire Liteだが、一日中起動して1時間おきくらいに自動更新をかけているとなかなかおもしろい。何ってインターネットの動きが目に見えるような気分になるからだ。
例えば、ZDNetの速報を拾っているRSSの場合、2〜3時間ほどたつとニュースが20近く更新されていることに気がつく。2ちゃんねるなんかも、どの時間帯に人が動いているのかが未読数の変動だけで、ある程度見えてくるのが笑える。厨どもが衆目を集めるために苦心して付けたスレタイが多いので、ヘッドラインだけ見ていても非常に楽しい。
この界隈のRSSもいくつか拾ってみているんだけど、ぱっと見タイトルだけで何のサイトかわかりにくいものもあるのが残念。なんとなく付けちゃったり、CGIが吐きだすものをそのまま利用しているだけだったりしてるんだろうなぁ。
受け手にどう見えているかわからないだけに、情報はわかりやすくしっかり書かないとなぁー、と思う今日このごろ。あ、ちなみにNetNewsWireの「Show Info」を押すと、現在選択中のサイトの基本情報が出てくるです。これである程度察っしをつけてるですよ。まぁ、なにかと便利な技術だなぁ、と思ってハァハァしてるってわけだ。
こんな調子で、収集したサイトの管理人の自己紹介ばかり表示されるソフトとか、そういう情報を記述する規格とかあったらおもしろいんだけど、誰か知らぬか。<それこそ、RDFの活躍の場のような気が( ̄△ ̄;。
最近この方面に眠っているXML系の記事を掘り返しては読んでいるんだが、agendaの2002年6月30日の記述から「カレントノードについて(XSLT)」というのが出てきた。
おいらがXSLTを書くときは、ひとつひとつ他の文書フォーマットへの変換のルールをしこしこ書いていっているわけだが、元の文書のどの部分に処理を適用するのかを指定しないとならない。XSLTの勉強を始めた頃、この指定を上手くできなくて「XSLTって難しい」と悩んだ記憶がある。
要は処理を適用させるノードのパスをxsl:template要素のmatch属性で確定させるものなのか、xsl:apply-templates要素(もしくはxsl:value-of要素)のselect属性で確定させるものなのかの判断がつかなかったんだ。いうなれば両者お使いわけだ。これがわからないと、ひとつの処理結果の中(例えば、ある要素のいろんな属性値として)に文書の複数の個所に散らばっている情報を取り込むなんてときは混乱の極みとなる。
この時は「XPathの書き方が悪いのかなぁ」と悩んで、ルート要素から書き直したり相対パスを見直してみたり、パスの省略を試みたり、と試行錯誤したんだが、XSLTの各要素の本来の意味や機能を判ってなかっただけだったのかも。xsl:template要素のmatchに書き込むパスは、カレントノードを指定するための基点と考えればいいんだろうか?
また、どこでカレンドノードを確定させるのかわからなかった理由に「select="."」という指定の存在があるのだが、これはこれで意味があるんだろう。まだよーわからんで使っているわけで、最近はカレントノードの指定をハズすことは減ったものの「非常に感覚的であやうい書きかたをしているなー」というのが自分の感想なのだ。自分で見てもツッコミどころ満載の力技マークアップですが( ̄△ ̄;。
このコンテンツを記述している基のXMLファイルでは、ハイパーリンクに関してはXLinkの語彙を使っているんだが、現時点でリンクの語彙を借りている以上の役割りを果していない。おいらの使っているXSLTプロセッサーがどのくらいのことができるのかわかっていないから、というのも大きいんだが。
せっかくXLinkを使っているのだから、XPointerを使ったブロック参照というか、参照先の記事の埋め込みを実現してみたいんだ。それは、いちいちコピペだのなんだのをするのが面倒というだけなのだが( ̄△ ̄;。
方法論だけは浮かんでいる。HTMLでいうobjectとblockquoteの中間のような埋め込み参照用の要素を用意しておいて、参照先のURIをXPointerの式で記述する。XSLTには埋め込み参照の要素に対して、XPointerで指定した範囲をまるまる取り込んでHTMLのblockquoteの中に配置してしまう処理を書いておく、という算段だ。
えーっとXSLTのプロセッサーだけで本当にそういうことができるのかまでは確認していないんだな、これが( ̄△ ̄;。まずローカルのファイルでそれができるか、から確かめてみないとね。
今まで気が付かなかったんだけど、今月のインターネットマガジンにblogの特集が載っている。「へー」って手に取ってみたんだが、その特集の後半に書かれていたのがRSSの更新情報を出力するという話題。
あの手のツールってそういう機能が付いているくらいのことは知っていたけど、RSSのクライアントソフトとかの紹介まであって、まぁ、なんというか、そういう時代になってきたのかな、と。
ありみかさんがXSLTの勉強を始めたものの、解説書の購入で失敗したとのこと。紀伊国屋や書泉クラスの大型書店ともなると、XSLT関連の本でも20種類くらい置いてあるので、おいらは都心に出た日はなるべくその手の本を探すことにしている。すぐに買って帰ることは実は稀なのだが、普段から目を通しておくことで自分がどんなことをしたくて、どんな本を探しているかを整理しているわけだ。
とは言うものの、なんだかんだとXSLTの本は専門誌を含めれば10冊近く購入している。どれが一番いいと言うよりも、その時その時の勉強に一番役立ちそうなものを買っているので、自然と冊数は増えていってしまうのだ。その中から今まで購入したXSLT関連の書籍をざっと紹介しよう。
ここに挙げた本のほとんどは、XSLTの記述法に関するものばかりで、プロセッサーは何を使えばいいとか、自分のサーバーでXSLTを使うためにはなどについては書かれていない(いくつかはMSXMLやIISを使うことを前提に書いてあったが)。2ちゃんねるのXML関連のスレッドでUNIXサーバー用のプロセッサーについて聞いたりしたことがあるんだが、それはJavaで動くものだったりApacheのモジュールだったりして、なかなか敷居が高い。パフォーマンス的にもどうかなぁ、という気もするので当面こちらには首を突っ込まないようにしようとは思っているわけだが。