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

Altova MapForce 2020 Enterprise Edition

この例は、XML ドキュメントから、要素名をターゲット XML ドキュメント内の属性の値にマップする方法について説明しています。この例には、付随するサンプルマッピングがあり、 次のパスを使用して検索することができます: <マイ ドキュメント>\Altova\MapForce2020\MapForceExamples\Tutorial\ConvertProducts.mfd

 

例を理解するために、XML ファイルは製品のリストを含むと想定しましょう。 各製品は次のフォーマットを有します:

 

  <product>

    <id>1</id>

    <color>red</color>

    <size>10</size>

  </product>

 

目的は、各製品の情報を名前と値ペアに変換することです。 例:

 

  <product>
    <attribute name="id" value="1" />
    <attribute name="color" value="red" />
    <attribute name="size" value="10" />
</product>

 

上記のようなデータマッピングを行うには、この例でも使用されていますが、"ノード名への動的なアクセス"と呼ばれる MapForce 機能を使用しています。マッピングを実行する際、「動的」 とは、 (値だけではなく)ノード名も読み取ることができ、これらの名前を値として使用することを意味します。必要とするマッピングをいくつかのシンプルなステップを以下に示されるように作成することができます。

 

 

ステップ 1: ソース XML コンポーネントをマッピングに追加する

「挿入」 メニューから、「XML スキーマ/ファイル」をクリックして、 <マイ ドキュメント>\Altova\MapForce2020\MapForceExamples\Tutorial\Products.xml を参照します。 この XML ファイルは、同じフォルダー内にある Products.xsd スキーマを指します。

 

ステップ 2: ターゲット XML コンポーネントをマッピングに追加する

「挿入」 メニューから、「XML スキーマ/ファイル」をクリックして、次のファイルを参照します: <マイ ドキュメント>\Altova\MapForce2020\MapForceExamples\Tutorial\ProductValuePairs.xsd。 インスタンスファイルを与えるように問われると、 「スキップ」 をクリックします。ルート要素を選択するようにプロンプトされると、 ルート要素として、 products を選択します。

 

この時点では、マッピングは、以下のようになります:

 

ステップ 3: 子ノードへの動的なアクセスを有効化する

1.products ノードを右クリックして、コンテキストメニューから、「動的な名前を持つ子要素を表示する」を選択します。

2.開かれるダイアログボックス内から、 text() を型として選択します。他のオプションをそのままにします。

mf_map_ConvertProducts_02

 

text() ノードがソース コンポーネントに追加されていることに注意してください。 このノードは、それぞれの子アイテムをマッピングに与えます (この場合は、「id」、「color」、「size」の値です )。

mf_map_ConvertProducts_03

 

ステップ 4: マッピング 接続を描く

マッピング 接続 A、B、C、D 下に表示されるとおり、描きます。任意で、各接続上からをダブルクリックし、テキスト「A」、「B」「C」、および 「D」をそれぞれ、詳細ボックスに入力します。

mf_map_ConvertProducts_04

ConvertProducts.mfd

上で説明されているマッピングでは、 接続 A は、ソース内の各製品のために、ターゲット内に製品を作成します。これまでは、これは ノード名を指さない標準的な MapForce 接続でした、 しかしながら、 接続 B は、 product の各対応する子要素のために、新規の要素を attribute と呼ばれるターゲット内に作成します。

 

接続 B は、マッピング内でとても重要です。この接続の目的である product の子要素のシーケンスを、ソースからターゲットに運びます。実際の名前または値を運ばないため、以下として理解される必要があります: ソース element() に N 子要素が存在する場合、 ターゲット内のアイテムの N インスタンスを作成します。この特定の場合は、 ソース内の product には、3 つの子要素 (id、 colorsize)が存在します。これは、ターゲット内の各 productattribute という名前の3つの子要素を持つことを意味します。

 

この例で説明されていませんが、同じルールが、attribute() の子要素をマップするために使用されます。ソース attribute() アイテムが、 N 子属性を持つ場合、 ターゲット内のそのアイテムの N インスタンスを作成します。

 

次に、 接続 C は、 product の各子要素の実際の名前をターゲットにコピーします  (文字通り、 「id」、 「color」、 と 「size」)。

 

最後に、接続 D は、製品の各子要素の値を文字列の型として、ターゲットにコピーします。

 

マッピングの出力をプレビューするには、「出力」 タブをクリックして、 生成された XML を確認してください。マッピングの意図とする目的である通り、出力は、データが名前と値のぺとして保管されている、複数の製品を含んでいます。

 

<?xml version="1.0" encoding="UTF-8"?>
<products xsi:noNamespaceSchemaLocation="ProductValuePairs.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <product>
    <attribute name="id" value="1"/>
    <attribute name="color" value="red"/>
    <attribute name="size" value="10"/>
  </product>
  <product>
    <attribute name="id" value="2"/>
    <attribute name="color" value="blue"/>
    <attribute name="size" value="20"/>
  </product>
  <product>
    <attribute name="id" value="3"/>
    <attribute name="color" value="green"/>
    <attribute name="size" value="30"/>
  </product>
</products>

生成されたマッピング出力

(C) 2019 Altova GmbH