例: ノードが存在しない場合の例外

www.altova.com このトピックを印刷 前のページ 1つ上のレベル 次のページ

ホーム >  マッピングのデザイン > 例外の追加 >

例: ノードが存在しない場合の例外

この例では、ソース XML スキーマが存在しない場合例外をスローする方法を説明します。説明を簡素化するために、この例は、同じ XML スキーマをソースとターゲットコンポーネントで使用します。

 

ソーススキーマをマッピングに追加する:

1.「挿入」 メニューから 「XML スキーマ/ファイル」をクリックし <マイ ドキュメント>\Altova\MapForce2019\MapForceExamples\BookList.xsd を参照します。
2.インスタンスファイルを提供するようにプロンプトされると、 「スキップ」をクリックします。
3.スキーマルート要素を選択するようにプロンプトされると、 BookList をルート要素として選択します。

 

ターゲットスキーマを追加するには、 同じステップに従います。そして、対応するコマンド(または、対応するツールバー ボタン)を 「挿入」メニューから使用し、以下を追加します:

 

Filter: Nodes/Rows コンポーネント (以下も参照してください: フィルターと条件)
テキスト "No year defined!" を伴う定数
例外

 

最後に、ライブラリ ウィンドウから、 exists 関数をマッピングエリアにドラッグして、下に表示されるように接続を描きます。

mf_exception_example_1

 

XML スキーマに従うと、書籍の名前以外の Book 要素の全ての属性は、任意です。 ですから、 "Year" 要素は、有効な XML インスタンス内に存在する、もしくは、しない場合があります。このマッピングのゴールは、 各書籍のために "Year" 要素が存在する箇所で XML インスタンスを正確に処理することです。 それ以外の場合、 マッピングは、例外をスローします。

 

マッピングの例外の成功をテストする:

1. ソースコンポーネントのヘッダーをダブルクリックします。「入力 XML ファイル」 の横から、次のファイルを参照します: <マイ ドキュメント>\Altova\MapForce2019\MapForceExamples\BookList.xml
2.「出力」 ボタンをクリックしてマッピングを実行します。

 

例外をテストする:

1.同じディレクトリ内に、 BookListInvalid.xml と呼ばれる BookList.xml ファイルのコピーを作成します。
2.Book 要素から "Year" 要素を削除するように修正します。
3.ソースコンポーネントのヘッダーをダブルクリックします。「入力 XML ファイル」 の横から、 BookListInvalid.xml ファイルを参照します。
4.「出力」 ボタンをクリックしてマッピングを実行します。

 

マッピングの作動のしくみに注目します。

 

接続 A は、ターゲット インスタンスがソース インスタンス内の各書籍のために作成されていることを保証します。接続 B、 C、 D、 E は "Title"、 "Year"、 "Price"、 と "Author" が各書籍のためにソースからターゲットにコピーされルことを保証します。

 

接続 F は、exists 関数が "Year" 属性の存在をチェックするようをトリガーします。接続 G は関数の結果 (true または false) をフィルターにパスします。結果が true の場合、"Year" 属性は存在し、書籍はフィルターにパスされ、フィルターに書籍はパスされ、 後に、接続 H を介してターゲットにパスされます。

 

ソースコンポーネントの Year 出力にフィルターが直接接続されていないことに注意してください。これを行った場合、フィルターは自身の存在により Year をフィルターするので、意味が無く、 例外は決してスローされません。

 

ルールに従い、フィルターの on-false または on-true 出力へ例外が接続されている必要があるため、 I が存在します。

 

最後に、接続 K がカスタムエラーテキストを定数から例外コンポーネントにパスします。


(C) 2019 Altova GmbH