W3C

Web Services Choreography Description Language Version 1.0

W3C Working Draft 27 April12 October 2004

This version:
http://www.w3.org/TR/2004/WD-ws-cdl-10-20040427/http://www.w3.org/TR/2004/WD-ws-cdl-10-20041012/
Latest version:
http://www.w3.org/TR/ws-cdl-10/
Previous version:
http://www.w3.org/TR/2004/WD-ws-cdl-10-20040427/
Editors:
Nickolaos Kavantzas, Oracle <nickolas.kavantzas@oracle.com>
David Burdett, Commerce One <david.burdett@commerceone.com>
GregGregory Ritzinger, Novell <gritzinger@novell.com>
Yves Lafon, W3C <ylafon@w3.org>

Abstract

The Web Services Choreography Description Language (WS-CDL) is an XML-based language that describes peer-to-peer collaborations of Web Services participantsparties by defining, from a global viewpoint, their common and complementary observable behavior; where ordered message exchanges result in accomplishing a common business goal.

The Web Services specifications offer a communication bridge between the heterogeneous computational environments used to develop and host applications. The future of E-Business applications requires the ability to perform long-lived, peer-to-peer collaborations between the participating services, within or across the trusted domains of an organization.

The Web Services Choreography specification is targeted for composing interoperableinteroperable, peer-to-peer collaborations between any type of Web Service participantparty regardless of the supporting platform or programming model used by the implementation of the hosting environment.

Status of this Document

This section describes the status of this document at the time of its publication. Other documents may supersede this document. A list of current W3C publications and the latest revision of this technical report can be found in the W3C technical reports index at http://www.w3.org/TR/.

This is the First Publicsecond published Working Draft of the Web Services Choreography Description Language document. It should be the last version before Last Call WD.

It has been produced by the Web Services Choreography Working Group, which is part of the Web Services Activity.

Although the Working Group agreed to request publication of this document, this document does not represent consensus within the Working Group about Web Services choreography description language.This document is a chartered deliverable of the Web Services Choreography Working Group. It is an early stage document and major changesSome issues are expectedalready identified and in the near future.process of being fixed before going to Last Call, see the group's issue section.

This document is based upon the Working Draft published on 27 April 2004. Changes between these two versions are described in a diff document.

Comments on this document should be sent to public-ws-chor-comments@w3.org (public archive). It is inappropriate to send discussion emails to this address.

Discussion of this document takes place on the public public-ws-chor@w3.org mailing list (public archive) per the email communication rules in the Web Services Choreography Working Group charter.

This document has been produced under the 24 January 2002 CPP as amended by the W3C Patent Policy Transition Procedure. An individual who has actual knowledge of a patent which the individual believes contains Essential Claim(s) with respect to this specification should disclose the information in accordance with section 6 of the W3C Patent Policy. Patent disclosures relevant to this specification may be found on the Working Group's patent disclosure page.

Publication as a Working Draft does not imply endorsement by the W3C Membership. This is a draft document and may be updated, replaced or obsoleted by other documents at any time. It is inappropriate to cite this document as other than work in progress.

Table of Contents

1 Introduction
    1.1 Notational Conventions
    1.2 Purpose of the Choreography Language
    1.3 Goals
    1.4 Relationship with XML and WSDL
    1.5 Relationship with Business Process Languages
2 Choreography Model
    2.1 Model Overview
    2.2 Choreography Document Structure
        2.2.1 Package
        2.2.2 Choreography document Naming and Linking
        2.2.3 Language Extensibility and Binding
        2.2.4 Semantics
    2.3 Coupling Web Service participantsCollaborating Parties
        2.3.1 RolesRole Types
        2.3.2 ParticipantsParticipant Types
        2.3.3 RelationshipsRelationship Types
        2.3.4 ChannelsChannel Types
    2.4 Information Driven Collaborations
        2.4.1 Information Types
        2.4.2 Variables
            2.4.2.1 Expressions
        2.4.3 Tokens
        2.4.4 Choreographies
        2.4.5 WorkUnits
            2.4.5.1 Reacting        2.4.6 Reusing existing Choreographies             2.4.6.1 Composing Choreographies             2.4.6.2 ImportingIncluding Choreographies
        2.4.7 Choreography Life-line
        2.4.8 Choreography Recovery
            2.4.8.1 Exception Block
            2.4.8.2 Finalizer Block
    2.5 Activities
        2.5.1 Ordering Structures
            2.5.1.1 Sequence
            2.5.1.2 Parallel
            2.5.1.3 Choice
        2.5.2 InteractionInteracting
            2.5.2.1 Interaction State Changes             2.5.2.2 InteractionBased Information Alignment
            2.5.2.3            2.5.2.2 Protocol Based Information Exchanges
            2.5.2.4            2.5.2.3 Interaction Life-line
            2.5.2.4 Interaction Syntax
        2.5.3 Performed ChoreographyComposing Choreographies
        2.5.4 Assigning Variables
        2.5.5 Marking Silent Actions
        2.5.6 Marking the Absence of Actions
with non-observable effects3 Example
4 Relationship with the Security framework
5 Relationship with the Reliable Messaging framework
6 Relationship with the Transaction/Coordination framework
7 Acknowledgments
8 References
9 WS-CDL XSD Schemas
10 WS-CDL Supplied Functions


1 Introduction

For many years, organizations have being developing solutions for automating their peer-to-peer collaborations, within or across their trusted domain, in an effort to improve productivity and reduce operating costs.

The past few years have seen the Extensible Markup Language (XML) and the Web Services framework developing as the de-facto choices for describing interoperable data and platform neutral business interfaces, enabling more open business transactions to be developed.

Web Services are a key component of the emerging, loosely coupled, Web-based computing architecture. A Web Service is an autonomous, standards-based component whose public interfaces are defined and described using XML. Other systems may interactioninteract with thea Web Service in a manner prescribed by its definition, using XML based messages conveyed by Internet protocols.

The Web Services specifications offer a communication bridge between the heterogeneous computational environments used to develop and host applications. The future of E-Business applications requires the ability to perform long-lived, peer-to-peer collaborations between the participating services, within or across the trusted domains of an organization.

The Web Service architecture stack targeted for integrating interacting applications consists of the following components:

The Web Services Choreography specification is targeted for composing interoperable, peer-to-peer collaborations between any type of Web Service participantparty regardless of the supporting platform or programming model used by the implementation of the hosting environment.

1.1 Notational Conventions

The keywords "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC-2119 [2].

The following namespace prefixes are used throughout this document:

Prefix Namespace URI Definition
wsdl http://www.w3.org/2004/03/wsdlhttp://www.w3.org/2004/08/wsdl WSDL namespace for WSDL framework.
cdl http://www.w3.org/2004/04/ws-chor/cdlhttp://www.w3.org/2004/10/ws-chor/cdl WSCDL namespace for Choreography language.
xsi http://www.w3.org/2000/10/XMLSchema-instancehttp://www.w3.org/2001/XMLSchema-instance Instance namespace as defined by XSD [10].[11].
xsd http://www.w3.org/2000/10/XMLSchemahttp://www.w3.org/2001/XMLSchema Schema namespace as defined by XSD [10].[12].
tns (various) The "this namespace" (tns) prefix is used as a convention to refer to the current document.
(other) (various) All other namespace prefixes are samples only. In particular, URIs starting with "http://sample.com""http://example.com" represent some application-dependent or context-dependent URIURIs [4].

This specification uses an informal syntax to describe the XML grammar of a WS-CDL document:

  • The syntax appears as an XML instance, but the values indicate the data types instead of values.

  • Characters are appended to elements and attributes as follows: "?" (0 or 1), "*" (0 or more), "+" (1 or more).

  • Elements names ending in "" (such as <element/> or <element>) indicate that elements/attributes irrelevant to the context are being omitted.

  • Grammar in bold has not been introduced earlier in the document, or is of particular interest in an example.

  • <-- extensibility element --> is a placeholder for elements from some "other" namespace (like ##other in XSD).

  • The XML namespace prefixes (defined above) are used to indicate the namespace of the element being defined.

  • Examples starting with <?xml contain enough information to conform to this specification; others examples are fragments and require additional information to be specified in order to conform.

XSD schemas are provided as a formal definition of WS-CDL grammar (see Appendix A).Section 9).

1.2 Purpose of the Choreography Language

Business or other activities that involve multiple different organizations or independent processes that collaborate usingare engaged in a collaborative fashion to achieve a common business goal, such as Order Fulfillment.

For the Web Services technology cancollaboration to work successfully, the rules of engagement between all the interacting parties must be successful if theyprovided. Whereas today these rules are properly integrated. To solve this problem,frequently written in English, a standardized way for precisely defining these interactions, leaving unambiguous documentation of the parties and responsibilities of each, is missing.

The Web Services Choreography specification is targeted for precisely describing peer-to-peer collaborations between any type of party regardless of the supporting platform or programming model used by the implementation of the hosting environment.

Using the Web Services Choreography specification, a contract containing a "global" definition of the common ordering conditions and constraints under which messages are exchanged is produced that describes from a global viewpoint the common and complementary observable behavior of all the Web Services participantsparties involved. Each participantparty can then use the global definition to build and test solutions that conform to it.

The main advantage of a contract with a global definition approach is that it separates the process being followed by an individual business or system within a "domain of control" from the definition of the sequence in which each business or system exchanges information with others. This means that, as long as the "observable" sequence does not change, the rules and logic followed within the domain of control can change at will.

In real-world scenarios, corporate entities are often unwilling to delegate control of their business processes to their integration partners. Choreography offers a means by which the rules of participation within a collaboration can be clearly defined and agreed to, jointly. Each entity may then implement its portion of the Choreography as determined by theirthe common view.

The figure below demonstrates a possible usage of the Choreography Language.

diagram of integration of different Web Services based applications

Figure 1: Integrating Web Services based applications using WS-CDL

In Figure 1, Company A and Company B wish to integrate their Web Services based applications. The respective Businessbusiness analysts at both companies agree upon the services involved in the collaboration, their interactions and their common ordering and constraint rules under which the interactions occur and then generate a Choreography Language based representation. In the case of Company A, relies onthis example, a BPEL4WS [18] solution. Company B, having greater legacy driven integration needs, relies on a J2EE [25] solution incorporating Java and Enterprise Java Bean Components or a .NET [26] solution incorporating C#. In this example,Choreography specifies the interoperability and interactions between services across business entities, while leaving actual implementation decisions in the hands of each individual company.company:

  • Company "A" relies on a WS-BPEL [18] solution to implement its own part of the Choreography

  • Company "B", having greater legacy driven integration needs, relies on a J2EE [25] solution incorporating Java and Enterprise Java Bean Components or a .NET [26] solution incorporating C# to implement its own part of the Choreography

Similarly, a Choreography can specify the interoperability and interactions between services within one business entity.

1.3 Goals

The primary goal of a Choreography Language for Web Servicesis to specify a declarative, XML based language that defines from a global viewpoint theirthe common and complementary observable behavior, where message exchanges occur, and when the jointly agreed ordering rules are satisfied.

Some additional goals of this definition language are to permit:

  • Reusability. The same choreographyChoreography definition is usable by different participantsparties operating in different contexts (industry, locale, etc.) with different software (e.g. application software)

  • CooperativeCooperation. Choreographies define the sequence of exchanging messages between two (or more) independent participantsparties or processes by describing how they should cooperate

  • Multi-Party Collaboration. Choreographies can be defined involving any number of participantsparties or processes

  • Semantics. Choreographies can include human-readable documentation and semantics for all the components in the choreographyChoreography

  • Composability. Existing Choreographies can be combined to form new Choreographies that may be reused in different contexts

  • Modular.Modularity. Choreographies can be defined using an "import""inclusion" facility that allows a choreographyChoreography to be created from componentsparts contained in several different Choreographies

  • Information Driven Collaboration. Choreographies describe how participants that take part in Choreographies maintain where they are in the Choreography by recording theirparties make progress within a collaboration, when recordings of exchanged information and theobservable state changes caused by these exchanges ofinformation and also their reactionschanges cause ordering constraints to thembe fulfilled

  • Information Alignment. Choreographies allow the participantsparties that take part in Choreographies to communicate and synchronize their observable stateinformation changes and the actual values of the exchanged information as well

  • Exception Handling. Choreographies can define how exceptional or unusual conditions that occur whilstwhile the choreographyChoreography is performed are handled

  • Transactionality. The processes or participantsparties that take part in a choreographyChoreography can work in a "transactional" way with the ability to coordinate the outcome of the long-lived collaborations, which include multiple, often recursive collaboration units, each with its own business rules and goals

  • Compatibility with other SpecificationsSpecification Composability. This specification will work alongside and complement other specifications such as the WS-Reliability [22], WS-Composite Application Framework (WS-CAF) [21], WS-Security [24], Business Process Execution Language for WS (BPEL4WS)(WS-BPEL) [18], etc.

1.4 Relationship with XML and WSDL

This specification depends on the following specifications: XML 1.0 [9], XML-Namespaces [10], XML-Schema 1.0 [11, 12] and XPath 1.0 [13]. In addition, support for importingincluding and referencing service definitions given in WSDL 2.0 [7] is a normative part of this specification.

1.5 Relationship with Business Process Languages

A Choreography Language is not an "executable business process description language" [16, 17, 18, 19, 20] or an implementation language [23]. The role of specifying the execution logic of an application will be covered by these specifications; by enabling the definition of the control flows (such as conditional, sequential, parallel and exceptional execution) and the rules for consistently managing their non-observable business data.specifications.

A Choreography Language does not depend on a specific business process implementation language. Thus, it can be used to specify trullytruly interoperable, peer-to-peer collaborations between any type of Web Service participantparty regardless of the supporting platform or programming model used by the implementation of the hosting environment. Each participantparty, adhering to a Choreography Language collaboration representation, could be implemented byusing completely different languagesmechanisms such as:

  • Web Services applications,Applications, whose implementation is based on executable business process languages [16, 17, 18, 19, 20]

  • Web Services applications,Applications, whose implementation is based on general purpose programming languages [23, 26]

  • Or human controlled software agents

2 Choreography Model

This section introduces the Web Services Choreography Description Language (WS-CDL) model.

2.1 Model Overview

WS-CDL describes interoperable, peer-to-peer collaborations between Web Service participants.parties. In order to facilitate these collaborations, services commit on mutual responsibilities by establishing Relationships. Their collaboration takes place in a jointly agreed set of ordering and constraint rules, whereby messages are exchanged between the participants.parties.

The Choreography model consists of the following notations:

  • Participants, Roles and Relationships - In a ChoreographyChoreography, information is always exchanged between Participants,Participants within the same or across trust boundaries

  • Types, Variables and Tokens - Variables contain information about commonly observable objects in a collaboration, such as the messages exchanged or the stateobservable information of the Roles involved. Tokens are aliases that can be used to reference parts of a Variable. Both Variables and Tokens have Types that define the structure of what the Variable or Token contains

  • Choreographies - A Choreography allows defining collaborations between peer-to-peerinteracting business processes:peer-to-peer parties:

  • Choreography Composition allows the creation of new Choreographies by reusing existing Choreography definitions

  • Choreography Life-line expresses the progression of a collaboration. Initially, the collaboration is started at a specific business process, then work is performed within itby following the Choreography and finally itthe Choreography completes, either normally or abnormally

  • Choreography Recovery consists of:

    • Choreography Exception Block - describes how to specify what additional interactions should occur when a Choreography behaves in an abnormal way

    • Choreography Finalizer Block - describes how to specify what additional interactions should occur to reverse the effect of an earlier successfully completed choreographyChoreography

  • Channels - A Channel realizes a point of collaboration between participantsparties by specifying where and how to exchangeinformation is exchanged

  • WorkUnits - A WorkUnitWork Unit prescribes the constraints that must be fulfilled for making progress and thus performing actual work within a Choreography

  • Interactions - An Interaction is the basic building block of a Choreography, which results in exchange of messages between participants and possible synchronization of their states and the actual values of the exchanged informationActivities and Ordering Structures - Activities are the lowest level components of the Choreography that perform the actual work. Ordering Structures combine activities with other Ordering Structures in a nested structure to express the ordering conditions in which the messages in the choreographyChoreography are exchanged

  • SemanticsInteraction Activity - Semantics allowAn Interaction is the creationbasic building block of descriptionsa Choreography, which results in an exchange of messages between parties and possible synchronization of their observable information changes and the actual values of the exchanged information

  • Semantics - Semantics allow the creation of descriptions that can record the semantic definitions of almostevery single component in the model

2.2 Choreography Document Structure

A WS-CDL document is simply a set of definitions. The WS-CDL definitions areEach definition is a named constructsconstruct that can be referenced. There is a package element at the root, and the individual Choreography type definitions inside.

2.2.1 Package

A WS-CDL package contains a set of one or more Choreographies andChoreography Package aggregates a set of one or more collaborationChoreography type definitions, allowingprovides a namespace for the definitions and through the various types whoseuse may be wider than a singleof XInclude [27], syntactically includes Choreography to betype definitions that are defined once. Thein other Choreography Packages.

The syntax of the package construct is:;

<package  
   name="ncname" 
   author="xsd:string"?
   version="xsd:string"
   targetNamespace="uri"
   xmlns="http://www.w3.org/2004/10/ws-chor/cdl/">
   informationType*
   token*
   tokenLocator*
   roleType*
   relationshipType*
   participantType*
   channelType*
   Choreography-Notation*
</package>

The Choreography Package contains:

  • Zero or more Import definitions Zero or moreInformation Types

  • Zero or more Token typesTokens and Token Locators

  • Zero or more Role typesTypes

  • Zero or more Relationship typesTypes

  • Zero or more ParticipantsParticipant Types

  • Zero or more Channel typesTypes

  • Zero or more, package-levelmore Package-level Choreographies

The syntaxtop-level attributes name, author, and version define authoring properties of the package construct is:; <package name="ncname" author="xsd:string"? version="xsd:string" targetNamespace="uri" xmlns="http://www.w3.org/2004/04/ws-chor/cdl"> importDefinitions* informationType* token* tokenLocator* role* relationship* participant* channelType* Choreography-Notation* </package> The package construct allows aggregating a set ofChoreography definitions, where the elements informationType, token, tokenLocator, role, relationship, participant and channelType are shared by all the Choreographies defined within this package.document.

The targetNamespace attribute provides the namespace associated with all definitions contained in this package.Package. Choreography definitions importedincluded to this packagePackage using the inclusion mechanism, may be associated with other namespaces.

The top-level attributes author,elements informationType, token, tokenLocator, roleType, relationshipType, participantType and version, define authoring properties ofchannelType are shared by all the Choreography document.Choreographies defined within this Package.

Within a WS-CDL Package, language constructs that need to be uniquely named MUST use the attribute name for specifying a distinct name.

2.2.2 Choreography document Naming and Linking

WS-CDL documents MUST be assigned a name attribute of type NCNAME that serves as a lightweight form of documentation.

The targetNamespace attribute of type URI MUST be specified.

The URI MUST NOT be a relative URI.

A reference to a definition is made using a QName.

Each definition type has its own name scope.

Names within a name scope MUST be unique within a WS-CDL document.

The resolution of QNames in WS-CDL is similar to the resolution of QNames described by the XML Schemas specification [11].

2.2.3 Language Extensibility and Binding

If desired to extendTo support extending the WS-CDL language, this specification allows inside a WS-CDL documentthe use of extensibility elements and/or attributes defined in other XML namespaces. Extensibility elements and/or attributes MUST use an XML namespace different from that of WS-CDL. All extension namespaces used in a WS-CDL document MUST be declared.

Extensions MUST NOT change the semantics of any element or attribute from the WS-CDL namespace.

2.2.4 Semantics

Within a WS-CDL document, descriptions will be required to allow the recording of semantics definitions. The optional description sub-element is used as a textual description for documentation purposes. This element is allowed inside any WS-CDL language element.

The information provided by the description element will allow for the recording of semantics in any or all of the following ways:

  • Text. This will be in plain text or possibly HTML and should be brief

  • Document Reference. This will contain a URLURI to a document that more fully describes the component. For example on the top level Choreography Definition that might reference a complete paper

  • Structured Attributes. This will contain machine processable definitions in languages such as RDF or OWL

Descriptions that are Texttext or Document Referencesdocument references can be defined in multiple different human readable languages.

2.3 Coupling Web Service participantsCollaborating Parties

The WSDL specification [7] describes the functionality of a service provided by a participantparty based on a stateless, connected,client-server model. The emerging Web Based applications require the ability to exchange messages in a peer-to-peer environment. In these typetypes of environmentenvironments a participantparty represents a requester of services provided by another participantparty and is at the same time a provider of services requested from other participants,parties, thus creating mutual multi-participantmulti-party service dependencies.

A WS-CDL document describes how a Web Service participantparty is capable of engaging in peer-to-peer collaborations with the same participantparty or with different participants. Within a Choreography, information is always exchanged between Participants .parties.

The RolesRole Types, Participant Types, Relationship Types and ChannelsChannel Types define the coupling of the collaborating Web Services participants.parties.

2.3.1 RolesRole Types

A Role Type enumerates the observable behavior a participantparty exhibits in order to collaborate with other participants.parties. For example the Buyer Role Type is associated with purchasing of goods or services and the Supplier Role Type is associated with providing those goods or services for a fee.

The syntax of the roleroleType construct is:;

 <role name="ncname" ><roleType name="ncname">
   <behavior name="ncname" interface="qname"? />+
 </role></roleType>

The attribute name is used for specifying a distinct name for each roleType element declared within a Choreography Package.

Within the roleroleType element, the behavior element specifies a subset of the observable behavior a participantparty exhibits. A Role Type MUST contain one or more behavior elements.

The behavior element defines an optional interface attribute, which identifies a WSDL interface type. A behavior without an interface describes a Role Type that is not required to support a specific Web Service interface.

2.3.2 ParticipantsParticipant Types

A Participant Type identifies a set of related Roles. For example a Commercial Organization could take both a BuyerRole when purchasing goods and a Seller Role when selling them.Types that MUST be implemented by the same entity or organization. Its purpose is to group together the parts of the observable behavior that MUST be implemented by the same process.

The syntax of the participantparticipantType construct is:;

 <participant<participantType name="ncname">
   <role type="qname" />+
 </participant> 2.3.3 Relationships A</participantType>

The attribute name is used for specifying a distinct name for each participantType element declared within a Choreography Package.

An example is given below where the "SellerForBuyer" Role Type belonging to a "Buyer-Seller" Relationship Type is implemented by the association of two Roles forParticipant Type "Broker" which also implements the "SellerForShipper" Role Type belonging to a purpose."Seller-Shipper" Relationship Type:

<participantType name="Broker">
   <role type="tns:SellerForBuyer" />
   <role type="tns:SellerForShipper" />
</participantType>

2.3.3 Relationship Types

A Relationship representsType identifies the possible ways in whichRole Type and Behaviors where mutual commitments between two Roles can interact.parties MUST be made for them to collaborate successfully. For example the RelationshipsRelationship Types between a Buyer and a Seller could include:

  • A "Purchasing" Relationship,Relationship Type, for the initial procurement of goods or services, and

  • A "Customer Management" Relationship Type to allow the Supplier to provide service and support after the goods have been purchased or the service provided

Although RelationshipsRelationship Types are always between two Roles,Role Types, Choreographies involving more than two RolesRole Types are possible. For example if the purchase of goods involved a third-party Shipper contracted by the Supplier to deliver the Supplier's goods, then, in addition to the Purchasing and Customer Management RelationshipsRelationship Types described above, the following RelationshipsRelationship Types might exist:

  • A "Logistics Provider" Relationship Type between the Supplier and the Shipper, and

  • A "Goods Delivery" Relationship Type between the Buyer and the Shipper

The syntax of the relationshiprelationshipType construct is:;

 <relationship<relationshipType name="ncname">
   <role type="qname"  behavior="ncname"behavior="list of ncname"? />
   <role type="qname"  behavior="ncname"behavior="list of ncname"? />
 </relationship></relationshipType>

The attribute name is used for specifying a distinct name for each relationshipType element declared within a Choreography Package.

A relationshiprelationshipType element MUST have exactly two role typesRole Types defined.

Within the role element, the behavioroptional attribute points tobehavior identifies the commitment of a party as a list of behavior types belonging to the Role Type specified by the type withinattribute of the role typeelement. If the behavior attribute is missing then all the behaviors belonging to the Role Type specified by the type attribute of the role element.element are identified as the commitment of a party.

2.3.4 ChannelsChannel Types

A Channel realizes a point of collaboration between participantsparties by specifying where and how to exchange information.information is exchanged. Additionally, Channel information can be passed among participants.parties. This allows modeling howthe destinationmodeling of messages is determined, staticallyboth static and dynamically,dynamic message destinations when collaborating within a Choreography. For example, a Buyer could specify Channel information to be used for sending delivery information. The Buyer could then send the Channel information to the Seller who then forwards it to the Shipper. The Shipper could then send delivery information directly to the Buyer using the Channel information originally supplied by the Buyer.

A Channel Type MUST describe the Role Type and the type of a Web Servicereference type of a participant,party, being the target of an Interaction, which is then used for determining where and how to send/receive information to/into the participant.party.

A Channel Type MAY specify the instance identity of a business processan entity implementing the behaviorbehavior(s) of a participant,party, being the target of an Interaction.

A Channel Type MAY describe one or more logical conversations between participants,parties, where each conversation groups a set of related message exchanges.

One or more Channel(s) MAY be passed around from one Role to another. A Channel Type MAY restrict the types of Channel(s)Channel Type(s) allowed to be exchanged between the Web Services participants,parties, through a Channel of this Channel.Channel Type. Additionally, a Channel Type MAY restrict its usage by specifyingthe number of times a Channel can beof this Channel Type is used.

The syntax of the channelType construct is:;

<channelType  name="ncname"
    usage="once"|"unlimited"?
    action="request-respond"|"request"|"respond"? >
  <passing  channel="qname"
        action="request-respond"|"request"|"respond"?
         new="true"|"false"?new="xsd:boolean"? />*
  <role  type="qname"  behavior="ncname"? />
  <reference>
     <token  type="qname"/>+type="qname"/>
  </reference>
  <identity>
     <token  type="qname"/>+
   </identity>*</identity>?
</channelType>

The attribute name is used for specifying a distinct name for each channelType element declared within a Choreography Package.

The optional attribute usage is used to restrict the number of times a Channel can be used.

The optional element passing restrictsdescribes the Channel(s) allowed to beChannel Type(s) that are exchanged from one Role Type to another Role,Role Type, when using a Channel of this Channel Type in an Interaction. In the case where the operation used to exchange the Channel is of request-response type, then the attribute action within the passing element defines if the Channel will be exchanged during the request or during the response. The Channels exchanged canMAY be used in subsequent Interaction activities. If the element passing is missing then this Channel canType MAY be used for exchanging business documents and all types of ChannelsChannel Types without any restrictions.

The element role is used to identify the Role Type of a participant,party, being the target of an Interaction, which is then used for statically determining where and how to send/receivesend or receive information to/intoto or into the participant.party.

The element reference is used for identifyingdescribing the WSDL servicereference type of a participant,party, being the target of an Interaction, which is then used for dynamically determining where and how to send/receivesend or receive information to/intoto or into the participant.party. The service reference of a participantparty is distinguished by a set ofToken typesas specified by the token element within the reference element.

The optional element identity MAY be used for identifying an instance of a business processan entity implementing the behavior of a participantparty and for identifying a logical conversation between participants.parties. The businessprocess identity and the different conversations are distinguished by a set of Token typesTokens as specified by the token element within the identity element.

The following rule applies for Channel Type:

  • If two or more Channel Types SHOULD point to Role Types that MUST be implemented by the same entity or organization, then the specified Role Types MUST belong to the same Participant Type. In addition the identity elements within the Channel Types MUST have the same number of Tokens with the same informationTypes specified in the same order

The example below shows the declarationdefinition of the Channel typeType RetailerChannel. The Channel Type identifies the Role type tns:Retailer.Type as the "tns:Retailer". The address of the Channel is specified in the reference element, whereas the businessprocess instance can be identified using the identity element.element for correlation purposes. The passing element allows only a Channel instance of the ConsumerChannel Type to be sent over the RetailerChannel.;RetailerChannel Type.;

<channelType name="RetailerChannel">
  <passing channel="ConsumerChannel" action="request" />
  <role type="tns:Retailer" behavior="retailerForConsumer"/>
  <reference>
    <token type="tns:retailerRef"/>
  </reference>
  <identity>
    <token type="tns:purchaseOrderID"/>
  </identity>
</channelType>

2.4 Information Driven Collaborations

Parties make progress within a collaboration, when recordings of exchanged information and observable information changes cause ordering constraints to be fulfilled. A WS-CDL document allows defining information within a Choreography that can influence the observablebehavior of the collaborating participants.parties.

Variables containcapture information about objects in the ChoreographyChoreography, such as the messages exchanged or the stateobservables information of the Roles involved. TokensToken are aliases that can be used to reference parts of a Variable. Both Variables and Tokens have Information Types that define the data structuretype of whatinformation the Variable or Token contains.contain.

2.4.1 Information Types

Information types describe the type of information used within a Choreography. By introducing this abstraction, a Choreography definition avoids referencing directly the data types, as defined within a WSDL document or an XML Schema document.

The syntax of the informationType construct is:;

<informationType name="ncname";                 type="qname"? | element="qname"? />

The attribute name is used for specifying a distinct name for each informationType element declared within a Choreography Package.

The attributes type, and element describe the document to be an XML Schema type, or an XML Schema element respectively. The document is of one of these types exclusively.

2.4.2 Variables

Variables capture information about objects in a Choreography as defined by the Variable Usagetheir usage:

  • Information Exchange Capturing Variables that, which contain information such as an Order that is used to:to

    • Populate the content of a message to be sent, or

    • Populated as a result of a message received

  • State Variables thatCapturing Variables, which contain observableinformation about the Stateobservable changes of a Role as a result of information being exchanged. For example: Whenexample when a Buyer sends an orderOrder to a Seller, the Buyer could have a StateVariable called "OrderState" set to a value of "OrderSent" and once the message was received by the Seller, the Seller could have an Statea Variable called "OrderState" set to a value of "OrderReceived". Note that the variableVariable "OrderState" at the Buyer is a different variableVariable to the "OrderState" at the Seller

  • Once an order is received, then it might be validated and checked for acceptability in other ways that affect how the Choreography is performed. This could require additional states to be defined for "Order State", such as: "OrderError", which means an error was detected that stops processing of the message, "OrderAccepted", which means that there were no problems with the Order and it can be processed, and "OrderRejected", which means, although there were no errors, it cannot be processed, e.g. because a credit check failedChannel Capturing Variables. For example, a Channel Variable could contain information such as the URL to which the message shouldcould be sent, the policies that are to be applied, such as security, whether or not reliable messaging is to be used, etc.

The value of Variables:

  • Is available to all theRoles by initializing them prior to the start ofwithin a Choreography CommonChoreography, when the Variables thatcontain information that is common knowledge to two or more Roles, e.g.knowledge. For example the Variable "OrderResponseTime" which is the time in hours in which a response to an Order must be sent is initialized prior to the initiation of a Choreography and can be used by all Roles within the Choreography

  • Can be made available as a result of an Interaction

    • Information Exchange Capturing Variables are populated and become available at the Roles in the ends of an Interaction

    • State Capturing Variables, that contain information about the observable information changes of a Role by populating themas a result of an Interactioninformation being exchanged, are recorded and become available

  • Can be created or changed and made available locally at a Role by assigning data from other information Locally Defined Variables that contain information created and changed locally by a Role.information. They can be Information Exchange, State or Channel Variables as well as variables of other types.Capturing Variables. For example "Maximum Order Amount" could be data created by a sellerSeller that is used together with an actual order amount from an Order received to control the ordering of the Choreography. In this case how Maximum"Maximum Order AmountAmount" is calculated and its value would not be known by the other Roles

  • Can be used to determine the decisions and actions to be taken within a Choreography

The variableDefinitions construct is used for declaringdefining one or more variablesVariables within a Choreography block.

The syntax of the variableDefinitions construct is:;

<variableDefinitions>
   <variable   name="ncname"
       informationType="qname"|channelType="qname"
       mutable="true|false"?
       free="true|false"?
        silent-action="true|false"? role="qname"?silentAction="true|false"?
       roleType="qname"? />+
</variableDefinitions>

The declared variablesdefined Variables can be of the following types:

  • Information Exchange Capturing Variables, State Capturing Variables. The attribute informationType describes the type of the variableobject captured by the Variable

  • Channel Capturing Variables. The attribute channelType describes the type of the Channelchannel object captured by the Variable

The optional attribute mutable, when set to "false" describes that the variableVariable information when initialized, cannot change anymore. The optionaldefault value for this attribute is "true".

The optional attribute free, when set to "true" describes that a variable declaredVariable defined in an enclosing Choreography is also used in this Choreography, thus sharing the variableVariables information. When the attribute free is set to "true", the variableThe following rules apply in this case:

  • The type of a free Variable MUST match the type of the variable declaredVariable defined in thean enclosing Choreography.Choreography

  • A perform activity MUST bind a free Variable defined in an enclosed Choreography with a Variable defined in an enclosing Choreography when sharing the Variables information

The optional attribute free, when set to "false" describes that a variableVariable is declareddefined in this Choreography.

WhenThe default value for the attributefree attribute is set to "false", the variable resolves to the closest enclosing Choreography, regardless of the type of the variable."false".

The optional attribute silent-action,silentAction, when set to "true" describes that activitiesthere SHOULD NOT be any activity used for makingcreating or changing this variable available MUST NOT be presentVariable in the Choreography.Choreography, if these operations should not be observable to other parties. The default value for this attribute is "false".

The optional attribute roleroleType is used to specify the locationRole Type of a party at which the variableVariable information will reside.

The following rules apply to Variable Declarations: IfDefinitions:

  • The attribute name is used for specifying a distinct name for each variable iselement declared within a variableDefinitions element when needed. The Variables with Role Type not specified MUST have distinct names. The Variables with Role Type specified MUST have distinct names, when their Role Type is the same

  • A Variable defined without a Role, itRole Type is impliedequivalent to a Variable that itis declareddefined at all the RolesRole Types that are part of the RelationshipsRelationship Types of the Choreography.Choreography where the Variable is defined. For example if Choreography C1 has Relationship Type R that has a tuple (Role1, Role2), then a variableVariable x defined in ChreographyChoreography C1 without a RoleroleType attribute means it is declareddefined at Role1 and Role2

The variable with channelType MUST be declared without a role attribute2.4.2.1 Expressions

Expressions are used in an assign activitywithin WS-CDL to obtain existing information and to create new variable information by generating it from a constant value.or change existing information.

Predicate expressions are used in a Work Unitwithin WS-CDL to specify its Guard condition.conditions. Query expressions are used within WS-CDL to specify query strings.

The language used in WS-CDL for specifying expressions and query or conditional predicates is XPath 1.0.

Additionally,WS-CDL defines XPath function extensions as described in Appendix B.Section 10. The function extensions are defined in the standard WS-CDL namespace "http://www.w3.org/2004/10/ws-chor/cdl". The prefix "cdl:" is associated with this namespace.

2.4.3 Tokens

A Token is an alias for a piece of data in a variableVariable or message that needs to be used by a Choreography. Tokens differ from Variables in that Variables contain values whereas Tokens contain information that defines the piece of the data that is relevant. For example a Token for "Order Amount" within an Order businessXML document could be an alias for an expression that pointed to the Order Amount element within anthe Order XML document. This could then be used as part of a condition that controls the ordering of a Choreography, for example "Order Amount > $1000".

All Tokens MUST have a type,an informationType, for example, an Order Amount"Order Amount" would be of type amount, Order Id"amount", "Order Id" could be alphanumeric and a counter an integer.

Tokens types reference a document fragment within a Choreography definition and Token Locators provide a query mechanism to select them. By introducing these abstractions, a Choreography definition avoids depending on specific message parts,types, as described by WSDL, or a specific query string, as specified by XPATH, but instead the parts orthe query string can change without affecting the Choreography definition.

The syntax of the token construct is:;

<token  name="ncname"  informationType="qname" />

The attribute name is used for specifying a distinct name for each token element declared within a Choreography Package.

The attribute informationType identifies the type of the document fragment.

The syntax of the tokenLocator construct is:;

<tokenLocator  tokenName="qname" 
      informationType="qname" 
      query="XPath-expression"? />

The attribute tokenName identifies the name of the token typeToken that the document fragment locator is associated with.

The attribute informationType identifies the type on which the query is performed to locate the token.Token.

The attribute query defines the query string that is used to select a document fragment within a document.

The example below shows that the token purchaseOrderIDToken "purchaseOrderID" is of type xsd:int. The two tokenLocators show how to access this token in "purchaseOrder" and "purchaseOrderAck" messages.;

<token name="purchaseOrderID" informationType="xsd:int"/>
<tokenLocator tokenName="tns:purchaseOrderID" informationType="purchaseOrder"       
                 part="PO"query="/PO/OrderId"/>
<tokenLocator tokenName="tns:purchaseOrderID" informationType="purchaseOrderAck" 
                 part="POAck"query="/POAck/OrderId"/>

2.4.4 Choreographies

A WS-CDL document explicitly prescribes the rules, agreed between Web Service participants, that govern the ordering of exhanged messages and the provisioning of alternative patterns of behavior.. The operational semantics of these rules are based on the information-driven computational model, where availability of variable information causes a guarded unit-of-work and its enclosed actions to be enabled.

A Choreography allows constructing global compositions of Web Service participants by explicitly asserting theirChoreography. defines re-usable the common rules, that govern the ordering of exhanged messages and complementary observable behaviors.the provisioning patterns of collaborative behavior, agreed between two or more interacting peer-to-peer parties

A Choreography declareddefined at the packagePackage level is called a top-level Choreography, and does not share its context with other top-level Choreographies. A Choreography performed within another Choreography is called an enclosed Choreography. APackage MUSTMAY contain exactly one top-level Choreography, that is explicitlymarked explicitly as the root Choreography.

The rootA Choreography isdefines the only top-level Choreographyre-usable the common rules, that govern the ordering of exhanged messages and the provisioning patterns of behavior, as the action(s) performing the actual work, such as exchange of messages, when the specified ordering constraints are satisfied.

The re-usable behavior encapsulated within a Choreography MAY be initiated.performed within an enclosing Choreography, thus facilitating recursive composition. The rootperformed Choreography is enabled when itthen called an enclosed Choreography.

The Choreography that is initiated. All non-root, top-level Choreographiesperformed MAY be enabled when performed. Adefined either:

  • Locally - they are contained, in the same Choreography facilitates recursive composition, where combining two or more Choreographies can form a new enclosingdefinition as the Choreography that may be re-usedperformed them

  • Globally - they are specified in different contexts. Aa separate top-level Choreography definition that is defined in the same or in a different Choreography Package and can be used by other Choreographies and hence the contract is reusable

A Choreography MUST contain at least one Relationship type,Type, enumerating the observable behavior this Choreography requires its participantsparties to exhibit. One or more RelationshipsRelationship Types MAY be defined within a Choreography, modeling multi-participantmulti-party collaborations.

A Choreography acts as a lexical name scoping context as it restricts the visibility of variable information.for Variables. A variableVariable defined in a Choreography is visible for use in this Choreography and all its enclosed Choreographies,Choreographies up-to the point that the Variable is re-defined as an non-free Variable, thus forming a Choreography Visibility Horizon for this Variable.

A Choreography MUST containsMAY contain one or more Choreography definitions that MAY be performed only locally within this Choreography.

A Choreography MUST contain an Activity-Notation. The Activity-Notation specifies the enclosed actions of the Choreography that perform the actual work.

A Choreography can recover from exceptional conditions and provide finalization actions by defining:

  • One Exception block, which MAY be defined as part of the Choreography to recover from exceptional conditions that can occur in that enclosing Choreography

  • One Finalizer block, which MAY be defined as part of the Choreography to provide the finalization actions for that enclosing Choreography

The Choreography-Notation is used to define a root or a top-levelChoreography. The syntax is:;

<choreography  name="ncname"
      complete="xsd:boolean XPath-expression"?
       isolation="dirty-write"| "dirty-read"|"serializable"?isolation="dirty-write"|"dirty-read"|"serializable"?
      root="true"|"false"? >
   <relationship  type="qname" />+
   variableDefinitions?
   Choreography-Notation*
      Activity-Notation
   <exception  name="ncname">
        WorkUnit-Notation+
   </exception>?
   <finalizer  name="ncname">
        WorkUnit-Notation
   </finalizer>?
</choreography>

The attribute name is used for specifying a distinct name for each choreography element declared within a Choreography Package.

The optional complete attribute allows to explicitly complete a Choreography as described below in the Choreography Life-line section.

The optional isolation attribute specifies when a variableVariable information that is declareddefined in an enclosingenclosing, and changed within an enclosed Choreography is visibleavailable to its enclosing andsibling Choreographies:

  • When isolation is set to "dirty-write", the variableVariable information canMAY be immediately overwritten by actions in other Choreographies

  • When isolation is set to "dirty-read", the variableVariable information isMAY be immediately visible for read but not for write to other Choreographies

  • When isolation is set to "serializable", the variableVariable information isMUST be visible for read or for write to other Choreographies only after this Choreography has ended successfully

The relationship element within the choreography element enumerates the Relationships this Choreography MAY participate in.

The optional variableDefinitions element declaresenumerates the variables that are visibleVariables defined in this Choreography and all its enclosed Choreographies and activities.Choreography.

The optional root element marks a top-level Choreography as the root Choreography of a package.Choreography Package.

The optional Choreography-Notation within the choreography element declaresdefines the Choreographies that MAY be performed only within this Choreography.

The optional exception element defines the Exception block of a Choreography by specifying one or more Exception Work Unit(s).

The optional finalizer element defines the Finalizer block of a Choreography by specifying one Finalizer Work Unit.

2.4.5 WorkUnits

A Work Unit prescribes the constraints that must be fulfilled for making progress and thus performing actual work within a Choreography. Examples of a Work Unit include:

  • A Send PO Work Unit that includes Interactions for the Buyer to send an Order, the Supplier to acknowledge the order, and then later accept (or reject) the order.Order. This work unitWork Unit would probably not have a Guardguard condition

  • An Order Delivery Error Work Unit that is performed whenever the Place Order Work Unit did not reach a "normal" conclusion. This would have a Guardguard condition that identifies the error, see also Choreography Exceptions and Transactionserror

  • A Change Order Work Unit that can be performed whenever an order acknowledgement message has been received and an order rejection has not been received

A Work Unit canMAY prescribe the explicit rules for enforcing theconstraints that preserve the consistency of the collaborations commonly performed between the Web Service participants.parties. Using a Work Unit an application canMAY recover from faults that are the result fromof abnormal actions and also MAY finalize completed actions that need to be logically rolled back.

AWhen enabled, a Work Unit specifies the data dependencies that must be satisfied before enabling one or more enclosed actions. These dependencies expressexpresses interest(s) on the availability of variableone or more Variable information that already existsexist or will be created in the future.

The Work UnitsUnit's interest(s) are matched when all the required, one or more variablerequired Variable information are or become available.available and the specified matching condition on the Variable information is met. Availability of some variableVariable information does not mean that a Work Unit matches immediately. Only when all variableVariable information required by a Work Unit become available, in the appropriate Visibility Horizon, does matching succeed. Variable information available within a Choreography MAY be matched with a Work Unit that will be enabled in the future. One or more Work Units MAY be matched concurrently if their respective interests are matched. When the matching succeeds thea Work Unit ismatching succeeds then its enclosed actions are enabled.

A Work Unit MUST contain an Activity-Notation , which is enabled when its enclosing Work Unit is enabled.that performs the actual work.

A Work Unit completes successfully when all its enclosed actions complete successfully.

A Work Unit that completes successfully MUST be considered again for matching (based on its Guardguard condition), if its repetition condition evaluates to "true".

The WorkUnit-Notation is defined as follows:;

<workunit  name="ncname"
      guard="xsd:boolean XPath-expression"?                 
      repeat="xsd:boolean XPath-expression"? 
       block="true|false"block="true|false"? >
      Activity-Notation
</workunit>

The Activity-Notation specifies the enclosed actions of a Work Unit.

The guard condition of a Work Unit, specified by the optional guard attributeattribute, describes the reactiveinterest on the availability of one or more, existing or future variable information and its usage is explained in section 2.4.5.1.Variable information.

The optional repeat attribute allows, when the condition it specifies evaluates to "true", to make the current Work Unit considered again for matching (based on the guard conditionattribute).

The blockoptional attribute block specifies whether the matching condition relies on the variableVariable that is currently available, or whether the Work Unit has to block waiting for the variableVariable to bebecome available and its usage is explained in section 2.4.5.1. The WS-CDL functions, as describedin Appendix B, MAY be used within a guard, and a repeat condition. 2.4.5.1 Reacting A Guard describes the Work Unit's interest for reacting onthe availability of variable information and on a constraint condition, including these variable information, being satisfied.future if it is not currently available. The default is set to "false".

The following rules apply when a Work Unit uses a Guard for reacting:apply:

  • When a Guardguard condition is not specified then the Work Unit always matches

  • When a Guard is specified then When the block attribute is set to "false", then the Guardrepetition condition assumes that the variable information is currently available. If either the variable informationis not available or the Guard condition evaluates to "false",specified then the Work Unit is not considered again for matching fails and the Activity-Notation enclosed withinafter the Work Unit is skippedgot matched once

  • When the block attributea guard condition or repetition condition is set to "true" and onespecified then:

    • One or more variable(s) are not available, then the Work Unit MUST block waiting for the variable information to become available. When the variable informationVariables can be specified by the Guardin a guard condition become available thenor repetition condition, using XPATH and the Guard conditionWS-CDL functions, as described in Section 10.

    • The WS-CDL function getVariable() is evaluated. Ifused in the Guardguard or repetition condition evaluatesto "true", thenobtain the Work Unit is matched. Ifinformation of a Variable

    • When the Guard condition evaluates to "false", then the Work Unit matching fails andWS-CDL function isVariableAvailable() is used in the Activity-Notation enclosed withinguard or repetition condition, it means that the Work Unit that specifies the guard condition is skippedchecking if a Variable is already available at a specific Role or is waiting for a Variable to become available at a specific Role, based on the block attribute being "false" or "true" respectively

    • When the WS-CDL function isAligned()variablesAligned() is used in the Guard,guard or repetition condition, it means that the Work Unit that specifies the Guardguard or repetition condition is checking or waiting for an appropriate alignment Interaction to happen between the two Roles.Roles, based on the block attribute being "false" or "true" respectively. When the isAligned()variablesAligned() WS-CDL function is used in a Guard,guard or repetition condition, then the Relationship Type within the isAligned()variablesAligned() MUST be the subset of the Relationship Type that the immediate enclosing Choreography defines Indefines.

    • If Variables are defined at different Roles, then they can be combined together in a guard condition or repetition condition using only the below example,globalizedTrigger() WS-CDL function

    • If Variables are defined at the Guard specifies thatsame Role, then they can be combined together in a guard condition or repetition condition using all available XPATH operators and the enclosed Work UnitWS-CDL functions except the globalizedTrigger() WS-CDL function

    • When the attribute block is waiting for an alignment Interactionset to happen between the customer Role"true" and one or more Variable(s) are not available, then the retailer Role:; guard("cdl:isAligned("PurchaseOrder", PurchaseOrder", "customer-retailer-relationship")") The examples below demonstrate the possible use of a Work Unit: a. Example of aWork Unit withMUST block equals to "true" : Inwaiting for the followingVariable information to become available. This attribute MUST not be used in Exception Work Unit, the Guard waits on the availability of POAcknowledgement at customer Role and if it is already available,Units. When the activity happens, otherwise,Variable information specified by the activity waits untilguard condition become available then the variable POAcknowledgementguard condition is initialized atevaluated:

      • If the guard condition evaluates to "false", then the customer Role.; <workunit name="POProcess" guard="cdl:getVariable("POAcknowledgement", "tns:customer")" block="true" ... <!--some activity --> </workunit> b. Example of aWork Unit with block equals to "false" : Inmatching fails and the Activity-Notation enclosed within the followingWork Unit,Unit is skipped and the Guard checksrepetition condition even if StockQuantity at retailer Rolespecified is available andnot evaluated

      • If the guard condition evaluates to "true", then the Work Unit is greater than 10matched and then the repetition condition, if so,specified, is evaluated when the activity happens.Variable information specified by the repetition condition become available

      • If the repetition condition evaluates to "true", then the Work Unit is considered again for matching

      • If the repetition condition evaluates to "false", then the Work Unit is not considered again for matching

    • When the attribute block is set to "false", then the guard condition or repetition condition assumes that the Variable information is currently available

      • If either the Variable information is not available or the value is less than 10,guard condition evaluates to "false", then the Work Unit matching condition is "false"fails and the activityActivity-Notation enclosed within the Work Unit is skipped.; <workunit name="Stockcheck" guard="cdl:getVariable("StockQuantity", "/Product/Qty", "retailer") > 10)" block="false" > ... <!--some activity --> </workunit> 2.4.6 Reusing existing Choreographies Choreographies can be combinedskipped and built from other Choreographies. 2.4.6.1 Composing Choreographies Choreography Compositionthe repetition condition even if specified is not evaluated

      • If matching succeeds, then the creation of new Choreographies by reusing existing Choreography definitions. For examplerepetition condition, if two separate Choreographies were defined as follows: A Request for Quote (RFQ) Choreography that involved a Buyer Role sending a request for a quotation for goods and services to a Supplier to whichspecified, is evaluated immediately

      • If either the Supplier responding with either a "Quotation"Variable information is not currently available or a "Declinethe repetition condition evaluates to Quote" message, and An Order Placement Choreography where"false", then the Buyer placed and orderWork Unit is not considered again for goods or services andmatching

      • Othewise, then the Supplier either acceptedWork Unit is considered again for matching

The examples below demonstrate the order or rejected it You could then createpossible use of a new "Quote and Order" Choreography by reusingWork Unit:

a. Example of a Work Unit with block equals to "true":

In the two wherefollowing Work Unit, the RFQ Choreography was executed first, and then, dependingguard condition waits on the outcomeavailability of POAcknowledgement at customer Role and if it is already available, the RFQ Choreography,activity happens, otherwise, the order was placed usingactivity waits until the Order Placement Choreography. In this caseVariable POAcknowledgement become available at the new Choreography is "composed" outcustomer Role.;

<workunit  name="POProcess" 
           guard="cdl:isVariableAvailable(
                   cdl:getVariable("POAcknowledgement"),  "tns:customer")"
      block="true">
   ... <!--some activity -->
</workunit>

b. Example of a Work Unit with block equals to "false":

In the two previously defined Choreographies. These Choreographies may be specified either: Locally , i.e. they are included, infollowing Work Unit, the same Choreography definition asguard condition checks if StockQuantity at the Choreography that performed them,retailer Role is available and is greater than 10 and if so, the activity happens. If either the Variable is not available or Globally, i.e. they are specified in a separate Choreography definition thatthe value is defined elsewhereless than 10, the matching condition is "false" and performed inthe root Choreography using perform construct Using this approach, Choreographies can be recursively combined to support Choreographiesactivity is skipped.;

<workunit  name="Stockcheck" 
           guard="cdl:getVariable("StockQuantity",  "/Product/Qty",  
                                  "tns:retailer") > 10)"            
           block="false" >
   ... <!--some activity -->
</workunit>

.c. Example of any required complexity allowing more flexibility as Choreographies defined elsewhere can be reused. The example below showsa Choreography composition using an enclosed Choreography: The root Choreography "PurchaseChoreo" hasWork Unit waiting for alignment to happen..

In the following Work Unit, the guard condition waits for an enclosed Choreography "CustomerNotifyChoreo". The variable RetailerNotifyCustomer is visiblealignment Interaction to happen between the enclosed Choreography.; <choreography name="PurchaseChoreo" root="true"> ... <variable name="purchaseOrderAtRetailer" informationType="purchaseOrder" role="Retailer"/> ... <choreography name="CustomerNotifyChoreo"> ... </choreography>customer Role and the retailer Role:;

<workunit   name="RetailerNotifyCustomer" guard="cdl:getVariable(PoAckFromWareHouse, tns:WareHouse)"> perform choreographyName="CustomerNotifyChoreo" </workunit>name="WaitForAlignment" 
           guard="cdl:variablesAligned(
                    "PurchaseOrderAtBuyer",  "PurchaseOrderAtSeller", 
                    "customer-retailer-relationship")"
       block="true" >
   ...  </choreography> <!--end of root choreography<!--some activity -->
 2.4.6.2 Importing</workunit>

2.4.6 Including Choreographies

Choreographies or fragments of Choreographies An Importing statementcan contain references to a complete Choreography. Importing statements mustbe interpretedsyntactically reused in the sequence they occur. When the Import statement contains references to variables or other data that have the same identity, then the content of the later Import statement replaces the same content referenced by the earlier Import statement. It also enables oneany Choreography definition to effectively be "cloned"by replacing the definitions for some or all of its variables.using XInclude [27]. The importDefinitions construct allows reusing Choreography types defined in anotherassembly of large Choreography document such as Token types, Token Locator types, Information Types, Role types, Relationship types, Channel types and Choreographies. In addition, WSDL documents can be imported and theirdefinitions reused.from multiple smaller, well formed Choreographies or Choreography fragments is enabled using this mechanism.

The syntaxexample below shows a possible syntactic reuse of the importDefinitions construct is:; <importDefinitions> <import namespace="uri" location="uri" />+ </importDefinitions> The namespace and location attributes provide the namespace names and document location that contain additionala Choreography and WSDL definitions that MUST be imported into this package.definition:;

<choreography name="newChoreography" root="true">
...
   <variable name="newVariable" informationType="someType"
             role="randomRome"/>
   <xi:include href="genericVariableDefinitions.xml" />
   <xi:include href="otherChoreography.xml"
               xpointer="xpointer(//choreography/variable[1]) />
...
</choreography>

2.4.7 Choreography Life-line

A Choreography life-line expresses the progression of a collaboration. Initially, the collaboration MUST be started, then work MAY be performed within it and finally it MAY complete. These different phases are designated by explicitly marked actions within the Choreography.

AThe root Choreography is initiated whenthe first Interaction,only top-level Choreography that MAY be initiated. The root Choreography is enabled when it is initiated. All non-root, top-level Choreographies MAY be enabled when performed.

A root Choreography is initiated when the first Interaction, marked as the Choreography initiator, is performed. Two or more interactionsInteractions MAY be marked as initiators, indicating alternative initiation actions. In this case, the first action will initiate the Choreography and the other actions will enlist with the already initiated Choreography. An Interaction designated as a Choreography initiator MUST be the first action performed in a Choreography. If a Choreography has two or more Work Units with interactionsInteractions marked as initiators, then these are mutually exclusive and the Choreography will be initiated when the first Interaction occurs and the remaining Work Units will be disabled. All the interactionsInteractions not marked as initiators indicate that they will enlist with an already initiated Choreography.

A Choreography completes successfully when there are no more matched Work Unit(s) performing work within it and there are no enabled Work Unit(s) within it. Alternatively, a Choreography completes successfully if its complete condition, defined by the optional complete attribute within the choreography element, evaluates to "true" andthere MUST NOT be any enabledmatched Work Unit(s) performing work within it but there MAY be one or more Work Units still unmatched.enabled but not matched yet.

2.4.8 Choreography Recovery

One or more Exception WorkUnit(s) MAY be defined as part of an enclosinga Choreography to recover from exceptional conditions that maycan occur in that Choreography.

A Finalizer WorkUnit MAY be defined as part of an enclosinga Choreography to provide the finalization actions that semantically rollback the"undo" that completed enclosingChoreography.

2.4.8.1 Exception Block

A Choreography can sometimes fail as a result of an exceptional circumstance or error.

Different types of exceptions are possible including this non-exhaustive list:

  • Interaction Failures, for example the sending of a message did not succeed

  • Protocol Based Exchange failures, for example no acknowledgement was received as part of a reliable messaging protocol [22]

  • Security failures, for example a Message was rejected by a recipient because the digital signature was not valid

  • Timeout errors, for example an Interaction did not complete within athe required timescaletime

  • Validation Errors, for example an XML order document was not well formed or did not conform to its schema definition

  • Application "failures", for example the goods ordered were out of stock

To handle these and other "errors" separate Exception Work Units areMAY be defined in the Exception Block of a ChoreographyChoreography, for each "exception" condition (as identified by its Guards)that needs to be handled.

OnlyAt least one Exception Work Unit per exception SHOULD be performed. When a Choreography encounters an exceptional condition it MAY need to act on it. One or more Exception WorkUnit(s) MAYMUST be defined as part of the Exception block of an enclosinga Choreography for the purpose of handling the exceptional conditions occurring on that Choreography. To handle thesethese, an Exception Work Unit expressesMAY express interest on fault variable information that MAY become available. A fault variableinformation using its guard condition. If no guard condition is specified, then the default Exception Work Unit expresses interest on any type of fault. Within the Exception Block of a result of: A fault occurring while performing an Interaction between participants A timeout occuring while an Interaction between participants was not completed withinChoreography there MUST NOT be more than one Exception Work Units without guard condition defined. An Exception Work Unit MUST set its attribute block always to "false" and MUST NOT define a specified time periodrepetition condition.

Exception Work Units are enabled when the enclosingChoregraphy they belong to is enabled. An Exception Work Unit MAY be enabled only once for an enclosing Choreography.once. Exception Work Units enabled in an enclosinga Choreography MAY behave as the default mechanism to recover from faults for all its enclosed Choreographies.

Within the Exception Work Units enabled in an enclosedBlock of a Choreography only one Exception Work Unit MAY behavebe matched.

The rules for matching a fault are as a mechanism to recover from faults for any of its enclosing Choreographies. Iffollows:

  • If a fault occurs within the top-level Choreography, then the faulted Choreography completes unsuccessfully and its Finalizer WorkUnitis not enabled. The actions, including enclosed Choreographies, enabled withinmatched by the faulted Choreography are completed abnormally beforeguard condition of an Exception Work Unit can be matched. Within a Choreography only one Exception Work Unit MAY be matched. When an ExceptionUnit, then the actions of the matched Work Unit matches, it enables its appropriate activitiesare enabled for recovering from the fault. Matching a fault with anWhen two or more Exception Work UnitUnits are defined then the order of evaluating their guard conditions is done as follows:based on the order that the Work Units have being defined within the Exception Block.

  • If a faultnone of the guard condition(s) match, then if there is matched by ana default Exception Work Unit without a guard condition defined then theits actions of the matched Work Unitare enabled If afor recovering from the fault

  • Otherwise, the fault is not matched by an Exception Work Unit defined within the Choreography in which the fault occurs, thenand in this case the fault will be recursively propagated to the enclosingException Work Unit of the immediate enclosing Choreography until a match is successful

If a fault occurs within a Choreography, then the faulted Choreography completes unsuccessfully and this causes its Finalizer WorkUnit to disabled. The actions, including enclosed Choreographies, enabled within the faulted Choreography are completed abnormally before an Exception Work Unit can be matched.

The actions within the Exception Work Unit MAY use variableVariable information visible in the Visibility Horizon of its enclosingthe Choreography it belongs to as they stand at the current time.

The actions of an Exception Work Unit MAY also cause fault. The semantics for matching the fault and acting on it are the same as described in this section.

2.4.8.2 Finalizer Block

When a Choreography encounters an exceptional condition it MAY need to revert the actions it had already completed, by providing finalization actions that semantically rollback the effects of the completed actions. To handle these a separate Finalizer Work Unit is defined in the Finalizer Block of a Choreography.

A Choreography MAY define one Finalizer Work Unit.

A Finalizer WorkUnit is enabled only after its enclosingthe Choreography it belongs to completes successfully. The Finalizer Work Unit may be enabled only once for an enclosing Choreography. The actions withinUnit may be enabled only once.

The actions within the Finalizer Work Unit MAY use Variable information visible in the Visibility Horizon of the Choreography it belongs to as they were at the time the Choreography completed or as they stand at the current time.

The actions of the Finalizer Work Unit MAY fault. The semantics for matching the fault and acting on it are the same as described in the previous section.

2.5 Activities

Activities are the lowest level components of the Choreography, used to describe the actual work performed when the specified ordering constraints are satisfied.

An Activity-Notation is then either:

  • An Ordering Structure which combines Activities with other Ordering Structures in a nested way to specify the ordering rules of activities within the Choreography

  • A WorkUnit-Notation

  • A Basic Activity that performs the actual work. A Basic Activity is then either:

    • An Interaction, which results in an exchange of messages between parties and possible synchronization of their observable information changes and the actual values of the exchanged information

    • A Perform, which means that a complete, separately defined Choreography is performed

    • An Assign, which assigns, within one Role, the value of one Variable to the value of another Variable

    • A Silent Action, which provides an explicit designator used for specifying the point where party specific operation(s) with non-observable operational details MUST be performed

    • A No Action, which provides an explicit designator used for specifying the point where a party does not perform any action

2.5.1 Ordering Structures

An Ordering Structure is one of the following:

  • Sequence

  • Parallel

  • Choice

2.5.1.1 Sequence

The sequence ordering structure contains one or more Activity-Notations. When the sequence activity is enabled, the sequence element restricts the series of enclosed Activity-Notations to be enabled sequentially, in the same order that they are defined.

The syntax of this construct is:;

<sequence>
    Activity-Notation+
</sequence>
2.5.1.2 Parallel

The parallel ordering structure contains one or more Activity-Notations that are enabled concurrently when the parallel activity is enabled.

The syntax of this construct is:;

<parallel>
    Activity-Notation+
</parallel>
2.5.1.3 Choice

The choice ordering structure enables a Work Unit to define that only one of two or more Activity-Notations SHOULD be performed.

When two or more activities are specified in a choice element, only one activity is selected and the other activities are disabled. If the choice has Work Units with guard conditions, the Finalizerfirst Work Unit MAY use variable information visible inthat matches the Visibility Horizon of its enclosing Choreography as they were atguard condition is selected and the timeother Work Units are disabled. If the enclosing Choreography completed or as they stand atchoice has other activities, it is assumed that the current time.selection criteria for the activities are non-observable.

The actionssyntax of this construct is:;

<choice>
    Activity-Notation+
</choice>

In the Finalizer Work Unit MAY fault.example below, choice element has two Interactions, "processGoodCredit" and "processBadCredit". The semantics for matchingInteractions have the faultsame directionality, participate within the same Relationship and acting on it arehave the same as describedfromRoles and toRoles names. If one Interaction happens, then the other one is disabled.;

<choice>
  <interaction  channelVariable="doGoodCredit-channel" operation="doCredit">
      ...
  </interaction>
  <interaction channelVariable="badCredit-channel" operation="doBadCredit">
      ...
  </interaction>
<choice>

2.5.2 Interacting

An Interaction is the basic building block of a Choreography, which results in the previous section. 2.5 Activities Activities areexchange of information between parties and possibly the lowest level componentssynchronization of their observable information changes and the Choreography, used to performvalues of the actual work.exchanged information.

An Activity-Notation is then either: A Ordering StructureInteraction forms the base atom of the recursive Choreography composition, where multiple Interactions are combined to form a Choreography, which combines Activities with other Ordering Structurescan then be used in different business contexts.

An Interaction is initiated when a nested wayparty playing the requesting Role sends a request message, through a common Channel, to a party playing the accepting Role that receives the message. The Interaction is continued when the accepting party, sends zero or one response message back to specifythe ordering rules of activities withinrequesting party that receives the Choreography A WorkUnit-Notationresponse message. This means an Interaction can be one of two types:

  • A Basic ActivityOne-Way Interaction that performsinvolves the actual work. These are: Interaction , which results in exchangeexchanging of a single message

  • A Request-Response Interaction when two messages between participantsare exchanged

An Interaction also contains "references" to:

  • The Channel Capturing Variable that specifies the interface and possible synchronization of their statesother data that describe where and how the actual valuesmessage is to be sent

  • The Operation that specifies what the recipient of the exchanged information A Perform, which meansmessage should do with the message when it is received

  • The From Role and To Role that are involved

  • The Information Type or Channel Type that a complete, separately defined Choreographyis performed An Assign , which assigns, within one Role,being exchanged

  • The Information Exchange Capturing Variables at the value of one Variable toFrom Role and To Role that are the valuesource and destination for the Message Content

  • A list of a Variable No Action , which meanspotential observable information changes that the Choreography should take no particular actionMAY occur and MAY need to be aligned at that point 2.5.1 Ordering Structures An Ordering Structure is onethe From Role and the To Role, as a result of carrying out the following: Sequence Parallel Choice 2.5.1.1 Sequence The sequence ordering structure contains one or more Activity-Notations. WhenInteraction

2.5.2.1 Interaction Based Information Alignment

In some Choreographies there may be a requirement that, when the sequence activityInteraction is enabled,performed, the sequence element restrictsRoles in the series of enclosed Activity-NotationsChoreography have agreement on the outcome.

  • More specifically within an Interaction, a Role MAY need to be enabled sequentially, inhave a common understanding of the same order that they are defined. The syntaxobservable information creations or changes of this construct is:; <sequence> Activity-Notation+ </sequence> 2.5.1.2 Parallel The parallel ordering structure containsone or more Activity-NotationsState Capturing Variables that are enabled concurrently when the parallel activity is enabled. The syntax of this construct is:; <parallel> Activity-Notation+ </parallel> 2.5.1.3 Choice The choice ordering structure enables a Work Unitcomplementary to define that onlyone of two or more Activity-Notations should be performed. When twoor more activities are specified inState Capturing Variables of its partner Role

  • Additionally, within an Interaction a choice element, only one activity is selected andRole MAY need to have a common understanding of the other activities are disabled. Ifvalues of the choice has Work Units with Guards,Information Exchange Capturing Variables at the first Work Unit that matchespartner Role

With Interaction Alignment both the Guard condition is selectedBuyer and the other Work Units are disabled. If the choice has other activities, it is assumedSeller have a common understanding that:

  • State Capturing Variables, such as "Order State", that contain observable information at the selection criteria for the activitiesBuyer and Seller, have values that are non-observable. The syntax of this construct is:; <choice> Activity-Notation+ </choice> Incomplementary to each other, e.g. Sent at the example below, choice element has two Interactions, processGoodCreditBuyer and processBadCredit. The InteractionsReceived at the Seller, and

  • Information Exchange Capturing Variables have the same directionality, participate withintypes with the same Relationshipcontent, e.g. The Order Variables at the Buyer and Seller have the same fromRolesInformation Types and toRoles names. If one Interaction happens, thenhold the other one is disabled.; <choice> <interaction channelVariable="doGoodCredit-channel" operation="doCredit"> ... </interaction> <interaction channelVariable="badCredit-channel" operation="doBadCredit"> ... </interaction> <choice> 2.5.2 Interaction Ansame order information

In WS-CDL an alignment Interaction is the basic building block of a Choreography, which resultsMUST be explicitly used, in the exchange of messages between participants and possiblycases where two interacting parties require the synchronizationalignment of their statesobservable information changes and the values of thetheir exchanged information. An Interaction forms the base atom ofAfter the recursive Choreography composition, where multiple Interactions are combined to form a Choreography, which can then be used in different business contexts. Analignment Interaction is initiated when a participant playingcompletes, both parties progress at the requesting Role sends a service request, through a common Channel, tosame time, in a participant playinglock-step fashion and the accepting Role. The InteractionVariable information in both parties is continued whenaligned. Their Variable alignment comes from the accepting participant, sends zero or one response back tofact that the requesting participant. This means an Interaction can be one of two types: A One-Way Interactionparty has to know that involvesthe sending of single message A Request-Response Interaction when two messages are exchanged An Interaction also contains "references" to: The From Role and To Role that are involved The Message Content Type that is being exchanged The Information Exchange Variables ataccepting party has received the From Rolemessage and To Role that arethe source and destination forother way around, the Message Content The Channel Variableaccepting party has to know that specifiesthe interface and other data that describerequesting party has sent the message before both of them progress. There is no intermediate state, where one party sends a message and howthen it proceeds independently or the other party receives a message is to be sentand then it proceeds independently.

2.5.2.2 Protocol Based Information Exchanges

The Operation that specifies what the recipientone-way, request or response messages in an Interaction may also be implemented using a Protocol Based Exchange where a series of messages are exchanged according to some well-known protocol, such as the message should do withreliable messaging protocols defined in specifications such as WS-Reliability [22].

In both cases, the same or similar message when it is received A list of potential State Changes that can occur andcontent may be aligned atexchanged as in a simple Interaction, for example the From Roleexchanging of an Order between a Buyer and a Seller. Therefore some of the To Rolesame information changes may result.

However when protocols such as the reliable messaging protocols are used, additional information changes will occur. For example, if a resultReliable Messaging protocol were being used then the Buyer, once confirmation of carrying outdelivery of the message was received, would also know that the Seller, s "Order State" Variable was in the state "Received" even though there was no separate Interaction 2.5.2.1that described this.

2.5.2.3 Interaction State Changes States contain information aboutLife-line

The Channel through which an Interaction occurs is used to determine whether to enlist the State ofInteraction with an already initiated Choreography or to initiate a Role asnew Choreography.

Within a result of information exchanged in theChoreography, two or more related Interactions MAY be grouped to form of an Interaction. For example aftera logical conversation. The Channel through which an Interaction where an orderoccurs is sent by a Buyerused to a Seller,determine whether to enlist the Buyer could createInteraction with an already initiated conversation or to initiate a new conversation.

An Interaction completes normally when the State Variable "Order State"request and assignthe value "Sent" whenresponse (if there is one) complete successfully. In this case the message was sent,business documents and when the Seller receivedChannels exchanged during the order,request and the Seller could also create its own version ofresponse (if there is one) result in the "Order State" Stateexchanged Variable and assign itinformation being aligned between the value "Received". As a result of a State Change, several different state outcomes are possible, which can only be determined at run time. Thetwo parties.

An Interaction MAY result in each of these allowed State Changes , for example whencompletes abnormally if the following faults occur:

  • The time-to-complete timeout identifies the timeframe within which an order is sent from a Buyer toInteraction MUST complete. If this timeout occurs, after the Interaction was initiated but before it completed, then a Sellerfault is generated

  • A fault signals an exception condition during the outcomes could be onemanagement of the following State Changes : Buyer.OrderState = Sent, Seller.OrderState = Received Buyer.OrderState = SendFailure, Seller.OrderState not set Buyer.OrderState = AckReceived, Seller.OrderState = OrderAckSent 2.5.2.2 Interaction Based Information Alignment In some Choreographies there may bea requirement that, atrequest or within a party when processing the endrequest

2.5.2.4 Interaction Syntax

The syntax of an Interaction,the Roles ininteraction construct is:;

<interaction  name="ncname"
              channelVariable="qname"
              operation="ncname"
              time-to-complete="xsd:duration"?
              align="true"|"false"?
              initiate="true"|"false"? >
   <participate  relationship="qname"
                 fromRole="qname" toRole="qname" />
   <exchange  name="ncname"
              informationType="qname"?|channelType="qname"?
              action="request"|"respond" >
     <send    variable="XPath-expression"? recordReference="list of ncname"? />
     <receive variable="XPath-expression"? recordReference="list of ncname"? />
   </exchange>*
   <record  name="ncname"
            when="before"|"after" >
     <source  variable="XPath-expression" />
     <target  variable="XPath-expression" />
   </record>*
</interaction>

The channelVariable attribute specifies the Choreography have agreementChannel Variable containing information of the outcome. More specifically within an Interaction, a Role may need to havea common understanding ofparty, being the state creations/changes of one or more State Variables that are complementary to one or more State Variablestarget of its partner Role Additionally within anthe Interaction, a Role may needwhich is used for determining where and how to have a common understanding of the values ofsend and receive information to and into the Information Exchange Variablesparty. The Channel Variable used in an Interaction MUST be available at the partner Role Withtwo Roles before the Interaction Alignment bothoccurs.

At runtime, information about a Channel Variable is expanded further. This requires that the Buyer andmessages in the Seller have a common understanding that: State variablesChoreography also contain correlation information, for example by including:

  • A protocol header, such as "Order State" variables at the Buyer and Seller, that have valuesa SOAP header, that are complementary to each other, e.g. Sent atspecifies the Buyer and Received atcorrelation data to be used with the Seller, and Information Exchange Variables that haveChannel, or

  • Using the same types withactual value of data within a message, for example the same content, e.g. TheOrder variables atNumber of the Buyer and Seller haveOrder that is common to all the same Information Types and holdmessages sent over the same order informationChannel

In WS-CDL an alignment Interaction MUSTpractice, when a Choreography is performed, several different ways of doing correlation may be explicitly used, in the cases where two interacting participants requireemployed which vary depending on the alignment of their StatesChannel Type.

The operation attribute specifies a one-way or their exchanged information between them. Aftera request-response operation. The specified operation belongs to the alignment Interaction completes, both participants progress atinterface, as identified by the same time, in a lock-step fashionrole and behavior elements of the variable informationChannel Type of the Channel Variable used in both participants is aligned. Their variable alignment comes fromthe fact thatInteraction activity.

The optional time-to-complete attribute identifies the requesting participant hastimeframe within which an Interaction MUST complete.

The optional align attribute when set to know"true" means that the accepting participant has receivedInteraction results in the messagecommon understanding of both the information exchanged and the other way around,resulting observable information creations or changes at the accepting participant has to know thatends of the requesting participant has sentInteraction as specified in the message before both of them progress. There is no intermediate variable, where one participant sends a messagefromRole and then it proceeds independently orthe other participant receives a message and then it proceeds independently. 2.5.2.3 Protocol Based Information ExchangestoRole. The one-Way, request or response messages in andefault for this attribute is "false".

An Interaction may alsoactivity can be implemented using a Protocol Based Exchange wheremarked as a series of messages are exchanged accordingChoreography initiator when the optional initiate attribute is set to some well-known protocol, such as"true". The default for this attribute is "false".

Within the reliable messaging protocols defined in specifications such as WS-Reliability [22]. In both cases,participate element, the same or similar Message Content may be exchanged asrelationship attribute specifies the Relationship Type this Interaction participates in a simple Interaction, for exampleand the sending of an Order between a BuyerfromRole and toRole attributes specify the requesting and a Seller. Therefore some ofthe accepting Role Types respectively. The Role Type identified by the toRole attribute MUST be the same State Changes may result. However when protocols suchas the reliable messaging protocols are used, additional State Changes will occur. For example, if a reliable messaging protocol were being used thenRole Type identified by the Buyer, once confirmation of deliveryrole element of the message was received, would also know thatChannel Type of the Seller,s "Order State" variable wasChannel Variable used in the state "Received" even though there was no separate Interaction that described this. 2.5.2.4 Interaction Life-lineinteraction activity.

The Channel through which an Interaction occurs is used to determine whetheroptional exchange element allows information to enlist the Interaction with an already initiated Choreographybe exchanged during a one-way request or to initiatea new Choreography.request/response Interaction.

Within a Choreography, twothe exchange element, the optional informationType and channelType attributes, identify the Information Type or more related Interactions MAY be grouped to form a logical conversation. Thethe Channel through which an Interaction occursType of the information that is used to determine whether to enlistexchanged between the Interaction withtwo Roles in an already initiated conversationInteraction.

  • If none of these attributes are specified, then it is assumed that either no actual data is exchanged or the type of data being exchanged is of no interest to initiate a new conversation. An Interaction completes normally whenthe request andChoreography definition

Within the exchange element, the attribute action specifies the direction of the information exchanged in the Interaction:

  • When the action attribute is set to "request", then the message exchange happens fromRole to toRole

  • When the response (if thereaction attribute is one) complete successfully. In this caseset to "respond", then the business documents and Channels exchanged duringmessage exchange happens from toRole to fromRole

Within the request andexchange element, the response (if theresend element shows that information is one) result insent from a Role and the exchanged variablereceive element shows that information being aligned between the two participants. An Interaction completes abnormally ifis received at a Role respectively in the following faults occur:Interaction:

  • The time-to-complete timeout identifiesoptional Variables specified using the timeframeWS-CDL function getVariable() within which an Interactionthe send and receive elements MUST complete. If this timeout occurs, afterbe of type as described in the Interaction was initiated but before it completed, then a faultinformationType or channelType attributes

  • When the action element is generated A fault signals an exception condition duringset to "request", then the management of a request orVariable specified within a participant when acceptingthe request In these casessend element using the variable information remain the sameattribute MUST be defined at the both Roles as if this Interaction had never occurred. The syntax offromRole and the interaction construct is:; <interaction name="ncname" channelVariable="qname" operation="ncname" time-to-complete="xsd:duration"? align="true"|"false"? initiateChoreography="true"|"false"? > <participate relationship="qname" fromRole="qname" toRole="qname" /> <exchange messageContentType="qname" action="request"|"respond" > <use variable="XPath-expression"/> <populate variable="XPath-expression"/> </exchange>* <record name="ncname" role="qname" action="request"|"respond" > <source variable="XPath-expression" /> <target variable="XPath-expression" /> </record>* </interaction> The channel attribute specifiesVariable specified within the receive element using the Channelvariable containing information of a participant, beingattribute MUST be defined at the target of an Interaction, whichtoRole

  • When the action element is used for determining where and howset to send/receive information to/into"respond", then the Variable specified within the send element using the participant. The Channelvariable is used in an Interactionattribute MUST be availabledefined at the two Roles beforetoRole and the Interaction occurs. At runtime, information about a Channel variable is expanded further. This requires thatVariable specified within the messages inreceive element using the Choreography also contain correlation information, for example by including: A SOAP header that specifiesvariable attribute MUST be defined at fromRole

  • The Variable specified within the correlation data toreceive element MUST not be useddefined with the Channel,attribute silentAction set to "true"

  • Within the send or Usingthe actual valuereceive element(s) of data within a message, for examplean exchange element, the Order NumberrecordReference attribute contains a list of references to record element(s) in the Order thatsame Interaction

  • If the align attribute is commonset to all"false" for the messagesInteraction, then it means that the:

    • Request exchange completes successfully for the requesting Role once it has successfully sent overthe Channel In practice, when a Choreography is performed, several different waysinformation of doing correlation may be employed which vary depending onthe Channel Type. The attribute operation specifies a one-way or a request-response WSDL 2.0 operation that isVariable specified within the targetsend element and the Request exchange completes successfully for the service request/acceptance. The specified operation belongs toaccepting Role once it has successfully received the WSDL interface, identified byinformation of the roleVariable specified within the receive element

    • ofResponse exchange completes successfully for the Channel used inaccepting Role once it has successfully sent the Interaction activity. The optional time-to-complete attribute identifiesinformation of the timeframeVariable specified within which an Interaction MUST complete. The optional align when set to "true" means thatthe Interaction results insend element and the Response exchange completes successfully for the requesting Role once it has successfully received the common understandinginformation of the messages exchanged and the resulting complementary state changes/state creation at both endpointsVariable specified in fromRole and toRole. An Interaction activity can be marked as a Choreography initiator whenwithin the optional initiateChoreographyreceive element

  • If the align attribute is set to "true". Within"true" for the participate element,Interaction, then it means that the

    • relationship attribute specifiesInteraction completes successfully if the Relationship this Choreography participates inRequest and the fromRoleResponse exchanges complete successfully and toRole attributes specifyall referenced records complete successfully

    • Request exchange completes successfully once both the requesting and the accepting Roles respectively. The exchange element allows one or two messages to be exchanged during a one-way request or a request/response Interaction. WhenRole has successfully sent the exchange is missing, it means that there was no message exchange that populated new variableinformation at a Role. The messageContentType attributeof the exchange element identifiesVariable specified within the informationType orsend element and the channelType ofaccepting Role has successfully received the information that is exchanged between the Roles and the Information Exchange Variables used as follows: One Way From Message isof the variable that isVariable specified within the source for a One-Way Message atreceive element

    • Response exchange completes successfully once both the Fromaccepting Role One Way To Message ishas successfully sent the variable that isinformation of the destination for a One-Way Message atVariable specified within the To Role Request From Message issend element and the variable that isrequesting Role has successfully received the source for Request Message atinformation of the From Role Request To Message isVariable specified within the variable thatreceive element

The optional element record is the destination for Request Messageused to create or change one or more Variables at the To Role Response To Message issend and receive ends of the variable that isInteraction. Within the record element, the source for Response Message atand target elements specify using the To Role Response From Message isWS-CDL function getVariable() the variable thatVariables whose information is recorded:

  • When the destination for Response Message at the From Role The attributeaction specifies the direction of Message Exchange thatelement is performed in the Interaction. A Request message exchange happens fromRole to toRole and a respond message exchange happens from toRoleset to fromRole. The attributes use and populate describe"request", then the message atrecording(s) of the source andVariables specified within the destination respectively: Both usesource and populate MUST be of type as described inthe messageContentType element The attribute use MUST be a variabletarget elements occur at the fromRole andfor the attribute populate MUST be a variablesend and at the toRole, whentoRole for the receive

  • When the action element is set to "request" The attribute use MUST be a variable"response", then the recording(s) of the Variables specified within the source and the target elements occur at the toRole for the send and at the fromRole for the receive

Within the record element, the when attribute populate MUST bespecifies if a variablerecording happens "before" or "after" a send or a receive of a message at the fromRole, when the action element is set to "respond"a Role in a Request or Response exchange.

The element record is used to create/change onefollowing rules apply for record:

  • One or more statesrecord elements MAY be specified and performed at one or both the Roles atwithin an Interaction

    • The source and the endstarget Variable MUST be of compatible type

    • The source and the Interaction. For example, the PurchaseOrder message contains the Channel oftarget Variable MUST be defined at the same Role

    • "customer" when sent toThe target Variable MUST not be defined with the Role "Retailer". This canattribute silentAction set to "true"

    • A record element MUST NOT be copied intospecified in the appropriate state variableabsence of the "Retailer"an exchange element within an Interaction

  • If the record element. Whenalign attribute is set to "true""false" for the Interaction, then it alsomeans that the Customer knows thatRole specified within the Retailer now hasrecord element makes available the addresscreation or change of the Customer. Another usecase ofVariable specified within the record element is that it can be used to recordimmediately after the states atsuccessful completion of each Role. The Customer setsrecord

  • If the state "OrderSent"align attribute is set to "true" and the Retailer setsfor the state "OrderReceived" to "true" atInteraction, then it means that

    • Both Roles know the endavailability of the request partcreation or change of the Interaction. SimilarlyVariables specified within the Customer sets "OrderAcknowledged" "true"record element only at the endsuccessful completion of the Interaction. The source and the targetInteraction

    • If there are two or more record elements specified within an Interaction, then all record element representoperations MUST complete successfully for the variable names atInteract to complete successfully. Otherwise, none of the Role that isVariables specified in the roletarget attribute of the record element.will be affected

The example below shows a complete Choreography that involves one interaction.Interaction. The interactionInteraction happens from Role ConsumerType "Consumer" to Role RetailerType "Retailer" on the Channel "retailer-channel" as a request/response message exchange.

  • The message purchaseOrder is sent from Consumer to Retailer as a request message

  • The message purchaseOrderAck is sent from Retailer to Consumer as a response message

  • The variableVariable consumer-channel is populated at Retailer at the end of the requestusing the record element

  • The Interaction happens on the retailer-channel which has a tokenToken Type purchaseOrderID used as an identity of the channel. This identity element is used to identify the business process of the retailer

  • The request message purchaseOrder contains the identity of the retailer business process as specified in the tokenLocator for purchaseOrder message

  • The response message purchaseOrderAck contains the identity of the consumer business process as specified in the tokenLocator for purchaseOrderAck message The consumer-channel is sent as a parttokenLocator for purchaseOrderAck message

  • The consumer-channel is sent as a part of purchaseOrder Interaction from the consumer to the retailer on retailer-channel during the request. Here the record element populates the consumer-channel at the retailer role. If the align attribute was set to "true" for this Interaction, then it also means that the consumer knows that the retailer now has the contact information of purchaseOrder message fromthe consumer. In another example, the consumer could set its Variable "OrderSent" to "true" and the retailer on retailer-channel duringwould set its Variable "OrderReceived" to "true" using the request. Therecord element populates the consumer-channel at the retailer role;element.;

<package  name="ConsumerRetailerChoreo"name="ConsumerRetailerChoreography" version="1.0"
  <informationType name="purchaseOrderType" type="pons:PurchaseOrderMsg"/>
  <informationType name="purchaseOrderAckType" type="pons:PurchaseOrderAckMsg"/>
  <token name="purchaseOrderID" informationType="tns:intType"/>
  <token name="retailerRef" informationType="tns:uriType"/>
  <tokenLocator tokenName="tns:purchaseOrderID"
                informationType="tns:purchaseOrderType" query="/PO/orderId"/>
  <tokenLocator tokenName="tns:purchaseOrderID"
                informationType="tns:purchaseOrderAckType" query="/PO/orderId"/>
   <role<roleType name="Consumer">
    <behavior name="consumerForRetailer" interface="cns:ConsumerRetailerPT"/>
    <behavior name="consumerForWarehouse" interface="cns:ConsumerWarehousePT"/>
   </role> <role</roleType>
  < roleType name="Retailer">
    <behavior name="retailerForConsumer" interface="rns:RetailerConsumerPT"/>
   </role> <relationship</ roleType >
  <relationshipType name="ConsumerRetailerRelationship">
    <role type="tns:Consumer" behavior="consumerForRetailer"/>
    <role type="tns:Retailer" behavior="retailerForConsumer"/>
   </relationship></ relationshipType >
  <channelType name="ConsumerChannel">
    <role type="tns:Consumer"/>
    <reference>
      <token type="tns:consumerRef"/>
    </reference>
    <identity>
      <token type="tns:purchaseOrderID"/>
    </identity>
  </channelType>
  <channelType name="RetailerChannel">
    <passing channel="ConsumerChannel" action="request" />
    <role type="tns:Retailer" behavior="retailerForConsumer"/>
    <reference>
      <token type="tns:retailerRef"/>
    </reference>
    <identity>
      <token type="tns:purchaseOrderID"/>
    </identity>
  </channelType>
  <choreography  name="ConsumerRetailerChoreo"name="ConsumerRetailerChoreography" root="true">
    <relationship type="tns:ConsumerRetailerRelationship"/>
    <variableDefinitions>
    <variable name="purchaseOrder" informationType="tns:purchaseOrderType" 
               silent-action="true"silentAction="true" />
    <variable name="purchaseOrderAck" informationType="tns:purchaseOrderAckType" />
    <variable name="retailer-channel" channelType="tns:RetailerChannel"/>
    <variable name="consumer-channel" channelType="tns:ConsumerChannel"/>
    <interaction channelVariable="tns:retailer-channel " 
                 operation="handlePurchaseOrder" align="true" 
                  initiateChoreography="true">initiate="true">
      <participate relationship="tns:ConsumerRetailerRelationship" 
                   fromRole="tns:Consumer" toRole="tns:Retailer"/>
      <exchange  messageContentType="tns:purchaseOrderType"informationType="tns:purchaseOrderType" action="request">
         <use variable="cdl:getVariable(tns:purchaseOrder, tns:Consumer)"/> <populate variable="cdl:getVariable(tns:purchaseOrder, tns:Retailer)"/><send variable="cdl:getVariable("tns:purchaseOrder")" />
        <receive variable="cdl:getVariable("tns:purchaseOrder")"
                 recordReference="populateChannel" />
      </exchange>
      <exchange  messageContentType="purchaseOrderAckType"informationType="purchaseOrderAckType" action="respond">
         <use variable="cdl:getVariable(tns:purchaseOrderAck, tns:Retailer)"/> <populate variable="cdl:getVariable(tns:purchaseOrderAck, tns:Consumer)"/><send variable="cdl:getVariable("tns:purchaseOrderAck")" />
        <receive variable="cdl:getVariable("tns:purchaseOrderAck")" />
      </exchange>
      <record  role="tns:Retailer" action="request">name="populateChannel" when="after">
        <source  variable="cdl:getVariable(tns:purchaseOrder, PO/CustomerRef, tns:Retailer)"/>variable="cdl:getVariable("tns:purchaseOrder,  "PO/CustomerRef")"/>
        <target  variable="cdl:getVariable(tns:consumer-channel, tns:Retailer)"/>variable="cdl:getVariable("tns:consumer-channel")"/>
      </record>
    </interaction>
  </choreography>
</package>

2.5.3 Performed ChoreographyComposing Choreographies

The Performed Choreographyperform activity enables arealizes the "composition of Choreographies", whereas combining existing Choreographies results in the creation of new Choreographies. For example if two separate Choreographies were defined as follows:

  • A Request for Quote (RFQ) Choreography to definethat involves a separately defined Choreography isBuyer Role sending a request for a quotation for goods and services to bea Supplier Role to which the Supplier Role responds with either a "Quotation" or a "Decline to Quote" message, and

  • An Order Placement Choreography where the Buyer Role places and order for goods or services and the Supplier Role either accepts the order or rejects it

You could then create a new "Quote and Order" Choreography by reusing the two where the RFQ Choreography was performed as an enclosedfirst, and then, depending on the outcome of the RFQ Choreography, the order was placed using the Order Placement Choreography. TheIn this case the new Choreography thatis performed"composed" out of the two previously defined Choreographies. Using this approach, Choreographies can be recursively combined to support Choreographies of any required complexity allowing more flexibility as Choreographies defined either within the sameelsewhere can be reused.

The perform activity enables a Choreography Definition or separately.to specify that another Choreography is performed at this point in its definition, as an enclosed Choreography.

The syntax of the perform construct is:;

<perform  choreographyName="qname">
    <alias<bind  name="ncname">
     <this variable="XPath-expression"  role="qname" />role="qname"/>
     <free variable="XPath-expression"  role="qname" /> </alias>+role="qname"/>
   </bind>*
</perform>

Within the perform element the choreographyName attribute references a top-level, non-root Choreography defined in the sameLocally or in a differentGlobally defined Choreography package that isto be performed. The performed Choreography can be defined locally within the same Choreography or globally, in the same or different Choreography package. The performed Choreographyeven when defined in a different packageChoreography Package is conceptually treated as an enclosed Choreography. An enclosing Choreography MAY perform only an immediately contained Choreography that is Locally defined.

The aliasoptional bind element within the perform helpselement enables information in aliasing the variables fromthe performing Choreography to be shared with the performed Choreography.Choreography and vice versa. The role attribute aliases the Roles from the performing Choreography to the performed Choreography.

The variable attribute within this element specifies that a Variable in the performing Choreography is bound with the Variable identified by variable attribute within the free element in the performed Choreography.

The following rules apply on the performed Choreography:when a Choreography is performed:

  • The Choreography to be performed MUST NOT be a root Choreography

  • The Choreography to be performed MUST be declareddefined either using a Choreography-Notation immediately contained in the same Choreography or it MUST be a top-level Choreography with root attribute set to "false" in the same or different Choreography package If the performed Choreography is defined within the performing Choreography, the variablesPackage. Performed Choreographies that are declared in the visibility horizon are visible to the performeda different Choreography also Performed Choreography, if not definedPackage MUST be included first

  • The Role Types within the enclosing Choreography, cana single bind element MUST be usedcarried out by other Choreographies andthe same party, hence they MUST belong to the contract is reusablesame Participant Type

  • The free Variables within the bind element MUST have the attribute free set to "true" in their definition

  • There shouldMUST not be a cyclic dependency on the Choreographies performed. For example Choreography C1 is performing Choreography C2 which is performing Choreography C1 again

The example below shows a Choreography performing another Choreography: The rootcomposition, where a Choreography "PurchaseChoreo" performs"PurchaseChoreography" is performing the Globally defined Choreography "RetailerWarehouseChoreo""RetailerWarehouseChoreography" and aliases the variableVariable "purchaseOrderAtRetailer" defined in the enclosing Choreographyto the Variable "purchaseOrder" defined at the performed enclosedChoreography "RetailerWarehouseChoreo"."RetailerWarehouseChoreography". Once aliased, the visibility horizon of the variable purchaseOrderAtRetailer isVariable "purchaseOrderAtRetailer" extends to the same as it wouldenclosed Choreography and thus these Variables can be used interchangeably for the enclosed Choreography.;sharing their information.;

<choreography  name="PurchaseChoreo" root="true">name="PurchaseChoreography">
   ...
   <variableDefinitions>
      <variable name="purchaseOrderAtRetailer"
             informationType="purchaseOrder" role="tns:Retailer"/>
   </variableDefinitions>
   ...
   <perform choreographyName="RetailerWarehouseChoreography">
      <bind name="aliasRetailer">
        <this variable="cdl:getVariable("tns:purchaseOrderAtRetailer")"
             role="tns:Retailer"/>
        <free variable="cdl:getVariable("tns:purchaseOrder")"
             role="tns:Retailer"/>
      </bind>
   </perform>
    ...
</choreography>
<choreography name="RetailerWarehouseChoreography">
    <variableDefinitions>
       <variable  name="purchaseOrderAtRetailer"name="purchaseOrder"
          informationType="purchaseOrder"  role="Retailer"/> ... <perform choreographyName="RetailerWarehouseChoreo"> <alias> <this variable "cdl:getVariable(tns:purchaseOrder, tns:Retailer)"/> <free variable="cdl:getVariable(tns:purchaseOrder, rwns:Retailer)"/> </alias>role="tns:Retailer" free="true"/>
    </variableDefinitions>
     ...
</choreography>

2.5.4 Assigning Variables

The Assign makes available,activity is used to create or change and then make available within one Role, the value of one Variable using the value of a Variable or Token.another Variable.

The assignments may include:

  • Assigning onean Information ExchangeCapturing Variable to another or a part of the Information Exchangethat Variable to a State Capturing Variable or another variableInformation Capturing Variable so that a message received can be used to trigger/constrain, using a Work Unit Guard,guard condition, or other Interactions

  • Assigning a Locally DefinedState Capturing Variable to part of the data contained inanother State Capturing Variable or to an Information ExchangeCapturing Variable locally at a Role

The syntax of the assign construct is:;

<assign  role="qname">
   <copy  name="ncname">
      <source   variable ="XPath-expression"variable="XPath-expression" />
      <target  variable="XPath-expression" />
   </copy>+
</assign>

The assign construct makes availablecreates or changes at a Role the variableVariable defined by the target element using the variableVariable defined by the source elementsource element at the same Role.

The following rules apply to assignment:

  • The source and the target Variable MUST be of compatible type

  • The source and the target Variable MUST be defined at the same Role

  • If there are two or more copy elements specified within an assign, then all copy operations MUST complete successfully for the assign to complete successfully. Otherwise, none of the Variables specified in the target attribute will be affected

The following example assigns the customer address part from Variable "PurchaseOrderMsg" to Variable "CustomerAddress".;

<assign role="tns:retailer">
  <copy name="copyChannel">
    <source variable="cdl:getVariable("PurchaseOrderMsg",  "/PO/CustomerAddress")" />
    <target variable="cdl:getVariable("CustomerAddress")" />
  </copy>
</assign>

2.5.5 Marking Silent Actions

Silent actions are explicit designators used for marking the points where party specific operations with non-observable operational details MAY be performed.

For example, the mechanism for checking the inventory of a warehouse should not be observable to other parties but the fact that the inventory level does influence the global observable behavior with a buyer party needs to be specified in the Choreography definition.

The syntax of the silent actionconstruct is:;

<silentAction role="qname? />

The optional attribute role is used to specify the party at which the silent action will be performed. If a silent action is defined without a Role, it is implied that the action is performed at all the same Role. The following rules apply to assignment: The source andRoles that are part of the target variable MUST beRelationships of same type The source andthe target variable MUST be defined atChoreography this activity is enclosed within.

2.5.6 Marking the same RoleAbsence of Actions

No actions are explicit designators used for marking the points where a party does not perform any action.

The following example assignssyntax of the customer address part from PurchaseOrderMsg to CustomerAddress variable.; <assign> <copy name="copyChannel"> <source variable="cdl:getVariable("PurchaseOrderMsg", "/PO/CustomerAddress", tns:retailer)" /> <target variable="cdl:getVariable("CustomerAddress", tns:retailer)"no action construct is:;

<noAction role="qname? />

</copy> </assign> 2.5.5 Actions with non-observable effectsThe Noaction activity modelsoptional attribute role is used to specify the performance of a silentparty at which no action will be performed. If a noAction is defined without a Role, it is implied that has non-observable effects onno action will be performed at any of the collaborating participants. The syntaxRoles that are part of the noaction construct is:; <noaction/>Relationships of the Choreography this activity is enclosed within.

3 Example

To be completed

4 Relationship with the Security framework

Because messages can have consequences in the real world, the collaboration participantsparties will impose security requirements on the message exchanges. Many of these requirements can be satisfied by the use of WS-Security [24].

5 Relationship with the Reliable Messaging framework

The WS-Reliability specification [22] provides a reliable mechanism to exchange business documents among collaborating participants.parties. The WS-Reliability specification prescribes the formats for all messages exchanged without placing any restrictions on the content of the encapsulated business documents. The WS-Reliability specification supports one-way and request/response message exchange patterns, over various transport protocols (examples are HTTP/S, FTP, SMTP, etc.). The WS-Reliability specification supports sequencing of messages and guaranteed, exactly once delivery.

A violation of any of these consistency guarantees results in an error condition, reflected in the Choreography as an Interaction fault.

6 Relationship with the Transaction/Coordination framework

In WS-CDL, two Web Service participantsparties make progress by interacting. In the cases where two interacting participantsparties require the alignment of their StatesVariables capturing observable information changes or their exchanged information between them, an alignment Interaction is modeled in a Choreography. After the alignment Interaction completes, both participantsparties progress at the same time, in a lock-step fashion. The variableVariable information alignment comes from the fact that the requesting participantparty has to know that the accepting participantparty has received the message and the other way around, the accepting participantparty has to know that the requesting participantparty has sent the message before both of them progress. There is no intermediate variable,state, where one participantparty sends a message and then it proceeds independently or the other participantparty receives a message and then it proceeds independently.

Implementing this type of handshaking in a distributed system requires support from a Transaction/Coordination protocol, where agreement of the outcome among participantsparties can be reached even in the case of failures and loss of messages.

7 Acknowledgments

To be completed

8 References

[1] S. Bradner, "Key words for use in RFCs to Indicate Requirement Levels", RFC 2119, Harvard University, March 1997

[2] T. Berners-Lee, R. Fielding, L. Masinter, "Uniform Resource Identifiers (URI): Generic Syntax", RFC 2396, MIT/LCS, U.C. Irvine, Xerox Corporation, August 1998.

[3] http://www.w3.org/TR/html401/interact/forms.html#submit-format

[4] http://www.w3.org/TR/html401/appendix/notes.html#ampersands-in-uris

[5] http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4

[6] SOAP Version 1.2 Part 1: Messaging Framework"http://www.w3.org/TR/2003/REC-soap12-part1-20030624/"

[7] Web Services Definition Language (WSDL) 2.0 "http://www.w3.org/TR/wsdl20/""http://www.w3.org/TR/2004/WD-wsdl20-20040803/"

[8] Industry Initiative "Universal Description, Discovery and Integration"

[9] W3C Recommendation "The XML Specification"

[10] XML-Namespaces " Namespaces in XML, Tim Bray et al., eds., W3C, January 1999"

http://www.w3.org/TR/REC-xml-names

[11] W3C Working Draft "XML Schema Part 1: Structures". This is work in progress.

[12] W3C Working Draft "XML Schema Part 2: Datatypes". This is work in progress.

[13] W3C Recommendation "XML Path Language (XPath) Version 1.0"

[14] "Uniform Resource Identifiers (URI): Generic Syntax,"Syntax, " RFC 2396, T. Berners-Lee, R. Fielding, L. Masinter, MIT/LCS, U.C. Irvine, Xerox Corporation, August 1998.

[15] WSCI: Web Services Choreography Interface 1.0, A.ArkinA. Arkin et.al

[16] XLANG: Web Services for Business Process DesignDesign, S. Thatte, 2001 Microsoft Corporation

[17] WSFL: Web Service Flow Language 1.01.0, F. Leymann, 2001 IBM Corporation

[18] BPEL:OASIS Working Draft "BPEL: Business Process Execution Language 1.12.0". This is work in progress.

[19] BPML:BPMI.org "BPML: Business Process Modeling Language 1.01.0"

[20] XPDL:Workflow Management Coalition "XPDL: XML Processing Description Language 1.01.0", M. Marin, R. Norin R. Shapiro

[21] WS-CAF:OASIS Working Draft "WS-CAF: Web Services Context, Coordination and Transaction Framework 1.01.0". This is work in progress.

[22] WebOASIS Working Draft "Web Services Reliability 1.01.0". This is work in progress.

[23] The Java Language Specification

[24] WebOASIS "Web Services SecuritySecurity"

[25] J2EE: Java 2 Platform, Enterprise Edition, Sun Microsystems

[26] ECMA. 2001. Standard ECMA-334: C# Language Specification

[27] "XML Inclusions (XInclude) Version 1.0" http://www.w3.org/TR/xinclude/

9 WS-CDL XSD Schemas

<?xml version="1.0" encoding="UTF-8"?>
<schema 
      targetNamespace=http://www.w3.org/2004/04/ws-chor/cdl xmlns=http://www.w3.org/2001/XMLSchema xmlns:cdl=http://www.w3.org/2004/04/ws-chor/cdltargetNamespace="http://www.w3.org/2004/10/ws-chor/cdl/"
     xmlns="http://www.w3.org/2001/XMLSchema"
     xmlns:cdl="http://www.w3.org/2004/10/ws-chor/cdl/"
     elementFormDefault="qualified">
  <complexType name="tExtensibleElements">
    <annotation>
      <documentation>
        This type is extended by other CDL component types to allow 
          elements and attributes from other namespaces to be added. 
        This type also contains the optional description element that 
        is applied to all CDL constructs.
      </documentation>
    </annotation>
    <sequence>
      <element name="description" minOccurs="0">
        <complexType mixed="true">
          <sequence minOccurs="0" maxOccurs="unbounded">
            <any processContents="lax"/>
          </sequence>
        </complexType>
      </element>
      <any namespace="##other" processContents="lax" 
          minOccurs="0" maxOccurs="unbounded"/>
    </sequence>
    <anyAttribute namespace="##other" processContents="lax"/>
  </complexType>
  <element name="package" type="cdl:tPackage"/>
  <complexType name="tPackage">
    <complexContent>
      <extension base="cdl:tExtensibleElements">
        <sequence>
          <element  name="importDefinitions" type="cdl:tImportDefinitions" minOccurs="0" maxOccurs="unbounded"/> <elementname="informationType" type="cdl:tInformationType" 
                  minOccurs="0" maxOccurs="unbounded"/>
          <element name="token" type="cdl:tToken" minOccurs="0"
                  maxOccurs="unbounded"/>
          <element name="tokenLocator" type="cdl:tTokenLocator" 
                  minOccurs="0" maxOccurs="unbounded"/>
          <element  name="role"name="roleType" type="cdl:tRole" minOccurs="0"
                  maxOccurs="unbounded"/>
          <element  name="relationship"name="relationshipType" type="cdl:tRelationship" 
                  minOccurs="0" maxOccurs="unbounded"/>
          <element  name="participant"name="participantType" type="cdl:tParticipant" 
                  minOccurs="0" maxOccurs="unbounded"/>
          <element name="channelType" type="cdl:tChannelType"
                  minOccurs="0" maxOccurs="unbounded"/>
          <element name="choreography" type="cdl:tChoreography" 
                  minOccurs="0" maxOccurs="unbounded"/>
        </sequence>
        <attribute name="name" type="NCName" use="required"/>
        <attribute name="author" type="string" use="optional"/>
        <attribute name="version" type="string" use="required"/>
        <attribute name="targetNamespace" type="anyURI" 
                 use="required"/>
      </extension>
    </complexContent>
  </complexType>
  <complexType  name="tImportDefinitions"> <complexContent> <extension base="cdl:tExtensibleElements"> <sequence> <element name="import" type="cdl:tImport" maxOccurs="unbounded"/> </sequence> </extension> </complexContent> </complexType> <complexType name="tImport"> <complexContent> <extension base="cdl:tExtensibleElements"> <attribute name="namespace" type="anyURI" use="required"/> <attribute name="location" type="anyURI" use="required"/> </extension> </complexContent> </complexType> <complexTypename="tInformationType">
    <complexContent>
      <extension base="cdl:tExtensibleElements">
        <attribute name="name" type="NCName" use="required"/>
        <attribute name="type" type="QName" use="optional"/>
        <attribute name="element" type="QName" use="optional"/>
      </extension>
    </complexContent>
  </complexType>
  <complexType name="tToken">
    <complexContent>
      <extension base="cdl:tExtensibleElements">
        <attribute name="name" type="NCName" use="required"/>
        <attribute name="informationType" type="QName"
                 use="required"/>
      </extension>
    </complexContent>
  </complexType>
  <complexType name="tTokenLocator">
    <complexContent>
      <extension base="cdl:tExtensibleElements">
        <attribute name="tokenName" type="QName" use="required"/>
        <attribute name="informationType" type="QName"
                 use="required"/>
        <attribute name="query" type="cdl:tXPath-expr" 
                 use="optional"/>
      </extension>
    </complexContent>
  </complexType>
  <complexType  name="tRole">name="tRoleType">
    <complexContent>
      <extension base="cdl:tExtensibleElements">
        <sequence>
          <element name="behavior" type="cdl:tBehavior"
                  maxOccurs="unbounded"/>
        </sequence>
        <attribute name="name" type="NCName" use="required"/>
      </extension>
    </complexContent>
  </complexType>
  <complexType name="tBehavior">
    <complexContent>
      <extension base="cdl:tExtensibleElements">
        <attribute name="name" type="NCName" use="required"/>
        <attribute name="interface" type="QName" use="optional"/>
      </extension>
    </complexContent>
  </complexType>
  <complexType  name="tRelationship">name="tRelationshipType">
    <complexContent>
      <extension base="cdl:tExtensibleElements">
        <sequence>
          <element name="role" type="cdl:tRoleRef" minOccurs="2"
                  maxOccurs="2"/>
        </sequence>
        <attribute name="name" type="NCName" use="required"/>
      </extension>
    </complexContent>
  </complexType>
  <complexType name="tRoleRef">
    <complexContent>
      <extension base="cdl:tExtensibleElements">
        <attribute name="type" type="QName" use="required"/>
        <attribute name="behavior"  type="NCName" use="required"/>use="optional">
          <simpleType>
             <list itemType="NCName"/>
          </simpleType>
        </attribute>
      </extension>
    </complexContent>
  </complexType>
  <complexType  name="tParticipant">name="tParticipantType">
    <complexContent>
      <extension base="cdl:tExtensibleElements">
        <sequence>
          <element name="role" type="cdl:tRoleRef2" 
                  maxOccurs="unbounded"/>
        </sequence>
        <attribute name="name" type="NCName" use="required"/>
      </extension>
    </complexContent>
  </complexType>
  <complexType name="tRoleRef2">
    <complexContent>
      <extension base="cdl:tExtensibleElements">
        <attribute name="type" type="QName" use="required"/>
      </extension>
    </complexContent>
  </complexType>
  <complexType name="tChannelType">
    <complexContent>
      <extension base="cdl:tExtensibleElements">
        <sequence>
          <element name="passing" type="cdl:tPassing" minOccurs="0"
                  maxOccurs="unbounded"/>
          <element name="role" type="cdl:tRoleRef3"/>
          <element name="reference" type="cdl:tReference"/>
          <element name="identity" type="cdl:tIdentity" minOccurs="0" 
                   maxOccurs="unbounded"/>maxOccurs="1"/>
        </sequence>
        <attribute name="name" type="NCName" use="required"/>
        <attribute name="usage" type="cdl:tUsage" use="optional" 
                     default="unlimited"/>
        <attribute name="action" type="cdl:tAction" use="optional"
                     default="request-respond"/>
      </extension>
    </complexContent>
  </complexType>
  <complexType name="tRoleRef3">
    <complexContent>
      <extension base="cdl:tExtensibleElements">
        <attribute name="type" type="QName" use="required"/>
        <attribute name="behavior" type="NCName" use="optional"/>
      </extension>
    </complexContent>
  </complexType>
  <complexType name="tPassing">
    <complexContent>
      <extension base="cdl:tExtensibleElements">
        <attribute name="channel" type="QName" use="required"/>
        <attribute name="action" type="cdl:tAction" use="optional" 
                 default="request-respond"/>
        <attribute name="new" type="boolean" use="optional"
                 default="true"/>
      </extension>
    </complexContent>
  </complexType>
  <complexType name="tReference">
    <complexContent>
      <extension base="cdl:tExtensibleElements">
        <sequence>
          <element name="token" type="cdl:tTokenReference"
                       maxOccurs="unbounded"/>minOccurs="1" maxOccurs="1"/>
        </sequence>
      </extension>
    </complexContent>
  </complexType>
  <complexType name="tTokenReference">
    <complexContent>
      <extension base="cdl:tExtensibleElements">
        <attribute name="name" type="QName" use="required"/>
      </extension>
    </complexContent>
  </complexType>
  <complexType name="tIdentity">
    <complexContent>
      <extension base="cdl:tExtensibleElements">
        <sequence>
          <element name="token" type="cdl:tTokenReference" 
                  minOccurs="1" maxOccurs="unbounded"/>
        </sequence>
      </extension>
    </complexContent>
  </complexType>
  <complexType name="tChoreography">
    <complexContent>
      <extension base="cdl:tExtensibleElements">
        <sequence>
          <element name="relationship" type="cdl:tRelationshipRef" 
                  maxOccurs="unbounded"/>
          <element name="variableDefinitions"
                  type="cdl:tVariableDefinitions" minOccurs="0"/>
          <element name="choreography" type="cdl:tChoreography"
                   minOccurs="0" maxOccurs="unbounded"/>
          <group ref="cdl:activity"/>
          <element name="exception" type="cdl:tException"
                  minOccurs="0"/>
          <element name="finalizer" type="cdl:tFinalizer"
                      minOccurs="0"/>
        </sequence>
        <attribute name="name" type="NCName" use="required"/>
        <attribute name="complete" type="cdl:tBoolean-expr" 
                     use="optional"/>
        <attribute name="isolation" type="cdl:tIsolation" 
                     use="optional" default="dirty-write"/>
        <attribute name="root" type="boolean" use="optional" 
                     default="false"/>
      </extension>
    </complexContent>
  </complexType>
  <complexType name="tRelationshipRef">
    <complexContent>
      <extension base="cdl:tExtensibleElements">
        <attribute name="type" type="QName" use="required"/>
      </extension>
    </complexContent>
  </complexType>
  <complexType name="tVariableDefinitions">
    <complexContent>
      <extension base="cdl:tExtensibleElements">
        <sequence>
          <element name="variable" type="cdl:tVariable"
                  maxOccurs="unbounded"/>
        </sequence>
      </extension>
    </complexContent>
  </complexType>
  <complexType name="tVariable">
    <complexContent>
      <extension base="cdl:tExtensibleElements">
        <attribute name="name" type="NCName" use="required"/>
        <attribute name="informationType" type="QName" 
                 use="optional"/>
        <attribute name="channelType" type="QName" use="optional"/>
        <attribute name="mutable" type="boolean" use="optional"
                 default="true"/>
        <attribute name="free" type="boolean" use="optional" 
                 default="false"/>
        <attribute  name="silent-action"name="silentAction" type="boolean" use="optional"
                 default="false"/>
        <attribute name="role" type="QName" use="optional"/>
      </extension>
    </complexContent>
  </complexType>
  <group name="activity">
    <choice>
      <element name="sequence" type="cdl:tSequence"/>
      <element name="parallel" type="cdl:tParallel"/>
      <element name="choice" type="cdl:tChoice"/>
      <element name="workunit" type="cdl:tWorkunit"/>
      <element name="interaction" type="cdl:tInteraction"/>
      <element name="perform" type="cdl:tPerform"/>
      <element name="assign" type="cdl:tAssign"/>
      <element  name="noaction" type="cdl:tNoaction"/>name="silentAction" type="cdl:tSilentAction"/>
      <element name="noAction" type="cdl:tNoAction"/>
    </choice>
  </group>
  <complexType name="tSequence">
    <complexContent>
      <extension base="cdl:tExtensibleElements">
        <sequence>
          <group ref="cdl:activity" maxOccurs="unbounded"/>
        </sequence>
      </extension>
    </complexContent>
  </complexType>
  <complexType name="tParallel">
    <complexContent>
      <extension base="cdl:tExtensibleElements">
        <sequence>
          <group ref="cdl:activity" maxOccurs="unbounded"/>
        </sequence>
      </extension>
    </complexContent>
  </complexType>
  <complexType name="tChoice">
    <complexContent>
      <extension base="cdl:tExtensibleElements">
        <sequence>
          <group ref="cdl:activity" maxOccurs="unbounded"/>
        </sequence>
      </extension>
    </complexContent>
  </complexType>
  <complexType name="tWorkunit">
    <complexContent>
      <extension base="cdl:tExtensibleElements">
        <sequence>
          <group ref="cdl:activity"/>
        </sequence>
        <attribute name="name" type="NCName" use="required"/>
        <attribute name="guard" type="cdl:tBoolean-expr" 
                 use="optional"/>
        <attribute name="repeat" type="cdl:tBoolean-expr" 
                 use="optional"/>
        <attribute name="block" type="boolean" 
                  use="required"/>use="optional" default="false"/>
      </extension>
    </complexContent>
  </complexType>
  <complexType name="tPerform">
    <complexContent>
      <extension base="cdl:tExtensibleElements">
        <sequence>
          <element  name="alias" type="cdl:tAlias"name="bind" type="cdl:tBind" 
                  minOccurs="0" maxOccurs="unbounded"/>
        </sequence>
        <attribute name="choreographyName" type="QName"
                 use="required"/>
      </extension>
    </complexContent>
  </complexType>
  <complexType  name="tAlias">name="tBind">
    <complexContent>
      <extension base="cdl:tExtensibleElements">
        <sequence>
          <element name="this"  type="cdl:tAliasVariable"/>type="cdl:tBindVariable"/>
          <element name="free"  type="cdl:tAliasVariable"/>type="cdl:tBindVariable"/>
        </sequence>
      </extension>
    </complexContent>
  </complexType>
  <complexType  name="tAliasVariable">name="tBindVariable">
    <complexContent>
      <extension base="cdl:tExtensibleElements">
        <attribute name="variable" type="cdl:tXPath-expr" 
                 use="required"/>
        <attribute name="role" type="QName" use="required"/>
      </extension>
    </complexContent>
  </complexType>
  <complexType name="tInteraction">
    <complexContent>
      <extension base="cdl:tExtensibleElements">
        <sequence>
          <element name="participate" type="cdl:tParticipate"/>
          <element name="exchange" type="cdl:tExchange" minOccurs="0"
                  maxOccurs="unbounded"/>
          <element name="record" type="cdl:tRecord" minOccurs="0" 
                  maxOccurs="unbounded"/>
        </sequence>
        <attribute name="name" type="NCName" use="required"/>
        <attribute name="channelVariable" type="QName" 
                 use="required"/>
        <attribute name="operation" type="NCName" use="required"/>
        <attribute name="time-to-complete" type="duration"
                 use="optional"/>
        <attribute name="align" type="boolean" use="optional" 
                 default="false"/>
        <attribute  name="initiateChoreography"name="initiate" type="boolean" 
                 use="optional" default="false"/>
      </extension>
    </complexContent>
  </complexType>
  <complexType name="tParticipate">
    <complexContent>
      <extension base="cdl:tExtensibleElements">
        <attribute name="relationship" type="QName" use="required"/>
        <attribute name="fromRole" type="QName" use="required"/>
        <attribute name="toRole" type="QName" use="required"/>
      </extension>
    </complexContent>
  </complexType>
  <complexType name="tExchange">
    <complexContent>
      <extension base="cdl:tExtensibleElements">
        <sequence>
          <element  name="use" type="cdl:tVariableRef"/>name="send" type="cdl:tVariableRecordRef"/>
          <element  name="populate" type="cdl:tVariableRef"/>name="receive" type="cdl:tVariableRecordRef"/>
        </sequence>
        <attribute  name="messageContentType"name="name" type="string" use="optional"/>
        <attribute name="informationType" type="QName" 
                 use="optional"/>
        <attribute name="channelType" type="QName" 
                  use="required"/>use="optional"/>
        <attribute name="action" type="cdl:tAction2" use="required"/>
      </extension>
    </complexContent>
  </complexType>
  <complexType name="tVariableRecordRef">
    <complexContent>
      <extension base="cdl:tExtensibleElements">
        <attribute name="variable" type="cdl:tXPath-expr" 
                use="optional"/>
        <attribute name="recordReference" use="optional">
          <simpleType>
             <list itemType="NCName"/>
          </simpleType>
        </attribute>
      </extension>
    </complexContent>
  </complexType>
  <complexType name="tVariableRef">
    <complexContent>
      <extension base="cdl:tExtensibleElements">
        <attribute name="variable" type="cdl:tXPath-expr" 
                use="required"/>
      </extension>
    </complexContent>
  </complexType>
  <complexType name="tRecord">
    <complexContent>
      <extension base="cdl:tExtensibleElements">
        <sequence>
          <element name="source" type="cdl:tVariableRef"/>
          <element name="target" type="cdl:tVariableRef"/>
        </sequence>
        <attribute name="name" type="string"  use="required"/> <attribute name="role" type="QName" use="required"/>use="optional"/>
        <attribute  name="action" type="cdl:tAction2"name="when" type="string" use="required"/>
      </extension>
    </complexContent>
  </complexType>
  <complexType name="tAssign">
    <complexContent>
      <extension base="cdl:tExtensibleElements">
        <sequence>
      <element name="copy" type="cdl:tCopy"
               maxOccurs="unbounded"/>
        </sequence>
        <attribute name="role" type="QName" use="required"/>
      </extension>
    </complexContent>
  </complexType>
  <complexType name="tCopy">
    <complexContent>
      <extension base="cdl:tExtensibleElements">
        <sequence>
          <element name="source" type="cdl:tVariableRef"/>
          <element name="target" type="cdl:tVariableRef"/>
        </sequence>
        <attribute name="name" type="NCName" use="required"/>
      </extension>
    </complexContent>
  </complexType>
  <complexType  name="tNoaction">name="tSilentAction">
    <complexContent>
      <extension base="cdl:tExtensibleElements">
        <attribute name="role" type="QName" use="optional"/>
      </extension>
    </complexContent>
  </complexType>
  <complexType name="tNoAction">
    <complexContent>
      <extension  base="cdl:tExtensibleElements"/>base="cdl:tExtensibleElements">
        <attribute name="role" type="QName" use="optional"/>
      </extension>
    </complexContent>
  </complexType>
  <complexType name="tException">
    <complexContent>
      <extension base="cdl:tExtensibleElements">
        <sequence>
          <element name="workunit" type="cdl:tWorkunit" 
                  maxOccurs="unbounded"/>
        </sequence>
        <attribute name="name" type="NCName" use="required"/>
      </extension>
    </complexContent>
  </complexType>
  <complexType name="tFinalizer">
    <complexContent>
      <extension base="cdl:tExtensibleElements">
        <sequence>
          <element name="workunit" type="cdl:tWorkunit"/>
        </sequence>
        <attribute name="name" type="NCName" use="required"/>
      </extension>
    </complexContent>
  </complexType>
  <simpleType name="tAction">
    <restriction base="string">
      <enumeration value="request-respond"/>
      <enumeration value="request"/>
      <enumeration value="respond"/>
    </restriction>
  </simpleType>
  <simpleType name="tAction2">
    <restriction base="string">
      <enumeration value="request"/>
      <enumeration value="respond"/>
    </restriction>
  </simpleType>
  <simpleType name="tUsage">
    <restriction base="string">
      <enumeration value="once"/>
      <enumeration value="unlimited"/>
    </restriction>
  </simpleType>
  <simpleType name="tBoolean-expr">
    <restriction base="string"/>
  </simpleType>
  <simpleType name="tXPath-expr">
    <restriction base="string"/>
  </simpleType>
  <simpleType name="tIsolation">
    <restriction base="string">
      <enumeration value="dirty-write"/>
      <enumeration value="dirty-read"/>
      <enumeration value="serializable"/>
    </restriction>
  </simpleType>
</schema>

10 WS-CDL Supplied Functions

There are several functions that the WS-CDL specification supplies as XPATH 1.0 extension functions. These functions can be used in any XPath expression as long as the types are compatible.

xsd:time getCurrentTime(xsd:QName roleName).

Returns the current time at the Role specified by roleName.

xsd:date getCurrentDate(xsd:QName roleName).

Returns the current date at the Role specified by roleName.

xsd:dateTime getCurrentTime() xsd:dateTime getCurrentDate() xsd:dateTime getCurrentDateTime()getCurrentDateTime(xsd:QName roleName)

Returns the current date/time.date and time at the Role specified by roleName.

xsd:boolean hasTimeElapsed(xsd:duration elapsedTime, xsd:QName roleName).

Returns "true" if used in a guard or repetition condition of a Work Unit with the block attribute set to "true" and the time specified by elapsedTime at the Role specified by roleName has elapsed from the time the either the guard or the repetition condition were enabled for matching. Otherwise it returns "false".

xsd:string createNewID()

Returns a new globally unique string value for use as an identifier.

xsd:any*xsd:any getVariable(xsd:string varName, xsd:string documentPath?, xsd:string roleName)xsd:QName roleName?)

Returns the information of the variableVariable with name stateName at a RolevarName as a node set containing a single node. The second parameter is optional. When the second parameter is not used, this function retrieves from the variableVariable information the entire document. When the second parameter is used, this function retrieves from the variableVariable information, the fragment of the document at the provided absolute location path. The third parameter is optional. When the third parameter is used that the Variable information MUST be available at the Role specified by roleName. If this parameter is not used then the Role is inferred from the context that this function is used.

xsd:boolean isVariableAvailable(xsd:string varName, xsd:QName roleName)

Returns "true" if the information of the Variable with name varName is available at the Role specified by roleName. Returns "false" otherwise.

xsd:boolean isAligned(xsd:stringvariablesAligned(xsd:string varName, xsd:string withVarName, xsd:stringxsd:QName relationshipName)

Returns "true" if within a Relationship specified by relationshipName the variableVariable with name varName residing at the first Role of the Relationship has aligned its information (states or values)with the variableVariable named withVarName, within a Relationship as specified bywithVarName residing at the second Role of the Relationship.

xsd:any getChannelReference(xsd:string varName)

Returns the reference information of the Variable with name varName. The Variable MUST be of Channel Type.

xsd:any getChannelIdentity(xsd:string varName)

Returns the identity information of the relationshipName.Variable with name varName. The Variable MUST be of Channel Type.

xsd:boolean globalizedTrigger(xsd:string expression, xsd:string roleName, xsd:string expression2, xsd:string roleName2, )

Combines expressions that include Variables that are defined at different Roles.