66
EclipseM2M変換 QVTo を中心として 田中 ビューファイブ LLC

Eclipse Modeling QVT

Embed Size (px)

DESCRIPTION

Eclipse Modeling 勉強会(2013.02.22)で発表した QVT に関するスライド

Citation preview

Page 1: Eclipse Modeling QVT

EclipseのM2M変換

QVTo  を中心として    

田中  ビューファイブ  LLC

Page 2: Eclipse Modeling QVT

アジェンダ

•  MDA  における  M2M  変換の位置づけ  •  OMG  M2M  標準  •  Eclipse  Modeling  Project  における M2M  実装  – QVT  – ATL  – Xtend  2.0

Page 3: Eclipse Modeling QVT

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適用対象

Page 4: Eclipse Modeling QVT

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  <パターンマッチング>

Page 5: Eclipse Modeling QVT

Eclipse  Modeling  Project  における  M2M  実装  

hYp://www.eclipse.org/projects/project.php?id=modeling.mmt

主要プロジェクト

Page 6: Eclipse Modeling QVT

Eclipse  Modeling  Project  における  M2M  実装

•  ATL  –  大島さんに説明をお願いしました  

•  QVTr  or  QVTd  (+  QVTc)  –  Xtext  ベースの  Editor  の実装がほぼ出来ています(今後の計画につ

いては後ほど)  

–  これ以外に独ikv++  technologies社公開のmedini  QVTが知られています(メンテナンス状況が不明ですが問題なく動作します)  

•  QVTo  –  現状で充分使えるレベルにあると思います  

•  その他  –  Epsilon  –  VIATRA2  –  Xtend2

Page 7: Eclipse Modeling QVT

M2M

•  ここからは 「QVTo  をメインに」 三つの  QVT  +α  についてお話します  – QVT  OperaHons  

•  Eclipse  Modeling  QVTo  

– QVT  RelaHons  •  Eclipse  Modeling  QVTd  •  ikv++  technologies  medini  QVT  

– QVT  Core  •  Eclipse  Modeling  QVTd  

Page 8: Eclipse Modeling QVT

QVT  :三つの言語

•  RelaHons  – ハイレベルでのパターンマッチング(MOFモデル

間:Eclipseではecoreファイル間)  •  Core  – ローレベルでのパターンマッチング  

•  OperaHonal  Mappings  – 手続き型言語のように記述  

補足) Black  Box  実装も含めることが出来ます

Page 9: Eclipse Modeling QVT

QVT  :三つの言語

•  現状について  – 言語が三つある理由:標準化時に各種提案が

マージされたため  – トレースモデル(実装)を利用するため  OperaHonal  Mappings  が  RelaHon  に依存  

– Eclipse  Project  で実績があるのは  OperaHonal  Mappings  

– Eclipse  外の  Project  では medini  QVT  (RelaHon)  が実績有  

Page 10: Eclipse Modeling QVT

QVT  OperaHons

•  QVTo  の特徴  – 変換のための命令を並べる  – OCL  を利用(QVTrも同様)  

Page 11: Eclipse Modeling QVT

QVT  OperaHons

•  Eclipse  QVTo  のインストール  – Eclipse  Modeling  Package  をインストール  – Help  の  Install  Modeling  Components  (次ページ)

より  OperaHonal  QVT  を選択して  Finish  – 指示に従いインストールを済ませ  Eclipse  をリス

タート

Page 12: Eclipse Modeling QVT
Page 13: Eclipse Modeling QVT

QVT  OperaHons

•  Eclipse  QVTo  の設定について  – 作成した QVTo  プロジェクトの属性  

•  QVT  Sedngs  -­‐>  Metamodel  Mappings  •  ここに変換で使うメタモデルを登録  

– Run  ConfiguraHons  •  OperaHonal  QVT  Interpreter  の配下にプロジェクトごと

に構成情報を登録  – 変換モジュールへのパス情報  –  トレースファイルのパス情報  – 変換前後ファイル(xmi形式)のパス情報

Page 14: Eclipse Modeling QVT

QVT  OperaHons

•  簡単な例題(標準仕様A.2.1)  <眺めるだけ>  – Book  To  PublicaHon  

•  Book(タイトル、章[*])  そして 章(章タイトル、章ページ数)  •  PUB(タイトル、総ページ数)

Page 15: Eclipse Modeling QVT

星と空

第1章 星  ページ数 10

星と空

全300ページ

Page 16: Eclipse Modeling QVT

QVT  OperaHons

•  モデルデータの準備  – メタモデル(Book,  PUB)作成  

•  Ecore  Tools  を利用(前のスライド)  

– モデル作成(bookModel.xmi:テスト用)  •  EMF  の  Dynamic  Instance  作成機能を利用(簡単なモ

デルの場合など)  •  本格的に作成するには  

–  EMF,  GMF,  GMF/EuGENia  などを利用

Page 17: Eclipse Modeling QVT

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を適用

タイトルをコピーし  ページ数の総和を  算出

Page 18: Eclipse Modeling QVT

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  

Page 19: Eclipse Modeling QVT

QVT  OperaHons

•  プロジェクト構造の例(自由です)

Page 20: Eclipse Modeling QVT

QVT  OperaHons

•  Families2Persons:  Families

metamodels  フォルダへ

Page 21: Eclipse Modeling QVT

QVT  OperaHons

•  Families2Persons:  Persons metamodels  フォルダへ

Page 22: Eclipse Modeling QVT

QVT  OperaHons

•  Families2Persons:  FamilyModel.xmi

source_model  フォルダに  作成します

Page 23: Eclipse Modeling QVT

<?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ファイルの場所が  記録される箇所がある  ため注意して下さい

Page 24: Eclipse Modeling QVT

QVT  OperaHons

1/3

Page 25: Eclipse Modeling QVT

QVT  OperaHons

2/3

Page 26: Eclipse Modeling QVT

QVT  OperaHons

3/3

Page 27: Eclipse Modeling QVT

QVT  OperaHons

•  プロジェクトの属性

Page 28: Eclipse Modeling QVT

QVT  OperaHons Run  ConfiguraHon  の例

Page 29: Eclipse Modeling QVT

QVT  OperaHons

お待たせしました

Page 30: Eclipse Modeling QVT

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  

 

Page 31: Eclipse Modeling QVT

QVT  OperaHons

•  modeltype  – メタモデルデータの指定方法  

•  workspace内のリソースを直接指定  – PlaKorm:/resource/プロジェクト名/…/xxx.ecore  

•  一旦  eclipse  にリソースを登録しそれを参照  – Persons(‘hYp://persons’)  

– where  の利用  •  where  {self.objects()[Package]-­‐>size()>=1}

Page 32: Eclipse Modeling QVT

QVT  OperaHons

•  main()  – 引数無しの  main()  がエントリーポイントとなる  – 通常はモデルデータの入力があり、そこからルー

ト要素ないし特定の型の要素を取り出し変換対象とする  •  rootObjects()[model  element  type]  •  objects()[model  element  type]  

Page 33: Eclipse Modeling QVT

QVT  OperaHons

•  本格的な例題: Uml  to  Rdbms  – QVT  標準の付録にあるモデル変換例  – 分量があるため大筋の説明にとどめます  

Page 34: Eclipse Modeling QVT

QVT  OperaHons SimpleUML  metamodel  の中身をグラフィカルに  表示

Page 35: Eclipse Modeling QVT

QVT  OperaHons

RDB  metamodel  の中身  をグラフィカルに表示  

Page 36: Eclipse Modeling QVT

QVT  OperaHons

変換対象の SimpleUML  モデルデータ

Page 37: Eclipse Modeling QVT

QVT  OperaHons

•  Eclipse  環境での操作  – File  -­‐>  New  -­‐>  Example  -­‐>  – OperaHonal  QVT  TransformaHon  -­‐>  SimpleUML  to  RDB  TransformaHon  Project  を選択  

– これで  UML  から  RDB  へのサンプル変換プロジェクトが読み込まれます  

– プロジェクトに含まれるファイルから “Simpleuml_To_Rdb.qvto”  をダブルクリック等で開いて下さい (QVTo  ファイル)

Page 38: Eclipse Modeling QVT

QVT  OperaHons

•  おおまかな変換ロジック(1)  – modeltype  の宣言  –  transformaHon  の宣言(入出力指定)  – uml(変換対象のUMLモデルデータ)からModelを

抜き出しRDBのModelに対応付け  – Model  に含まれる  Package(ネストしたものも含

む)を取り出す  

Page 39: Eclipse Modeling QVT

QVT  OperaHons

•  おおまかな変換ロジック(2)  – Package  に含まれる  persistent  な  Class  を  Table  

に対応付け

– Table  に  PK  を設定  – Table  に  FK  を設定  – Table  に  Column  を設定  – Column  の項目属性を設定  – …  

Page 40: Eclipse Modeling QVT

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  ファイル本体が現れます

Page 41: Eclipse Modeling QVT

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  

Page 42: Eclipse Modeling QVT

QVT  DECLARATIVE QVTr/QVTc  の現状

Page 43: Eclipse Modeling QVT

一方向・  imperaHve  変換言語

一方向・ declaraHve  変換言語

多方向・ declaraHve  変換言語

一方向・ declaraHve  変換言語

言語要素

hYp://wiki.eclipse.org/M2M/QVT_DeclaraHve_Languages

Page 44: Eclipse Modeling QVT

QVT  DeclaraHve

•  現状  – エディタ完成直前+ QVTi  実行エンジン作業中  

•  今後の計画  – ベーシックな QVTc  実行 for  Kepler  (2013年6月)  – ベーシックな QVTr  実行  for  Kepler+1  – 最適化実行エンジン for  Kepler+2  

– 補足)  •  git://github.com/arcanefoam/qvtMustus  •  近いうちに  eclipse  に移すとのこと

Page 45: Eclipse Modeling QVT

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

Page 46: Eclipse Modeling QVT

QVT  DeclaraHve

•  参考情報  – “Current  status  of  QVTd?”  

•  Juno  Modeling  Package  ベースで QVTd,  QVTc  のエディタを動作させる件について  Forum  でのやり取り  •  hYp://www.eclipse.org/forums/index.php/t/452424/  

Page 47: Eclipse Modeling QVT

QVT  DeclaraHve

•  グラフィカル記法  –  標準に規定があり  Eclipse  Modeling  Project  に  UMLX  とい

うプロジェクトもあったが現在活動なし

OMG  QVT1.1  よりの引用  Figure  A.4  Class  To  Table  relaHon

Page 48: Eclipse Modeling QVT

QVT  DeclaraHve

•  medini  QVT  – URL  hYp://projects.ikv.de/qvt  –  ikv++  technologies  社の公開する QVT  RelaHons  

ツールで  EPL  ライセンス  – グラフィカルデバッガやエディタを備える  – 非商用であれば自由に利用可能  – 商用については別途問い合わせ要(国内に取り

扱っている会社が2社有)  

Page 49: Eclipse Modeling QVT

QVT  DeclaraHve

•  medini  QVT  のインストール  – Downloads  ページの指示に従う  

•  hYp://projects.ikv.de/qvt/downloads  •  確実にインストール出来るのは  Indigo  版までの模様  •  Mac  の場合は  Indigo  版  Modeling  Tools  のインストー

ル後にアップデートサイトを利用

Page 50: Eclipse Modeling QVT

QVT  DeclaraHve

•  設定について  – メタモデルは  Eclipse  IDE  の  Preference  に  QVT  Metamodels  という項目があり、そこに設定  

– その他は  Run  ConfiguraHon  に設定

Page 51: Eclipse Modeling QVT

QVT  DeclaraHve

•  Preference  例

Page 52: Eclipse Modeling QVT

QVT  DeclaraHve

•  Run  ConfiguraHon  例

Page 53: Eclipse Modeling QVT

QVT  DeclaraHve

•  メタモデル(基本的に同じもの)

Families

Persons

Page 54: Eclipse Modeling QVT

QVT  DeclaraHve

fn  が式の右側にくる  のが特徴

Page 55: Eclipse Modeling QVT

QVT  DeclaraHve

やはり同じような  Query  機能が必要

Page 56: Eclipse Modeling QVT

QVT  DeclaraHve

•  QVT  DeclaraHve  のまとめ  – Eclipse  Modeling  Project  から利用出来るのはエ

ディタのみ  – モデル変換(実行)を行うには medini  QVT  他を用

いる必要がある  

Page 57: Eclipse Modeling 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文書からのサンプルコード(一部)を示す  

Page 58: Eclipse Modeling QVT

QVT  Core

OMG  QVT  A.3.1  UML  to  RDBMS  Mapping  より一部引用(1/2)

Page 59: Eclipse Modeling QVT

QVT  Core

OMG  QVT  A.3.1  UML  to  RDBMS  Mapping  より一部引用(2/2)

Page 60: Eclipse Modeling QVT

QVT  Core

•  (前の方のスライドで述べた通り)次期  Eclipse  (Kepler)  と同期して QVTc  の実行可能版が出てくる予定  –  現時点では評価困難であり、Kepler  リリースを待ち実装

内容を再度確認してはどうでしょう  

Page 61: Eclipse Modeling QVT

Xtext

•  Xpand/Xtend1.0  – この時代は Xtend(1.0)  が  M2M  に対応する機能

とされていた  

– 参考  •  Xpand  を用いた簡易  M2M  の実績有  •  内容的には次項のXtend2.0を用いた記述に近い

Page 62: Eclipse Modeling QVT

Xtext

•  Xtend2.0  – 現在の Xtext  では Xtend  (2.0)  を利用  – 記述にあたり多少抽象レベルは上がるものの、モデ

ル変換を  Java  で記述するのに近い  – 作成するコード類  

•  モデル変換のロジック(Xtend)  •  ワークフローコンポーネント(java)  •  ワークフロー(mwe2)  

– 試行しましたが(残念ながら)まだ動作に至らず

Page 63: Eclipse Modeling QVT

OUTSIDE  ECLIPSE  MODELING

Eclipse  Modeling  外で最近進展のみられる興味深い活動事例

Page 64: Eclipse Modeling QVT

モデルベースの興味深い活動

hYp://www.genmymodel.com

Page 65: Eclipse Modeling QVT

モデルベースの興味深い活動

hYp://mbeddr.wordpress.com

Page 66: Eclipse Modeling QVT

最後に

•  次回:2ヶ月後くらい?  – どなたか EclipseCon  に参加される方おられますか  

•  次回の話題  –  Eclipse    Modeling  Projectのどれか  – エンタプライズ系  – 組込み系  

•  会場:10名程度が入る会議室で充分でしょうか?  – 無料でIT勉強会に使える場所もあるようですが、利用

経験のある方ご感想を聞かせください