SOAP body 要素は、抽象オペレーションから具象 SOAP オペレーションへのバインディング情報を提供するために使用されます。
表 4 SOAP body 要素の属性
プロパティー |
説明 |
必須か省略可能か |
例 |
parts |
WSDL メッセージから body 要素に含められるパートを示します。 |
省略可能 |
part1 |
use |
SOAP body でメッセージパートがどのようにエンコードされるかを示します。 |
省略可能 |
literal |
encodingStyle |
使用する特定のエンコーディングスタイルを示します。 |
省略可能 |
http://someencodingstyle |
namespace |
RPC 形式のメッセージのラッパー要素の名前空間を示します。 |
省略可能 |
urn:someNamespace |
次の例は、SOAP body 要素を示しています。
<definitions .... > <binding .... > <operation .... > <input> <soap:body parts="nmtokens"? use="literal|encoded"? encodingStyle="uri-list"? namespace="uri"?> </input> <output> <soap:body parts="nmtokens"? use="literal|encoded"? encodingStyle="uri-list"? namespace="uri"?> </output> </operation> </binding> </definitions> |
nmtokens タイプの省略可能属性 parts は、メッセージの SOAP Body 部分のどこかに出現するパートを示します (SOAP が multipart/related MIME バインディングと組み合わせて使用される場合など、メッセージのほかのパートがメッセージのほかの部分に出現する可能性がある)。parts 属性が省略されている場合は、メッセージで定義されているすべてのパートが SOAP Body 部分に含められると見なされます。
必須の use 属性は、メッセージパートがなんらかのエンコーディング規則を使用してエンコードされるか、あるいはメッセージパートがメッセージの具象スキーマを定義するかを示します。
use が encoded の場合、各メッセージパートは type 属性を使用して抽象タイプを参照します。これらの抽象タイプを使用して、encodingStyle 属性で指定されているエンコーディングを適用することにより、具象メッセージが生成されます。namespace 属性は、抽象タイプで明示的に定義されていない内容だけに適用されますが、namespace 属性のパート名、タイプ、および値はすべてエンコーディングに入力されます。参照先のエンコーディングスタイルでは、(SOAP エンコーディングの場合と同様に) 形式の変形を許可する場合、すべての変形がサポートされる (reader makes right) 必要があります。
use が literal の場合、各パートは element 属性か type 属性を使用して具象スキーマ定義を参照します。前者の場合、パートで参照される要素が Body 要素の下に直接出現するか (ドキュメント形式のバインディングの場合)、メッセージパートの名前で指定されるアクセサ要素の下に出現します (RPC 形式の場合)。後者の場合、パートで参照されるタイプが、包含する要素のスキーマタイプになります (ドキュメント形式の場合は Body、RPC 形式の場合はパートのアクセサ要素)。
タイプを使用して複合 Body の内容を定義する例については、節 2.3.1 を参照してください。use が literal の場合は、encodingStyle 属性の値を使用して、具象形式は特定のエンコーディング (SOAP エンコーディングなど) を使用して生成されたが、指定された変形だけがサポートされる (writer makes right) ことを示すことができます。
encodingStyle 属性の値は URI のリストです。各 URI は 1 つの空白で区切られています。これらの URI は、メッセージで使用されるエンコーディングを、制限の強いものから弱いものへ順に表します (SOAP 仕様で定義されている encodingStyle 属性とまったく同様)。