2010-01-01から1年間の記事一覧

XSLT 2.0で便利になった機能(25) グルーピング(その2)

前回の残りで、xsl:for-each-groupのグルーピングの属性、group-starting-withとgroup-ending-withを紹介したいと思います. group-by, group-adjacentとgroup-starting-withとgroup-ending-withには決定的な違いがあります.前者はXPath式によりグルーピン…

XSLT 2.0で便利になった機能(24) グルーピング

XSLT2.0で導入された看板機能にxsl:for-each-groupによるグルーピングがあります.今回はこれを紹介します. まず最もポピュラーな例です.次のような入力データを出荷日(@date)でグルーピングして、さらに製品id(id)でソートして出力します. <shipping-data> <shipping product="鉛筆" id="p-001" date="2010-08-25" count="10"/> </shipping></shipping-data>

百日紅(その2)

九月になったのに今年は本当に暑い日が続きます.さて先月の末の頃になってようやく我が家の百日紅も花をつけました.我が家のは白と紅の二種類です.種類が他にくらべて古いものとのことで、咲く時期がずれるようです.年が移り変わっても、時期がくれば木…

XSLT 2.0で便利になった機能(23) コンテキストに関する関数

コンテキストに関する情報を扱う関数について紹介します. ■ current() current()はXSLT1.0ではnodeでの使用があたりまえでした.例えば <xsl:template match="doc"> <xsl:apply-templates select="chapter[@xml:lang=current()/@xml:lang]"/> </xsl:template> のように使えば、doc/@xml:langと同じ値を@xml:langに持ったchapterが処理されます.わざわざ次のように書かなくと…

同窓会

数年ぶりに大学の同窓会があり、母校に行ってきました.もう相当行ったことがなかったので、その変容振りにびっくり.なんと構内にキャッシュディスペンサーやコンビニまであるそうです.自分が卒論でいた研究室棟、学科は変わってしまったようですが、建物…

閑話休題: XMLサマースクール

今日のxsl-listメーリングリストを見ていたら9月の5~10日の間開かれるそうです. (Michael Kayの発言) http://www.biglist.com/lists/lists.mulberrytech.com/xsl-list/archives/201008/msg00263.html と言ってもイギリスの話ですが... 会場はオックスフ…

XSLT 2.0で便利になった機能(22) Nodeをサーチする関数 (その2)

(続き) ■ key() id(),idref()がDTDや、特別な属性名を必要とするのに対して、key()関数はそのような制約がありません.key()はXSL1.0からあり、<xsl:key>でキーを定義し、key()でキー値を指定してノードを取得する方法をとります.XSLT2.0では、<xsl:key>にコレーションを指</xsl:key></xsl:key>…

XSLT 2.0で便利になった機能(22) Nodeをサーチする関数 (その1)

ノードをサーチする機能を持った関数について紹介します. ■ id() id()は、xs:stringをパラメータとして、それをID値とする要素を返します.XSLT2.0ではこれに、ドキュメントノードを表すnode()がパラメータとして追加されました.復習になりますが、id()関…

XSLT 2.0で便利になった機能(21) Nodeのプロパティ関係の関数

ノードのプロパティ関係の新しい関数を紹介します.今回はあまりおもしろくありません. ■ data() data()は、item()*をパラメータとしこれをatom化されたsequenceを返します.この関数はどうみても、schema-awareなXSLTプロセッサで意味があるものでしょう.…

閑話休題: Sequenceをパラメータとして使う (3)

(続き) <xsl:template match="w:jc" as="attribute()*"> <xsl:choose> <xsl:when test="@w:val eq 'left'"> <xsl:attribute name="text-align" select="'start'"/> </xsl:when> <xsl:when test="@w:val eq 'center'"> <xsl:attribute name="text-align" select="'center'"/> </xsl:when> </xsl:choose></xsl:template>

閑話休題: Sequenceをパラメータとして使う (2)

(続き) fo:blockとfo:inlineにWordMLから変換した属性をつけるのがポイントです.それにattribute()*のsequenceのパラメータを使用します.スタイルシートはちょっと長いですが次のようになります.

閑話休題: Sequenceをパラメータとして使う (1)

sequenceの使い方ですが、今までの例は静的な使い方でした.前回sequenceに関する関数を一通り紹介したので、テンプレートのパラメータとして動的に使う方法を試してみたいと思います. 入力ファイルは、Word2003で搭載されたWordMLというXML形式です.それ…

日本海

お盆は妻の実家の福島に行ってきました.残念ながらちょうど台風が来ていて行き帰りはずっと雨でした.私のところからは、中央道→東北道が近いのですが、都内を通るのがいやなので、上信越道→北陸道→磐越道と迂回するのがいつものルートです.山国に育ったた…

サーバーマシンダウン

さて明日からお盆休み、もう退社時間も間近というときにお客さんからのメールが届いてしまいました. 「~を変えたら、動かなくなってしまいました!」と緊急メールです.Windowsでは動くけどLinuxでは動かないとのこと.早速テストデータを送ってもらい、自…

XSLT 2.0で便利になった機能(20) sequence関係の関数

今回はsequence関係の関数です.XSLT2.0から取り入れられたsequenceの概念ですが、それを操作したり、情報を取得するための様々な関数が用意されています.これらを一通り紹介します.次回は、sequenceの使い方のアイディアを書きたいと思います. ■ count()…

白毛米

八月になり、田んぼの稲も出穂したところが多くなりました.そのなかで一段穂が高く見える水田があります.行ってみるとやはり特別な水稲でした.白毛米といいます.長野県の私の地域だけで栽培されている古代から受け継がれた特別な品種です.写真で見てい…

朝顔

暑い日が続きます.私の住んでいる長野県も連日30℃を越す猛暑です.そんななか長野県知事選挙が行われています.明日は投票日なのですが、私は応援する画家の岩崎ちひろの息子さんのお願いにと知り合いの所をまわりました.と、隣村で車で走っていて気がつい…

百日紅

私の家のはまだまだ咲かないのに、このお宅の百日紅は見事に咲いていました.紅か白が多いように思えるのですが、この花はピンクも混じっていますです.私はジャスミン茶が大好きなのですが、中国の工芸茶のなかに、この紅の百日紅の花を入れた、とてもかわ…

XSLT 2.0で便利になった機能(19) QName関係の関数

今回はQName関係の関数です.スタイルシートをお書きの皆さんでしたら、スタイルシートの先頭に、 <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> と書いて、ネームスペースxslを宣言し、テンプレートでは <xsl:template name="xxx"> というように書いていると思います.要素の名前「xsl:template」は「:」の前のprefix(名前空間接</xsl:template></xsl:stylesheet>…

閑話休題: document()関数

document()関数はXSLT2.0ではdoc()関数にとって代わられ、過去との互換性を維持するためだけにあるようです.XSLT1.0でもdoument()関数はよく使ったのですが、いまいちその性格が飲み込めていませんでした.失敗もありました. まず私のdocument()関数の使い…

閑話休題: XSLT2.0でテキストファイルをXML化する

ここではunparsed-text()でスタイルシートからテキストファイルにアクセスできることを実例で紹介したいと思います.目的はもちろんテキストからのXML化です. ■ 最初は「超」簡単な例. テキストファイルを改行(U+000A)で区切り<p>~</p>で囲んで出力します. [入…

小川

私の住んでいるところは天竜川をはさんで東西にアルプスがあり、河岸段丘沿いに湧き水が豊富です.そんな湧き水からきれいな小川が流れ出しています.暑い今日の午後、用事でお訪ねした家の前の小川は冷たい水がさらさらと流れて、脇は一面のかわいらしい白…

XSLT 2.0で便利になった機能(18) URI関係の関数

今回はURI関係の関数です.XSLT1.0ではこの分野の関数はありませんでした.様々な関数が追加されていますがどのようなものがあるでしょうか? ■ base-uri() base-uri()はnode()?をパラメータとして、そのbase-URIを返します.一般的にはnode()が入力XMLファ…

むくげ (無窮花)

むくげ、好きな夏の花です.職場の南側に木立をつくっています.暑い夏の日差しの中、風にそよいでいました.「槿」と書くより「無窮花」の方がロマンを感じさせてくれます.韓国の国花だそうです.お隣の国なのに知りませんでした.

XSLT2.0で便利になった機能(17) 数値関係の関数

数値関係の関数について紹介したいと思います.XSLT1.0では数値を表す型が倍精度浮動小数点型のみだったのに対して、XSLT2.0ではXSL Schemaで定義された様々な数値型が使えるように拡張されています.xs:integer,xs:decimal,xs:float,xs:doubleやそれから派…

落雷

落雷ですっかり家の光のルータをやられてしまいました.気がついたのは出張の前夜、いくらメールを取り出したくてもどうにもなりません.NTTの故障受付センターはつながりっぱなしで、なかなか通じません.メッセージを残しておいたら、連絡を携帯にいただい…

XSLT2.0で便利になった機能(16) is オペレータ

ちょっと前に戻って、ちょっとだけ便利になった話をしたいと思います.テーマは is オペレータです. 新しく導入されたis オペレータは前後にノードのオペランドをもち、そのノードが同一か判定し結果をxs:booleanで返します.ここで「ノードが同一」という…

XSLT2.0で便利になった機能(15) 日付/時刻の関数

XSLT1.0では日付/時刻関係の関数がなく、各ベンダーごとに独自拡張が用意されていたり、MSXMLだったらJScript/VBScriptで、SaxonやXalanだったらJavaでと拡張関数を書いて呼び出しました.これらの集大成がhttp://www.exslt.org/date/index.htmlに詳しく残っ…

古井戸

家を建てたときに、古くからあった井戸を埋めてももったいないと使えるようにしたのですが、十年以上も経つともう天板が腐ってボロボロ状態.今日は大工さんに来てもらって、井戸の修理です.井戸のポンプとパイプを取り天板を替えて塗装すると、なんとか形…

紫陽花

梅雨時の花といえばやはり紫陽花です.紫陽花という名前は、唐の詩人・白居易が別の花につけた名前を平安時代にこの名前を誤って当てはめてしまったことからついたそうです.でも昨日梅雨が明けました、強い夏の日差しのなかで、風にそよぐ姿を見ると「紫陽…