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>
string タイプがこの共用体の最初のメンバーである場合は、決して情報が損失しないことに注意してください。また、この共用体は、xsi:type 以外のアルゴリズムで常に選択されるすべてのデータも保持できます。string 以外のタイプを使用する場合は、XML の中で xsi:type を使用するか、XSD でメンバー・タイプの順序を変更して、他のメンバーがデータを受け入れられるようにする必要があります。