- From: Hugo Haas <hugo@w3.org>
- Date: Fri, 28 Oct 2005 18:00:10 +0200
- To: www-ws-desc@w3.org
- Message-ID: <20051028160010.GG2847@w3.org>
I have been thinking about Sanjiva's and Ümit's pushback against my
simplified proposal, and think I found a way to accomodate the Flickr
description problem.
Here is my improved simplified proposal for LC304.
We keep our 3 predefined serialization formats:
- application/x-www-form-urlencoded
- application/xml
- multipart/form-data
The value of the serialization variables will be one or several media
type token. If we have more than one, then it means a set of possible
media types to use.
This leaves us with defining the meaning of one of those media types.
In order to accomodate image/jpeg, I am taking the value of the
{message content model} property of the Interface Message Reference
bound into account.
- if the value of {message content model} is #any or #element:
- application/x-www-form-urlencoded identifies our
application/x-www-form-urlencoded serialization format rules
- multipart/form-data identifies our multipart/form-data
serialization format rules
- application/xml identifies our application/xml serialization
format rules [ no change until now ]
- any other media type identifies our application/xml serialization
format rules, but used with the value of the serialization
property as the content type HTTP header [ this is new ]
- if the value of {message content model} is #none: the payload must
be empty, so the value of the serialization property is irrelevant
[this is not currently spelled out in the spec and should be ]
- if the value of {message content model} is #other: the content-type
header value is set by the value of the serialization property, and
the message payload is undefined [ this is new too, and the HTTP
binding currently oddly does not say anything about #other ]
One can now use:
<interface>
<operation>
<input …>
<output element="#other"/>
</operation>
</interface>
<binding>
<operation whttp:outputSerialization="image/jpeg"/>
</binding>
With regards to media type parameters, we can allow them and say that
they are passed along in the Content-Type header.
An example of them:
<interface>
<operation>
<input …>
<output element="myns:foo"/>
</operation>
</interface>
<binding>
<operation whttp:outputSerialization="application/x-foo+xml;myParam='bar'"/>
</binding>
serializes as:
Content-Type: application/x-foo+xml;myParam='bar'
<myns:foo xmlns:myns="…">
…
</myns:foo>
If one wanted to use say another schema language, the extension would
also define the way to serialize their model:
<myext:MyCoolSchemaLanguage wsdl:required="true" />
<interface>
<operation>
<input …>
<output element="#other" myext:element="myns:foo" />
</operation>
</interface>
<binding>
<operation whttp:outputSerialization="application/x-foo-xml"/>
</binding>
I believe that this solution:
- clarifies what a media type token in a serialization property actually means
- doesn't prevent description of services using binary objects
- doesn't introduce substantial changes
- allows for clean extensibility
Comments?
--
Hugo Haas - W3C
mailto:hugo@w3.org - http://www.w3.org/People/Hugo/
Received on Friday, 28 October 2005 16:00:18 UTC