2016-11-10 343 views
2

我需要檢查模型是否觸發一個或多個OCL約束。 模型存儲在XMI中,加載EMF。 OCL約束是自動生成的(String或類似的)。模型OCL評估與對象評估

我找到了一種方法來檢查約束上的EObject

helper.setContext(ecClass); 
query = helper.createQuery(expression); 
Object o = ocl.check(eo, invariant); 

Ô則包含了結果:true或false。

我是否必須'手動'檢查模型的每個對象,還是有一種方法,一種方法或類可以直接(或可能更有效)?

需要注意的是: - 無建模信息是硬編碼:元模型,模型和OCL最通用的方式被操縱, - 我在一個獨立的軟質工作:所有的罐子都特意增加了。我試過使用DresdenOCL,但我不知道爲什麼註冊這些軟件包很麻煩。

+0

你的意思是「違反」「火災」? 您是否需要從Java代碼觸發OCL驗證?後一個問題是因爲如果您不介意使用Eclipse,那麼驗證很容易實現,您可以在OCL中使用通用量化來測試給定類的所有實例。 –

+0

是的,我的意思是「違反」(但這個詞有點沉重)。不,我不介意使用Eclipse。 Standalone聽起來更容易在計算器上執行(但我可能是錯的)。 –

+0

我不明白你的原始問題中「註冊軟件包是否麻煩」。另外我不明白你的意思是「容易在計算器上執行」。你會詳細說明嗎?我可以寫一個答案,在這個答案中,我使用一個簡單的虛擬示例(例如檢查汽車的所有實例有4個裝載的輪胎),展示如何使用Eclipse評估對Ecore模型實例的OCL約束。另一種選擇是讓你分享你擁有的一些模型(和相應的Ecore模型)以及一些OCL限制 - 我可以根據這個來寫一個答案。 –

回答

0

根據您的要求(檢查對象的時間和地點),您可以嘗試使用通知和/或向自己的擴展EMF EObject的EObject實現添加一些邏輯。

+0

這或多或少是我所做的:一個接一個地檢查它們的對象循環。由於我不一定需要檢查它們,所以這個版本實際上工作得很好。 –