編集対象とするモデルにはルート要素が必要

GMFを使うと,EMFモデルをグラフィカルに編集可能なエディターを容易に作成可能です。ただ,編集対象とするモデルを定義する場合に,一つ注意点があります。これはEMFモデルを定義する場合における注意点と言えますが。

Technologies – IBM Developerhttp://codezine.jp/a/article.aspx?aid=417の記事でも紹介されているように,編集対象とするモデルには必ずルートクラスが必要です。同一リソース(ファイル)内におけるその他のモデル要素(インスタンス)は,直接的あるいは間接的にこのルート要素(インスタンス)に包含(containment)されなければなりません。

例えば,上記図はGMFチュートリアルで使用されているMindmapモデルですが,「Map」クラスがルートクラスになります。そしてどのクラスも,Composite関連を辿ると必ず「Map」クラスにたどり着きます。

GMFでは,このルート要素がGMFマッピング定義モデルにおけるDiagram Root Elementになります。そして,生成されたエディタにおいてキャンバス上には一切現れません。

そもそもこれは,EMFモデルを定義する場合における注意点です。EMFモデルは基本的にXML/XMIで永続化されることが前提であり,それが目的でもあります。そして,整形式XML文書として永続化するにはたった一つのルート要素が必要になります。ですから,EMFモデルにおいてルートクラスは必須で,そのインスタンスが整形式XML文書内のルート要素となります。

EMFやGMFを初めて使用する際,案外,混乱される場合があるのではないでしょうか。分析段階等でモデリングするとき,全てのインスタンスを内包するようなルートクラスを設けることってあまりないですよね。ですが,EMFモデルには必須なんです。モデリングの対象としている問題領域そのものをルートクラスとすれば良いでしょうね。例えば,図書館をモデリングする場合には,「図書館」というルートクラスを設け,それから「図書」やら「著者」等のクラスを作成していけば良いでしょう。