W3C home > Mailing lists > Public > www-ws-desc@w3.org > May 2004

Re: Alternate proposal for collapsing binding namespaces

From: Roberto Chinnici <Roberto.Chinnici@Sun.COM>
Date: Thu, 20 May 2004 14:56:04 -0400
To: Sanjiva Weerawarana <sanjiva@watson.ibm.com>
Cc: www-ws-desc@w3.org
Message-id: <40ACFF44.1070603@sun.com>

I like this direction. It improves readability of the binding by
humans. Additionally, it brings the syntax closer to the underlying
component model, which makes the life of WSDL tool authors easier
and potentially allows for better error reporting in case of mishaps.

The only amendment I feel like proposing right now is around an
indication of what binding is being used. In this proposal, it's
one or more attributes on wsdl:binding that dictate the binding
in use. In the status quo, it's the presence of a wsoap:binding
extension element.

I'd like to propose that we make the binding explicit by adding
a URI-valued "type" attribute to wsdl:binding.

E.g.
  <binding
        name="b1"
        interface="x:foo"
        type="http://www.w3.org/2003/05/soap"
        wsoap:protocol="http://www.w3.org/2003/05/soap/bindings/HTTP/">
    <fault ref="x:fooey" wsoap:faultCode="y:whatever"/>
      <operation ref="x:bar" wsoap:action="some-uri-that-I-want" />
      <operation ref="x:baZ" wsoap:action="some-other-uri-that-I-want" />
  </binding>

In practice, we'd make the URI for a binding equal to the
targetNamespace that defines its extensions.

An additional benefit is that it removes ambiguities when two sets
of binding extensions are present under wsdl:binding, neither one
carrying a required="true" attribute.

Roberto


Sanjiva Weerawarana wrote:

> I'd like to make an alternate proposal for collapsing the bindings.
> 
> The basic idea is to avoid repeating similarly named elements in the
> wsoap: namespace if one exists in the wsdl: namespace. This can be
> achieved by using qualified attributes and placing them on the
> corresponding wsdl: namespaced element and eliminating the wsoap:
> namespaced element.
> 
> Here's what our binding looks like now:
> 
>   <binding name="xs:NCName" interface="xs:QName"? >
>     <documentation />?
> 
>     <wsoap:binding protocol="xs:anyURI" 
>                    mepDefault="xs:anyURI"? 
>                    webMethodDefault="xs:string"? />
> 
>     <wsoap:module uri="xs:anyURI" required="xs:boolean"? >
>       <property ... />?
>     </wsoap:module>*
>     
>     <feature ... />*
>     <property ... />*
> 
>     <fault ref="xs:QName"
>       wsoap:code="xs:QName"
>       wsoap:subcodes="list of xs:QName" />
>       <documentation />?
>     </fault>*
> 
>     <operation ref="xs:QName" >
>       <documentation />?
> 
>       <wsoap:module ... />*
> 
>       <wsoap:operation mep="xs:anyURI"?
>                        webMethod="xs:string"? 
>                        action="xs:anyURI"? />?
> 
>       <input messageLabel="xs:NCName"? >
>         <documentation />?
>         <wsoap:module ... />*
>         <feature ... />*
>         <property ... />*
>       </input>*
> 
>       <output messageLabel="xs:NCName"? >
>         <documentation />?
>         <wsoap:module ... />*
>         <feature ... />*
>         <property ... />*
>       </output>*
>     </operation>*
> 
>   </binding>
> 
>   <service>
>     <endpoint name="xs:NCName" binding="xs:QName" >
>       <documentation />?
>       <wsoap:address location="xs:anyURI" />
>     <endpoint>
>   </service>
> 
> Note that the <fault> element contains some attributes from the
> wsoap: namespace already .. that's actually beyond what the WG
> has agreed to already (JJM go a bit edit happy apparently ;-)).
> 
> I propose we change this to:
> 
>   <binding name="xs:NCName" interface="xs:QName"? 
>            wsoap:protocol="xs:anyURI"
>            wsoap:mepDefault="xs:anyURI"?
>            wsoap:webMethodDefault="xs:string"? >
> 
>     <documentation />?
> 
>     <wsoap:module uri="xs:anyURI" required="xs:boolean"? >
>       <property ... />?
>     </wsoap:module>*
>     
>     <feature ... />*
>     <property ... />*
> 
>     <fault ref="xs:QName"
>            wsoap:faultCode="xs:QName"
>            wsoap:faultSubcodes="list of xs:QName" >
>       <documentation />?
>     </fault>*
> 
>     <operation ref="xs:QName"
>                wsoap:mep="xs:anyURI"?
>                wsoap:webMethod="xs:string"? 
>                wsoap:action="xs:anyURI"? >
> 
>       <documentation />?
> 
>       <wsoap:module ... />*
> 
>       <input messageLabel="xs:NCName"? >
>         <documentation />?
>         <wsoap:module ... />*
>         <feature ... />*
>         <property ... />*
>       </input>*
> 
>       <output messageLabel="xs:NCName"? >
>         <documentation />?
>         <wsoap:module ... />*
>         <feature ... />*
>         <property ... />*
>       </output>*
>     </operation>*
> 
>   </binding>
> 
>   <service>
>     <endpoint name="xs:NCName" binding="xs:QName" 
>               wsoap:address location="xs:anyURI" >
>       <documentation />?
>     <endpoint>
>   </service>
> 
> Let's consider an example. Consider an interface "foo" with operations
> "bar" and "baz" and one fault "fooey." A binding for SOAP/HTTP which
> wishes to specify per-operation soapAction values and no per-input/
> output bindig details (which IMO is the likely case with WSDL 2.0) 
> will look like this:
> 
>   <binding name="b1" interface="x:foo"> 
>            wsoap:protocol="http://www.w3.org/2003/05/soap/bindings/HTTP/">
> 
>     <fault ref="x:fooey" wsoap:faultCode="y:whatever"/>
>     <operation ref="x:bar" wsoap:action="some-uri-that-I-want" />
>     <operation ref="x:baZ" wsoap:action="some-other-uri-that-I-want" />
>   </binding>
> 
> The corresponding <service> declaraction could look like this:
> 
>   <service interface="x:foo">
>     <endpoint name="e1" binding="x:b1" 
>               wsoap:address location="http://example.com/soapserver"/>
>   </service>
> 
> Sanjiva.
> 
Received on Thursday, 20 May 2004 15:09:10 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Monday, 7 December 2009 10:58:31 GMT