最近書かれた記事5件分を表示します。
更新状況をRSS 1.0形式でご覧になれます。
XML文書のデータを少し変更して出力する際、例えば、ISBNコードをハイフンの有無によって二通り用意したいときには、文字の置換を行うtranslate関数が役に立つ。
<bk:book bk:isbn="4-xxxx-xxxx-x">
<bk:title>foo</bk:title>
<bk:author>bar</bk:author>
<bk:publisher>baz</bk:publisher>
</bk:book>
書籍データをこのように格納しているとすると、bk:book/@bk:isbnというロケーションパスによって取り出される文字列は、当然ながらハイフンを含むISBNコードになる。ハイフンの含まれないISBNコードを得るには、translate関数を用いてハイフンを消してやるとよい。
<xsl:value-of select="translate(bk:book/@bk:isbn, '-', '')"/>
translate関数の引数は、置換対象(のロケーションパス)、置換前の文字、置換後の文字となる。例では、ハイフンを空文字(空白ではない)に置換している。AmazonのURIを生成する際に重宝するだろう。
先日、rhongomyniad.orgからメール送信を試みたところ、「SMTPサーバに接続できませんでした」というエラーが返されて実行できなかった。ISPの導入したOutbound Port25 Blockingが原因らしい。
Outbound Port25 Blockingとは、ISP以外のSMTPサーバへ向かう通信を遮断する方法である。これにより、spamの大量送信をある程度防ぐことができる。詳しくは25番ポートの攻防(@IT)を参照。
Outbound Port25 Blockingでの設定方法(ロリポップ!)に示されている通り、SMTPサーバのポートを25番から587番へ変更してやればよい。
デフォルトの名前空間をXHTMLとしたXSLTスタイルシートでは、<xsl:template match="ins">などとしてもins要素にマッチしない。だが、条件式を少し変形してやるとマッチすることが分かった。
<xsl:stylesheet version="1.0"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="ins">
(中略)
</xsl:template>
これではins要素にマッチしない。xhtml:といったprefix(接頭辞)を付けてやるとマッチするが、いちいちprefixを書いていては効率が悪い。
同一の問題に直面した人はいるもので、次のリソースが見つかった。
xhtmlの名前空間をデフォルトにしてあるはずなのにimgにマッチしないのはどうしてだろう? だからってxhtml:のほうも用意すると出力先にも残るから嫌だし、しかたないので*[name(.) = 'img']にマッチさせることにした。
最初からXHTMLの語彙をそのまま条件式に入れるのではなく、要素の名前がimgならマッチさせるという方法である。先程の条件式を次のように書き換えると、問題なくマッチした。
<xsl:template match="*[name(.) = 'ins']">
(中略)
</xsl:template>
この方法を使えば、MSIEに対して、追記した日時(ins要素)や引用元(blockquote要素)を示すことができる。MSIEは、CSSの疑似要素(:afterなど)を実装していないため、これまではXHTML文書のソースレベルでしか引用元などを示していなかった。
妖精現実 フェアリアルを経由して、著作権フリーのSVG素材を共有する目的で作られたOpen Clip Art Libraryを知った。すべての素材はパブリック・ドメインに属していて、どう使っても問題ないようだ。
SVGなどのベクタグラフィックスは、線や面を表現するパラメータ(つまり、文字情報)から構成されているため、拡大・縮小による画質の変化が起こらない。リサイズする度に描画処理を行うからである。
Open Clip Art Libraryのplantsから、Shamrock Symbol(シロツメクサ/クローバー)とReed(葦)の素材を頂戴し、h2要素とh3要素の装飾に利用している。
SVG素材を利用するために取った方法は次の通り。