あなたの質問は、概念と実装の2つのレベルで答えることができます。どちらを探しているのかわからないので、両方をカバーしようと思います。どちらかが不要な場合はお詫びします(両方ではないことを願っています!)。
まず最初に、あなたが与える例では、クラス図を「モデル」として参照し、オブジェクト図をそのモデルのインスタンスとして参照するのがより一般的です。厳密に言えば、「メタモデル」は、インスタンスを持つモデルを記述するために使用されます。以下の用語を使用しますが、おそらく注目に値します。
概念レベル
「概念的」とは、「メタモデルに対してモデルを検証することはどういう意味ですか」という質問に答えることを意味します。
答えはとても簡単です。メタモデルは、有効なモデルを構成するものを定義するスキーマまたはルールのセットです。xmlは素晴らしい例を提供します。xmlスキーマは、いくつかの主題の構造とルールを定義します。許可されるタイプ、それらが持つことができる属性、属性が複数の値を持つことができるかどうか、属性が保持できる可能な値のセット。等々。xmlドキュメントは、スキーマで定義されているルールのいずれにも違反していない場合にのみ、スキーマに準拠しています。
モデルへの一般化:モデルは、メタモデルで定義されたルールのいずれにも違反しない場合にのみ、メタモデルに準拠します。
実装レベル
「API」が何に使用されるかについては詳しく説明しません。最も単純な解決策は、xmlを使用することである可能性があります。メタモデルは単なるxmlスキーマであり、モデルはそれらのスキーマに準拠したxmlドキュメントです。次に、「実装」には、検証中の多くのxmlパーサーライブラリの1つを選択し、クライアントコードから呼び出すだけです。
ただし、EMFについて言及しているので、おそらくそれを使用する必要があります。簡単にするために、メタモデルを次のように定義するとします。
Class Dog {
name: String
gender: String
owner: Person
}
Class Person {
name: String
address: Address
dogs: Set<Dog>
}
EMFは、そのようなものを定義するためのAPI( eCore API )を提供します。JavaのリフレクションAPIのように考えてください。メタモデルを定義するには、eCore APIのインスタンスを(プログラムで、またはエディターの1つを介して)作成します。したがって、次を作成します。
- 2つのインスタンス
EClass
(1つは人用、もう1つは犬用)
- 6つのインスタンス
EAttribute
(属性ごとに1つ)
- forClass.owner
EReference
およびforPerson.dogsのEReferences
コレクション
等々。eCore APIは、APIを使用してモデルのインスタンスを作成する機能も提供します。(必要に応じて、Eclipse GUIでインスタンスを作成するためのエディターも自動生成されます)。モデルのインスタンスをさまざまな具体的な構文で読み取ることもできます。読んでいるモデルがメタモデルに準拠していない場合、EMFは例外を発生させます。
少し長ければごめんなさい。必要に応じて例をより詳細に説明する優れた記事がここにあります。
編集
修正された質問への回答の追加:
主題は、MagicDrawで作成されたメタモデルに対してインスタンスを検証することです。
わかった。MagicDrawのエクスポート機能についてはよくわかりませんが、ecoreをエクスポートできる場合は、ここから始めるとよいでしょう。
- クラス図(「メタモデル」)をecoreとしてエクスポートし、EMFにロードしてモデルを作成します。これはかなり簡単なはずです。
- 同様に、オブジェクト図をecoreおよびloadとしてエクスポートし、EMFがロード時に検証できるようにします。さらに検証を追加する必要がある場合は、@Charlesの投稿がEMF検証フレームワークへの適切なリンクを提供します。
あなたがするためにたくさんの仕事をしているなら、それはおそらくEMF本に投資する価値があります。これは最もアクセスしやすいものではありませんが、EMFのさまざまな要素を適切にカバーします。
hth。