XML を新しいスキーマに変換

www.altova.com このトピックを印刷 前のページ 1つ上のレベル 次のページ

ホーム >  チュートリアル >

XML を新しいスキーマに変換

このチュートリアルは、MapForce 開発環境の基本を学びつつ、2つの XML ファイル間のデータの変換方法について説明します。両方の XML ファイルはブックのリストを保管しますが、その要素は、異なる方法により名前を付けられ整理されます。(すなわち、2つのファイルは異なるスキーマを持ちます)。

Tutorial_Convert_XML_to_New_Schema

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

下にリストされるコードは、データソースとして使用されるファイルからのサンプルのデータを表示しています (簡略化するために、 XML と名前空間宣言は省略されています)。

 

<books>
  <book id="1">
    <author>Mark Twain</author>
    <title>The Adventures of Tom Sawyer</title>
    <category>Fiction</category>
    <year>1876</year>
  </book>
  <book id="2">
    <author>Franz Kafka</author>
    <title>The Metamorphosis</title>
    <category>Fiction</category>
    <year>1912</year>
  </book>
</books>

books.xml

ターゲット (デスティネーション) ファイルではデータは以下のように表示されます:

 

<library>
  <last_updated>2015-06-02T16:26:55+02:00</last_updated>
  <publication>
    <id>1</id>
    <author>Mark Twain</author>
    <title>The Adventures of Tom Sawyer</title>
    <genre>Fiction</genre>
    <publish_year>1876</publish_year>
  </publication>
  <publication>
    <id>2</id>
    <author>Franz Kafka</author>
    <title>The Metamorphosis</title>
    <genre>Fiction</genre>
    <publish_year>1912</publish_year>
  </publication>
</library>

library.xml

ソースとターゲット XML 内の一部の要素の名前は、同じではありません。このセクションの目的は、ソースファイル(<author>、 <title>、 <category>、 <year>) 内の同等の要素から、ターゲットファイルの <author>、<title>、 <genre><publish_year> 要素を表示することです。ソース XML ファイル内の属性 id は、ターゲット XML ファイル内の <id> 要素にマップされる必要があります。最後に、ターゲットファイルの<last_updated> 要素をファイルが最後に更新された日付と時刻として表示するように設定する必要があります。

 

必要とされるデータ変換を行うには、 以下のステップを行います。

 

ステップ 1: XSLT2 を変換言語として選択する

これを以下の方法で行うことができます:

「XSLT2」 ( toolbar_xslt2 ) ツールバーボタンをクリックします。
「出力」 メニューから 「XSLT 2.0」 をクリックします。

 

ステップ 2: ソース XML ファイルをマッピングに追加する

このマッピングのためのソース XML ファイルは、 は、以下のパスで見つけることができます: <マイ ドキュメント>\Altova\MapForce2019\MapForceExamples\Tutorial\books.xml。 ファイルを以下の方法でマッピングに追加することができます:

「XML スキーマ / ファイルの挿入」 ( ic-new-schema ) ツールバーボタンをクリックします。
「挿入」 メニューから「XML スキーマ/ファイル」 をクリックします。
XML ファイルをウィンドウエクスプローラーからマッピングエリアにドラッグします。

 

ファイルはマッピングエリアに追加され、 構造を一見することができます。MapForce では、この構造はマッピングコンポーネントとして知られており、 または単純に コンポーネント. コンポーネント内の要素を、折りたたむ ( gui_collapse ) と 展開する アイコン ( gui_expand ) をクリックすることにより、 または数字キーパッドの 「+」 「-」 キーを押すことによりすることにより拡張することができます。

tut-01-BAS

マッピング コンポーネント

マッピングペイン内でコンポーネントを移動するには、 コンポーネントヘッダーをクリックして、 マウスを新しい場所にドラッグします。コンポーネントのサイズを調整するには、 コンポーネントの角をドラッグします ic-bestfit。 角をダブルクリックすると MapForce は自動的にサイズを調整します。

 

トップレベルノード component_file は、ファイル名を表します。このサンプルの場合、 は、 XML インスタンスファイルの名前を表示します。構成内の、 XML 要素は component_element アイコンにより表示されており、 XML 属性は component_attribute アイコンにより表示されています。

 

コンポーネントの両側に表示されている小さな三角形は、 (左側にある場合)データ入力を、(右側にある場合) データ出力を表します。MapForce では、 それぞれ入力コネクタ、出力コネクタと呼ばれます。

 

ステップ 3: ターゲット XML スキーマをマッピングに追加する

ターゲット XML を生成するには、 既存の XML スキーマファイルを使用します。実生活のシナリオでは、 このファイルは第三者パーティから提供される場合があり、 または XMLSpy などのツールを使用してユーザーが作成することができます。XML データのためのスキーマファイルが存在しない場合、 MapForce は伴うスキーマまたはスキーマレファレンスを持たない XML ファイルをマッピングに追加すると、スキーマを生成するようにプロンプトします。

 

このサンプルでは、 以下で見つけることのできる既存のスキーマファイルを使用します: <マイ ドキュメント>\Altova\MapForce2019\MapForceExamples\Tutorial\library.xsd。 マッピングに追加するには、 ソース XML ファイルと同様のステップを踏んでください。 (「XML スキーマ / ファイルの挿入」 ( ic-new-schema ) ツールバーボタンをクリックします)。 MapForce にインスタンスファイルを提供するようにプロンプトされると、「スキップ」をクリックします。

dlg_xml_supply_instance

 

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

tut-01-02-BAS

 

ステップ 4: 接続の作成

ソース XML ファイルのそれぞれの <book> 内で、ターゲット XML ファイル内に新しい <publication> を作成します。ですから、ソースコンポーネント内の <book> 要素とターゲットコンポーネント内の <publication> 要素を接続します。マッピング接続を作成するには、 <book> 要素の右の出力コネクタ(小さな三角形)をクリックし、ターゲット内の <publication> 要素の入力コネクタにドラッグします。

 

これを行うと、 MapForce は自動的に、ターゲットファイル内に同じ名前を持つソースファイル内の <book> の子の全ての要素を接続します。ですから、4つの接続が同時に作成されます。この振る舞いは 「子要素の自動接続」 と呼ばれ、必要に応じて無効化またはカスタム化することができます。

tut-01-03-BAS

「マッチする子を自動的に接続する」 の振る舞いを以下の方法で有効化または無効化することができます:

 

「子の自動接続の切り替え」 ( ic-conn-child ) ツールバーボタンをクリックします。
「接続」 メニューから「マッチする子を自動的に接続する」をクリックします。

 

ターゲットコンポーネントの入力コネクタの一部が、 MapForce により、必須アイテムを表示する、オレンジ色にハイライトされていることに注意してください。XML ファイルの妥当性を確認するために、 必須アイテムの値を以下のように提供してください:

 

ターゲット内の <genre> 要素とソース内の <category> 要素を接続する。
ターゲット内の <publish_year> 要素とソース内の <year> 要素を接続する。

 

最後に、 <last_updated> 要素への値を提供する必要があります。入力コネクタにマウスをポイントすると、要素は xs:dateTime 型であることが表示されます。ヒントを表示するには、 「ヒントの表示」 ( ic-show-lib-info ) ツールバーボタンが有効化されている必要があることに注意してください。

tut-01-05-BAS

「データ型の表示」 ( ic-show-types ) ツールバーボタンをクリックすることにより、常に各アイテムのデータ型を表示することができます。

現在の日時 (すなわち、 xs:dateTime の値) を関 XSLT 数の日付と時刻で取得することができます。マッピングに対する XSLT 関数を検索するには、ライブラリウィンドウ の下の部分にあるテキストボックスに「date」を入力します。または、マッピングの空のエリアをダブルクリックし、 「current-date」 を入力します。

tut-01-06-BAS

上に表示されるように、 マウスを関数の結果の部分にかざすと、詳細が表示されます。ヒントを表示するには、 「ヒントの表示」 ( ic-show-lib-info ) ツールバーボタンが有効化されていることを確認してください。

マッピングに関数を追加するには、 関数をマッピングペインにドラッグし、 <last_updated> 要素の出力を入力に接続します。

tut-01-07-BAS

(books.xsd スキーマを持つ) books.xml インスタンスファイルのデータから(library.xsd スキーマを持つ) library.xml ファイル へデータを変換する MapForce マッピングデザイン(または 「マッピング」) を作成することに成功しました。 各コンポーネントのヘッダーをダブルクリックすると、コンポーネント設定ダイアログボックス内のこれらと他の設定を確認することができます。

tut-01-10-BAS

ソースのためのコンポーネント設定

tut-01-11-BAS

ターゲットのコンポーネント設定

 

ステップ 5: マッピングを検証し保存する

マッピングの検証は、マッピングを実行する前に、マッピングエラーの可能性を確認し修正するための任意のステップです。 マッピングが妥当であるか確認するため、以下を行います:

 

「ファイル」 メニューから「マッピングの検証」をクリックします。
「検証」 ( ic-val-mapping ) ツールバーボタンをクリックします。

 

「メッセージ」 ウィンドウ は、検証の結果を表示します:

gui_messages_window

メッセージウィンドウ

この時点で、 ファイルにマッピングを保存します。マッピングを保存するには、以下を行います:

 

「ファイル」 メニューから「保存」 をクリックします。
「保存」 ( toolbar_btn_save ) ツールバーボタンをクリックします。

 

このチュートリアルで作成されたマッピングは以下で検索することができます: <マイ ドキュメント>\Altova\MapForce2019\MapForceExamples\Tutorial\\BooksToLibrary.mfd。 ですから、 これから先、自分で作成したマッピングを継続して使用するか、 または BooksToLibrary.mfd ファイルを使用することができます。

 

ステップ 6: マッピングの結果のプレビュー

マッピングの結果の結果を直接で MapForce でプレビューすることができます。これを行うには、 マッピングペインの下にある、「出力」 ボタンをクリックします。MapForce は、変換を実行し、マッピングの結果を 「出力」 ペインに表示します。

 

tut-01-08-BAS

出力ペイン

MapForce 内で変換の結果を確認することができます。

 

デフォルトでは、「出力」 ペイン内にプレビューのために表示されたファイルはディスクに書き込まれません。 その代わり、 MapForce は、一時ファイルを作成します。「出力」 ペインに表示されたファイルをディスクに保存するには、 メニューコマンド 「出力 | 出力ファイルの保存」 を選択するか、または 「生成された出力を保存 ( ic-save-sel-string ) ツールバーボタンをクリックします。

 

MapForce が一時ファイルではなく最終のファイルに直接的に出力を書き込むように構成するには、 「ツール | オプション | 全般」 に移動し、「最終出力ファイルにファイルを書き込む」チェックボックスを選択します。チュートリアルを実行中は、故意にではなくもとのチュートリアルファイルを上書きする可能性があるため、このオプションを有効化することは奨励されません。

 

変換を行う 生成された XSLT コードもプレビューすることができます。コードをプレビューするには、マッピングペインの下にある、「XSLT2」 ボタンをクリックします。

tut-01-09-BAS

XSLT2 ペイン

XSLT2 コードを生成しファイルに保存するには、メニューアイテム 「ファイル | コード生成 | XSLT 2.0」 を選択します。プロンプトされると、生成されたコードが保存されるフォルダーを選択してください。コード生成が完了すると、デスティネーションファイルは、以下の2つのファイルを含みます:

 

1.ターゲットスキーマにちなんで名づけられた XSLT 変換ファイル (このサンプルでは、 MappingMaptolibrary.xslt)。
2.DoTransform.bat ファイル。 DoTransform.bat ファイルにより RaptorXML Server 内での XSLT 変換の実行を有効化することができます。(詳細に関しては、http://www.altova.com/ja/raptorxml.html を参照してください)。

(C) 2019 Altova GmbH