XSD에서 유니온은 구성원으로 알려진 여러 단순 데이터 유형의 렉시칼 영역을 병합하는 방법입니다.
다음 XSD 예제는 정수 및 날짜 구성원을 가진 유니온을 표시합니다.
<xsd:simpleType name="integerOrDate"> <xsd:union memberTypes="xsd:integer xsd:date"/> </xsd:simpleType>
이러한 다중 입력은 직렬화 해제 중 및 데이터 조작 시 혼란을 일으킬 수 있습니다.
비즈니스 오브젝트는 SDO가 직렬화 시 xsi:type을 사용하도록 지원하며 XML 데이터에 xsi:type이 없는 경우에는 직렬화 해제 시 유형을 판별하는 데 사용되는 것과 동일한 알고리즘을 따릅니다.
데이터(다음 예제의 숫자 "42")가 정수로 직렬화 해제되도록 하기 위해 입력 XML에 지정된 xsi:type을 사용할 수 있습니다. 문자열 앞에 정수가 위치하도록 XSD의 유니온 구성원 목록의 순서를 지정할 수도 있습니다. 다음 예는 두 가지 메소드를 구현하는 방법을 표시합니다.
<integerOrString xsi:type="xsd:integer">42</integerOrString> <xsd:simpleType name="integerOrString"> <xsd:union memberTypes="xsd:integer xsd:string"/> </xsd:simpleType>
이와 마찬가지로 데이터를 문자열로 직렬화 해제하려는 경우에는 다음과 같이 변경하면 됩니다.
<integerOrString xsi:type="xsd:string">42</integerOrString> <xsd:simpleType name="integerOrString"> <xsd:union memberTypes="xsd:string xsd:integer"/> </xsd:simpleType>
유니온의 첫 번째 구성원이 문자열 유형인 경우에는 정보가 전혀 유실되지 않습니다. xsi:type이 아닌 알고리즘으로 항상 선택되는 모든 데이터도 보존할 수 있습니다. 문자열 이외의 유형을 사용하려면 XML에서 xsi:type을 사용하거나 XSD에서 구성원 유형을 다시 정렬하여 다른 구성원이 데이터를 승인할 수 있게 해야 합니다.