Copyright © 2003 W3C® (MIT, ERCIM, Keio), All Rights Reserved. W3C liability, trademark, document use, and software licensing rules apply.
This document draws on assertions found in the SOAP Version 1.2 specifications [SOAP Part1], [SOAP Part2], and provides a set of tests in order to show whether the assertions are implemented in a SOAP processor.
A SOAP 1.2 implementation that passes all of the tests specified in this document may claim to conform to the SOAP 1.2 Test Suite, 2003 05 07. It is incorrect to claim to be compliant with the SOAP Version 1.2 specifications merely by passing successfully all the tests provided in this test suite. It is also incorrect to claim that an implementation is non complaint with the SOAP Version 1.2 specifications based on its failure to pass one or more of the tests in this test suite.
This section describes the status of this document at the time of its publication. Other documents may supersede this document. The latest status of this document series is maintained at the W3C.
This document is a Proposed Recommendation of the W3C. This document has been produced by the XML Protocol Working Group (WG), which is part of the Web Services Activity.
W3C Advisory Committee Representatives are invited to send formal review comments by following the instructions in the Call for Review. Through an form available from the Call for Review, Advisory Committee representatives should send comments to the Team-only list xml-protocol-review@w3.org until 07 June 2003. Through the form, Advisory Committee representatives may also make their comments visible to the Membership (on w3c-ac-forum@w3.org for discussion or w3c-archive@w3.org).
In addition to submitting them through the online review form, Advisory Committee representatives should send technical issues to the appropriate public mailing list for the XMLP Working Group: xmlp-comments@w3.org. Discussion of these issues will take place on the public mailing list xml-dist-app@w3.org [distapp archive]. Alternatively, Advisory Committee representatives also have the option (through the online review form) of asking the XMLP Working Group Team Contacts to forward their technical issues without attribution to the appropriate Working Group mailing list.
The public is invited to send comments about this document directly to xmlp-comments@w3.org (public archive [xmlp-comments archive]). It is inappropriate to send discussion email to this address. Discussion of this document takes place on the public xml-dist-app@w3.org mailing list [distapp archive].
This document is based on the feedback from the implementers and feedback on the SOAP 1.2 Candidate Recommendation (CR) documents dated 19 December 2002. An implementation and interoperability report is provided at http://www.w3.org/2000/xp/Group/2/03/soap1.2implementation.html. Two or more interoperable implementations are documented for 48 of the 50 features listed in that report. Only one implementation is documented for the features concerning nodeType [79] and DuplicateID [82], although interoperable implementations of these features are expected in the near future. Feedback received during CR resulted in clarifications but no major changes. The XML Protocol Working Group believes that this specification addresses all Last Call and CR issues.
Patent disclosures relevant to this specification may be found on the Working Group's patent disclosure page.
Publication of this document does not imply endorsement by the W3C Membership. This is a draft document and may be updated, replaced or obsoleted by other documents at any time. It is inappropriate to cite a W3C Proposed Recommendation as anything other than a "work in progress". A list of current W3C technical reports can be found at http://www.w3.org/TR .
1. Introduction
2. SOAP 1.2 Assertions
3. SOAP 1.2 Test Collection
4. References
A. Acknowledgements (Non-Normative)
1. Introduction
2. SOAP 1.2 Assertions
2.1 SOAP 1.2, Part 1 Assertions
2.2 SOAP 1.2, Part 2 Assertions
3. SOAP 1.2 Test Collection
3.1 Introduction
3.2 Header Blocks Used by the Test Collection
3.2.1 echoOk
3.2.2 responseOk
3.2.3 Ignore
3.2.4 requiredHeader
3.2.5 DataHolder
3.2.6 concatAndForwardEchoOk
3.2.7 concatAndForwardEchoOkArg1
3.2.8 concatAndForwardEchoOkArg2
3.2.9 validateCountryCode
3.2.10 validateCountryCodeFault
3.2.11 echoResolvedRef
3.2.12 responseResolvedRef
3.3 Body Blocks Used by the Test Collection
3.3.1 echoOk
3.3.2 responseOk
3.3.3 echoHeader
3.3.4 echoHeaderResponse
3.4 RPC Methods/Procedures Used by the Test Collection
3.4.1 returnVoid
3.4.2 echoStruct
3.4.3 echoStructArray
3.4.4 echoStructAsSimpleTypes
3.4.5 echoSimpleTypesAsStruct
3.4.6 echoNestedStruct
3.4.7 echoNestedArray
3.4.8 echoFloatArray
3.4.9 echoStringArray
3.4.10 echoIntegerArray
3.4.11 echoBase64
3.4.12 echoBoolean
3.4.13 echoDate
3.4.14 echoDecimal
3.4.15 echoFloat
3.4.16 echoString
3.4.17 countItems
3.4.18 isNil
3.5 Tests
4. References
4.1 Normative References
4.2 Informative References
A. Acknowledgements (Non-Normative)
This document draws on assertions found in the SOAP Version 1.2 specifications, and provides a set of tests in order to show whether the assertions are implemented in a SOAP processor. The primary goal of this document is to foster interoperability between different SOAP 1.2 implementations. The document is intended to help implementors to write SOAP processors that comply with SOAP 1.2 specification, and interoperate with other SOAP processors that comply with SOAP 1.2 specification.
A SOAP 1.2 implementation that passes all of the tests specified in this document may claim to conform to the SOAP 1.2 Test Suite $Date 2003/05/07 $.
Even though the purpose of the SOAP 1.2 Test Suite is to facilitate the creation of interoperable implementations, conformance to the SOAP 1.2 Test Suite does not imply conformance to the SOAP 1.2 specifications; there are mandatory requirements of the specifications that are not tested by the suite (as a simple example, SOAP 1.2 requires that every legal value of a role name is accepted, and all illegal ones rejected). An implementation may be said to be SOAP 1.2 conformant if and only if it it satisfies the conformance requirements specified in SOAP 1.2 specifications. The W3C does not at this time provide for any comprehensive means of testing for such conformance.
Similarly, an implementation may conform to the SOAP 1.2 specifications even if it does not support all capabilities tested by the SOAP 1.2 Test Suite. SOAP 1.2 specifications admits special purpose implementations, such as those in dedicated controllers, which may send and receive only a very limited suite of messages; the requirement is that whatever is done be done correctly. An implementation may conform to the SOAP 1.2 specifications even if it does not support all capabilities tested by the SOAP 1.2 Test Suite. The test suite defines higher level application semantics to enable testing and facilitate interoperable implementations. It is not necessary for a SOAP processor to support these higher level semantics to be SOAP 1.2 compliant.
Assertions for SOAP Version 1.2 Part 1 and Part 2 are numbered sequentially (1..n). "Location of the assertion" points the source of the assertion (section or subsection number) in Part 1 or Part 2. Hyperlinks are used to cross-reference to the original specification section/subsection.
Some of the tests in this document use SOAPBuilders interoperability tests as a started point, but have been modified to conform to the SOAP 1.2 specifications.
For an implementation to claim conformance with the SOAP Version 1.2 specification, it MUST correctly implement all mandatory ("MUST") requirements expressed in Part 1 of the SOAP Version 1.2 specification (this document) that pertain to the activity being performed. Note that an implementation is not mandated to implement all the mandatory requirements.
SOAP does not require that XML Schema processing (assessment or validation) be performed to establish the correctness or 'schema implied' values of element and attribute information items defined by Parts 1 and 2 of this specification. The values associated with element and attribute information items defined in this specification MUST be carried explicitly in the transmitted SOAP message except where stated otherwise (see 5. SOAP Message Construct).
Unless otherwise stated, all lexical forms are supported for each such attribute, and lexical forms representing the same value in the XML Schema value space are considered equivalent for purposes of SOAP processing, e.g. the boolean lexical forms "1" and "true" are interchangeable.
The roles assumed by a node MUST be invariant during the processing of an individual SOAP message.
This assertion cannot be fully tested, as a SOAP node is allowed to process and remove SOAP headers, reinsert them and send them upstream.
Mandatory SOAP header blocks are presumed to somehow modify the semantics of other SOAP header blocks or SOAP body elements. Therefore, for every mandatory SOAP header block targeted to a node, that node MUST either process the header block or not process the SOAP message at all, and instead generate a fault (see 2.6 Processing SOAP Messages and 5.4 SOAP Fault).
Unless otherwise stated, processing of all generated SOAP messages, SOAP faults and application-level side effects MUST be semantically equivalent to performing the following steps separately, and in the order given.
Determine the set of roles in which the node is to act. The contents of the SOAP envelope, including any SOAP header blocks and the SOAP body, MAY be inspected in making such determination.
Identify all header blocks targeted at the node that are mandatory.
If one or more of the SOAP header blocks identified in the preceding step are not understood by the node then generate a single SOAP fault with the
ValueofCodeset to "env:MustUnderstand" (see 5.4.8 SOAP mustUnderstand Faults). If such a fault is generated, any further processing MUST NOT be done. Faults relating to the contents of the SOAP body MUST NOT be generated in this step.Note:
Throughout this document, the term "
ValueofCode" is used as a shorthand for "value of theValuechild element information item of theCodeelement information item" (see 5.4.1 SOAP Code Element).Process all mandatory SOAP header blocks targeted at the node and, in the case of an ultimate SOAP receiver, the SOAP body. A SOAP node MAY also choose to process non-mandatory SOAP header blocks targeted at it.
In the case of a SOAP intermediary, and where the SOAP message exchange pattern and results of processing (e.g. no fault generated) require that the SOAP message be sent further along the SOAP message path, relay the message as described in section 2.7 Relaying SOAP Messages.
The selection of a fault need not be predicated on the application of the "MUST", "SHOULD" or "MAY" keywords to the generation of the fault, with the exception that if one or more of the prescribed faults is qualified with the "MUST" keyword, then any one fault from the set of possible faults MUST be generated.
Forwarding SOAP intermediaries MUST process the message according to the SOAP processing model defined in 2.6 Processing SOAP Messages. In addition, when generating a SOAP message for the purpose of forwarding, they MUST:
Remove all processed SOAP header blocks.
Remove all non-relayable SOAP header blocks that were targeted at the forwarding node but ignored during processing.
Retain all relayable SOAP header blocks that were targeted at the forwarding node but ignored during processing.
All XML infoset properties of a message MUST be preserved with the following exceptions:
The element information item for a header block targeted at an intermediary MAY be removed, by that intermediary, from the [children] property of the SOAP
Headerelement information item as detailed in 2.7.2 SOAP Forwarding Intermediaries.Element information items for additional header blocks MAY be added to the [children] property of the SOAP
Headerelement information item as detailed in 2.7.2 SOAP Forwarding Intermediaries.Whitespace character information items MAY be removed from the [children] property of the SOAP
Envelopeelement information item.Whitespace character information items MAY be added to the [children] property of the SOAP
Envelopeelement information item.Whitespace character information items MAY be removed from the [children] property of the SOAP
Headerelement information item.Whitespace character information items MAY be added to the [children] property of the SOAP
Headerelement information item.Comment information items MAY be added to the [children] property of the SOAP
Envelopeelement information item.Comment information items MAY be removed from the [children] property of the SOAP
Envelopeelement information item.Comment information items MAY be added to the [children] property of the SOAP
Headerelement information item.Comment information items MAY be removed from the [children] property of the SOAP
Headerelement information item.Attribute information items MAY be added to the [attributes] property of the SOAP
Envelopeelement information item.Attribute information items MAY be added to the [attributes] property of the SOAP
Headerelement information item.Attribute information items MAY be added to the [namespace attributes] property of the SOAP
Envelopeelement information item.Attribute information items MAY be added to the [namespace attributes] property of the SOAP
Headerelement information item.SOAP role attribute information items that are present in the [attributes] property of SOAP header block element information items may be transformed as described in 5.2.2 SOAP role Attribute.
SOAP mustUnderstand attribute information items that are present in the [attributes] property of SOAP header block element information items may be transformed as described in 5.2.3 SOAP mustUnderstand Attribute.
SOAP relay attribute information items that are present in the [attributes] property of SOAP header block element information items may be transformed as described in 5.2.4 SOAP relay Attribute.
The [base URI] property of the document information item need not be maintained.
The [base URI] property of element information items MAY be changed or removed.
The [character encoding scheme] property of the document information item MAY be changed or removed.
All namespace information items in the [in-scope namespaces] of element information items MUST be preserved. Additional namespace information items MAY be added.
A SOAP node MAY support multiple envelope versions. However, when processing a message, a SOAP node MUST use the semantics defined by the version of that message.
If a SOAP node receives a message whose version is not supported it MUST generate a fault (see 5.4 SOAP Fault) with a Value of Code set to "env:VersionMismatch". Any other malformation of the message construct MUST result in the generation of a fault with a Value of Code set to "env:Sender".
The specification of a feature MUST include the following:
A URI used to name the feature. This enables the feature to be unambiguously referenced in description languages or during negotiation.
The information (state) required at each node to implement the feature.
The processing required at each node in order to fulfill the obligations of the feature including any handling of communication failures that might occur in the underlying protocol (see also 4.2 Binding Framework).
The information to be transmitted from node to node.
The specification of a message exchange pattern MUST:
As mandated by 3.1.1 Requirements on Features, provide a URI to name the MEP.
Describe the life cycle of a message exchange conforming to the pattern.
Describe the temporal/causal relationships, if any, of multiple messages exchanged in conformance with the pattern (e.g. responses follow requests and are sent to the originator of the request.)
Describe the normal and abnormal termination of a message exchange conforming to the pattern.
A module specification adheres to the following rules. It:
MUST identify itself with a URI. This enables the module to be unambiguously referenced in description languages or during negotiation.
MUST declare the features provided by a module (see 3.1 SOAP Features).
MUST clearly and completely specify the content and semantics of the SOAP header blocks used to implement the behavior in question, including if appropriate any modifications to the SOAP Processing model. The SOAP extensibility model does not limit the extent to which SOAP can be extended. Nor does it prevent extensions from modifying the SOAP processing model from that described in 2. SOAP Processing Model
MAY utilize the property conventions defined in [SOAP Part2], section A Convention for Describing Features and Bindings, in describing the functionality that the module provides. If these conventions are followed, the module specification MUST clearly describe the relationship between the abstract properties and their representations in the SOAP envelope. Note that it is possible to write a feature specification purely in terms of abstract properties, and then write a separate module specification which implements that feature, mapping the properties defined in the feature specification to SOAP header blocks in the SOAP module.
MUST clearly specify any known interactions with or changes to the interpretation of the SOAP body. Furthermore, it MUST clearly specify any known interactions with or changes to the interpretation of other SOAP features and SOAP modules For example, we can imagine a module which encrypts and removes the SOAP body, inserting instead a SOAP header block containing a checksum and an indication of the encryption mechanism used. The specification for such a module would indicate that the decryption algorithm on the receiving side is to be run prior to any other modules which rely on the contents of the SOAP body.
A SOAP message is specified as an XML infoset that consists of a document information item with exactly one member in its [children] property, which MUST be the SOAP
Envelopeelement information item (see 5.1 SOAP Envelope). This element information item is also the value of the [document element] property.
The XML infoset of a SOAP message MUST NOT contain a document type declaration information item.
SOAP messages sent by initial SOAP senders MUST NOT contain processing instruction information items. SOAP intermediaries MUST NOT insert processing instruction information items in SOAP messages they relay. SOAP receivers receiving a SOAP message containing a processing instruction information item SHOULD generate a SOAP fault with the
ValueofCodeset to "env:Sender".
The SOAP
Envelopeelement information item has:
A [local name] of
Envelope.A [namespace name] of "http://www.w3.org/2003/05/soap-envelope".
Zero or more namespace qualified attribute information items amongst its [attributes] property.
One or two element information items in its [children] property in order as follows:
An optional
Headerelement information item (see 5.2 SOAP Header).A mandatory
Bodyelement information item (see 5.3 SOAP Body).
The
encodingStyleattribute information item MAY appear on the following:
A SOAP header block (see 5.2.1 SOAP Header block).
A child element information item of the SOAP
Bodyelement information item (see 5.3.1 SOAP Body child Element) if that child is not a SOAP Fault element information item (see 5.4 SOAP Fault).A child element information item of the SOAP
Detailelement information item (see 5.4.5.1 SOAP detail entry).Any descendent of 1, 2, and 3 above.
The
encodingStyleattribute information item MUST NOT appear on any element other than above in a SOAP message infoset.
The scope of the
encodingStyleattribute information item is that of its owner element information item and that element information item's descendants, unless a descendant itself carries such an attribute information item.
If no
encodingStyleattribute information item is in scope for a particular element information item or the value of such an attribute information item is "http://www.w3.org/2003/05/soap-envelope/encoding/none" then no claims are made regarding the encoding style of that element information item and its descendants.
The
Headerelement information item has:
A [local name] of
Header.A [namespace name] of "http://www.w3.org/2003/05/soap-envelope".
Zero or more namespace qualified attribute information items in its [attributes] property.
Zero or more namespace qualified element information items in its [children] property.
Each SOAP header block element information item:
MUST have a [namespace name] property which has a value, that is the name of the element MUST be namespace qualified.
MAY have any number of character information item children. Child character information items whose character code is amongst the whitespace characters as defined by [XML 1.0] are considered significant.
MAY have any number of element information item children. Such element information items MAY be namespace qualified.
MAY have zero or more attribute information items in its [attributes] property. Among these MAY be any or all of the following, which have special significance for SOAP processing:
encodingStyleattribute information item (see 5.1.1 SOAP encodingStyle Attribute ).
roleattribute information item (see 5.2.2 SOAP role Attribute).
mustUnderstandattribute information item (see 5.2.3 SOAP mustUnderstand Attribute).
relayattribute information item (see 5.2.4 SOAP relay Attribute ).
The
roleattribute information item has the following XML infoset properties:
A [local name] of
role.A [namespace name] of "http://www.w3.org/2003/05/soap-envelope".
A [specified] property with a value of "true".
The type of the
roleattribute information item is xs:anyURI. The value of theroleattribute information item is a URI that names a role that a SOAP node can assume.
A SOAP sender generating a SOAP message SHOULD use the
roleattribute information item only on SOAP header blocks. A SOAP receiver MUST ignore this attribute information item if it appears on descendants of a SOAP header block or on a SOAP body child element information item (or its descendents).
The
mustUnderstandattribute information item has the following XML infoset properties:
A [local name] of
mustUnderstand.A [namespace name] of "http://www.w3.org/2003/05/soap-envelope".
A [specified] property with a value of "true".
The type of the
mustUnderstandattribute information item is xs:boolean.
A SOAP sender generating a SOAP message SHOULD use the
mustUnderstandattribute information item only on SOAP header blocks. A SOAP receiver MUST ignore this attribute information item if it appears on descendants of a SOAP header block or on a SOAP body child element information item (or its descendents).
The
relayattribute information item has the following XML infoset properties:
A [local name] of
relay.A [namespace name] of "http://www.w3.org/2003/05/soap-envelope".
A [specified] property with a value of "true".
The type of the relay attribute information item is xs:boolean.
A SOAP sender generating a SOAP message SHOULD use the
relayattribute information item only on SOAP header blocks. A SOAP receiver MUST ignore this attribute information item if it appears on descendants of a SOAP header block or on a SOAP body child element information item (or its descendents).
The
Bodyelement information item has:
A [local name] of
Body.A [namespace name] of "http://www.w3.org/2003/05/soap-envelope".
Zero or more namespace qualified attribute information items in its [attributes] property.
Zero or more namespace qualified element information items in its [children] property.
The
Faultelement information item has:
A [local name] of
Fault.A [namespace name] of "http://www.w3.org/2003/05/soap-envelope".
Two or more child element information items in its [children] property in order as follows:
A mandatory
Codeelement information item (see 5.4.1 SOAP Code Element ).A mandatory
Reasonelement information item (see 5.4.2 SOAP Reason Element ).An optional
Nodeelement information item (see 5.4.3 SOAP Node Element ).An optional
Roleelement information item (see 5.4.4 SOAP Role Element ).An optional
Detailelement information item (see 5.4.5 SOAP Detail Element). ).
The
Codeelement information item has:
A [local name] of
Code.A [namespace name] of
http://www.w3.org/2003/05/soap-envelope.One or two child element information items in its [children] property, in order, as follows:
A mandatory
Valueelement information item as described below (see 5.4.1.1 SOAP Value element (with Code parent))An optional
Subcodeelement information item as described below (see 5.4.1.2 SOAP Subcode element).
The
Subcodeelement information item has:
A [local name] of
Subcode.A [namespace name] of
http://www.w3.org/2003/05/soap-envelope.One or two child element information items in its [children] property, in order, as follows:
A mandatory
Valueelement information item as described below (see 5.4.1.3 SOAP Value element (with Subcode parent)).An optional
Subcodeelement information item (see 5.4.1.2 SOAP Subcode element).
The
Reasonelement information item has:
A [local name] of
Reason.A [namespace name] of
http://www.w3.org/2003/05/soap-envelope.One or more
Textelement information item children (see 5.4.2.1 SOAP Text Element). Each childTextelement information item SHOULD have a different value for itsxml:langattribute information item.The type of the
Reasonelement information item is env:faultReason.
The
Textelement information item has:
A [local name] of
Text.A [namespace name] of
http://www.w3.org/2003/05/soap-envelope.A mandatory attribute information item with a [local name] of
langand [namespace name] of "http://www.w3.org/XML/1998/namespace". Note that the definition in of thelangattribute information item requires that the [prefix] is "xml" or any capitalization thereof (see [XML 1.0], Language Identification).Any number of character information item children. Child character information items whose character code is amongst the whitespace characters as defined by [XML 1.0] are considered significant.
The type of the
Textelement information item is env:reasontext
The
Nodeelement information item has:
A [local name] of
Node.A [namespace name] of
http://www.w3.org/2003/05/soap-envelope.The type of the
Nodeelement information item is xs:anyURI.
SOAP nodes that do not act as the ultimate SOAP receiver MUST include this element information item.
The
Roleelement information item has:
A [local name] of
Role.A [namespace name] of
http://www.w3.org/2003/05/soap-envelope.The type of the
Roleelement information item is xs:anyURI.The value of the
Roleelement information item MUST be one of the roles assumed by the node during processing of the message (see 2.2 SOAP Roles and SOAP Nodes).
The
Detailelement information item has:
A [local name] of
Detail.A [namespace name] of
http://www.w3.org/2003/05/soap-envelope.Zero or more attribute information items in its [attributes] property.
Zero or more child element information items in its [children] property.
The
Upgradeelement information item has:
A [local name] of
Upgrade.A [namespace name] of "http://www.w3.org/2003/05/soap-envelope".
One or more
SupportedEnvelopeelement information items in its [children] property in 5.4.7.2 SOAP SupportedEnvelope Element.The
Upgradeelement information item MUST NOT have anencodingStyleattribute information item.
Each
NotUnderstoodheader block element information item has:
A [local name] of
NotUnderstood.A [namespace name] of "http://www.w3.org/2003/05/soap-envelope".
A
qnameattribute information item in its [attributes] property as described in 5.4.8.2 SOAP QName Attribute.The
NotUnderstoodelement information item MUST NOT have anencodingStyleattribute information item.
SOAP does not define a base URI but relies on the mechanisms defined in [XML Base] and [RFC 2396] for establishing a base URI against which relative URIs can be made absolute.
The use of IP addresses in URIs SHOULD be avoided whenever possible (see [RFC 1900]. However, when used, the literal format for IPv6 addresses in URIs as described by [RFC 2732] SHOULD be supported.
Any SOAP node MUST be able to handle the length of any URI that it publishes and both SOAP senders and SOAP receivers SHOULD be able to deal with URIs of at least 2048 characters in length.
If a SOAP node supports versioning from SOAP 1.1 to SOAP 1.2, then the SOAP node MUST implement the rules described in this appendix.
The rules for dealing with the possible SOAP/1.1 and SOAP Version 1.2 interactions are as follows:
A SOAP/1.1 node receiving a SOAP Version 1.2 message will according to SOAP/1.1 generate a version mismatch SOAP fault based on a SOAP/1.1 message construct. That is, the envelope will have a [local name] of
Envelopeand a [namespace name] of "http://schemas.xmlsoap.org/soap/envelope/".A SOAP Version 1.2 node receiving a SOAP/1.1 message either:
MAY process the message as a SOAP/1.1 message (if supported), or
MUST generate a version mismatch SOAP fault based on a SOAP/1.1 message construct following SOAP/1.1 semantics using a SOAP/1.1 binding to the underlying protocol (see [soap11]). The SOAP fault SHOULD include an
UpgradeSOAP header block as defined in this specification (see 5.4.7 VersionMismatch Faults) indicating support for SOAP Version 1.2. This allows a receiving SOAP/1.1 node to correctly interpret the SOAP fault generated by the SOAP Version 1.2 node.
The requirement on the behavior of SOAP 1.1 compliant SOAP node will not be tested by the test collection.
When serializing a graph for transmission inside a SOAP message, a representation that deserializes to the identical graph MUST be used; when multiple such representations are possible, any of them MAY be used. When receiving an encoded SOAP message, all representations MUST be accepted.
The graph node at which an edge terminates is determined by examination of the serialized XML as follows:
If the element information item representing the edge does not have a
refattribute information item (see 3.1.5.2 ref Attribute Information Item) among its attributes then that element information item is said to represent a node in the graph and the edge terminates at that node. In such cases the element information item represents both a graph edge and a graph nodeIf the element information item representing the edge does have a
refattribute information item (see 3.1.5.2 ref Attribute Information Item) among its attributes, then the value of that attribute information item MUST be identical to the value of exactly oneidattribute information item ( see 3.1.5.1 id Attribute Information Item) in the same envelope. In this case the edge terminates at the graph node represented by the element information item on which theidattribute information item appears. That element information item MUST be in the scope of anencodingStyleattribute with a value of "http://www.w3.org/2003/05/soap-encoding" (see SOAP 1.2 Part 1 SOAP encodingStyle Attribute).All nodes in the graph are encoded as described in 1 above. Additional inbound edges for multi reference graph nodes are encoded as described in 2 above.