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)	
            refine	
                                         refine	
                refine	
                                                   M2M	

                      M2M	
                                               M2T	
          CIM	
                       PIM	
                  PSM	

                                                 becomes	


                                                       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(); 	
  	
     Bookオブジェクトを集め	
  
    }	
                                                                book2pubを適用	
    	
  
    mapping	
  inModel::Book::book2pub()	
  :	
  outModel::PublicaHon	
  {	
  
④	
 	
  	
  Htle	
  :=	
  self.Htle;	
                                 タイトルをコピーし	
  
    	
  	
  nbPages	
  :=	
  self.chapter-­‐>nbPages-­‐>sum();	
  	
   ページ数の総和を	
  
    }	
                                                                算出
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"/>	
               Ecoreファイルの場所が	
  
	
  	
  	
  	
  <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>	
  
QVT	
  OperaHons	




       1/3
QVT	
  OperaHons	




       2/3
QVT	
  OperaHons	




       3/3
QVT	
  OperaHons	
•  プロジェクトの属性
Run	
  ConfiguraHon	
  の例	
QVT	
  OperaHons
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	
  
QVTr/QVTc	
  の現状	

QVT	
  DECLARATIVE
多方向・ declaraHve	
  変換言語	

言語要素	


         一方向・ declaraHve	
  変換言語	




                         一方向・
                         declaraHve	
  
                         変換言語	
                         	



         一方向・	
  imperaHve	
  変換言語	




           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)	
  


   –  試行しましたが(残念ながら)まだ動作に至らず
Eclipse	
  Modeling	
  外で最近進展のみられる興味深い活動事例	

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




    hYp://www.genmymodel.com
モデルベースの興味深い活動	




    hYp://mbeddr.wordpress.com
最後に	
•  次回:2ヶ月後くらい?	
  
  –  どなたか EclipseCon	
  に参加される方おられますか	
  
•  次回の話題	
  
  –  Eclipse	
  	
  Modeling	
  Projectのどれか	
  
  –  エンタプライズ系	
  
  –  組込み系	
  
•  会場:10名程度が入る会議室で充分でしょうか?	
  
  –  無料でIT勉強会に使える場所もあるようですが、利用
     経験のある方ご感想を聞かせください

Eclipse Modeling QVT

  • 1.
    EclipseのM2M変換 QVTo  を中心として     田中   ビューファイブ  LLC
  • 2.
    アジェンダ •  MDA  における  M2M  変換の位置づけ   •  OMG  M2M  標準   •  Eclipse  Modeling  Project  における M2M  実装   –  QVT   –  ATL   –  Xtend  2.0
  • 3.
    MDA  における  M2M  変換の位置づけ •  CIM  -­‐>  PIM  -­‐>  PSM  !?   –  ComputaHon  Independent  Model  (CIM)   –  PlaKorm  Independent  Model  (PIM)   –  PlaKorm  Specific  Model  (PSM) refine refine refine M2M M2M M2T CIM PIM PSM becomes refine/refactor  もM2M適用対象
  • 4.
    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  <パターンマッチング>
  • 5.
    Eclipse  Modeling  Project  における   M2M  実装   主要プロジェクト hYp://www.eclipse.org/projects/project.php?id=modeling.mmt
  • 6.
    Eclipse  Modeling  Project  における   M2M  実装 •  ATL   –  大島さんに説明をお願いしました   •  QVTr  or  QVTd  (+  QVTc)   –  Xtext  ベースの  Editor  の実装がほぼ出来ています(今後の計画につ いては後ほど)   –  これ以外に独ikv++  technologies社公開のmedini  QVTが知られていま す(メンテナンス状況が不明ですが問題なく動作します)   •  QVTo   –  現状で充分使えるレベルにあると思います   •  その他   –  Epsilon   –  VIATRA2   –  Xtend2
  • 7.
    M2M •  ここからは 「QVTo  をメインに」 三つの  QVT  +α   についてお話します   –  QVT  OperaHons   •  Eclipse  Modeling  QVTo   –  QVT  RelaHons   •  Eclipse  Modeling  QVTd   •  ikv++  technologies  medini  QVT   –  QVT  Core   •  Eclipse  Modeling  QVTd  
  • 8.
    QVT  :三つの言語 •  RelaHons   –  ハイレベルでのパターンマッチング(MOFモデル 間:Eclipseではecoreファイル間)   •  Core   –  ローレベルでのパターンマッチング   •  OperaHonal  Mappings   –  手続き型言語のように記述   補足) Black  Box  実装も含めることが出来ます
  • 9.
    QVT  :三つの言語 •  現状について   –  言語が三つある理由:標準化時に各種提案が マージされたため   –  トレースモデル(実装)を利用するため   OperaHonal  Mappings  が  RelaHon  に依存   –  Eclipse  Project  で実績があるのは  OperaHonal   Mappings   –  Eclipse  外の  Project  では medini  QVT  (RelaHon)   が実績有  
  • 10.
    QVT  OperaHons •  QVTo  の特徴   –  変換のための命令を並べる   –  OCL  を利用(QVTrも同様)  
  • 11.
    QVT  OperaHons •  Eclipse  QVTo  のインストール   –  Eclipse  Modeling  Package  をインストール   –  Help  の  Install  Modeling  Components  (次ページ) より  OperaHonal  QVT  を選択して  Finish   –  指示に従いインストールを済ませ  Eclipse  をリス タート
  • 13.
    QVT  OperaHons •  Eclipse  QVTo  の設定について   –  作成した QVTo  プロジェクトの属性   •  QVT  Sedngs  -­‐>  Metamodel  Mappings   •  ここに変換で使うメタモデルを登録   –  Run  ConfiguraHons   •  OperaHonal  QVT  Interpreter  の配下にプロジェクトごと に構成情報を登録   –  変換モジュールへのパス情報   –  トレースファイルのパス情報   –  変換前後ファイル(xmi形式)のパス情報
  • 14.
    QVT  OperaHons •  簡単な例題(標準仕様A.2.1)  <眺めるだけ>   –  Book  To  PublicaHon   •  Book(タイトル、章[*])  そして 章(章タイトル、章ページ 数)   •  PUB(タイトル、総ページ数)
  • 15.
    星と空 星と空 第1章 星   ページ数 10 ジ 全300ペー
  • 16.
    QVT  OperaHons •  モデルデータの準備   –  メタモデル(Book,  PUB)作成   •  Ecore  Tools  を利用(前のスライド)   –  モデル作成(bookModel.xmi:テスト用)   •  EMF  の  Dynamic  Instance  作成機能を利用(簡単なモ デルの場合など)   •  本格的に作成するには   –  EMF,  GMF,  GMF/EuGENia  などを利用
  • 17.
    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();     Bookオブジェクトを集め   }   book2pubを適用   mapping  inModel::Book::book2pub()  :  outModel::PublicaHon  {   ④    Htle  :=  self.Htle;   タイトルをコピーし      nbPages  :=  self.chapter-­‐>nbPages-­‐>sum();     ページ数の総和を   }   算出
  • 18.
    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  
  • 19.
  • 20.
    QVT  OperaHons •  Families2Persons:  Families metamodels  フォルダへ
  • 21.
    QVT  OperaHons •  Families2Persons:  Persons metamodels  フォルダへ
  • 22.
    QVT  OperaHons •  Families2Persons:  FamilyModel.xmi source_model  フォルダに   作成します
  • 23.
    <?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"/>   Ecoreファイルの場所が          <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>  
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
    QVT  OperaHons お待たせしました
  • 30.
    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    
  • 31.
    QVT  OperaHons •  modeltype   –  メタモデルデータの指定方法   •  workspace内のリソースを直接指定   – PlaKorm:/resource/プロジェクト名/…/xxx.ecore   •  一旦  eclipse  にリソースを登録しそれを参照   – Persons(‘hYp://persons’)   –  where  の利用   •  where  {self.objects()[Package]-­‐>size()>=1}
  • 32.
    QVT  OperaHons •  main()   –  引数無しの  main()  がエントリーポイントとなる   –  通常はモデルデータの入力があり、そこからルー ト要素ないし特定の型の要素を取り出し変換対 象とする   •  rootObjects()[model  element  type]   •  objects()[model  element  type]  
  • 33.
    QVT  OperaHons •  本格的な例題:Uml  to  Rdbms   –  QVT  標準の付録にあるモデル変換例   –  分量があるため大筋の説明にとどめます  
  • 34.
    QVT  OperaHons SimpleUML  metamodel   の中身をグラフィカルに   表示
  • 35.
    QVT  OperaHons RDB  metamodel  の中身   をグラフィカルに表示  
  • 36.
  • 37.
    QVT  OperaHons •  Eclipse  環境での操作   –  File  -­‐>  New  -­‐>  Example  -­‐>   –  OperaHonal  QVT  TransformaHon  -­‐>  SimpleUML  to   RDB  TransformaHon  Project  を選択   –  これで  UML  から  RDB  へのサンプル変換プロジェ クトが読み込まれます   –  プロジェクトに含まれるファイルから “Simpleuml_To_Rdb.qvto”  をダブルクリック等で 開いて下さい (QVTo  ファイル)
  • 38.
    QVT  OperaHons •  おおまかな変換ロジック(1)   –  modeltype  の宣言   –  transformaHon  の宣言(入出力指定)   –  uml(変換対象のUMLモデルデータ)からModelを 抜き出しRDBのModelに対応付け   –  Model  に含まれる  Package(ネストしたものも含 む)を取り出す  
  • 39.
    QVT  OperaHons •  おおまかな変換ロジック(2)   –  Package  に含まれる  persistent  な  Class  を  Table   に対応付け –  Table  に  PK  を設定   –  Table  に  FK  を設定   –  Table  に  Column  を設定   –  Column  の項目属性を設定   –  …  
  • 40.
    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  ファイル本体が現れます
  • 41.
    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  
  • 42.
  • 43.
    多方向・ declaraHve  変換言語 言語要素 一方向・ declaraHve  変換言語 一方向・ declaraHve   変換言語 一方向・  imperaHve  変換言語 hYp://wiki.eclipse.org/M2M/ QVT_DeclaraHve_Languages
  • 44.
    QVT  DeclaraHve •  現状   –  エディタ完成直前+ QVTi  実行エンジン作業中   •  今後の計画   –  ベーシックな QVTc  実行 for  Kepler  (2013年6月)   –  ベーシックな QVTr  実行  for  Kepler+1   –  最適化実行エンジン for  Kepler+2   –  補足)   •  git://github.com/arcanefoam/qvtMustus   •  近いうちに  eclipse  に移すとのこと
  • 45.
    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
  • 46.
    QVT  DeclaraHve •  参考情報   –  “Current  status  of  QVTd?”   •  Juno  Modeling  Package  ベースで QVTd,  QVTc  のエディ タを動作させる件について  Forum  でのやり取り   •  hYp://www.eclipse.org/forums/index.php/t/452424/  
  • 47.
    QVT  DeclaraHve •  グラフィカル記法   –  標準に規定があり  Eclipse  Modeling  Project  に  UMLX  とい うプロジェクトもあったが現在活動なし OMG  QVT1.1  よりの引用  Figure  A.4  Class  To  Table  relaHon
  • 48.
    QVT  DeclaraHve •  medini  QVT   –  URL  hYp://projects.ikv.de/qvt   –  ikv++  technologies  社の公開する QVT  RelaHons   ツールで  EPL  ライセンス   –  グラフィカルデバッガやエディタを備える   –  非商用であれば自由に利用可能   –  商用については別途問い合わせ要(国内に取り 扱っている会社が2社有)  
  • 49.
    QVT  DeclaraHve •  medini  QVT  のインストール   –  Downloads  ページの指示に従う   •  hYp://projects.ikv.de/qvt/downloads   •  確実にインストール出来るのは  Indigo  版までの模様   •  Mac  の場合は  Indigo  版  Modeling  Tools  のインストー ル後にアップデートサイトを利用
  • 50.
    QVT  DeclaraHve •  設定について   –  メタモデルは  Eclipse  IDE  の  Preference  に  QVT   Metamodels  という項目があり、そこに設定   –  その他は  Run  ConfiguraHon  に設定
  • 51.
  • 52.
    QVT  DeclaraHve •  Run  ConfiguraHon  例
  • 53.
  • 54.
    QVT  DeclaraHve fn  が式の右側にくる   のが特徴
  • 55.
    QVT  DeclaraHve やはり同じような  Query  機能が必要
  • 56.
    QVT  DeclaraHve •  QVT  DeclaraHve  のまとめ   –  Eclipse  Modeling  Project  から利用出来るのはエ ディタのみ   –  モデル変換(実行)を行うには medini  QVT  他を用 いる必要がある  
  • 57.
    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文書からのサンプルコード(一部)を示す  
  • 58.
    QVT  Core OMG  QVT  A.3.1  UML  to  RDBMS  Mapping  より一部引用(1/2)
  • 59.
    QVT  Core OMG  QVT  A.3.1  UML  to  RDBMS  Mapping  より一部引用(2/2)
  • 60.
    QVT  Core •  (前の方のスライドで述べた通り)次期  Eclipse   (Kepler)  と同期して QVTc  の実行可能版が出てくる 予定   –  現時点では評価困難であり、Kepler  リリースを待ち実装 内容を再度確認してはどうでしょう  
  • 61.
    Xtext •  Xpand/Xtend1.0   –  この時代は Xtend(1.0)  が  M2M  に対応する機能 とされていた   –  参考   •  Xpand  を用いた簡易  M2M  の実績有   •  内容的には次項のXtend2.0を用いた記述に近い
  • 62.
    Xtext •  Xtend2.0   –  現在の Xtext  では Xtend  (2.0)  を利用   –  記述にあたり多少抽象レベルは上がるものの、モデ ル変換を  Java  で記述するのに近い   –  作成するコード類   •  モデル変換のロジック(Xtend)   •  ワークフローコンポーネント(java)   •  ワークフロー(mwe2)   –  試行しましたが(残念ながら)まだ動作に至らず
  • 63.
  • 64.
  • 65.
    モデルベースの興味深い活動 hYp://mbeddr.wordpress.com
  • 66.
    最後に •  次回:2ヶ月後くらい?   –  どなたか EclipseCon  に参加される方おられますか   •  次回の話題   –  Eclipse    Modeling  Projectのどれか   –  エンタプライズ系   –  組込み系   •  会場:10名程度が入る会議室で充分でしょうか?   –  無料でIT勉強会に使える場所もあるようですが、利用 経験のある方ご感想を聞かせください