모델에서 모델로 변환 작성

모델에서 모델로 맵핑 솔루션을 여러 개의 맵핑 프로젝트에서 여러 개의 맵핑 모델로 나눌 수 있습니다. 맵핑을 사용한 모델에서 모델로 변환 작성은 맵핑 모델을 작성하는 프로세스이며 이 모델에는 한 모델에 있는 오브젝트를 다른 모델에 있는 오브젝트에 맵핑하는 방법을 설명하는 규칙이 들어 있습니다. 맵핑 모델을 작성한 후에는 소스 모델을 대상 모델로 변환하는 변환 소스 코드를 생성할 수 있습니다.

변환 작성 전제조건

주: 변환을 작성하려면 선택적 제품 컴포넌트로 패키징된 확장성 기능을 설치해야 합니다. 모델링 및 XML Developer 기능을 사용해야 합니다.

모델에서 모델로 변환 작성 프로세스

모델에서 모델로 변환 작성 프로세스는 다음 상위 레벨 단계로 구성됩니다.
  1. 맵핑 모델을 포함하는 모델에서 모델로 변환 맵핑 프로젝트(맵핑 프로젝트라고도 함)를 작성할 수 있습니다. 맵핑 프로젝트에는 여러 개의 맵핑 모델이 포함될 수 있습니다. 맵핑 프로젝트를 작성할 때 변환 서비스는 하나의 변환을 등록합니다. 각 변환에는 하나의 변환 제공자, MainTransform이라고 하는 변환 그리고 프로젝트에 있는 맵핑 선언마다 하나의 변환이 있습니다.
  2. 맵핑 선언(맵이라고도 함)을 맵핑 모델에 추가합니다. 맵핑 모델은 하나 이상의 맵핑 선언을 포함할 수 있습니다.
  3. 맵핑 모델의 맵핑 선언에 맵핑 규칙을 추가합니다.
  4. 맵핑 프로젝트의 맵핑 모델에서 변환 소스 코드를 생성합니다. 모델에서 모델로 변환 작성 도구는 맵핑 프로젝트의 맵핑 모델마다 하나의 변환을 생성합니다. 작성 도구는 맵핑 선언마다 변환을 구현하는 Java™ 소스 파일을 생성합니다. 맵핑 선언에 있는 이동 또는 사용자 정의 맵핑 규칙마다 변환 소스 코드에 규칙이 생성됩니다. 맵핑 선언에 있는 서브맵 맵핑 규칙마다 변환 소스 코드에 컨텐츠 추출기가 생성됩니다.

모델에서 모델로 변환 맵핑 프로젝트

모델에서 모델로 변환 맵핑 프로젝트(맵핑 프로젝트라고도 함)는 확장점 com.ibm.xtools.transform.core.transformationProviders를 확장하는 Eclipse 플러그인입니다. 변환 맵핑 프로젝트에서 모델에서 모델로 변환을 작성하면, 변환의 구현 세부사항을 표시하는 코드를 작성하는 대신 선택된 소스 및 대상 모델이나 메타 모델의 요소가 관련되는 방법을 지정할 수 있습니다.

맵핑 프로젝트는 둘 이상의 맵핑 파일(맵핑 모델이라고도 함)을 포함할 수 있습니다. 맵핑 모델을 수정할 때 반복적으로 변환 소스 코드를 생성할 수 있습니다. 변환 소스 코드를 생성할 때 외부에서 볼 수 있는 변환(MainTransform)이 자동으로 등록되고, 맵핑 모델에 있는 맵핑 선언마다 변환에 대한 Java 소스 코드가 생성됩니다.

맵핑 프로젝트를 작성할 때 하나 이상의 소스 및 대상 메타 모델을 지정할 수 있습니다. 파일 이름 확장자가 .ecore인 메타 모델이나 파일 이름 확장자가 .epx 또는 .uml인 UML 프로파일을 지정할 수 있습니다. 프로젝트를 작성할 때 소스 및 대상 메타 모델을 지정하는 경우 필요한 종속사항이 자동으로 플러그인 Manifest 파일에 추가됩니다. 맵핑 프로젝트를 작성한 후 편집기 영역에서 명령을 사용하여 메타 모델을 추가하는 경우 플러그인 Manifest 파일에 필요한 새 종속성을 추가해야 합니다.

맵핑 모델

맵핑 모델(맵핑 파일이라고도 함)은 맵핑되는 메타 모델에 대한 참조사항이 있는 EMF(Eclipse Modeling Framework) 메타 모델(Ecore 모델이라고도 함)의 인스턴스입니다. 맵핑 프로젝트를 작성할 때 작성 도구는 사용자가 지정하는 입력 및 출력 모델을 사용하여 프로젝트에서 맵핑 모델을 작성합니다. 맵핑 프로젝트에는 하나 이상의 맵핑 모델이 있습니다. 맵핑 모델의 파일 이름 확장자는 .mapping입니다. 프로젝트에서 여러 개의 맵핑 모델을 작성하면 다른 맵핑 프로젝트에서 맵을 다시 사용할 수 있습니다. 이 기능은 여러 개의 맵핑 모델이 여러 개의 맵핑 프로젝트에 있는 대규모 맵핑 솔루션에 유용합니다.

맵핑 모델은 XML 파일로 저장되고 직렬화됩니다. 문제점 보기는 맵핑 모델에 대한 자세한 오류 정보를 표시합니다. 이 보기에서, 항목을 두 번 클릭하여 문서 편집기에서 맵핑 모델을 열고 오류를 포함하는 행을 보십시오. 이 문제점 해결 방법은 편집기 영역에서 맵핑 모델을 보고 문제점을 해결하는 방법보다 쉽습니다.

맵핑 선언

맵핑 선언(맵이라고도 함)은 주어진 입력 오브젝트에 대한 출력 오브젝트를 작성하거나 갱신하는 방법을 지정합니다. 각각의 맵핑 선언은 맵핑 모델에 추가하는 메타 모델에서 선택하는 입력 유형과 출력 유형을 지정합니다. 맵핑 모델은 여러 개의 맵핑 선언을 포함할 수 있습니다.

맵을 작성하는 목적은 소스의 값을 기초로 대상에 값을 지정하는 것입니다. 요소 사이의 맵은 요소 사이의 데이터 교환을 허가하는 해당 속성 사이의 대응을 설정합니다. 대부분의 맵은 소스 및 대상 사이에 데이터를 추가 조작할 수 있는 기능을 제공합니다. 예를 들어, 대상에 값을 지정할 수 있는 사용자 정의 코드를 작성하여 데이터에 대한 다른 수정사항을 작성하거나 계산을 지정할 것을 선택할 수 있습니다.

맵핑 선언에는 abstract 출력 오브젝트가 포함될 수 있습니다. 이와 같은 맵핑 선언은 대상 속성에 false로 설정된 포함(containment) 특성이 있는 서브맵 맵핑 규칙에서만 상속, 확장 또는 참조될 수 있습니다. 이와 같은 대상 속성은 서브맵 맵핑 규칙에 지정된 맵핑 선언에서 상속되는 맵핑 선언에 의해 작성되는 오브젝트에 대한 참조사항으로 채워질 수 있습니다. Abstract 출력 오브젝트를 지정하는 맵핑 선언을 사용하여 오브젝트 참조사항의 작성을 단순화할 수도 있습니다.

맵핑 선언은 일반적으로 x2y 이름 지정 규칙을 따릅니다. 여기서 x는 입력 오브젝트 유형이고 y는 출력 오브젝트 유형을 나타냅니다. 예를 들어, Package2EPackage 맵핑 선언은 입력 오브젝트가 Package이고 출력 오브젝트가 EPackage인 맵핑 선언을 지정합니다.

변환 소스 코드를 생성할 때 변환 서비스는 변환을 구현하는 맵핑 모델의 맵핑 선언마다 Java 소스 파일을 생성합니다.

맵핑 선언에는 하나 이상의 맵핑 규칙이 있습니다.

맵핑 선언 상속

맵핑 선언은 다른 맵핑 선언에서 상속될 수 있습니다. 상속되는 맵핑 선언과 상속하는 맵핑 선언은 동일한 맵핑 모델에 정의되지 않아도 됩니다. 상속하는 입력 및 출력 오브젝트는 상속된 맵핑 선언에 있는 입력 및 출력 오브젝트의 부속 유형이어야 합니다(그러나 반드시 적절한 부속 유형일 필요는 없습니다). 상속하는 맵핑 선언은 상속되는 맵핑 선언에 정의되거나 이 맵핑 선언에 의해 상속되는 모든 맵핑을 상속합니다. 상속되는 맵핑 선언의 맵핑 규칙은 상속하는 맵핑 선언의 일부가 됩니다. 그러나 상속되는 맵핑 선언의 맵핑 규칙을 대체할 사용자 정의 맵핑 규칙을 작성할 수 있습니다. 또한 상속하는 맵핑 선언에서 추가 맵핑 규칙을 작성할 수도 있습니다. 상속하는 맵핑 선언에서 생성되는 변환은 상속되는 맵핑 선언에서 생성되는 변환을 확장합니다.

맵핑 규칙

맵핑 규칙(맵핑이라고도 함)은 입력 오브젝트의 속성값에 따라 출력 오브젝트의 속성에 값을 지정하는 방법을 지정합니다.

입력 및 출력 오브젝트 사이에 다음 유형의 맵핑 규칙을 작성할 수 있습니다.
이동
이동(단순 맵핑 규칙이라고도 함)은 가장 기본적인 맵핑 규칙 유형입니다. 입력 및 출력 속성은 호환 가능한 데이터 유형이어야 합니다. 입력 및 출력 속성의 Ecore EDataTypes는 같아야 합니다. 그렇지 않으면 출력 속성의 데이터 유형이 문자열이고 입력 속성의 유형은 직렬화할 수 있습니다. 입력 및 출력 속성 모두 여러 개의 값을 보유하거나 보유하지 않습니다. 예를 들어, 출력 오브젝트의 속성이 문자열이고 입력 오브젝트의 속성이 사용자 정의 코드 없이 문자열로 변환될 수 있는 경우에 이 옵션을 선택하십시오. 이 유형의 맵핑 규칙은 하나의 소스 요소나 속성 그리고 하나의 대상 요소나 속성 사이의 맵핑을 지원합니다. 이동 맵핑 규칙에 대해 생성되는 변환 소스 코드는 하나의 입력 속성값을 하나의 출력 속성에 복사하는 규칙을 구현합니다.
서브맵
서브맵은 다른 맵 내에서 하나의 맵을 호출하는 것입니다. 호출되는 서브맵은 호출하는 맵과 동일한 맵핑 파일에 정의될 수 있습니다(반드시 동일한 맵핑 파일에 정의할 필요는 없습니다.) 서브맵을 사용하면 입력 모델의 복합 유형을 출력 모델의 복합 유형에 맵핑할 수 있습니다. 작성하는 서브맵은 맵핑 파일에 있는 맵을 호출할 수 있습니다. 예를 들어, 맵핑 모델 NewMappingModel과 Package2Package 맵이 있는 OriginalMappingModel 맵핑 모델을 고려하십시오. 동작이 OriginalMappingModel의 Package2Package 맵과 동일한, 입력 패키지와 출력 패키지 사이의 맵핑을 지정하는 맵을 NewMappingModel에서 작성하려면 OriginalMappingModel에 대한 맵핑 파일을 지정하면 됩니다. 독립 맵핑 파일에서 서브맵을 정의하면 맵을 다시 사용할 수 있습니다. 그러나 여러 개의 맵핑 파일을 작성하면 프로젝트 유지보수가 증가할 수 있습니다. 서브맵은 다른 서브맵도 포함할 수 있으며 결과적으로 계층 구조가 생성됩니다.

또한 맵핑 선언의 입력 오브젝트와 출력 오브젝트 사이에 서브맵 맵핑 규칙을 작성할 수도 있습니다.

서브맵 맵핑 규칙은 다음 유형의 맵핑을 지원합니다.
  • 입력 오브젝트와 출력 오브젝트 사이, 또는 입력 및 출력 오브젝트 속성 사이의 일대일 맵핑
  • 입력 및 출력 오브젝트 속성 사이의 일대m 또는 m대일 맵핑
  • 입력 및 출력 오브젝트 속성 사이의 mn 맵핑
서브맵 규칙이 일대m 맵핑을 지정하는 경우, 생성된 변환은 싱글톤 속성에서 목록으로 오브젝트를 추가합니다. m대일 맵핑의 경우 변환은 목록에서 오브젝트를 추출하여 싱글톤 속성에 삽입합니다.

맵핑 선언에 있는 각각의 서브맵에 대해 getInputFeatureToOutputFeature_UsingMap_Extractor라고 하는 추출기가 포함하는 변환에서 생성됩니다. 여기서 InputFeature는 입력 속성의 이름을, OutputFeature는 출력 속성의 이름을, Map은 맵핑 선언의 이름을 나타냅니다.

사용자 정의
이 맵핑 유형을 사용하여 출력 특성의 값을 계산하는 사용자 정의 코드를 지정할 수 있습니다. 예를 들어, 여러 입력 오브젝트 특성의 연결과 동일하게 출력 오브젝트의 특성 값을 설정하려면 이 맵핑 유형을 선택하십시오.

Eclipse가 제공하는 OCL(Object Constraint Language) API를 사용하여 시맨틱 정제를 지정할 수 있습니다.

사용자 정의 맵핑 규칙은 다음 유형의 맵핑을 지원합니다.
  • 입력 및 출력 오브젝트 사이 또는 입력 및 출력 오브젝트 속성 사이의 일대n 맵핑
  • 입력 및 출력 오브젝트 사이 또는 입력 및 출력 오브젝트 속성 사이의 mn 맵핑
  • m대일 맵핑. 여기서 m대일은 다음 맵핑 중 하나를 나타냅니다.
    • 다중성이 m으로 설정된 단일 입력 속성에서 다중성이 1로 설정된 단일 출력 속성으로의 맵핑
    • 여러 입력 속성에서 단일 출력 속성으로의 맵핑
    • 여러 입력 오브젝트에서 단일 출력 오브젝트로의 맵핑
상속되는 맵
상속하는 맵핑 선언은 상속되는 맵핑 선언에 정의된 맵핑 규칙을 상속합니다. 다음 품질의 맵핑 규칙을 정의하여 상속되는 맵핑 규칙을 대체할 수 있습니다.
  • 입력 오브젝트 특성과 출력 오브젝트 특성은 상속되는 맵핑 규칙과 동일합니다.
  • 대체하는 맵핑 규칙과 상속되는 맵핑 규칙은 일치하는 추출기가 있는 서브맵 맵핑입니다. 그렇지 않으면 대체하는 맵핑 규칙과 상속되는 맵핑 규칙 둘 다 이동 맵핑이거나 사용자 정의 맵핑입니다.
상속되는 맵의 맵핑 규칙을 작성하는 경우 상속하려는 맵핑 규칙을 포함하는 맵핑 선언을 지정해야 합니다. 맵핑 선언에서 둘 이상의 상속되는 맵을 지정할 수 없습니다.

상속되는 맵핑 규칙과 해당되는 맵핑에서 생성되는 규칙 또는 추출기는 처리 순서에서 대체되는 맵핑 규칙 및 생성되는 규칙 또는 추출기와 동일한 상대 위치를 유지보수합니다.

맵핑 선언에 있는 이동 또는 사용자 정의 맵핑 규칙마다, 생성되는 변환 소스 코드에 규칙이 추가됩니다. 서브맵 맵핑 규칙마다 변환 소스 코드에 컨텐츠 추출기가 생성됩니다.

맵핑 규칙을 작성할 때 사용자가 선택하는 입력 및 출력 속성에 의해 해당 유형이 판별됩니다. 예를 들어, 입력 및 출력 속성이 기본 유형(예: 문자열 또는 정수)과 호환 가능한 경우 이동 맵핑 규칙이 지정됩니다. 입력 및 출력 속성이 복합 유형인 경우 서브맵 규칙이 지정됩니다. 이동 및 서브맵 모두 적절한 맵핑 규칙 유형이 아니면 사용자 정의 맵핑 규칙이 지정됩니다.

또한 입력 오브젝트와 출력 오브젝트 사이에 서브맵, 사용자 정의 또는 상속되는 맵 맵핑 규칙을 작성할 수도 있습니다.

서브맵 맵핑 규칙 동작

출력 오브젝트의 특성과 출력 오브젝트에 있는 속성의 포함(containment) 특성에 따라 서브맵 맵핑 규칙의 동작이 판별됩니다.

서브맵 구조
맵핑 선언은 하나 이상의 서브맵 정의를 포함할 수 있습니다. 각 서브맵은 (InputFeature, OutputFeature, (Map, InputElement, OutputElement))에서와 같이 값 세트로 정의됩니다. 여기서 값은 다음 표에 있는 항목을 표시합니다.
항목 표시
InputFeature 서브맵 요소에 연결된 입력 오브젝트의 컴파트먼트
OutputFeature 서브맵 요소에 연결된 출력 오브젝트의 컴파트먼트
Map 생성된 변환이 실행될 때 서브맵이 적용하는 맵핑 선언
InputElement Map 맵핑 선언이 지정하는 입력 오브젝트
OutputElement Map 맵핑 선언이 지정하는 출력 오브젝트

맵핑 모델에 대한 변환 소스 코드를 생성할 때 작성 도구는 맵핑 선언마다 Map Transform 변환을 생성합니다. 맵핑 선언에 있는 각각의 서브맵에 대해 작성 도구는 getInputFeatureToOutputFeature_UsingMap_Extractor라고 하는 컨텐츠 추출기를 생성합니다.

모델에서 모델로 변환이 실행될 때, 변환은 메타 모델에서의 기능 설정에 따라 생성된 오브젝트에 대한 참조나 오브젝트를 생성합니다. 변환이 오브젝트를 생성하는 경우 변환은 해시 맵에서 해당 오브젝트에 대한 식별 정보를 기록합니다. 변환은 해시 맵을 기초로 사후 처리 중에 오브젝트에 대한 참조를 분석합니다.

서브맵 시맨틱

맵핑 선언에서 출력 오브젝트로 지정하는 Ecore 또는 UML 메타 모델은 추상적(abstract)이거나 구체적(concrete)일 수 있습니다. 구체적 요소는 인스턴스화할 수 있지만 추상적 요소는 불가능합니다.

출력 오브젝트의 기능(속성이라고도 함)은 다른 Ecore 또는 UML 오브젝트를 포함하거나 참조할 수 있습니다. 오브젝트에 다른 오브젝트가 포함되는 경우 포함된 오브젝트는 포함하는 오브젝트가 삭제될 때 삭제됩니다. 오브젝트가 다른 오브젝트를 참조하는 경우 참조를 삭제하거나 참조의 소유자를 삭제해도 참조된 오브젝트는 삭제되지 않습니다.

다음 표는 출력 오브젝트와 출력 속성의 특성에 따른 서브맵 맵핑 규칙의 동작을 나열합니다.

출력 오브젝트 유형 출력 속성에서 포함 또는 참조 유형 서브맵 동작
추상 추상 또는 구체적 포함 이 유형의 서브맵은 지원되지 않습니다. MapTransform 변환이 오브젝트를 작성할 수 없어서 오브젝트를 OutputFeature 콜렉션에 삽입할 수 없기 때문입니다.
추상 또는 구체적 추상 또는 구체적 참조 다른 모든 규칙 및 추출기를 처리한 후, 변환은 다음 단계를 완료하여 이 유형의 서브맵을 처리합니다.
  • (MapTransform+InputItem)과 같은 검색 키를 사용하여 대상 오브젝트의 해시 맵을 검색합니다. 여기서 InputItemInputFeature 콜렉션의 오브젝트를 나타냅니다.
    주: 검색에서 정확한 일치는 필요하지 않습니다. 예를 들어, (MapTransform+InputItem)과 같은 검색 키는 키가 (MapTransform*+InputItem)과 같은 레코드를 리턴합니다. 여기서 MapTransform*은 MapTransform 변환에서 상속하는 모든 변환 세트를 나타냅니다.
    • 검색에서 TargetObject 대상 오브젝트가 리턴되는 경우, 변환은 적절한 OutputFeature 콜렉션에서 TargetObject에 대한 참조를 삽입합니다.
    • 검색에서 여러 개의 후보 오브젝트가 리턴되는 경우 변환은 서브맵 출력 필터(정의된 경우)를 적용하여 하나의 오브젝트를 선택합니다. 그러면 변환은 적절한 OutputFeature 콜렉션에서 TargetObject에 대한 참조를 삽입합니다. 서브맵이 출력 필터를 정의하지 않은 경우 변환은 검색 결과 목록에서 첫 번째 후보 오브젝트를 선택하고 적절한 OutputFeature 콜렉션에서 TargetObject에 대한 참조를 삽입합니다.
    • 검색에서 결과가 리턴되지 않으면 변환은 오류를 로깅하고 메시지를 표시합니다.
구체적 추상 또는 구체적 포함 InputFeature 콜렉션에 있는 오브젝트 InputItem마다, 변환은 다음 단계를 완료합니다.
  • MapTransform 변환을 실행하여 OutputElement 유형의 TargetObject 오브젝트를 작성합니다.
  • 오브젝트 TargetObject의 인스턴스를 OutputFeature 콜렉션에 삽입합니다.
  • 키의 형식이 (MapTransform+InputItem->TargetObject)와 같은 해시 맵에서 조치를 기록합니다.
예제

다음 예제는 변환이 사후 처리 중에 출력 오브젝트에 대한 참조를 분석하는 방법을 설명합니다.

이 예제에서, 맵핑 모델에는 다음과 같은 항목이 있습니다.
  • 입력 오브젝트와 출력 오브젝트로 UML 클래스류를 지정하는 Classifier2Classifier 맵핑 선언
  • 입력 오브젝트와 출력 오브젝트로 UML 클래스를 지정하는 Class2Class 맵핑 선언

    이 맵핑 선언은 입력 및 출력 오브젝트 사이에 상속되는 맵의 맵핑 규칙을 정의합니다. 맵핑 규칙은 이 맵핑 선언이 Classifier2Classifier 맵핑 선언에서 상속됨을 지정합니다.

생성된 변환 소스 코드에서, Class2ClassTransform 변환이 Classifier2ClassifierTransform 변환으로부터 상속한다는 점에 유의하십시오.
public class Class2ClassTransform extends Classifier2ClassifierTransform {

...
}

클래스류는 추상 유형이므로 Classifier2ClassifierTransform 변환은 오브젝트를 작성할 수 없습니다. 그러나 Class2ClassTransform 변환은 클래스가 클래스류에서 상속하여도 오브젝트를 작성할 수 있습니다.

입력 클래스 ClassA가 있는 소스 모델에 대해 변환을 실행하는 경우 Class2ClassTransform 변환은 출력 클래스 ClassB를 생성합니다. ClassB의 작성을 기록하려면, Class2ClassTransform 변환은 키가 (Class2ClassTransform+ClassA->ClassB)와 같은 해시 맵 레코드를 작성합니다.

변환이 (Classifier2ClassifierTransform+ClassA)와 키가 동일한 레코드의 해시 맵을 검색하는 경우, (Class2ClassTransform+ClassA)와 키가 동일한 레코드가 검색 결과에서 리턴됩니다. Class2ClassTransform 변환이 Classifier2ClassifierTransform 변환에서 상속하기 때문입니다.

맵핑 규칙에 대한 반복 개발의 영향

반복 개발 환경에서, 변경사항은 맵핑 모델에서 지정하는 입력 또는 출력 메타 모델에 대해 발생할 수 있습니다. 이러한 변경사항은 맵핑 선언에 지정하는 입력 및 출력 오브젝트에 영향을 줄 수 있으며, 해당되는 맵핑 규칙을 무효화할 수 있습니다.이러한 상황이 발생하면 맵핑 선언에서 맵핑 규칙을 리팩터해야 합니다. 맵핑 규칙을 리팩터할 때 맵핑 편집기가 변경된 모델과 기존 맵핑 규칙 사이에 최선의 맵핑을 수행해야 하는지 여부, 기존 맵핑 규칙을 연결이 끊어진 상태로 유지할 것인지 여부 또는 올바르지 않은 맵핑 규칙을 삭제할 것인지 여부를 지정할 수 있습니다. 다음 유형의 변경사항이 발생하면 사용자가 맵핑 선언을 리팩터해야 할 수도 있습니다.
  • 메타 모델의 URI가 변경됨
  • 맵핑 모델에 지정된 소스 또는 대상 오브젝트가 있는 메타 모델이 추가 또는 제거됨
  • 맵핑 선언의 입력 및 출력 오브젝트가 변경 또는 제거됨
  • 소스 또는 대상 모델이나 메타 모델의 오브젝트 속성이 변경되거나 제거됨
  • 입력 또는 출력 오브젝트 속성의 포함(containment) 또는 다중성(multiplicity) 특성이 변경됨

예를 들어, Package2Package 맵핑 선언이 있는 OriginalMappingModel 맵핑 모델을 고려하십시오. 맵핑 선언의 입력 오브젝트는 MyPackageDefinition 입력 메타 모델에 있고 맵핑 선언의 출력 오브젝트는 MyOtherPackageDefinition 출력 메타 모델에 속합니다. 맵핑 선언에는 둘 다 PackageName이라고 하는 두 개의 문자열 속성을 연결하는 이동 맵핑 규칙이 있습니다. MyPackageDefinition 메타 모델의 URI가 변경되면 Package2Package 맵핑 규칙이 올바르지 않게 됩니다. 다음에 맵핑 모델을 열 때 문제점 보기는 오류 메시지를 표시하고, 맵핑 편집기 영역에서 올바르지 않은 맵핑 선언에 대해 오류 장식이 표시됩니다. 올바른 입력 오브젝트를 지정하고 맵핑 편집기가 기존의 맵핑 규칙을 리팩터해야 하는 방법을 지정해야 합니다.

맵핑 규칙을 리팩터한 후에는 계속 맵핑 모델을 정제하고 변환 코드를 재생성할 수 있습니다.

병합 지원 및 옵션

변환 출력을 기존 모델에 병합할 계획이면 대상 메타 모델이 CompareMerge 컨텐츠 유형 확장을 선언해야 합니다. 변환 출력이 UML 모델인 경우 컨텐츠 유형 확장은 기본적으로 정의되므로 병합 지원을 구성하지 않아도 됩니다. 대상 모델의 메타 모델이 CompareMerge 확장을 선언하지 않는 경우 변환은 대상 모델을 겹쳐씁니다.

변환 확장성

변환 코드를 생성할 때 @generated 태그가 Java 요소(예: 클래스, 속성 및 오퍼레이션)의 주석에 추가됩니다. 태그는 특정 코드 요소가 해당 제어 하에 있음을 코드 생성기에 알립니다. 그러면 코드 생성기는 맵핑 모델에 대해 변경사항이 발생할 때 Java 요소에 대한 코드를 갱신할 수 있습니다. 변경하려는 Java 요소의 @generated 태그를 편집하거나 제거하여 변환 코드를 수정하고 확장할 수 있습니다.


피드백