2013-10-31 3 views
3

메타 모델 인 UML 클래스 다이어그램을 입력으로 사용하여 사용자가 메타 모델에 지정된 유형의 다이어그램을 만들 수있는 과정을위한 Java 프로그램을 작성 중입니다. 그러면 사용자는이 다이어그램이 모델링 한 것의 인스턴스를 모델링 할 수 있어야합니다.Java에서 구문 분석 OCL?

마찬가지로 UML을 나타내는 생성 된 XML 파일을 구문 분석하고 모든 클래스와 연결을 추출합니다. 여태까지는 그런대로 잘됐다.

하지만 사용자가 위반해야 할 제약 조건이 있습니다. 그러나 OCL 파싱을 수행하는 방법을 알지 못합니다. 나는 dresden OCL 을 들여다 보았지만, 실행 중에 OCL을 파싱 할 필요가 있기 때문에 이것이 원하는지 확실하지 않습니다. 모델을 가져오고 Eclipse를 사용하여 OCL에서 Java 코드를 생성하는 것과 반대입니다.

그렇기 때문에 누군가 OCL을 구문 분석하고 기본 구문을 추출하는 방법을 가르쳐 주시면 감사하겠습니다.

최고 감사합니다, 주앙 페르난데스

답변

4

Eclipse OCL project은 독립 실행 형 (Eclipse의 자바 프로그램)을 제공하며이를 수행하는 방법은 documentation and examples입니다.

는 특히, 대한 다음 링크를 참조하십시오

일부 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); 
    } 
} 
+0

많은 감사를, 나는 지금 자신을 처리 할 수 ​​있다고 생각합니다 :) – JSFernandes

+0

링크를 직접 게시하는 것이 좋습니다. 어느 날 goo.gl이 서비스를 중단하는 경우 – beenotung

1

이클립스 OCL 구성 요소와 사용 (이 모델/인스턴스 메타 모델/모델의 규칙들을 만족 여부를 평가하는 검증 기능을 제공합니다)를 살펴 보자 도구 (표현의 효과를보기 위해 인스턴스 세트에서 OCL 표현식을 평가하도록하여 OCL을 사용하여 사람들이 놀고 배울 수있게하는 목적으로 특별히 작성되었습니다). 둘 다 오픈 소스입니다.