2017-05-01 16 views
2

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

답변

0

Ecore에서 OCL을 사용하려면 OCLinEcore 편집기를 사용하면 훨씬 쉽게 작업 할 수 있습니다.

createOCLHelper의 인수는 유형 시스템, 즉 메타 모델을 식별합니다. 제약 조건은 이러한 유형의 인스턴스에서 검사됩니다. 즉 귀하의 모델입니다.

감사

에드 Willink