---
title: "ノード関数は、階層的なデータ構造のマッピングを簡素化します"
date: "2018-06-12"
categories: 
  - "data-integration"
  - "tools"
tags: 
  - "data-mapping"
  - "mapforce"
  - "software-tools"
description: MapForceのノード機能が、XMLやJSONといった階層構造を持つデータのマッピングを効率化し、繰り返しのデータ変換作業を簡素化する方法をご覧ください。
---
Status: #blog

Tags:  #data-mapping #mapforce #software-tools

Categories: [data-integration](/blog/ja/category/data-integration.md) 
# ノード関数は、階層的なデータ構造のマッピングを簡素化します

MapForceのノード機能は、XMLノードやCSV、JSON、EDI、データベースのフィールドなど、階層構造を持つデータをマッピングする際に役立ちます。ユーザーは、ノードレベルでデータ処理関数を定義し、それを再帰的にすべての後続項目に適用することができます。

同様に、ノードにデフォルト値を設定することも可能で、その場合、その値は自動的に子ノードに適用されます。

デフォルト設定とノード関数は、特に以下のような場合に非常に役立ちます [データのマッピングと変換](https://www.altova.com/ja/mapforce) このタスクは、構造内の複数の関連アイテムに対して、同じ処理ロジックを適用する必要があります。例えば：

- Null値（値が存在しない状態を示す値）を、再帰的にすべての関連項目に対して、別の値に置き換えます
- 特定の値を（例えば、「N/A」）指定された別の値に、再帰的に、すべての後続項目に対して置き換えます
- データベースからデータを読み込む際に、データベース内のすべてのNULL値を別の値に置き換えます
- ソースデータベース内のすべての値から、末尾の不要な空白をすべて削除します
- ターゲットファイルまたはデータベースに書き込まれるすべての値の先頭または末尾に、カスタムのプレフィックスまたはサフィックスを追加します
- 出力値の書式設定
- その他にも、数多く存在します

デフォルト設定とノード関数を使用することで、階層的なデータを扱う際の複雑さを軽減し、同じ関数を何度もコピー＆ペーストする必要がなくなります。同じ関数を不必要に繰り返すと、マッピングの構造が煩雑になり、理解や修正が困難になります。

例を見てみましょう。

[![](/blog/images/JSON_blog_3.jpg)](JSON_blog_3.jpg)

<!--more-->

以下に示すXMLからCSVへの変換例は、MapForceのサンプルプロジェクトに含まれる"OrderinUSD.mfd"というファイルのものであり、ノード関数が持つ効率性と柔軟性を示すものです。

[![ノード関数を用いた階層構造データの可視化](/blog/images/node-functions-mapping.png)](node-functions-mapping.png)

この例では、あるXMLファイルから注文情報を読み込み、それをCSV形式のテキストファイルとして出力します。追加の要件として、XMLファイル内の「価格」要素に含まれるユーロ表記の金額をドルに変換し、注文された各商品の名前をすべて大文字に変換する必要があります。

ノード関数は、両方の要件を満たし、その機能は、記事ノードの右側にある関数記号で示されます。関数記号をダブルクリックすると、マッピング領域の上部にノード関数の定義ダイアログが表示されます

[![階層構造のデータを処理するためのノード関数の定義](/blog/images/node-functions-in-mapping.png)](node-functions-in-mapping.png)

この単一のノード関数は、必要な通貨変換と文字列変換の両方を実行するために、2つのMapForce操作を組み合わせたものです。ノード関数に、デフォルト値や関数を定義するための行を追加するには、左側のアイコンをクリックしてください。

各行の最初の項目は、その行の設定が単一の子要素に適用されるのか、それとも親要素のすべての後継要素に適用されるのかを示しています。

2つ目のフィールドでは、変更するデータの型を指定します。「…」ボタンをクリックすると、データの型を選択するためのダイアログが表示されます

[![ノード関数のデータ型選択](/blog/images/node-functions-by-datatype.png)](node-functions-by-datatype.png)

この例では、2種類のデータ型に対応する行しか含まれていませんが、ノード関数は、考えられるすべてのデータ型に対応する行を定義することも可能です。親ノードの子ノードそれぞれに対して、対応するデータ型の行が実行されます。

3つ目の項目は、その行が関数を使用しているか、デフォルト値を使用しているかを示します。いずれの場合でも、「編集」ボタンをクリックすると、その行の定義が開始されます

[![階層構造のデータを処理するためのノード関数操作を定義する](/blog/images/node-function-editing.png)](node-function-editing.png)

ノード関数を定義するには、関数ライブラリウィンドウから関数をドラッグ＆ドロップするか、関数に必要な定数を定義し、それらをソースと出力に接続します。

サンプル入力ファイルにおける "Amount" 要素は、実際には各商品に対して注文された数量を示しており、ノード関数で定義されている通貨換算係数で乗算されるべきではありません。 "Amount" を例外として定義するには、対応する関数記号を右クリックし、コンテキストメニューから「出力ノード関数を継承」のチェックを外すことで簡単に設定できます。

[![階層構造のデータをマッピングする際に、ノードの機能を上書きします](/blog/images/override-node-functions-1.png)](override-node-functions-1.png)

CSV出力ファイルには、さらに1つの要件があります。各商品の個別価格と小計金額は、それぞれ先頭にドル記号を付けて記述する必要があります。出力ファイルの設定では、"SinglePrice"と"Price"の列が文字列データとして定義されており、MapForceはソースからの数値データを自動的に文字列に変換します。

先頭にドル記号を追加するには、出力コンポーネントの「Rows」ノードに適用される追加のノード関数を使用します。その例を以下に示します

[![出力マッピングコンポーネントにノード関数を追加する](/blog/images/node-functions-output-component.png)](node-functions-output-component.png)

このノード関数が文字列データを含むすべての列に適用されるのを防ぐため、"会社"と"記事"の列には例外を設定しました。これで、ノード関数を用いた階層データのマッピングの例は完了しました。

他のMapForceの例と同様に、このマッピングの動作を示すために、ソースデータファイルが提供されています。以下に、XMLSpyで表示されたソースデータファイルを示します [XMLエディタ](https://www.altova.com/ja/xmlspy-xml-editor):

[![](/blog/images/mapping-source-data.png)](mapping-source-data.png)

オンライン注文処理システムなど、繰り返し変換が必要なMapForceのマッピングは、[MapForce Advanced Server](https://www.altova.com/ja/mapforce-server)によって自動化できます。テストや一時的な変換のためにマッピングを実行するには、マッピング設計ウィンドウの下にある「出力」ボタンをクリックするだけです。

いずれにしても、今回示した例におけるマッピング処理の結果は以下のようになります

[![階層構造データのマッピングに使用する結果ファイル（例）](/blog/images/node-function-mapping-result.png)](node-function-mapping-result.png)

この投稿で説明されているデータマッピングに加え、MapForceには他の様々なノード関数例が用意されています。さらに、MapForceに組み込まれたヘルプシステムには、ノード関数のマッピングを最初から構築するためのステップバイステップのチュートリアルも含まれています。

ノード機能が階層的なデータをどのように簡潔にマッピングするかを実際に体験するには、こちらをクリックして、フル機能のMapForceの無料トライアル版を[ダウンロード](https://www.altova.com/ja/mapforce/download)してください。

**追記：** [こちらの記事](https://www.altova.com/blog/mapping-structured-data-with-node-functions/)では、ノード名、ノードの長さ、ノードのデータ型の精度、カスタマイズされたノードの注釈など、ノードのメタデータに基づいてノード関数を適用するための別の方法を紹介しています。
