The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
=pod

=head1 NAME

SOAP::WSDL::Manual::WS_I - How SOAP::WSDL complies to WS-I Basic Profile 1.0

=head1 DESCRIPTION

This document gives an overview about how SOAP::WSDL confirms to the rules of
the WS-I Basic Profile 1.0 found at
L<http://www.ws-i.org/Profiles/BasicProfile-1.0-2004-04-16.html>

Errata are not yet worked in.

You may find rules mis-categorized, especially in the "not applicable" section.

Such mis-categorizations are documentation bugs, please feel free to report
them.

Rules are categorized into the following sections:

=over

=item * RULES CONFIRMED

This section contains rules SOAP::WSDL follows. Conformance to these rules may
be assured by a test.

=item * RULES NOT CONFIRMED

This section contains rules SOAP::WSDL does not follow yet. These may be
considered as bugs.

=item * RULES NOT APPLICABLE

WS-I Basic Profile contains rules for web services as a whole. SOAP::WSDL only
plays the part of one layer in a Web Service CONSUMER / RECEIVER, thus does
not implement some parts the WS-I Basic Profile references.

This section contains rules not applicable for SOAP::WSDL, because they refer
to parts SOAP::WSDL does not implement.

=back

=head1 RULES CONFIRMED

=head2 R1005

 A MESSAGE MUST NOT contain soap:encodingStyle attributes on any of the elements
 whose namespace name is "http://schemas.xmlsoap.org/soap/envelope/".

SOAP::WSDL::Serializer::SOAP11 does not add soap:encodingStyle attributes on any
element.

=head2 R1006

 A MESSAGE MUST NOT contain soap:encodingStyle attributes on any element that is
 a child of soap:Body.

SOAP::WSDL::Serializer::SOAP11 does not add soap:encodingStyle attributes on any
element.

=head2 R1008

 A MESSAGE MUST NOT contain a Document Type Declaration.

SOAP::WSDL::Serializer::SOAP11 does not add DTDs.

=head2 R1009

 A MESSAGE MUST NOT contain Processing Instructions.

SOAP::WSDL::Serializer::SOAP11 does not add Processing Instructions

=head2 R1010

 A RECEIVER MUST accept messages that contain an XML Declaration.

SOAP::WSDL::Expat::MessageParser allows the use of XML Declarations.

=head2 R1011

 A MESSAGE MUST NOT have any element children of soap:Envelope following
 the soap:Body element.

SOAP::WSDL::Serializer::SOAP11 does not emit children of soap:Envelope following
the soap:Body element. Other serializers may behave different.

=head2 R1012

 A MESSAGE MUST be serialized as either UTF-8 or UTF-16.

SOAP::WSDL::Serializer::SOAP11 serializes messages as UTF-8.

=head2 R1018

 The media type of a MESSAGE's envelope MUST indicate the correct character
 encoding, using the charset parameter.

SOAP::WSDL::Transport::HTTP sets the Content-type header to
"text/xml; charset=utf8". SOAP::Transport does, too. Other transport
backends may behave different.

=head2 R1014

 The children of the soap:Body element in a MESSAGE MUST be namespace
 qualified.

SOAP::WSDL::Serializer::SOAP11 emits namespace-qualified child elements
of the soap:Body element.

=head2 R1017

 A RECEIVER MUST NOT mandate the use of the xsi:type attribute in messages
 except as required in order to indicate a derived type (see XML Schema
 Part 1: Structures, Section 2.6.1).

SOAP::WSDL::Expat::MessageParser does not require the use of xsi:type
attributes, but uses typemaps instead.

Other deserializers may not comply to this rule.

=head2 R1028

 When a Fault is generated by a RECEIVER, further processing SHOULD NOT be
 performed on the SOAP message aside from that which is necessary to rollback,
 or compensate for, any effects of processing the message prior to the
 generation of the Fault.

A fault is generated when an error occurs processing the message.
SOAP::WSDL::Deserializer::SOAP11 does not perform any additional processing
after an error occured.

=head2 R1029

 Where the normal outcome of processing a SOAP message would have resulted
 in the transmission of a SOAP response, but rather a SOAP Fault is generated
 instead, a RECEIVER MUST transmit a SOAP Fault message in place of the
 response.

A fault is generated when an error occurs processing the message.

=head2 R1030

 A RECEIVER that generates a SOAP Fault SHOULD notify the end user that a
 SOAP Fault has been generated when practical, by whatever means is deemed
 appropriate to the circumstance.

Via return value.

=head2  R1140

 A MESSAGE SHOULD be sent using HTTP/1.1.

SOAP::WSDL::Transport::HTTP uses HTTP/1.1

=head2 R1141

 A MESSAGE MUST be sent using either HTTP/1.1 or HTTP/1.0.

SOAP::WSDL::Transport::HTTP uses HTTP/1.1

=head2 R1107

 A RECEIVER MUST interpret SOAP messages containing only a soap:Fault element
 as a Fault.

SOAP::WSDL::Deserializer::SOAP11 does this.

=head2 R1132

 A HTTP request MESSAGE MUST use the HTTP POST method.

Both SOAP::WSDL::Transport::HTTP and SOAP::Transport::HTTP use POST.

=head2 R1108

 A MESSAGE MUST NOT use the HTTP Extension Framework (RFC2774).

SOAP::WSDL::Transport::HTTP does not use the HTTP Extension framework,
however SOAP::Transport::HTTP use M-POST if POST was not successful.

To be sure you comply to this rule, use SOAP::WSDL::Transport::HTTP as
transport backend.

=head2 R1109

 The value of the SOAPAction HTTP header field in a HTTP request
 MESSAGE MUST be a quoted string.

SOAP::WSDL::Client always quotes the SOAPAction header.

=head2 R1119

 A RECEIVER MAY respond with a Fault if the value of the SOAPAction
 HTTP header field is not quoted.

SOAP::WSDL does not apply any processing on the SOAPAction header
field.

=head2 R1131

 A CONSUMER MAY automatically redirect a request when it encounters a
 "307 Temporary Redirect" HTTP status code in a response.

LWP::UserAgent (used by SOAP::WSDL::Transport::HTTP and
SOAP::Transport::HTTP) accepts up to 7 levels of redirect by default.

=head2 R2113

 A MESSAGE containing serialized arrays MUST NOT include the
 soapenc:arrayType attribute.

SOAP::WSDL does not natively support soapenc::arrayType.

=head2 R2114

 The target namespace for WSDL definitions and the target namespace for
 schema definitions in a DESCRIPTION MAY be the same.

SOAP::WSDL does not impose any constraints on the target namespace for
WSDL definitions or schema definitions.

=head2 R2301

 The order of the elements in the soap:body of a MESSAGE MUST be the same
 as that of the wsdl:parts in the wsdl:message that describes it.

SOAP::WSDL obeys the part order.

=head2 R2712

 A document-literal binding MUST be represented on the wire as a
 MESSAGE with a soap:Body whose child element is an instance of the
 global element declaration referenced by the corresponding wsdl:message
 part.

If defined accordingly in the DESCRIPTION, SOAP::WSDL issues
document-literal binding operation MESSAGES conforming to this rule.

=head2 R2748

 A CONSUMER MUST NOT interpret the presence of the wsdl:required attribute
 on a soapbind extension element with a value of "false" to mean the extension
 element is optional in the messages generated from the WSDL description.

SOAP::WSDL does not imterpret the wsdl:required attribute at all.

=head2 R5000

 An INSTANCE MAY require the use of HTTPS.

SOAP::WSDL supports https.

=head2 R5010

 An INSTANCE MAY require the use of HTTPS with mutual authentication.

SOAP::WSDL supports all kinds of authentication known to LWP::UserAgent

=head2 R2742

 A MESSAGE MAY contain a fault detail entry in a SOAP fault that is not
 described by a wsdl:fault element in the corresponding WSDL description.

SOAP::WSDL does not emit such faults. Such faults can be processed by adding
custom maps to the type maps for SOAP::WSDL::Expat::MessageParser.

=head2 R2744

 A HTTP request MESSAGE MUST contain a SOAPAction HTTP header field with a
 quoted value equal to the value of the soapAction attribute of
 soapbind:operation, if present in the corresponding WSDL description.

SOAP::WSDL uses the soapAction attribute from soapbind:operation as SOAPAction
header in generated code.

Alternative WSDL parsers / code generator have to assure they pass the correct
soap_action to SOAP::WSDL::Client.

The interpreting SOAP::WSDL client does not conform to this rule, but "guesses"
the SOAPAction header from the operation name and the top node's namespace.

=head2 R2745

 A HTTP request MESSAGE MUST contain a SOAPAction HTTP header field with a
 quoted empty string value, if in the corresponding WSDL description, the
 soapAction of soapbind:operation is either not present, or present with an
 empty string as its value.

SOAP::WSDL::Client always assures the SOAPaction header is quoted, thus
automatically inserts the empty string if no SOAPAction header is defined.

=head2 R1015

 A RECEIVER MUST generate a fault if they encounter a message whose document
 element has a local name of "Envelope" but a namespace name that is not
 "http://schemas.xmlsoap.org/soap/envelope/".

SOAP::WSDL::Expat::MessageParser checks the namespace of the SOAP envelope.

SOAP::WSDL::Expat::MessageParser does not check that Envelope is the root
element, yet.

=head2 R1110

 An INSTANCE MAY accept connections on TCP port 80 (HTTP)

SOAP::WSDL::Server::CGI may be used in a web server listening at port 80.

=head2 R1124

 An INSTANCE MUST use a 2xx HTTP status code for responses that
 indicate a successful outcome of a request.

SOAP::WSDL::Server::CGI sends a 2xx HTTP status code for successful requests.

=head2 R1111

 An INSTANCE SHOULD use a "200 OK" HTTP status code for responses
 that contain a SOAP message that is not a SOAP fault.

SOAP::WSDL::Server::CGI does this.

=head2 R1112

 An INSTANCE SHOULD use either a "200 OK" or "202 Accepted" HTTP
 status code for a response that does do not contain a SOAP message
 but indicates successful HTTP outcome of a request.

SOAP::WSDL::Server::CGI does this.

=head2 R1130

 An INSTANCE MUST use HTTP status code "307 Temporary Redirect"
 when redirecting a request to a different endpoint.

SOAP::WSDL::Server::CGI has no means of redirecting. The web server running
a SOAP::WSDL::Server::CGI script is responsible for redirecting with a 307
HTTP status code.

=head2 R1125

 An INSTANCE MUST use a 4xx HTTP status code for responses that indicate
 a problem with the format of the request.

SOAP::WSDL does this.

=head2 R1113

 An INSTANCE SHOULD use a "400 Bad Request "HTTP status code, if the
 request message is a malformed HTTP request, or not well-formed XML.

SOAP::WSDL does this.

=head2 R1114

 An INSTANCE SHOULD use a "405 Method not Allowed" HTTP status code if the
 request method was not "POST".

SOAP::WSDL does this.

=head2 R1115

 An INSTANCE SHOULD use a "415 Unsupported Media Type" HTTP status code if
 the Content-Type HTTP request header did not have a value consistent with
 the value specified for the corresponding binding of the input message.

SOAP::WSDL::Server::CGI does not support any content type other than text/xml
and application/xml yet.


=head1 RULES NOT CONFIRMED

=head2 R4001

 A RECEIVER MUST accept messages that include the Unicode Byte Order Mark
 (BOM).

May automatically work with XML::Parser::Expat, but is not tested yet.

TODO write test. If not confirmed, add encoding support.

=head2 R1002

 A RECEIVER MUST accept fault messages that have any number of elements,
 including zero, appearing as children of the detail element. Such children
 can be qualified  or unqualified.

Partially confirmed: This only works when the fault detail elements are added to
the deserializer's typemap.

TODO add processing of arbitrary content of faults to SOAP::WSDL::Expat::MessageParser

=head2 R1003

 A RECEIVER MUST accept fault messages that have any number of qualified or
 unqualified attributes, including zero, appearing on the detail element.
 The namespace of qualified attributes can be anything other than
 "http://schemas.xmlsoap.org/soap/envelope/".

TODO add processing of arbitrary attributes to SOAP::WSDL::SOAP::Typelib::Fault11

=head2 R1016

 A RECEIVER MUST accept fault messages that carry an xml:lang attribute on
 the faultstring element.

SOAP::WSDL::Expat::MessageParser currently ignores all attributes.

TODO add processing of the xml:lang attribute to SOAP::WSDL::SOAP::Typelib::Fault11

=head2 R1007

 A MESSAGE described in an rpc-literal binding MUST NOT contain soap:encodingStyle
 attribute on any elements are grandchildren of soap:Body.

SOAP::WSDL::Serializer::SOAP11 does not add soap:encodingStyle attributes on any
element.

However, rpc-literal bindings are not supported, yet.

TODO support rpc-literal bindings.

=head2 R2008

 In a DESCRIPTION the value of the location attribute of a wsdl:import element
 SHOULD be treated as a hint.

The wsdl:import element imports the referenced WSDL definition.

This is rather hard-wired and does not allow to specify a wsdl:import without
a resolvable location in SOAP::WSDL.

=head2 R4002

 A DESCRIPTION MAY include the Unicode Byte Order Mark (BOM).

TODO Test.

=head2 R4003

 A DESCRIPTION MUST use either UTF-8 or UTF-16 encoding.

TODO Test whether UTF-16 works.

=head2 R2020

 The wsdl:documentation element MAY occur as a child of the wsdl:import
 element in a DESCRIPTION.

Not tested yet.

=head2 R2024

 The wsdl:documentation element MAY occur as a first child of the
 wsdl:definitions element in a DESCRIPTION.

TODO Test.

=head2 R2027

 If during the processing of an element in the WSDL namespace in a
 description, a consumer encounters a WSDL extension element amongst
 its element children, that has a wsdl:required attribute with a boolean
 value of "true" that the consumer does not understand or cannot process,
 the CONSUMER MUST fail processing of that element in the WSDL namespace.

TODO Implement support for wsdl:required

=head2 R2750

 A CONSUMER MUST ignore a SOAP response carried in a response from a
 one-way operation.

SOAP::WSDL does not ignore the SOAP response from a one way operation yet.

TODO Define operation type signature, and ignore result from one way operations.

=head2 R2747

 A CONSUMER MUST understand and process all WSDL 1.1 SOAP Binding extension
 elements, irrespective of the presence or absence of the wsdl:required
 attribute on an extension element; and irrespective of the value of the
 wsdl:required attribute, when present.

SOAP::WSDL does not implement all WSDL 1.1 SOAP Binding extension yet.

TODO check and implement.

=head2 R2800

 A DESCRIPTION MAY use any construct from XML Schema 1.0.

SOAP::WSDL's WSDL parser doen not allow all contructs from XML Schema 1.0 to
be used.

TODO become "minimal conformant".

=head1 RULES NOT APPLICABLE

=head2 R0004

 A MESSAGE MAY contain conformance claims, as specified in the conformance claim schema.

SOAP::WSDL::Serializer::SOAP11 does not add conformance claims.
Other serializers may act different.

=head2 R0005

 A MESSAGE's conformance claims MUST be carried as SOAP header blocks.

SOAP::WSDL::Serializer::SOAP11 does not add conformance claims.
Other serializers may act different.

=head2 R0006

 A MESSAGE MAY contain conformance claims for more than one profile.

SOAP::WSDL::Serializer::SOAP11 does not add conformance claims.
Other serializers may act different.

=head2 R0007

 A SENDER MUST NOT use the soap:mustUnderstand attribute when sending a SOAP
 header block containing a conformance claim.

SOAP::WSDL::Serializer::SOAP11 does not add conformance claims.
Other serializers may act different.

=head2 R3020

 REGDATA of type uddi:tModel claiming conformance with a Profile MUST be
 categorized using the ws-i-org:conformsTo:2002_12 taxonomy.

SOAP::WSDL does not publish web services yet.

=head2 R3030

 REGDATA of type uddi:tModel claiming conformance with a Profile MUST use
 the ws-i-org:conformsTo:2002_12 categorization value corresponding to
 the conformance claim URI for that Profile.

SOAP::WSDL does not publish web services yet.

=head2 R3021

 A REGISTRY MUST support the WS-I Conformance category system by adding
 the ws-i-org:conformsTo:2002_12 tModel definition to its registry content.

SOAP::WSDL does not publish web services yet.

=head2 R3005

 REGDATA other than uddi:tModel elements representing conformant Web service
 types MUST NOT be categorized using the ws-i-org:conformsTo:2002_12
 taxonomy and a categorization of "http://ws-i.org/profiles/basic/1.0".

SOAP::WSDL does not publish web services yet.

=head2 R3004

 REGDATA of type uddi:tModel MUST be constructed so that the conformance
 claim it makes is consistent with the conformance claim made by the
 wsdl:binding to which it refers.

SOAP::WSDL does not publish web services yet.

=head2 R1000

 When a MESSAGE contains a soap:Fault element, that element MUST NOT have element
 children other than faultcode, faultstring, faultactor and detail.

SOAP::WSDL does not send fault messages. However, SOAP::WSDL::SOAP::Typelib::Fault11
complies to this rule.

=head2 R1001

 When a MESSAGE contains a soap:Fault element its element children MUST be
 unqualified.

SOAP::WSDL does not send fault messages. However, SOAP::WSDL::SOAP::Typelib::Fault11
complies to this rule.

=head2 R1004

 When a MESSAGE contains a faultcode element the content of that element
 SHOULD be one of the fault codes defined in SOAP 1.1 or a namespace qualified
 fault code.

SOAP::WSDL does not send fault messages. However, the fault issued by
SOAP::WSDL::Deserializer comply to this rule.

=head2 R1031

 When a MESSAGE contains a faultcode element the content of that element SHOULD
 NOT use of the SOAP 1.1 "dot" notation to refine the meaning of the Fault.

SOAP::WSDL does not send fault messages. However, the fault issued by
SOAP::WSDL::Deserializer comply to this rule.

=head2 R1013

 A MESSAGE containing a soap:mustUnderstand attribute MUST only use the lexical
 forms "0" and "1".

SOAP::WSDL does not add soap:mustUnderstand attributes.

=head2 R1025

 A RECEIVER MUST handle messages in such a way that it appears that all
 checking of mandatory header blocks is performed before any actual
 processing.

SOAP::WSDL does not check mandatory header blocks yet.

=head2 R1027

 A RECEIVER MUST generate a "soap:MustUnderstand" fault when a message
 contains a mandatory header block (i.e., one that has a soap:mustUnderstand
 attribute with the value "1") targeted at the receiver (via soap:actor)
 that the receiver does not understand.

SOAP::WSDL does not check mandatory header blocks yet.

=head2 R1120

 An INSTANCE MAY use the HTTP state mechanism ("Cookies").

SOAP::WSDL::Server::CGI does not use cookies. A web server running a
SOAP::WSDL::Server::CGI script may use cookies..

=head2 R1122

 An INSTANCE using Cookies SHOULD conform to RFC2965.


SOAP::WSDL::Server::CGI does not use cookies. A web server running a
SOAP::WSDL::Server::CGI script may use cookies..

=head2 R1121

 An INSTANCE SHOULD NOT require consumer support for Cookies in order to
 function correctly


SOAP::WSDL::Server::CGI does not use cookies. A web server running a
SOAP::WSDL::Server::CGI script may use cookies.

=head2 R1123

 The value of the cookie MUST be considered to be opaque by the CONSUMER.


SOAP::WSDL::Server::CGI does not use cookies. A web server running a
SOAP::WSDL::Server::CGI script may use cookies.

=head2 R2028

 A DESCRIPTION using the WSDL namespace (prefixed "wsdl" in this Profile)
 MUST be valid according to the XML Schema found at
 "http://schemas.xmlsoap.org/wsdl/2003-02-11.xsd".

See 2029.

=head2 R2029

 A DESCRIPTION using the WSDL SOAP binding namespace (prefixed "soapbind"
 in this Profile) MUST be valid according to the XML Schema found at
 "http://schemas.xmlsoap.org/wsdl/soap/2003-02-11.xsd".

Although the Profile requires WSDL descriptions to be Schema valid,
it does not require consumers to validate WSDL documents.

It is the responsibility of a WSDL document's author to assure that it
is Schema valid.

=head2 R2001

 A DESCRIPTION MUST only use the WSDL "import" statement to import another
 WSDL description.

SOAP::WSDL (partially) supports the wsdl:import statement. The wsdl:include
statement is not supported.

It's the responsibility of the WSDL author to use only the wsdl:import
statement for importing WSDL descriptions.

=head2 R2002

 To import XML Schema Definitions, a DESCRIPTION MUST use the XML Schema
 "import" statement.

SOAP::WSDL has no means of generating WSDL definitions.

=head2 R2003

 A DESCRIPTION MUST use the XML Schema "import" statement only within the
 xsd:schema element of the types section.

SOAP::WSDL has no means of generating WSDL definitions.

=head2 R2004

 A DESCRIPTION MUST NOT use the XML Schema "import" statement to import a
 Schema from any document whose root element is not "schema" from the
 namespace "http://www.w3.org/2001/XMLSchema".

SOAP::WSDL has no means of generating WSDL definitions.

=head2 R2009

 An XML Schema directly or indirectly imported by a DESCRIPTION MAY include
 the Unicode Byte Order Mark (BOM).

SOAP::WSDL has no means of generating WSDL definitions.

=head2 R2010

 An XML Schema directly or indirectly imported by a DESCRIPTION MUST
 use either UTF-8 or UTF-16 encoding.

SOAP::WSDL has no means of generating WSDL definitions.

=head2 R2011

 An XML Schema directly or indirectly imported by a DESCRIPTION MUST use
 version 1.0 of the eXtensible Markup Language W3C Recommendation.

SOAP::WSDL has no means of generating WSDL definitions.

=head2 R2007

 A DESCRIPTION MUST specify a non-empty location attribute on the wsdl:import
 element.

SOAP::WSDL has no means of generating WSDL definitions.

=head2 R2022

 When they appear in a DESCRIPTION, wsdl:import elements MUST precede all
 other elements from the WSDL namespace except wsdl:documentation.

SOAP::WSDL has no means of generating WSDL definitions.

=head2 R2023

 When they appear in a DESCRIPTION, wsdl:types elements MUST precede all
 other elements from the WSDL namespace except wsdl:documentation and
 wsdl:import.

SOAP::WSDL has no means of generating WSDL definitions.

=head2 R4004

 A DESCRIPTION MUST use version 1.0 of the eXtensible Markup Language W3C
 Recommendation.

SOAP::WSDL has no means of generating WSDL definitions.

=head2 R2005

 The targetNamespace attribute on the wsdl:definitions element of a
 description that is being imported MUST have same the value as the
 namespace attribute on the wsdl:import element in the importing
 DESCRIPTION.

SOAP::WSDL has no means of generating WSDL definitions.

=head2 R2021

 The wsdl:documentation element MAY occur as a child of the wsdl:part
 element in a DESCRIPTION.

SOAP::WSDL has no means of generating WSDL definitions.

=head2 R2025

 A DESCRIPTION containing WSDL extensions MUST NOT use them to
 contradict other requirements of the Profile.

SOAP::WSDL has no means of generating WSDL definitions.

=head2 R2026

 A DESCRIPTION SHOULD NOT include extension elements with a wsdl:required
 attribute value of "true" on any WSDL construct (wsdl:binding,
 wsdl:portType, wsdl:message, wsdl:types or wsdl:import) that claims
 conformance to the Profile.

SOAP::WSDL has no means of generating WSDL definitions.

=head2 R2101

 A DESCRIPTION MUST NOT use QName references to elements in namespaces that
 have been neither imported, nor defined in the referring WSDL document.

SOAP::WSDL has no means of generating WSDL definitions.

=head2 R2102

 A QName reference to a Schema component in a DESCRIPTION MUST use the
 namespace defined in the targetNamespace attribute on the xsd:schema
 element, or to a namespace defined in the namespace attribute on an
 xsd:import element within the xsd:schema element.

SOAP::WSDL has no means of generating WSDL definitions.

=head2 R2105

 All xsd:schema elements contained in a wsdl:types element of a
 DESCRIPTION MUST have a targetNamespace attribute with a valid and non-null
 value, UNLESS the xsd:schema element has xsd:import and/or
 xsd:annotation as its only child element(s).

SOAP::WSDL has no means of generating WSDL definitions.

=head2 R2110

 In a DESCRIPTION, array declarations MUST NOT extend or restrict the
 soapenc:Array type.

SOAP::WSDL has no means of generating WSDL definitions.

=head2 R2111

 In a DESCRIPTION, array declarations MUST NOT use wsdl:arrayType attribute
 in the type declaration.

SOAP::WSDL has no means of generating WSDL definitions.

=head2 R2112

 In a DESCRIPTION, array declaration wrapper elements SHOULD NOT be named
 using the convention ArrayOfXXX.

SOAP::WSDL has no means of generating WSDL definitions.

=head2 R2201

 A document-literal binding in a DESCRIPTION MUST, in each of its
 soapbind:body element(s), have at most one part listed in the parts
 attribute, if the parts attribute is specified.

SOAP::WSDL has no means of generating WSDL definitions.

=head2 R2210

 If a document-literal binding in a DESCRIPTION does not specify the parts
 attribute on a soapbind:body element, the corresponding abstract
 wsdl:message MUST define zero or one wsdl:parts.

SOAP::WSDL has no means of generating WSDL definitions.

=head2 R2202

 A wsdl:binding in a DESCRIPTION MAY contain soapbind:body element(s) that
 specify that zero parts form the soap:Body.

SOAP::WSDL has no means of generating WSDL definitions.

=head2 R2203

 An rpc-literal binding in a DESCRIPTION MUST refer, in its soapbind:body
 element(s), only to wsdl:part element(s) that have been defined using the
 type attribute.

SOAP::WSDL has no means of generating WSDL definitions.

=head2 R2211

 A MESSAGE described with an rpc-literal binding MUST NOT have the xsi:nil
 attribute with a value of "1" or "true" on the part accessors.

=head2 R2207

 A wsdl:message in a DESCRIPTION MAY contain wsdl:parts that use the
 elements attribute provided those wsdl:parts are not referred to by a
 soapbind:body in an rpc-literal binding.

SOAP::WSDL has no means of generating WSDL definitions.

=head2 R2204

 A document-literal binding in a DESCRIPTION MUST refer, in each of its
 soapbind:body element(s), only to wsdl:part element(s) that have been
 defined using the element attribute.

SOAP::WSDL has no means of generating WSDL definitions.

Note: SOAP::WSDL requires that a DESCRIPTION confirms to these rules.

=head2 R2208

 A binding in a DESCRIPTION MAY contain soapbind:header element(s) that
 refer to wsdl:parts in the same wsdl:message that are referred to by its
 soapbind:body element(s).

=head2 R2205

 A wsdl:binding in a DESCRIPTION MUST refer, in each of its soapbind:header,
 soapbind:headerfault and soapbind:fault elements, only to wsdl:part
 element(s) that have been defined using the element attribute.

SOAP::WSDL has no means of generating WSDL definitions.

=head2 R2209

 A wsdl:binding in a DESCRIPTION SHOULD bind every wsdl:part of a
 wsdl:message in the wsdl:portType to which it refers to one of
 soapbind:body, soapbind:header, soapbind:fault or soapbind:headerfault.

SOAP::WSDL has no means of generating WSDL definitions.

=head2 R2206

 A wsdl:message in a DESCRIPTION containing a wsdl:part that uses the
 element attribute MUST refer, in that attribute, to a global element
 declaration.

SOAP::WSDL has no means of generating WSDL definitions.

=head2 R2302

 A DESCRIPTION MAY use the parameterOrder attribute of an
 wsdl:operation element to indicate the return value and method
 signatures as a hint to code generators.

SOAP::WSDL has no means of generating WSDL definitions.

=head2 R2303

 A DESCRIPTION MUST NOT use Solicit-Response and Notification type
 operations in a wsdl:portType definition.

=head2 R2304

 A wsdl:portType in a DESCRIPTION MUST have operations with distinct
 values for their name attributes.

Note: SOAP::WSDL requires that a DESCRIPTION confirms to these rules.

=head2 R2305

 A wsdl:portType in a DESCRIPTION MUST be constructed so that the
 parameterOrder attribute, if present, omits at most 1 wsdl:part
 from the output message.

=head2 R2306

 A wsdl:message in a DESCRIPTION MUST NOT specify both type and
 element attributes on the same wsdl:part.

SOAP::WSDL has no means of generating WSDL definitions.

=head2 R2401

 A wsdl:binding element in a DESCRIPTION MUST use WSDL SOAP
 Binding as defined in WSDL 1.1 Section 3.

SOAP::WSDL has no means of generating WSDL definitions.

=head2 R2701

 The wsdl:binding element in a DESCRIPTION MUST be constructed so
 that its soapbind:binding child element specifies the transport
 attribute.

SOAP::WSDL has no means of generating WSDL definitions.

=head2 R2702

 A wsdl:binding element in a DESCRIPTION MUST specify the HTTP
 transport protocol with SOAP binding. Specifically, the transport
 attribute of its soapbind:binding child MUST have the value
 "http://schemas.xmlsoap.org/soap/http".

SOAP::WSDL has no means of generating WSDL definitions.

=head2 R2705

 A wsdl:binding in a DESCRIPTION MUST use either be a rpc-literal
 binding or a document-literal binding.

SOAP::WSDL has no means of generating WSDL definitions.

Note: SOAP::WSDL does not support rpc-literal bindings yet.

=head2 R2706

 A wsdl:binding in a DESCRIPTION MUST use the value of "literal"
 for the use attribute in all soapbind:body, soapbind:fault,
 soapbind:header and soapbind:headerfault elements.

SOAP::WSDL has no means of generating WSDL definitions.

=head2 R2707

 A wsdl:binding in a DESCRIPTION that contains one or more
 soapbind:body, soapbind:fault, soapbind:header or soapbind:headerfault
 elements that do not specify the use attribute MUST be interpreted as
 though the value "literal" had been specified in each case.

SOAP::WSDL has no means of generating WSDL definitions.

=head2 R2709

 A wsdl:portType in a DESCRIPTION MAY have zero or more wsdl:bindings
 that refer to it, defined in the same or other WSDL documents.

SOAP::WSDL has no means of generating WSDL definitions.

=head2 R2710

 The operations in a wsdl:binding in a DESCRIPTION MUST result in wire
 signatures that are different from one another.

SOAP::WSDL has no means of generating WSDL definitions.

=head2 R2711

 A DESCRIPTION SHOULD NOT have more than one wsdl:port with the same
 value for the location attribute of the soapbind:address element.

SOAP::WSDL has no means of generating WSDL definitions.

=head2 R2714

For one-way operations, an INSTANCE MUST NOT return a HTTP response
that contains a SOAP envelope. Specifically, the HTTP response
entity-body must be empty.

SOAP::WSDL does not act as a server, yet.

=head2 R2727

 For one-way operations, a CONSUMER MUST NOT interpret a successful
 HTTP response status code (i.e., 2xx) to mean the message is valid
 or that the receiver would process it.

SOAP::WSDL regards a successful HTTP status code for a one-way operation
as an acknowledgement of the RECEIVER having receive (not processed!)
the message.

SOAP::WSDL makes no assumptions about the processing of SOAP messages,
but higher level clients may do.

=head2 R2716

 A document-literal binding in a DESCRIPTION MUST NOT have the
 namespace attribute specified on contained soapbind:body,
 soapbind:header, soapbind:headerfault and soapbind:fault elements.

SOAP::WSDL has no means of generating WSDL definitions.

=head2 R2717

 An rpc-literal binding in a DESCRIPTION MUST have the namespace attribute
 specified, the value of which MUST be an absolute URI, on
 contained soapbind:body elements.

SOAP::WSDL has no means of generating WSDL definitions.

=head2 R2726

 An rpc-literal binding in a DESCRIPTION MUST NOT have the namespace
 attribute specified on contained soapbind:header, soapbind:headerfault
 and soapbind:fault elements.

SOAP::WSDL has no means of generating WSDL definitions.

=head2 R2718

 A wsdl:binding in a DESCRIPTION MUST have the same set of
 wsdl:operations as the wsdl:portType to which it refers

SOAP::WSDL has no means of generating WSDL definitions.

=head2 R2719

 A wsdl:binding in a DESCRIPTION MAY contain no soapbind:headerfault
 elements if there are no known header faults.

SOAP::WSDL has no means of generating WSDL definitions.

=head2 R2740

 A wsdl:binding in a DESCRIPTION SHOULD contain a  soapbind:fault describing
 each known fault.

SOAP::WSDL has no means of generating WSDL definitions.

=head2 R2741

 A wsdl:binding in a DESCRIPTION SHOULD contain a soapbind:headerfault
 describing each known header fault.

SOAP::WSDL has no means of generating WSDL definitions.

=head2 R2743

 A MESSAGE MAY contain the details of a header processing related fault in a
 SOAP header block that is not described by a wsdl:headerfault element in the
 corresponding WSDL description.

=head2 R2720

 A wsdl:binding in a DESCRIPTION MUST use the attribute named part with a
 schema type of "NMTOKEN" on all contained soapbind:header and
 soapbind:headerfault elements.

=head2 R2749

 A wsdl:binding in a DESCRIPTION MUST NOT use the attribute named parts on
 contained soapbind:header and soapbind:headerfault elements.

=head2 R2721

 A wsdl:binding in a DESCRIPTION MUST have the name attribute specified on all
 contained soapbind:fault elements.

=head2 R2754

 In a DESCRIPTION, the value of the name attribute on a soapbind:fault element
 MUST match the value of the name attribute on its parent wsdl:fault element.

=head2 R2722

 A wsdl:binding in a DESCRIPTION MAY specify the use attribute on contained
 soapbind:fault elements.

=head2 R2723

 If in a wsdl:binding in a DESCRIPTION the use attribute on a contained
 soapbind:fault element is present, its value MUST be "literal".

=head2 R2728

 A wsdl:binding in a DESCRIPTION that omits the use attribute on a contained
 soapbind:fault element MUST be interpreted as though use="literal" had been
 specified.

=head2 R2724

 If an INSTANCE receives a message that is inconsistent with its WSDL
 description, it SHOULD generate a soap:Fault with a faultcode of "Client",
 unless a "MustUnderstand" or "VersionMismatch" fault is generated.

=head2 R2725

 If an INSTANCE receives a message that is inconsistent with its WSDL
 description, it MUST check for "VersionMismatch", "MustUnderstand" and
 "Client" fault conditions in that order.

=head2 R2729

 A MESSAGE described with an rpc-literal binding that is a response message
 MUST have a wrapper element whose name is the corresponding wsdl:operation
 name suffixed with the string "Response".

=head2 R2735

 A MESSAGE described with an rpc-literal binding MUST place the part accessor
 elements for parameters and return value in no namespace.

=head2 R2737

 A MESSAGE described with an rpc-literal binding MUST namespace qualify the
 children of part accessor elements for the parameters and the return value
 with the targetNamespace in which their types are defined.

=head2 R2738

 A MESSAGE MUST include all soapbind:headers specified on a wsdl:input or
 wsdl:output of a wsdl:operation of a wsdl:binding that describes it.

=head2 R2739

 A MESSAGE MAY contain SOAP header blocks that are not described in the
 wsdl:binding that describes it.

=head2 R2753

 A MESSAGE containing SOAP header blocks that are not described in the
 appropriate wsdl:binding MAY have the mustUnderstand attribute on such SOAP
 header blocks set to '1'.

=head2 R2751

 The order of soapbind:header elements in soapbind:binding  sections of a
 DESCRIPTION MUST be considered independent of the order of SOAP header blocks
 in the message.

=head2 R2752

 A MESSAGE MAY contain more than one instance of each SOAP header block for
 each soapbind:header element in the appropriate child of soapbind:binding in
 the corresponding description.

=head2 R2801

 A DESCRIPTION MUST use XML Schema 1.0 Recommendation as the basis of user
 defined datatypes and structures.

=head2 R3100

 REGDATA of type uddi:bindingTemplate representing a conformant INSTANCE MUST
 contain the uddi:accessPoint element.

=head2 R3002

 REGDATA of type uddi:tModel representing a conformant Web service type MUST
 use WSDL as the description language.

=head2 R3003

 REGDATA of type uddi:tModel representing a conformant Web service type MUST be
 categorized using the uddi:types taxonomy and a categorization of "wsdlSpec".

=head2 R3010

 REGDATA of type uddi:tModel representing a conformant Web service type MUST
 follow V1.08 of the UDDI Best Practice for Using WSDL in a UDDI Registry.

=head2 R3011

 The wsdl:binding that is referenced by REGDATA of type uddi:tModel MUST itself
 conform to the Profile.

=head2 R5001

 If an INSTANCE requires the use of HTTPS, the location attribute of the
 soapbind:address element in its wsdl:port description MUST be a URI whose
 scheme is "https"; otherwise it MUST be a URI whose scheme is "http".

SOAP::WSDL has no means of generating WSDL definitions.

=head1 LICENSE AND COPYRIGHT

This file contains quotes from
L<http://www.ws-i.org/Profiles/BasicProfile-1.0-2004-04-16.html>. To these
quotes, the legal notice from the document source applies.

Rest of this file: Copyright 2007 Martin Kutter.

This file is part of SOAP-WSDL. You may distribute/modify it under
the same terms as perl itself

=head1 AUTHOR

Martin Kutter E<lt>martin.kutter fen-net.deE<gt>

=head1 REPOSITORY INFORMATION

 $Rev: 562 $
 $LastChangedBy: kutterma $
 $Id: WS_I.pod 562 2008-02-22 20:32:17Z kutterma $
 $HeadURL: https://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Manual/WS_I.pod $

=cut