XML スキーマ定義を SDO タイプ・システムにマッピングする
各 XML スキーマ・タイプは、SDO タイプにマップされます。このマッピングは、プログラムが仲介するメッセージのデータ・グラフをナビゲートするコードの作成に役立てることができます。
メディエーションによってサポートされているサービス・データ・オブジェクト (SDO) のバージョンはバージョン 1 です。
XML スキーマは、メッセージ・パーツおよび SOAP ヘッダーを記述する WSDL セクションに組み込まれている場合があります。ただし、SOAP ヘッダーの記述は、別個のスキーマとして使用される可能性が高いため、SDO リポジトリーにロードしてください。 このリポジトリー内で、ランタイムに突き合わせヘッダーが付いているメッセージを処理する場合、その記述を使用することができます。
Java クラス・マッピングに対するスキーマ
各 XML スキーマ複合タイプは、 SDO タイプにマップされます。これは、複合タイプを持つエレメントは SDO データ・オブジェクトのインスタンスによって表されることになるということを 意味しています。タイプは、スキーマ・タイプ定義に含まれる エレメント、属性またはワイルドカードごとにプロパティーを持っています。
インスタンスは、設定済みの各プロパティーの値を持ちます。 プロパティーがスキーマ複合タイプからマップされた場合、 値は別の SDO データ・オブジェクトになります。プロパティーがスキーマ・シンプル・タイプ からマップされた場合、値は以下のテーブルに示されているように Java™ クラスのインスタンスになります。
スキーマ・タイプ | Java クラス | 注意 |
---|---|---|
anyURI | java.lang.String | |
base64Binary | byte[] | 注 2 を参照 |
ブール値 | java.lang.Boolean/ boolean | 注 1 を参照 |
バイト | java.lang.Byte / byte | 注 1 を参照 |
date | java.lang.String | |
dateTime | java.lang.String | |
decimal | java.math.BigDecimal | |
double | java.lang.Double / double | 注 1 を参照 |
duration | java.lang.String | |
ENTITIES | java.util.List | |
ENTITY | java.lang.String | |
float | ava.lang.Float / float | 注 1 を参照 |
gDay | java.lang.String | |
gMonth | java.lang.String | |
gMonthDay | java.lang.String | |
gYear | java.lang.String | |
gYearMonth | java.lang.String | |
hexBinary | byte[] | 注 2 を参照 |
ID | java.lang.String | |
IDREF | java.lang.String | |
IDREFS | java.util.List | |
int | java.lang.Integer / int | 注 1 を参照 |
整数 | java.math.BigInteger | |
language | java.lang.String | |
long | java.lang.Long / long | 注 1 を参照 |
名前 | java.lang.String | |
NCName | java.lang.String | |
negativeInteger | java.math.BigInteger | |
NKTOKENS | java.util.List | |
NMTOKEN | java.lang.String | |
nonNegativeInteger | java.math.BigInteger | |
nonPositiveInteger | java.math.BigInteger | |
normalisedString | java.lang.String | |
NOTATION | javax.xml.namespace.QName | |
positiveInteger | java.math.BigInteger | |
QName | javax.xml.namespace.QName | |
short | java.lang.Short / short | 注 1 を参照 |
ストリング | java.lang.String | |
time | java.lang.String | |
トークン (token) | java.lang.String | |
unsignedByte | java.lang.Short / short | 注 1 を参照 |
unsignedInt | java.lang.Long / long | 注 1 を参照 |
unsignedLong | java.math.BigInteger | |
unsignedShort | java.lang.Integer / int | 注 1 を参照 |
- SDO は、必要に応じて自動的にプリミティブ (int、long 等) をオブジェクトに変換します。これは、ユーザーが汎用の get および set メソッドのように 特殊なメソッドの混合体 (getInt、setInt、getLong、setLong) を使用することができるということを意味します。
- バイト配列が可変の場合、 値をデータ・オブジェクト上に戻さずに更新することができます。しかし、これが起こった場合は、データ・オブジェクトは暗黙の更新を認識していない可能性があります。 バイト配列を使用する場合、通常は setBytes() メソッドを使用してデータ・オブジェクトを 明示的に更新します。
グローバル・エレメントおよび属性の使用
スキーマが SDO にマップされると、一般に「DocumentRoot」と呼ばれる特殊な SDO タイプが定義されます。 このタイプは、スキーマ内のすべてのグローバル・エレメントおよび属性用のコンテナーです。 グローバル・エレメントまたは属性用に SDO プロパティーを配置する必要があるときはいつでも、 「DocumentRoot」タイプを配置してから、適切なプロパティーをそこに配置する必要があります。
次のスキーマは、Web サービス・メッセージのレイアウトを定義しています。このスキーマを Web サービス・メッセージ用の SDO データ・グラフのマッピングにある情報と比較することによって、 活動中の SDO マッピングに対するスキーマを調べることができます。
<?xml version="1.0"?>
<xsd:schema
targetNamespace="http://www.ibm.com/ns/2004/05/webservices/messagemodel"
xmlns:tns="http://www.ibm.com/ns/2004/05/webservices/messagemodel"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<xsd:import namespace="http://schemas.xmlsoap.org/soap/envelope/"/>
<xsd:element name="Info">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="operationName" nillable="true" type="xsd:string"/>
<xsd:element name="messageName" nillable="true" type="xsd:string"/>
<xsd:element name="messageType" nillable="true" type="xsd:string"/>
<xsd:element name="headers" type="tns:HeaderEntryType" maxOccurs="unbounded"/>
<xsd:element name="attachments" type="tns:AttachmentEntryType" maxOccurs="unbounded"/>
<xsd:element name="body" type="tns:BodyType"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:complexType name="BodyType" abstract="true"/>
<xsd:complexType name="HeaderEntryType" abstract="true"/>
<xsd:complexType name="AttachmentEntryType" abstract="true"/>
<xsd:complexType name="SOAPFaultBody">
<xsd:complexContent>
<xsd:extension base="tns:BodyType">
<xsd:sequence>
<xsd:element name="faultcode" type="xsd:QName"/>
<xsd:element name="faultstring" type="xsd:string"/>
<xsd:element name="faultactor" type="xsd:anyURI" minOccurs="0"/>
<xsd:element name="detail" type="soap:detail" minOccurs="0"/>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="SOAP_1_1_HeaderEntryType">
<xsd:complexContent>
<xsd:extension base="tns:HeaderEntryType">
<xsd:sequence>
<xsd:element name="mustUnderstand" nillable="true" type="xsd:boolean"/>
<xsd:element name="actor" nillable="true" type="xsd:anyURI"/>
<xsd:any/>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="SOAP_1_1_BoundHeaderEntryType">
<xsd:complexContent>
<xsd:extension base="tns:HeaderEntryType">
<xsd:sequence>
<xsd:element name="mustUnderstand" nillable="true" type="xsd:boolean"/>
<xsd:element name="actor" nillable="true" type="xsd:anyURI"/>
<xsd:element name="messagePart" type="xsd:string"/>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="MIMEAttachmentEntryType">
<xsd:complexContent>
<xsd:extension base="tns:AttachmentEntryType">
<xsd:sequence>
<xsd:element name="contentType" type="xsd:string"/>
<xsd:element name="contentTransferEncoding" type="xsd:string"/>
<xsd:element name="contentId" type="xsd:string"/>
<xsd:element name="data" type="xsd:base64Binary"/>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="BoundMIMEAttachmentEntryType">
<xsd:complexContent>
<xsd:extension base="tns:AttachmentEntryType">
<xsd:sequence>
<xsd:element name="contentType" type="xsd:string"/>
<xsd:element name="contentTransferEncoding" type="xsd:string"/>
<xsd:element name="contentId" type="xsd:string"/>
<xsd:element name="messagePart" type="xsd:string"/>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="UnknownBodyType">
<xsd:complexContent>
<xsd:extension base="tns:BodyType">
<xsd:sequence>
<xsd:any/>
</xsd:sequence>
<xsd:attribute name="encodingStyle" type="xsd:string"/>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
</xsd:schema>