あなたの質問には、概念レベルと実装レベルの2つのレベルがあります。私はあなたが助けを求めているかどうか分からないので、私は両方をカバーしようとします。いずれかが余分な場合は謝罪してください(うまくいけば両方!)。
最初の例では、クラスダイアグラムを「モデル」と呼び、オブジェクトダイアグラムをそのモデルのインスタンスとして参照する方が普通です。厳密に言えば、「メタモデル」はインスタンスを持つモデルを記述するために使用されます。私はあなたの専門用語をつけておきますが、注目に値するでしょう。 「概念」で
概念レベル
私は答えは非常に簡単です質問「何それはメタモデルに対してモデルを検証する意味ですか?
に答える。メタモデルは、スキーマであることを意味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のインスタンスを(プログラムまたはエディタのいずれかを使用して)作成します。だから、作成したい:EClass
の
- 2つのインスタンス(人のための1つ、犬用1)(各属性の1)
EAttribute
の
- シックス・インスタンス
- Class.ownerとコレクションの
EReference
をPerson.dogsのEReferences
の
などです。 eCore APIは、APIを使用してモデルのインスタンスを作成する機能も提供します。 (必要に応じて、eclipse GUIでインスタンスを作成するためのエディターも自動的に生成されます)。モデルのインスタンスをさまざまな具体的な構文で読むこともできます。読んでいるモデルがメタモデルに準拠していない場合、EMFは例外を発生させます。
残念ですが、少し長いです。必要に応じて詳細な例を説明した良い記事hereがあります。改正質問に対して
EDIT
追加する:
対象は マジックドローで作成された彼のメタモデルに対して、インスタンスを検証することです。
OK。私はMagicDrawのエクスポート機能についてはあまり知りませんが、それはたEcoreをエクスポートできるならば、それは開始するには良い場所でなければなりません。たEcoreとして
- エクスポートクラス図(「メタモデルを」)と作成するために、EMFにロードモデル。これはかなり簡単です。
- 同様に、オブジェクト図をecoreとしてエクスポートして読み込み、EMFが読み込み時に検証するようにします。さらに検証を追加する必要がある場合、@Charlesの投稿はEMF検証フレームワークへの良いリンクを提供します。
多くの作業がある場合は、おそらくEMF bookに投資する価値があります。これは最もアクセスしやすいものではありませんが、EMFのさまざまな要素を適切にカバーしています。
hth。
はお時間をいただき、ありがとうございますと、この偉大なポストは、それが私の主な質問に答えるが、私にとっては明らかではないが、いくつかのポイントがあります。 Eclipse GUIツールを使用してモデルを設計したり、EMFを使用する必要があります。私は詳細について私の質問を編集しました、それをご覧くださいありますか?もう一度あなたの時間と助けをありがとう – TheCyberXP
問題はありません - 答えを更新しました。 – sfinnie