Alternate proposal for collapsing binding namespaces

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 10:00:29 UTC