ドキュメントタイプを使用したXMLツリーの作成

Talend Open Studio for Data Integration ユーザーガイド

EnrichVersion
5.6
EnrichProdName
Talend Open Studio for Data Integration
task
ジョブデザインと開発
EnrichPlatform
Talend Studio

Document (ドキュメント)データタイプは、XML構造の定義をできるだけ簡単にるというコンセプトに完全に適合します。入力フローまたは出力フロー、あるいはその両方をマッピングするXMLツリー構造が必要な場合、このタイプを使用します。各種XMLソースからXMLツリー構造をインポートして、マッピングエディターでツリーを直接編集できるため、作業の手間を省略できます。

ドキュメントタイプをセットアップする方法

Document (ドキュメント)データタイプは、Talendで提供されるデータ型の1つです。Document (ドキュメント)タイプは、[Schema editor] (スキーマエディター)で対応するデータのスキーマを編集する際にセットアップします。スキーマエディターの詳細は、[Schema Editor] (スキーマエディター)の使用を参照してください。

次の図では、入力フローでの例を説明しており、CustomerDocument (ドキュメント)タイプにセットアップしています。複製するには、マップエディターで、[+]ボタンをクリックして[Schema editor] (スキーマエディター)の入力側で1行を追加し、名前を変更して、ドロップダウンリストで表示されたデータ型の中から[Document] (ドキュメント)を選択します。

多くの場合、tXMLMapは前後のコンポーネントのスキーマをtFileInputXMLコンポーネントなどから取得し、ESBで使用する場合はtESBProviderRequestコンポーネントから取得します。そうすることで、XMLフローの処理でDocument (ドキュメント)タイプをセットアップする手間を大幅に省略できます。ただし、ドキュメント行の内容となるXML構造を変更するには、引き続きマップエディターを使用する必要があります。

注記

Document (ドキュメント)フローには、ユーザー定義のXMLツリーが含まれますが、他のスキーマと同じく単一フィールドのスキーマとなり、フィールド間でデータ型が異なる場合があることに注意してください。スキーマを設定する方法の詳細は、基本設定タブを参照してください。

データの行でDocument (ドキュメント)タイプをセットアップすると、マップエディターの対応するデータフローテーブルに、この構造の詳細を反映する基本的なXMLツリー構造が自動的に作成されます。この基本構造は、tXMLMapを使用する有効なXMLツリーに必要な最小モジュールを示しています。

  • ルートモジュール: XMLツリーを処理するために必要な最小モジュールで、高度なXMLツリーを開発するための基盤にもなります。

  • ループモジュール: XMLツリーの階層データを読み取るために反復処理するモジュールを判別します。デフォルトでは、ルートモジュールはループモジュールとしてセットアップされます。

この図は、入力フローCustomerの例を示します。デフォルトでroot (ルート)とタグ付けされ生成されたXMLルートに基づいて、目的のXMLツリー構造を開発できます。

そのためには、次のようにします。

  1. 以下のいずれかのソースのタイプからカスタムXMLツリー構造をインポートします。

    注記

    必要に応じて、コンテキストメニューで提供されるオプションを使用してXMLツリーを手動で開発できます。

  2. 必要に応じて、作成するXMLツリーのループモジュールをリセットします。必要な数だけループを設定できます。この手順では、次のような状況について考慮しなければならないかもしれません。

必要に応じて、コンテキストメニューで提供されるオプションを使用してインポートしたXMLツリーを引き続き変更できます。次の表では、使用可能なオプションで実行できる操作を説明しています。

オプション

操作

[Create Sub-element] (サブモジュールの作成)および[Create Attribute] (属性の作成)

XMLツリーを開発するためのモジュールまたは属性を追加します。関連項目: サブモジュールまたは属性をXMLツリー構造に追加する方法

[Set a namespace] (ネームスペースの設定)

インポートしたXMLツリーのネームスペースを追加および管理します。関連項目: ネームスペースを管理する方法

[Delete] (削除)

モジュールまたは属性を削除します。関連項目: XMLツリー構造からモジュールまたは属性を削除する方法

[Rename] (名前の変更)

モジュールまたは属性の名前を変更します。

[As loop element] (ループモジュールとして使用)

モジュールをループモジュールとして設定またはリセットします。複数のループモジュールおよびオプションのループモジュールがサポートされています。

[As optional loop] (オプションループとして使用)

このオプションは、ループモジュールを定義するまで使用できません。

対応するモジュールがソースファイルに存在する場合、オプションループモジュールは通常のループモジュールと同様に機能します。存在しない場合は、ループモジュールとして自動的にその親モジュールがリセットされます。ソースファイルの親モジュールがない場合は、ルートモジュールまで高いレベルのモジュールが採用されます。ただし実際の運用では、XMLツリーとソースファイル構造に差異がある場合、ソースファイルにXMLツリーを適合させるてより高いパフォーマンスを得ることをおすすめします。

[As group element] (グループモジュールとして)

出力側のXMLツリーで、モジュールをグループモジュールとして設定します。関連項目: 出力データをグループ化する方法

[As aggregate element] (集約モジュールとして)

出力側のXMLツリーで、モジュールを集約モジュールとして設定します。関連項目: 出力データを集約する方法

[Add Choice] (選択の追加)

選択モジュールを設定します。この下で開発されたすべての子モジュールは、この定義に含まれることになります。この選択モジュールは、XSDコンセプトの1つに由来します。これにより、tXMLMapでドキュメントフローを読み書きするXSD選択モジュールの機能を実行できます。

tXMLMapで選択モジュールが処理される際、マッピング式が適切に定義されていないと、定義に含まれるモジュールが出力されません。

注記

tXMLMapコンポーネントでは、インポートしたXSDファイルで設定済みのすべての選択モジュールが自動的に定義されます。

[Set as Substitution] (代替として設定)

代替モジュールを設定して、対応するXSDで定義されたヘッドモジュールを代替可能として指定します。代替モジュールにより、tXMLMapでドキュメントフローを読み書きするXSD代替モジュールの機能が実行できるようになります。

tXMLMapが置換モジュールを処理する際に、マッピング式が適切に定義されていないと、その定義に含まれるモジュールは出力されません。

注記

tXMLMapコンポーネントでは、インポートしたXSDファイルで設定済みのすべての代替モジュールが自動的に定義されます。

次のセクションでは、XMLツリーを作成するプロセスの詳細を説明しています。

XMLおよびXSDファイルからXMLツリー構造をインポートする方法

XMLファイルからXMLツリー構造をインポートするには、次の手順を実行します:

  1. 該当する入力フローテーブルで、カラム名を右クリックしてコンテキストメニューを開きます。この例ではCustomerです。

  2. このメニューから、[Import From File] (ファイルからインポート)を選択します。

  3. ポップアップダイアログボックスで、目的のXMLツリー構造を指定するために必要となるXMLファイルを参照してダブルクリックします。

XSDファイルからXMLツリー構造をインポートするには、次の手順を実行します:

  1. 該当する入力フローテーブルで、カラム名を右クリックしてコンテキストメニューを開きます。この例ではCustomerです。

  2. このメニューから、[Import From File] (ファイルからインポート)を選択します。

  3. ポップアップダイアログボックスで、目的のXMLツリー構造を指定するために必要となるXSDファイルを参照してダブルクリックします。

  4. 表示されたダイアログボックスで、[Root] (ルート)リストからXMLツリーのルートとしてモジュールを選択して、[OK]をクリックします。これにより、インポートしたXSDファイルで記述されたXMLツリーが構築されます。

    注記

    インポートしたXMLツリーのルートは次のように柔軟に選択できます。

    • XSDファイルから入力または出力XMLツリー構造をインポートする際に、XMLツリーのルートのモジュールを選択できます。

    • XML構造をインポートすると、root (ルート)タグの名前が自動的にXMLソースの名前に変更されます。このルートの名前を手動で変更するには、ツリースキーマエディターを使用する必要があります。このエディターの詳細は、XMLツリースキーマの編集を参照してください。

ここで、XMLツリー構造のループモジュールを定義する必要があります。ループモジュールを定義する方法の詳細は、インポートされたXML構造のループモジュールを設定またはリセットする方法を参照してください。

リポジトリからXMLツリー構造をインポートする方法

次の手順を実行します。

  1. 任意の入力フローテーブルで、カラム名を右クリックしてコンテキストメニューを開きます。この例ではCustomerです。

  2. このメニューから、[Import From Repository] (リポジトリからインポート)を選択します。

  3. ポップアップ表示されるリポジトリコンテンツリストで、XML接続またはMDM接続を選択して、XMLツリー構造をインポートします。

    この図は、この[Repository] (リポジトリ)に保存されたXMLファイルの例を示しています。

    注記

    [Repository] (リポジトリ)からXMLツリー構造をインポートするには、対応するXML接続を作成している必要があります。リポジトリでファイルXML接続を作成する方法の詳細は、XMLファイルメタデータの一元管理を参照してください。

  4. [OK]をクリックして、この選択を確定します。

現在の[Repository] (リポジトリ)に保存されたXML接続の作成時にこのループが定義されているため、XMLツリー構造が作成され、ループが自動的に定義されます。

インポートされたXML構造のループモジュールを設定またはリセットする方法

XMLツリーに存在しない場合、少なくとも1つのループモジュールを設定する必要があります。存在する場合、必要に応じて既存のループモジュールをリセットします。

ループモジュールを設定またはリセットする必要がある場合、次のようにします。

  1. 作成済みのXMLツリー構造で、ループを定義するモジュールを右クリックします。たとえば、次の図ではCustomerモジュールにループを定義する必要があります。

  2. ポップアップコンテキストメニューから、[As loop element] (ループモジュール)を選択して、選択したモジュールにループを定義します。

    定義すると、選択したモジュールはテキスト: loop:trueとマークされます。

注記

XMLツリーに必要なループモジュールを設定せずに[Map Editor] (マップエディター)を閉じた場合、ルートモジュールが自動的にループモジュールとして設定されます。

サブモジュールまたは属性をXMLツリー構造に追加する方法

XMLツリー構造ビューでは、必要に応じて手動でサブモジュールまたは属性をルートまたは任意の既存のモジュールに追加できます。

このいずれかの操作を実行するには、次のようにします。

  1. 編集の必要なXMLツリーで、サブモジュールまたはその下の属性を追加する必要があるモジュールを右クリックして、目的に応じて[Create Sub-Element] (サブモジュールの作成)または[Create Attribute] (属性の作成)を選択します。

  2. ポップアップの[Create New Element] (モジュールの新規作成)ウィザードで、追加するサブモジュールまたは属性に使用する名前を入力します。

  3. [OK]をクリックして、この作成を確定します。新しいサブモジュールまたは属性は、編集中のXMLツリー構造に表示されます。

XMLツリー構造からモジュールまたは属性を削除する方法

構築されたXMLツリーから、モジュールまたは属性を削除する必要がある場合があります。次の手順を実行します。

  1. 編集の必要なXMLツリーで、削除する必要があるモジュールまたは属性を右クリックします。

  2. ポップアップコンテキストメニューで、[Delete](削除)を選択します。

    これで、選択されたモジュールまたは属性は、その下に付属するすべてのサブモジュールまたは属性も含めて削除されました。

ネームスペースを管理する方法

必要に応じて、作成された入力または出力データフローのXMLツリーで各モジュールのネームスペースを設定または編集できます。

ネームスペースの定義

次の手順を実行します。

  1. 編集の必要な入力または出力データフローのXMLツリーで、ネームスペースを定義する必要があるモジュールを右クリックします。たとえば、出力フローのCustomer XMLツリーで、ルートのネームスペースを設定する必要があります。

  2. ポップアップコンテキストメニューで、[Set a namespace](ネームスペースの設定)を選択します。[Namespace dialog] (ネームスペースダイアログ)ウィザードが表示されます。

  3. このウィザードで、使用するURIを入力します。

  4. 編集するネームスペースのプレフィックスを設定する必要がある場合、このウィザードで[Prefix] (プレフィックス)チェックボックスをオンにして、必要なプレフィックスを入力します。この例では、チェックボックスをオンにしてxhtmlと入力しています。

  5. [OK]をクリックして、この定義を確定します。

ネームスペースのデフォルト値の変更

次の手順を実行します。

  1. 編集の必要なネームスペースが属するXMLツリーで、ネームスペースを右クリックしてコンテキストメニューを開きます。

  2. このメニューで、[Set A Fixed Prefix] (固定プレフィックスの設定)を選択して該当のウィザードを開きます。

  3. このウィザードで、必要な新しいデフォルト値を入力します。

  4. [OK]をクリックして、この変更を確定します。

ネームスペースの削除

次の手順を実行します。

  1. 編集の必要なネームスペースが属するXMLツリーで、ネームスペースを右クリックしてコンテキストメニューを開きます。

  2. このメニューから[Delete] (削除)をクリックして削除を確定します。

出力データをグループ化する方法

tXMLMap コンポーネントでは、グループモジュールを使用して、特定のグループ条件に応じて出力データをグループ化します。これにより、グループモジュールと同じ条件に一致するモジュールをラッピングできます。

グループモジュールを設定するには、次の2つの制約を考慮する必要があります。

  1. ルートノードはグループモジュールとして設定できません。

  2. グループモジュールはループモジュールの親である必要があります。

注記

グループモジュールを設定するオプションは、ループモジュールが設定されるまで表示されません。このオプションは、モジュールをグループモジュールとして設定できない場合も非表示になります。

グループモジュールが設定されると、ループモジュールを除くすべてのサブモジュールは、出力データをグループ化する条件として使用されます。

グループモジュールを最適化するため、XMLツリービューでは注意深く設計する必要があります。モジュールをグループ化する方法の詳細は、Talend Open Studioコンポーネント Reference Guide』tXMLMapのセクションを参照してください。

注記

tXMLMapでは、XMLツリー構造でデータを分類するグループモジュールおよび集約モジュールが提供されています。XMLデータフローの行を処理する場合、動作の違いは次のようになります。

  • グループモジュールでは、常にデータが単一フローで処理されます。

  • 集約モジュールでは、フローが完全なXMLフローに分割されて処理されます。

グループモジュールの設定

グループモジュールを設定するには、次のようにします。

  1. [Map editor] (マップエディター)の出力側のXMLツリービューで、グループモジュールとして設定する必要があるモジュールを右クリックします。

  2. コンテキストメニューから[As group element] (グループモジュール)を選択します。

    これで、この選択したモジュールはグループモジュールになりました。次の図は、グループモジュールを含むXMLツリーの例を示します。

定義済みグループモジュールの削除

定義済みグループモジュールを削除するには、次のようにします。

  1. [Map editor] (マップエディター)の出力側のXMLツリービューで、[group element] (グループモジュール)として定義されているモジュールを右クリックします。

  2. コンテキストメニューから[Remove group element] (グループモジュールを削除)を選択します。

    これで定義済みグループモジュールは削除されました。

出力データを集約する方法

tXMLMapでは、出力XMLツリーのXMLデータをクラスに分類するため、必要とされる数の集約モジュールを定義できます。次にこのコンポーネントにより、それぞれが完全なXMLフローとなるクラスが出力されます。

  1. モジュールを集約モジュールとして定義するには、[Map editor] (マップエディター)の出力側のXMLツリービューで目的のモジュールを右クリックして、コンテキストメニューから[As aggregate element] (集約モジュール)を選択します。

    これで、このモジュールは集約モジュールになりました。[aggregate : true] (集約:真)という赤い文字が追加されます。次の図に例を示します。

  2. 集約モジュールの定義を削除するには、そのモジュールを右クリックして、コンテキストメニューから[Remove aggregate element] (集約モジュールの削除)を選択します。

注記

モジュールを集約モジュールとして定義するには、このモジュールに子モジュールがなく、[All in one] (オールインワン)フィーチャーが無効になっていることを確認してください。[As aggregate element] (集約モジュールとして使用)オプションは、この両方の条件が満たされるまでコンテキストメニューで使用できません。[All in one] (オールインワン)フィーチャーの詳細は、モジュールを1つのドキュメントに出力する方法を参照してください。

tXMLMapで集約モジュールを使用する方法の詳細は、『Talend Open Studioコンポーネント Reference Guide』を参照してください。

注記

tXMLMapでは、XMLツリー構造のデータを分類するためgroup element (グループモジュール)とaggregate element (集約モジュール)が提供されています。1行のデータを処理する場合(1つの完全なXMLフロー)、動作の違いは次のとおりです。

  • group element (グループモジュール)では、常にデータを単一フローで処理します。

  • aggregate element (集約モジュール)では、フローが完全なXMLフローに分割されて処理されます。