我正在研究一个java应用程序,它将一组有效模型和一组无效模型作为输入,自动生成OCL约束,我的目标是检查模型是否违反约束或否。
我在这个主题上找到了答案,但参数不是很清楚。
有谁知道我应该做什么而不是" EXTLibraryPackage.Literals.LIBRARY"
//创建一个OCL助手对象 OCLHelper助手= ocl.createOCLHelper();
// set the OCL context classifier
helper.setContext(EXTLibraryPackage.Literals.LIBRARY);
Constraint invariant = helper.createInvariant(
"books->forAll(b1, b2 | b1 <> b2 implies b1.title <> b2.title)");
OCLExpression<EClassifier> query = helper.createQuery(
"books->collect(b : Book | b.category)->asSet()");
答案 0 :(得分:0)
OCL在模型上定义表达式,您必须为其提供元模型,以便OCL了解您的类型系统。 EXTLibraryPackage.Literals.LIBRARY是对EXTLibrary示例根目录下的genmodeled Package的引用。
要重复使用相同的样式,您应该对模型进行模型化并引用相应的EPackages。
然而,以这种方式以编程方式使用OCL远非唯一或最好的方式。如果您有模型,则可以在Sample Ecore Editor中加载模型并在那里进行验证。请参阅Eclipse OCL文档的验证方面。您甚至可以将OCL转换为Java,以避免在解释器中执行OCL的成本。