1.2. プログラミング・開発ガイド

1.2.1. XML マッピングとは

1.2.1.1. 概要

XMLマッピングは簡易にXMLからXMLへの変換を行うXSLスタイルシートを作成することを支援するためのツールです。SOAPなどのXMLメッセージの変換処理、XMLをインタフェースとする各種アダプタ向けXMLフォーマットにあわせるための変換処理などを記述することを目的とします。WebOTX Developerの中でのスムーズで一貫性の取れたユーザインタフェースを提供し、開発効率を高めることを目的とします。

1.2.1.2. 主な機能

XMLマッピングの主な機能は以下の通りです。


ここでは、
を中心に説明します。

1.2.1.3. XMLマッピングのGUI画面の概要

XMLマッピング パースペクティブは下図のような画面で構成されています。


図1.2.1.3-1

パースペクティブ メニュー ウィンドウ > パースペクティブを開く > XMLマッピング を選択することで、XMLマッピング  パースペクティブに切り替えることができます。

メニューバー ここでは、XMLマッピングのメニューとメニュー項目について、概要を説明します。
表1.2.1.3-1
メニュー メニュー項目 説明 詳細
ファイル(F) 新規(N) XMLマッピングファイル XMLマッピングファイルを新規に作成します。 XMLマッピングファイルの作成
編集(E) 検索/置換(F) スキーマエリアのスキーマノードを検索します。 ツリーの検索
実行(R) 実行(S) XMLからXMLへの変換処理を画面から実行します。 実行
XML マッピング(X) スキーマクリア(R) ソース(S) ソーススキーマエリアをクリアします。 スキーマのクリア
ターゲット(T) ターゲットスキーマエリアをクリアします。 スキーマのクリア
スキーマ指定(T) ソース(S) ソーススキーマを指定します。 スキーマの指定
ターゲット(T) ターゲットスキーマを指定します。 スキーマの指定
スキーマ更新(U) ソース(S) ソーススキーマを更新します。 スキーマの更新
ターゲット(T) ターゲットスキーマを更新します。 スキーマの更新
線を結ぶ(C) ソーススキーマノードとターゲットスキーマノードの間に、線を結んで、マッピングを行います。 線を結ぶ
XSL出力(O) デザインしたXSLTソースコードをXSLファイルに出力します。 XSL出力設定
自動XSL出力(A) このトグルメニューで、XMLマッピングファイルを保管すると、XSLTソースコードをXSLファイルに出力できます。 自動XSL出力
名前空間(N) このトグルメニューで、ソーススキーマノードとターゲットスキーマノードの名前空間を表示する。 名前空間の表示
ツールバー ツールバーには 線を結ぶ と XSL出力  ボタンがあります。


図1.2.1.3-2

表1.2.1.3-2
ボタン名称 説明 詳細
線を結ぶ ソーススキーマノードとターゲットスキーマノードの間に、線を結んで、マッピングを行います。 線を結ぶ
XSL出力 デザインしたXSLTソースコードをXSLファイルに出力します。 XSL出力設定

XMLマッピングエディタ XMLマッピングエディタはマッピングページとXSLTソースページ二つのページで構成されます。
マッピングページはマッピングを行うエリアです。マッピングとは、変換元のXMLのスキーマと変換先のXMLのスキーマとの間に変換のための対応規則を定義することです。
マッピングエリアは下図のようなエリアで構成されています。


図1.2.1.3-3

スキーマエリア スキーマエリアには、XML Schema、WSDLのスキーマ構造がツリー形式で表示されます。左側のスキーマエリア(ソーススキーマエリア)にはXMLの変換元となるスキーマがツリー形式で表示され(ソースツリー)、右側のスキーマエリア(ターゲットスキーマエリア)にはXMLの変換結果となるスキーマがツリー形式で表示されます(ターゲットツリー)。
スキーマツリーで表示されるノード(スキーマノード)には、以下のものがあります。
表1.2.1.3-3
アイコン 用語 説明
ルートノード ・変換元のXMLファイルの内容:ルートとなるノードです。要素ノードでもあります。
・スキーマエリアの最上部に表示されます。
要素ノード ・変換元のXMLファイルの内容:中にタグとして現れるノードです。
テキストノード ・変換元のXMLファイルの内容:で、タグで囲まれたテキストであります。
・出力するテキストの内容を制御する機能を持ちます。
アトリビュートノード ・変換元のXMLファイルの内容:の属性を表します。
・出力する属性の値を制御する機能を持ちます。
オプションノード ・要素、アトリビュート、オプション、イテレーション、チョイス等のXML子構造の出現がオプショナルであることを表します。
・子構造を出力するかどうかを制御する機能を持ちます。
イテレーションノード ・要素、オプション、イテレーション、チョイスなどのXML子構造が、繰り返し出現することを表します。
-「+」は、子要素が1回以上出現することを表します。 -「*」は、子要素が0回以上出現することを表します。
・子構造を繰り返し出力することを制御する機能を持ちます。
シーケンスノード ・要素、オプション、イテレーション、チョイス等のXML子構造が順番に出現することを表します。
チョイスノード ・要素、オプション、イテレーション、チョイス、シーケンス等の子構造のうちどれか一つだけが出現することを表します。
・どの子構造を出力するかを制御する機能を持ちます。
代替ノード ・substitutionGroupのelement等のうちどれかが一つだけ出現することを表示します。
・どの子構造を出力するかを制御する機能を持ちます。
なお、ソーススキーマエリア側のスキーマノードのことをソーススキーマノード、ターゲットスキーマエリア側のノードのことをターゲットスキーマノードとも呼びます。
コネクタエリア コネクタエリアには、ソーススキーマノード、ターゲットスキーマノード対応した結線用のコネクタが表示されます。コネクタエリア中に表示されるコネクタは、選択の状態や結線の有無に応じて以下のように表示形態が変わります。
表1.2.1.3-4
選択状態にある 選択状態にない
結線が隠れている
結線が隠れていない
マッピングエリア マッピングエリアには、ソーススキーマノードとターゲットスキーマノードとの結線が表示されます。
結線には、以下の種類があります。
表1.2.1.3-5
選択状態にある 選択状態にない 説明
データ線 (黒い線) ターゲットのテキスト、アトリビュートノードに対して結ばれる線です。
コントロール線 (青い線) ターゲットのオプション、イテレーション、チョイス、代替ノードに対して結ばれる線です。
関数編集線 (緑の線) 関数編集を行ったデータ線です。
手動編集線 (灰色の線) 手で編集した結線です。
不整合線 (赤い線) エラーの存在を知らせる線です。

マッピングビュー マッピングビューには、ソーススキーマノードとターゲットスキーマノードの接頭辞と名前空間が表示されます。
XMLマッピングエディタでノードをクリックして、マッピングビューには該当ノードの接頭辞と名前空間情報が表示されます。ノードには接頭辞と名前空間が無い場合、マッピングビューに接頭辞と名前空間がブランクです。マッピングビューには接頭辞と名前空間は編集不可です。

1.2.2. XMLマッピングの作成

XMLマッピングエディタで編集した情報はXMLマッピングファイルに格納されます(拡張子.xmf)。
ここでは、新規にXMLマッピングファイルを作成する手順、既存のXMLマッピングファイルをロードする手順について説明します。

1.2.2.1. XMLマッピングプロジェクトの作成

メニュー ファイル > 新規 > その他... を選択。新規 ダイアログが表示されます。


図1.2.2.1-1

上記のダイアログで、マッピング > XMLマッピングプロジェクト を選択、次へ をクリック。あるいは、メニュー ファイル > 新規 を選択することでポップアップしたサブメニューで、


図1.2.2.1-2

プロジェクト を選択。新規プロジェクト ダイアログが表示されます。


図1.2.2.1-3

上記のダイアログで、マッピング > XMLマッピングプロジェクト を選択、次へ をクリック。新規XMLマッピングプロジェクト ダイアログが表示されます。


図1.2.2.1-4

新規XMLマッピングプロジェクト ダイアログで、プロジェクト名 テキストに、作成するXML マッピングプロジェクトの名前を入力し、ロケーションを選択し、完了 をクリック、XMLマッピングプロジェクトが生成されます。


図1.2.2.1-5


1.2.2.2. XMLマッピングファイルの作成

メニュー ファイル > 新規 > その他... を選択。新規 ダイアログが表示されます。


図1.2.2.2-1

上記のダイアログで、マッピング > XMLマッピングファイル を選択、次へ を押クリック。あるいは、メニュー ファイル > 新規 を選択することでポップアップしたサブメニューで、


図1.2.2.2-2

XMLマッピングファイル を選択。新規XMLマッピングファイル ダイアログが表示されます。


図1.2.2.2-3

新規XMLマッピングファイル ダイアログで、XMLマッピングファイル・フォルダ にXMLマッピングファイルを作成したいフォルダ名を指定します。 ブラウズ(B) をクリックすることで、既存のフォルダの中からフォルダを選択することができます。

ブラウズ(B) をクリック。フォルダーの選択 ダイアログが表示されます。


図1.2.2.2-4

このダイアログで、既存のプロジェクトのフォルダを選択できます。

新規XMLマッピングファイルダイアログで、XMLマッピングファイル名 を入力します。

プロジェクトには何のマッピングファイルもない場合、初期値を"new_file.xmf"にします。プロジェクトにはマッピングファイルが既に存在している場合、初期値を自動的に名前を重ならないように"new_file2.xmf"、"new_file3.xmf"の順にします。

新規XMLマッピングファイル ダイアログ で、XSL出力先フォルダ にXSLファイルの出力先を指定します。ブラウズ(E) をクリックすると、XMLマッピングファイルのプロジェクトのフォルダからフォルダを選択することができます。

ブラウズ(E) をクリック。フォルダ選択 ダイアログが表示されます。


図1.2.2.2-5

このダイアログで、XMLマッピングファイルのプロジェクトのフォルダからフォルダを選択できます。

新規XMLマッピングファイル ダイアログで、XSLファイル名 を入力します。XMLマッピングファイル名  を変更すると、自動的にXSLファイル名が変更されます。

新規XMLマッピングファイル ダイアログで、ソーススキーマ に変換元のXMLのスキーマとして参照するDTD、XML Schema、XMLインスタンスまたはWSDLのフィアル名を指定します。さらに、ルート要素を選択します。

ソーススキーマ(S) テキストボックスにスキーマファイル名を入力するか、隣の ブラウズ(R) をクリック、既存のスキーマファイルを選択します。

ブラウズ(R) をクリックすると、ポップアップメニューが表示されます。


図1.2.2.2-6

ワークスペース を選択すると、スキーマファイルの選択 ダイアログが表示されます。


図1.2.2.2-7

こののダイアログで、ワークスペースから、XMLスキーマ、WSDLファイルが選択できます。

ファイルシステム を選択すると、ファイルを開く ダイアログが表示されます。


図1.2.2.2-8

このダイアログで、既存のXMLスキーマ、WSDLファイルが選択できます。

ソーススキーマ を入力すると、ルート要素 ドロップダウンリストが選択できるようになります。ここでルート要素を選択してください。

新規XMLマッピングファイル ダイアログの ターゲットスキーマ に変換結果のXMLのスキーマとして参照するXML SchemaまたはWSDLのフィアル名を指定します。さらに、そのルート要素を選択します。

新規XMLマッピングファイル ダイアログで全ての内容を入力し終わった後、完了 をクリック。 XMLマッピングファイルが新たに作成され、XMLマッピングエディタが開きます。


図1.2.2.2-9

1.2.2.3. 既存のXMLマッピングファイルのロード

既存のXMLマッピングファイルをロードして開くには以下のような操作を行います。



1.2.2.4. プロパティー設定機能

作成したプロジェクトで右クリックして、下図のような画面が表示されます。


図1.2.2.4-1

上記の 右クリックメニュー プロパティー を選択、下図のような画面が表示されます。 XMLマッピング  を選択します。


図1.2.2.4-2

Memo
XMLマッピングXMLマッピングファイル  の拡張子は小文字でなければなりません。

上記のダイアログで、左側のツリービューに、XMLマッピングファイルを選択し、下記の対象を指定することができます。

XSL出力フォルダ名 で、XSLファイルの出力先フォルダを指定します。ブラウズ をクリックすることで、既存のフォルダの中からフォルダを選択することができます。

ブラウズ をクリック。フォルダ選択 ダイアログが表示されます。


図1.2.2.4-3

OK をクリック、XSL出力フォルダ名 の設定を完了します。

XSLファイル名 に出力するXSLファイル名を入力します。

適用 をクリックすると、各XMLマッピングファイルの設定を保管します。XMLマッピングファイルごとに異なる設定を行うことができます。

前回保存した状態に戻す をクリックすると、前回保存した状態に戻します。

変換元のXMLフォルダ と 変換元のXML 変換先のXMLフォルダ と 変換先のXML  の操作は、XSL出力フォルダ名 と XSLファイル名 の操作と同じです。

1.2.2.5. ウィンドウ|設定機能

メニュー ウィンドウ > 設定 > WebOTX > マッピング を選択。設定画面が表示されます。


図1.2.2.5-1

上記のダイアログで、XMLマッピング を選択したら、設定画面が表示されます。


図1.2.2.5-2

上記のダイアログで、XMLマッピングプロジェクトを新規時にxslの出力ディレクトリを指定するために、XSL出力フォルダ名 を入力します。XSL出力フォルダ名 を入力したら、下図のフォルダ名が設定されます。


図1.2.2.5-3

XMLマッピング設定ダイアログで、XMLマッピングプロジェクトを新規時に自動XSL出力機能を指定するために、自動XSL出力 をONにします。自動XSL出力 をONにしたら、下図の項目が指定されます。


図1.2.2.5-4

ファイル{workspace}\.metadata\.plugins\org.eclipse.core.runtime\.settings\jp.co.nec.ebiz.developmentkit.mapper.xml2xml.tools.prefsに、logdisable=falseを設定したら、下図のファイルが生成されます。


図1.2.2.5-5

XMLマッピング設定ダイアログで、ソーススキーマノードとターゲットスキーマノードの名前空間を表示するために、名前空間の表示 をONにします。名前空間の表示 をONにすると、下図の項目指定されます。


図1.2.2.5-6

XMLマッピング設定ダイアログで、ソーススキーマとターゲットスキーマのツリーで再帰構造をもつスキーマ要素を表示する深さを決めるために、表示する深さ の値を設定します。表示する深さ を5に入力したら、ソーススキーマとターゲットスキーマのツリーで下図のようにノードが表示されます。


図1.2.2.5-7


ここでは、XMLマッピングエディタを使って、XMLマッピングファイルを編集する方法について説明します。

1.2.2.6. マッピング

XMLマッピングエディタのマッピングページ上で、ソーススキーマエリアとターゲットスキーマエリア上のノード間に線を結ぶことで、マッピングを行うことができます。

マッピングの概念

XMLマッピングでは線を結ぶノードの種類によって、さまざまな変換処理を表現することができます。その概要を表に示します。

表1.2.2.6-1
ターゲットスキーマノード 目的 ソーススキーマノード 詳細
テキストノード 要素のテキストの値を出力したい 要素ノード 要素のテキストの値を出力します。
テキストノード (要素の)テキストの値を出力します。
アトリビュートノード アトリビュートの値を出力します。
アトリビュートノード 属性の値を出力したい 要素ノード 要素のテキストの値を出力します。
テキストノード (要素の)テキストの値を出力します。
アトリビュートノード アトリビュートの値を出力します。
チョイスノード 出力のチョイスのどれを出力するかを、入力データの値によって決めたい。 テキストノード テキストの値を元に出力する子ノードを決定します。
アトリビュートノード アトリビュートの値を元に出力する子ノードを決定します。
どのチョイスを出力するかを、入力として現れたチョイスの種類によって決めたい。 チョイスノードの子孫の テキストノード、 アトリビュートノード 出力のチョイスノードの子孫ノードと結線することによって、出現したノードの種類に応じ出力する子ノードを決定します。
イテレーションノード 出力の繰り返しを入力の繰り返しに応じて繰り返し出力させたい。 イテレーションノード 入力データの繰り返し回数だけ、出力が繰り返されます。
オプションノード 入力データが出現した場合、1回の繰り返しとして出力が行われます。
要素ノード 入力データに要素が出現するごとに出力が繰り返されます。
オプションノード オプションの出力の有無を値でコントロールしたい。 テキストノード テキストの値の条件比較よって出力するかどうかを決定します。
アトリビュートノード アトリビュートの値の条件比較よって出力するかどうかを決定します。
オプションの出力の有無を入力データの有無によってコントロールしたい イテレーションノード 入力データの繰り返しの有無によって出力するかどうかを決定します。
代替ノード 出力の代替のどれを出力するかを、入力データの値によって決めたい。 テキストノード テキストの値を元に出力する子ノードを決定します。
アトリビュートノード アトリビュートの値を元に出力する子ノードを決定します
どの代替を出力するかを、入力として現れた代替の種類によって決めたい。 代替ノードの子孫の テキストノード、 アトリビュートノード 出力の代替ノードの子孫ノードと結線することによって、出現したノードの種類に応じ出力する子ノードを決定します。
線を結ぶ

ソーススキーマノードとターゲットスキーマノードを選択した状態にして、以下のいずれかの操作を行うと選択したノード間に線を結ぶことができます。



図1.2.2.6-1


図1.2.2.6-2

上記の操作で選択したノード間に線が結ばれます。


図1.2.2.6-3

線を選択する
以下の二つの方式で、線を選択することができます。
線を削除する
削除したい線を選択します。以下の三つの方式で線を削除することができます。


図1.2.2.6-4


図1.2.2.6-5

上記の方法で、線が削除されます。


図1.2.2.6-6

マッピングのチェック
マッピングの規則に反するような線を結ぼうとすると、ドラッグ&ドロップする場合はマウスのアイコンがドロップ不可の状態になりますが、他の場合はエラーダイアログや問題ビューにエラーメッセージが表示されます。
結線可能なノードの組み合わせチェック
ソーススキーマノードと、ターゲットスキーマノードの間には結線の可能な組み合わせと禁止されている組み合わせがあります。可否は下表の通りです。
表1.2.2.6-2
  ターゲット ソース 要素 テキスト アトリビュート シーケンス チョイス イテレーション オプション 代替
要素 × × × ×
テキスト × × ×
アトリビュート × × ×
シーケンス × × × × × × × ×
チョイス × × × × × × × ×
イテレーション × × × × × ×
オプション × × × × × ×
代替 × × × × × × × ×

Caution
「○」は結線できることを表します。

Caution
「×」は結線できないことを表します。

結線できないノードの間に、線を結ぶと、下記のようなエラーダイアログが出ます。


図1.2.2.6-7

複数結線の可否チェック
ターゲットスキーマノードの中には複数のソーススキーマノードと線を結ぶことができるものがあります。以下に複数結線の可否を一覧で示します。
表1.2.2.6-3
ターゲット側 複数結線可能
ルート ×
要素 ×
アトリビュート
テキスト
イテレーション ×
オプション
チョイス
シーケンス ×
代替 ×

Caution
「○」は複数結線できることを示します。

Caution
「×」は複数結線できないことを示します。

複数結線できないノードに、複数の線を引くと、下記のようなエラーダイアログが出ます。


図1.2.2.6-8

不整合線チェック
複数のイテレーションノード - イテレーションノード間の結線が、線が交錯しツリーの親子関係が逆転するような形で結ばれているものは、不整合線として扱われ、エラーの扱いとなります。
例:下図のようなマッピングがあります。


図1.2.2.6-9

これにさらに、ソース側の「Root/*/A/*/B/*」からターゲット側「root/*/a/*/b/*」に線を引くと、下図のようになります。


図1.2.2.6-10

これら3本の線は不整合線となります。また、問題ビューに下記のエラーメッセージが出ます。


図1.2.2.6-11

交錯した線を削除すると、不整合線の扱いは解消され、エラーメッセージも問題ビューから消えます。

論理的に不完全なXSLT生成の警告チェック
マッピングページの結線に対して初期状態で生成されるXSLTソースコードは、場合によっては論理的に不完全な場合があります。例えば、イテレーションノードへの結線に対し繰り返しの条件(<xsl:for-each>文のselect式)を正確に生成することができない場合があります。また、オプションノードへの結線に対して、比較判定条件(<xsl:if>文のtest式)を正確に生成することができない場合があります。このようなマッピング操作を行うと、問題ビューで警告メッセージが出ます。
例:下図のようなマッピングに対して生成される繰り返しの条件式は論理的に不完全なものである可能性があるので、このような結線を行うと問題ビューに警告が表示されます。


図1.2.2.6-12


図1.2.2.6-13

下図のようなマッピングに対して生成される比較判定の条件式は、論理的に不完全なものである可能性があるので、問題ビューに警告が表示されます。


図1.2.2.6-14

これらの結線を削除すると、警告メッセージが問題ビューから消えます。

Memo
【参照情報】<xsl:for-each>文のselect式や<xsl:if>文のtest式等、生成されるXSLTソースコードに関しては、1.2.2.12. XSLTソースページでの編集を参照してください。


手でXSLTソースコードを編集した状態でのマッピング操作に対する警告チェック

XSLTソースコードを手で変更すると、修正箇所に対応したターゲットスキーマノードをマッピングページで編集操作すると、問題ビューで警告メッセージ「ノード"…"の<template>"…"は既に手動で編集されたので、このターゲットスキーマノードに対しての操作は引き続きXSLTソースコードの<template> "…"へ反映することができなくなります。」が表示されます。


図1.2.2.6-15

この警告がでた状態では、マッピングページでの編集操作を警告の出たノードに対して行っても、対応するXSLTソースコードが生成されませんので注意してください。
当該ノードに対して、「初期状態XSLに戻す」操作を行うことで、上記の警告メッセージが問題ビューから消えます。

Memo
【参照情報】ノードに対応するXSLTソースコードは、次節の[XSLTソースコード編集]を参照してください。

Memo
【参照情報】「初期状態XSLに戻す」機能は、1.2.2.8. 初期状態XSLに戻すを参照してください。

XSLTソースコード編集
マッピングページで作成したマッピングは、相当する変換処理を行うXSL
初期状態のコード マッピングページでマッピングを行うことによって、以下に説明するルールに基づき初期状態のXSLTソースコードが生成されます。
XML宣言、<xsl:stylesheet>、<xsl:output>文が先頭に生成されます。
ターゲットスキーマノードごとに「<xsl:template>……</xsl:template>」が生成されます。
子ノードを持つターゲットスキーマノードは、それらの子ノードに対応する「<xsl:template>」を呼び出す「<xsl:call-template name="..."/>」が生成されます。
ノードの種別と結線の状態によって、以下のようなコードが初期状態のXSLTソースコードとしてターゲットスキーマノードに対して生成されます。
表1.2.2.6-4
ソーススキーマノード XSLTソースコード マッピング例
無し
<xsl:template name="%テンプレートの名前%">
  <%要素ノードの要素名%>
    <xsl:call-template name="%子ノードテンプレートの名前1%"/>
      :
  </%要素ノードの要素名% >
</xsl:template>
          


表1.2.2.6-5
ソーススキーマノード XSLTソースコード マッピング例
無し
<xsl:template name="%テンプレートの名前%">
</xsl:template>
          
要素
<xsl:template name="%テンプレートの名前%">
  <xsl:value-of select="%要素ノードのXPath%"/>
</xsl:template>
          
テキスト
<xsl:template name="%テンプレートの名前%">
  <xsl:value-of select="%ソース側のテキストノードのXPath%"/>
</xsl:template>
          
アトリビュート
<xsl:template name="%テンプレートの名前%">
  <xsl:value-of select="%アトリビュートノードのXPath%"/>
</xsl:template>
          


表1.2.2.6-6
ソーススキーマノード XSLTソースコード マッピング例
無し
<xsl:template name="%テンプレートの名前%">
  <xsl:attribute name="%アトリビュート名%">
  </xsl:attribute>
</xsl:template>
            
要素
<xsl:template name="%テンプレートの名前%">
  <xsl:attribute name="%アトリビュートノードのアトリビュート名%">
    <xsl:value-of select="%要素ノードのXPath%"/>
  </xsl:attribute>
</xsl:template>
            
テキスト
<xsl:template name="%テンプレートの名前%">
  <xsl:attribute name="%アトリビュートノードのアトリビュート名%">
    <xsl:value-of select="%テキストノードのXPath%"/>
  </xsl:attribute>
</xsl:template>
            
アトリビュート
<xsl:template name="%テンプレートの名前%">
  <xsl:attribute name="%アトリビュートノードのアトリビュート名%">
    <xsl:value-of select="%ソース側のアトリビュートノードのXPath%"/>
  </xsl:attribute>
</xsl:template>
            

表1.2.2.6-7
ソーススキーマノード XSLTソースコード マッピング例
無し
<xsl:template name="%テンプレートの名前%">
  <xsl:call-template name="%子ノードのテンプレートの名前1%"/>
  <xsl:call-template name="%子ノードのテンプレートの名前2%"/>
     :
</xsl:template>
            
要素
<xsl:template name="%テンプレートの名前%">
  <xsl:for-each select="%要素ノードのXPath%">
    <xsl:call-template name="%子ノードのテンプレートの名前1%"/>
    <xsl:call-template name="%子ノードのテンプレートの名前2%"/>
    :
  </xsl:for-each>
</xsl:template>
            
イテレーション
<xsl:template name="%テンプレートの名前%">
  <xsl:for-each select="%ソース側のイテレーションノードの(必ず出現する)最初の子要素のXPath%">
    <xsl:call-template name="%子ノードテンプレートの名前1%"/>
    <xsl:call-template name="%子ノードテンプレートの名前2%"/>
    :
  </xsl:for-each>
</xsl:template>
            
オプション
<xsl:template name="%テンプレートの名前%">
  <xsl:for-each select="%オプションノードの(必ず出現する)最初の子要素のXPath%">
    <xsl:call-template name="%子ノードテンプレートの名前1%"/>
    <xsl:call-template name="%子ノードテンプレートの名前2%"/>
    :
  </xsl:for-each>
</xsl:template>
            
表1.2.2.6-8
ソーススキーマノード XSLTソースコード マッピング例
?チョイスノードへの結線無し
?チョイスノードとチョイスノードの子孫ノード間に結線あり(ソース側が要素ノードの場合)
<xsl:template name="%テンプレートの名前%">
  <xsl:variable name="%変数名%">
    <xsl:choose>
      <xsl:when test="%要素ノードのXPATH%">      
        <xsl:value-of select="%チョイスノードのプロパティ値1%"/>
      </xsl:when>
      :
    </xsl:choose>
  </xsl:variable>
  <xsl:choose>
    <xsl:when test="$%変数名%=チョイスノードのプロパティ値1">
      <xsl:call-template name="%子ノードテンプレートの名前1%"/>
  </xsl:when>
  :
  </xsl:choose>
</xsl:template>
            
?チョイスノードへの結線無し
?チョイスノードとチョイスノードの子孫ノード間に結線あり(ソース側がテキストノードの場合)
<xsl:template name="%テンプレートの名前%">
  <xsl:variable name="%変数名%">
    <xsl:choose>
      <xsl:when test="%ソース側のテキストノードの親要素ノードのXPath%">
        <xsl:value-of select="%チョイスノードのプロパティ値1%"/>
      </xsl:when>
      :< br>
    </xsl:choose>
  </xsl:variable>
  <xsl:choose>   
    <xsl:when test="$%変数名%=チョイスノードのプロパティ値1">
      <xsl:call-template name="%子ノードテンプレートの名前1%"/>
    </xsl:when>
    :
  </xsl:choose>
</xsl:template>
            
?チョイスノードへの結線無し
?チョイスノードとチョイスノードの子孫ノード間に結線あり(ソース側がアトリビュートノードの場合)
<xsl:template name="%テンプレートの名前%">
  <xsl:variable name="%変数名%">
    <xsl:choose>
      <xsl:when test="%アトリビュートノードの親要素ノードのXPATH%">
        <xsl:value-of select="%チョイスノードのプロパティ値1%"/>
      </xsl:when>
      :
   </xsl:choose>
  </xsl:variable>
  <xsl:choose>
    <xsl:when test="$%変数名%=チョイスノードのプロパティ値1">
      <xsl:call-template name="%子ノードテンプレートの名前1%"/>
    </xsl:when>
    :
  </xsl:choose>
</xsl:template>
            
チョイスノードへの結線無し
<xsl:template name="%テンプレートの名前%">
  <xsl:call-template name="%子ノードテンプレートの名前1%"/>
  :
</xsl:template>
            
テキストノード
<xsl:template name="%テンプレートの名前%">
  <xsl:variable name="%変数名%">
    <xsl:value-of select="%テキストノードのXPath"/>
    :
  </xsl:variable>
  <xsl:choose>
    <xsl:when test="$%変数名%=チョイスノードのプロパティ値1">
      <xsl:call-template name="子ノードテンプレートの名前1"/>
    </xsl:when>
    :
  </xsl:choose>
</xsl:template>
            
アトリビュートノード
<xsl:template name="%テンプレートの名前%">
  <xsl:variable name="%変数名%">
    <xsl:value-of select="%アトリビュートノードのXPath%"/>
   :
    </xsl:variable>
  <xsl:choose>
    <xsl:when test="$%変数名%=チョイスノードのプロパティ値1">
      <xsl:call-template name="子ノードテンプレートの名前1"/>
    </xsl:when>
    :
  </xsl:choose>
</xsl:template>
            
表1.2.2.6-9
ソーススキーマノード XSLTソースコード マッピング例
無し
<xsl:template name="%テンプレートの名前%">
  <xsl:call-template name="%子ノードテンプレートの名前1%"/>
  :
</xsl:template>
            
要素ノード
<xsl:template name="%テンプレートの名前%">
  <xsl:if test="%要素ノードのXPath%|……">
    <xsl:call-template name="%子ノードテンプレートの名前1%"/>
    :
  </xsl:if>
</xsl:template>
            
テキストノード
<xsl:template name="%テンプレートの名前%">
  <xsl:if test="%テキストノードのXPath%=%条件値%|……">
    <xsl:call-template name="%子ノードテンプレートの名前1%"/>
    :              
  </xsl:if>
</xsl:template>
            
アトリビュートノード
<xsl:template name="%テンプレートの名前%">
  <xsl:if test="%アトリビュートのXPath%=%条件値%|……">
    <xsl:call-template name="%子ノードテンプレートの名前1%"/>
    :
  </xsl:if>
</xsl:template>
            
イテレーションノード
<xsl:template name="%テンプレートの名前%">
  <xsl:if test="%イテレーションノードの(必ず出現する)最初の子要素のXPath%|……">
    <xsl:call-template name="%子ノードテンプレートの名前1%"/>
    :
  </xsl:if>
</xsl:template>
            
オプションノード
<xsl:template name="%テンプレートの名前%">
  <xsl:if test="%ソース側のオプションノードの(必ず出現する)最初の子要素のXPath%|……">
    <xsl:call-template name="%子ノードテンプレートの名前1%"/>
    :
  </xsl:if>
</xsl:template>    
            
表1.2.2.6-10
ソーススキーマノード XSLTソースコード マッピング例
無し
<xsl:template name="%テンプレートの名前%">
  <xsl:call-template name="%子ノードテンプレートの名前1%"/>
  :
</xsl:template>
            
表1.2.2.6-11
ソーススキーマノード XSLTソースコード マッピング例
?代替ノードへの結線無し
?代替ノードと代替ノードの子孫ノード間に結線あり(ソース側が要素ノードの場合)
<xsl:template name="%テンプレートの名前%">
  <xsl:variable name="%変数名%">
    <xsl:choose>
      <xsl:when test="%要素ノードのXPATH%">
        <xsl:value-of select="%代替ノードのプロパティ値1%"/>
      </xsl:when>
      :
    </xsl:choose>
  </xsl:variable>
  <xsl:choose>
    <xsl:when test="$%変数名%=代替ノードのプロパティ値1">
      <xsl:call-template name="%子ノードテンプレートの名前1%"/>
    </xsl:when>
    :
  </xsl:choose>
</xsl:template>
            
?代替ノードへの結線無し
?代替ノードと代替ノードの子孫ノード間に結線あり(ソース側がテキストノードの場合)
<xsl:template name="%テンプレートの名前%">
  <xsl:variable name="%変数名%">
    <xsl:choose>
      <xsl:when test="%ソース側のテキストノードの親要素ノードのXPath%">
       <xsl:value-of select="%代替ノードのプロパティ値1%"/>
         </xsl:when>
         :
    </xsl:choose>
  </xsl:variable>
  <xsl:choose>
    <xsl:when test="$%変数名%=代替ノードのプロパティ値1">
      <xsl:call-template name="%子ノードテンプレートの名前1%"/>
    </xsl:when>
    :
  </xsl:choose>
</xsl:template>
            
?代替ノードへの結線無し
?代替ノードと代替ノードの子孫ノード間に結線あり(ソース側がアトリビュートノードの場合)
<xsl:template name="%テンプレートの名前%">
  <xsl:variable name="%変数名%">
    <xsl:choose>
      <xsl:when test="%アトリビュートノードの親要素ノードのXPath%">
        <xsl:value-of select="%代替ノードのプロパティ値1%"/>
      </xsl:when>
      :
    </xsl:choose>
  </xsl:variable>
  <xsl:choose>
    <xsl:when test="$%変数名%=代替ノードのプロパティ値1">
      <xsl:call-template name="%子ノードテンプレートの名前1%"/>
    </xsl:when>
    :
  </xsl:choose>
</xsl:template>
            
代替ノードへの結線無し
<xsl:template name="%テンプレートの名前%">
  <xsl:call-template name="%子ノードテンプレートの名前1%"/>
  :
</xsl:template>
            
テキストノード
<xsl:template name="%テンプレートの名前%">
  <xsl:variable name="%変数名%">
    <xsl:value-of select="%テキストノードのXPath"/>
    :
  </xsl:variable>
  <xsl:choose>
    <xsl:when test="$%変数名%=代替ノードのプロパティ値1">
      <xsl:call-template name="子ノードテンプレートの名前1"/>
    </xsl:when>
    :
  </xsl:choose>
</xsl:template>
            
アトリビュートノード
<xsl:template name="%テンプレートの名前%">
  <xsl:variable name="%変数名%">
    <xsl:value-of select="%アトリビュートノードのXPath%"/>
    :
  </xsl:variable>
  <xsl:choose>
    <xsl:when test="$%変数名%=代替ノードのプロパティ値1">
      <xsl:call-template name="子ノードテンプレートの名前1"/>
    </xsl:when>
    :
  </xsl:choose>
</xsl:template>
            

図1.2.2.6-16

例:下図のようなマッピングがあります。


図1.2.2.6-17

「XSLTソース」ページに切り替えると、初期状態のXSLTソースコードとして下記のコードが生成されます。


図1.2.2.6-18


XSLTソースの手動変更

XSLTソースページに切り替えることで、手でXSLTソースコードを自由に編集することができます。

ただし、一度XSLTソースコードを手で修正すると、修正を行った<xsl:template>に対応するターゲットスキーマノードに関して、マッピングページでの編集操作は、生成されるXSLに反映されなくなります。また、XSLTソースページで編集を行っても、マッピングページの結線にはその変更内容は反映されません。


1.2.2.7. スキーマのクリア・指定・更新

スキーマのクリア

ユーザがスキーマを変更したい場合、スキーマクリアの機能を使います。

例:下記のマッピングがあります。


図1.2.2.7-1

ソーススキーマをクリアしたい場合は、ソーススキーマエリアで右クリックします。下記のポップメニューが表示されます。


図1.2.2.7-2

右クリックメニュー スキーマのクリア をクリック。あるいは、メニュー XMLマッピング > スキーマクリア > ソース をクリック。すると、マッピングページは下図のようになります。


図1.2.2.7-3

ソーススキーマクリアは空白となり、ターゲットへの結線も削除されます。また、XSLTソースページのXSLTソースコードも初期状態にクリアされます。

ターゲットスキーマをクリアしたい場合、ターゲットスキーマエリアでの右クリックメニュー スキーマクリア、あるいは、メニュー XMLマッピング > スキーマクリア > ターゲット をクリックすることで、クリアできます。

スキーマの指定

空白状態のスキーマエリアにスキーマ指定の機能でスキーマを設定することができます。

例:ソーススキーマエリアが空白の状態で、ソーススキーマエリア上で右クリックします。下記のポップメニューが表示されます。


図1.2.2.7-4

右クリックメニュー スキーマの指定 をクリック。あるいは、メニュー XMLマッピング > スキーマ指定 > ソース を選択。すると、スキーマ指定 ダイアログが表示されます。


図1.2.2.7-5

ソーススキーマ にXML変換元のスキーマを指定します。XML Schema、WSDLのファイル名を指定することができます。さらに、ルート要素を選択します。

ソーススキーマ テキストボックスに手でスキーマのファイル名を指定するか、隣の ブラウズ をクリックして既存のファイルを選択します。

ソーススキーマ を入力すると、ルート要素 ドロップダウンリストで要素名を選択できるようになります。ここでルート要素を選択してください。

全ての内容を入力し終わった後、指定 をクリック。

指定したスキーマが、選択されたルート要素をルートとしてツリーの形式でソーススキーマエリアに表示されます。


図1.2.2.7-6

なお、XSLTソースページのXSLTソースコードは初期状態にリセットされます。変換結果のXMLのスキーマを変更したい場合は、ターゲットスキーマエリアでの 右クリックメニュー スキーマ指定、あるいはメニュー XMLマッピング > スキーマ指定 > ターゲット を選択することでターゲットのスキーマを指定します。

スキーマの更新

ユーザがスキーマを変更したい場合、スキーマ更新の機能を使います。

例:下記のマッピングがあります。


図1.2.2.7-7

ソーススキーマを更新したい場合は、ソーススキーマエリアで右クリックします。下記のポップメニューが表示されます。


図1.2.2.7-8

右クリックメニュー スキーマの更新 をクリック。あるいは、メニュー XMLマッピング > スキーマ更新 > ソース をクリック。

ターゲットスキーマを更新したい場合、ターゲットスキーマエリアで右クリックメニュー スキーマの更新、あるいは、メニュー XMLマッピング > スキーマ更新 > ターゲット をクリックすることで、ターゲットのスキーマを更新します。

Caution
下記のような手動でXSLTソースを変更した場合、スキーマ更新後、手動で変更した内容は再設定する必要があります。
・XSLTソースで内容を手動変更した場合
・関数の編集で関数を設定した場合
・ノードのプロパティを設定した場合


1.2.2.8. 初期状態XSLに戻す

XSLTソースページ上で<xsl:template>タグが手で変更されると、対応するターゲットスキーマノードを編集しても該当する<xsl:template>に変更が反映されなくなります。初期状態XSLに戻すことで、強制的にターゲットスキーマノードに対応する初期状態のXSLTソースコードに<xsl:template>タグを戻すことができます。

あるターゲットスキーマノードを選択して、右クリックすると、右クリックメニュー 初期状態XSLに戻す を選択。


図1.2.2.8-1

XSLソース初期化 確認ダイアログが出ます。


図1.2.2.8-2

はい をクリックすると、対応するXSLTソースコードが初期状態のコードに戻ります。

初期状態XSLに戻す操作を行うと、問題ビューに出ていた警告も消えます。

1.2.2.9. ノードのプロパティ設定

ターゲットスキーマノードはノードのプロパティを持ちます。ノードのプロパティはノードのプロパティ設定ダイアログを用いて設定します。ノードのプロパティの設定値は、初期状態で生成されるXSLTソースコードに影響を与えます。

各ノードは以下のようなプロパティを持ちます。

表1.2.2.9-1
ターゲットスキーマノード プロパティ名 対応するXSLTソースコード
全種類共通 テンプレートの名前 <xsl:template>タグのname属性の値
チョイスノード チョイスノードの比較値 <xsl:when test="..."での比較値
オプションノード オプションノードの比較値 <xsl:if test="...">での比較
代替ノード 代替ノードの比較値 <xsl:when test="..."での比較値

ノードのプロパティ設定方法

あるターゲットスキーマノードを選択して、右クリックして、右クリックメニュー ノードのプロパティ設定 を選択。   


図1.2.2.9-1

ノードのプロパティ設定 ダイアログが出ます。

ノードの種別によって、出るダイアログが違います。


チョイスノードのプロパティ設定

チョイスノードを選択して、右クリックメニュー ノードのプロパティ設定 を選択すると、下記のダイアログが出ます。


図1.2.2.9-2

テンプレートの名前 の値はそのチョイスノードがXSLTソースコードの中の対応する<xsl:template>タグの名称(name属性の値)となります。テンプレートの名前を変更すると、XSLTソースコードの中の対応する<xsl:template>タグの名称が変更され、かつそのテンプレートを呼び出す(<xsl:call-template>する)XSLTソースコードも変更されます。

チョイスノードの比較値 の値は、このチョイスノードに対応する<xsl:template>タグ中の<xsl:when test="...">の条件比較値となります。チョイスノードの比較値を編集すると、XSLTソースコードのこの部分が更新されます。

例:

チョイスノードの比較値 で指定した値は以下のようなXSLTソースコードとして生成されます。すなわち、var1という変数の値が1の時1つ目のチョイスを出力し、var1の値が2の時2つ目のチョイスを出力します(var1の値はこの例では設定する式が空となっていますが、チョイスノードへの結線を行うことで入力データの値を参照することができます)。

表1.2.2.9-2
変更前
チョイスノードの比較値 チョイスノードに対応するXSLTソースコード
Child1 1
<!--template for node/Root/|-->
<xsl:template name="node2">
  <xsl:variable name="var1">
  </xsl:variable>
  <xsl:choose>
    <xsl:when test="$var1='1'">
      <xsl:call-template name="node3"/>
    </xsl:when>
    <xsl:when test="$var1='2'">
      <xsl:call-template name="node4"/>
    </xsl:when>
  </xsl:choose>
</xsl:template>
            
Child2 2

var1の値が"change"という文字列の時に1番目のチョイスを出力するようにするには、チョイスノードのプロパティ設定で、Child1のチョイスノード比較値の値を変更します。

表1.2.2.9-3
変更後
チョイスノードの比較値 チョイスノードに対応するXSLTソースコード
Child1 change
<!--template for node/Root/|-->
<xsl:template name="node2">
  <xsl:variable name="var1">
  </xsl:variable>
  <xsl:choose>
    <xsl:when test="$var1='change'">
      <xsl:call-template name="node3"/>
    </xsl:when>
    <xsl:when test="$var1='2'">
      <xsl:call-template name="node4"/>
    </xsl:when>
  </xsl:choose>
</xsl:template> 
            
Child2 2
オプションノードのプロパティ設定

オプションノードを選択して、右クリックメニュー ノードのプロパティ設定 を選択すると、下記のダイアログが出ます。


図1.2.2.9-3

テンプレートの名前 の設定について、詳細は「チョイスノードのプロパティ設定」を参照してください。

オプションノードの比較値 の値は、このオプションノードに対応する<xsl:template>タグ中の<xsl:if test="...">の条件比較値となります。オプションノードの比較値を編集すると、XSLTソースコードのこの部分が更新されます。

例:

表1.2.2.9-4
変更前
オプションノードの比較値 オプションノードに対応するXSLTソースコード
<!--template for node/Root/?-->
<xsl:template name="node2">
  <xsl:if test="Child1/text()=''">
    <xsl:call-template name="node3"/>
    <xsl:call-template name="node4"/>
  </xsl:if>
</xsl:template>
            
表1.2.2.9-5
変更後
オプションノードの比較値 オプションノードに対応するXSLTソースコード
change
<!--template for node/Root/?-->
<xsl:template name="node2">
  <xsl:if test="Child1/text()='change'">
    <xsl:call-template name="node3"/>
    <xsl:call-template name="node4"/>
  </xsl:if>
</xsl:template>
            

代替ノードのプロパティ設定

代替ノードを選択して、右クリックメニュー ノードのプロパティ設定 を選択すると、下記のダイアログが出ます。


図1.2.2.9-4

テンプレートの名前 の値はその代替ノードがXSLTソースコードの中の対応する<xsl:template>タグの名称(name属性の値)となります。テンプレートの名前を変更すると、XSLTソースコードの中の対応する<xsl:template>タグの名称が変更され、かつそのテンプレートを呼び出す(<xsl:call-template>する)XSLTソースコードも変更されます。

代替ノードの比較値 の値は、この代替ノードに対応する<xsl:template>タグ中の<xsl:when test="...">の条件比較値となります。代替ノードの比較値を編集すると、XSLTソースコードのその部分が更新されます。

例:

代替ノードの比較値で指定した値は以下のようなXSLTソースコードとして生成されます。すなわち、 substitutionVar1という変数の値が1の時1つ目の代替を出力し、 substitutionVar1の値が2の時2つ目の代替を出力します( substitutionVar1の値はこの例では設定する式が空となっていますが、代替ノードへの結線を行うことで入力データの値を参照することができます)。

表1.2.2.9-6
変更前
代替ノードの比較値 代替ノードに対応するXSLTソースコード
sub1 1
<!--template for node/Root/^-->
<xsl:template name="node2">
  <xsl:variable name="substitutionVar1">
  </xsl:variable>
  <xsl:choose>
    <xsl:when test="$substitutionVar1='1'">
      <xsl:call-template name="node3"/>
    </xsl:when>
    <xsl:when test="$substitutionVar1='2'">
      <xsl:call-template name="node4"/>
    </xsl:when>
 </xsl:choose>
</xsl:template>
            
sub2 2

substitutionVar1の値が"change"という文字列の時に1番目の代替を出力するようにするには、代替ノードのプロパティ設定で、sub1の代替ノード比較値の値を変更します。

表1.2.2.9-7
変更後
代替ノードの比較値 代替ノードに対応するXSLTソースコード
sub1 change
<!--template for node/Root/^-->
<xsl:template name="node2">
  <xsl:variable name="substitutionVar1">
  </xsl:variable>
  <xsl:choose>
    <xsl:when test="$substitutionVar1='change'">
      <xsl:call-template name="node3"/>
    </xsl:when>
    <xsl:when test="$substitutionVar1='2'">
      <xsl:call-template name="node4"/>
    </xsl:when>
  </xsl:choose>
</xsl:template>
            
sub2 2
他のノードのプロパティ設定

チョイス、オプション、代替以外のノードを選択して、右クリックメニュー ノードのプロパティ設定 を選択すると、下記のダイアログが出ます。


図1.2.2.9-5

テンプレートの名前 の設定について、詳細は「チョイスノードのプロパティ設定」を参照してください。

ノードのプロパティを変更した後で、適用し、ダイアログを閉じます。ノードに対応するXSLTソースコードは変更されます。

無効なノードプロパティ設定

ノードに対応するXSLTソースコードの<xsl:template>をXSLTソースページで手で変更していた場合、ノードのプロパティ設定ダイアログでの設定変更はXSLTソースコードに反映されません。問題ビューに警告メッセージ「ノード"…"に対応する<template>"…"は変更されています。変更を行ったプロパティはXSLTソースコードに反映されませんでした。」が表示されます。

「初期状態XSLに戻す」操作を行うことで、ノードに対応するXSLTソースコードを初期状態に戻すことができます。「初期状態XSLに戻す」を行った以降は、ノードのプロパティ設定ダイアログでの設定は再びXSLTソースコードに反映されるようになります。また、問題ビューの警告メッセージも消えます。

1.2.2.10. 関数の編集

「線を結ぶ」機能を利用して、ソーススキーマエリアのノードをターゲットスキーマエリアのノードと線で結ぶことができますが、データ線の場合、XSLTで生成したXPath表現式はソースノードのXPathだけです。

そのXPathにたいして、関数を追加して編集する場合がありますため、「関数の編集」機能を提供します。

「関数の編集」機能を利用すると、データ線またはターゲットノードを右クリックして、右クリックメニュー 関数の編集 を選択したりすると、関数の編集 ダイアログが表示される。そこでデータ線のXPath表現式に関数を追加して、XPath表現式を修正することができる。

「関数の編集」機能の提供している関数は基本的なXSLT標準関数ですが、ユーザが他の関数を追加することもできる。

関数の編集方法

ある結線したターゲットスキーマノードを選択して、右クリックして、右クリックメニュー 関数の編集 を選択。


図1.2.2.10-1


「関数の編集」ダイアログ

表示された 関数の編集 ダイアログは下記のようです:


図1.2.2.10-2


各部分の説明は下記の通りです:

表1.2.2.10-1
部品 説明
(1)ターゲットノード 選択したターゲットノードのXPathを表示する。
(2)結線の一覧 当ノードと関係あるすべてのデータ線のソースノードとXPath表現式を表示する。
(3)XPATH表現式エディタ 指定された結線のXPath表現式を表示する。
(4)「適用」ボタン 編集したXPath表現式を有効にする。
(5)関数リスト 提供しているXSLT基本の関数の関数名リストを表示する。 ダブルクリックすると、提供しているXSLT基本関数がXPath表現式エディタに挿入される。
(6)「他の関数を挿入」ボタン クリックすると、「他の関数の挿入」ダイアログを開く。
(7)「ノードを挿入」ボタン クリックすると、「ノードの挿入」ダイアログを開く。
(8)「閉じる」ボタン クリックすると、ウィンドウを閉じる。

結線の一覧から編集したい結線を選択すると、選択した結線のXPath表現式が XPath表現式エディタに表示されます。エディタで編集できます。

XSLT関数リストにあるXSLT関数をダブルクリックすると、その関数がエディタに挿入されます。提供しているXSLT関数の詳細は「8 XSLT関数」を参照してください。

ノードの挿入 ダイアログを通じて、他のノードのXPathをエディタに挿入できます。

他の関数の挿入 ダイアログを利用して、他のJava関数をエディタに挿入できます。

編集した後、適用 をクリックすると、編集した内容は結線に保存されます。

「適用」しなくて他の結線に切り替えするまたはウィンドウを閉じる場合、確認ダイアログがポップアップされます。保存する をクリックすると、編集を保存して、前の動作を実行する。保存しない をクリックすると、編集を廃棄して、前の動作を実行する。キャンセル をクリックすると、編集が続いています。


「ノードの挿入」ダイアログ

ノードの挿入 ダイアログは下記のようです:


図1.2.2.10-3

各部分の説明は下記の通りです:

表1.2.2.10-2
部品 説明
ツリー構造 ソース側のツリーを表示する。
「挿入」ボタン 選択したノードをエディタに挿入する。
「閉じる」ボタン ウィンドウを閉じる。

ソースツリーから挿入したいノードを選択して、ダブルクリックまたは 挿入 をクリックして、ノードのXpath表現式をエディタに挿入して、ウィンドウが閉じます。


「他の関数の挿入」ダイアログ

他の関数の挿入 ダイアログは下記のようです:


図1.2.2.10-4

各部分の説明は下記の通りです:

表1.2.2.10-3
部品 説明
Javaパッケージ 当該プロジェクトのClassPathにあるすべての利用できるJavaパッケージを表示する。
クラス Javaライブラリに所属するクラスを表示する。
メソッド クラスのすべてのスタティックパブリックメソッドリストを表示する。
「挿入」ボタン 選択した関数をエディタに挿入する。
「閉じる」ボタン ウィンドウを閉じる。

Javaパッケージ、クラスを順に選択すると、当クラスに所属するメソッドが表示されます。挿入したいメソッドを選択して、ダブルクリックまたは 挿入 をクリックすると、当メソッドがエディタに挿入されて、ウィンドウが閉じます。

1.2.2.11. ツリーの検索

指定した文字列の名前にマッチする要素・属性を、スキーマノードから検索することができます。

スキーマエリアで右クリックメニュー 検索 を選択するか、メニュー 編集 > 検索 を選択。或は、キーボード「Ctrl+F」を押下することで、要素・属性の検索 ダイアログが出ます。


図1.2.2.11-1

検索する文字列 に検索したい文字列を入力します。

検索範囲(スコープ)を選択します。ソースツリーターゲットツリー のいずれかを指定します。

オプション を選択します。大文字小文字の区別 をONにした場合、大文字小文字を区別して一致するものだけを検索します。OFFにする場合、大文字小文字の区別を行いません。単語全体 をONにした場合、指定した文字列に完全に一致するノードだけを検索します。OFFにする場合、指定した文字列に部分一致するノードを検索します。

次を検索 をクリックすると、ツリーの上から下へ順に検索を行います。ツリーの最後まで検索した場合、ツリーのルートノードから検索します。

入力した文字列に一致する名前の要素・属性が見つからない場合は、下記のエラーダイアログが表示されます。


図1.2.2.11-2

1.2.2.12. XSLTソースページでの編集

XSLTソースページでは、XSLTソースコードを自由に編集できます。

アシスト機能

XSLTソースページは、XSLTソースコードの編集を手助けしてくれるアシスト機能を持っています。アシスト機能はコードアシスト、パラメータアシスト、属性アシストの3種類の働きを持っています。

コードアシスト

コードアシストはXSLT要素、XSLT内蔵nbsp;関数(XPathコア関数、XSLT追加の関数)、軸、XPath式などの入力を補助する機能です。

コードアシストの出現

「<」、「"」、「Ctrl+Space」などを入力することでこの機能が動きます。

コードアシストの表示例


図1.2.2.12-1


図1.2.2.12-2

パラメータアシスト

パラメータアシストは関数のパラメータの入力を補助する機能です。

パラメータアシストの出現

関数の「()」の中で、「Ctrl+Space」を入力することでこの機能が動きます。

パラメータアシストの表示例


図1.2.2.12-3

属性アシスト

属性アシストはXSLT属性の入力を補助する機能です。

属性アシストの出現

「Space」、「Ctrl+Space」などを入力することでこの機能が動きます。

属性アシストの例


図1.2.2.12-4

補助的な機能

XSLTソースページで右クリックすると、下記の右クリックメニューが表示されます。


図1.2.2.12-5

名前空間の表示
ソーススキーマノードとターゲットスキーマノードの名前空間を表示することができます。
ユーザがソーススキーマノードとターゲットスキーマノードの名前空間を表示したい場合、名前空間の表示機能で表示する可能です。
名前空間を表示する可能なノードタイプ
ここでは、名前空間を表示する可能なノードタイプを説明します。
表1.2.2.12-1
スキーマノード 名前空間表示可能
ルート
要素
アトリビュート
テキスト ×
イテレーション ×
オプション ×
チョイス ×
シーケンス ×
代替 ×
名前空間の表示の使い方
XSDを用いたサンプル
Source Schemaは次のようなxsdファイルと指定されます。
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://source" xmlns:tns="http://source">
  <xsd:element name="Root" type="tns:tRoot"/>
  <xsd:complexType name="tRoot">
    <xsd:sequence>
      <xsd:element name="A" type="xsd:string" minOccurs="0"/>
      <xsd:element name="B" type="xsd:string"/>
      <xsd:element name="C" type="xsd:string"/>
    </xsd:sequence>
  </xsd:complexType>
</xsd:schema>
    
Target Schemaは次のようなxsdファイルと指定されます。
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://target" xmlns:tns="http://target">
  <xsd:element name="Root" type="tns:tRoot"/>
  <xsd:complexType name="tRoot">
    <xsd:sequence>
      <xsd:element name="X" type="xsd:string"/>
      <xsd:element name="Y" type="xsd:string"/>
      <xsd:element name="Z" type="xsd:string"/>
    </xsd:sequence>
  </xsd:complexType>
</xsd:schema>
    
XMLマッピングファイルは下の図の通り:

名前空間を表示したい場合、メニュー XMLマッピング > 名前空間 を選択。


図1.2.2.12-7

ノードの名前空間が表示されます。

ユーザがノードの名前空間を表示したくない場合、メニュー XMLマッピング > 名前空間 を選択して、名前空間が表示されません。
名前空間の表示規則
DTDを用いたサンプル
Source Schemaは次のようなdtdファイルと指定されます。
<!ELEMENT Root (A, B)>
<!ELEMENT A (#PCDATA)>
<!ELEMENT B (#PCDATA)>
    
DTD自身は名前空間をサポートしませんので、名前空間が”{ }”で表示されます。

XMLを用いたサンプル
Source Schemaは次のようなxmlファイルと指定されます。
<?xml version="1.0"?>
<t:Root xmlns:t="http://test" >
  <t:A name="">this is root</t:A>
</t:Root>
XMLは名前空間が”{ }”で表示されます。
targetNamespaceを使用していないXSDの場合 XSDを用いたサンプル Source Schemaは次のようなxsdファイルと指定されます。
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ns="namespace">
  <xsd:element name="AA" type="xsd:string"/>
</xsd:schema>
名前空間が次のように表示されます。
targetNamespaceを使用しているXSDの場合 XSDを用いたサンプル Source Schemaは次のようなxsdファイルと指定されます。
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="namespace" xmlns:ns1="namespace">
  <xsd:element name="AA" type="ns1:tRoot"/>
  <xsd:element name="BB" type="xsd:string"/>
  <xsd:complexType name="tRoot">
    <xsd:sequence>
      <xsd:element name="CC" type="xsd:string"/>
    </xsd:sequence>
    <xsd:attribute name="DD" type="xsd:string">
    </xsd:attribute>
  </xsd:complexType>
</xsd:schema>
名前空間が次のように表示されます。
XSDは複数の名前空間があります、xsd1はxsd2で定義したタイプを使用します。 XSDを用いたサンプル Source Schemaは次のようなxsdファイルと指定されます。
xsd1.xsd
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="namespace1" xmlns:ns1="namespace1" xmlns:ns2="namespace2">
  <xsd:import namespace="namespace2" schemaLocation="xsd2.xsd"/>
  <xsd:element name="AA" type="xsd:string"/>
  <xsd:element name="BB" type="ns2:tRoot"/>
</xsd:schema>
xsd2.xsd
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="namespace2" xmlns:ns2="namespace2">
  <xsd:element name="Root" type="ns2:tRoot"/>
  <xsd:complexType name="tRoot">
    <xsd:sequence>
      <xsd:element name="CC" type="xsd:string"/>
    </xsd:sequence> 
    <xsd:attribute name="DD" type="xsd:string"/>
  </xsd:complexType>
</xsd:schema> 
名前空間が次のように表示されます。
XSDは複数の名前空間があります、xsd1は(ref)xsd2で定義したタイプを使用します。 XSDを用いたサープル Source Schemaは次のようなxsdファイルと指定されます。
xsd1.xsd
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="namespace1" xmlns:ns1="namespace1" xmlns:ns2="namespace2">
<xsd:import namespace="namespace2" schemaLocation="xsd2.xsd"/>
  <xsd:element name="AA" type="ns1:tRoot1"/>
  <xsd:complexType name="tRoot1">
    <xsd:sequence>
      <xsd:element ref="ns2:BB"/>
    </xsd:sequence>
    <xsd:attribute name="CC" type="xsd:string"/>
  </xsd:complexType>
</xsd:schema>
xsd2.xsd
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="namespace2" xmlns:ns2="namespace2">
  <xsd:element name="BB" type="ns2:tRoot2"/>
  <xsd:complexType name="tRoot2">
    <xsd:sequence>
      <xsd:element name="DD" type="xsd:string"/>
    </xsd:sequence>
    <xsd:attribute name="EE" type="xsd:string"/>
  </xsd:complexType>
</xsd:schema> 
名前空間が次のように表示されます。
WSDLを用いたサンプル パートには「type」属性がある(属性値は「build-in type」) Source Schemaは次のようなwsdlファイルと指定されます。
<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="namespace" targetNamespace="namespace">
  <wsdl:message name="Msg1">
    <wsdl:part name="Part1" type="xs:int"/>
  </wsdl:message>
</wsdl:definitions>
名前空間が次のように表示されます。
WSDLを用いたサンプル パートには「type」属性がある(属性値は「simpleType」) Source Schemaは次のようなwsdlファイルと指定されます。
<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="namespace" targetNamespace="namespace" xmlns:ns2="http://testXSD" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <wsdl:types>
    <xsd:schema targetNamespace="http://testXSD" xmlns:tns="http://testXSD" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.w3.org/2001/XMLSchema">
      <xsd:simpleType name="simpleT">
        <xsd:restriction base="xsd:string">
          <xsd:enumeration value="AK"/>
          <xsd:enumeration value="AL"/>
          <xsd:enumeration value="AR"/>
        </xsd:restriction>
      </xsd:simpleType>
    </xsd:schema>
  </wsdl:types>
  <wsdl:message name="Msg1">
    <wsdl:part name="Part1" type="ns2:simpleT"/>
  </wsdl:message>
</wsdl:definitions>
名前空間が次のように表示されます。
WSDLを用いたサンプル パートには「type 」属性がある(属性値は「complexType 」) Source Schemaは次のようなwsdlファイルと指定されます。
<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="namespace" targetNamespace="namespace" xmlns:ns2="http://testXSD" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <wsdl:types>
    <xsd:schema targetNamespace="http://testXSD" xmlns:tns="http://testXSD" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
      <xsd:complexType name="complexT">
        <xsd:sequence>
          <xsd:element name="element1" type="xsd:int"/>
          <xsd:element name="element2" type="xsd:float"/>
        </xsd:sequence>
      </xsd:complexType>
    </xsd:schema>
  </wsdl:types>
  <wsdl:message name="Msg1">
    <wsdl:part name="Part1" type="ns2:complexT"/>
  </wsdl:message>
</wsdl:definitions>
名前空間が次のように表示されます。
WSDLを用いたサンプル パートには「element 」属性がある Source Schemaは次のようなwsdlファイルと指定されます。
<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="namespace" targetNamespace="namespace" xmlns:ns2="http://testXSD" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <wsdl:types>
    <xsd:schema targetNamespace="http://testXSD" xmlns:tns="http://testXSD" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
      <xsd:element name="ele" type="tns:complexT"/>
      <xsd:complexType name="complexT">
        <xsd:sequence>
          <xsd:element name="element1" type="xsd:int"/>
          <xsd:element name="element2" type="xsd:float"/>
        </xsd:sequence>
      </xsd:complexType>
    </xsd:schema>
  </wsdl:types>
  <wsdl:message name="Msg1">
    <wsdl:part name="Part1" element="ns2:ele"/>
  </wsdl:message>
</wsdl:definitions>
名前空間が次のように表示されます。
旧版(V7.1前)のXMLマッピングファイルの名前空間の表示 名前空間の表示 をONにする場合、旧版のマッピングファイルを開くと、警告ダイアログが表示されます。


図1.2.2.12-8

ソーススキーマノードとターゲットスキーマノードの名前空間が“{null}”で表示されます。


図1.2.2.12-9

1.2.3. XSLファイルの生成

作成したXSLTソースコードをファイルに出力することができます。 メニュー XMLマッピング > XSL出力 を選択すると、XSL出力を実行することができます。XSLファイルがXSL出力先フォルダに出力されます。フォルダが存在しない場合、フォルダは作成されます。 ツールバーで XSL出力 をクリックすると、下の画面が表示されます。


図1.2.3-1

自動XSL出力 自動XSL出力はXSLファイルの出力をファイルの保存時に自動的に行いたいときに使う機能です。 メニュー XMLマッピング > 自動XSL出力 を選択される場合、XMLマッピングファイルを保存する時に自動的にXSLをファイルに出力します。逆に、このトグルアイテムがチェックされない場合、ファイル保存の時にXSLファイルが生成されることはありません。 他のXSL出力方法 XSLTソースページでの右クリックメニュー XSL出力 を選択することで、編集中のマッピングをXSLファイルに出力します。出力先ファイル名はプロパティー設定のダイアログの設定に基づきます。

1.2.4. XMLデータ変換の実行

実行機能を使うと、XMLからXMLへの変換処理を画面上で即座に実行して、作成したマッピングの動作を確認することができます。 実行 メニュー 実行 > 実行構成 を選択すると、実行構成 ダイアログが出ます。


図1.2.4-1

XMLマッピング カテゴリを選択して、下方の 新規 を選択して、新しい 新規構成 を作成します。 「名前(N)」で構成名称を変更することができます。 XSLT変換(X)タブ 変換元のXMLファイル ここで変換元のXMLファイルを入力します。隣の ブラウズ(B) で既存のXMLファイルを選択することもできます。 XSLファイル ここでXSLファイルを入力します。隣の ブラウズ(S) で既存のXSLファイルを選択することもできます。 変換先のXMLファイル ここで変換先のXMLファイルを入力します。隣の ブラウズ(E) で既存のXMLファイルを選択することもできます。
変換元のXMLファイル は、XSLファイル変換先のXMLファイル の値は、プロパティー設定機能で設定値による設定します。
XSLTメイン・クラス 実行機能によって呼び出されるJavaクラスが指定されます。XSLTエンジンを呼び出すクラスがデフォルトで設定されますので、通常この設定は変更しないでください。 VM引き数・プログラム引き数 必要であれば、Java VMの引数、Javaプログラム引数を指定することができます。

Caution
JREタブで使用されるランタイムJREはJ2SDK1.4の場合、「VM引き数(G)」に次のように設定する必要があります。 -Djava.endorsed.dirs= WebOTX Developerのインストールディレクトリ\plugins\com.nec.webotx_7.10.0.00\lib\endorsed

JREタブ JREタブは下図の通りです。


図1.2.4-2

使用するランタイムJREを設定してください。 クラスパスタブ クラスパスタブは下図の通りです。


図1.2.4-3

Javaクラスパスを指定することができます。 共通 適用 ボタン 入力した設定情報が保存されます。 前回保存した状態に戻す ボタン 入力した設定情報は、前回保存した時の状態に戻ります。 実行 ボタン 入力した設定情報を保管して、XSLT変換を実行します。 閉じる ボタン 実行ダイアログを閉じます。

1.2.5. XMLスキーマへ変換機能

1.2.5.1. XMLファイルからXMLスキーマへ変換機能

パッケージ・エクスプローラー でXMLインスタンスで右クリックすると、下図のような画面が表示されます。


図1.2.5.1-1

上記の 右クリックメニュー  XMLマッピング >  XMLスキーマへ変換  を選択するとXMLスキーマファイルを生成します。生成するXMLスキーマファイルの名前と保存場所は、選択したファイルと同じになります。

1.2.5.2. DTDファイルからXMLスキーマへ変換機能

パッケージ・エクスプローラー でDTDインスタンスで右クリックして、下図のような画面が表示されます。


図1.2.5.2-1

上記の 右クリックメニュー  XMLマッピング >  XMLスキーマへ変換  を選択するとXMLスキーマファイルを生成します。生成するXMLスキーマファイルの名前と保存場所は、選択したファイルと同じになります。

1.2.5.3. WSDLファイルからXMLスキーマへ変換機能

パッケージ・エクスプローラー でWSDLインスタンスで右クリックして、下図のような画面が表示されます。


図1.2.5.3-1

XMLスキーマへ変換する前に、上記の 右クリックメニュー 検証 機能を利用し、エラーの無いWSDLファイルであることを確認します。
該当WSDLファイルにエラーが無い場合、上記の 右クリックメニュー  XMLマッピング >  XMLスキーマへ変換  を選択すると、選択したファイルと同じパスに、同じ名前のフォルダが生成されます。該当フォルダの直下に(1,*)WSDLファイルと(0,*)XMLスキーマファイルが生成されます。

Caution
WSDLファイルの多段構成が検出された場合、2段目以上のWSDL/XSDはスキーマに変換されません。
例えば、A.wsdlでB.wsdlをインポートし、B.wsdlでC.wsdlをインポートしている場合、A.wsdlファイルをXMLスキーマへ変換すると、C.wsdl部分は無視され、変換されません。
A.wsdlでB.xsdをインポートし、B.xsdでC.xsdをインポートしている場合、A.wsdlファイルをXMLスキーマへ変換すると、C.xsd部分は無視され、変換されません。

生成に失敗すると、下記のようなエラーダイアログが出ます。


図1.2.5.3-2

エラーの詳細な内容は、{workspace}\.metadata\.log ファイルを参照してください。

1.2.6. XSL実行、デバッグ機能

パッケージ・エクスプローラーでXSLファイルで右クリックして、下図のような画面が表示されます。


図1.2.6-1

上記の 右クリックメニュー  実行 >  XSL Transformation  を選択、下記のようなダイアログが出ます。


図1.2.6-2

ワークスペース 、ファイル・システム などボタンで入力のXMLファイルを入力して、 OK  ボタンを押すと実行が始まり、コンソールにメッセージが表示されます。実行が完了すると、 変換後XMLファイルが自動でエディタに開かれるます。下図のような画面が表示されます。


図1.2.6-3

XSLデバッグ機能 は、 XSL実行機能  の操作と一致です。

1.2.7. XSLT関数

XMLマッピングで利用可能なXSLT関数一覧および使い方を説明します。
表1.2.7-1
名称 返却型 関数名(または演算子)
数値 +
-
div
mod
語彙構造 *
ブール代数 or
and
=
!=
< [&lt;]
<= [&lt;=]
> [&gt;]
>= [&gt;=]
ノード設定関数 number last()
number position()
number count(node-set)
node-set id(object)
string local-name(node-set?)
string namespace-uri(node-set?)
string name(node-set?)
文字列関数 string concat(string,string, string*)
boolean starts-with(string,string)
boolean contains(string,string)
string substring-before(string,string)
string substring-after(string,string)
string substring(string,number, number?)
number string-length(string?)
string normalize-space(string?)
string translate(string,string, string)
ブール代数関数 boolean not(boolean)
boolean true()
boolean false()
boolean lang(string)
数値関数 number number(object?)
number sum(node-set)
number floor(number)
number ceiling(number)
number round(number)
その他 node-set document(object,node-set?)
node-set key(string,object)
string format-number(number,string, string?)
node-set current()
string unparsed-entity-uri(string)
string generate-id(node-set?)
object system-property(string)
boolean element-available(string)
boolean function-available(string)

1.2.7.1. 数値

数値は、浮動小数点数を表します。数値は、任意の倍精度64ビットフォーマット IEEE 754 値をとることができます。これには、特殊な「非数値」(NaN)値や、正および負の無限大、正および負のゼロが含まれます。

Memo 仕様の詳細についてはhttp://www.w3.org/TR/1999/REC-xpath-19991116/を参照してください。

+ 演算子は、加算を実行します。 関数の編集 ダイアログで Xpath表現式エディタ に以下の式を入力することが可能です。
6+2
XSLファイルの内容は以下のようになります。
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:java="http://xml.apache.org/xalan/java" exclude-result-prefixes="java" version="1.0">
  <xsl:output method="xml" version="1.0" omit-xml-declaration="no" encoding="UTF-8" indent="yes"/>
  <xsl:template match="/">
    <xsl:for-each select="root">
      <xsl:call-template name="node1"/>
    </xsl:for-each>
  </xsl:template>
  <!--template for node /result-->
  <xsl:template name="node1">
    <result>
      <xsl:call-template name="node2"/>
    </result>
  </xsl:template>
  <!--template for node /result/text()-->
  <xsl:template name="node2">
    <xsl:value-of select="6+2"/>
  </xsl:template>
</xsl:stylesheet>
変換先のXMLファイルの内容:
<?xml version="1.0" encoding="UTF-8"?>
<result>m2</result>
-
- 演算子は、減算を実行します。 関数の編集 ダイアログで Xpath表現式エディタ に以下の式を入力することが可能です。
6-2 
XSLファイルの内容は以下のようになります。
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:java="http://xml.apache.org/xalan/java" exclude-result-prefixes="java" version="1.0">
  <xsl:output method="xml" version="1.0" omit-xml-declaration="no" encoding="UTF-8" indent="yes"/>
  <xsl:template match="/">
    <xsl:for-each select="root">
      <xsl:call-template name="node1"/>
    </xsl:for-each>
  </xsl:template>
  <!--template for node /result-->
  <xsl:template name="node1">
    <result>
      <xsl:call-template name="node2"/>
    </result>
  </xsl:template>
  <!--template for node /result/text()-->
  <xsl:template name="node2">
    <xsl:value-of select="6-2"/>
  </xsl:template>
</xsl:stylesheet>
変換先のXMLファイルの内容:
<?xml version="1.0" encoding="UTF-8"?>
<result>4</result>
div
div 演算子は、IEEE 754 に従った浮動小数点除算を実行します。 関数の編集 ダイアログで Xpath表現式エディタ に以下の式を入力することが可能です。
6 div 2
XSLファイルの内容は以下のようになります。
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:java="http://xml.apache.org/xalan/java" exclude-result-prefixes="java" version="1.0">
  <xsl:output method="xml" version="1.0" omit-xml-declaration="no" encoding="UTF-8" indent="yes"/>
  <xsl:template match="/">
    <xsl:for-each select="root">
      <xsl:call-template name="node1"/>
    </xsl:for-each>
  </xsl:template>
  <!--template for node /result-->
  <xsl:template name="node1">
    <result>
      <xsl:call-template name="node2"/>
    </result>
  </xsl:template>
  <!--template for node /result/text()-->
  <xsl:template name="node2">
    <xsl:value-of select="6 div 2"/>
  </xsl:template>
</xsl:stylesheet>
変換先のXMLファイルの内容:
<?xml version="1.0" encoding="UTF-8"?>
<result>3</result>
mod
mod 演算子は、打ち切り除算の剰余を返します。 関数の編集 ダイアログで Xpath表現式エディタ に以下の式を入力することが可能です。
6 mod 2
XSLファイルの内容は以下のようになります。
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:java="http://xml.apache.org/xalan/java" exclude-result-prefixes="java" version="1.0">
  <xsl:output method="xml" version="1.0" omit-xml-declaration="no" encoding="UTF-8" indent="yes"/>
  <xsl:template match="/">
    <xsl:for-each select="root">
      <xsl:call-template name="node1"/>
    </xsl:for-each>
  </xsl:template>
  <!--template for node /result-->
  <xsl:template name="node1">
    <result>
      <xsl:call-template name="node2"/>
    </result>
  </xsl:template>
  <!--template for node /result/text()-->
  <xsl:template name="node2">
    <xsl:value-of select="6 mod 2"/>
  </xsl:template>
</xsl:stylesheet>
変換先のXMLファイルの内容:
<?xml version="1.0" encoding="UTF-8"?>
<result>0</result> 

1.2.7.2. 語彙構造

* は MultiplyOperator です。 関数の編集 ダイアログで Xpath表現式エディタ に以下の式を入力することが可能です。
6*2
XSLファイルの内容は以下のようになります。
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:java="http://xml.apache.org/xalan/java" exclude-result-prefixes="java" version="1.0">
  <xsl:output method="xml" version="1.0" omit-xml-declaration="no" encoding="UTF-8" indent="yes"/>
  <xsl:template match="/">
    <xsl:for-each select="root">
      <xsl:call-template name="node1"/>
    </xsl:for-each>
  </xsl:template>
  <!--template for node /result-->
  <xsl:template name="node1">
    <result>
      <xsl:call-template name="node2"/>
    </result>
  </xsl:template>
  <!--template for node /result/text()-->
  <xsl:template name="node2">
    <xsl:value-of select="6*2"/>
  </xsl:template>
</xsl:stylesheet>
変換先のXMLファイルの内容:
<?xml version="1.0" encoding="UTF-8"?>
<result>12</result>

1.2.7.3. ブール代数

boolean 型のオブジェクトは、真と偽という2つの値のうち1つをとることができます。
or
or 式は、各オペランドを評価し、その値をブール値に変換することにより評価されます。結果は、どちらかの値が真である場合には真であり、それ以外の場合には偽です。左オペランドが真と評価される場合には、右オペランドは評価されません。 関数の編集 ダイアログで Xpath表現式エディタ に以下の式を入力することが可能です。
true() or false()
XSLファイルの内容は以下のようになります。
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:java="http://xml.apache.org/xalan/java" exclude-result-prefixes="java" version="1.0">
  <xsl:output method="xml" version="1.0" omit-xml-declaration="no" encoding="UTF-8" indent="yes"/>
  <xsl:template match="/">
    <xsl:for-each select="root">
      <xsl:call-template name="node1"/>
    </xsl:for-each>
  </xsl:template>
  <!--template for node /result-->
  <xsl:template name="node1">
    <result>
      <xsl:call-template name="node2"/>
    </result>
  </xsl:template>
  <!--template for node /result/text()-->
  <xsl:template name="node2">
    <xsl:value-of select="true() or false()"/>
  </xsl:template>
</xsl:stylesheet>
変換先のXMLファイルの内容:
<?xml version="1.0" encoding="UTF-8"?>
<result>true</result>
and
and 式は、各オペランドを評価し、その値をブール値に変換することにより評価されます。結果は、両方の値が真である場合には真であり、それ以外の場合には偽です。左オペランドが偽と評価される場合には、右オペランドは評価されません。 関数の編集 ダイアログで Xpath表現式エディタ に以下の式を入力することが可能です。
true() and false()
XSLファイルの内容は以下のようになります。
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:java="http://xml.apache.org/xalan/java" exclude-result-prefixes="java" version="1.0">
  <xsl:output method="xml" version="1.0" omit-xml-declaration="no" encoding="UTF-8" indent="yes"/>
  <xsl:template match="/">
    <xsl:for-each select="root">
      <xsl:call-template name="node1"/>
    </xsl:for-each>
  </xsl:template>
  <!--template for node /result-->
  <xsl:template name="node1">
    <result>
      <xsl:call-template name="node2"/>
    </result>
  </xsl:template>
  <!--template for node /result/text()-->
  <xsl:template name="node2">
    <xsl:value-of select="true() and false()"/>
  </xsl:template>
</xsl:stylesheet>
変換先のXMLファイルの内容:
<?xml version="1.0"encoding="UTF-8"?>
<result>false</result>
=
= 比較は、オブジェクトが等しい場合に、かつ等しい場合にのみ、真ということになります。 関数の編集 ダイアログで Xpath表現式エディタ に以下の式を入力することが可能です。
6=2
XSLファイルの内容は以下のようになります。
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:java="http://xml.apache.org/xalan/java" exclude-result-prefixes="java" version="1.0">
  <xsl:output method="xml" version="1.0" omit-xml-declaration="no" encoding="UTF-8" indent="yes"/>
  <xsl:template match="/">
    <xsl:for-each select="root">
      <xsl:call-template name="node1"/>
    </xsl:for-each>
  </xsl:template>
  <!--template for node /result-->
  <xsl:template name="node1">
    <result>
      <xsl:call-template name="node2"/>
    </result>
  </xsl:template>
  <!--template for node /result/text()-->
  <xsl:template name="node2">
    <xsl:value-of select="6=2"/>
  </xsl:template>
</xsl:stylesheet>
変換先のXMLファイルの内容:
<?xml version="1.0" encoding="UTF-8"?>
<result>false</result>
!=
!= 比較は、オブジェクトが等しくない場合に、かつ等しくない場合にのみ、真ということになります。 関数の編集 ダイアログで Xpath表現式エディタ に以下の式を入力することが可能です。
6!=2
XSLファイルの内容は以下のようになります。
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:java="http://xml.apache.org/xalan/java" exclude-result-prefixes="java" version="1.0">
  <xsl:output method="xml" version="1.0" omit-xml-declaration="no" encoding="UTF-8" indent="yes"/>
  <xsl:template match="/">
    <xsl:for-each select="root">
      <xsl:call-template name="node1"/>
    </xsl:for-each>
  </xsl:template>
  <!--template for node /result-->
  <xsl:template name="node1">
    <result>
      <xsl:call-template name="node2"/>
    </result>
  </xsl:template>
  <!--template for node /result/text()-->
  <xsl:template name="node2">
    <xsl:value-of select="6!=2"/>
  </xsl:template>
</xsl:stylesheet>
変換先のXMLファイルの内容:
<?xml version="1.0" encoding="UTF-8"?>
<result>true</result>
< [&lt;]
< 比較は、1つ目の数値が2つ目の数値よりも小さい場合に、かつ小さい場合にのみ、真ということになります。 関数の編集 ダイアログで Xpath表現式エディタ に以下の式を入力することが可能です。
6&lt;2
XSLファイルの内容は以下のようになります。
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:java="http://xml.apache.org/xalan/java" exclude-result-prefixes="java" version="1.0">
  <xsl:output method="xml" version="1.0" omit-xml-declaration="no" encoding="UTF-8" indent="yes"/>
  <xsl:template match="/">
    <xsl:for-each select="root">
      <xsl:call-template name="node1"/>
    </xsl:for-each>
  </xsl:template>
  <!--template for node /result-->
  <xsl:template name="node1">
    <result>
      <xsl:call-template name="node2"/>
    </result>
  </xsl:template>
  <!--template for node /result/text()-->
  <xsl:template name="node2">
    <xsl:value-of select="6&lt;2"/>
  </xsl:template>
</xsl:stylesheet>
変換先のXMLファイルの内容:
<?xml version="1.0" encoding="UTF-8"?>
<result>false</result>
<= [&lt;=]
<= 比較は、1つ目の数値が2つ目の数値よりも小さいか等しい場合に、かつ小さいか等しい場合にのみ、真ということになります。 関数の編集 ダイアログで Xpath表現式エディタ に以下の式を入力することが可能です。
6&lt;=2
XSLファイルの内容は以下のようになります。
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:java="http://xml.apache.org/xalan/java" exclude-result-prefixes="java" version="1.0">
  <xsl:output method="xml" version="1.0" omit-xml-declaration="no" encoding="UTF-8" indent="yes"/>
  <xsl:template match="/">
    <xsl:for-each select="root">
      <xsl:call-template name="node1"/>
    </xsl:for-each>
  </xsl:template>
  <!--template for node /result-->
  <xsl:template name="node1">
    <result>
      <xsl:call-template name="node2"/>
    </result>
  </xsl:template>
  <!--template for node /result/text()-->
  <xsl:template name="node2">
    <xsl:value-of select="6&lt;=2"/>
  </xsl:template>
</xsl:stylesheet>
変換先のXMLファイルの内容:
<?xml version="1.0" encoding="UTF-8"?>
<result>false</result>
> [&gt;]
> 比較は、1つ目の数値が2つ目の数値よりも大きい場合に、かつ大きい場合にのみ、真ということになります。 関数の編集 ダイアログで Xpath表現式エディタ に以下の式を入力することが可能です。
6&gt;2
XSLファイルの内容は以下のようになります。
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:java="http://xml.apache.org/xalan/java" exclude-result-prefixes="java" version="1.0">
  <xsl:output method="xml" version="1.0" omit-xml-declaration="no" encoding="UTF-8" indent="yes"/>
  <xsl:template match="/">
    <xsl:for-each select="root">
      <xsl:call-template name="node1"/>
    </xsl:for-each>
  </xsl:template>
  <!--template for node /result-->
  <xsl:template name="node1">
    <result>
      <xsl:call-template name="node2"/>
    </result>
  </xsl:template>
  <!--template for node /result/text()-->
  <xsl:template name="node2">
    <xsl:value-of select="6&gt;2"/>
  </xsl:template>
</xsl:stylesheet>
変換先のXMLファイルの内容:
<?xml version="1.0" encoding="UTF-8"?>
<result>true</result>
>= [&gt;=]
>= 比較は、1つ目の数値が2つ目の数値よりも大きいか等しい場合に、かつ大きいか等しい場合にのみ、真ということになります。 関数の編集 ダイアログで Xpath表現式エディタ に以下の式を入力することが可能です。
6&gt;=2
XSLファイルの内容は以下のようになります。
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:java="http://xml.apache.org/xalan/java" exclude-result-prefixes="java" version="1.0">
  <xsl:output method="xml" version="1.0" omit-xml-declaration="no" encoding="UTF-8" indent="yes"/>
  <xsl:template match="/">
    <xsl:for-each select="root">
      <xsl:call-template name="node1"/>
    </xsl:for-each>
  </xsl:template>
  <!--template for node /result-->
  <xsl:template name="node1">
    <result>
      <xsl:call-template name="node2"/>
    </result>
  </xsl:template>
  <!--template for node /result/text()-->
  <xsl:template name="node2">
    <xsl:value-of select="6&lt;=2"/>
  </xsl:template>
</xsl:stylesheet>
変換先のXMLファイルの内容:
<?xml version="1.0" encoding="UTF-8"?>
<result>true</result>

1.2.7.4. ノード設定関数

ノードに関する関数を使うと、処理中のタグの名称や現在位置を知ることができます。
last()
現在のノードの最年少弟ノードの番号を返します。返り値は数値です。 関数の編集 ダイアログで Xpath表現式エディタ に以下の式を入力することが可能です。
./movie[last()]/movieName
変換元のXMLファイルの内容:
<?xml version="1.0"?>
<root>
  <movie>
    <movieName>m1</movieName>
  </movie>
  <movie>
    <movieName>m2</movieName>
  </movie>
</root>
XSLファイルの内容は以下のようになります。
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:java="http://xml.apache.org/xalan/java" exclude-result-prefixes="java" version="1.0">
  <xsl:output method="xml" version="1.0" omit-xml-declaration="no" encoding="UTF-8" indent="yes"/>
  <xsl:template match="/">
    <xsl:for-each select="root">
      <xsl:call-template name="node1"/>
    </xsl:for-each>
  </xsl:template>
  <!--template for node /result-->
  <xsl:template name="node1">
    <result>
      <xsl:call-template name="node2"/>
    </result>
  </xsl:template>
  <!--template for node /result/text()-->
  <xsl:template name="node2">
    <xsl:value-of select="./movie[last()]/movieName"/>
  </xsl:template>
</xsl:stylesheet>
変換先のXMLファイルの内容:
<?xml version="1.0" encoding="UTF-8"?>
<result>m2</result>
position()
現在のノードの位置(兄弟の中で)を、数値で返します。 関数の編集 ダイアログで Xpath表現式エディタ に以下の式を入力することが可能です。
./movie[position()=3]/movieName
変換元のXMLファイルの内容:
<?xml version="1.0"?>
<root>
  <movie>
    <movieName>m1</movieName>
  </movie>
  <movie>
    <movieName>m2</movieName>
  </movie>
  <movie>
    <movieName>m3</movieName>
  </movie>
</root>
XSLファイルの内容は以下のようになります。
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:java="http://xml.apache.org/xalan/java" exclude-result-prefixes="java" version="1.0">
  <xsl:output method="xml" version="1.0" omit-xml-declaration="no" encoding="UTF-8" indent="yes"/>
  <xsl:template match="/">
    <xsl:for-each select="root">
      <xsl:call-template name="node1"/>
    </xsl:for-each>
  </xsl:template>
  <!--template for node /result-->
  <xsl:template name="node1">
    <result>
      <xsl:call-template name="node2"/>
    </result>
  </xsl:template>
  <!--template for node /result/text()-->
  <xsl:template name="node2">
    <xsl:value-of select="./movie[position()=3]/movieName"/>
  </xsl:template>
</xsl:stylesheet>
変換先のXMLファイルの内容:
<?xml version="1.0" encoding="UTF-8"?>
<result>m3</result>
count(node) 【表現の数を数える】
node引数で指定された表現の、変換元のXMLファイルの内容:内での数を返します。返り値は数値です。 関数の編集 ダイアログで Xpath表現式エディタ に以下の式を入力することが可能です。
count(./book)
変換元のXMLファイルの内容:
<books>
  <book>The Innovator'sDilemma</book>
  <book>AdaptiveEnterprise</book>
  <book>Race for theWorld</book>
</books>
XSLファイルの内容は以下のようになります。
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:java="http://xml.apache.org/xalan/java" exclude-result-prefixes="java" version="1.0">
  <xsl:output method="xml" version="1.0" omit-xml-declaration="no" encoding="UTF-8" indent="yes"/>
  <xsl:template match="/">
    <xsl:for-each select="books">
      <xsl:call-template name="node1"/>
    </xsl:for-each>
  </xsl:template>
  <!--template for node /result-->
  <xsl:template name="node1">
    <result>
      <xsl:call-template name="node2"/>
    </result>
  </xsl:template>
  <!--template for node /result/text()-->
  <xsl:template name="node2">
    <xsl:value-of select="count(./book)"/>
  </xsl:template>
</xsl:stylesheet>
変換先のXMLファイルの内容:
<?xml version="1.0" encoding="UTF-8"?>
<result>3</result>
id(any)
any引数で与えられたidに該当するノードを、ノード表現で返します。 関数の編集 ダイアログで Xpath表現式エディタ に以下の式を入力することが可能です。
id(./body/@type)
変換元のXMLファイルの内容:
<?xml version="1.0"?>
<!DOCTYPE note [
  <!ELEMENT note(to,from,heading,body)>
  <!ELEMENTto (#PCDATA)>
  <!ELEMENTfrom    (#PCDATA)>
  <!ELEMENT heading (#PCDATA)>
  <!ELEMENTbody    (#PCDATA)>
  <!ATTLIST body type ID#REQUIRED>]>
  <note>
  <to>to</to>
  <from>from</from>
  <heading>heading</heading>
  <body type="se">thisis body!</body>
</note>
XSLファイルの内容は以下のようになります。
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:java="http://xml.apache.org/xalan/java" exclude-result-prefixes="java" version="1.0">
  <xsl:output method="xml" version="1.0" omit-xml-declaration="no" encoding="UTF-8" indent="yes"/>
  <xsl:template match="/">
    <xsl:for-each select="note">
      <xsl:call-template name="node1"/>
    </xsl:for-each>
  </xsl:template>
  <!--template for node /result-->
  <xsl:template name="node1">
    <result>
      <xsl:call-template name="node2"/>
    </result>
  </xsl:template>
  <!--template for node /result/text()-->
  <xsl:template name="node2">
    <xsl:value-of select="id(./body/@type>
  </xsl:template>
</xsl:stylesheet>
変換先のXMLファイルの内容:
<?xml version="1.0" encoding="UTF-8"?>
<result>this is body!</result>
local-name(node)
node引数で与えられた表現のlocal値(namespaceを外したもの)を、文字列として返します。 関数の編集 ダイアログで Xpath表現式エディタ に以下の式を入力することが可能です。
local-name()
変換元のXMLファイルの内容:
<?xml version="1.0"?>
<h:root xmlns:h="aa"/>
XSLファイルの内容は以下のようになります。
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:S0="aa" xmlns:java="http://xml.apache.org/xalan/java" exclude-result-prefixes="java" version="1.0">
  <xsl:output method="xml" version="1.0" omit-xml-declaration="no" encoding="UTF-8" indent="yes"/>
  <xsl:template match="/">
    <xsl:for-each select="S0:root">
      <xsl:call-template name="node1"/>
    </xsl:for-each>
  </xsl:template>
  <!--template for node /result-->
  <xsl:template name="node1">
  <result>
    <xsl:call-template name="node2"/>
  </result>
  </xsl:template>
  <!--template for node /result/text()-->
  <xsl:template name="node2">
    <xsl:value-of select="local-name()"/>
  </xsl:template>
</xsl:stylesheet>
変換先のXMLファイルの内容:
<?xml version="1.0" encoding="UTF-8"?>
<result xmlns:S0="aa">root</result>
namespace-uri(node)
node引数で、namespaceが定義されているURIを、文字列として返します。 関数の編集 ダイアログで Xpath表現式エディタ に以下の式を入力することが可能です。
namespace-uri(.)
変換元のXMLファイルの内容:
<?xml version="1.0"?>
<h:table xmlns:h="http://www.w3.org/TR/html4/">
  <h:tr>
    <h:td>Apples</h:td>
    <h:td>Bananas</h:td>
  </h:tr>
</h:table>
XSLファイルの内容は以下のようになります。
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:S0="http://www.w3.org/TR/html4/" xmlns:java="http://xml.apache.org/xalan/java" exclude-result-prefixes="java" version="1.0">
  <xsl:output method="xml" version="1.0" omit-xml-declaration="no" encoding="UTF-8" indent="yes"/>
  <xsl:template match="/">
    <xsl:for-each select="S0:table">
      <xsl:call-template name="node1"/>
    </xsl:for-each>
  </xsl:template>
  <!--template for node /result-->
  <xsl:template name="node1">
    <result>
      <xsl:call-template name="node2"/>
    </result>
  </xsl:template>
  <!--template for node /result/text()-->
  <xsl:template name="node2">
    <xsl:value-of select="namespace-uri(.)"/>
  </xsl:template>
</xsl:stylesheet>
変換先のXMLファイルの内容:
<?xml version="1.0" encoding="UTF-8"?>
<result xmlns:S0="http://www.w3.org/TR/html4/">http://www.w3.org/TR/html4/</result>
name()
現在のノードの名前を、文字列として返します。 関数の編集 ダイアログで Xpath表現式エディタ に以下の式を入力することが可能です。
name()
変換元のXMLファイルの内容:
<?xml version="1.0"?>
<h:root xmlns:h="aa"/>
XSLファイルの内容は以下のようになります。
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:S0="aa" xmlns:java="http://xml.apache.org/xalan/java" exclude-result-prefixes="java" version="1.0"> 
  <xsl:output method="xml" version="1.0" omit-xml-declaration="no" encoding="UTF-8" indent="yes"/>
  <xsl:template match="/">
    <xsl:for-each select="S0:root">
      <xsl:call-template name="node1"/>
    </xsl:for-each>
  </xsl:template>
  <!--template for node /result-->
  <xsl:template name="node1">
    <result>
      <xsl:call-template name="node2"/>
    </result>
  </xsl:template>
  <!--template for node /result/text()-->
  <xsl:template name="node2">
    <xsl:value-of select="name()"/>
  </xsl:template>
</xsl:stylesheet>
変換先のXMLファイルの内容:
<?xml version="1.0" encoding="UTF-8"?>
<result xmlns:S0="aa">h:root</result>

1.2.7.5. 文字列関数

文字列関数を使うと、文字の連結や抜き出しなど、XSLTプログラム上で文字列の自由な操作が可能になります。
concat(string1, string2, string3, etc...) 【文字列の連結】
文字列を左から順番に連結させていきます。連結させる引数の数は2つ以上ならば制限はありません。結果は文字列で返されます。 関数の編集 ダイアログで Xpath表現式エディタ に以下の式を入力することが可能です。
concat('今日は', '晴れです')
XSLファイルの内容は以下のようになります。
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:java="http://xml.apache.org/xalan/java" exclude-result-prefixes="java" version="1.0">
  <xsl:output method="xml" version="1.0" omit-xml-declaration="no" encoding="UTF-8" indent="yes"/>
  <xsl:template match="/">
    <xsl:for-each select="root">
      <xsl:call-template name="node1"/>
    </xsl:for-each>
  </xsl:template>
  <!--template for node /result-->
  <xsl:template name="node1">
    <result>
      <xsl:call-template name="node2"/>
    </result>
  </xsl:template>
  <!--template for node /result/text()-->
  <xsl:template name="node2">
    <xsl:value-of select="concat('今日は', '晴れです')"/>
  </xsl:template>
</xsl:stylesheet>
変換先のXMLファイルの内容:
<?xml version="1.0" encoding="UTF-8"?>
<result>今日は晴れです</result>
starts-with(string, substring) 【先頭文字列のチェック】
string引数がsubstring引数から始まるかどうかをチェックします。 関数の編集 ダイアログで Xpath表現式エディタ に以下の式を入力することが可能です。
starts-with('aaabbbccc', 'aaa')
XSLファイルの内容は以下のようになります。
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:java="http://xml.apache.org/xalan/java" exclude-result-prefixes="java" version="1.0">
  <xsl:output method="xml" version="1.0" omit-xml-declaration="no" encoding="UTF-8" indent="yes"/>
  <xsl:template match="/">
    <xsl:for-each select="root">
      <xsl:call-template name="node1"/>
    </xsl:for-each>
  </xsl:template>
  <!--template for node /result-->
  <xsl:template name="node1">
    <result>
      <xsl:call-template name="node2"/>
    </result>
  </xsl:template>
  <!--template for node /result/text()-->
  <xsl:template name="node2">
    <xsl:value-of select="starts-with('aaabbbccc', 'aaa')"/>
  </xsl:template>
</xsl:stylesheet>
変換先のXMLファイルの内容:
<?xml version="1.0" encoding="UTF-8"?>
<result>true</result>
contains(string, substring) 【文字列の調査】
stringにsubstringが含まれるかを返します。結果をbool代数で返します。 関数の編集 ダイアログで Xpath表現式エディタ に以下の式を入力することが可能です。
contains('aaabbbccc', 'ccc')
XSLファイルの内容は以下のようになります。
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:java="http://xml.apache.org/xalan/java" exclude-result-prefixes="java" version="1.0">
  <xsl:output method="xml" version="1.0" omit-xml-declaration="no" encoding="UTF-8" indent="yes"/>
  <xsl:template match="/">
    <xsl:for-each select="root">
      <xsl:call-template name="node1"/>
    </xsl:for-each>
  </xsl:template>
  <!--template for node /result-->
  <xsl:template name="node1">
    <result>
      <xsl:call-template name="node2"/>
    </result>
  </xsl:template>
  <!--template for node /result/text()-->
  <xsl:template name="node2">
    <xsl:value-of select="contains('aaabbbccc', 'ccc')"/>
  </xsl:template>
</xsl:stylesheet>
変換先のXMLファイルの内容:
<?xml version="1.0" encoding="UTF-8"?>
<result>true</result>
substring-before(string, substring) 【文字列の抜き出し(3)】
string引数の中から、substring引数に指定された文字列が見つかったとき、その前の文字列を返します。 関数の編集 ダイアログで Xpath表現式エディタ に以下の式を入力することが可能です。
substring-before('aaabbbcccc', 'bbb')
XSLファイルの内容は以下のようになります。
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:java="http://xml.apache.org/xalan/java" exclude-result-prefixes="java" version="1.0">
  <xsl:output method="xml" version="1.0" omit-xml-declaration="no" encoding="UTF-8" indent="yes"/>
  <xsl:template match="/">
    <xsl:for-each select="root">
      <xsl:call-template name="node1"/>
    </xsl:for-each>
  </xsl:template>
  <!--template for node /result-->
  <xsl:template name="node1">
    <result>
      <xsl:call-template name="node2"/>
    </result>
  </xsl:template>
  <!--template for node /result/text()-->
  <xsl:template name="node2">
    <xsl:value-of select="substring-before('aaabbbcccc', 'bbb')"/>
  </xsl:template>
</xsl:stylesheet>
変換先のXMLファイルの内容:
<?xml version="1.0" encoding="UTF-8"?>
<result>aaa</result>
substring-after(string, substring) 【文字列の抜き出し(2)】
string引数の中からsubstring引数で指定された文字列が出現した場合、その後の文字列を返します。 関数の編集 ダイアログで Xpath表現式エディタ に以下の式を入力することが可能です。
substring-after('aaabbbcccddd', 'bbb')
XSLファイルの内容は以下のようになります。
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:java="http://xml.apache.org/xalan/java" exclude-result-prefixes="java" version="1.0">
  <xsl:output method="xml" version="1.0" omit-xml-declaration="no" encoding="UTF-8" indent="yes"/>
  <xsl:template match="/">
    <xsl:for-each select="root">
      <xsl:call-template name="node1"/>
    </xsl:for-each>
  </xsl:template>
  <!--template for node /result-->
  <xsl:template name="node1">
    <result>
      <xsl:call-template name="node2"/>
    </result>
  </xsl:template>
  <!--template for node /result/text()-->
  <xsl:template name="node2">
    <xsl:value-of select="substring-after('aaabbbcccddd', 'bbb')"/>
  </xsl:template>
</xsl:stylesheet>
変換先のXMLファイルの内容:
<?xml version="1.0" encoding="UTF-8"?>
<result>cccddd</result>
substring(string, start)もしくはsubstring(string, start, length) 【文字列の抜き出し(1)】
string引数に対して、startをオフセットした値からlengthまでのあいだの文字列を返します。lengthが指定されていない場合は、string引数の最後までを返します。 関数の編集 ダイアログで Xpath表現式エディタ に以下の式を入力することが可能です。
substring('aaabbbccc', 3)
XSLファイルの内容は以下のようになります。
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:java="http://xml.apache.org/xalan/java" exclude-result-prefixes="java" version="1.0">
  <xsl:output method="xml" version="1.0" omit-xml-declaration="no" encoding="UTF-8" indent="yes"/>
  <xsl:template match="/">
    <xsl:for-each select="root">
      <xsl:call-template name="node1"/>
    </xsl:for-each>
  </xsl:template>
  <!--template for node /result-->
  <xsl:template name="node1">
    <result>
      <xsl:call-template name="node2"/>
    </result>
  </xsl:template>
  <!--template for node /result/text()-->
  <xsl:template name="node2">
    <xsl:value-of select="substring('aaabbbccc', 3)"/>
  </xsl:template>
</xsl:stylesheet>
変換先のXMLファイルの内容:
<?xml version="1.0" encoding="UTF-8"?>
<result>abbbccc</result>
string-length(string) 【文字列の長さを返す】
string引数の長さを返し、結果を数値で返します。 関数の編集 ダイアログで Xpath表現式エディタ に以下の式を入力することが可能です。
string-length('Product')
XSLファイルの内容は以下のようになります。
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:java="http://xml.apache.org/xalan/java" exclude-result-prefixes="java" version="1.0">
  <xsl:output method="xml" version="1.0" omit-xml-declaration="no" encoding="UTF-8" indent="yes"/>
  <xsl:template match="/">
    <xsl:for-each select="root">
      <xsl:call-template name="node1"/>
    </xsl:for-each>
  </xsl:template>
  <!--template for node /result-->
  <xsl:template name="node1">
    <result>
      <xsl:call-template name="node2"/>
    </result>
  </xsl:template>
  <!--template for node /result/text()-->
  <xsl:template name="node2">
    <xsl:value-of select="string-length('Product')"/>
  </xsl:template>
</xsl:stylesheet>
変換先のXMLファイルの内容:
<?xml version="1.0" encoding="UTF-8"?>
<result>7</result>
normalize-space(string) 【空白の除去】
stringにsubstringが含まれるかを返します。 関数の編集 ダイアログで Xpath表現式エディタ に以下の式を入力することが可能です。
normalize-space('aa   bbcc   ddddd e')
XSLファイルの内容は以下のようになります。
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:java="http://xml.apache.org/xalan/java" exclude-result-prefixes="java" version="1.0">
  <xsl:output method="xml" version="1.0" omit-xml-declaration="no" encoding="UTF-8"
indent="yes"/>
  <xsl:template match="/">
    <xsl:for-each select="root">
      <xsl:call-template name="node1"/>
    </xsl:for-each>
  </xsl:template>
  <!--template for node /result-->
  <xsl:template name="node1">
    <result>
      <xsl:call-template name="node2"/>
    </result>
  </xsl:template>
  <!--template for node /result/text()-->
  <xsl:template name="node2">
    <xsl:value-of select="normalize-space('aa   bbcc  ddddd  e')"/>
  </xsl:template>
</xsl:stylesheet>
変換先のXMLファイルの内容:
<?xml version="1.0" encoding="UTF-8"?>
<result>aa bbcc ddddd e</result>
translate(string, before, after) 【文字の置換】
string引数に対して、before引数で指定されている文字を、after引数で指定されているものに置換します。 関数の編集 ダイアログで Xpath表現式エディタ に以下の式を入力することが可能です。
translate('text', 'tx', 'Ts')
XSLファイルの内容は以下のようになります。
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:java="http://xml.apache.org/xalan/java" exclude-result-prefixes="java" version="1.0">
  <xsl:output method="xml" version="1.0" omit-xml-declaration="no" encoding="UTF-8" indent="yes"/>
  <xsl:template match="/">
    <xsl:for-each select="root">
      <xsl:call-template name="node1"/>
    </xsl:for-each>
  </xsl:template>
  <!--template for node /result-->
  <xsl:template name="node1">
    <result>
      <xsl:call-template name="node2"/>
    </result>
  </xsl:template>
  <!--template for node /result/text()-->
  <xsl:template name="node2">
    <xsl:value-of select="translate('text', 'tx', 'Ts')"/>
  </xsl:template>
</xsl:stylesheet>
変換先のXMLファイルの内容:
<?xml version="1.0" encoding="UTF-8"?>
<result>TesT</result>

1.2.7.6. ブール代数関数

TrueとFalseの2値によるbool型も、XSLTプログラムの中で扱うことができます。
not(boolean) 【否定】
引数が偽である場合に真を返し、そうでない場合には偽を返す。 関数の編集 ダイアログで Xpath表現式エディタ に以下の式を入力することが可能です。
not(true())
XSLファイルの内容は以下のようになります。
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:java="http://xml.apache.org/xalan/java" exclude-result-prefixes="java" version="1.0">
  <xsl:output method="xml" version="1.0" omit-xml-declaration="no" encoding="UTF-8" indent="yes"/>
  <xsl:template match="/">
    <xsl:for-each select="root">
      <xsl:call-template name="node1"/>
    </xsl:for-each>
  </xsl:template>
  <!--template for node /result-->
  <xsl:template name="node1">
    <result>
      <xsl:call-template name="node2"/>
    </result>
  </xsl:template>
  <!--template for node /result/text()-->
  <xsl:template name="node2">
    <xsl:value-of select="not(true())"/>
  </xsl:template>
</xsl:stylesheet>
変換先のXMLファイルの内容:
<?xml version="1.0" encoding="UTF-8"?>
<result>false</result>
true() 【Trueの出力】
真を返す。 関数の編集 ダイアログで Xpath表現式エディタ に以下の式を入力することが可能です。
true()
XSLファイルの内容は以下のようになります。
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:java="http://xml.apache.org/xalan/java" exclude-result-prefixes="java" version="1.0">
  <xsl:output method="xml" version="1.0" omit-xml-declaration="no" encoding="UTF-8" indent="yes"/>
  <xsl:template match="/">
    <xsl:for-each select="root">
      <xsl:call-template name="node1"/>
    </xsl:for-each>
  </xsl:template>
  <!--template for node /result-->
  <xsl:template name="node1">
    <result>
      <xsl:call-template name="node2"/>
    </result>
  </xsl:template>
  <!--template for node /result/text()-->
  <xsl:template name="node2">
    <xsl:value-of select="true()"/>
  </xsl:template>
</xsl:stylesheet>
変換先のXMLファイルの内容:
<?xml version="1.0" encoding="UTF-8"?>
<result>true</result>
false() 【Falseの出力】
偽を返す。 関数の編集 ダイアログで Xpath表現式エディタ に以下の式を入力することが可能です。
false()
XSLファイルの内容は以下のようになります。
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:java="http://xml.apache.org/xalan/java" exclude-result-prefixes="java" version="1.0">
  <xsl:output method="xml" version="1.0" omit-xml-declaration="no" encoding="UTF-8" indent="yes"/>
  <xsl:template match="/">
    <xsl:for-each select="root">
      <xsl:call-template name="node1"/>
    </xsl:for-each>
  </xsl:template>
  <!--template for node /result-->
  <xsl:template name="node1">
    <result>
      <xsl:call-template name="node2"/>
    </result>
  </xsl:template>
  <!--template for node /result/text()-->
  <xsl:template name="node2">
    <xsl:value-of select="false()"/>
  </xsl:template>
</xsl:stylesheet>
変換先のXMLファイルの内容:
<?xml version="1.0" encoding="UTF-8"?>
<result>false</result>
lang(string) 【xml:lang 属性の判断】
xml:lang 属性によって指定されている文脈ノードの言語が、引数 string によって指定される言語と同じ、あるいはその下位言語であるかどうかにより、真または偽を返す。 関数の編集 ダイアログで Xpath表現式エディタ に以下の式を入力することが可能です。
lang('en')
変換元のXMLファイルの内容:
<?xml version="1.0"?>
<root xml:lang="en">GoodMorning!</root>
XSLファイルの内容は以下のようになります。
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:java="http://xml.apache.org/xalan/java" exclude-result-prefixes="java" version="1.0">
  <xsl:output method="xml" version="1.0" omit-xml-declaration="no" encoding="UTF-8" indent="yes"/>
  <xsl:template match="/">
    <xsl:for-each select="root">
      <xsl:call-template name="node1"/>
    </xsl:for-each>
  </xsl:template>
  <!--template for node /result-->
  <xsl:template name="node1">
    <result>
      <xsl:call-template name="node2"/>
    </result>
  </xsl:template>
  <!--template for node /result/text()-->
  <xsl:template name="node2">
    <xsl:value-of select="lang('en')"/>
  </xsl:template>
</xsl:stylesheet>
変換先のXMLファイルの内容:
<?xml version="1.0" encoding="UTF-8"?>
<result>true</result>

1.2.7.7. 数値関数

数値計算系の関数を使用することで、XSLTプログラムの中で数値計算や切り上げ、四捨五入などが可能です。
number(any) 【数値型への変換】
any引数を数値に変換します。 関数の編集 ダイアログで Xpath表現式エディタ に以下の式を入力することが可能です。
number(20081220)
XSLファイルの内容は以下のようになります。
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:java="http://xml.apache.org/xalan/java" exclude-result-prefixes="java" version="1.0">
  <xsl:output method="xml" version="1.0" omit-xml-declaration="no" encoding="UTF-8" indent="yes"/>
  <xsl:template match="/">
    <xsl:for-each select="root">
      <xsl:call-template name="node1"/>
    </xsl:for-each>
  </xsl:template>
  <!--template for node /result-->
  <xsl:template name="node1">
    <result>
      <xsl:call-template name="node2"/>
    </result>
  </xsl:template>
  <!--template for node /result/text()-->
  <xsl:template name="node2">
    <xsl:value-of select="number(20081220)"/>
  </xsl:template>
</xsl:stylesheet>
変換先のXMLファイルの内容:
<?xml version="1.0" encoding="UTF-8"?>
<result>20081220</result>
sum(node) 【加算】
node引数で指定されている表現の内容を加算し、数値で返します。 関数の編集 ダイアログで Xpath表現式エディタ に以下の式を入力することが可能です。
sum(./amount/text())
変換元のXMLファイルの内容:
<spendings>
  <amount>4.25</amount>
  <amount>10.5</amount>
  <amount>8.25</amount>
<spendings>
XSLファイルの内容は以下のようになります。
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:java="http://xml.apache.org/xalan/java" exclude-result-prefixes="java" version="1.0">
  <xsl:output method="xml" version="1.0" omit-xml-declaration="no" encoding="UTF-8" indent="yes"/>
  <xsl:template match="/">
    <xsl:for-each select="spendings">
      <xsl:call-template name="node1"/>
    </xsl:for-each>
  </xsl:template>
  <!--template for node /result-->
  <xsl:template name="node1">
    <result>
      <xsl:call-template name="node2"/>
    </result>
  </xsl:template>
  <!--template for node /result/text()-->
  <xsl:template name="node2">
    <xsl:value-of select="sum(./amount/text())"/>
  </xsl:template>
</xsl:stylesheet>
変換先のXMLファイルの内容:
<?xml version="1.0"encoding="UTF-8"?>
<result>23</result>
floor(number) 【切り下げ】
number引数よりも小さい整数で、最大のものを返します。 関数の編集 ダイアログで Xpath表現式エディタ に以下の式を入力することが可能です。
floor('-3.25')
XSLファイルの内容は以下のようになります。
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:java="http://xml.apache.org/xalan/java" exclude-result-prefixes="java" version="1.0">
  <xsl:output method="xml" version="1.0" omit-xml-declaration="no" encoding="UTF-8" indent="yes"/>
  <xsl:template match="/">
    <xsl:for-each select="root">
      <xsl:call-template name="node1"/>
    </xsl:for-each>
  </xsl:template>
  <!--template for node /result-->
  <xsl:template name="node1">
    <result>
      <xsl:call-template name="node2"/>
    </result>
  </xsl:template>
  <!--template for node /result/text()-->
  <xsl:template name="node2">
    <xsl:value-of select="floor(-3.25)"/>
  </xsl:template>
</xsl:stylesheet>
変換先のXMLファイルの内容:
<?xml version="1.0" encoding="UTF-8"?>
<result>-4</result>
ceiling(number) 【切り上げ】
number引数よりも大きい整数で、最小の数値を返します。 関数の編集 ダイアログで Xpath表現式エディタ に以下の式を入力することが可能です。
ceiling('-3.25')
XSLファイルの内容は以下のようになります。
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:java="http://xml.apache.org/xalan/java" exclude-result-prefixes="java" version="1.0">
  <xsl:output method="xml" version="1.0" omit-xml-declaration="no" encoding="UTF-8" indent="yes"/>
  <xsl:template match="/">
    <xsl:for-each select="root">
      <xsl:call-template name="node1"/>
    </xsl:for-each>
  </xsl:template>
  <!--template for node /result-->
  <xsl:template name="node1">
    <result>
      <xsl:call-template name="node2"/>
    </result>
  </xsl:template>
  <!--template for node /result/text()-->
  <xsl:template name="node2">
    <xsl:value-of select="ceiling('-3.25')"/>
  </xsl:template>
</xsl:stylesheet>
変換先のXMLファイルの内容:
<?xml version="1.0" encoding="UTF-8"?>
<result>-3</result>
round(number) 【四捨五入】
number引数を四捨五入した数値を返します。 関数の編集 ダイアログで Xpath表現式エディタ に以下の式を入力することが可能です。
round('-3.25')
XSLファイルの内容は以下のようになります。
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:java="http://xml.apache.org/xalan/java" exclude-result-prefixes="java" version="1.0">
  <xsl:output method="xml" version="1.0" omit-xml-declaration="no" encoding="UTF-8" indent="yes"/>
  <xsl:template match="/">
    <xsl:for-each select="root">
      <xsl:call-template name="node1"/>
    </xsl:for-each>
  </xsl:template>
  <!--template for node /result-->
  <xsl:template name="node1">
    <result>
      <xsl:call-template name="node2"/>
    </result>
  </xsl:template>
  <!--template for node /result/text()-->
  <xsl:template name="node2">
    <xsl:value-of select="round('-3.25')"/>
  </xsl:template>
</xsl:stylesheet>
変換先のXMLファイルの内容:
<?xml version="1.0" encoding="UTF-8"?>
<result>-3</result>
実行結果:
-3

1.2.7.8. その他の関数

これまでの分類に入らなかった関数を紹介します。
document(uri)
document('another.xml')は、“another.xml”ドキュメントのルートを返します。 また document('')は、その文書のルートを返します。 関数の編集 ダイアログで Xpath表現式エディタ に以下の式を入力することが可能です。
document('another.xml')
another.xml:
<?xml version="1.0" encoding="UTF-8"?>
<rr>
  <sub1>hello</sub1>
  <sub2>world</sub2>
</rr>
XSLファイルの内容は以下のようになります。
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:java="http://xml.apache.org/xalan/java" exclude-result-prefixes="java" version="1.0">
  <xsl:output method="xml" version="1.0" omit-xml-declaration="no" encoding="UTF-8" indent="yes"/>
  <xsl:template match="/">
    <xsl:for-each select="root">
      <xsl:call-template name="node1"/>
    </xsl:for-each>
  </xsl:template>
  <!--template for node /result-->
  <xsl:template name="node1">
    <result>
      <xsl:call-template name="node2"/>
    </result>
  </xsl:template>
  <!--template for node /result/text()-->
  <xsl:template name="node2">
    <xsl:value-of select="document('another.xml')"/>
  </xsl:template>
</xsl:stylesheet>
変換先のXMLファイルの内容:
<?xml version="1.0" encoding="UTF-8"?>
<result>
  hello
  world
</result>
key(string, any)
stringで与えられたHashに、anyで指定されているノード表現を返します。 変換元のXMLファイルの内容:
<?xml version="1.0" encoding="ISO-8859-1"?>
<catalog>
  <cd>
    <title>t1</title>
    <artist>aa</artist>
    <country>Japan</country>
    <company>NEC</company>
    <price>10.00</price>
    <year>2008</year>
  </cd>
  <cd>
    <title>t2</title>
    <artist>bb</artist>
    <country>Japan</country>
    <company>NEC-AS</company>
    <price>8.00</price>
    <year>2005</year>
  </cd>
</catalog>
XSLファイルの内容は以下のようになります。
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:java="http://xml.apache.org/xalan/java" exclude-result-prefixes="java" version="1.0">
  <xsl:output method="xml" version="1.0" omit-xml-declaration="no" encoding="UTF-8" indent="yes"/>
  <xsl:key name="cdlist" match="cd" use="title" />
  <xsl:template match="/">
    <xsl:for-each select="catalog">
      <xsl:call-template name="node1"/>
    </xsl:for-each>
  </xsl:template>
  <!--template for node /html-->
  <xsl:template name="node1">
    <html>
      <xsl:call-template name="node2"/>
    </html>
  </xsl:template>
  <!--template for node /html/body-->
  <xsl:template name="node2">
    <body>
      <xsl:call-template name="node3"/>
    </body>
  </xsl:template>
  <!--template for node /html/body/+-->
  <xsl:template name="node3">
    <xsl:for-each select="key('cdlist', 't1')">
      <xsl:call-template name="node4"/>
    </xsl:for-each>
  </xsl:template>
  <!--template for node /html/body/+/p-->
  <xsl:template name="node4">
    <p>
      <xsl:call-template name="node5"/>
      <xsl:call-template name="node6"/>
      <xsl:call-template name="node7"/>
    </p>
  </xsl:template>
  <!--template for node /html/body/+/p/Title-->
  <xsl:template name="node5">
    <Title>
      <xsl:call-template name="node8"/>
    </Title>
  </xsl:template>
  <!--template for node /html/body/+/p/Artist-->
  <xsl:template name="node6">
    <Artist>
      <xsl:call-template name="node9"/>
    </Artist>
  </xsl:template>
  <!--template for node /html/body/+/p/Price-->
  <xsl:template name="node7">
    <Price>
      <xsl:call-template name="node10"/>
    </Price>
  </xsl:template>
  <!--template for node /html/body/+/p/Title/text()-->
  <xsl:template name="node8">
    <xsl:value-of select="./title/text()"/>
  </xsl:template>
  <!--template for node /html/body/+/p/Artist/text()-->
  <xsl:template name="node9">
    <xsl:value-of select="./artist/text()"/>
  </xsl:template>
  <!--template for node /html/body/+/p/Price/text()-->
  <xsl:template name="node10">
    <xsl:value-of select="./price/text()"/>
  </xsl:template>
</xsl:stylesheet>
変換先のXMLファイルの内容:
<?xml version="1.0" encoding="UTF-8"?><html>
  <body>
    <p>
      <Title>t1</Title>
      <Artist>aa</Artist>
      <Price>10.00</Price>
    </p>
  </body>
</html>
format-number(number, format) もしくはformat-number(number, format, format-type) 【数字のフォーマッティング】
number引数を、formatで指示されているように出力します。結果は、format-number(number,format) は文字列を、format-number(number, format, format-type)は数値を返します。 関数の編集 ダイアログで Xpath表現式エディタ に以下の式を入力することが可能です。
format-number(123456789, '#,####,####')
XSLファイルの内容は以下のようになります。
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:java="http://xml.apache.org/xalan/java"
exclude-result-prefixes="java" version="1.0">
  <xsl:output method="xml" version="1.0"
omit-xml-declaration="no" encoding="UTF-8"
indent="yes"/>
  <xsl:template match="/">
    <xsl:for-each select="root">
      <xsl:call-template
name="node1"/>
    </xsl:for-each>
  </xsl:template>
  <!--template for node /result-->
  <xsl:template name="node1">
    <result>
      <xsl:call-template
name="node2"/>
    </result>
  </xsl:template>
  <!--template for node /result/text()-->
  <xsl:template name="node2">
    <xsl:value-of
select="format-number(123456789, '#,####,####')"/>
  </xsl:template>
</xsl:stylesheet>s
変換先のXMLファイルの内容:
<?xml version="1.0"
encoding="UTF-8"?><result>1,2345,6789</result>
current()
現在のノードを返します。返り値はノード表現です。 関数の編集 ダイアログで Xpath表現式エディタ に以下の式を入力することが可能です。
current()
変換元のXMLファイルの内容:
<?xml version="1.0"?>
<root>value</root>
XSLファイルの内容は以下のようになります。
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:java="http://xml.apache.org/xalan/java" exclude-result-prefixes="java" version="1.0">
  <xsl:output method="xml" version="1.0" omit-xml-declaration="no" encoding="UTF-8" indent="yes"/>
  <xsl:template match="/">
    <xsl:for-each select="root">
      <xsl:call-template name="node1"/>
    </xsl:for-each>
  </xsl:template>
  <!--template for node /result-->
  <xsl:template name="node1">
    <result>
      <xsl:call-template name="node2"/>
    </result>
  </xsl:template>
  <!--template for node /result/text()-->
  <xsl:template name="node2">
    <xsl:value-of select="current()"/>
  </xsl:template>
</xsl:stylesheet>
変換先のXMLファイルの内容:
<?xml version="1.0" encoding="UTF-8"?>
<result>value</result>
unparsed-entity-uri()
<!ENTITY>タグで指定されている値を文字列で返します。 変換元のXMLファイルの内容:
<?xml version="1.0"?>
<!DOCTYPE note [
  <!ELEMENT note (to,from,heading,body)>
  <!ELEMENT to (#PCDATA)>
  <!ELEMENT from (#PCDATA)>
  <!ELEMENT heading (#PCDATA)>
  <!ELEMENT body (#PCDATA)>
  <!ATTLIST body type ID #REQUIRED>
  <!ENTITY pic SYSTEM "/picture.jpg" NDATA
JPEG>
]>
<note>
  <to>George</to>
  <from>John</from>
  <heading>Reminder</heading>
  <body type="se">Don't forget the meeting this weekend!</body>
</note>
XSLファイルの内容は以下のようになります。
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:java="http://xml.apache.org/xalan/java" exclude-result-prefixes="java" version="1.0">
  <xsl:output method="xml" version="1.0" omit-xml-declaration="no" encoding="UTF-8" indent="yes" />
  <xsl:template match="note">
    <result>
      <xsl:value-of select="unparsed-entity-uri('pic')" />
    </result>
  </xsl:template>
</xsl:stylesheet>
変換先のXMLファイルの内容:
<?xml version="1.0" encoding="UTF-8"?>
<result>ile:///picture.jpg</result>
generate-id(node)
node引数に対して固有の値を割り当てます。返り値は文字列です。 関数の編集 ダイアログで Xpath表現式エディタ に以下の式を入力することが可能です。
generate-id(current())
変換元のXMLファイルの内容:
<?xml version="1.0" encoding="Shift_JIS"?>
<companies>
  <company>
    <name>C1</name>
    <drugs>
      <drug>d11</drug>
      <drug>d12</drug>
      <drug>d13</drug>
    </drugs>
  </company>
  <company>
    <name>C2</name>
    <drugs>
      <drug>d21</drug>
      <drug>d22</drug>
    </drugs>
  </company>
  <company>
    <name>C3</name>
    <drugs>
      <drug>d31</drug>
      <drug>d32</drug>
      <drug>d33</drug>
    </drugs>
  </company>
</companies>
XSLファイルの内容は以下のようになります。
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:java="http://xml.apache.org/xalan/java" exclude-result-prefixes="java" version="1.0">
  <xsl:output method="xml" version="1.0" omit-xml-declaration="no" encoding="UTF-8" indent="yes"/>
  <xsl:template match="/">
    <xsl:for-each select="companies">
      <xsl:call-template name="node1"/>
    </xsl:for-each>
  </xsl:template>
  <!--template for node /companies-->
  <xsl:template name="node1">
    <companies>
      <xsl:call-template name="node2"/>
    </companies>
  </xsl:template>
  <!--template for node /companies/+-->
  <xsl:template name="node2">
    <xsl:for-each select="./company/drugs/drug">
      <xsl:call-template name="node3"/>
    </xsl:for-each>
  </xsl:template>
  <!--template for node /companies/+/part-->
  <xsl:template name="node3">
    <part>
      <xsl:call-template name="node4"/>
      <xsl:call-template name="node5"/>
    </part>
  </xsl:template>
  <!--template for node /companies/+/part/id-->
  <xsl:template name="node4">
    <id>
      <xsl:call-template name="node6"/>
    </id>
  </xsl:template>
  <!--template for node /companies/+/part/name-->
  <xsl:template name="node5">
    <name>
      <xsl:call-template name="node7"/>
    </name>
  </xsl:template>
  <!--template for node /companies/+/part/id/text()-->
  <xsl:template name="node6">
    <xsl:value-of select="generate-id(current())"/>
  </xsl:template>
  <!--template for node /companies/+/part/name/text()-->
  <xsl:template name="node7">
    <xsl:value-of select="./text()"/>
  </xsl:template>
</xsl:stylesheet>
変換先のXMLファイルの内容:
<?xml version="1.0" encoding="UTF-8"?><companies>
<part>
  <id>N1000B</id>
  <name>d11</name>
</part>
<part>
  <id>N1000E</id>
  <name>d12</name>
</part>
<part>
  <id>N10011</id>
  <name>d13</name>
</part>
  <part>
  <id>N1001D</id>
<name>d21</name>
</part>
<part>
  <id>N10020</id>
  <name>d22</name>
</part>
<part>
  <id>N1002C</id>
  <name>d31</name>
</part>
<part>
  <id>N1002F</id>
  <name>d32</name>
</part>
<part>
  <id>N10032</id>
  <name>d33</name>
</part>
</companies>
system-property(string)
string引数のXSLTプロセッサ固有の値(例えばXSLTのベンダー名など)を返します。返り値は引数などに依存します。 関数の編集 ダイアログで Xpath表現式エディタ に以下の式を入力することが可能です。
system-property('xsl:version')
XSLファイルの内容は以下のようになります。
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:java="http://xml.apache.org/xalan/java" exclude-result-prefixes="java" version="1.0">
  <xsl:output method="xml" version="1.0" omit-xml-declaration="no" encoding="UTF-8" indent="yes"/>
  <xsl:template match="/">
    <xsl:for-each select="root">
      <xsl:call-template name="node1"/>
    </xsl:for-each>
  </xsl:template>
  <!--template for node /result-->
  <xsl:template name="node1">
    <result>
      <xsl:call-template name="node2"/>
    </result>
  </xsl:template>
  <!--template for node /result/text()-->
  <xsl:template name="node2">
    <xsl:value-of select="system-property('xsl:version')"/>
  </xsl:template>
</xsl:stylesheet>
変換先のXMLファイルの内容:
<?xml version="1.0"encoding="UTF-8"?>
<result>1.0</result>
element-available(string)
string引数で与えられたXSLTノードが、XSLTプロセッサで処理できるかどうかを返します。返り値はbool代数で返されます。 関数の編集 ダイアログで Xpath表現式エディタ に以下の式を入力することが可能です。
element-available('xsl:apply-imports')
XSLT1.0に準拠しているXSLTプロセッサであれば、これらはすべて“true”を返します。 XSLファイルの内容は以下のようになります。
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:java="http://xml.apache.org/xalan/java" exclude-result-prefixes="java" version="1.0">
  <xsl:output method="xml" version="1.0" omit-xml-declaration="no" encoding="UTF-8" indent="yes"/>
  <xsl:template match="/">
    <xsl:for-each select="root">
      <xsl:call-template name="node1"/>
    </xsl:for-each>
  </xsl:template>
  <!--template for node /result-->
  <xsl:template name="node1">
    <result>
      <xsl:call-template name="node2"/>
    </result>
  </xsl:template>
  <!--template for node /result/text()-->
  <xsl:template name="node2">
    <xsl:value-of select="element-available('xsl:apply-imports')"/>
  </xsl:template>
</xsl:stylesheet>
変換先のXMLファイルの内容:
<?xml version="1.0" encoding="UTF-8"?>
<result>true</result>
function-available(string)
string引数で与えられた関数が、XSLTプロセッサで処理できるかどうかを返します。返り値はbool型です。 関数の編集 ダイアログで Xpath表現式エディタ に以下の式を入力することが可能です。
function-available('function-available')
XSLファイルの内容は以下のようになります。
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:java="http://xml.apache.org/xalan/java" exclude-result-prefixes="java" version="1.0">
  <xsl:output method="xml" version="1.0" omit-xml-declaration="no" encoding="UTF-8" indent="yes"/>
  <xsl:template match="/">
    <xsl:for-each select="root">
      <xsl:call-template name="node1"/>
    </xsl:for-each>
  </xsl:template>
  <!--template for node /result-->
  <xsl:template name="node1">
    <result>
      <xsl:call-template name="node2"/>
    </result>
  </xsl:template>
  <!--template for node /result/text()-->
  <xsl:template name="node2">
    <xsl:value-of
select="function-available('function-available')"/> 
  </xsl:template>
</xsl:stylesheet>
変換先のXMLファイルの内容:
<?xml version="1.0" encoding="UTF-8"?>
<result>true</result>