- From: David Booth <dbooth@dev.w3.org>
- Date: Tue, 26 Oct 2004 21:35:03 +0000
- To: public-ws-desc-eds@w3.org
Update of /sources/public/2002/ws/desc/wsdl20 In directory hutz:/tmp/cvs-serv12804 Modified Files: wsdl20-primer.xml Log Message: still working through explanation of initial example. Index: wsdl20-primer.xml =================================================================== RCS file: /sources/public/2002/ws/desc/wsdl20/wsdl20-primer.xml,v retrieving revision 1.15 retrieving revision 1.16 diff -C2 -d -r1.15 -r1.16 *** wsdl20-primer.xml 25 Oct 2004 23:15:49 -0000 1.15 --- wsdl20-primer.xml 26 Oct 2004 21:35:01 -0000 1.16 *************** *** 292,299 **** > . . . ! </definitions>]]></eg><p>Some of these are used as normal XML namespaces; others have special treatment within WSDL 2.0. <glist><gitem><label><code>xmlns="http://www.w3.org/2004/08/wsdl"</code></label><def><p>This is the XML namespace for WSDL 2.0 itself. The WSDL 2.0 vocabulary (<code><description></code>, <code><types></code>, <code><interface></code>, etc.) is in this namespace. For convenience, Joe has chosen not to define a namespace prefix for this namespace, so by default unprefixed elements and attributes are from the WSDL 2.0 namespace.</p></def></gitem><gitem><label><code>xmlns:soap="http://www.w3.org/2003/05/soap-envelope"</code></label><def><p>This is the XML namespace for SOAP 1.2. This will be used in section @@, when we specify the transport protocol that the GreatH Web service supports.</p></def></gitem><gitem><label><code>xmlns:wsoap= "http://www.w3.org/2004/08/wsdl/soap12"</code></label><def><p>This is the XML namespace for the WSDL 2.0 binding of SOAP 1.2. This wll also be used in section @@.</p></def></gitem><gitem><label><code>xmlns:ghns = "http://greath.example.com/2004/05/schemas/reservationService.xsd"</code></label><def><p>This is the XML namespace for the GreatH message schemas that are defined in the <code><types></code> element. </p></def></gitem><gitem><label><code>targetNamespace= "http://greath.example.com/2004/05/wsdl/reservationService.wsdl"</code></label><def><p>This is not technically an XML namespace, but it serves an analogous purpose within WSDL 2.0. As mentioned above, a WSDL document contains elements such as <code><interface></code>, <code><operation></code>, <code><binding></code> and <code><service></code>; and each of these elements can have a <code>name</code> attribute to enable other portions of the WSDL document to refer to that element by name. (We'll see how this works later.) The targetNamespace URI represents a globally unambiguous name for the set of interface, operation, binding, service, etc. names that your WSDL document has declared. This is pertinent if one WSDL document imports another WSDL document, as described in section @@, because it prevents accidental name clashes.</p><p>The value of the targetNamespace MUST be an absolute URI. Furthermore, it SHOULD be dereferenceable to a WSDL document that describes the Web service that the targetNamespace is used to describe. This may sound circular, but bear in mind that you might have obtained a WSDL document from anywhere -- not necessarily an authoritative source -- and it may not be an authoritative version. But by dereferencing the targetNamespace URI, you SHOULD be able to obtain an authoritative version. @@Add reference to WebArch on "authoritative"?@@</p></def></gitem><gitem><label><code>xmlns:tns= "http://greath.example.com/2004/05/wsdl/reservationService.wsdl"</code></label><def><p>This is an XML namespace declaration with the same URI value that was specified above for the <code>targetNamespace</code>. Note that this is a (ral) XML namespace declaration, whereas the <code>targetNamespace</code> declaration above is merely a WSDL 2.0 attribute whose purpose is <emph>analogous</emph> to an XML namespace. The <code>tns:</code> namespace prefix we have defined will be used later, when we need to refer to an interface, operation, binding or service that we have defined within our targetNamespace. </p></def></gitem><gitem><label><code>@@</code></label><def><p>@@</p></def></gitem></glist></p><p>@@dbooth marker: stopped here@@ </p><p>To start, Joe decides that he wants to use "http://greath.example.com/2004/05/wsdl/reservationService.wsdl" as the <att> target namespace</att> of his WSDL definition. It's an absolute URI and allows him to make the WSDL file available from GreatH's website.</p></div2> ! <div2 id="overview"> <head>WSDL 2.0 Extensibility</head> --- 292,333 ---- > . . . ! </definitions>]]></eg><p>Some of these are used as normal XML namespaces; others have special treatment within WSDL 2.0. <glist><gitem><label><code>xmlns="http://www.w3.org/2004/08/wsdl"</code></label><def><p>This is the XML namespace for WSDL 2.0 itself. The WSDL 2.0 vocabulary (<code><description></code>, <code><types></code>, <code><interface></code>, etc.) is in this namespace. For convenience, Joe has chosen not to define a namespace prefix for this namespace, so by default unprefixed elements and attributes are from the WSDL 2.0 namespace.</p></def></gitem><gitem><label><code>xmlns:soap="http://www.w3.org/2003/05/soap-envelope"</code></label><def><p>This is the XML namespace for SOAP 1.2, and is needed because the GreatH service will use SOAP 1.2. This namespace prefix (<code>soap:</code>) will be used in section @@, when we specify the transport protocol that the GreatH Web service supports.</p></def></gitem><gitem><label><code>xmlns:wsoap= "http://www.w3.org/2004/08/wsdl/soa12"</code></label><def><p>This is the XML namespace for the WSDL 2.0 binding of SOAP 1.2. This is needed because the WSDL 2.0 language does not define any binding vocabulary directly. Instead, the various binding styles are defined as extensions to the WSDL 2.0 language, and each one is defined in its own XML namespace. The GreatH binding will be explained in section @@.</p></def></gitem><gitem><label><code>xmlns:ghns = "http://greath.example.com/2004/05/schemas/reservationService.xsd"</code></label><def><p>This is the XML namespace for the GreatH message schemas that are defined in the <code><types></code> element. This is a separate namespace because these types may exist and be used independently of WSDL. </p></def></gitem><gitem><label><code>targetNamespace= "http://greath.example.com/2004/05/wsdl/reservationService.wsdl"</code></label><def><p>This is not technically an XML namespace, but it serves an analogous purpose within WSDL 2.0. As mentioned above, a WSDL document contains elements uch as <code><interface></code>, <code><operation></code>, <code><binding></code> and <code><service></code>; and each of these elements can have a <code>name</code> attribute to enable other portions of the WSDL document to refer to that element by name. (We'll see how this works later.) The targetNamespace URI represents a globally unambiguous name for the set of interface, operation, binding, service, etc., names that your WSDL document has declared. This is pertinent if one WSDL document imports another WSDL document, as described in section @@, because it prevents accidental name clashes.</p><p>The value of the targetNamespace MUST be an absolute URI. Furthermore, it SHOULD be dereferenceable to a WSDL document that describes the Web service that the targetNamespace is used to describe, i.e., the GreatH SHOULD make the WSDL document available from this URI. (However, there is no absolute requirement for GreatH to do so; thus a WSDL processor must not depend on this UI being dereferenceable.) </p><p>This recommendation may sound circular, but bear in mind that the user might have obtained the WSDL document from anywhere -- not necessarily an authoritative source. But by dereferencing the targetNamespace URI, a user SHOULD be able to obtain an authoritative version. @@Add reference to WebArch on the meaning of "authoritative"?@@ Since GreatH is the owner of the service, the targetNamespace URI refers to a location on the GreatH Web site.</p></def></gitem><gitem><label><code>xmlns:tns= "http://greath.example.com/2004/05/wsdl/reservationService.wsdl"</code></label><def><p>This is an XML namespace declaration with the same URI value that was specified above for the <code>targetNamespace</code>. Note that this is an <emph>actual</emph> XML namespace declaration, whereas the <code>targetNamespace</code> declaration above is a WSDL 2.0 attribute whose purpose is <emph>analogous</emph> to an XML namespace. The <code>tns:</code> namespace prefix that it defines will b used later, when we need to refer to an interface, operation, binding or service that we have defined within our targetNamespace. </p></def></gitem><gitem><label><code>@@</code></label><def><p>@@</p></def></gitem></glist></p></div2><div2><head>Defining Message Types</head><p>Continuing our tour through <loc href="#example-initial">@example-initial@</loc> above, the next portion defines the types of messages that the GreatH service will send and receive:</p><eg><![CDATA[. . . ! <types> ! <xs:schema targetNamespace="http://greath.example.com/2004/05/schemas/reservationService.xsd" ! xmlns:xs="http://www.w3.org/2001/XMLSchema" ! xmlns="http://greath.example.com/2004/05/schemas/reservationService.xsd"> ! ! <xs:element name="checkAvailability" type="tCheckAvailability"/> ! <xs:complexType name="tCheckAvailability"> ! <xs:sequence> ! <xs:element name="checkInDate" type="xs:date"/> ! <xs:element name="checkOutDate" type="xs:date"/> ! <xs:element name="roomType" type="tRoomType"/> ! </xs:sequence> ! </xs:complexType> ! ! <xs:simpleType name="tRoomType"> ! <xs:restriction base="xs:string"> ! <xs:enumeration value="Single"/> ! <xs:enumeration value="Double"/> ! </xs:restriction> ! </xs:simpleType> ! ! <xs:element name="checkAvailabilityResponse" type="xs:double"/> ! ! <xs:element name="inValidDataError" type="tInvalidDataError"/> ! <xs:complexType name="tInvalidDataError"> ! <xs:sequence> ! <xs:element name="DataField" type="xs:string"/> ! <xs:element name="Description" type="xs:string"/> ! </xs:sequence> ! </xs:complexType> ! </xs:schema> ! </types> ! . . . ! ]]></eg><p>Although these lines have defined the schemas for checkAvailability, checkAvailabilityResponse, and invalidDataError elements, these element definitions have not yet been associated with any particular operation in the GreatH interface. That will be done later, when we define the CheckAvailability operation. </p><p>Note also that checkAvailability, checkAvailabilityResponse, and invalidDataError are all defined to be XML <emph>elements</emph>. This is because WSDL 2.0 requires that every message type MUST be an XML element at the topmost level; i.e., it cannot be a simple data type or sequence directly. Furthermore, although these type definitions are textually embedded within the WSDL document in this example, they could instead be defined in a separate document that is <emph>included</emph> by the WSDL document, as described in section @types-include@. </p><p>Finally, although WSDL 2.0 requires WSDL processors to support XML Schema at a minimum, the use of other schema definitionlanguages is permitted.</p></div2> ! <div2><head>Defining an Interface</head><p>The next portion of <loc href="#example-initial">@example-initial@</loc> above defines the abstract interface that the GreatH service provides to its client applications:</p><eg><![CDATA[@dbooth stopped here@]]></eg><p><?xm-replace_text {p}?></p></div2><div2 id="overview"> <head>WSDL 2.0 Extensibility</head> *************** *** 514,518 **** <xs:element name="invalidCreditCardError" type="xs:string"/> ! <xs:element name="inValidDataError" type="tInvalidDataError"/> <xs:complexType name="tInvalidDataError"> <xs:sequence> --- 548,552 ---- <xs:element name="invalidCreditCardError" type="xs:string"/> ! <xs:element name="invalidDataError" type="tInvalidDataError"/> <xs:complexType name="tInvalidDataError"> <xs:sequence> *************** *** 830,834 **** < interface name = "reservation" > ! <<b>fault</b> name = "inValidCreditCardFault" element = "ghns:invalidCreditCardError"> <documentation> --- 864,868 ---- < interface name = "reservation" > ! <<b>fault</b> name = "invalidCreditCardFault" element = "ghns:invalidCreditCardError"> <documentation> *************** *** 838,842 **** <<b>/fault</b>> ! <<b>fault</b> name = "inValidDataFault" element = "ghns:invalidDataError"> <documentation> --- 872,876 ---- <<b>/fault</b>> ! <<b>fault</b> name = "invalidDataFault" element = "ghns:invalidDataError"> <documentation> *************** *** 919,926 **** < interface name = "reservation" > ! <fault name = "inValidCreditCardFault" element = "ghns:invalidCreditCardError"/> ! <fault name = "inValidDataFault" element = "ghns:invalidDataError"/> --- 953,960 ---- < interface name = "reservation" > ! <fault name = "invalidCreditCardFault" element = "ghns:invalidCreditCardError"/> ! <fault name = "invalidDataFault" element = "ghns:invalidDataError"/> *************** *** 931,935 **** <output messageLabel="<emph>Out</emph>" element="<emph>ghns:checkAvailabilityResponse</emph>"/ > ! <outfault ref="<emph>inValidDataFault</emph>" messageLabel="<emph>Out</emph>"/> </<b>operation</b>> --- 965,969 ---- <output messageLabel="<emph>Out</emph>" element="<emph>ghns:checkAvailabilityResponse</emph>"/ > ! <outfault ref="<emph>invalidDataFault</emph>" messageLabel="<emph>Out</emph>"/> </<b>operation</b>> *************** *** 941,947 **** <output messageLabel="<emph>Out</emph>" element="<emph>ghns:makeReservationResponse</emph>"/ > ! <outfault ref="<emph>inValidDataFault</emph>" messageLabel="<emph>Out</emph>"/> ! <outfault ref="<emph>inValidCreditCardFault</emph>" messageLabel="<emph>Out</emph>"/> </<b>operation</b>> --- 975,981 ---- <output messageLabel="<emph>Out</emph>" element="<emph>ghns:makeReservationResponse</emph>"/ > ! <outfault ref="<emph>invalidDataFault</emph>" messageLabel="<emph>Out</emph>"/> ! <outfault ref="<emph>invalidCreditCardFault</emph>" messageLabel="<emph>Out</emph>"/> </<b>operation</b>> *************** *** 1584,1588 **** <xs:element name="invalidCreditCardError" type="xs:string"/> ! <xs:element name="inValidDataError" type="tInvalidDataError"/> <xs:complexType name="tInvalidDataError"> <xs:sequence> --- 1618,1622 ---- <xs:element name="invalidCreditCardError" type="xs:string"/> ! <xs:element name="invalidDataError" type="tInvalidDataError"/> <xs:complexType name="tInvalidDataError"> <xs:sequence> *************** *** 1596,1603 **** <interface name = "reservation" > ! <fault name = "inValidCreditCardFault" element = "ghns:invalidCreditCardError"/> ! <fault name = "inValidDataFault" element = "ghns:invalidDataError"/> --- 1630,1637 ---- <interface name = "reservation" > ! <fault name = "invalidCreditCardFault" element = "ghns:invalidCreditCardError"/> ! <fault name = "invalidDataFault" element = "ghns:invalidDataError"/> *************** *** 1608,1612 **** <output messageLabel="Out" element="ghns:checkAvailabilityResponse" /> ! <outfault ref="inValidDataFault" messageLabel="Out"/> </operation> --- 1642,1646 ---- <output messageLabel="Out" element="ghns:checkAvailabilityResponse" /> ! <outfault ref="invalidDataFault" messageLabel="Out"/> </operation> *************** *** 1618,1624 **** <output messageLabel="Out" element="ghns:makeReservationResponse"/> ! <outfault ref="inValidDataFault" messageLabel="Out"/> ! <outfault ref="inValidCreditCardFault" messageLabel="Out"/> </operation> --- 1652,1658 ---- <output messageLabel="Out" element="ghns:makeReservationResponse"/> ! <outfault ref="invalidDataFault" messageLabel="Out"/> ! <outfault ref="invalidCreditCardFault" messageLabel="Out"/> </operation> *************** *** 1736,1740 **** <xs:element name="invalidCreditCardError" type="xs:string"/> ! <xs:element name="inValidDataError" type="tInvalidDataError"/> <xs:complexType name="tInvalidDataError"> <xs:sequence> --- 1770,1774 ---- <xs:element name="invalidCreditCardError" type="xs:string"/> ! <xs:element name="invalidDataError" type="tInvalidDataError"/> <xs:complexType name="tInvalidDataError"> <xs:sequence> *************** *** 1776,1780 **** <interface name = "dataFault"> ! <fault name = "inValidDataFault" element = "ghns:invalidDataError"/> --- 1810,1814 ---- <interface name = "dataFault"> ! <fault name = "invalidDataFault" element = "ghns:invalidDataError"/> *************** *** 1783,1787 **** <interface name = "reservation" extends = "tns:dataFault"> ! <fault name = "inValidCreditCardFault" element = "ghns:invalidCreditCardError"/> --- 1817,1821 ---- <interface name = "reservation" extends = "tns:dataFault"> ! <fault name = "invalidCreditCardFault" element = "ghns:invalidCreditCardError"/> *************** *** 1792,1796 **** <output messageLabel="Out" element="ghns:checkAvailabilityResponse" /> ! <outfault ref="inValidDataFault" messageLabel="Out"/> </operation> --- 1826,1830 ---- <output messageLabel="Out" element="ghns:checkAvailabilityResponse" /> ! <outfault ref="invalidDataFault" messageLabel="Out"/> </operation> *************** *** 1802,1808 **** <output messageLabel="Out" element="ghns:makeReservationResponse"/> ! <outfault ref="inValidDataFault" messageLabel="Out"/> ! <outfault ref="inValidCreditCardFault" messageLabel="Out"/> </operation> --- 1836,1842 ---- <output messageLabel="Out" element="ghns:makeReservationResponse"/> ! <outfault ref="invalidDataFault" messageLabel="Out"/> ! <outfault ref="invalidCreditCardFault" messageLabel="Out"/> </operation> *************** *** 1835,1841 **** <output messageLabel="Out" element="ghns:makeReservationResponse"/> ! <outfault ref="inValidDataFault" messageLabel="Out"/> ! <outfault ref="inValidCreditCardFault" messageLabel="Out"/> </operation> --- 1869,1875 ---- <output messageLabel="Out" element="ghns:makeReservationResponse"/> ! <outfault ref="invalidDataFault" messageLabel="Out"/> ! <outfault ref="invalidCreditCardFault" messageLabel="Out"/> </operation> *************** *** 2012,2016 **** <xs:element name="invalidCreditCardError" type="xs:string"/> ! <xs:element name="inValidDataError" type="tInvalidDataError"/> <xs:complexType name="tInvalidDataError"> <xs:sequence> --- 2046,2050 ---- <xs:element name="invalidCreditCardError" type="xs:string"/> ! <xs:element name="invalidDataError" type="tInvalidDataError"/> <xs:complexType name="tInvalidDataError"> <xs:sequence> *************** *** 2039,2046 **** <interface name = "reservation" > ! <fault name = "inValidCreditCardFault" element = "ghns:invalidCreditCardError"/> ! <fault name = "inValidDataFault" element = "ghns:invalidDataError"/> --- 2073,2080 ---- <interface name = "reservation" > ! <fault name = "invalidCreditCardFault" element = "ghns:invalidCreditCardError"/> ! <fault name = "invalidDataFault" element = "ghns:invalidDataError"/> *************** *** 2051,2055 **** <output messageLabel="Out" element="ghns:checkAvailabilityResponse" /> ! <outfault ref="inValidDataFault" messageLabel="Out"/> </operation> --- 2085,2089 ---- <output messageLabel="Out" element="ghns:checkAvailabilityResponse" /> ! <outfault ref="invalidDataFault" messageLabel="Out"/> </operation> *************** *** 2061,2067 **** <output messageLabel="Out" element="ghns:makeReservationResponse"/> ! <outfault ref="inValidDataFault" messageLabel="Out"/> ! <outfault ref="inValidCreditCardFault" messageLabel="Out"/> </operation> --- 2095,2101 ---- <output messageLabel="Out" element="ghns:makeReservationResponse"/> ! <outfault ref="invalidDataFault" messageLabel="Out"/> ! <outfault ref="invalidCreditCardFault" messageLabel="Out"/> </operation>
Received on Tuesday, 26 October 2004 21:35:04 UTC