このサイトをビューするために JavaScript を有効化してください。

Altova MapForce 2020 Enterprise Edition

デフォルトとノード関数の作成方法 で説明されているとおり、ノード関数、またはデフォルトをマッピング上のほぼ全てのアイテム (ノード) のために作成することができます。この過程をルールの定義と呼ぶことにしましょう。 柔軟性のためにルールには以下の重要な特徴があります:

 

継承. 子孫を持つアイテム上のルールを定義する場合、このオプションを無効化しない限り、デフォルトで、ルールは子孫に継承されます。関数を定義する箇所でアイテムがネストされている子アイテムを持つ場合、直接子アイテムのみにルールを適用する、または全ての子孫アイテムにルールを適用するかを決定することができます。

データ型のフィルタリング. MapForce は各アイテムのデータ型に応じてルールを条件に従い適用することができます。これにより、例えば、文字列の型の全てのアイテムのための特定のデフォルトの値 (または関数)を適用、または数値型の全てのアイテムのために異なるデフォルト(または関数) を適用することができます。

 

上記の振る舞いは特定の影響を与えます。具体的には、ルールの定義と、ルールの適用を区別して理解する必要があります。一部のアイテムのためにルールを定義しても、そのルールがアイテムに影響を与えるとは限りません。 例えば、型 "文字列" のアイテム上でルールを定義し、ルールの条件としてデータ型 "数値" を選択すると、 ルールは適用されません。ルールの条件 (データ型と継承)が満たされた場合アイテム、またはその子孫にルールが適用されます。

 

定義し適用するルールに関して理解するには、MapForce マッピングのための視覚的なヒントに注意してください:

 

アイコン

詳細

mf_ic_node_func_defined

このアイコンは、 (黒色) はこのアイテムのためにルールが定義され、全ての子孫に影響を与える可能性があることを示しています。アイコンをクリックして、ルールを変更、または削除します。

mf_ic_node_func_applied

このアイコンは、 (赤茶色) はアイテムが祖先レベルで定義されているルールは見込みがある(適用可能である) ことを示しています。すなわち、このアイテムに適用(または、影響) することができるルールは存在します。

mf_ic_node_func_defined_applied

このアイコンは、 (太字、赤茶色) は、このアイテムのためにルールが定義されている、またこのアイテムにルールが適用されることを示しています。祖先からルールを継承するアイテムの場合この詳細があてはまり、同時に、アイテムのためにルールが定義されていることを指します。

mf_ic_node_function_blocked

このアイコンは、このアイテムに適用することのできるルールが意図的にブロックされていることを指します。ルールを適用しない箇所で特定のアイテムのためにこの操作を行うことができます。

mf_ic_node_func_inactive

このアイコンは、 (グレーアウト) は、このアイテムに適用されるアイテムは無効化されています。例えば、 このアイコンマッピングに接続されていないアイテムのために表示されます。

 

通常、複数のノード関数、またはデフォルトが1つ、および、同じアイテムのために存在する場合、次のルールに注意してください:

 

アイテムに適用することのできるノード関数とデフォルトの数に関わらず、マッピング上の単一のアイテムのために、 MapForce は1つのノード関数、および、1つのデフォルトのみを適用します。

 

通常、以下のようにルールを解釈することができます:

 

同じアイテムのために複数のルールが存在する場合、 MapForce はそのアイテムに近いルールを適用します。例えば、3回ノード関数を定義したと仮定します : Company と呼ばれるルート XML ノードでは、 Department と呼ばれる子ノード、および、孫 Employee。この場合、 MapForce は近いため、 Employee アイテム上で定義されている Employee アイテム 関数を適用します。関数が存在しない場合、直接の祖先 Department の関数を検索します。Department のために関数が存在しない場合、この場合 Company である ルートノードを更に検索します。継承は任意です。継承を無効化するには、祖先からルールを継承 チェックボックスを無効化します。このチェックボックスがクリアされていると、アイテムには "ブロック済みのルール" mf_ic_node_function_blockedアイコンが表示されます。

同じアイテムに複数のルールが存在する場合、MapForce はマッピングペイン上の上のグリッドから最初のルールを適用します。このグリッドのルールの順序を変更するには、ルールをクリックし、グリッド内でルールをクリックし、グリッド内の新しい箇所にドラッグアンドドロップします。現在のアイテムのために定義されている場合のみグリッドのルールをドラッグできることに注意してください。継承されたルールの位置は変更することができず、継承を有効化、または無効化することはできます。

 

仕組みを説明するにあたり、次のパスで使用することのできるマッピングを使用します: <マイ ドキュメント>\Altova\MapForce2020\MapForceExamples\Tutorial\MissingFields.mfd.

mf_nodefunc_01

MissingFields.mfd

上記のとおり、 このマッピングはソース XML ファイル からデータを読み取りターゲットテキストファイル (固定長フィールド) に書き込みます。ソース XML ファイル内では、 要素 Article には異なる型の次の子要素が存在します: "integer"、"string"、および "decimal"。かそれぞれの子要素は任意です (minOccurs="0")。このため、これらの要素が ソース XML 内で存在しない場合、デフォルトの値を与える必要がある可能性があります。それ以外の場合、ターゲット CSV ファイル内で空のフィールドが存在する場合があります。例:

 

  T-Shirt   25    Available in all sizes        

2            2.3                                

3  Pants           Limited stock                

4  Jacket    57.5                                

 

下記にルールを使用して不足しているデータを扱う異なる方法、および、マッピング結果をルールがどのように影響するかについて説明されています。特定のアイテムに対して複数のルールが存在する場合、どのルールを管理するかについて理解することができます。

 

サンプル 1: 全ての文字列アイテムのためにデフォルトを提供する方法

マッピング MissingFields.mfd 内で、次の条件が存在すると仮定します: Article の子が型"string"であり、 不足している場合、 デフォルトの値として "n/a" を使用します。

 

この条件を満たすためには、 以下のステップに従います:

 

1.Article アイテムを右クリックし、 デフォルトとノード関数 | 出力デフォルトとノード関数 をコンテキストメニューから選択します。

2.デフォルトを追加 ( mf_ic_add_default ) をクリックします。

3.デフォルトの値 の下に、 "n/a" を入力し、「Enter」 を押します。

mf_nodefunc_02

上のマッピングでは、 ルールの条件を以下のように設定することができます: Article の全ての子孫アイテムで、データ型が "string"で、ソース XML 要素が不足している場合、デフォルトの値として "n/a" を使用します。このサンプルでは、 型 "string" の2つのアイテムである NameDiscription が存在し、ルールは両方に適用されます。

 

上記のとおり、 ルールが定義される箇所で、アイテムの横にmf_ic_node_func_defined アイコンが表示されます。ルールが定義される箇所で、アイテムの横に mf_ic_node_func_applied アイコンが表示されます。この時点でマッピングをプレビューすると、出力内で不足していた文字列は、 "n/a" と置き換えられていることに気が付きます:

 

  T-Shirt   25    Available in all sizes        

2  n/a       2.3   n/a                          

3  Pants           Limited stock                

4  Jacket    57.5  n/a                          

 

サンプル 2: データ型をベースにデフォルトを条件付きで提供する方法

文字列アイテムのためのデフォルトに加え、数値型のアイテムに デフォルトの値 0 を提供すると仮定します。この条件を満たすためには、 以下のステップに従います:

 

1.Article アイテムをクリックします。

2.デフォルトを追加 ( mf_ic_add_default ) をクリックして、次の条件を持つ2番目のルールを追加します:

mf_nodefunc_03

上のマッピングでは、 ルールの条件は以下のように設定することができます:

 

Article の全ての子孫アイテムのためにデータ型が "string" で、ソース XML 要素が不足している場合、デフォルトの値 "n/a"  を使用します。

Article の全ての子孫アイテムのためにデータ型が 数値で、ソース XML 要素が不足している場合、デフォルトの値 "0"  を使用します。

 

結果的には、概要は以下のようになります:

 

0  T-Shirt   25    Available in all sizes        

2  n/a       2.3   n/a                          

3  Pants     0     Limited stock                

4  Jacket    57.5  n/a                          

 

メモ:"integer" と "decimal" データ型の両方を含むため、データ型 "numeric" は実際は型のカテゴリです。このため、ルールは NumberSinglePrice 要素の両方に適用されます。データ型として "decimal" を選択すると、 XML スキーマ型階層では、型 "integer" は型 "decimal" からが派生するため、ルールは NumberSinglePrice の両方に適用されます。("XML Schema Part 2: Datatypes Second Edition"、 https://www.w3.org/TR/xmlschema-2 の §3 を参照してください)。データ型 として "integer"を選択する場合、ルールは Number のみに適用されます。

 

サンプル 3: 特定のアイテムのためにルールをブロックする方法

前のアイテム同様全ての文字列と数値アイテムにデフォルトを適用すると仮定します。しかしながら、 SinglePrice アイテムにデフォルトを適用しないとする場合以下を行います。

 

この条件を満たすためには、アイテム SinglePrice をクリックして、チェックボックス 祖先からルールを継承をクリアします。

mf_nodefunc_04

上のマッピングでは、 アイテム SinglePrice は親 Article からルールを継承しません。このため、 "ブロック済みのルール" アイコン mf_ic_node_function_blocked が表示されます。

 

この結果、対応するフィールドは結果内で空白のまま表示されます:

 

0  T-Shirt   25    Available in all sizes        

2  n/a       2.3   n/a                          

3  Pants           Limited stock                

4  Jacket    57.5  n/a                          

 

サンプル 4: 特定のアイテムのための継承されたルールをオーバーライドする方法

全ての文字列に数値を提供すると仮定します。しかしながら、アイテム SinglePrice のみ、9999 を提供するとします。

 

この条件を満たすために、以下のステップに従ってください:

 

1.アイテム SinglePrice をクリックします。

2.デフォルトを追加 ( mf_ic_add_default ) をクリックし、9999 のデフォルトの値を入力します。

3.任意で、祖先からルールを継承 チェックボックスを選択します。

mf_nodefunc_05

メモ:        継承されたルールの背景は黄色です。

 

上のマッピングでは、アイテム SinglePrice にて起用することのできる 3つのルールが存在するとします : 2つの継承されたルールと、1つの直接的なルールが存在します。この場合、アイテム上で直接定義されているルールが優先されます。継承されたルールは無視されるため、概要は以下のようになります:

 

0  T-Shirt   25    Available in all sizes        

2  n/a       2.3   n/a                          

3  Pants     9999  Limited stock                

4  Jacket    57.5  n/a                          

 

サンプル 5: 適用するルールを手動で選択する方法

前のサンプルを更に展開し、アイテム SinglePrice のためにもう1つアイテムを定義します。8888 がデフォルトの値です。上記のとおり、現在のアイテムに直接定義されているルールが優先されます。しかしながら、(継承されたルールに加え) 2つのルールが現在のアイテムに存在します。問題は2つのデフォルト 8888 または 9999 のどちらが適用されるかです。

mf_nodefunc_06

上のマッピングのように同じアイテムに対して複数のルールが存在する場合、優先されるルールをグリッドの上に手動でドラッグします。一番上に表示されているルールが優先されます。このため、 SinglePrice のデフォルトの値は、グリッドの上に表示されている 8888 です:

 

0  T-Shirt   25    Available in all sizes        

2  n/a       2.3   n/a                          

3  Pants     8888  Limited stock                

4  Jacket    57.5  n/a                          

(C) 2019 Altova GmbH