- From: Sanjiva Weerawarana <sanjiva@watson.ibm.com>
- Date: Sat, 1 Nov 2003 03:29:03 +0600
- To: <www-ws-desc@w3.org>
This is a follow-up email to the proposal I made at the last F2F
to introduce some defaulting rules to make the syntax for
in-out and in-only patterned operations more syntactically
pleasing.
Status quo syntax for operations:
--------------------------------
<interface name="xs:NCName"
extends="list of xs:QName"?
styleDefault="xs:anyURI"?>
<operation name="xs:NCName"
pattern="xs:anyURI"
style="xs:anyURI"?>
<input messageReference="xs:NCName"
body="xs:QName"?
headers="list of xs:QName"?/>*
<output messageReference="xs:NCName"
body="xs:QName"?
headers="list of xs:QName"?/>*
<infault messageReference="xs:NCName" details="xs:QName"/>*
<outfault messageReference="xs:NCName" details="xs:QName"/>*
</operation>
</interface>
Problems with status quo:
------------------------
- User has to remember pattern URIs, even for simple operations
- User has to know contents of pattern spec to know proper values
for @messageReference (typically 'A', 'B' etc. right now). The
value for @messageReference is *not* user settable, while the
other attributes are - which I believe to be counter-intuitive.
- "input" and "output" are redundant as the pattern defines the
direction of the message - thus the indicated message reference
already has a set direction and the user cannot change it. Thus
indicating both message reference and input vs. output is an
an opportunity for errors
- "infault" / "outfault" separation similarly redundant and error-prone
To me, requiring users to remember pattern URIs for the everyday
patterns is unacceptable. Furthermore, requiring *users* to know
the content of the patterns spec for those patterns (so that they
can assign proper values for @messageReference) is even worse. W.r.t.
the redundancies- I'd like to eliminate as many redundancies as
possible. Finally, the motivation for the proposal is to keep the
simple case simple, yet not harm the complex case in any way.
Proposal:
--------
I proposed that we introduce a set of very simple rules to enable
one to derive the message exchange pattern URI and message reference
names for operations using the in-only and in-out patterns.
We observe that for the in-only MEP there is only one input message
and no fault messages. Similarly, the in-out MEP has one input
message, one output message and zero or more outfaults, all of
which are related to the single output message.
Proposed syntactic changes:
- Make interface/operation/@pattern optional
- Make interface/operation/(input|output)/@messageReference
optional
Now, introduce the following rules to compute these when they are
absent:
- There must be precisely one <input> element inside the
operation- if not its an error as the user should have
specified the MEP
- There must be precisely zero or one <output> element inside the
operation- if not its an error as the user should have
specified the MEP
- There must not be any <infault> elements inside the operation-
if not its an error as the user should have specified the MEP
- If there is an <output> element, then @pattern="in-out" else
@pattern="in-only"
- Set value of the messageReference attribute for the <input>
element to 'A' (or if indicated it better be 'A')
- If there is an <output> element, set the value of its
messageReference attribute to 'B' (or if indicated it better be 'B')
- If pattern is "in-only", then there must not be any <outfault>
elements or its an error
- If there are any <outfault> elements, set the value of its
messageReference attribute to 'B' (or if indicated it better be 'B')
The resulting syntax for in-only and in-out operations is:
<interface name="xs:NCName"
extends="list of xs:QName"?
styleDefault="xs:anyURI"?>
<operation name="xs:NCName"
style="xs:anyURI"?>
<input body="xs:QName"?
headers="list of xs:QName"?/>
<output body="xs:QName"?
headers="list of xs:QName"?/>?
<outfault details="xs:QName"/>*
</operation>
</interface>
A similar simplification is possible for <binding>s for in-only
and in-out patterned operations (basically make the @messageReference
attribute optional).
Conclusion:
----------
We believe that these proposed shortcuts are critical to support
what we believe to be easily the 80-20 usecase of WSDL; WSDLs
that have only in-only or in-out operations. The proposed
changes are minimal (make two attributes optional) and the
proposed rules are very simple to implement even on small devices
(or large mainframes). We believe that the resulting user-level
simplification clearly justifies the adoption of this proposal.
Sanjiva.
Received on Friday, 31 October 2003 16:27:24 UTC