매핑 문서의 확장에 의한 XML 상속
문서 매핑 Mendix 연결하는 데 도움이 됩니다 Mendix 외부 웹 서비스와 같은 다른 시스템에 앱을 추가합니다. Mendix 6.1 매핑 문서가 상당히 개선되었으며 이에 대한 내용은 다음에서 읽을 수 있습니다. 이 블로그 게시물.
매핑 문서에서는 다음 사이의 번역 방법을 정의합니다. Mendix 객체와 XML 스키마 또는 WSDL 문서를 기반으로 하는 XML. 이러한 스키마는 다른 complexType의 확장으로 complexType을 정의하여 상속 관계를 포함할 수 있습니다. 이를 XML 상속이라고 하며 이것이 이 블로그 게시물의 주제입니다.
Mendix 오랫동안 XML 상속을 부분적으로 지원했지만 버전 6.1에서는 완전히 지원됩니다. 이는 널리 사용되는 일부 표준이 XML 상속을 사용하기 때문에 중요합니다(예: 거래 파트너 간 보험 데이터의 전자 교환을 위한 ACORD 전자 데이터 표준).
이제부터 XML 스키마에 정의된 것과 유사한 도메인 모델의 상속 구조에 매핑해야 합니다. 또한 매핑하려는 하위 유형을 결정해야 합니다. 이러한 변경 사항으로 인해 이제 가져오기 및 내보내기 매핑에서 특정 부모 유형의 혼합 목록을 지원할 수 있습니다. 이 문서에서는 새로운 기능을 사용하는 방법을 설명합니다.
1. XML 상속 예제
이 글에서는 다음의 XML 스키마를 예로 들어 설명하겠습니다.
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="https://www.w3.org/2001/XMLSchema">
<xsd:complexType name="PersonType" abstract="true">
<xsd:sequence>
<xsd:element name="Name" type="xsd:string"/>
<xsd:element name="Address" type="xsd:string" minOccurs="0" />
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="CustomerType">
<xsd:complexContent>
<xsd:extension base="PersonType">
<xsd:sequence>
<xsd:element name="Company" type="xsd:string"/>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="EmployeeType">
<xsd:complexContent>
<xsd:extension base="PersonType">
<xsd:sequence>
<xsd:element name="Salary" type="xsd:int"/>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:element name="root">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Person" type="PersonType" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
이 스키마에는 'PersonType' 유형의 Person이라는 요소가 하나 있는 루트 요소가 있으며, 이 요소는 한 번 이상 발생합니다. 'PersonType'은 추상 유형으로, 'PersonType' 유형의 객체를 만들 수 없습니다. 'PersonType'을 확장하는 두 가지 유형이 있습니다. 'EmployeeType'과 'CustomerType'입니다. 따라서 이 XML 스키마에 따라 유효한 XML은 최소한 하나의 항목이 있는 고객과 직원의 혼합 목록입니다. 직원, 고객 및 다른 직원의 3개 항목이 있는 XML 예는 아래와 같습니다.
<?xml version="1.0" encoding="UTF-8"?>
<root>
<Person xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xsi:type="EmployeeType">
<Name>employee1</Name>
<Address>somewhere</Address>
<Salary>12</Salary>
</Person>
<Person xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xsi:type="CustomerType">
<Name>customer1</Name>
<Address>somewhereElse</Address>
<Company>companyA</Company>
</Person>
<Person xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xsi:type="EmployeeType">
<Name>employee2</Name>
<Address>somewhereElseAltogether</Address>
<Salary>12000000</Salary>
</Person>
</root>
XML에서 직원과 고객은 'Person' 태그에 있으며 xsi:type 속성을 지정하여 유형을 지정합니다. 이들은 공통된 이름과 주소 속성을 가지고 있으며 XML 스키마에 지정된 대로 각각 급여와 회사로 이를 확장합니다.
2. 선택 요소 화면에서의 XML 상속
XML 스키마에 대한 매핑을 만들려면 Mendix, 먼저 XML 스키마 문서를 만들고 XML 스키마를 가져옵니다. 그런 다음 가져오기 또는 내보내기 매핑 문서를 만들고 "요소 선택"을 클릭합니다. 그런 다음 요소 선택 화면에서 XML 스키마를 선택하면 그림 1에 표시된 화면이 표시됩니다.

그림 1. 예제 XML 스키마를 사용한 내보내기 매핑을 위한 요소 선택 화면
선택 트리에서 세 가지 수준을 볼 수 있습니다. 첫째, '루트' 수준이 있습니다. 둘째, XML 스키마에서 이름이 Person이고 유형이 'PersonType'인 요소를 나타내는 상속 수준이 있습니다. 세 번째 수준에서는 허용되는 'PersonType'의 모든 하위 유형이 표시됩니다. 이 경우 'CustomerType'과 'EmployeeType'을 의미합니다. 'PersonType'이 XML 스키마에서 추상이 아니었다면 여기에서도 사용할 수 있었을 것입니다. 여기에서 선택한 모든 유형은 매핑 문서에 표시됩니다. 매핑에 포함한 각 유형은 마이크로플로에서 매핑을 호출할 때 내보내거나 가져옵니다(문서 유형에 따라 다름). 선택하지 않기로 선택한 유형의 객체는 자동으로 무시됩니다. 따라서 현재 선택은 'CustomerType' 유형의 사람만 내보내고 'EmployeeType' 유형의 사람은 내보내지 않습니다. 마찬가지로 현재 선택이 가져오기 매핑에 대해 이루어졌다면 'EmployeeType' 유형의 들어오는 XML에 있는 모든 객체는 매핑에서 무시되었을 것입니다.
그림 1에서 여러 요소가 체크되어 있고 체크박스가 비활성화되어 있기 때문에 체크 해제할 수 없는 것을 볼 수 있습니다. 루트 및 상속 노드의 경우 이는 필수이므로 사실입니다. 즉, 정확히 한 번(루트) 또는 최소한 한 번(상속) 발생해야 합니다. 'CustomerType'의 경우 선택된 모든 상속 노드에 대해 최소한 하나의 자식 노드를 선택해야 하기 때문입니다. 'EmployeeType' 노드도 선택하면 'CustomerType'의 체크를 해제할 수 있습니다(그림 2 참조).

그림 2. 요소 선택 화면: 'EmployeeType'도 선택됨
3. 내보내기 매핑의 XML 상속
이전 섹션에 표시된 선택 화면에서 모든 요소를 선택하고 '확인'을 누르면 그림 3에 표시된 내보내기 매핑 문서가 표시됩니다.
그림 3. 상속 요소가 있는 빈 내보내기 매핑
수출 매핑은 어떻게 작동합니까? 수출 매핑의 목표는 다음을 번역하는 것입니다. Mendix 객체를 XML 문서(또는 XML 문서의 일부)로 가져옵니다. 그림 3의 오른쪽에서 선택 요소 화면에서 선택한 요소를 볼 수 있습니다. 이것은 우리가 만들고자 하는 XML 구조입니다. 왼쪽에서 해당 XML 구조를 만드는 데 사용해야 하는 엔터티와 속성을 지정하고 이를 가져오는 방법을 지정해야 합니다. 커넥터 메뉴에서 자리 표시자에 엔터티(도메인 모델에 정의됨)를 끌어서 엔터티를 선택할 수 있습니다. 그런 다음 끌어온 엔터티를 두 번 클릭하고 연관 또는 마이크로플로로 객체를 가져오도록 선택하고 Mendix 끌어온 엔터티는 XML 요소의 어떤 속성에 매핑되어야 합니까? 내보내기 매핑을 구성하는 방법은 다음에서 더 자세히 설명합니다. 이 블로그 게시물의 4장 매핑 문서.
상속 매핑 요소에 대해 이 모든 것이 어떻게 작동하는지 보여드리기 위해 예제에 대한 내보내기 매핑을 완료하는 과정을 안내해드리겠습니다. 먼저 사용할 도메인 모델에 대한 그림 4를 참조하세요. 그림에서 'Person' 엔터티에 대한 1..* 연결이 있는 'Collection' 엔터티를 볼 수 있습니다. 'Person' 엔터티에는 'name'과 'Address'라는 두 개의 문자열 속성이 있습니다. 마지막으로 'Person'을 일반화로 사용하는 두 개의 엔터티 유형이 있습니다. 정수 속성 'Salary'가 있는 'Employee'와 문자열 속성 'Company'가 있는 'Customer'입니다.
그림 4. 예제의 도메인 모델
이제 도메인 모델의 엔티티를 내보내기 매핑의 XML 요소와 연결할 것입니다. 최종 결과는 그림 5에 나와 있으며 아래에서 설명하겠습니다.
그림 5. 완성된 내보내기 매핑
마이크로플로에서 내보내기 매핑을 호출하면 다음을 전달합니다. Mendix XML로 변환할 개체입니다. 이 엔터티의 유형은 다음과 같아야 합니다. Mendix 매핑 문서의 루트에 매핑하도록 선택한 개체입니다. '컬렉션' 엔터티를 거기에 끌어왔으므로 이 매핑을 호출할 때 다음을 전달해야 합니다. Mendix '컬렉션' 유형의 객체. 매핑이 호출되면 '루트'라는 XML 요소가 생성됩니다. 다음 수준은 'PersonType' 유형의 상속 요소입니다. 여기에 'Person' 엔터티를 끌어왔습니다. 상속 수준 매핑 요소는 XML 요소를 생성하지 않기 때문에 일반 매핑 요소와 다릅니다(이 수준에는 화살표가 그려지지 않음). 대신 이 XML 요소에 허용되는 모든 하위 유형에 대한 공유 부모 유형을 지정하는 데 사용됩니다. 이 예에서 'Person' 엔터티를 끌어온 이유는 이것이 'CustomerType' 및 'EmployeeType' XML 요소에 매핑하기 위해 그 아래로 끌어온 'Employee' 및 'Customer' 엔터티의 부모이기 때문입니다.
상속 매핑 요소를 일반 매핑 요소와 다르게 만드는 또 다른 점은 객체를 얻는 방법만 구성한다는 것입니다. 이 예에서 우리는 'Person_Collection' 연결을 통해 객체를 얻습니다. 우리는 상속 매핑 요소를 두 번 클릭하여 도착하는 그림 6에 표시된 화면에서 이를 구성했습니다.
그림 6. 상속 매핑 요소에 대한 개체 가져오기
상속 수준 매핑 요소는 XML 요소를 생성하지 않기 때문에 여기서는 어떤 속성도 매핑하지 않습니다. 그것은 단지 허용된 모든 하위 유형에 대한 객체와 부모 유형을 얻는 방법을 지정하기 위해 있습니다. 그 하위 유형에 대한 매핑 요소에서는 그 반대입니다. 거기에서는 상속 수준 매핑 요소에 이미 구성되어 있기 때문에 객체를 얻는 방법을 지정할 필요가 없습니다. 그러나 해당 유형의 각 객체에 대해 실제 XML 요소가 생성되기 때문에 속성이 매핑되는 방법을 지정해야 합니다. 이 예에서 컬렉션의 모든 'Customer'에 대해 'Customer'의 'Name', 'Address' 및 'Company'를 사용하여 'CustomerType' XML 요소가 생성됩니다. Mendix 객체. 모든 '직원'에 대해 '직원'의 '이름', '주소' 및 '급여'를 사용하여 '직원 유형' XML 요소가 생성됩니다. Mendix 객체. 그림 7에 표시된 화면에서 이를 구성했는데, 이는 'CustomerType' 매핑 요소를 두 번 클릭하여 도착합니다.
그림 7. 'CustomerType' XML 요소에 대한 속성 매핑
4. 가져오기 매핑에서의 XML 상속
가져오기 매핑에 대한 예제 XML 스키마에서 모든 요소를 선택하면 그림 8에 표시된 가져오기 매핑 문서가 표시됩니다.
그림 8. 상속 요소가 있는 빈 가져오기 매핑
가져오기 매핑은 내보내기 매핑과 비슷해 보이지만 몇 가지 중요한 차이점이 있습니다. 첫째, 화살표는 오른쪽에서 왼쪽으로 가리키며 XML 요소가 시스템에 들어와 변환됨을 나타냅니다. Mendix 객체입니다. 이 때문에 구성이 내보내기 매핑과도 다릅니다. 먼저, 다시 도메인 모델(그림 4 참조)의 엔티티를 가져오기 매핑의 XML 요소와 연결했습니다. 최종 결과는 그림 7에 나와 있으며 아래에서 설명하겠습니다.
그림 9. 완성된 가져오기 매핑
그렇다면 가져오기 매핑은 무엇을 합니까? 들어오는 XML 요소를 가져와서 변환합니다. Mendix 객체. XML 요소가 들어오면 객체를 얻는 세 가지 방법이 있습니다. "새 객체 만들기", "키로 찾기" 및 "마이크로플로우 호출"입니다. 그림 9에서 세 가지 레벨 각각에 대한 화살표 위에 "새 객체 만들기"가 표시됩니다. Mendix 객체를 얻어야 합니다. 즉, 새 빈 객체를 생성해야 합니다. Mendix 매핑의 다음 단계를 계속하기 전에 객체입니다. 그런 다음 속성이 획득한 객체에 매핑됩니다. Mendix 매핑에서 구성한 대로 객체를 지정합니다(그림 7과 유사한 화면). 마지막으로 부모 객체에 대한 연결을 설정하도록 선택할 수 있습니다. 가져오기 매핑을 구성하는 방법은 다음에서 더 자세히 설명합니다. 이 블로그 게시물의 3장 매핑 문서.
내보내기 매핑과 마찬가지로 상속 수준 매핑 요소는 일반 매핑 요소와 다릅니다. 상속 수준 요소의 자식에 대해서만 객체를 얻는 방법("새 객체 만들기", "키로 찾기" 또는 "마이크로플로우 호출")과 XML 요소에서 속성이 매핑되는 방법을 지정해야 합니다. Mendix 객체. 이것은 상속 수준 요소에 대한 화살표를 그리지 않음으로써 그림 9에서 시각화됩니다. 획득한 요소에 어떤 연관을 설정해야 하는지 여부와 설정해야 하는 연관 Mendix 그러나 'Customer' 및 'Employee' 유형의 가져온 객체는 XML 스키마에 맞게 동일한 컬렉션에 포함되어야 하기 때문에 객체는 상속 매핑 요소에서 구성됩니다.
5. XML 상속 및 '자동 매핑'을 사용하여 매핑 채우기
새 매핑 문서를 만들 때 처음에 XML 요소를 엔터티, 연관 및 속성과 연결하는 것은 매우 번거로울 수 있습니다. Map automatic helper 기능은 도메인 모델 엔터티와 연관을 찾거나 만들고 매핑에 추가하여 많은 수동 작업을 덜어줌으로써 이 작업을 도와줍니다. 이 도우미 기능은 상속과도 작동하며 도메인 모델에서 필요한 상속 구조를 만듭니다. 기존 도메인 모델이 일부 있는 경우 엔터티의 지속성 동작에 영향을 미치는 경우 엔터티 일반화를 자동으로 만들지 않습니다. 따라서 "Map automatic" 기능을 사용한 후에도 일부 작업이 남아 있을 수 있습니다. 자세한 내용은 다음을 참조하세요. 자동으로 지도 만들기 설명서의 섹션.
6. XML 상속을 사용하여 XML 스키마가 있는 기존 프로젝트 변환
이 섹션에서는 XML 상속을 사용하여 이전 프로젝트를 업그레이드하는 방법에 대해 설명합니다. Mendix 6.1. 이를 위해 먼저 예제 XML 스키마에 대한 도메인 모델(그림 10 참조), 내보내기 매핑(그림 11 참조) 및 내보내기 매핑(그림 11 참조)이 어떻게 보일 수 있는지 보여드리겠습니다. Mendix 6.0 및 이전 버전.
그림 10. 예를 들어 XML 스키마의 도메인 모델 Mendix 6.0
그림 11. 예제 XML 스키마에 대한 내보내기 매핑 Mendix 6.0
그림 12. 예제 XML 스키마에 대한 가져오기 매핑 Mendix 6.0
이 그림에서 컬렉션 엔터티에 '고객'과 '직원'(추상 '사람' 엔터티 없음)과 두 개의 별도 연결이 있고 상속 수준에 대한 추가 수준이 매핑에 존재하지 않는다는 것을 알 수 있습니다. 이 프로젝트를 열 때 Mendix 6.1 그림 13에서 일관성 오류가 나타난 것을 볼 수 있습니다.
그림 13. 프로젝트를 업그레이드한 후의 일관성 오류 Mendix 6.1
이를 해결하려면 먼저 첫 번째 두 일관성 오류를 마우스 오른쪽 버튼으로 클릭하고 "스키마에서 업데이트하여 해결"을 클릭하여 매핑을 XML 스키마와 다시 정렬합니다. 그러면 가져오기 매핑이 그림 14와 같이 업데이트되고 내보내기 매핑이 그림 15와 같이 업데이트됩니다.
그림 14. 스키마에서 업데이트한 후의 가져오기 매핑
그림 15. 스키마에서 업데이트한 후 매핑 내보내기
남아 있는 일관성 오류는 다음을 수행하여 해결할 수 있습니다. 먼저 '컬렉션'과 단일 연관 관계를 갖는 '직원' 및 '고객'('사람')에 대한 일반화 엔터티를 도입하여 그림 4와 유사하도록 도메인 모델을 업데이트합니다. 더 이상 '직원_컬렉션' 및 '고객_컬렉션' 연관 관계가 필요하지 않습니다. 그러나 앱에 기존 데이터가 있고 이를 보존하려는 경우 도메인 모델에서 연관 관계를 변경할 때 데이터를 마이그레이션해야 한다는 점을 명심하세요. 마지막으로 가져오기 및 내보내기 매핑에서 '사람' 엔터티를 빈 자리 표시자로 끌어다 놓으면 일관성 오류가 해결됩니다. 그림 5 및 9와 같은 매핑이 됩니다.
상속 요소의 하위 유형이 하나만 선택된 상황에서는 도메인 모델을 변경하기 위한 위의 단계를 피하는 요령이 있습니다. 예를 들어 '요소 선택' 대화 상자에서 'CustomerType'만 선택된 경우 일반화('Person' 엔터티)를 만들 필요가 없으며 대신 상속 수준에서 'Customer' 엔터티를 사용할 수 있습니다. 이는 'Customer'가 'Customer'이고 'Customer'의 특수화가 필요한 다른 하위 유형이 선택되지 않았기 때문에 가능합니다. 이와 같이 생성된 내보내기 매핑은 그림 16에 나와 있습니다.
그림 16. 'CustomerType'만 선택된 내보내기 매핑













