2011-12-06 77 views
3

是否有可能從一個實例(模型本身)引用的eclass(在的Ecore元類)?參考Ecore Eclasses。是否有可能從xmi實例引用eClasses?

讓我們假設我有一個包含一個基類基類從所有的元類(的eclass)導出的Ecore元模型M2.ecore。這是,BASECLASS是M2.ecore元模型的所有eClass的超類。這一個班叫米,使用的基類,所以就有了eclass的M和基類之間的EReference:

M2.ecore

ClassA ----inherits_from------|> BASECLASS 
ClassM ----inherits_from------|> BASECLASS 
ClassM ----uses-(eReference)---> BASECLASS 

然後我有eclass的M的實例INSTANCE_M我要鏈接到M2.ecore的的eclass,例如:

M2.xmi

INSTANCE_M -----eReference---> (M2.ecore).Class_A 

這是,我想鏈接元模型的類。顯然,使用樣本反射編輯器我只能鏈接實例而不是元類。

爲什麼?如何解決這個問題呢?

預先感謝您

回答

0

首先,我要說的是,你需要去(在某種程度上)對EMF的工作方式。使用EMF,您可以定義一些模型來定義一些概念(我們稱之爲「元模型」)及其實例(讓我們稱之爲「模型」)。你想要的是一個包含模型元素和元模型元素的模型。模型中可能出現的概念需要在元模型中定義,但元模型只是一個常規模型。在標準的EMF工作流程中,它只是Ecore(元)模型的一個實例,而Ecore本身也僅僅是一個EMF模型的實例。所以,你有這樣的情況:

M2.xmi --instanceof - > M2.ecore --instanceof - > Ecore.ecore --instanceof - > Ecore.ecore ...

而你要在M2.xmi中操作M2.ecore中定義的概念實例和Ecore.ecore中定義的概念實例(其中一個實例是M2.ecore模型)。

可以創建你M2.ecore模型包含的概念,例如屬性「myMetaEntity」引用來自Ecore.ecore的概念。在ecore編輯器中,右鍵點擊「加載資源」,然後從「註冊包」中選擇並選擇「http://www.eclipse.org/emf/2002/Ecore」和「確定」。一旦「導入」,您可以創建對Ecore.ecore模型中元素的引用,例如,您可以使用類型「EClass」創建屬性myMetaEntity。然後,您可以用它來從M2.ecore模型引用的EClass,但請記住,在M2.ecore定義這個屬性可以接受的,甚至從M3.ecore或XYZ.ecore了「的EClass」概念的任何實例。

如果你只是想從一個實例到它的元類的鏈接,你可以使用方法「eClass()」,但如果你真的想在實例元素和元類之間創建「複雜」的鏈接,可以創建一個元模型從元元模型導入概念(我討厭這個名字這麼多...),這裏Ecore.ecore,獲得的機會操作既但它也打開了某種「潘多拉的盒子」,因爲你可以不要說「只有當這些概念來自M2.ecore時,你才能操縱在Ecore.ecore中定義的概念實例」。

如果你知道自己在做什麼,或者如果你的用戶(或任何不熟悉這個問題微妙之處的人)不會操縱這個,因爲你會給他們一個API /一個用戶界面或其他東西,你很好,但保持記住,你想做一些概念上的棘手(但EMF在技術上很容易)。