- From: Arthur Ryman <ryman@ca.ibm.com>
- Date: Wed, 25 Jun 2003 10:29:06 -0400
- To: www-ws-desc@w3.org
- Message-ID: <OFB89D0383.4B9D1BF5-ON85256D50.004E261F@torolab.ibm.com>
I have reviewed Umit's proposal for an alternate approach to R085 and have
the following comments.
1. Umit's proposal includes the case of dynamic Web services references.
This is the case where the type of reference is not known at description
time. The type information is sent along with the endpoint URI. This is
beyond the scope of R085, which addresses the static case only, i.e. when
the type of the service is known at design time. Also, the solution Umit
proposes is a duplication of the WS-Addressing proposal [1]. The WG should
decide how to handle the proposal. I will therefore confine my further
remarks to the R085 case.
[1] http://www-106.ibm.com/developerworks/webservices/library/ws-add/
2. Umit's approach is motivated by a desire to "get rid of XPath" and
replace it with an approach based on XSD. I don't fully understand why the
WG thinks this is a good idea. XPath was specifically designed to identify
parts of an XML instance document and so it is directly applicable to
identify the position of endpoint URIs or other complex types that contain
addressing information.
On the other hand, XSD was intended to define grammars for XML
vocabularies. XSD allows an XML parser to determine if the sequence of
characters that comprises a document is a valid instance with respect to a
schema, e.g. a parser can determine if a sequence of characters is a valid
URI as defined by the simple type xsd:anyURI. A parser has no way of
telling what that URI points to. XSD does allow application specific
information to be associated with parts of a schema by means of the
elements xsd:annotation and xsd:appInfo, but this is not a widely used
practice.
Umit's preferred approach is to introduce a new simple type
wsdl:ws-reference-uri which is simply a wrapped version of xsd:anyURI. All
endpoint URI should derive from this and define a new wrapper type for
each WSDL interface that is referenced. Umit describes other approaches
which I will not discuss since this is her preferred approach.
For example, suppose a service returns a reference to a service that
implements the WSDL interface p:partInterface. In Umit's proposal we have
the standard WSDL definition:
<xsd:simpleType name="ws-reference-uri">
<xsd:restriction base="xsd:anyURI"/>
</xsd:simpleType>
and the service specific definition
<xsd:simpleType name="PartReference">
<xsd:restriction base="wsdl:ws-reference-uri">
</xsd:simpleType>
In my example, the endpoint reference interface definition is:
<endpoint name="partURI" part="return" interface="tns:partInterface"
xpath="/p:Parts/Part/@reference"/>
In Umit's proposal, the p:Part complex type is rewritten to use
p:PartReference and the endpoint definition becomes:
<endpoint name="partURI" part="return" interface="tns:partInterface"
type="p:PartReference"/>
3. I'd now like to focus on the differences in these approaches.
3.1 XPath Approach
In the XPath approach there is no coupling between XSD and WSDL. The XSD
can be written independently of the WSDL. In many organizations, the XSD
is written first and then used in WSDL. Often, the XSD and WSDL are
written by different individuals or departments. The XPath approach allows
standard XSD definitions to be reused in different Web services. For
example, a Person document could include a URI to a Department. However,
the Web service associated with the Department might depend on the
application, e.g. Human Resources, Real Estate, Project Management.
The XPath approach also allows the endpoint definition to be based on
instance data in the message. For example, suppose a Department document
contained a list of Person elements, each containing a job code attribute
("manager" or "employee") and a URI to a Web service for the Person. The
following is possible with XPath but not XSD:
<endpoint name="managerURI" part="return" interface="tns:managerInterface"
xpath="/Department/Person[@jobCode='manager']"/>
<endpoint name="employeeURI" part="return"
interface="tns:employeeInterface"
xpath="/Department/Person[@jobCode='employee']"/>
which allows message instances like:
<Department id="NEWS">
<Person
jobCode="manager">http://www.wjm-tv.com/people/LouGrant</Person>
<Person
jobCode="employee">http://www.wjm-tv.com/people/MaryRichards</Person>
<Person
jobCode="employee">http://www.wjm-tv.com/people/TedBaxter</Person>
</Department>
In this example, Lou Grant's URI implements the managerInterface, but Mary
Richards and Ted Baxter implement the employeeInterface.
The ability to have interface depend on instance data seems very powerful.
Is it too powerful?
The downside is that a WSDL author and processor must understand XPath
which is a further complication. However, XPath is a relatively simple
syntax and XPath processors are widely available.
3.2 XSD Approach
The XSD approach couples XSD and WSDL so the messages must be defined at
the same time as the Web service. Also, the message must reference the
WSDL namespace to pick up the
wsd:ws-reference-uri type. This seems unwise. WSDL should be able to
describe services, not dictate how they are defined. This means existing
services cannot be described. The XSD must be redefined to use
wsdl:ws-reference-uri and the dervied types based on it. What happens when
a new WSDL version is released? Will services have to be redeployed?
The XSD approach requires the definition of wrapper types, which is an
additional authoring burden and which adds bulk to the description.
4. Summary
The XPath approach decouples XSD and WSDL, allows independent authoring of
messages and services, and permits greater flexibility in Web service
design. However, it introduces another spec, XPath, and may be too
powerful.
The XSD approach couples XSD and WSDL, requires coordinated authoring of
messages and services, and restricts the design of Web services. However,
it introduces no new specs and may be good enough for 80% of the cases.
-- Arthur Ryman
Received on Wednesday, 25 June 2003 10:29:33 UTC