いくつか改善の余地があった現行の変換用スタイルシートを気の向くままに弄くり倒したものの、思うような結果が得られなかったので、さてもとに戻そうかと思い立ちそれを探してみたところ、ふとしたことに気がつきました。
「バックアップを取っていなかった」
なるのど。ってなわけで、意想外の事態とはいえ、これはこれでいい機会なので根本的な変換行程とやや微妙だった変換元の XML 文書を根本から変えようと思ったり。目指すところは先人たちが行っているようなファイル構造? を列挙したような (たとえば) fileList.xml から document
関数を用いることにより旬ごとのバッチファイルの修正すらも簡略化させるようなもの。あとは相変わらず redirect:write
(Xalan-J の拡張) を使ってどうこうってのを目論んでいたり。
手始めに旧来のマーク付けが施されている文書を先を見据えたマーク付けにしてみたり。っと、ここでいつものクセで Speeeed を起動させてしまった罠。この手の変換は XSLT した方が確実に早いはず。
さてさて、どうなることやら……。
http://klezer.s53.xrea.com/_no/200411c#d22h23m22
何故少し前までこんなことがわからなかったのだろうか、というくらい順風満帆。述部を凝ったら比較的容易に意中のノードの特定が出来ました。ついでだったので目次やらも生成することにしました。しかし最近数件分と RSS の出力がうまいこと行かない……。原因はわかっているのだけれども、解決策が浮ばない。このあたりについては後日。
現行のソース文書の雛形は次のような感じです。いろいろな省略を諦めました。とはいっても、ボタンひとつで klz:section
要素以下は挿入できるので手間はさほど……だったりも。
<?xml version="1.0" encoding="Shift_JIS"?>
<klz:root xmlns="http://www.w3.org/1999/xhtml" xmlns:klz="http://klezer.s53.xrea.com/style/xsl">
<klz:section><!-- これがひとつの記事 -->
<klz:head>
<klz:title>タイトル|見出し</klz:title><!-- 無くても可|無かったら自動生成される|タグ付けが出来たりする -->
<klz:datetime>YYYY-MM-DDThh:mm:ssTZD</klz:datetime><!-- 現状必須 -->
<klz:genre>
<klz:item>weblog|note|etc.</klz:item><!-- 要素型を考えるのが面倒くさくて|現状必須 -->
</klz:genre>
<klz:summary>要約(もしあれば)</klz:summary><!-- 無くても可|無かったら自動生成される -->
</klz:head>
<klz:body>
<!-- ここ本文 -->
</klz:body>
</klz:section>
</klz:root>
で、 klz:section
を繰り返すわけなのですが、今みてもこの雛形はどうかと思っている次第で。こんなことをするのであれば:
<?xml version="1.0" encoding="Shift_JIS"?>
<klz:section xmlns="http://www.w3.org/1999/xhtml" xmlns:klz="http://klezer.s53.xrea.com/style/xsl">
<klz:head>
<!-- なにかしら -->
</klz:head>
<klz:body>
<klz:section datetime="YYYY-MM-DDThh:mm:ssTZD">
<klz:head>
<klz:title>タイトル|見出し</klz:title><!-- 無くても可|無かったら自動生成される|タグ付けが出来たりする -->
<klz:genre>
<klz:item>weblog|note|etc.</klz:item><!-- 要素型を考えるのが面倒くさくて|現状必須 -->
</klz:genre>
<klz:summary>要約(もしあれば)</klz:summary><!-- 無くても可|無かったら自動生成される -->
</klz:head>
<klz:body>
<!-- ここ本文 -->
</klz:body>
</klz:section>
</klz:body>
</klz:section>
とでもすれば良かったのに、と思うものの、今更変更をするのもさすがに……。しかしながら、 datetime
要素は初稿と最終更新をうまいこと区別できるようでっち上げたものだったりも。属性にしてしまうと同一要素中に同名の属性を複数持てないことから「初稿」の方を捨てるハメになってしまうわけでして (でも考えてみたら lastModified
属性なんてものをでっち上げれば済む話のような) 。このあたりは HTML をなんとなく理解しかけたころにいろいろと四苦八苦した感覚と似ています。あるいは、「八橋ックML謎」の草案をひとりで練っているような感じ。はやく勧告したいなあ。
http://klezer.s53.xrea.com/_no/200411c#d26h01m51
各地? で挙って「住所登録義務化の撤回」を取り上げていたのですが、このメールは重要事項につき、はてなからのメールマガジンを受け取らない設定のユーザー様にもお届けしています。
とのことなので、あまり意味もない行為だよなあと思ったり。自分も同じですが。さて置き。
- 結論
当面住所登録は行わず、今後のサービス追加に応じて住所登録選択制を検討します。
「結局それか、近藤君」 (←何様) といった感じ。
近藤さんというかはてなの人の立ち回りが下手くそ (一言でいってしまえば「天然」) だったこともあり、反発するはてなユーザが多く、それが撤回の一因にもなっていそうな感じはするのですが、当初の根拠はサイト上に掲載された情報によって他者の権利侵害等がおこなわれるトラブルが増加しており、こうした際、仮名でのご登録等の理由で情報発信者の特定がおこなえない
といったことから読み取るに、「はてなが個人情報を握る」ということから無茶な日記を公開しようとしている方への抑止力としたかったのだろうと思いました。既出でしょうけれども。
個人情報の提供に反発していた方 (の全てでは無いにせよ) は見方によっては「出来るだけ安全なところから無茶なことをしたい」とも読み取れてしまい、その程度の責任しか負うつもりが無いのならば無茶な (あくまで無茶な) 発信なんぞしなければいいのではないか、と思ってしまったりも。また、同等のサービスで個人情報は不必要としているところもありますから、そちらに移れば済む話では、とか。とはいっても、「後から対価 (ではないですが) を求めるのも卑怯だよなあ」なんて思ったりもしました。
しかし「住所登録の義務化」との一報を受けて「そもそも本名でなんか登録してない」などと仰る方も中にはいてそれはそれで面白かったりも。あとは、さっさと退会してしまった方も。「住所登録の義務化」に伴って退会してしまった場合、それが撤回された今どうなるんでしょうか。元の ID で再取得できるのだろうか。なんて人事ながらに思っていたりします。私は様子見を決め込んでいたので退会はしなかったのですが、それがいい風に転がったようでよかったよかった、という感じです。
ってなわけで、八橋の個人情報も微妙に開示してみる所存。
そう、なんと八橋は天皇さんだったのです。うわなにをするきさまら←やや遅し。
概ね冗談です。怖いことになったら撤回します。
http://klezer.s53.xrea.com/_no/200411c#d26h19m46
ついでなので本名も公開します。
小さい頃「ははしけん」というヘンなあだ名をつけられて、よく苛められていました。どうぞよろしく (円楽) (彼は馬ですが) 。
http://klezer.s53.xrea.com/_no/200411c#d26h19m59
あと、 FTP するためのバッチファイルを自動に作る XSL ファイルもあるのだけれども、さすがにパスワードとかが書かれているファイルの説明をするわけにはいかない。
なるほどそういう行程を経ていたのかと目から鱗。危うく Perl を学びかけたりも。
考えてみれば、 XSL(T) にはテキスト出力メソッドなんてものもあることからもわかるとおり、 XML 文書から (X)HTML や XML 文書の生成以外にも使えるのでした。自分のところは先日より、 fileList.xml からアレコレと文書を読み込みそして変換するようにしており、その fileList.xml の中身は比較的時系列に並んでいることもあり、最後の年月旬がいつなのかが特定できるのでそれに応じた出力も可能に。
で、試しにスタイルシートを書いてみたところ、どうも思うような結果が得られなくまた困るという。端的に言ってしまえば改行が上手く出力されなかったのです。そんなわけでオロオロとしていたのですが、 xsl:text
を使いところ欲しいところで欲しい改行を出力することができ、満足。構文としては妥当ではないのでしょうが、次のような感じで改行も出力できました。
<xsl:text>
</xsl:text>
なんともやは (「なんとも」「はや」です謎) 。
以下は余談というか、直接的なリプライでもないので、その。あまり気にしに無いでください。わかってない人間がアレコレ考えているだけもので。「テレビに向かって独り言」という。
今のままだとジャンルが "neta" の場合、"net" と誤判断するので謎。完全一致検索させるにはどうすればいいのかな。
仮に自分がやるとするならばの話で。絞り込む条件をひとつきつくすれば、場当たり的な対処に過ぎないのでしょうけれども、誤爆は防げるような。絞り込む条件に現在のに加えて string-length
関数を使うというように。 たとえば net
を neta
と誤爆せずに絞り込むならば、条件は string-length($genre) = 3 and contains($genre,'net')
という感じで。
あ、でも <genre>net, neta</genre>
とか genre="net, neta"
っていうものだとダメか……。
contains 関数は、1つ目の引数 string が2つ目の引数 string を包含している場合には真を返し、それ以外の場合には偽を返す。
string-length は、string ([3.6 文字列]を見よ。)にあるキャラクタの数を返す。引数が省略された場合には、文脈ノードを文字列に変換したもの、言い換えると、文脈ノードの文字列値がデフォルトとされる。
http://klezer.s53.xrea.com/_no/200411c#d28h23m26
『読みにくいブログ [2004年11月22日の湾岸日記 その5]』を読みまして、その感想というかふと思ったことなどを。
ウェブログサービスの普及に伴って比較的文法に添う文書が出力されるようになったこともあり、その点については製作者は難がないと思います。本来ならばただそれだけでいいのですが、少し手を加えてくれるだけでいくらか利用者が扱いやすい文書になります。
もし利用しているウェブログサービスがテンプレートの変更が可能なのものなのであれば、あるいは特にサービスを利用しているわけではなく、ツールを利用しているのであれば既存の文書の書き換えも比較的容易なはず (わかんないですけど) でしょうから、 CSS Tip #2: Making Your Site Modifiable を参考に、各文書の body
要素に他の製作者のそれと重複しない id
を設ける (つまり body id="URI"
ってな具合にする) ことにより、ユーザ側から擬似的にサイト別のスタイルシートを適用することが出来るようになります。ここでいう他者が制作した文書と重複しない id
とは URI が妥当とのこと。また、 id
属性の値をそのまま URI としてしまうとうまいこと適用できないかもしれないので URI の .
を -
などに置き換えていただければ、という感じですか。
しかしなんで html
要素に id
属性を設けられないのだろうか。
自身が作成したスタイルシートを適用するのが一番手っ取り早いです。もし Win 版 IE を常用していたとすると、製作者が提供している CSS を常時無効化するのはレジストリをいじらなければならない (たぶん) ので少々厄介かもしれないのですが、そのあたりは鳩丸ご意見番 - Microsoft Internet Explorer 5 でスタイルシートを無効にする方法を参考に。しかしながらスタイルシートオフの状態でエクスプローラを起動してフォルダの Web 表示などを行うと、もの凄いことになります。
と書かれているように、やや凄いことになるかもしれません。
先に挙げた CSS Tip #2: Making Your Site Modifiable に倣っているサイトに適用する CSS を書くならば次のような感じになります。ひとつのたとえとして。
body#klezer-s53-xrea-com h1,
body#klezer-s53-xrea-com dl#contents,
body#klezer-s53-xrea-com div#guide,
body#klezer-s53-xrea-com dl.URI,
body#klezer-s53-xrea-com dl.date {
display:none !important;
}
また、最近の Gecko 系ブラウザを常用しているのならば @-moz-document
を利用することにより (参考: @-moz-documentルール) サイト別 (というか、ドメイン別? ) に CSS を適用することが出来るそうです。今更ですが。
http://klezer.s53.xrea.com/_no/200411c#d29h00m06