Upload
akira-tanaka
View
917
Download
0
Embed Size (px)
DESCRIPTION
Eclipse Modeling 勉強会(2013.02.22)で発表した QVT に関するスライド
Citation preview
EclipseのM2M変換
QVTo を中心として
田中 ビューファイブ LLC
アジェンダ
• MDA における M2M 変換の位置づけ • OMG M2M 標準 • Eclipse Modeling Project における M2M 実装 – QVT – ATL – Xtend 2.0
MDA における M2M 変換の位置づけ
• CIM -‐> PIM -‐> PSM !? – ComputaHon Independent Model (CIM) – PlaKorm Independent Model (PIM) – PlaKorm Specific Model (PSM)
CIM
becomes
M2T PIM PSM
M2M
M2M
refine refine refine
refine/refactor もM2M適用対象
OMG M2M 標準
• Meta Object Facility (MOF) 2.0 Query/View/TransformaHon SpecificaHon – 1.1 版: January 2011 – 略称: QVT – URL: hYp://www.omg.org/spec/QVT/1.1
• M2Mのための3種類の言語を規定 – OperaHons <手続き的> – RelaHons + Core <パターンマッチング>
Eclipse Modeling Project における M2M 実装
hYp://www.eclipse.org/projects/project.php?id=modeling.mmt
主要プロジェクト
Eclipse Modeling Project における M2M 実装
• ATL – 大島さんに説明をお願いしました
• QVTr or QVTd (+ QVTc) – Xtext ベースの Editor の実装がほぼ出来ています(今後の計画につ
いては後ほど)
– これ以外に独ikv++ technologies社公開のmedini QVTが知られています(メンテナンス状況が不明ですが問題なく動作します)
• QVTo – 現状で充分使えるレベルにあると思います
• その他 – Epsilon – VIATRA2 – Xtend2
M2M
• ここからは 「QVTo をメインに」 三つの QVT +α についてお話します – QVT OperaHons
• Eclipse Modeling QVTo
– QVT RelaHons • Eclipse Modeling QVTd • ikv++ technologies medini QVT
– QVT Core • Eclipse Modeling QVTd
QVT :三つの言語
• RelaHons – ハイレベルでのパターンマッチング(MOFモデル
間:Eclipseではecoreファイル間) • Core – ローレベルでのパターンマッチング
• OperaHonal Mappings – 手続き型言語のように記述
補足) Black Box 実装も含めることが出来ます
QVT :三つの言語
• 現状について – 言語が三つある理由:標準化時に各種提案が
マージされたため – トレースモデル(実装)を利用するため OperaHonal Mappings が RelaHon に依存
– Eclipse Project で実績があるのは OperaHonal Mappings
– Eclipse 外の Project では medini QVT (RelaHon) が実績有
QVT OperaHons
• QVTo の特徴 – 変換のための命令を並べる – OCL を利用(QVTrも同様)
QVT OperaHons
• Eclipse QVTo のインストール – Eclipse Modeling Package をインストール – Help の Install Modeling Components (次ページ)
より OperaHonal QVT を選択して Finish – 指示に従いインストールを済ませ Eclipse をリス
タート
QVT OperaHons
• Eclipse QVTo の設定について – 作成した QVTo プロジェクトの属性
• QVT Sedngs -‐> Metamodel Mappings • ここに変換で使うメタモデルを登録
– Run ConfiguraHons • OperaHonal QVT Interpreter の配下にプロジェクトごと
に構成情報を登録 – 変換モジュールへのパス情報 – トレースファイルのパス情報 – 変換前後ファイル(xmi形式)のパス情報
QVT OperaHons
• 簡単な例題(標準仕様A.2.1) <眺めるだけ> – Book To PublicaHon
• Book(タイトル、章[*]) そして 章(章タイトル、章ページ数) • PUB(タイトル、総ページ数)
星と空
第1章 星 ページ数 10
星と空
全300ページ
QVT OperaHons
• モデルデータの準備 – メタモデル(Book, PUB)作成
• Ecore Tools を利用(前のスライド)
– モデル作成(bookModel.xmi:テスト用) • EMF の Dynamic Instance 作成機能を利用(簡単なモ
デルの場合など) • 本格的に作成するには
– EMF, GMF, GMF/EuGENia などを利用
QVT OperaHons
• モデル変換記述
modeltype inModel uses BOOKS('hYp:///BOOKS.ecore'); modeltype outModel uses PUB('hYp:///PUB.ecore'); transformaHon Book2PublicaHonOperaHonal(in bm:inModel,out pm:outModel); main() {
bm.objects()[Book]-‐>map book2pub(); } mapping inModel::Book::book2pub() : outModel::PublicaHon { Htle := self.Htle; nbPages := self.chapter-‐>nbPages-‐>sum(); }
モデルタイプ定義で メタモデルを指定
モデル変換命令と そのシグニチャ
エントリポイント Bookオブジェクトを集め book2pubを適用
タイトルをコピーし ページ数の総和を 算出
①
②
③
④
QVT OperaHons
• Eclipse 環境での操作(Families2Persons) – File -‐> New -‐> Project – Model to Model TransformaHon -‐> OperaHonal QVT Project を選択し Next
– プロジェクト名(Families2Persons)を入力し Next – デフォルトのまま Next – “Create arHfacts …” をチェックし OperaHonal QVT TransformaHon を選択し Next
– モジュール名(Family2PersonQVTo)を入力し Finish
QVT OperaHons
• プロジェクト構造の例(自由です)
QVT OperaHons
• Families2Persons: Families
metamodels フォルダへ
QVT OperaHons
• Families2Persons: Persons metamodels フォルダへ
QVT OperaHons
• Families2Persons: FamilyModel.xmi
source_model フォルダに 作成します
<?xml version="1.0" encoding="ASCII"?> <families:FamilyModel xmi:version="2.0" xmlns:xmi="hYp://www.omg.org/XMI" xmlns:xsi="hYp://www.w3.org/2001/XMLSchema-‐instance" xmlns:families="hYp://families2" xsi:schemaLocaHon="hYp://families2 ../metamodels/Families.ecore"> <families lastName="March"> <father firstName="Jim"/> <mother firstName="Cindy"/> <sons firstName="Brandon"/> <daughters firstName="Brenda"/> </families> <families lastName="Sailor"> <father firstName="Peter"/> <mother firstName="Jackie"/> <sons firstName="David"/> <sons firstName="Dylan"/> <daughters firstName="Kelly"/> </families> </families:FamilyModel>
Ecoreファイルの場所が 記録される箇所がある ため注意して下さい
QVT OperaHons
1/3
QVT OperaHons
2/3
QVT OperaHons
3/3
QVT OperaHons
• プロジェクトの属性
QVT OperaHons Run ConfiguraHon の例
QVT OperaHons
お待たせしました
QVT OperaHons
• ここから少し補足説明をします
– “Model TransformaHons using QVT OperaHonal Mappings” • 読者として Beginner を想定して書かれています • hYp://redpanda.nl/BEP_P.J.Barendrecht.pdf
– “Model TransformaHon with OperaHonal QVT” • 2008年の EclipseCon でのチュートリアル資料 • hYp://www.eclipsecon.org/2008/sub/aYachments/Model_transformaHon_with_OperaHonal_QVT.pdf
QVT OperaHons
• modeltype – メタモデルデータの指定方法
• workspace内のリソースを直接指定 – PlaKorm:/resource/プロジェクト名/…/xxx.ecore
• 一旦 eclipse にリソースを登録しそれを参照 – Persons(‘hYp://persons’)
– where の利用 • where {self.objects()[Package]-‐>size()>=1}
QVT OperaHons
• main() – 引数無しの main() がエントリーポイントとなる – 通常はモデルデータの入力があり、そこからルー
ト要素ないし特定の型の要素を取り出し変換対象とする • rootObjects()[model element type] • objects()[model element type]
QVT OperaHons
• 本格的な例題: Uml to Rdbms – QVT 標準の付録にあるモデル変換例 – 分量があるため大筋の説明にとどめます
QVT OperaHons SimpleUML metamodel の中身をグラフィカルに 表示
QVT OperaHons
RDB metamodel の中身 をグラフィカルに表示
QVT OperaHons
変換対象の SimpleUML モデルデータ
QVT OperaHons
• Eclipse 環境での操作 – File -‐> New -‐> Example -‐> – OperaHonal QVT TransformaHon -‐> SimpleUML to RDB TransformaHon Project を選択
– これで UML から RDB へのサンプル変換プロジェクトが読み込まれます
– プロジェクトに含まれるファイルから “Simpleuml_To_Rdb.qvto” をダブルクリック等で開いて下さい (QVTo ファイル)
QVT OperaHons
• おおまかな変換ロジック(1) – modeltype の宣言 – transformaHon の宣言(入出力指定) – uml(変換対象のUMLモデルデータ)からModelを
抜き出しRDBのModelに対応付け – Model に含まれる Package(ネストしたものも含
む)を取り出す
QVT OperaHons
• おおまかな変換ロジック(2) – Package に含まれる persistent な Class を Table
に対応付け
– Table に PK を設定 – Table に FK を設定 – Table に Column を設定 – Column の項目属性を設定 – …
QVT OperaHons
• SimpleUML to RDB Project で使う Metamodel ファイルについて(参考) – Window -‐> Show View -‐> Other から OperaHonal QVT -‐> Metamodel Explorer を選択するとシステムに登録されている metamodel の一覧と中身を参照出来ます(Read only)
– QVTo をインストールした Eclipse の plugin フォルダーの中に org.eclipse.m2m.qvt.oml.samples で始まる jar ファイルがあり、.zip に変更し解凍すれば、このプロジェクトで使う ecore ファイル本体が現れます
QVT OperaHons
• 参考情報 – QVTo 関連の各種 URLは後ほど勉強会のサイト
に掲載します – ビルド関連で役に立つかもしれない情報
• QVT: command line execuHon – hYp://www.eclipse.org/forums/index.php/m/106647/
• QVTOML/Examples/InvokeInJava – hYp://wiki.eclipse.org/QVTOML/Examples/InvokeInJava
QVT DECLARATIVE QVTr/QVTc の現状
一方向・ imperaHve 変換言語
一方向・ declaraHve 変換言語
多方向・ declaraHve 変換言語
一方向・ declaraHve 変換言語
言語要素
hYp://wiki.eclipse.org/M2M/QVT_DeclaraHve_Languages
QVT DeclaraHve
• 現状 – エディタ完成直前+ QVTi 実行エンジン作業中
• 今後の計画 – ベーシックな QVTc 実行 for Kepler (2013年6月) – ベーシックな QVTr 実行 for Kepler+1 – 最適化実行エンジン for Kepler+2
– 補足) • git://github.com/arcanefoam/qvtMustus • 近いうちに eclipse に移すとのこと
QVT DeclaraHve
• Eclipse QVTd のインストール – Juno 版 Eclipse Modeling Package をインストール – Xtext の milestone 版(2.4.0 Mx)をインストール – OCL をインストール
• h/p://www.eclipse.org/modeling/download.php?file=/modeling/mdt/ocl/downloads/drops/4.1.0/I201302021655/mdt-‐ocl-‐Update-‐tools-‐I201302021655.zip
– QVTd をインストール • h/p://www.eclipse.org/downloads/download.php?file=/mmt/qvtd/downloads/drops/0.10.0/N201302021656/mmt-‐qvtd-‐incubaSon-‐Update-‐N201302021656.zip
QVT DeclaraHve
• 参考情報 – “Current status of QVTd?”
• Juno Modeling Package ベースで QVTd, QVTc のエディタを動作させる件について Forum でのやり取り • hYp://www.eclipse.org/forums/index.php/t/452424/
QVT DeclaraHve
• グラフィカル記法 – 標準に規定があり Eclipse Modeling Project に UMLX とい
うプロジェクトもあったが現在活動なし
OMG QVT1.1 よりの引用 Figure A.4 Class To Table relaHon
QVT DeclaraHve
• medini QVT – URL hYp://projects.ikv.de/qvt – ikv++ technologies 社の公開する QVT RelaHons
ツールで EPL ライセンス – グラフィカルデバッガやエディタを備える – 非商用であれば自由に利用可能 – 商用については別途問い合わせ要(国内に取り
扱っている会社が2社有)
QVT DeclaraHve
• medini QVT のインストール – Downloads ページの指示に従う
• hYp://projects.ikv.de/qvt/downloads • 確実にインストール出来るのは Indigo 版までの模様 • Mac の場合は Indigo 版 Modeling Tools のインストー
ル後にアップデートサイトを利用
QVT DeclaraHve
• 設定について – メタモデルは Eclipse IDE の Preference に QVT Metamodels という項目があり、そこに設定
– その他は Run ConfiguraHon に設定
QVT DeclaraHve
• Preference 例
QVT DeclaraHve
• Run ConfiguraHon 例
QVT DeclaraHve
• メタモデル(基本的に同じもの)
Families
Persons
QVT DeclaraHve
fn が式の右側にくる のが特徴
QVT DeclaraHve
やはり同じような Query 機能が必要
QVT DeclaraHve
• QVT DeclaraHve のまとめ – Eclipse Modeling Project から利用出来るのはエ
ディタのみ – モデル変換(実行)を行うには medini QVT 他を用
いる必要がある
QVT Core
• コア言語は、モデル群に対し評価可能なフラットな変数の集合に対するパターンマッチングをサポート – “The Core language supports paYern matching over a flat set of variables by evaluaHng condiHons over those variables against a set of models. ” (OMG 11-‐01-‐01)
• OperaHons より RelaHons に近く、より詳細レベルで使える(その分記述量が多くなる)
• OMG文書からのサンプルコード(一部)を示す
QVT Core
OMG QVT A.3.1 UML to RDBMS Mapping より一部引用(1/2)
QVT Core
OMG QVT A.3.1 UML to RDBMS Mapping より一部引用(2/2)
QVT Core
• (前の方のスライドで述べた通り)次期 Eclipse (Kepler) と同期して QVTc の実行可能版が出てくる予定 – 現時点では評価困難であり、Kepler リリースを待ち実装
内容を再度確認してはどうでしょう
Xtext
• Xpand/Xtend1.0 – この時代は Xtend(1.0) が M2M に対応する機能
とされていた
– 参考 • Xpand を用いた簡易 M2M の実績有 • 内容的には次項のXtend2.0を用いた記述に近い
Xtext
• Xtend2.0 – 現在の Xtext では Xtend (2.0) を利用 – 記述にあたり多少抽象レベルは上がるものの、モデ
ル変換を Java で記述するのに近い – 作成するコード類
• モデル変換のロジック(Xtend) • ワークフローコンポーネント(java) • ワークフロー(mwe2)
– 試行しましたが(残念ながら)まだ動作に至らず
OUTSIDE ECLIPSE MODELING
Eclipse Modeling 外で最近進展のみられる興味深い活動事例
モデルベースの興味深い活動
hYp://www.genmymodel.com
モデルベースの興味深い活動
hYp://mbeddr.wordpress.com
最後に
• 次回:2ヶ月後くらい? – どなたか EclipseCon に参加される方おられますか
• 次回の話題 – Eclipse Modeling Projectのどれか – エンタプライズ系 – 組込み系
• 会場:10名程度が入る会議室で充分でしょうか? – 無料でIT勉強会に使える場所もあるようですが、利用
経験のある方ご感想を聞かせください