Soap-encoding
SOAP-エンコード
SOAPには、データ型をエンコードするための一連のルールが組み込まれています。 SOAPメッセージで、整数、浮動小数点数、倍精度数、配列などの特定のデータ型を示すことができます。
- SOAPデータ型は、スカラー型と複合型の2つの広範なカテゴリに分類されます。
- スカラー型には、姓、価格、製品の説明などの値が1つだけ含まれています。
- 複合タイプには、発注書や株価情報のリストなど、複数の値が含まれます。
- 複合型は、さらに配列と構造体に細分化されます。
- SOAPメッセージのエンコードスタイルは、_SOAP-ENV:encodingStyle_属性を介して設定されます。
- SOAP 1.1エンコードを使用するには、値http://schemas.xmlsoap.org/soap/encoding/を使用します
- SOAP 1.2エンコードを使用するには、値http://www.w3.org/2001/12/soap-encodingを使用します
- 最新のSOAP仕様では、XMLスキーマで定義されているすべての組み込み型が採用されています。 それでも、SOAPは、配列や参照など、XMLスキーマで標準化されていない構造を定義する独自の規則を維持しています。
スカラー型
スカラー型の場合、SOAPはXMLスキーマ仕様で指定されているすべての組み込み単純型を採用します。 これには、ストリング、フロート、ダブル、および整数が含まれます。
次の表に、XML Schema Part 0-Primer [[1]]
XMLスキーマに組み込まれた単純型
シンプルタイプ
例
ひも
これが電動であることを確認してください。
ブール値
true、false、1、0。
浮く
-INF、-1E4、-0、0、12.78E-2、12、INF、NaN。
ダブル
-INF、-1E4、-0、0、12.78E-2、12、INF、NaN。
小数
-1.23、0、123.4、1000.00。
バイナリ
100010
整数
-126789、-1、0、1、126789。
nonPositiveInteger
-126789、-1、0。
negativeInteger
-126789、-1。
long
-1、12678967543233
int
-1、126789675
ショート
-1、12678
byte
-1、126
nonNegativeInteger
0、1、126789
署名なし
0、12678967543233
unsignedInt
0、1267896754
unsignedShort
0、12678
unsignedByte
0、126
正の整数
1、126789。
date
1999-05-31、-05。
time
13:20:00.000、13:20:00.000-05:00
たとえば、これはdoubleデータ型のSOAP応答です-
<?xml version = '1.0' encoding = 'UTF-8'?>
<SOAP-ENV:Envelope
xmlns:SOAP-ENV = "http://www.w3.org/2001/12/soap-envelope"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd = "http://www.w3.org/2001/XMLSchema">
<SOAP-ENV:Body>
<ns1:getPriceResponse
xmlns:ns1 = "urn:examples:priceservice"
SOAP-ENV:encodingStyle = "http://www.w3.org/2001/12/soap-encoding">
<return xsi:type = "xsd:double">54.99</return>
</ns1:getPriceResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
複合タイプ
SOAP配列には非常に特定のルールセットがあり、要素タイプと配列サイズの両方を指定する必要があります。 SOAPは多次元配列もサポートしていますが、すべてのSOAP実装が多次元機能をサポートしているわけではありません。
配列を作成するには、配列の_xsi:type_として指定する必要があります。 配列には、_arrayType_属性も含める必要があります。 この属性は、含まれる要素のデータ型と配列の次元を指定するために必要です。
たとえば、次の属性は、10のdouble値の配列を指定します-
arrayType = "xsd:double[10]"
対照的に、次の属性は文字列の二次元配列を指定します-
arrayType = "xsd:string[5,5]"
以下は、double値の配列を持つサンプルSOAP応答です-
<?xml version = '1.0' encoding = 'UTF-8'?>
<SOAP-ENV:Envelope
xmlns:SOAP-ENV = "http://www.w3.org/2001/12/soap-envelope"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd = "http://www.w3.org/2001/XMLSchema">
<SOAP-ENV:Body>
<ns1:getPriceListResponse
xmlns:ns1 = "urn:examples:pricelistservice"
SOAP-ENV:encodingStyle = "http://www.w3.org/2001/12/soap-encoding">
<return xmlns:ns2 = "http://www.w3.org/2001/09/soap-encoding"
xsi:type = "ns2:Array" ns2:arrayType = "xsd:double[2]">
<item xsi:type = "xsd:double">54.99</item>
<item xsi:type = "xsd:double">19.99</item>
</return>
</ns1:getPriceListResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
構造体には複数の値が含まれますが、各要素は一意のアクセサー要素で指定されます。 たとえば、製品カタログ内のアイテムを考えます。 この場合、構造体には製品SKU、製品名、説明、および価格が含まれる場合があります。 以下は、そのような構造体がSOAPメッセージでどのように表されるかです-
<?xml version = '1.0' encoding = 'UTF-8'?>
<SOAP-ENV:Envelope
xmlns:SOAP-ENV = "http://www.w3.org/2001/12/soap-envelope"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd = "http://www.w3.org/2001/XMLSchema">
<SOAP-ENV:Body>
<ns1:getProductResponse
xmlns:ns1 = "urn:examples:productservice"
SOAP-ENV:encodingStyle = "http://www.w3.org/2001/12/soap-encoding">
<return xmlns:ns2 = "urn:examples" xsi:type = "ns2:product">
<name xsi:type = "xsd:string">Red Hat Linux</name>
<price xsi:type = "xsd:double">54.99</price>
<description xsi:type = "xsd:string">
Red Hat Linux Operating System
</description>
<SKU xsi:type = "xsd:string">A358185</SKU>
</return>
</ns1:getProductResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
注-SOAPコードを記述するときは、適切なインデントに注意してください。 構造体の各要素は、一意のアクセサー名で指定されます。 たとえば、上記のメッセージには、名前、価格、説明、およびSKUという4つのアクセサー要素が含まれています。 各要素は独自のデータ型を持つことができます。 たとえば、nameは文字列として指定され、priceはdoubleとして指定されます。