ecore 사용자 모델을 기반으로 OCL 조건을 사용하려고합니다. 첫 번째 질문은이 컨텍스트에서 OCL 조건을 사용할 수 있는지 여부입니다. 따라서 특별한 경우 사용자는 자체 작업, 시퀀스 흐름, 변수 등을 사용하여 자체 모델을 만들 수 있습니다. 사용자는 런타임에서 자신의 OCL 조건을 정의 할 수도 있습니다. 여태까지는 그런대로 잘됐다.usermodels의 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);