我正在尝试使用基于ecore用户模型的OCL条件。我的第一个问题是,是否可以在此上下文中使用OCL条件。因此,在我的特殊情况下,用户可以使用自己的任务、序列流、变量等创建自己的模型。用户还可以在运行时定义自己的OCL条件。到目前一切尚好。
一个简单的例子:我想创建一个条件来验证用户模型xy的变量值是否大于5。我的问题是我想评估用户模型本身的条件,而不是它的元模型。在我见过的每个代码片段中(如下所示),OCLHelper的上下文都是在一个元模型(Literals.LIBRARAY)上设置的。
我如何使用OCL条件来达到我的目的?
OCL ocl = OCL.newInstance(new PivotEnvironmentFactory());
OCLHelper helper = ocl.createOCLHelper(EXTLibraryPackage.Literals.LIBRARY);
ExpressionInOCL invariant = helper.createInvariant(
"books->forAll(b1, b2 | b1 <> b2 implies b1.title <> b2.title)");
ExpressionInOCL query = helper.createQuery(
"books->collect(b : Book | b.category)->asSet()");
// create a Query to evaluate our query expression
Query queryEval = ocl.createQuery(query);
// create another to check our constraint
Query constraintEval = ocl.createQuery(invariant);发布于 2017-07-25 17:44:45
如果您希望在Ecore中使用OCL,您可能会发现使用OCLinEcore编辑器会使工作变得容易得多。
createOCLHelper的参数标识您的类型系统,即您的元模型。在这些类型的实例上检查约束。即你的模型。
问候
艾德·威林克
https://stackoverflow.com/questions/43726711
复制相似问题