Herong's Tutorial Notes on Web Service and SOAP
Dr. Herong Yang, Version 2.11

SOAP Encoding

Part:   1   2 

This chapter describes:

  • What is SOAP encoding?
  • How to handle multiple references and circular references?
  • How to specify node types?
  • How to using SOAP encoding in SOAP messages

What Is SOAP Encoding?

SOAP Encoding is an extension of the SOAP framework specification that defines how a data value should be encoded in an XML format. SOAP Data Model is defined as an adjunct in SOAP 1.2 specification.

SOAP encoding offers the following rules to convert any data value defined in SOAP data model into XML format. Converting a data value into XML format is called serialization or encoding.

1. A simple value node with a labeled inbound edge will be serialized into a single XML element with the edge's label as the element's name and node value as the element's text content.

2. When serializing a node into an XML element, an "xsi:type" attribute can be added to specify the value type of this note. For more information on "xsi:type", see the other sections in this book.

3. A compound value node with labeled outbound edges, a data structure, will be serialized into a single XML element with child elements. One outbound edge will be serialized into one child element with element's name equal to the edge's label. The order of child elements is not significant.

4. A compound value node with non-labeled outbound edges, a data array, will be serialized into a single XML element with child elements. One outbound edge will be serialized into one child element with element's name equal to any label as long as it's the same for all child elements. The order of child elements signifies the position values of outbound edges.

5. When serializing an array, an "enc:itemType" attribute can be added to specify the value type of its sub nodes, and an "enc:arraySize" attribute can be added to specify the number of values in the array.

Example 1 - Simple value with no reference: The following graph represents a simple value of 3.14:

   (3.14)

Since this node has no inbound edge, I guess we can serialize it as XML element with any name:

   <value>3.14</value>

Example 2 - Simple value with a named reference: The following graph represents a simple value of 3.14 with a reference name of "pi":

   --- pi -->(3.14) 

This node has an inbound labeled edge. The resulting XML element should be named as the inbound edge label.

   <pi>3.14</pi>

Example 3 - Compound value with named sub data elements: The following graph represents a compound value with a reference name of "currentCustomer". This compound value has 3 simple-value sub data elements referenced as "id", "name" and "isSmoking" respectively. In many programming language, this compound value is called a structure:

                         (2321)
                           ^
                           |
                          id
                           |
   --- currentCustomer -->( )-- name -->(Herong)
                           |
                       isSmoking
                           |
                           v
                        (false)

This node has an inbound labeled edge. The resulting XML element should be named as the inbound edge label:

   <currentCustomer>
    <id>2321</id>
    <name>Herong</name>
    <isSmoking>false</isSmoking>
   </currentCustomer>

Example 4 - Compound value with positioned sub data elements: The following graph represents a compound value with a reference name of "colors". This compound value has 3 simple-value sub data elements referenced with no names, but with positions. In many programming languages, this compound value is called an array:

                (Red)
                  ^
                  |
                  0
                  |
   --- colors -->( )----1--->(Green)
                  |
                  2
                  |
                  v
                (Blue)

Obviously, this node represents an array:

   <colors enc:arraySize="3" enc:itemType="xsd:string">
    <item>Red</item>
    <item>Green</item>
    <item>Blue</item>
   </colors>

(Continued on next part...)

Part:   1   2 

Dr. Herong Yang, updated in 2006
Herong's Tutorial Notes on Web Service and SOAP - SOAP Encoding