WSDL 2.0 operation safety annotation in SAWSDL?

Dear TAG members, others,

as the TAG has requested some time ago (see the WSDL issue [1]), 
WSDL 2.0 now has an annotation on interface operations that indicates
whether the operation is known to be safe, in terms of the Web
architecture. The syntax looks like this:

<wsdl:interface name="printer">
  <wsdl:operation name="readCapabilities" wsdlx:safe="true">
     ...
  </wsdl:operation>
</wsdl:interface>

Within WSDL itself, this annotation is used by the HTTP binding which
will default to using the GET HTTP method for safe operations and POST
for those not marked as safe.

Recently it occurred to me, as a participant in both the WS-Description
WG and the Semantic Annotations for WSDL WG, that safety falls squarely
within the scope of Semantic Annotations [2] (at least IMHO), and that
it should be expressed as 

<wsdl:operation name="readCapabilities"
   sawsdl:modelReference="http://www.w3.org/2006/01/wsdl-extensions#SafeInteraction">
  ...
</wsdl:operation>

As you are the main body that requested that WSDL has this annotation,
it's only prudent to ask you, what do you think about this alternative
way of marking operation safety?

There have been reservations to this change in the WS-Desc WG:

WSDL is a Candidate Recommendation and safety is not a feature marked as
"at risk", so removing it could mean a set-back to WSDL timeline.
However, I'm not sure how the W3C would look at moving a feature from
one CR spec to another CR spec (SAWSDL is in CR as well), and whether
getting back to Working Draft would be necessary.

The SAWSDL syntax is much longer, making it harder for designers
hand-coding WSDL files to mark operations as safe. Also, the safety
annotation URI can get visually lost in other annotations, should the
operation be annotated with multiple semantic concepts; a casual reader
of the WSDL would not necessarily notice that an operation is marked as
safe.

WSDL HTTP binding requires that processors understand the wsdlx:safe
extension in order to be able to do the defaulting; making SAWSDL
required (and a dependency for WSDL) would likely be an overkill. I'm
sure that some kind of optionality could be introduced (not changing any
current intent anyway) that would make SAWSDL not required.

And finally, the WSDL component model has a property {safe} on Interface
Operations to represent abstractly the safety annotation, and this could
be redundant to the presence of the ...#SafeInteraction URI in the
{model reference} property introduced by SAWSDL.

There are a number of options that we can see, and we'd like to see
whether you have any preference:

     1. status quo, no safety in SAWSDL, only in WSDL
     2. WSDL defines safety using SAWSDL for syntax (ending up with the
        {safe} and {model reference} abstract redundancy)
     3. WSDL drops the definition of safety, SAWSDL adds it in the
        normative spec, WSDL HTTP binding still uses the annotation for
        defaulting
     4. WSDL keeps safety as it is (wsdlx:safe="true"), SAWSDL adds a
        competing annotation in its non-normative Usage Guide; we'd let
        the stronger one survive, but we might get lack of interop
        between processors that support one or the other.

It might be useful also to mention that it currently seems SAWSDL should
go to Rec only shortly after WSDL, if not together.

Best regards,

Jacek Kopecky
member of WS-Desc WG and chair of SAWSDL WG

[1] http://www.w3.org/2002/ws/desc/5/cr-issues/#CR021
[2] http://www.w3.org/TR/sawsdl

Received on Friday, 9 February 2007 13:14:49 UTC