---
title: 構造化データを、強化されたノード機能を用いてマッピングする
date: 2024-05-03
categories:
  - data-integration
  - tools
tags:
  - data-integration
  - data-mapping
  - mapforce
  - software-tools
description: MapForceには、構造化されたデータをマッピングするためのノード機能を強化する特殊なフィルターが搭載されています
---
Status: #blog

Tags:  #data-integration #data-mapping #mapforce #software-tools

Categories: [data-integration](/blog/ja/category/data-integration.md) 
# 構造化データを、強化されたノード機能を用いてマッピングする

以前にもお伝えしたように、[ノード機能のサポート](https://www.altova.com/blog/node-functions-simplify-mapping-hierarchical-data-structures/)は、構造化されたデータをマッピングする際に、同じ関数を何度もコピー＆ペーストする必要性をなくし、作業を簡素化します。同じ関数を不必要に繰り返すと、マッピングの構成が煩雑になり、データのマッピング内容を理解したり修正したりすることが難しくなります。

MapForceには、ノード関数を定義するための追加のフィルタ機能も含まれています。これらのパラメータを使用することで、開発者は、カスタムで定義した条件に基づいて、特定のノードに機能やデフォルト値を適用できます。例えば、ノード名、ノードの長さ、ノードのデータ型の精度、カスタム定義されたノードの注釈など、ノードのメタデータに基づいてノード関数を適用することができます。

強化されたノード機能を持つマッピングについて見ていきましょう。

![](/blog/images/mapping-structured-data-with-node-functions.jpg)

<!--more-->

その [データマッピング](https://www.altova.com/ja/mapforce) 以下に、MapForcにインストールされているPriceCalculation.mfdノード関数の例を示します。この例では、商品の原価とマークアップ率に基づいて、一連の商品に対する最終的な販売価格を計算します。ソースデータはCSV形式のテキストファイルで、出力はXMLファイルです。

[![MapForceのサンプル例：ノード関数を使用して構造化データをマッピングする方法の解説](/blog/images/mapping-structured-data-example.png)](mapping-structured-data-example.png)

このマッピングでは、[ノード関数](https://www.altova.com/ja/mapforce#node-functions)が定義され、出力ファイル内の「Articles」要素とその子要素に適用されます。 「Articles」要素の左側にある太字の関数アイコンをダブルクリックすると、ノード関数の定義が表示されます。

[![構造化データのマッピングにおけるノード関数の表示](/blog/images/open-node-function.png)](open-node-function.png)

左上にある「適用対象」のプルダウンメニューは、この機能が「Article」のすべての子要素に適用されることを示しています。機能の説明セクションでは、この機能が、丸め精度を調整する際に、ノードのメタデータ要素「node_fractionDigits」をパラメータとして使用していることがわかります。もし、どの子要素に対しても「node_fractionDigits」が定義されていない場合、代わりに「0」が使用されます。

上記の画像の上部中央に表示されている「編集」ボタンをクリックすると、ノード関数についてさらに詳しく調べることができます。これにより、関数が独自のデータマッピングウィンドウで開き、ユーザー定義関数と同様の表示になります

[![構造化されたデータを処理するためのノード関数を定義する](/blog/images/node-function-definition.png)](node-function-definition.png)

画面左下にある「node_fractionDigits」という項目は、ターゲットデータの構造に基づいて、関数への入力値を設定するためのものです。それでは、この「node_fractionDigits」を見つけるために、ノードのメタデータについてもう少し詳しく見ていきましょう。

### ノードメタデータの定義

構造化データファイルで使用可能なノードのメタデータは、そのデータ構造の定義自体から提供されます。今回の例では、マッピング対象のコンポーネントがXMLドキュメントであるため、どのノードにも利用可能なメタデータは、XMLスキーマで定義されています。

以下の画像は、XMLSpyのグラフィカルなスキーマ表示で示された、PriceCalculationのXMLスキーマです

![構造化データのマッピングに使用するターゲットを、AltovaのグラフィカルなXMLスキーマビューで表示します](/blog/images/altova-xml-schema-view.png)

図で強調表示されている "SalePrice" XML要素は、"Amount"型の一例として定義されており、"Amount"型自体は、小数点以下最大2桁の10進数です。これは、右下にある「Facet」ウィンドウで確認できます。したがって、"SalePrice"ノードのメタデータである "node_fractionDigits" の値は2です。

構造化されたデータファイルで使用可能なノード関数パラメータは、常にデータの種類（XML、リレーショナルデータベース、PDF、CSVファイルなど）と、スキーマ定義に含まれる詳細度によって異なります。

### ノード関数パラメータを用いた構造化データのマッピング

新しいノード関数を作成する際、最初に未接続の「元の値」と「結果値」が表示されます。ノード関数のパラメータを追加するには、青い「ノード詳細の追加」ボタンをクリックします。すると、「ノード詳細」ダイアログが表示され、ここでノードのパラメータを選択できます

![構造化されたデータを処理するための、ノード関数にパラメータを追加します](/blog/images/add-node-function-parameter.png)

特定のノードが選択されたメタデータタイプをサポートしていない場合に備えて、そのオプションにご注意ください。価格計算のマッピングにおいては、この動作はノード関数の定義内で直接処理されます。ノード関数は数値データ型にのみ適用され、`fractionDigits`が指定されていないノードの場合、`substitute-missing`関数がゼロを代入します。

### ノード関数の実行を監視する

出力コンポーネントの任意のノード上で、右クリックメニューからブレークポイントを設定し、組み込みのMapForceデバッガーを使用して、関数の実行状況を監視することができます。

以下に示す部分的な画面では、ブレークポイントが「SalePrice」に設定されています。デバッグメニューからマッピングを実行し、その結果、ブレークポイントで処理が一時停止し、中間値がメインのマッピングウィンドウに追加されました。

![組み込みのMapForceデバッガーを使用して、ノード関数の実行結果を確認します](/blog/images/node-function-debugging.png)

計算された最終的な販売価格（SalePrice）の値は、マッピング処理の結果、49.183323875でした。その後、ノード関数によってこの最終的な値が49.18に丸められました。

メインのマッピングウィンドウでのデバッグ結果には、実際のノード関数の実行内容は表示されませんが、メッセージウィンドウ内でクリックすると、そのノード関数が開き、すべての途中経過の値が表示されます

![Altova MapForceにおける、構造化データのマッピングに使用するメッセージウィンドウ](/blog/images/messages-window.png)

![組み込みのMapForceデバッガーで、ノードの機能実行の詳細を確認できます](/blog/images/node-function-debug-result.png)

MapForceにインストールされているサンプルには、他にも様々なノード関数データのマッピングが含まれています。さらに、MapForceに統合されたヘルプシステムには、ノード関数マッピングを最初から構築するためのステップバイステップのチュートリアルも用意されています。

ここに説明されているサンプル設定を修正して、出力がどのように変化するかを実際に確認することもできます。例えば、XMLスキーマを編集して、小数点以下の桁数を3桁に設定したり、設定を変更して、ノード関数を「Article」の最初の要素である数値ノードに対して実行できるようにしたりして、新しい結果を調べてみることができます。

ノード機能の動作を確認するには、こちらのMapForceのデモ動画をご覧ください。

![](https://www.youtube.com/watch?v=EvuwgaKOkjA)
