【发布时间】:2017-03-24 17:40:30
【问题描述】:
我需要检查模型是否触发了一个或多个 OCL 约束。 模型存储在 XMI 中,加载了 EMF。 OCL 约束是自动生成的(字符串等)。
我找到了一种检查 EObject 约束的方法
helper.setContext(ecClass);
query = helper.createQuery(expression);
Object o = ocl.check(eo, invariant);
o 然后包含结果:真或假。
我是否必须“手动”检查模型的每个对象,或者是否有方法、方法或类可以直接(而且可能更有效)?
请注意: - 没有建模信息是硬编码的:元模型、模型和 OCL 以最通用的方式进行操作, - 我在一个独立的软件上工作:所有的罐子都是专门添加的。我尝试过使用 DresdenOCL,但我不知道为什么包的注册很麻烦。
【问题讨论】:
-
你的意思是“违反”通过“火灾”?您是否需要从 Java 代码触发 OCL 验证?后一个问题是因为如果您不介意使用 Eclipse,那么验证很容易实现,并且您可以使用 OCL 中的通用量化来测试给定类的所有实例。
-
是的,我的意思是“违反”(但这个词有点重)。而且,不,我不介意不使用 Eclipse。单机听起来更容易在计算器上执行(不过我可能错了)。
-
我不明白您在原始问题中所说的“注册软件包很麻烦”是什么意思。另外,我不明白您所说的“更容易在计算器上执行”是什么意思。你会详细说明吗?我可以写一个答案,展示如何使用 Eclipse 评估 Ecore 模型实例的 OCL 约束,使用一个简单的虚拟示例(例如检查所有汽车实例是否有 4 个已安装的轮胎)。另一种选择是让您分享您拥有的一些模型(和相应的 Ecore 模型)以及一些 OCL 约束——我可以根据它写一个答案。
-
以编程方式自动学习 OCL 规则,我不使用 GUI 插件或 Eclipse“集成”来允许我独立执行。个人卫生问题。
-
以编程方式自动学习 OCL 规则,我不使用 GUI 插件或 Eclipse“集成”来允许我独立执行。个人卫生问题。关于“注册包”,在 Eclipse 中寻找建模框架中的“注册元模型”按钮是一个运行噱头。以编程方式,我做到了,但我仍然不完全确定它是如何工作的——但这工作正常并且经受住了测试台的考验。为了回答我的问题,我在可以应用它们的地方执行 OCL 规则(我对使用高阶模式所做的信息)。希望你明白我的意思。