2012-04-12 8 views
0

メタモデル(クラス図)とそのインスタンス(オブジェクト図)を入力として使用するAPIを開発する必要がありますが、私はプログラム的な方法でそれを行う方法を知らない。メタモデルに対するオブジェクト図(別名「インスタンス図」)を検証する方法は?

私はいくつかの研究を行いましたが、私はEMF APIで遊ぶことができますが、それを行う方法や検証前に図を挿入する方法がわかりません。

私は初心者だし、インターネット上に存在するすべての文書間で失われたので、私の主題が明確でない場合は恐れ入り

私はいくつかの方向性を必要とする、私がしなければならないかを理解することをお勧め

EDIT: 対象はMagic Drawで作成された彼のメタモデルに対して、インスタンスを検証することです。だから私はファイルをエクスポートする必要があります(ecore?XMI?私は誰がベストかわかりません)、これらの2つのファイルを解析するJava APIを作成します(私はそれらをインジェクト/インポートする方法を理解する必要があります)検証についてこれは最初のステップです。その後、インスタンスを検証するためにOCL制約を追加すると思いますが、今は単純な検証に焦点を当てる必要があります。必要に応じてEMFや他のツールを使ってどのように行うことができますか?

答えて

4

あなたの質問には、概念レベルと実装レベルの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。

+0

はお時間をいただき、ありがとうございますと、この偉大なポストは、それが私の主な質問に答えるが、私にとっては明らかではないが、いくつかのポイントがあります。 Eclipse GUIツールを使用してモデルを設計したり、EMFを使用する必要があります。私は詳細について私の質問を編集しました、それをご覧くださいありますか?もう一度あなたの時間と助けをありがとう – TheCyberXP

+0

問題はありません - 答えを更新しました。 – sfinnie

2

ECoreを使用してメタモデルを定義した場合、EMFは定義されたEClassのインスタンス(モデル)を作成するためのJava APIを生成します。定義上、あなたのモデルはそのメタモデルに準拠します。

あなたのモデルが別のアプリケーションによって作成され、それを別個に作成されたメタモデルに対して検証したい場合は、最初にメタモデルからEMFによって生成されたエディタでモデルを開くことができます。それが準拠していない場合は、最初の試行で十分かもしれないsommeエラーが発生します。 私がうまく覚えていれば、thareは生成されたエディタで右クリックして "Validate"を選択することで実行できるデフォルトのバリデータです。

EMF:EMF検証フレームワークによって提供される別のソリューションがあります。このフレームワークでは、インスタンスに対して検証される制約を定義できます。 http://help.eclipse.org/helios/index.jsp?topic=%2Forg.eclipse.emf.validation.doc%2Ftutorials%2FvalidationTutorial.html

私はあなたがあなたのメタモデルにOCL制約を定義することができることをかなり確信して」が、これは他のプロジェクトの一部です:

public class MyConstraint extends AbstractModelConstraint{ 
    @Override 
    public IStatus validate(IValidationContext ctx) { 
     try{ 
     //Get the object that will be validated 
     Object obj = ctx.getTarget(); 
     //Here you can run you validation 
     //Create Validation Status 
     return validationStatus 
     } catch (Exception e) { 
     return ctx.createFailureStatus(e); 
     } 
    } 
} 

は、より多くの情報のためには、このチュートリアルを見てみることができます。これを見てください:http://www.eclipse.org/modeling/mdt/?project=ocl#ocl 私はそれを使用していないので、私はあなたのためにそれを助けることはできません。ごめんなさい。

私はそれが役に立ちそうです。チャールズ

+0

私はECoreを使用してメタモデルを定義していませんが、グラフィックツールMagic Drawを使用しましたが、モデルをecoreファイルまたはXMIにエクスポートすることができます。そのため、 EMFを使用して検証することができます。それは可能ですか?自動解析と検証の一種。 – TheCyberXP

関連する問題