OCL解析器提供了两个类用于解析ocl表达式,分别是OCLHelper和OCL:
OCLHelper接口的设计直接用于解析表达式,而OCL则作为解析的切入点。
OCL的解析首先要为其创建一个环境,如:是基于UML模型的还是基于ECore模型的。
可通过在构造函数中指定相应的EnvironmentFactory来实现,如:
OCL<?, EClassifier, ?, ?, ?, ?, ?, ?, ?, Constraint, EClass, EObject> ocl;
ocl = OCL.newInstance(EcoreEnvironmentFactory.INSTANCE);//ECore环境
在OCL类中声明了两个方法getEnvironment()和getEvaluationEnvironment()分别用于获取模型的根环境和评估环境,这两个环境是由EnvironmentFactory接口创建的。
在根环境中可以嵌套一些子环境用于定义package的命名空间,以此获取package的上下文,先看一段简单的OCL描述: