- From: Martin Gudgin <mgudgin@microsoft.com>
- Date: Tue, 19 Nov 2002 05:09:28 -0800
- To: "Sanjiva Weerawarana" <sanjiva@watson.ibm.com>, "WS-Desc WG (Public)" <www-ws-desc@w3.org>
Was discussed at FTF: <xs:complexType name='foo'> <xs:sequence> <xs:element name='a' /> <xs:element name='b' /> <xs:element name='c' /> </xs:sequence> </xs:complexType> <wsdl:input type='foo' /> Alternatively use named model groups: <xs:group name='foo'> <xs:sequence> <xs:element name='a' /> <xs:element name='b' /> <xs:element name='c' /> </xs:sequence> </xs:group> <wsdl:input group='foo' /> soap:header already refers directly to element/type. Personally I'd model attachments using an element decl and figure out the actual serialization in the binding. Gudge > -----Original Message----- > From: Sanjiva Weerawarana [mailto:sanjiva@watson.ibm.com] > Sent: 19 November 2002 11:44 > To: WS-Desc WG (Public) > Subject: Fw: Proposal for the removal of the message > construct from WSDL 1.2 > > > > I don't recall seeing a response to this .. how would this > be modeled using the complexType proposal? > > Sanjiva. > > ----- Original Message ----- > From: "Sanjiva Weerawarana" <sanjiva@watson.ibm.com> > To: <www-ws-desc@w3.org> > Sent: Saturday, November 09, 2002 8:13 AM > Subject: Re: Proposal for the removal of the message > construct from WSDL 1.2 > > > > > > I haven't read this carefully yet, but how would you describe the > > following with this: > > <SOAP:Envelope> > > <SOAP:Body> > > <a/> > > <b/> > > <c/> > > </SOAP:Body> > > </SOAP:Envelope> > > > > What about attachments and headers? > > > > Sanjiva. > > > > ----- Original Message ----- > > From: "Roberto Chinnici" <roberto.chinnici@sun.com> > > To: <www-ws-desc@w3.org> > > Sent: Wednesday, November 06, 2002 6:24 PM > > Subject: Proposal for the removal of the message construct > from WSDL > > 1.2 > > > > > > > Gudge, Jeffrey and myself had an action item to write up > a proposal > > > to remove wsdl:message from the language. The proposal is > attached. > > > Since I'm travelling > > > this week, I won't be able to reply promptly to emails on > the subject, > > > but I'll > > > be happy to address any questions at the face-to-face > meeting next week. > > > > > > Regards, > > > Roberto > > > > > > > > > > > > > ---------------------------------------------------------------------- > > ---- > -- > > ---- > > > > > > > Removing wsdl:messageProposal for the Removal of the Message > > > Construct > > from WSDL 1.2 > > > Roberto Chinnici, Sun Microsystems, Inc. > > > Martin Gudgin, Microsoft > > > Jeffrey Schlimmer, Microsoft > > > > > > > > > October 21st, 2002 > > > Introduction > > > The <wsdl:message/> construct has an unenviable status in > WSDL 1.1 > > > and > > 1.2. Underpowered and sandwiched between more interesting and > > semantically rich constructs (operations and types), it > often appears > > to exist for > purely > > syntactic reasons. > > > > > > In this proposal, we explore how the removal of message from WSDL > > > 1.2 > > would pleasantly affect the language, giving tangible > benefits to spec > > editors, extensions writers, service authors, tools writers > and more. > > > > > > Problem Statement > > > The <wsdl:message/> construct describes a message as a > list of parts > > > of > > arbitrary types. > > > > > > The first problem that WSDL authors face is the limited > > > expressiveness > of > > this construct. Several useful capabilities are completely > absent. For > > instance, > > > > > > a.. messages cannot extend other messages; > > > b.. message parts cannot be shared by messages > > > > > > c.. message parts cannot be defined as being optional; > > > > > > d.. message parts cannot have an associated multiplicity (e.g. > > > "this > > part must appear at least twice"); > > > > > > e.. message parts are named by NCNAMEs, not qualified names; > > > f.. messages cannot be defined as being "extensible", i.e. as > accepting > > arbitrary parts in addition to those specified. > > > > > > Although some of these limitations could be addressed by > extending > > > the > > <wsdl:message/> and <wsdl:part/> constructs, we'd rather > not duplicate > work > > done in other working groups. Moreover, it's always hard to > determine > where > > we should draw the line when adding new features. > > > > > > Expressiveness aside, it's often the case that messages are > > > superflous > and > > have to be present exclusively for syntactic reasons. Not > only fault > > messages consist of just one part, but a common WSDL > authoring style > > uses single-part input and output messages for all operations. > > > > > > Here's an example taken from the WSDL 1.1 specification ([1], > > > Section > 1.2, > > Example 1): > > > > > > <types> > > > <schema > targetNamespace="http://example.com/stockquote.xsd" > > > xmlns="http://www.w3.org/2000/10/XMLSchema"> > > > <element name="TradePriceRequest"> > > > <complexType> > > > <all> > > > <element name="tickerSymbol" > type="string"/> > > > </all> > > > </complexType> > > > </element> > > > <element name="TradePrice"> > > > <complexType> > > > <all> > > > <element name="price" type="float"/> > > > </all> > > > </complexType> > > > </element> > > > </schema> > > > </types> > > > > > > <message name="GetLastTradePriceInput"> > > > <part name="body" element="xsd1:TradePriceRequest"/> > > > </message> > > > > > > <message name="GetLastTradePriceOutput"> > > > <part name="body" element="xsd1:TradePrice"/> > > > </message> > > > > > > <portType name="StockQuotePortType"> > > > <operation name="GetLastTradePrice"> > > > <input message="tns:GetLastTradePriceInput"/> > > > <output message="tns:GetLastTradePriceOutput"/> > > > </operation> > > > </portType> > > > > > > > > > In addition to the presence of single-part messages, another hint > > > that > > messages can safely be dispensed with comes from the naming > convention > used > > in the example above (and, incidentally, by countless other WSDL > documents). > > In particular, notice how the names of the input and output > messages > > for > an > > operation (e.g, GetLastTradePriceInput and GetLastTradePriceOutput) > > mirror the names of the XML Schema element declarations > > (TradePriceRequest and TradePrice). Clearly, if the latter > were used > > directly when declaring a <wdsl:operation/>, no loss of information > > would occur. As yet an > additional > > hint of the artificiality of the part construct itself, > consider some > > of > the > > names typically given to parts of a message: "body", "parameters", > > "arguments", "result" -- all as generic and non-descript as > possible. > > > > > > Richness and meaningfulness of messages aside, one additional > > > problem is > > that faced by the authors of a WSDL binding extension. > > > > > > As things stand today, bindings must deal with (at least) two > > > different > > packaging/typing constructs, namely <wsdl:message/> and > > <xsd:complexType/> (or <xsd:element/>): the former applies > only to the > > top-level, while the second one can go arbitrarily deep. > > > Consequently, when the author of a binding wants to describe the > > > result > of > > applying the binding rules to a <wsdl:operation/>, he is forced to > > give a first description in terms of message parts, then > refine it to > > say how > parts > > are to be mapped based on their type. > > > Proposed Resolution > > > We propose eliminating the <wsdl:message> construct altogether. > > > > > > In lieu of messages, portType operations would use their favorite > > > type > > system to describe their input, output and fault messages. > > > > > > The type system extensibility features currently built in the > <wsdl:part/> > > element would be moved to the <wsdl:input/>, <wsdl:output/> and > > <wsdl:fault/> elements. In particular, those elements would > accept one > > of the predefined "type" and "element" attributes, used to refer to > > XML > Schema > > type definitions and element declarations respectively, as well as > > other arbitrary namespace-qualified attributes to allow > WSDL authors > > to use arbitrary type systems. > > > > > > The component model would undergo a corresponding change. In > > > particular, > > "message" and "part" components would disappear, while "message > > reference" components would acquire some of the properties > currently > > associated with parts. > > > > > > Consequences > > > > > > Unlike <wsdl:message/>, the XML Schema type system is > feature-rich, > > > so > > that the limitations listed in the "Problem Statement" > section above > > do > not > > apply. More explicitely, > > > a.. types can be derived from other types through > either extension > > > or > > restriction; > > > b.. the minOccurs and maxOccurs attributes can be used > to specify > > cardinality constraints; > > > c.. the ref attribute allows for sharing of type or element > > > components > > at any level of the description; > > > d.. local elements may have qualified names; > > > e.. the xsd:any construct provides support for > extensible content > > models. > > > > > > There's also a host of other advanced features that XML Schema > possesses, > > such as substitution groups, that would suddenly become > available to > > WSDL authors as they define the input and output message > formats for > > their operations. Such features are simply unimaginable with the > > current <wsdl:message/> construct, and we look forward to > seeing how > > they'll be employed should this proposal be accepted. > > > > > > Since current usage tells us that the XML Schema type system is > > > already > > used by the vast majority of WSDL 1.1 documents, this proposal would > enable > > WSDL processors to manipulate messages through their XML Schema > descriptions > > alone. > > > > > > Similarly, binding authors could use XPath and other XML-related > > technologies without having to introduce special syntax to > deal with > > messages and parts, as was the case in WSDL 1.1. For instance, the > > result > of > > applying a binding to a "message type" could be fully > described using > XSLT. > > It's also worth pointing out that the working group has already > > started taking steps in that direction, as witnessed by the > changes to > > the <soap:header/> element approved at the last face to > face meeting. > > > > > > The case of other type systems can be readily > accommodated by using > > > the > > extensible nature of the <wsdl:input/>, <wsdl:output/> and > > <wsdl:fault/> element. Any type system worth its name will provide > > structuring > constructs > > at least as powerful as <wsdl:message/>, so the removal of > > <wsdl:message/> won't be felt as a limitation. Rather, the > ability to > > use the full power > of > > the native type system will be energizing, just as for XML Schema. > > > > > > A case that isn't directly addressed by this proposal is that of a > > <wsdl:message/> with parts described using different type systems. > > Until today, this case has been mostly of theoretical > interest only, > > except in > one > > case described below. In general, there is a range of solutions > > available, going from embedding all those type systems > inside the XML > > Schema one to defining a new packaging construct specially for this > > purpose. Although we're not convinced of the usefulness of this > > "multiple type systems" scenario, we think that our > proposal does not > > in any way prevent > determined > > WSDL authors from using it. > > > > > > There is a special case, namely the combination of XML Schema and > > > MIME > > types, that is worth spelling out in detail. > > > > > > In WSDL 1.1, MIME types were not specified at the message part > > > level; > > rather, they were listed in the MIME binding extension. For > WSDL 1.2, > there > > is definitely some interest in allowing MIME types to be > used at the > > abstract level. > > > > > > We believe that this proposal doesn't make using MIME types any > > > harder, > > and that any satisfactory solution that used the > <wsdl:message/> and > > <wsdl:part/> constructs could be rephrased in terms of XML Schema. > > (For instance, XML Schema type definitions could be > annotated with a > > mime:typeattribute. Or new type definitions, in their own > namespace, > > could be created for all MIME types.) So we propose that > the working > > group > address > > the issue of using MIME types alongside XML Schema types as > part of a > > separate issue, independent of the present one. > > > > > > Examples > > > > > > Consider the following WSDL 1.2 fragment (adapted from > the Primer): > > > > > > <message name="inReserveRoom"> > > > <part name="customerName" type="xs:string"/> > > > <part name="checkInDate" type="xs:date"/> > > > <part name="checkOutDate" type="xs:date"/> > > > <part name="roomType" type="xs:string"/> > > > <part name="comments" type="xs:string"/> > > > <part name="agentID" type="xs:string"/> > > > </message> > > > <message name="outReserveRoom"> > > > <part name="roomRate" type="xs:double"/> > > > <part name="reservationID" type="xs:string"/> > > > </message> > > > > > > <operation name="ReserveRoom"> > > > <input message="inReserveRoom"/> > > > <output message="outMessage"/> > > > </operation> > > > > > > > > > > > > With our proposal, it would be rewritten as follows: > > > <types> > > > <xs:schema elementFormDefault="qualified" > > > targetNamespace="http://www.w3.org/webServicesDescription12/Pr > imerExamples/e > > xample0"> > > > <xs:complexType name="tReserveRoomInput"> > > > <xs:sequence> > > > <xs:element name="customerName" > type="xs:string"/> > > > <xs:element name="checkInDate" > type="xs:date"/> > > > <xs:element name="checkOutDate" > type="xs:date"/> > > > <xs:element name="roomType" > type="xs:string"/> > > > <xs:element name="comments" > element="xs:string"/> > > > <xs:element name="agentID" > type="xs:string"/> > > > </xs:sequence> > > > </xs:complexType> > > > <xs:complexType name="tReserveRoomOutput"> > > > <xs:sequence> > > > <xs:element name="roomRate" > type="xs:double"/> > > > <xs:element name="reservationID" > > type="xs:string"/> > > > </xs:sequence> > > > </xs:complexType> > > > </xs:schema> > > > </types> > > > > > > <operation name="ReserveRoom"> > > > <input type="typens:tReserveRoomInput"/> > > > <output type="typens:tReserveRoomOutput"/> > > > </operation> > > > > > > > > > > > > As shown above, the XML Schema type system can be readily used to > replace > > the less powerful <wsdl:message/> construct. > > > > > > Another example from the primer shows how superflous messages are > whenever > > WSDL authors have already come up with a suitable XML Schema > > description > of > > the fragments they intend to exchange. Here's the relevant WSDL > > fragment > in > > the current syntax: > > > <types> > > > <xs:schema elementFormDefault="qualified" > > > targetNamespace="http://www.w3.org/webServicesDescription12/Pr > imerExamples/e > > xample0"> > > > <xs:complexType name="tInReserveRoom"> > > > <xs:sequence> > > > <xs:element name="customerName" type="xs:string"/> > > > <xs:element name="checkInDate" type="xs:date"/> > > > <xs:element name="checkOutDate" type="xs:date"/> > > > <xs:element name="roomType" type="xs:string"/> > > > <xs:element name="comments" element="xs:string"/> > > > <xs:element name="agentID" type="xs:string"/> > > > </xs:sequence> > > > </xs:complexType> > > > </xs:schema> > > > <xs:complexType name="tOutReserveRoom"> > > > <xs:sequence> > > > <xs:element name="roomRate" type="xs:double"/> > > > <xs:element name="reservationID" type="xs:string"/> > > > </xs:sequence> > > > </xs:complexType> > > > </types> > > > <message name="inReserveRoom"> > > > <part name="ReserveRoom" type="typens:tInReserveRoom"/> > > > </message> > > > > > > <message name="outReserveRoom"> > > > <part name="ReserveRoom" type="typens:tOutReserveRoom"/> > > > </message> > > > > > > <operation name="ReserveRoom"> > > > <input message="inReserveRoom"/> > > > <output message="outReserveRoom"/> > > > </operation> > > > > > > > > > > > > And here's the corresponding fragment with the proposed > new syntax: > > > <types> > > > <xs:schema elementFormDefault="qualified" > > > targetNamespace="http://www.w3.org/webServicesDescription12/Pr > imerExamples/e > > xample0"> > > > <xs:complexType name="tInReserveRoom"> > > > <xs:sequence> > > > <xs:element name="customerName" type="xs:string"/> > > > <xs:element name="checkInDate" type="xs:date"/> > > > <xs:element name="checkOutDate" type="xs:date"/> > > > <xs:element name="roomType" type="xs:string"/> > > > <xs:element name="comments" element="xs:string"/> > > > <xs:element name="agentID" type="xs:string"/> > > > </xs:sequence> > > > </xs:complexType> > > > </xs:schema> > > > <xs:complexType name="tOutReserveRoom"> > > > <xs:sequence> > > > <xs:element name="roomRate" type="xs:double"/> > > > <xs:element name="reservationID" type="xs:string"/> > > > </xs:sequence> > > > </xs:complexType> > > > </types> > > > > > > <operation name="ReserveRoom"> > > > <input type="typens:tInReserveRoom"/> > > > <output type="typens:tOutReserveRoom"/> > > > </operation> > > > > > > > > > > > > Clearly, the message definitions in the first fragment are > > > completely > > superflous and serve a syntactic purpose only. There is > literally NO > > use > of > > the message components in the first fragment that cannot be > reproduced > with > > the approach exemplified in the second fragment. Moreover, > the latter > allows > > for derivation of messages (and much more) while the first one does > > not. > > > > > > > > > References > > > [1] Web Services Definition Language (WSDL) 1.1 > > > > > > > > > > > > > > > > >
Received on Tuesday, 19 November 2002 08:10:00 UTC