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

図1.2.1.3-1
| メニュー | メニュー項目 | 説明 | 詳細 | |
|---|---|---|---|---|
| ファイル(F) | 新規(N) | XMLマッピングファイル | XMLマッピングファイルを新規に作成します。 | XMLマッピングファイルの作成 |
| 編集(E) | 検索/置換(F) | スキーマエリアのスキーマノードを検索します。 | ツリーの検索 | |
| 実行(R) | 実行(R) | 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) | このトグルメニューで、ソーススキーマノードとターゲットスキーマノードの名前空間を表示する。 | 名前空間の表示 | ||

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

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

図1.2.1.3-4

図1.2.2.1-1

図1.2.2.1-2

図1.2.2.1-3

図1.2.2.1-4

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

図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または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
既存のXMLマッピングファイルをロードして開くには以下のような操作を行います。
作成したプロジェクトで右クリックして、下図のような画面が表示されます。

図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ファイル名 の操作と同じです。
メニュー ウィンドウ > 設定 > 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
マッピングに関係のある要素のみを出力をONにしたら、「マッピング」タブの結線によって、ターゲットスキーマツリーに結線していない且オプションのノードのXSLタグが出力されません。
XSLソースの内容を全て出力をONにしたら、「XSLソース」タブの内容が全て出力されます。
ファイル{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マッピングファイルを編集する方法について説明します。
XMLマッピングエディタのマッピングページ上で、ソーススキーマエリアとターゲットスキーマエリア上のノード間に線を結ぶことで、マッピングを行うことができます。
マッピングの概念XMLマッピングでは線を結ぶノードの種類によって、さまざまな変換処理を表現することができます。その概要を表に示します。
| ターゲットスキーマノード | 目的 | ソーススキーマノード | 詳細 |
|---|---|---|---|
テキストノード
|
要素のテキストの値を出力したい |
要素ノード
|
要素のテキストの値を出力します。 |
テキストノード
|
(要素の)テキストの値を出力します。 | ||
アトリビュートノード
|
アトリビュートの値を出力します。 | ||
アトリビュートノード
|
属性の値を出力したい |
要素ノード
|
要素のテキストの値を出力します。 |
テキストノード
|
(要素の)テキストの値を出力します。 | ||
アトリビュートノード
|
アトリビュートの値を出力します。 | ||
チョイスノード
|
出力のチョイスのどれを出力するかを、入力データの値によって決めたい。 |
テキストノード
|
テキストの値を元に出力する子ノードを決定します。 |
アトリビュートノード
|
アトリビュートの値を元に出力する子ノードを決定します。 | ||
| どのチョイスを出力するかを、入力として現れたチョイスの種類によって決めたい。 |
チョイスノードの子孫の テキストノード、 アトリビュートノード
|
出力のチョイスノードの子孫ノードと結線することによって、出現したノードの種類に応じ出力する子ノードを決定します。 | |
![]() イテレーションノード
|
出力の繰り返しを入力の繰り返しに応じて繰り返し出力させたい。 |
![]() イテレーションノード
|
入力データの繰り返し回数だけ、出力が繰り返されます。 |
オプションノード
|
入力データが出現した場合、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
| ターゲット ソース |
要素
|
テキスト
|
アトリビュート
|
シーケンス
|
チョイス
|
![]() イテレーション
|
オプション
|
代替
|
|---|---|---|---|---|---|---|---|---|
要素
|
× | ○ | ○ | × | × | ○ | ○ | × |
テキスト
|
× | ○ | ○ | × | ○ | × | ○ | ○ |
アトリビュート
|
× | ○ | ○ | × | ○ | × | ○ | ○ |
シーケンス
|
× | × | × | × | × | × | × | × |
チョイス
|
× | × | × | × | × | × | × | × |
![]() イテレーション
|
× | × | × | × | × | ○ | ○ | × |
オプション
|
× | × | × | × | × | ○ | ○ | × |
代替
|
× | × | × | × | × | × | × | × |
Caution
「○」は結線できることを表します。
Caution
「×」は結線できないことを表します。

図1.2.2.6-7
| ターゲット側 | 複数結線可能 |
|---|---|
ルート
|
× |
要素
|
× |
アトリビュート
|
○ |
テキスト
|
○ |
![]() イテレーション
|
× |
オプション
|
○ |
チョイス
|
○ |
シーケンス
|
× |
代替
|
× |
Caution
「○」は複数結線できることを示します。
Caution
「×」は複数結線できないことを示します。

図1.2.2.6-8

図1.2.2.6-9

図1.2.2.6-10

図1.2.2.6-11

図1.2.2.6-12

図1.2.2.6-13

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

図1.2.2.6-15
Memo
【参照情報】ノードに対応するXSLTソースコードは、次節の[XSLTソースコード編集]を参照してください。
Memo
【参照情報】「初期状態XSLに戻す」機能は、初期状態XSLに戻すを参照してください。
要素ノードの場合
| ソーススキーマノード | XSLTソースコード | マッピング例 |
|---|---|---|
| 無し |
<xsl:template name="%テンプレートの名前%">
<%要素ノードの要素名%>
<xsl:call-template name="%子ノードテンプレートの名前1%"/>
:
</%要素ノードの要素名% >
</xsl:template>
|
|
テキストノードの場合
| ソーススキーマノード | 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>
|
|
アトリビュートノードの場合
| ソーススキーマノード | 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>
|
|

イテレーションノードの場合
| ソーススキーマノード | 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>
|
|
チョイスノードの場合
| ソーススキーマノード | XSLTソースコード | マッピング例 |
|---|---|---|
@ チョイスノードへの結線無しA チョイスノードと チョイスノードの子孫ノード間に結線あり(ソース側が 要素ノードの場合)
|
<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>
|
|
@ チョイスノードへの結線無しA チョイスノードと チョイスノードの子孫ノード間に結線あり(ソース側が テキストノードの場合)
|
<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>
|
|
@ チョイスノードへの結線無しA チョイスノードと チョイスノードの子孫ノード間に結線あり(ソース側が アトリビュートノードの場合)
|
<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>
|
|
オプションノードの場合
| ソーススキーマノード | 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>
|
|
シーケンスノードの場合
| ソーススキーマノード | XSLTソースコード | マッピング例 |
|---|---|---|
| 無し |
<xsl:template name="%テンプレートの名前%">
<xsl:call-template name="%子ノードテンプレートの名前1%"/>
:
</xsl:template>
|
|
代替ノードの場合
| ソーススキーマノード | XSLTソースコード | マッピング例 |
|---|---|---|
@ 代替ノードへの結線無しA 代替ノードと 代替ノードの子孫ノード間に結線あり(ソース側が 要素ノードの場合)
|
<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>
|
|
@ 代替ノードへの結線無しA 代替ノードと 代替ノードの子孫ノード間に結線あり(ソース側が テキストノードの場合)
|
<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>
|
|
@ 代替ノードへの結線無しA 代替ノードと 代替ノードの子孫ノード間に結線あり(ソース側が アトリビュートノードの場合)
|
<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
「XSLTソース」ページに切り替えると、初期状態のXSLTソースコードとして下記のコードが生成されます。

図1.2.2.6-17
XSLTソースページに切り替えることで、手でXSLTソースコードを自由に編集することができます。
ただし、一度XSLTソースコードを手で修正すると、修正を行った<xsl:template>に対応するターゲットスキーマノードに関して、マッピングページでの編集操作は、生成されるXSLに反映されなくなります。また、XSLTソースページで編集を行っても、マッピングページの結線にはその変更内容は反映されません。
Memo
【参照情報】「初期状態XSLに戻す」機能は、初期状態XSLに戻すを参照してください。
ユーザがスキーマを変更したい場合、スキーマクリアの機能を使います。
例:下記のマッピングがあります。

図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マッピング > スキーマ更新 > ソース をクリック。

図1.2.2.7-9

図1.2.2.7-10

図1.2.2.7-11

図1.2.2.7-12

図1.2.2.7-13

図1.2.2.7-14
ターゲットスキーマを更新したい場合、ターゲットスキーマエリアで右クリックメニュー スキーマの更新、あるいは、メニュー XMLマッピング > スキーマ更新 > ターゲット をクリックすることで、ターゲットのスキーマを更新します。
Caution
下記のような手動でXSLTソースを変更した場合、スキーマ更新後、手動で変更した内容は再設定する必要があります。
・XSLTソースで内容を手動変更した場合
・関数の編集で関数を設定した場合
・ノードのプロパティを設定した場合
XSLTソースページ上で<xsl:template>タグが手で変更されると、対応するターゲットスキーマノードを編集しても該当する<xsl:template>に変更が反映されなくなります。初期状態XSLに戻すことで、強制的にターゲットスキーマノードに対応する初期状態のXSLTソースコードに<xsl:template>タグを戻すことができます。
あるターゲットスキーマノードを選択して、右クリックすると、右クリックメニュー 初期状態XSLに戻す を選択。

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

図1.2.2.8-2
はい をクリックすると、対応するXSLTソースコードが初期状態のコードに戻ります。
初期状態XSLに戻す操作を行うと、問題ビューに出ていた警告も消えます。
ターゲットスキーマノードはノードのプロパティを持ちます。ノードのプロパティはノードのプロパティ設定ダイアログを用いて設定します。ノードのプロパティの設定値は、初期状態で生成されるXSLTソースコードに影響を与えます。
各ノードは以下のようなプロパティを持ちます。
| ターゲットスキーマノード | プロパティ名 | 対応する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の値はこの例では設定する式が空となっていますが、チョイスノードへの結線を行うことで入力データの値を参照することができます)。
| 変更前 | ||
|---|---|---|
| チョイスノードの比較値 | チョイスノードに対応する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のチョイスノード比較値の値を変更します。
| 変更後 | ||
|---|---|---|
| チョイスノードの比較値 | チョイスノードに対応する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ソースコードのこの部分が更新されます。
例:
| 変更前 | |
|---|---|
| オプションノードの比較値 | オプションノードに対応する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>
|
| 変更後 | |
|---|---|
| オプションノードの比較値 | オプションノードに対応する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の値はこの例では設定する式が空となっていますが、代替ノードへの結線を行うことで入力データの値を参照することができます)。
| 変更前 | ||
|---|---|---|
| 代替ノードの比較値 | 代替ノードに対応する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の代替ノード比較値の値を変更します。
| 変更後 | ||
|---|---|---|
| 代替ノードの比較値 | 代替ノードに対応する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ソースコードに反映されるようになります。また、問題ビューの警告メッセージも消えます。
「線を結ぶ」機能を利用して、ソーススキーマエリアのノードをターゲットスキーマエリアのノードと線で結ぶことができますが、データ線の場合、XSLTで生成したXPath表現式はソースノードのXPathだけです。
そのXPathにたいして、関数を追加して編集する場合がありますため、「関数の編集」機能を提供します。
「関数の編集」機能を利用すると、データ線またはターゲットノードを右クリックして、右クリックメニュー 関数の編集 を選択したりすると、関数の編集 ダイアログが表示される。そこでデータ線のXPath表現式に関数を追加して、XPath表現式を修正することができる。
「関数の編集」機能の提供している関数は基本的なXSLT標準関数ですが、ユーザが他の関数を追加することもできる。
関数の編集方法
ある結線したターゲットスキーマノードを選択して、右クリックして、右クリックメニュー 関数の編集 を選択。

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

図1.2.2.10-2
各部分の説明は下記の通りです:
| 部品 | 説明 |
|---|---|
| (1)ターゲットノード | 選択したターゲットノードのXPathを表示する。 |
| (2)結線の一覧 | 当ノードと関係あるすべてのデータ線のソースノードとXPath表現式を表示する。 |
| (3)XPATH表現式エディタ | 指定された結線のXPath表現式を表示する。 |
| (4)「適用」ボタン | 編集したXPath表現式を有効にする。 |
| (5)関数リスト | 提供しているXSLT基本の関数の関数名リストを表示する。 ダブルクリックすると、提供しているXSLT基本関数がXPath表現式エディタに挿入される。 |
| (6)「他の関数を挿入」ボタン | クリックすると、「他の関数の挿入」ダイアログを開く。 |
| (7)「ノードを挿入」ボタン | クリックすると、「ノードの挿入」ダイアログを開く。 |
| (8)「閉じる」ボタン | クリックすると、ウィンドウを閉じる。 |
結線の一覧から編集したい結線を選択すると、選択した結線のXPath表現式が XPath表現式エディタに表示されます。エディタで編集できます。
XSLT関数リストにあるXSLT関数をダブルクリックすると、その関数がエディタに挿入されます。提供しているXSLT関数の詳細は[XSLT関数]を参照してください。
ノードの挿入 ダイアログを通じて、他のノードのXPathをエディタに挿入できます。
他の関数の挿入 ダイアログを利用して、他のJava関数をエディタに挿入できます。
編集した後、適用 をクリックすると、編集した内容は結線に保存されます。
「適用」しなくて他の結線に切り替えするまたはウィンドウを閉じる場合、確認ダイアログがポップアップされます。保存する をクリックすると、編集を保存して、前の動作を実行する。保存しない をクリックすると、編集を廃棄して、前の動作を実行する。キャンセル をクリックすると、編集が続いています。
ノードの挿入 ダイアログは下記のようです:

図1.2.2.10-3
各部分の説明は下記の通りです:
| 部品 | 説明 |
|---|---|
| ツリー構造 | ソース側のツリーを表示する。 |
| 「挿入」ボタン | 選択したノードをエディタに挿入する。 |
| 「閉じる」ボタン | ウィンドウを閉じる。 |
ソースツリーから挿入したいノードを選択して、ダブルクリックまたは 挿入 をクリックして、ノードのXpath表現式をエディタに挿入して、ウィンドウが閉じます。
他の関数の挿入 ダイアログは下記のようです:

図1.2.2.10-4
各部分の説明は下記の通りです:
| 部品 | 説明 |
|---|---|
| Javaパッケージ | 当該プロジェクトのClassPathにあるすべての利用できるJavaパッケージを表示する。 |
| クラス | Javaライブラリに所属するクラスを表示する。 |
| メソッド | クラスのすべてのスタティックパブリックメソッドリストを表示する。 |
| 「挿入」ボタン | 選択した関数をエディタに挿入する。 |
| 「閉じる」ボタン | ウィンドウを閉じる。 |
Javaパッケージ、クラスを順に選択すると、当クラスに所属するメソッドが表示されます。挿入したいメソッドを選択して、ダブルクリックまたは 挿入 をクリックすると、当メソッドがエディタに挿入されて、ウィンドウが閉じます。
指定した文字列の名前にマッチする要素・属性を、スキーマノードから検索することができます。
スキーマエリアで右クリックメニュー 検索 を選択するか、メニュー 編集 > 検索 を選択。或は、キーボード「Ctrl+F」を押下することで、要素・属性の検索 ダイアログが出ます。

図1.2.2.11-1
検索する文字列 に検索したい文字列を入力します。
検索範囲(スコープ)を選択します。ソースツリー、ターゲットツリー のいずれかを指定します。
オプション を選択します。大文字小文字の区別 をONにした場合、大文字小文字を区別して一致するものだけを検索します。OFFにする場合、大文字小文字の区別を行いません。単語全体 をONにした場合、指定した文字列に完全に一致するノードだけを検索します。OFFにする場合、指定した文字列に部分一致するノードを検索します。
次を検索 をクリックすると、ツリーの上から下へ順に検索を行います。ツリーの最後まで検索した場合、ツリーのルートノードから検索します。
入力した文字列に一致する名前の要素・属性が見つからない場合は、下記のエラーダイアログが表示されます。

図1.2.2.11-2
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
Caution
【参照情報】「プロパティー設定」のダイアログについては、[プロパティー設定機能]を参照してください。

図1.2.2.12-6
| スキーマノード | 名前空間表示可能 |
|---|---|
ルート
|
○ |
要素
|
○ |
アトリビュート
|
○ |
テキスト
|
× |
![]() イテレーション
|
× |
オプション
|
× |
チョイス
|
× |
シーケンス
|
× |
代替
|
× |
<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マッピングファイルは下の図の通り:
図1.2.2.12-7

図1.2.2.12-8

図1.2.2.12-9
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ns="namespace"> <xsd:element name="AA" type="xsd:string"/> </xsd:schema>名前空間が次のように表示されます。

図1.2.2.12-10
<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>
名前空間が次のように表示されます。
図1.2.2.12-11
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>
名前空間が次のように表示されます。
図1.2.2.12-12
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>
名前空間が次のように表示されます。
図1.2.2.12-13
<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>
名前空間が次のように表示されます。
図1.2.2.12-14
<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>
名前空間が次のように表示されます。
図1.2.2.12-15
<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>
名前空間が次のように表示されます。
図1.2.2.12-16
<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>
名前空間が次のように表示されます。
図1.2.2.12-17

図1.2.2.12-18

図1.2.2.12-19

図1.2.3-1

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

図1.2.4-2

図1.2.4-3

図1.2.5.1-1

図1.2.5.2-1

図1.2.5.3-1
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

図1.2.6-1

図1.2.6-2

図1.2.6-3
| 名称 | 返却型 | 関数名(または演算子) |
|---|---|---|
| 数値 | + | |
| - | ||
| div | ||
| mod | ||
| 語彙構造 | * | |
| ブール代数 | or | |
| and | ||
| = | ||
| != | ||
| < [<] | ||
| <= [<=] | ||
| > [>] | ||
| >= [>=] | ||
| ノード設定関数 | 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) |
Memo 仕様の詳細についてはhttp://www.w3.org/TR/1999/REC-xpath-19991116/を参照してください。
6+2XSLファイルの内容は以下のようになります。
<?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>8</result>
6-2XSLファイルの内容は以下のようになります。
<?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>
6 div 2XSLファイルの内容は以下のようになります。
<?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>
6 mod 2XSLファイルの内容は以下のようになります。
<?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>
* は
MultiplyOperator です。
関数の編集 ダイアログで Xpath表現式エディタ に以下の式を入力することが可能です。
6*2XSLファイルの内容は以下のようになります。
<?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>
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>
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>
6=2XSLファイルの内容は以下のようになります。
<?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!=2XSLファイルの内容は以下のようになります。
<?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>
6<2XSLファイルの内容は以下のようになります。
<?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>
6<=2XSLファイルの内容は以下のようになります。
<?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>
6>2XSLファイルの内容は以下のようになります。
<?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>
6>=2XSLファイルの内容は以下のようになります。
<?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>
./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>
./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(./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(./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()変換元の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(.)変換元の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()変換元の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>
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('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('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('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('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('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('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('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('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>
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()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()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>
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>
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(./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('-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('-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('-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
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>
<?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(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()変換元の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>
<?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(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('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('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('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>