XSLT2.0

XSLT 2.0で便利になった機能(32) xsl:message

スタイルシートをデバッグするときはどのような方法を使っておられるでしょうか?この前Visual Studio 2010の試用版をインストールしたら、.xslのファイルをクリックするとVisual StudioのIDEが開くようになってしまいました.Visual Studio 2010では、XslCo…

XSLT 2.0で便利になった機能(31) use-when属性

スタイルシートを作成するときはどんな構成にするでしょうか?私は納品するものでなくとも後で使うだろうというものは大体次のような構成にしています. xxx_shell.xsl --- 以下の.xslをincludeする. xxx_main.xsl --- メインコントロールの処理 xxx_param.…

閑話休題: xsl:attribute-set

前回はxsl:attribute-setの悪口を書いてしまいましたが、本当はいいやつです.何が良いかといえば、use-attribute-sets属性が使えるからです.これにより階層的なスタイル構造を作ることが出ます. Microsoft Wordをご存知でしょうか?これを書いているPCはW…

XSLT 2.0で便利になった機能(30) xsl:attribute

xsl:attributeについて変更点を紹介したいと思います.xsl:attributeはその名のとおり属性ノードを生成するものです.XSLT2.0からはselect属性がつきました.今までは <xsl:attribute name="font-weight> <xsl:choose> <xsl:when test="string(@bold)='yes'"> <xsl:value-of select="'bold'"/> </xsl:when> <xsl:otherwise> <xsl:value-of select="'normal'"/> </xsl:otherwise>

XSLT 2.0で便利になった機能(29) xsl:numberを使う

xsl:numberについて紹介したいと思います.xsl:numberはXSLT2.0になっても大きな変更はありませんでした.select属性が加わったことだけの違いです.しかし、この違いは大きいです.従来は、カレントノードからしかカウントができませんでした.select属性を…

XSLT 2.0で便利になった機能(28) xsl:next-matchを使う

xsl:next-matchについて紹介します.xs:next-matchは、複数のマッチングするテンプレートがあった場合に、最終的に選択されたテンプレート内から、次の優先順位でマッチングするテンプレートを階層的に呼び出せる機能です. 例えばDITA→XSL-FOでxsl:next-mat…

XSLT 2.0で便利になった機能(27) キャラクタマップ

今回はxsl:caharacter-map、xsl:output-characterについて紹介したいと思います. この機能は主に「見る」文書を出力する際に使うものだと思います.例えば従来HTML出力では、HTMLで定義されている実体参照を書き込もうと思っても、disable-output-escaping…

XSLT 2.0で便利になった機能(26) ソーティング

xsl:sortはXSLT1.0と比べてパラメータにcollationとstableが追加されていますが基本は変わっていません.しかし、selectで指定する式の自由度がXSLT2.0になって高くなっています.またXSLT1.0ではノードのソートしかできませんでしたが、XSLT2.0では任意のse…

閑話休題: 平坦なXMLを構造化する

前回の応用で、xsl:for-each-groupのグルーピングの属性、group-starting-withを使って、平坦なXMLの構造化をやってみました. あまり現実味がないと面白くないので、今回はソース文書としてWord2003の出力するWordMLを使います.Word2007、2010でもWord2003…

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>

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形式です.それ…

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

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

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やそれから派…

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に詳しく残っ…

XSLT2.0で便利になった機能(14) 新しくなったstring関係関数のまとめ

XSLT2.0では多くのstring関係の関数が追加されています.新しくなった関数についてまとめてみました.(本来XPath2.0の関数というべきなのかもしれませんが、そこはご容赦を!) ■ codepoints-to-string(),string-to-codepoint() 「XSLT2.0で便利になった機…

閑話休題: MicrosoftはXSLT2.0をやらないのか?

2010年の初め、XSL関係のメーリングリストとして有名な xsl-list@lists.mulberrytech.com に、Abel Braaksma氏から"Definite list of XSLT 2.0 processors? "と題するポストがありました. これは、以下のリストアーカイーブで見ることができます. http://w…

XSLT2.0で便利になった機能(13) Unicodeの正規化

ふだんはあまり気にすることがないのですが、例えば同じ文章をXML化するとき、必ずしも同じ結果が得られる保障はありません.まずはエンコーディング、Shift_JIS、UTF-16から、UTF-8など、決まりを作っておかねば、いろいろなXML文書が作れてしまいます.ま…