JET 変換オーサリング

Java™ エミッター・テンプレート (JET) ツールを使用してモデルからテキストへの変換を作成し、その変換を使用してデザイン・パターンの適用を自動化できます。 デザイン・パターンは、繰り返し発生する問題に対する実証済みのソリューションです。 これらのパターンの適用を自動化するツールを、パターン実装と呼びます。 JET 変換の作成は、JET を使用してパターン実装の作成を容易にするプロセスであり、JET 変換オーサリングとも呼ばれます。

デザイン・パターンおよびパターン実装

デザイン・パターンとは、繰り返し発生するソフトウェア開発上の問題に対する標準的なソリューションを記述したものであり、多くの状況に応用可能なソリューションが記されています。 デザイン・パターンを使用してデザインを再利用することにより、ソリューションの品質および信頼性 が高まります。

パターンの仕様はパターンが解決する問題、提案されているソリューションが適切とされる状況を記述して、ソリューションの抽象記述を提供します。この抽象化を特定の問題に適用するプロセスをパターン・アプリケーションと呼びます。パターン応用を支援するツールを、パターン実装と呼びます。 パターン実装を使用して、パターン仕様に記された抽象に関連するパターン応用を記述できます。 パターン実装は、ソリューションを構成するファイル、フォルダー、およびプロジェクトなどの成果物を生成するために使用できます。 デザイン・パターンによっては、生成される成果物に追加のロジックを指定できる場合もあります。

JET および JET 変換オーサリング機能では、パターン実装がサポートされています。 パターン実装では、入力を構造化モデルで記述し、生成されるパターン・ソリューションはテキスト・ファイルで構成されます。 これらのパターン実装は、モデルからテキストへの変換とも呼ばれます。

JET の「モデルからテキストへの変換」では、 Extensible Markup Language (XML) 文書や Eclipse モデリング・フレームワーク (EMF) モデルの入力を受け入れ、 Eclipse ファイル、フォルダー、およびプロジェクトの出力を生成します。 JET 変換で生成される入出力のタイプは、JET Software Development Kit (SDK) を使用して拡張できます。

パターン実装を開発する際のワークフロー

パターン実装を開発する際に実行する手順の概要は、次のとおりです。
  1. 繰り返し発生する問題を特定します。
  2. 見本とも呼ばれるリファレンス・ソリューションを実装します。他の開発者が、これをモデル・ソリューションとしてコピーしたり改良したりすることになります。
  3. リファレンス・ソリューションを分析し、JET 変換オーサリング機能を使用してモデルからテキストへの変換を作成します。 このプロセスを見本分析と言います。
  4. (オプション) JET 変換を、他の変換、ユーザー・インターフェース、またはその両方と統合します。
これらのステップのうち、最も時間を要するのがリファレンス・ソリューションの実装です。 見本分析の目的は、リファレンス・ソリューションを識別して実装した後に、パターン実装の実動を より効果的にすることです。

JET 変換オーサリングの前提条件

JET 変換を作成するには、 変換オーサリング・コンポーネントをインストールする必要があります。

JET のモデルからテキストへの変換をオーサリングする際のワークフロー

JET 変換オーサリング機能を使用してモデルからテキストへの変換を作成する手順の 概要は、次のとおりです。

  1. 1 つ以上の見本プロジェクトを指定した JET 変換を作成します。
  2. 変換入力の構造を記述した入力スキーマを作成します。 変換入力の構造は、デザイン・パターンの抽象を反映したものになります。
  3. 変換入力スキーマと関連付けられたアクションを作成します。 これらのアクションは変換アクション、または JET アクションと呼ばれ、 ソリューションのプロジェクト、フォルダー、およびファイルを作成します。 JET アクションを作成したら、変換オーサリング機能を使用して JET テンプレートを更新し、変換モデルに加えた変更内容を反映する必要があります。
  4. 各ファイルのアクションと関連付けられた JET テンプレートを編集し、その変換入力に固有の内容を生成します。

変換入力スキーマと JET アクションは変換モデルと総称され、エディター領域に表示されます。 大部分の JET 変換は、必要に応じて、ステップ 23、および 4 を繰り返して作成します。

変換入力スキーマ

変換入力スキーマは、変換の入力構造を記述するものです。 入力スキーマは、要素タイプおよび属性の階層として表示されます。

JET では、非常に複雑な入力スキーマを持つモデルを読み取ることができますが、 オーサリング・プロセスを容易にするために、JET 変換のオーサリング機能は、基本的なスキーマの定義に制限されています。

JET 変換のオーサリング機能では、以下の特性を持つ入力スキーマをサポートしています。
  • 階層を持ち、1 つのルート要素がある。
  • モデル内の各要素に、文字列値を持つゼロ以上の属性を含めることができる。
  • モデル内の各要素に、ゼロ以上の子要素を含めることができる。

    JET 変換オーサリング機能で基数を指定することはできません。 要素全体の包含は、ゼロから多です。 例えば、入力スキーマで、本に章があることは指定できますが、本に含まれている章の数を指定することはできません。

プロジェクトを更新して JET テンプレートを生成すると、以下の 2 つの入力スキーマ実装が作成されます。
  • schema.xsd: この XML スキーマ定義 (XSD) ファイルは、JET 変換プロジェクトに作成されます。 このファイルを使用して、変換の入力構造に準拠する XML 文書を作成できます。
  • input.ecore: このファイルは Eclipse モデリング・フレームワーク (EMF) メタモデルです。Ecore ファイルとも呼びます。
Eclipse モデリング・フレームワークを使用して、変換入力用の Java API を生成できます。 この API を使用して、変換入力を作成する Java コードを作成できます。 次に JET API を使用して、JET 変換を呼び出します。 ここで生成された Java API は、 モデルからモデルへのマッピング変換でも使用できます。

例えば、JET 変換を呼び出す、UML から JET への変換入力マッピングを作成できます。 このマッピングにより、基本的な入力スキーマを使用した JET 変換を開発できるようになりますが、 変換のユーザーは、統一モデリング言語 (UML) で入力を記述できるようになります。

注: マッピング内のソース・モデルとして UML メタモデルを指定することはできません。

変換アクション

入力スキーマにデザイン・パターンの抽象を取り込む際には、 このスキーマからリファレンス・ソリューション (見本とも呼ぶ) の成果物を派生させる方法を決定しなければなりません。 変換アクション (JET アクションとも呼ぶ) は、プロジェクト、フォルダー、およびファイルを作成します。 JET 変換の実行時には、変換入力にそのタイプの要素が見つかるたびに、JET アクションが呼び出されます。

JET 変換のオーサリング機能では、以下の JET アクションをサポートしています。
  • ファイル・アクション
  • フォルダー・アクション
  • プロジェクト・アクション
見本成果物に対応した JET アクションを作成します。 以下の何通りかの方法で、JET アクションと見本成果物を一致させることができます。
  • 成果物を生成する JET アクションを作成する。
  • 条件付き JET アクションを作成する。
  • 成果物と既存のアクションを関連付ける。
  • フォルダーやプロジェクトを作成するアクションに包含される成果物を生成する JET アクションを作成する。
  • 変換によって特定タイプの成果物が生成されない場合には、エディター領域から成果物を削除する。 削除しても、物理ファイル、物理フォルダー、または物理プロジェクトは影響を受けません。
  • 成果物を無視する。 この方法を選択すると、エディター領域に成果物が残るため、 無視アクションを元に戻したり、成果物と変換入力スキーマを関連付けたりすることができます。

各 JET アクションには、アクションの動作を制御するアクション・パラメーターがあります。 これらのパラメーターは、JET アクションを作成する見本成果物を再作成する値に設定されます。 通常は、変換入力から取り出された値を組み込むように、これらのパラメーター値をカスタマイズします。

JET ファイル・アクションは、JET テンプレートを評価することによりファイル・コンテンツを作成します。 プロジェクトの更新時にこれらのテンプレートが存在しない場合は、その時点で作成されます。 テンプレートのイニシャル・コンテンツは、対応するファイル・アクションの作成時に指定した見本ファイルのコンテンツと同じです。 生成されたテンプレートを変更して、変換入力用にカスタマイズされたコンテンツを生成できます。

変換モデル内の見本成果物について検証を行う際に、変換によって特定のタイプの成果物が生成されない場合は、エディター領域から成果物を削除することができます。削除しても、物理ファイル、物理フォルダー、または物理プロジェクトは影響を受けません。 また、成果物を無視することもできます。成果物を無視すると、エディター領域に成果物が残るため、無視アクションを元に戻したり、成果物を変換入力スキーマと関連付けたりすることができます。

JET のアクションおよびテンプレートのカスタマイズ

変換作成時に生成された JET のアクションおよびテンプレートは、見本成果物のコピーです。 通常は、アクション・パラメーターおよびテンプレートのコンテンツを変更して、変換入力に値を指定します。

JET アクションのパラメーター値を編集する際には、選択したテキストを、変換入力への参照に置き換えることができます。

変換入力の参照は、XML Path (XPath) 式の形式になります。 World Wide Web Consortium の標準である XPath は XML 文書用に設計されていますが、 JET では、この標準を修正して、複数の入力モデル・タイプをサポートしています。

アクション・パラメーター値に組み込む XPath 式は、中括弧 ({ }) で囲みます。 変数をモデル参照に置換すると、これらの式は、{$variable/@attribute} の形式で表示されます。 ここで、variable は入力モデル要素の名前、attribute は要素内の属性の名前です。 それぞれの入力モデル要素に、関連付けられた XPath 変数名が付けられています。 デフォルトのオーサリング環境では、変数名と要素名の同期が保たれます。

オーサリング機能では基本的な XPath 式が作成されますが、JET では、XPath 1.0 仕様の総合的な実装が提供されます。 JET には、変換入力からの値を取り扱うことのできる XPath 関数一式が含まれています。 例えば、XPath 式 {lower-case($person/@name)} は、入力参照 $person/@name を小文字に変換します。

XPath 関数は、XPath 式の使用が許可されているすべて場所で使用できます。

JET テンプレートの置き換え可能テキスト

JET 作成者エディターでは、 モデル参照に置き換えることができるテンプレート・テキスト上にマーカーを表示します。 次の場所にある JET の文字飾りを見ると、どのテンプレートに JET マーカーが含まれているか識別できます。
  • エディター領域内の JET アクション上
  • 「プロジェクト・エクスプローラー」ビューまたは「パッケージ・エクスプローラー」ビュー、またはナビゲーター・ビュー内の、JET テンプレート・ファイル上

JET マーカーについての詳細情報を「問題」ビューで確認してください。

派生属性

派生属性を作成すると、繰り返し計算しなくても済むようになります。 派生属性とは、変換入力として指定された属性ではなく、計算によって生成された入力スキーマ要素の属性のことです。 この計算では、入力スキーマの他の要素や属性を参照できます。 派生属性は、変換マッピング・モデルの編集時や、変換モデル参照を挿入する任意のタイミングで、直接作成できます。

JET 変換の実装および入力モデルのトラバーサル

JET 変換を作成する際に、プロジェクトの更新時に、派生属性を算出し JET アクションを実行するコード生成されます。 このコードは、templates/main.jet という名前の、変換のメイン・テンプレートにあります。 このメイン・テンプレートでは、派生属性を算出し、変換入力の深さ優先トラバーサルを 2 回完了して、JET アクションを呼び出します。 変換入力の要素ごとに、以下のステップが実行されます。
  1. 変換により、現在の入力要素を表す XPath 変数が作成されます。 変数名は、対応する入力スキーマ要素のプロパティーから派生します。
  2. 変換入力の最初のトラバーサルで、変換によって派生属性式が算出され、保管されます。 2 回目のトラバーサルでは、変換によって JET アクションが呼び出されます。
  3. 変換は、変換入力の子要素を処理します。

変換入力のトラバーサル時、派生属性の計算、および入力スキーマ要素に関連付けられた JET アクション・パラメーターの計算では、 現行要素を参照する XPath 変数、および祖先要素に属する各変数を参照できます。

JET テンプレートのカスタマイズ

JET 変換作成の最後のステップは、「プロジェクトの更新」コマンドの実行により生成される JET テンプレートを編集することです。 このカスタマイズにより、変換入力に合わせてテンプレートを修正できます。 JET テンプレートの編集では、以下の 1 つ以上のステップを実行する場合があります。
  • テンプレート内のテキストを、変換入力への参照に置き換える: このアクションには、新規属性、派生属性、または新規入力スキーマ要素の作成などが含まれます。 変換の実行時、置換テキストは JET の c:get タグによって実装されます。
  • 反復コード・ブロックにテキストを追加する: このアクションにより、テキスト・ブロック、および変換入力に対する任意の参照が、 変換入力に基づいて複数回評価されます。 反復は、JET の c:iterate タグによって実装されます。
  • 条件ブロックにテキストを追加する: 変換入力内の特定の条件が true である場合、変換によって、条件コード・ブロック内のテキストが評価されます。 条件ブロックは、JET の c:if タグ (単一条件の場合) によって実装されます。 代替テキスト・セクションでは、c:choose、c:when、および c:otherwise タグを使用することもできます。

変換入力への参照に置き換えるテンプレート内テキストを特定しやすくするために、 指定したテキスト置換の検証が行われます。 テキスト・ストリングを変換入力への特定の参照に置き換えるたびに、このテキストが見本テキストとして変換入力モデル内に保管されます。 このテキストは、表示、追加、または除去できます。 このテキストは、JET 置換マーカーの作成にも使用されます。 このマーカーは、変換によって生成される JET テンプレート内のテキストに類似したテキストを強調表示します。 JET 置換マーカーは、Eclipse クイック・フィックス・メカニズムにより解決できます。 この機能を使用して、テキストを適切な JET タグに置き換えたり、 テキストへの変更が不要であるという理由でマーカーを無視したりできます。

JET 変換の JET 入力モデルの生成

UML モデルを、JET 変換の入力として使用できる JET 入力モデルに変換する、UML インターフェースおよびプロジェクト・インフラストラクチャーを作成できます。 この機能を使用すると、JET 変換への入力として機能する非グラフィカル・モデルをグラフィカルに表すことができます。 例えば、このインフラストラクチャーを作成して、JET をベースとする Java Bean パターンなどの非グラフィカル・モデル 用の UML インターフェースを作成することができます。

プロジェクト・インフラストラクチャーは、次の 1 つ以上の要素から構成されます。
  • モデルからモデルへのマッピング変換

    モデルからモデルへのマッピング変換では、UML モデルを JET 入力モデルに変換します。

  • UML プロファイル・プロジェクト

    このプロジェクトの UML プロファイルでは、モデルからモデルへの変換への入力として機能する、UML モデルのステレオタイプおよび拡張を定義します。 生成された UML プロファイル・プロジェクトは、UML プロファイル・ツールの機能と互換性のあるものになります。

  • Eclipse モデリング・フレームワーク (EMF) プロジェクト

    このプロジェクトには、生成された入力モデル用の Java アプリケーション・プログラミング・インターフェース (API) を含まれます。

  • Eclipse フィーチャー・プロジェクト

    このフィーチャー・プロジェクトは、生成済み JET 入力モデルを変換する、モデルからテキストへの JET 変換と、 生成された JET 入力モデル用の Java API を含む EMF プロジェクトを参照します。 Eclipse Deployable Feature のエクスポート機能を使用すると、このプロジェクトをエクスポートできます。


フィードバック