[1] [DFN[[RUBYB[SOAP 符号化][SOAP Encoding]]]]は、 [[SOAPデータ・モデル]]のデータを [[XML情報集合]]で表現 ([[直列化]]) する方法です。 -'''[CODE[[QN[env:[[encodingStyle]]][http://www.w3.org/2003/05/soap-envelope]]]]''': [CODE(URI)[[[http://www.w3.org/2003/05/soap-encoding]]]] [2] 仕様書: -[[SOAP 1.2]] --[CSECTION[3. SOAP Encoding]] --正誤表 [CSECTION[E2/9 - Clarification. (2004-07-05)]] * 直列化 [5] - [CODE(InfoItem)[[[要素]]情報項目]] -- [[グラフ辺]]を表します。 [SRC[SOAP 1.2 Part 2 3.1.1]] -- [CODE(InfoProp)[[[属性]]]] --- [CODE(XMLa)[[QN[enc:[[id]]][http://www.w3.org/2003/05/soap-encoding]]]] [CODE(InfoItem)[[[属性]]情報項目]] ----[CODE(XMLa)[[QN[enc:[[ref]]][http://www.w3.org/2003/05/soap-encoding]]]] [CODE(InfoItem)[[[属性]]情報項目]]から[[参照]]するための固有識別子です。 [SRC[SOAP 1.2 Part 2 3.1.5.1]]。 ----[CODE(InfoProp)[[[局所名]]]]: [CODE(XMLa)[[[id]]]] [SRC[SOAP 1.2 Part 2 3.1.5.1]] ----[CODE(InfoProp)[[[名前空間名]]]]: [CODE(URI)[[[http://www.w3.org/2003/05/soap-encoding]]]] [SRC[SOAP 1.2 Part 2 3.1.5.1]] ----[CODE(InfoProp)[[[指定]]]]: [CODE(XML)[[[true]]]] [SRC[SOAP 1.2 Part 2 3.1.5.1]] ----型: [CODE(XML)[[QN[xs:[[ID]]][]]]] [SRC[SOAP 1.2 Part 2 3.1.5.1]] --- [CODE(XMLa)[[QN[enc:[[ref]]][http://www.w3.org/2003/05/soap-encoding]]]] [CODE(InfoItem)[[[属性]]情報項目]] ---- この[[グラフ辺]]が終わる[[グラフ節点]]の[CODE(InfoItem)[[[要素]]情報項目]] [WEAK[([CODE(URI)[[[http://www.w3.org/2003/05/soap-encoding]]]] [CODE(XMLa)[[QN[enc:[[encodingStyle]]][http://www.w3.org/2003/05/soap-encoding]]]] の範囲内になければ'''なりません'''。)]] の [CODE(XMLa)[[QN[enc:[[id]]][http://www.w3.org/2003/05/soap-encoding]]]] [CODE(InfoItem)[[[属性]]情報項目]]の値を指定します。 [SRC[SOAP 1.2 Part 2 3.1.1]] 該当する[CODE(InfoItem)[[[要素]]情報項目]]は丁度1つでなければ'''なりません'''。 [SRC[SOAP 1.2 Part 2 3.1.5.3]] ----[CODE(InfoProp)[[[局所名]]]]: [CODE(XMLa)[[[ref]]]] [SRC[SOAP 1.2 Part 2 3.1.5.2]] ----[CODE(InfoProp)[[[名前空間名]]]]: [CODE(URI)[[[http://www.w3.org/2003/05/soap-encoding]]]] [SRC[SOAP 1.2 Part 2 3.1.5.2]] ----[CODE(InfoProp)[[[指定]]]]: [CODE(XML)[[[true]]]] [SRC[SOAP 1.2 Part 2 3.1.5.2]] ----型: [CODE(XML)[[QN[xs:[[IDREF]]][]]]] [SRC[SOAP 1.2 Part 2 3.1.5.2]] ---- この[CODE(InfoItem)[[[属性]]情報項目]]がなければ、 この[CODE(InfoItem)[[[要素]]情報項目]]が終点の[[グラフ節点]]をも[DFN[[RUBYB[表現][represent]]]]します。 [SRC[SOAP 1.2 Part 2 3.1.1]] ----[CODE(XMLa)[[QN[enc:[[id]]][http://www.w3.org/2003/05/soap-encoding]] [CODE(InfoItem)[[[属性]]情報項目]]が存在する[CODE(InfoItem)[[[要素]]情報項目]]に出現しては'''なりません'''。 [SRC[SOAP 1.2 Part 2 3.1.5.3]] --- [CODE(XMLa)[[[nodeType]]]] [CODE(InfoItem)[[[属性]]情報項目]] ([[単純値]]節点を現す場合、[[複合値]]接点を表す場合) --- [CODE(XMLa)[[QN[enc:[[nodeType]]][http://www.w3.org/2003/05/soap-encoding]]]] [CODE(InfoItem)[[[属性]]情報項目]] ----[[グラフ節点]]が表す[[値]]の種類を表します [SRC[SOAP 1.2 Part 2 3.1.7]]。 ----[CODE(InfoProp)[[[局所名]]]]: [CODE(XMLa)[[[nodeType]]]] [SRC[SOAP 1.2 Part 2 3.1.7]] ----[CODE(InfoProp)[[[名前空間名]]]]: [CODE(URI)[[[http://www.w3.org/2003/05/soap-encoding]]]] [SRC[SOAP 1.2 Part 2 3.1.7]] ----[CODE(InfoProp)[[[指定]]]]: [CODE(XML)[[[true]]]] [SRC[SOAP 1.2 Part 2 3.1.7]] ----型: [CODE(XMLa)[[QN[enc:[[nodeType]]][http://www.w3.org/2003/05/soap-encoding]]]]: [CODE(XML)[[[simple]]]] ([[単純型]]), [CODE(XML)[[[struct]]]] ([[複合型]]: [[構造体]]), [CODE(XML)[[[array]]]] ([[複合型]]: [[配列]]) [SRC[SOAP 1.2 Part 2 3.1.7]] --- [CODE(XMLa)[[QN[enc:[[itemType]]][http://www.w3.org/2003/05/soap-encoding]]]] [CODE(InfoItem)[[[属性]]情報項目]] ----[[配列]]を表す場合指定して'''構いません''' [SRC[SOAP 1.2 Part 2 3.1.3]]。 ----[CODE(InfoProp)[[[局所名]]]]: [CODE(XMLa)[[[itemType]]]] [SRC[SOAP 1.2 Part 2 3.1.4.1]] ----[CODE(InfoProp)[[[名前空間名]]]]: [CODE(URI)[[[http://www.w3.org/2003/05/soap-encoding]]]] [SRC[SOAP 1.2 Part 2 3.1.4.1]] ----[CODE(InfoProp)[[[指定]]]]: [CODE(XML)[[[true]]]] [SRC[SOAP 1.2 Part 2 3.1.4.1]] ----型: [CODE(XML)[[QN[xs:[[QName]]][]]]] [SRC[SOAP 1.2 Part 2 3.1.4.1]] ----[[配列]]の要素に当たる[[グラフ節点]]の[[型名]]を指定します [SRC[SOAP 1.2 Part 2 3.1.4]]。 --- [CODE(XMLa)[[QN[enc:[[arraySize]]][http://www.w3.org/2003/05/soap-encoding]]]] [CODE(InfoItem)[[[属性]]情報項目]] ----[[配列]]を表す場合指定して'''構いません''' [SRC[SOAP 1.2 Part 2 3.1.3]]。 ----[[多次元配列]]のようなプログラムの[[データ構造]]に写像できることを示します。 [SRC[SOAP 1.2 Part 2 E29]] ----[CODE(InfoProp)[[[局所名]]]]: [CODE(XMLa)[[[arraySize]]]] [SRC[SOAP 1.2 Part 2 3.1.6]] ----[CODE(InfoProp)[[[名前空間名]]]]: [CODE(URI)[[[http://www.w3.org/2003/05/soap-encoding]]]] [SRC[SOAP 1.2 Part 2 3.1.6]] ----型: [CODE(XML)[[QN[enc:[[arraySize]]][]]]]: [CODE(ABNF)[(1*[[DIGIT]] / "*") *(([[U+0009]] / [[U+000A]] / [[U+000D]] / [[U+0020]]) 1*[[DIGIT]])]] [SRC[SOAP 1.2 Part 2 3.1.6]] ----[[配列]]中の各[[次元]]の大きさを示します。 項目の数が次元数となります。星は大きさ未指定を表します。 最初の方が添え字がゆっくり動く次元、最後の方が添え字が速く動く次元です。 [SRC[SOAP 1.2 Part 2 3.1.6, E29]] ----この[[属性]]を省略した時の既定値は [CODE(XML)[*]] です。 [SRC[SOAP 1.2 Part 2 3.1.6, E29]] --- [CODE(XMLa)[[QN[xn:[[nil]]]] [CODE(InfoItem)[[[属性]]情報項目]] ---- [[節点]]を表す場合に指定できます。 ---- [CODE(XML)[[[true]]]] なら、[[グラフ節点]]で終わらない辺であることを表します。 この場合は[[グラフ辺]]を表す[CODE(InfoItem)[[[要素]]情報項目]]自体を省略できます。 [SRC[SOAP 1.2 Part 2 3.1.3]] -- [CODE(InfoProp)[[[子供]]]] ---[CODE(InfoItem)[[[文字]]情報項目]] ([CODE(InfoItem)[[[要素]]情報項目]]が[[グラフ節点]] ([[単純値]]) を表現する場合) ---- [[グラフ節点]]の[[字句値]]で、[[単純値]]を表します。 [SRC[SOAP 1.2 Part 2 3.1.2]] --- [CODE(InfoItem)[[[要素]]情報項目]] ([CODE(InfoItem)[[[要素]]情報項目]]が[[グラフ節点]] ([[複合値]]) を表現する場合) [SRC[SOAP 1.2 Part 2 3.1.3]] ---- [[外向き辺]]を表します。 ---- [[辺札]]で区別される場合、子供[CODE(InfoItem)[[[要素]]情報項目]]の[CODE(InfoProp)[[[局所名]]]]と[CODE(InfoProp)[[[名前空間名]]]]で[[辺札]]の値を決定します。 ---- [[位置]]で区別される場合、 [[グラフ辺]]の順序位置は子供[CODE(InfoItem)[[[要素]]情報項目]]の兄弟間の相対位置に対応します。 [CODE(InfoProp)[[[局所名]]]]と[CODE(InfoProp)[[[名前空間名]]]]は意味を持ちません。 [6] '''グラフ節点の型名''': [[グラフ節点]]の[[型名]]は符号化された情報集合から次の方法で得ることができます。 なお、[[型名]]は[[名前空間名]]と[[局所名]]の組で、 [[名前空間接頭辞]]は [[SOAP]] の[[グラフ]]が持つ情報とは考えません。 [SRC[SOAP 1.2 Part 2 3.1.4]] = [[グラフ節点]]を表現する[CODE(InfoItem)[[[要素]]情報項目]]が [CODE(XMLa)[[QN[xsi:[[type]]]]]] [CODE(InfoItem)[[[属性]]情報項目]]を持つなら、 その値が[[型名]]です。 = [CODE(InfoProp)[[[親]]]][CODE(InfoItem)[[[要素]]情報項目]]が [CODE(XMLa)[[QN[enc:[[itemType]]][http://www.w3.org/2003/05/soap-encoding]]]] [CODE(InfoItem)[[[属性]]情報項目]]を持つなら、 その値が[[型名]]です。 = [[型名]]は未指定です。 注意: [[SOAP]] の[[グラフ]]は[[型名]]の情報を持っていますが、 [[SOAP]] 自体としては特定の型システムや妥当性検証を求めてはいません。[SRC[SOAP 1.2 Part 2 3.1.4]] [4] '''複数の表現''': 1つの[[グラフ]]に複数の表現方法があるかもしれません。 直列化器はどの表現を使っても'''構いません'''し、 解直列化器はどの表現も受け付けなければ'''なりません'''。 [SRC[SOAP 1.2 Part 2 3.1]] [[#comment]] * 失敗の処理 [7] [[SOAP]] [[受信者]]が [[SOAP符号化]]を解直列化しようとした時、 - [CODE(XMLa)[[QN[enc:[[ref]]][http://www.w3.org/2003/05/soap-encoding]]]] [CODE(InfoItem)[[[属性]]情報項目]]の[[参照]]先がなければ、 [[SOAP失敗]] [CODE(XML)[[QN[enc:[[Sender]]][http://www.w3.org/2003/05/soap-encoding]]]] (亜符号 [CODE(XMLa)[[QN[enc:[[MissingID]]][http://www.w3.org/2003/05/soap-encoding]]]]) を生成する'''べきです'''。 [SRC[SOAP 1.2 Part 2 3.2]] - [CODE(XMLa)[[QN[enc:[[ref]]][http://www.w3.org/2003/05/soap-encoding]]]] [CODE(InfoItem)[[[属性]]情報項目]]の[[参照]]先が複数あれば、 [[SOAP失敗]] [CODE(XML)[[QN[enc:[[Sender]]][http://www.w3.org/2003/05/soap-encoding]]]] (亜符号 [CODE(XMLa)[[QN[enc:[[DupulicateID]]][http://www.w3.org/2003/05/soap-encoding]]]]) を生成する'''べきです'''。 [SRC[SOAP 1.2 Part 2 3.2]] - [[型名]]が指定されていなければ、 [CODE(XML)[[QN[enc:[[Sender]]][http://www.w3.org/2003/05/soap-encoding]]]] (亜符号 [CODE(XMLa)[[QN[enc:[[UntypedValue]]][http://www.w3.org/2003/05/soap-encoding]]]]) を生成しえt'''構いません'''。 [SRC[SOAP 1.2 Part 2 3.2]] [[#comment]] * 関連 [3] '''SOAP の他の部分との関係''': -[[SOAP符号化]]や [[SOAPデータ・モデル]]の実装は'''任意選択'''です。 -[[SOAP RPC表現]]は [[SOAP符号化]]を使用しています。 [[#comment]] * メモ