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

Altova MapForce 2020 Enterprise Edition

このチュートリアルは、複数のソース XML ファイルからデータを読み込み、同じ変換内で複数のターゲットファイルに書き込む方法を説明します。このテクニックを説明するために、次の目的を持つマッピングを作成します:

 

1.同じディレクトリ内の複数の XML ファイルからのデータを読み込む。

2.新規の XML スキーマに各ファイルを変換する。

3.各ソース XML ファイルのために、 新しいスキーマの下で新規ターゲットファイルを生成する。

4.生成されたファイルから XML と名前空間宣言を削除する。

 

Tutorial_Process_and_Generate_Multiple_Files

データ変換の抽象的なモデル

3つのソース XML ファイルをサンプルとして使用します。ファイルの場所は <マイ ドキュメント>\Altova\MapForce2020\MapForceExamples\Tutorial\ フォルダーで確認することができ bookentry1.xmlbookentry2.xml, と bookentry3.xml という名前が付けられています。これらのファイルはそれぞれ単一のブックを保管します。

 

<?xml version="1.0" encoding="UTF-8"?>
<books xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="books.xsd">
  <book id="1">
    <author>Mark Twain</author>
    <title>The Adventures of Tom Sawyer</title>
    <category>Fiction</category>
    <year>1876</year>
  </book>
</books>

bookentry1.xml

<?xml version="1.0" encoding="UTF-8"?>
<books xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="books.xsd">
  <book id="2">
    <author>Franz Kafka</author>
    <title>The Metamorphosis</title>
    <category>Fiction</category>
    <year>1912</year>
  </book>
</books>

bookentry2.xml

<?xml version="1.0" encoding="UTF-8"?>
<books xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="books.xsd">
  <book id="3">
    <author>Herman Melville</author>
    <title>Moby Dick</title>
    <category>Fiction</category>
    <year>1851</year>
  </book>
</books>

bookentry3.xml

ソース XML ファイルは次のフォルダーで使用することのできる books.xsd スキーマを使用します: <マイ ドキュメント>\Altova\MapForce2020\MapForceExamples\Tutorial\。 ソースファイルを新規 XML スキーマに変換するには、(同じフォルダーで見つけることのできる) library.xsd  スキーマを使用します。変換の後、 マッピングは3つのファイルを新しいスキーマに従い生成します ( 下のコードリストを参照)。生成されたファイルが以下のようになるよう、マッピングを構成します: publication1.xml、 publication2.xml、と publication3.xml。XML 宣言と名前空間が削除されなければならない点に注意してください。

 

<library>
  <publication>
    <id>1</id>
    <author>Mark Twain</author>
    <title>The Adventures of Tom Sawyer</title>
    <genre>Fiction</genre>
    <publish_year>1876</publish_year>
  </publication>
</library>

publication1.xml

<library>
  <publication>
    <id>2</id>
    <author>Franz Kafka</author>
    <title>The Metamorphosis</title>
    <genre>Fiction</genre>
    <publish_year>1912</publish_year>
  </publication>
</library>

publication2.xml

<library>
  <publication>
    <id>3</id>
    <author>Herman Melville</author>
    <title>Moby Dick</title>
    <genre>Fiction</genre>
    <publish_year>1851</publish_year>
  </publication>
</library>

publication3.xml

チュートリアルの目的を達成するために、次のステップを踏みます.

 

ステップ 1: マッピングデザインファイルの準備

このチュートリアルは、開始のポイントとして <マイ ドキュメント>\Altova\MapForce2020\MapForceExamples\Tutorial\ フォルダーから BooksToLibrary.mfd マッピングを使用しています。すでに XML を新しいスキーマに変換する チュートリアル内でこのマッピングをデザインしています。開始するには、 MapForce で BooksToLibrary.mfd ファイルを開き、新しい名前で同じフォルダーに保存します。

 

複数のファイルを参照するため、 <マイ ドキュメント>\Altova\MapForce2020\MapForceExamples\Tutorial\ フォルダー内に新しいマッピングが保存されることを確認してください。

mfdBooksToLibrary-BAS

BooksToLibrary.mfd (MapForce Basic Edition)

 

ステップ 2: 入力を構成する

MapForce に複数の XML インスタンスファイルを処理するように命令するには、 ソースコンポーネントのヘッダーをダブルクリックします。コンポーネント設定ダイアログボックス内に入力ファイルとして bookentry*.xml を入力します。

tut-02-01-BAS

コンポーネント設定 ダイアログボックス

ファイル名内のアスタリスク ( * ) ワイルドカード文字は、マッピング入力に bookentry- プレフィックスを伴う全てのファイルを使用するように命令します。パスは相対的であるため、 MapForce はマッピングファイルと同じディレクトリ内の全ての bookentry- ファイルを検索します。マッピングファイル. * ワイルドカード文字を使用しているため、必要であれば、絶対パスを入力することもできます。

 

ステップ 3: 出力を構成する

各出力ファイルのファイル名を作成するには、 concat 関数 を使用します。この関数は引数に与えられた全ての値を連結します。

 

concat 関数を使用してファイル名を作成する:

 

1.concat 関数 を ライブラリウィンドウで検索し、 マッピングエリアにドラッグします。デフォルトでは、 この 関数はパラメータが2つあるマッピングに追加されます。しかし、必要であれば新しいパラメーターを追加することができます。関数コンポーネント内の 「パラメーターの追加」 ( gui_add_function_parameter ) シンボルをクリックして、3番目のパラメーターを追加します。「パラメーターの削除」 ( gui_delete_function_parameter ) シンボルをクリックするとパラメーターは削除されることに注意してください。

tut-02-02-BAS

2.定数を入力するには、 (「挿入」 メニューから「定数」をクリックします)。 値を提供するようにプロンプトされると、 「publication」 を入力して、 文字列 オプション を変更しないでそのままにしておきます。

tut-02-03-BAS

3.concat 関数のvalue1 と定数をと接続します。

tut-02-04-BAS

4.ソースコンポーネントの id 属性を concat 関数の value2 と接続します。

tut-02-05-BAS

5.ライブラリウィンドウ内で get-fileext 関数 を検索し、 マッピングエリアにドラッグします。ソースコンポーネント(File: books.xml) のトップノードからこの関数のfilepath パラメータへ接続を作成します。get-fileext 関数の結果から concat 関数の value3 への接続を作成します。これを行うことにより、ソースファイル名から拡張子の部分(この場合、 .xml)を抽出することができます。

tut-02-06-BAS

concat 関数のパラメーターに、連結されると生成されるファイル名 (例: publication1.xml)を作成する3つの値を提供しました:

 

パート

サンプル

定数 「publication」 は定数文字列の値 「publication」 を与えます。

publication

ソース XML ファイルの属性 id は、各ファイルのための一意の識別子の値を与えます。これは全てのファイルが同じ名前で生成されないようにするためです。

1

get-fileext 関数 は、生成されるファイルの拡張子を返します。

.xml

 

MapForce にマッピングが実行される際に実際にファイル名を作成するように命令することができます。これを行うには、 「ファイル」 ( btn_file ) をクリックする、または  ターゲットコンポーネントの「ファイル/文字列」 ( btn_file_string ) ボタンから 「マッピングから与えられた動的なファイル名を使用する」 を選択します

tut-02-07-ENT

 

マッピングにより与えられた名前を伴う MapForce にインスタンスファイルを動的に生成するように命令しました。 この特別な例では、concat 関数により名前が作成されました。ですから、 concat 関数の結果とターゲットコンポーネントの ファイル: <動的> ノードを接続します。

tut-02-08-BAS

この時点でターゲットコンポーネントヘッダーをダブルクリックすると、 「入力 XML ファイル」「出力 XML ファイル」 テキストボックスが無効化されており、値が <マッピングにより与えられたファイル名> を示していることに気がつくはずです。

tut-02-09-BAS

 

これは、インスタンスファイル名を動的にマッピングから提供したことを示し、コンポーネント設定内で定義することは関連性がありません。

 

最後に、ターゲットから XML 名前空間とスキーマ宣言を削除する必要があります。これを達成するには、コンポーネント設定ダイアログボックスの 「スキーマ /DTD レファレンスの追加...」「XML 宣言の書き込み」 チェックボックスから選択を解除します。

tut-02-10-BAS

 

結果と生成されたファイル名を確認するために、マッピングを実行します。このマッピングは複数の出力ファイルを生成します。出力ペインの左上の左と右ボタンを使用して出力ファイル全体を移動することができます。または 横にあるドロップダウンリストからファイルを選択します。

 

tut-02-11-BAS

(C) 2019 Altova GmbH