微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

用Java解析OCL?

我正在为一门课程编写一个Java程序,该程序将一个UML类图(一个元模型)作为输入,并允许用户创建元模型中指定类型的图表.然后,用户应该能够对该图表建模的实例进行建模.

因此,我正在解析生成的表示UML的XML文件提取所有类和关联.到现在为止还挺好.

但是,当用户违反这些限制时,我需要知道并存在约束.但是,我不知道如何进行OCL解析.我已经调查了dresden OCL
但我不确定这是否是我想要的,因为我需要在运行时解析OCL,而不是导入模型并使用eclipse从OCL生成Java代码.

因此,如果有人能指出我解析OCL并提取其基本语法的方法,我真的很感激.

最好的祝福,
若昂费尔南德斯

解决方法:

Eclipse OCL project提供独立使用(只是Eclipse中的一个java程序),并且有一些关于如何执行它的documentation and examples.

具体来说,请参阅以下链接

>如何以编程方式创建和评估OCL constraints and queries in java.
>如何在standalone mode中使用Eclipse OCL
>如何download OCL.在该维基中,您有一些其他有用的信息,这些信息不在Eclipse帮助中.

从帮助中获取的一些Jave API用法示例公开了如何创建和评估不变量和查询

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);

List<Library> libraries = getLibraries();  // hypothetical source of libraries
// only print the set of book categories for valid libraries
for (Library next : libraries) {
   if (constraintEval.check(next)) {
      // the OCL result type of our query expression is Set(BookCategory)
      @SuppressWarnings("unchecked")
      Set<BookCategory> categories = (Set<BookCategory>) queryEval.evaluate(next);

      System.out.printf("%s: %s%n", next.getName(), categories);
   }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐