Copyright
 © 2005 W3C®
(MIT, ERCIM,
Keio), All Rights Reserved.
W3C liability,
trademark
and document
use rules apply. © 2004Â
The Web Services Choreography Description Language (WS-CDL) is
an XML-based language that describes peer-to-peer collaborations of
participants by
defining, from a global viewpoint, their common and complementary
observable behavior; where ordered message exchanges result in
accomplishing a common business goal.parties
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 interoperable, peer-to-peer collaborations between any
type of participant
regardless of the supporting platform or programming model used by
the implementation of the hosting environment.party
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 aLastCallWorkingDraftthe
of9 November
2005 W3C
Candidate Recommendation
of "Web Services Choreography
Description WebLanguagedocument.TheLastCallreviewperiodLanguage,
Version 1.0".
W3C publishes
a technical
report as a
Candidate Recommendation
to indicate
that the
document is
believed to
be stable and
to encourage
implementation by
the developer
community. Candidate
Recommendation status
is described
in section
7.1.1 of the
Process Document.
Comments can
be sent until
31 endsJanuaryMarch
2006. Comments on this document should be sent to
[email protected]
(public
archive). It is inappropriate to send discussion emails to this
address.2005.
Discussion of this document takes place on the public [email protected] mailing list (public archive) per the email communication rules in the Web Services Choreography Working Group charter.
It has been produced by the Web Services Choreography Working Group, which is part of the Web Services Activity.
This document is a chartered deliverable of the Web Services Choreography Working Group. Issues are recorded in the group's issue section.
TheWorkingGroupidentifiedtwoissues.Thoseissuesmaybedroppedorfixedinthefuture,buttheWorkingGroupdoesnotbelievethattheresolutionwillresultinasubstantiveThis
document is based upon the Last
Call Working Draft published on
change.1217
December 2004. Changes between these two
versions are described in a diff
document.October
The specific
entrance criteria
to the
Proposed Recommendation
phase shall
be as
follows:
There MUST be
examples that
exhibit all
of the key
features of
WS-CDL such
that the
examples:
Where "valid
WS-CDL" means
that it
conforms to
the specification
both in terms
of the schema
and the
operational semantics
of WS-CDL.
Where "implementations"
mean tools
that process
WS-CDL documents
and produce
end-point(s).
Where "end
point" means
a web
service.
Where "platform"
means a
software stack
capable of
supporting the
execution of
a web
service.
Where "interoperate"
means two web
services playing
at least two
distinct roles.
Interoperability concerns
such as
alignment protocol,
coordination protocol
and adressing
are implementation
details.
Detailed implementation requirements and the invitation for participation in the Implementation Report are provided in the Implementation Report Plan
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 WorkingCandidate
Recommendation 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.Draft
1 Introduction
    1.1 Notational Conventions
    1.2 Purpose of theChoreographyDescriptionWS-CDLLanguage
    1.3 Goals
    1.4 Relationship with XML and
WSDL
    1.5 Relationship with
Business Process Languages
    1.6 Time Assumptions
    1.7
Authoritative
Schema
2 ChoreographyDescriptionLanguageModelWS-CDL
Model Overview    2.1
3
WS-CDL Document
Structure    2.2
    3.1
Choreography Package        2.2.1
    3.2
Including WS-CDL Type
Definitions        2.2.2
    3.3
WS-CDL document
Naming and Linking        2.2.3
    3.4
Language Extensibility        2.2.4
andBinding    3.5
Semantics        2.2.5
4
Collaborating
    2.3Parties        2.3.1RoleTypes        2.3.2RelationshipTypes        2.3.3ParticipantTypes        2.3.4ChannelTypesParticipants    2.4
    4.1
RoleType
    4.2
RelationshipType
    4.3
ParticipantType
    4.4
ChannelType
5 Information Driven
Collaborations
        2.4.1InformationTypes    5.1
InformationType        2.4.2
    5.2
Variables
    5.3
Expressions        2.4.3
        5.3.1
WS-CDL Supplied
Functions            2.4.3.1
        2.4.4Tokens        2.4.5Choreographies        2.4.6WorkUnits    5.4
Token
and TokenLocator        2.4.7
    5.5
Choreography
    5.6
WorkUnit
    5.7
Choreography Life-line
    5.8
Choreography Exception
Handling        2.4.8
    5.9
Choreography
Finalization        2.4.9
    5.10
Choreography
Coordination        2.4.10
6
Activities    2.5
    6.1
Ordering Structures        2.5.1
        6.1.1
Sequence            2.5.1.1
        6.1.2
Parallel            2.5.1.2
        6.1.3
Choice            2.5.1.3
    6.2
Interacting        2.5.2
        6.2.1
Interaction
Based Information Alignment            2.5.2.1
        6.2.2
Interaction Life-line            2.5.2.2
        6.2.3
Interaction Syntax            2.5.2.3
    6.3
Composing
Choreographies        2.5.3
    6.4
Assigning Variables        2.5.4
    6.5
Marking Silent Actions        2.5.5
    6.6
Marking the Absence of
Actions        2.5.6
    6.7
Finalizing a
Choreography        2.5.7
3Example47 Interoperability
with other
SpecificationsRelationship
    7.1
Interoperability
with Security theframework5frameworksRelationship
    7.2
Interoperability
with Reliable Messaging
theframework6frameworksRelationship
    7.3
Interoperability
with Coordination theframework7frameworksRelationship
    7.4
Interoperability
with Addressing
theframeworksframework
8 Conformance
    8.1
Conforming
WS-CDL documents
    8.2
Endpoint
conformance
9 Acknowledgments
10 References
11LastCallIssues    11.1Issue1    11.2Issue2    10.1
Normative
References12
    10.2
Informative
References
For many years, organizations have
been 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.being
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 interact with a 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:
SOAP: defines the basic formatting of a message and the basic delivery options independent of programming language, operating system, or platform. A SOAP compliant Web Service knows how to send and receive SOAP-based messages
Web
Services Description
Language (WSDL): describes
the static interface of a Web Service. It defines the message set
and the message characteristics of end points. Data types are
defined by XML Schema specification, which supports rich type
definitions and allows expressing any kind of XML type requirement
for the application data (Note:
WSDL 2.0 also
supports types
defined in
other systems
such as DTD,
RelaxNG and
RDF)WSDL
Registry: allows publishing the availability of a Web
Service and its discovery from service requesters using
sophisticated searching
mechanismsmechanims
Security layer: ensures that exchanged information are
not modified or forged in a verifiable manner and that
participants can be
authenticatedparties
Reliable Messaging layer: provides exactly-once and
guaranteed delivery of information exchanged between
participantsparties
Context, Coordination and Transaction layer: defines
interoperable mechanisms for propagating context of long-lived
business transactions and enables
participants to meet
correctness requirements by following a global agreement
protocolparties
Business Process Languages layer: describes the execution logic of Web Services based applications by defining their control flows (such as conditional, sequential, parallel and exceptional execution) and prescribing the rules for consistently managing their non-observable data
Choreography layer: describes collaborations of
participants by defining
from a global viewpoint their common and complementary observable
behavior, where information exchanges occur, when the jointly
agreed ordering rules are satisfiedparties
The Web Services Choreography specification is aimed at the
composition of interoperable collaborations between any type of
participant regardless of
the supporting platform or programming model used by the
implementation of the hosting environment. A
choreography description
is the
multi-participant contract
that describes
this composition
from a global
perspective. The
Web Services
Choreography Description
Language (WS-CDL)
is the means
by which this
technical contract
is described.party
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 [RFC2119].
The following namespace prefixes are used throughout this document:
Prefix | Namespace URI | Definition |
---|---|---|
wsdl |
|
WSDL 2.0 namespace for WSDL framework. |
cdl |
|
WSCDL namespace for Choreography Description Language. |
xsi | http://www.w3.org/2001/XMLSchema-instance | Instance namespace as defined by XSD [XMLSchemaP1]. |
xsd | http://www.w3.org/2001/XMLSchema | Schema namespace as defined by XSD [XMLSchemaP2]. |
tns | (various) | The "this namespace" (tns) prefix is used as a convention to refer to the current document. |
rns | (various) | A namespace prefix used to refer to an (example and fictitious) WSDL interface specification. |
(other) | (various) | All other namespace prefixes are
|
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. .
<element../>" or
./>"<element. .
<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; other examples
are fragments and require additional information to be specified in
order to conform.<?xml
An XSD is provided as a formal definition of WS-CDL grammar (see Section 11).
Where there is any discrepancy between the text of this specification, the fragments of informal schema and the full formal schema in the appendix then it is an error in the specification. Should such an error come to light please notify W3C. While awaiting resolution, the text takes priority over the formal schema in the appendix, which takes priority over the informal schema fragments.
Business or other activities that involve different organizations or independent processes are engaged in a collaborative fashion to achieve a common business goal, such as Order Fulfillment.
For the collaboration to work successfully, the rules of
engagement between all the interacting
participants must be
provided. Whereas today these rules are frequently written in
English, a standardized way for precisely defining these
interactions, leaving unambiguous documentation of the
partiesparticipants and
responsibilities of each, is missing.parties
The WebServicesWS-CDL
specification is aimed at being able to precisely describe
collaborations between any type of
Choreographyparticipant regardless of
the supporting platform or programming model used by the
implementation of the hosting environment.party
Using the WebServicesWS-CDL
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
Choreographyparticipants involved.
Each partiesparticipant can then
use the global definition to build and test solutions that conform
to it. The global specification is in turn realized by combination
of the resulting local systems, on the basis of appropriate
infrastructure support.party
The advantage of a contract based on a global viewpoint as
opposed to any
one endpoint is that it separates the overall
"global" process being followed by an individual business or system
within a "domain of control" (an endpoint) from the definition of
the sequences in which each business or system exchanges
information with others. This means that, as long as the
"observable" sequences do not change, the rules and logic followed
within a domain of control (endpoint) can change at will and
interoperability is therefore guaranteed.anyone
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 the common or global view. It is the intent of
ChoreographyWS-CDL that the conformance
of each implementation to the common view expressed
CDLintherein
is easy to determine.CDL
The figure below demonstrates a possible usage of
theChoreographyDescriptionLanguage.Figure1:IntegratingWebServicesbasedapplicationsusingWS-CDL.WS-CDL
In Figure 1, Company A and Company B wish to integrate their Web
Services based applications. The respective business 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. They then
generate a ChoreographyDescriptionWS-CDL based
representation. In this example, a
Languagechoreography
specifies the interactions between services across business
entities ensuring interoperability, while leaving actual
implementation decisions in the hands of each individual
company:Choreography
Company "A" relies on a WS-BPEL [WSBPEL]
solution to implement its own part of the
choreographyChoreography
Company "B", having greater legacy driven integration needs,
relies on a J2EE [J2EE] solution incorporating
Java and Enterprise Java Bean Components or a .NET [C#S] solution incorporating C# to implement its own
part of the
choreographyChoreography
Similarly, a
choreography can
specify the interoperability and interactions between services
within one business entity.Choreography
The primary goal of aChoreographyDescriptionthe
WS-CDL specification is to
specify a declarative, XML based language that defines from a
global viewpoint the common and complementary observable behavior
specifically, the information exchanges that occur and the jointly
agreed ordering rules that need to be satisfied.Language
More specifically, the goals of the
ChoreographyDescriptionWS-CDL
specification are to permit:Language
Reusability. The same
choreography
definition is usable by different
Choreographyparticipants operating
in different contexts (industry, locale, etc.) with different
software (e.g. application software)parties
Cooperation. Choreographies define the sequence of
exchanging messages between two (or more) independent
participants or
processes by describing how they should cooperateparties
Multi-Party Collaboration. Choreographies can be
defined involving any number of
participants or
processesparties
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
Choreographieschoreographies
that may be reused in different contextsChoreographies
Modularity. Choreographies can be defined using an
"inclusion" facility that allows a
choreography to be
created from parts contained in several different
ChoreographychoreographiesChoreographies
Information Driven Collaboration. Choreographies
describe how
participants make
progress within a collaboration, through the recording of exchanged
information and changes to observable information that cause
ordering constraints to be fulfilled and progress to be madeparties
Information Alignment. Choreographies allow the
participants that take
part in
partieschoreographies to
communicate and synchronize their observable informationChoreographies
Exception Handling. Choreographies can define how
exceptional or unusual conditions that occur while the
choreography is
performed are handledChoreography
Transactionality. The processes or
participants that take
part in a
partieschoreography can
work in a "transactional" way with the ability to coordinate the
outcome of the long-lived collaborations, which include multiple
participants, each with their own, non-observable business rules
and goalsChoreography
Specification Composability. This specification
is
intended to work alongside
willand/or complement other
specifications such as the WS-Reliability [WSRM], WS-Composite Application Framework (WS-CAF)
[WSCAF], WS-Security [WSS],
Business Process Execution Language for WS (WS-BPEL) [WSBPEL], ebXML
Business Process
Specification Schema
[ebBP20],
[BPSS11], etc.and
The WS-CDL specification depends on the following
specifications: XML 1.0 [XML], XML-Namespaces
[XMLNS], XML-Schema 1.0 [XMLSchemaP1], [XMLSchemaP2] and
XPath
1.0 [XPTRF]. Support for
including and referencing service definitions given in WSDL 2.0
[WSDL20] is a normative part of the WS-CDL
specification. In addition, support for including and referencing
service definitions given in WSDL 1.1 as constrained by WS-I Basic
Profile XPointer[Action:add[BP11] is a
normative part of the WS-CDL specification.references]
AChoreographyDescriptionWS-CDL is not an
"executable business process description language" or an
implementation language. The role of specifying the execution logic
of an application will be covered by these [XLANG], [WSFL], [WSBPEL], [BPML], [XPDL], [JLS], [C#S] and other specifications.Language
AChoreographyDescriptionWS-CDL does not depend
on a specific business process implementation language. Thus, it
can be used to specify truly interoperable, collaborations between
any type of Languageparticipant
regardless of the supporting platform or programming model used by
the implementation of the hosting environment.
partyEachparty,adheringtoaChoreographyDescriptionLanguagecollaborationrepresentation,couldbeWS-CDL
may couple
with other
languages such
as those that
add further
computable semantic
definitions.implemented
Each participant, adhering to a WS-CDL collaboration representation, could be implemented using completely different mechanisms such as:
Clock synchronization is unspecified in the WS-CDL technical
specification and is considered design-specific. In specific
environments between involved
participants, it can be
assumed that all
parties,participants are
reasonably well synchronized on second time boundaries. However,
finer grained time synchronization within or across
partiesparticipants, or
additional support or control are undefined and outside the scope
of the WS-CDL specification.parties,
In the WebServicesChoreographyDescriptionLanguage(WS-CDL)model.event of
any ambiguity
or differentiation
between the
WS-CDL fragments
and the
appendix with
the full
schema, the
full schema
takes precedence.2.1
WS-CDL describes interoperable, peer-to-peer collaborations
between participants.
In order to facilitate these collaborations, services commit to
mutual responsibilities by establishing
parties.formal
relationships. Their collaboration takes place in
a jointly agreed set of ordering and constraint rules, whereby
information is exchanged between the
Relationships.participants.parties.
The WS-CDL model consists of the following entities:
ParticipantTypes,RoleroleType,
relationshipType and
TypesRelationshipparticipantType -
Within a
Typeschoreography,
information is always exchanged between
Choreography,participants within or
across trust boundaries. partiesARoleTypeenumeratestheobservablebehaviorapartyexhibitsinordertocollaboratewithotherparties.ARelationshipTypeidentifiesthemutualcommitmentsthatmustbeAll
interactions occur between
madetwopartiesforthemtocollaboratesuccessfully.AParticipantroles
being exhibited
by participants,
and are
constrained by
a relationship.
Within WS-CDL,
a participant is
Typeabstractly
modeled by a
participantType, a
role by a
roleType, and
a relationship
by a
relationshipType:grouping
informationType,
variable and
token -
TokensVariablesA
variable contains information
about commonly observable objects in a collaboration, such as the
information exchanged or the observable information of the
containroleTypes involved.
RolesTokensareA
token is an
alias that can be used to reference parts of a
aliasesVariable.Bothvariable.
Information exchange
variables, state
capturing variables and
Variablestokens have
TokensinformationTypes that
define the Typestype of
structureinformation the
whatvariable contains or
the Variabletoken referencesToken
choreography
- ChoreographiesChoreographiesA
choreography defines
collaborations between interacting defineparties:ChoreographyparticipantTypes:Life-line
channelType
- A Channelschannel realizes a
point of collaboration between
ChannelparticipantTypes by
specifying where and how information is partiesexchangedWorkexchanged.
Within WS-CDL,
channels are
abstractly modeled
as channelTypesUnits
workunit - A Workworkunit prescribes the
constraints that must be fulfilled for making
Unitprogress, and thus
performing progressactualwork, within a
workChoreographychoreographyActivities
activities and Orderingordering
structures - Activities
StructuresarethelowestlevelcomponentsoftheChoreographythatdescribe the
performactualwork.Orderingactions
performed within
a choreography.
Ordering structures combine
activities with other StructuresOrderingordering
structures in a nested structure to express the
ordering Structuresconditionsinwhichrules
of actions
performed within informationtheChoreographyisexchangedInteractiona
choreographyActivity
interaction
activity - An
interaction is the
basic building block of a InteractionChoreography,choreography.
It results in an exchange of information between
whichparticipants and
possible synchronization of their observable information
changesparties
andtheactualvaluesoftheexchangedinformationsemantics -
Semantics allow the creation of descriptions that can record the
semantic definitions of every component in the modelSemantics
A WS-CDL document is simply a set of definitions. Each
definition is a named construct that can be referenced. There is a
package element at the root, and the individual
choreography type
definitions inside.Choreography
A Choreographychoreography
package aggregates a set of WS-CDL type
definitions, provides a namespace for the definitions and through
the use of XInclude [XInclude], MAY
syntactically include WS-CDL type definitions that are defined in
other PackageChoreographychoreography
packages.Packages.
The syntax of the package construct is:
<packagename="NCName" author="xsd:string"? version="xsd:string"? targetNamespace="uri"name="ncname"xmlns="http://www.w3.org/2004/12/ws-chor/cdl">informationType*token*tokenLocator*roleType*relationshipType*participantType*xmlns="http://www.w3.org/2005/10/cdl"> <informationType/>* <token/>* <tokenLocator/>* <roleType/>* <relationshipType/>* <participantType/>* <channelType/>* Choreography-Notation* </package>channelType*
The ChoreographyPackagechoreography
package contains
the following
WS-CDL type
definitions:contains:
Zero or more InformationinformationTypesTypes
Zero or more tokens
and TokensTokentoken
locatorsLocators
Zero or more RoleroleTypesTypes
Zero or more RelationshiprelationshipTypesTypes
Zero or more ParticipantparticipantTypesTypes
Zero or more ChannelchannelTypesTypes
Zero or more Package-levelpackage-level
choreographiesChoreographies
The top-level attributes name
, author
, and version
define authoring properties of the
choreography
document.Choreography
The targetNamespace
attribute provides the
namespace associated with all WS-CDL type definitions contained in
this Choreographychoreography
package. WS-CDL type definitions included in this
Package.package, using the
inclusion mechanism, MAY be associated with other namespaces.Package,
The elements informationType
, token
,
tokenLocator
, roleType
,
relationshipType
, participantType
and
channelType
MAY be used as elements by all the
choreographies
defined within this ChoreographiesChoreographyPackage.choreography
package.2.2.2
WS-CDL type definitions or fragments of WS-CDL type definitions can be syntactically reused in any WS-CDL type definition by using XInclude [XInclude]. The assembly of large WS-CDL type definitions from multiple smaller, well-formed WS-CDL type definitions or WS-CDL type definitions fragments is enabled using this mechanism.
Inclusion of fragments of other WS-CDL type definitions
should be done carefully
in order to avoid duplicate definitions
SHOULD(variables, blocks,
etc.). A WS-CDL processor MUST ensure that the document is
(Variables,correctbeforeprocessingit.ThecorrectnessmayinvolveXMLwell-formednessaswellassemantic;checks,suchasunicityofVariabledefinitions,a ofsinglerootChoreography,conforming
WS-CDL document
[Conforming
Document].
It MAY verify
that the
document conforms
to the
provided schema
[WS-CDL
Schema].etc.
The example below shows some possible syntactic reuses of
WS-CDL type
definitions.Choreography
<choreography name="newChoreography" root="true"> ... <variable name="newVariable" informationType="someType"roleType="randomRoleType"/> <xi:includerole="randomRome"/>href="genericVariableDefinitions.xml"href="genericVariableDefinitions.xml"/> <xi:include href="otherChoreography.xml"/>xpointer="xpointer(//choreography/variable[1])xpointer="xpointer(//choreography/variable[1])"/> ... </choreography>/>
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
MUST be
made using a is"QName".QName.
Each WS-CDL type
definition has its own name scope.definition
Names within a name scope MUST be unique within
the WS-CDL document.a
The resolution of a
"QName" in WS-CDL is similar to the resolution of
QNamesa
"QName" as described by the XML
Schemas specification [XMLSchemaP1].QNames
andTo support
extending the WS-CDL language, this specification allows the use of
extensibility elements and/or attributes defined in other XML
Bindingnamespaces
inside any
WS-CDL language
element.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
contradict the semantics
of any element or attribute from the WS-CDL namespace.change
Within a WS-CDL document, descriptions allowtherecordingmay
reference semantic definitions and other
documentation. The OPTIONAL ofdescription
sub-element is
allowed inside any WS-CDL language element.
Descriptions MAY
be text or
document references
defined in
multiple different
human readable
languages. Where
machine processable, WS-CDL
parsers are not required to parse the contents of the
description
sub-element..
The information provided by the description
sub-element will allowreference the
forrecordingofdescriptions in any or
all of the following
semanticsareas:ways:
Text. ThiswillbeinplaintextorPlain
text, HTML possiblyandshouldbeor other
non-encoded text
formats may
apply (e.g.
text/plain, text/html,
text/sgml, text/xml,
etc.).brief
Document Reference. This
MAY contain a URI to a
document that more fully describes the
willcomponent.component
Machine Oriented Semantic Descriptions. This
MAY contain machine
processable definitions in languages such as RDF
[RDF] or OWL
willDescriptionsthatare[OWL].
This description
MAY contain a
URI.text
The semantics
of any
element or documentreferencesattribute
from the
WS-CDL namespace
SHOULD remain
unchanged and
MUST NOT be
candefinedinmultipledifferenthumanreadablelanguages.contradicted.2.3
The WSDL specification [WSDL20] describes
the functionality of a service provided by a
participant based on a
stateless, client-server model. The emerging Web Based applications
require the ability to exchange information in a peer-to-peer
environment. In these types of environments a
partyparticipant represents a
requester of services provided by another
partyparticipant and is at the
same time a provider of services requested from other
partyparticipants, thus
creating mutual
parties,multi-participant
service dependencies.multi-party
A WS-CDL document describes how a
participant is capable of
engaging in collaborations with the same
partyparticipant or with
different
partyparticipants.parties.
The RoleroleTypes,
TypesParticipantrelationshipTypes
, participantTypes,
TypesRelationshipand
TypesChannelchannelTypes define
Typesthecouplingofcollaborating
theparties.2.3.1RoleTypesARoleTypeenumeratestheobservableparticipants
and their
coupling.behavior
The typeRef complex type definitions used in participantTypes , relationshipTypes, and channelTypes are different for each. They are type definitions for different local elements even though they have the same tag name. The text in the following sections describes the different attributes and child elements of each.
A roleType
enumerates potential
observable behavior a
partyparticipant
can exhibit in order to
exhibitscollaboratewithotherinteract. For
parties.example, the "Buyer"
exampleRoleroleType is associated with
the purchasing of goods or services and the
"Supplier" TypeRoleroleType is associated with
providing those goods or services for a fee.Type
The syntax of the roleType construct is:
<roleTypename="NCName"> <behaviorname="ncname">name="ncname"name="NCName" interface="QName"? />+ </roleType>interface="qname"?
The attribute name
is used forto
specify a distinct name for each
specifyingroleType
element declared within a
Choreographychoreography
package.Package.
Within the roleType
element,
a thebehavior
element specifies a subset of the observable behavior a
participant exhibits. A
partyRoleroleType MUST contain one
or more Typebehavior
elements. The attribute
name
within the behavior
element is used
forto
specify a distinct name for each
specifyingbehavior
element declared within a
roleType
element.
The behavior
element defines an OPTIONAL
interface
attribute, which identifies a WSDL interface
type. A behavior
without an interface
describes a RoleroleType that is not
required to support a specific Web Service interface.Type
A RelationshiprelationshipType
identifies the TypeRoleroleTypes and
Typesbehaviors, where
mutual commitments Behaviors,betweentwoMUST be made for
partiescollaborations to
themcollaboratebe
successful. For
successfully.example, the
exampleRelationshiprelationshipTypes between
a Types"Buyer" and a
Buyer"Seller" could
include:Seller
A "Purchasing" RelationshiprelationshipType, for the
initial procurement of goods or services, andType,
A "Customer Management" RelationshiprelationshipType to allow
the Type"Supplier" to
provide service and support after the goods have been purchased or
the service providedSupplier
Although RelationshiprelationshipTypes are
always between two TypesRoleTypes,roleTypes,
choreographies involving more than two
ChoreographiesRoleroleTypes are possible.
For Typesexample, if the
purchase of goods involved a third-party
example"Shipper" contracted by
the Shipper"Supplier" to
deliver the
Supplier"Supplier's" goods,
then, in addition to the "Purchasing" and "Customer Management"
Supplier'sRelationshiprelationshipTypes
described above, the following TypesRelationshiprelationshipTypes might
exist:Types
A "Logistics Provider" RelationshiprelationshipType between
the Type"Supplier" and the
Supplier"Shipper", andShipper,
A "Goods Delivery" RelationshiprelationshipType between
the Type"Buyer" and the
Buyer"Shipper"Shipper
The syntax of the relationshipType construct is:
<relationshipTypename="ncname"><rolename="NCName"> <roleType typeRef="QName" behavior="list oftype="qname"NCName"? />ncname"?<role<roleType typeRef="QName" behavior="list oftype="qname"NCName"? /> </relationshipType>ncname"?
The attribute name
is used forto
specify a distinct name for each
specifyingrelationshipType
element declared within a
Choreographychoreography
package.Package.
A relationshipType
element MUST have exactly two
RoleroleTypes defined. Each
TypesRoleroleType is specified by
the Type
attribute within the
typeReftype
element. The "QName"
value of the
roleTyperoletypeRef
attribute
of the
roleType
element
MUST reference
the name of
a roleType.
Within each
element, the OPTIONAL attribute roleTyperolebehavior
identifies
the commitment of a
participant as an
XML-Schema list of behavior types belonging to this
partyRoleroleType. If the
Type.behavior
attribute is missing then all the behaviors
belonging to this RoleroleType are identified as
the commitment of a Typeparty.2.3.3ParticipantTypesAParticipantTypeidentifiesasetofRoleTypesthatMUSTbeimplementedparticipant.
If the by
attribute is present
then the
behaviors listed
MUST be a
proper subset
of those
belonging to
samelogicalentityororganization.Itsbehaviorpurposethis
roleType.group
A participantType
groups together
those parts of the
observable behavior that MUST be implemented by
thethea
participant .
A logical entity or
sameorganization
MAY be
represented by
more than one
participantType within
a choreography.organization.
The syntax of the participantType construct is:
<participantTypename="ncname"><rolename="NCName"> <roleType typeRef="QName" />+ </participantType>type="qname"
The attribute name
is used forto
specify a distinct name for each
specifyingparticipantType
element declared within a
Choreographychoreography
package.Package.
Within the participantType
element, one or more
elements identify the roleTyperoleRoleroleTypes that MUST be
implemented by this TypesParticipantparticipantType. Each
Type.RoleroleType is specified by
the Type
attribute of the
typeReftype
element. The "QName"
value of the
roleTyperoletypeRef
attribute
of the
roleType
element
MUST reference
the name of
a roleType. A specific
RoleroleType MUST NOT be
specified in more than one TypeparticipantType
element.
An example is shown
below where the "SellerForBuyer" givenRoleroleType belonging to a
"Buyer-Seller" TypeRelationshiprelationshipType is
implemented by the TypeParticipantparticipantType "Broker"
which also implements the "SellerForShipper" TypeRoleroleType belonging to a
"Seller-Shipper" TypeRelationshiprelationshipType.Type:
<roleType name="Buyer"> . . . </roleType> <roleType name="SellerForBuyer"> <behavior name="sellerForBuyer" interface="rns:sellerForBuyerPT"/> </roleType> <roleType name="SellerForShipper"> <behavior name="sellerForShipper" interface="rns:sellerForShipperPT"/> </roleType> <roleType name="Shipper"> . . . </roleType> <relationshipType name="Buyer-Seller"><role<roleType typeRef="tns:Buyer" />type="tns:Buyer"<role<roleType typeRef="tns:SellerForBuyer" /> </relationshipType> <relationshipType name="Seller-Shipper">type="tns:SellerForBuyer"<role<roleType typeRef="tns:SellerForShipper" />type="tns:SellerForShipper"<role<roleType typeRef="tns:Shipper" /> </relationshipType> <participantType name="Broker">type="tns:Shipper"<role<roleType typeRef="tns:SellerForBuyer" />type="tns:SellerForBuyer"<role<roleType typeRef="tns:SellerForShipper" /> </participantType>type="tns:SellerForShipper"
A
channelType
realizes a point of collaboration between
ChannelparticipantTypes by
specifying where and how information is partiesexchangedbetweencollaboratingexchanged.
Additionally, parties.ChannelchannelType
instance information,
captured within
channel variables, can be
passed among
informationparticipants in
information exchanges. The
partieschannelType
instances exchanged MAY be used in subsequent
Channelsinteraction
activities. This allows the modeling of both static and dynamic
message destinations when collaborating within a
Interactionchoreography. For
example, a Choreography."Buyer" could
specify BuyerchannelType
instance information to be used for sending
delivery information. The
Channel"Buyer" could then send
Buyerthethis
channelType instance
information to the
Channel"Seller" who then
forwards it to the
Seller"Shipper". The
Shipper."Shipper" could then
send delivery information directly to the
Shipper"Buyer" using the
BuyerchannelType
instance information originally supplied by the
Channel"Buyer".Buyer.
A ChannelchannelType MUST describe
the TypeRoleroleType and the
Typetype of a
referenceparticipant
reference, conveying
the information
needed to
address the
participant being the target of an information
exchange, either a
receiver of a
request action
or a sender
of a reply
action, which is party,used for
determining where and how to send or receive information to or
thenfrom the
intoparticipant.party.
A ChannelchannelType MAY
Typespecifytheinstanceidentityofanentitydescribe the
implementingtype of
behavior(s)aparty,the
beinginstance
identity of targetaninformationexchange.AChannelTypeMAYone or more logical conversations between
describeparticipants, where
each conversation groups a set of related information exchanges.
The channelType
instance identity
can be used
to correlate
multiple conversations
(channel instances)
within the
same choreography
instance.parties,
One or more
channelType
instances MAY be passed around from one
Channel(s)participant to another in
an information exchange. A partyChannelchannelType MAY be used
to:Type
Restrict the number of times aan
instance of this ChannelChannelchannelType can be usedType
Restrict the type of information exchange that can be performed
when using aan
instance of this ChannelChannelchannelTypeType
Restrict the ChannelchannelTypes that will
be passed through Type(s)aan
instance of this ChannelChannelchannelTypeType
Enforce that a passed
channel
instance is Channelalwaysuniquedistinct
The syntax of the channelType construct is:
<channelTypename="ncname"name="NCName" usage="once"|"distinct"|"shared"? action="request-respond"|"request"|"respond"? > <passingusage="once"|"unlimited"?channel="QName" action="request-respond"|"request"|"respond"? new="true"|"false"? />*channel="qname"<roletype="qname"<roleType typeRef="QName" behavior="NCName"? /> <reference> <tokenbehavior="ncname"?name="QName"/> </reference>name="qname"/><identity usage="primary"|"alternate"|"derived"|"association"> <token<identity>name="qname"/>+name="QName"/>+ <identity>* </channelType></identity>?
The attribute name
is used forto
specify a distinct name for each
specifyingchannelType
element declared within a
Choreographychoreography
package.Package.
The OPTIONAL attribute usage
is used to
constrain the
restrictnumberoftimesaway in
which an
instance of this ChannelChannelchannelType, can be used.
The TypeOPTIONALattributeactionisusedtorestrictthetypeofinformationvalues that can be
exchangeperformedwhenused for
this attribute
are:using
"once" -
Once means
that a
channel
instance of this ChannelChannelType.ThetypeofinformationexchangeperformedcouldchannelType
can be eitherarequest-respondexchange,arequestused
for one
interaction, or can
be passed to
another roleType.
When a exchange,respondexchange.Thedefaultchannel
instance of this
forchannelType is
attributesetto"request".TheOPTIONALelementpassingpassed, the
describesChannelpasser of the
Type(s)channel
instance MUST
relinquish control,
for outputting
only, of that
Channel(s)arepassed,fromoneinstance
and passes
control to partyanother,whenusinganinformationexchangeonathe
receiver. A
channel instance of this
ChannelChannelType.TheOPTIONALattributeactionwithinthepassingelementdefineschannelType
MUST NOT be
passed to
more than one
receiver at
any one
time.if
"distinct" (default
usage mode) -
Distinct means
that a Channelchannel
instance of
this channelType
can be used
multiple times
by a
participantType within
multiple interactions.
When a
channel instance
of this
channelType is
passed, the
passer of the
channel instance
MUST relinquish
control, for
outputting only,
of that
instance and
passes control
to the
receiver. A
channel instance
of this
channelType MUST
NOT be passed
by a
participantType to
more than one
receiver. In
this mode, a
participantType MUST
NOT specify
two or more
concurrent interactions
for the same
channel instance
with the same
operation name.will
"shared" - Shared means that a channel instance of this channelType can be used multiple times by multiple participantTypes within multiple interactions. When a channel instance of this channelType is passed, the participantType passing the channel instance MUST NOT relinquish control. In this mode, a participantType MUST NOT specify two or more concurrent interactions for the same channel instance with the same operation name.
The OPTIONAL
attribute action
is used to
restrict the
type of
information exchange
that can be
performed when
using a
channel instance
of this
channelType. The
type of
information exchange
performed could
either be a
request-respond exchange,
a request
exchange, or
a respond
exchange. The
default value
for this
attribute is
"request".
The OPTIONAL
element passing
describes the
channelTypes of
the channel
instances that
are passed from
one participant
to another
when using an
information exchange
on a channel
instance of
this channelType.
The OPTIONAL
attribute action
within the
passing
element,
defines when
a channel
instance MUST
be passed,
either during a request exchange, during a
response exchange or both. The default value for
this attribute is set"request". The OPTIONAL attribute new within
the topassing
element, when set to
element"true", enforces a passed
"true"channel
instance to be always
Channelunique. If the element
distinct.passing
is
missing, then this
missingChannelchannelType MAY be used for
exchanging
Typeinformation, but
MUST NOT be used for passing
informationchannel
instances of any ChannelsChannelchannelType.Type.
The element
is
used to identify the roleTyperoleRoleroleType of a
Typeparticipant, being the
party,type of
the target of an information
exchange, which is then used for statically determining where and
how to send or receive information to or
targetfrom the
participant. Each
roleType is
specified by the
into
attribute of
the typeRefparty.roleType
element. The "QName"
value of the
typeRef
attribute
of the
roleType
element
MUST reference the
name of a
roleType defined
in the
choreography package.
Within the
roleType
element,
the OPTIONAL
attribute behavior
identifies a
specific observable
behavior, belonging
to the
roleType that is
usedforthe target
of an
information exchange.
If the
describingbehavior
attribute
is missing,
then any one
of the
behavior types
belonging to
this roleType
MAY be the
target of an
information exchange.
The element
reference
is used
to specify
the type of a
participant
reference, conveying
the information
needed to
address the
participant being the target of an information
exchange, which is party,used for dynamically
determining where and how to send or receive information to or
thenfrom the
intoparticipant. The
party.type of a
referenceparticipant
reference is distinguished by a
partytoken, as specified by the
Tokenname
attribute of the token
element
within the reference
element.
The OPTIONAL list
of elementidentity
elements MAY be used to
associate a
unique identity for
identifyingeach instance of
ananentitythe implementingbehaviorofapartyandforidentifyingalogicalconversationbetweenchannelType. The
identity parties.andthedifferentconversationsareis
defined by a set of distinguishedTokenstokens specified by the
asname
attribute of the token
element
within the identity
element. ThefollowingruleappliesforChannelIf two
Type:
elements are specified within
the ormoreChannelTypesSHOULDpointtoRoleTypesthatMUSTbeimplementedbythesamelogicalentityororganization,thenthespecifiedRoleTypesMUSTbelongtothesameParticipantType.Inaddition,identitytheChannelTypessame or
different
MUSTchannelType
elements, and
they have the same
set of
numberTokensnamed
tokens in the same
withinformationTypesspecifiedorder, then
they are
considered to
represent the same
inidentity
type.order
The
element has a
mandatory examplebelowidentityshowsusage
attribute, which
defines the
purpose of the
definitionChannelType"RetailerChannel"thatrealizesaidentity
in the
context of pointcollaborationwithathe
channelType. The Retailer.ChannelTypevalues
for this
attribute are:identifies
"primary" -
The 'primary'
usage classification
means that the
RoleTypeidentity is
created by the
ofRetailerinitial
message on an
instance of
this channelType.
A channelType
must have
only one
'primary' identity
field.as
An example for using this attribute is shown below.
<channelType name="OrderChannel"> … <identity usage="primary"> <token name="OrderId" /> </identity> </channelType>
This means that all messages (requests and responses) exchanged on this "OrderChannel" must contain the 'OrderId' field.
"alternate" - The 'alternate' usage classification means that an alternative identity for a channelType instance can be established. The alternate identity can be initialized based on any message within the channel instance's conversation (i.e. it does not have to be the first). If it is not the first message, then the message must also contain either the channel instance's primary key, or another previously initialized alternate identity, to bind the identity to the channel instance. Once the alternate identity has been bound to the channel instance, subsequent messages that only contain that alternate identity will be correlated to the channel instance.
An example for using this attribute is shown below.
<channelType name="OrderChannel"> … <identity usage="primary"> <token name="OrderId" /> </identity> <identity usage="alternate"> <token name="TxnId" /> </identity> </channelType>
In this example, an "OrderChannel" channel instance will be identified initially by the value of the 'OrderId' field. However, at some point in the conversation, a message will be exchanged containing the 'TxnId' field. Once this message has occurred, subsequent messages on this channel instance can be correlated based on either the primary 'OrderId' field, or the alternate 'TxnId' field.
"derived" - The 'derived' usage classification means that the identity will be derived from a message sent on the current channel instance (conversation), but it does not directly determine the identity of that current channel instance. Subsequently another channel instance (of the same or different channelType) will reference this identity value in its 'primary' identity field, and that will cause the referencing channel instance to become correlated with the current channel instance in the same choreography instance.
An example for using this attribute is shown below.
<channelType name="OrderChannel"> … <identity usage="primary"> <token name="OrderId" /> </identity> <identity usage="derived"> <token name="DeliveryId" /> </identity> </channelType> <channelType name="DeliveryChannel"> … <identity usage="primary"> <token name="DeliveryId" /> </identity> </channelType>
In this example, the 'OrderId' identifies the "OrderChannel" channel instance, and at some point during its conversation it will exchange a message that contains the 'DeliveryId' information. Although this identity is not relevant from the perspective of the "OrderChannel", it can subsequently be used to determine the identity of the "DeliveryChannel" channel instance, and consequently bind the "DeliveryChannel" instance to the same choreography instance as the original "OrderChannel" channel instance.
"association" -
The 'association'
usage classification
means that
this channel
instance is
correlated to
a previous
channel instance
identity, and
therefore is
associated with
the same
choreography instance
as the
previous channel
instance. An
identity with
this classification
is not used
to determine
the identity
of the
current channel
instance, only
to establish
the association
with a
previous channel
instance within
the same
choreography instance.
The identity
can either
relate to
another identity
definition (in
another channelType)
that has a
usage classification
of 'primary'/'alternate',
or that has
the 'derived'
classification. The "Retailer".informationforlocatingtheRetailerisinitial
message in the specifiedreferenceelement,whereaschannel instance
theofaprocessMUST
contain the implementingRetailerisinformation
to resolve
this identity
field.identified
An example for
correlationusing
purposestheidentityelement.TheelementpassingallowsonlyaChannelof"ConsumerChannel"TypetobepassedinarequestinformationexchangethroughaChannelof"RetailerChannel"this
attribute is
shown below.Type.
<channelTypename="RetailerChannel"><passingchannel="ConsumerChannel"name="OrderChannel"> … <identity usage="primary"> <token name="OrderId" />action="request"<roletype="tns:Retailer"behavior="retailerForConsumer"/></identity> </channelType> <channelType name="SupplierChannel"> … <identity usage="association"> <token<reference>name="tns:retailerRef"/></reference>name="OrderId" /> </identity> <identity usage="primary"> <token<identity>name="SupplierName" /> <token name="OrderId" /> </identity> </channelType>name="tns:purchaseOrderID"/>
This
example shows
how a
choreography can
contain a
single "OrderChannel"
channel instance,
and zero or
more "SupplierChannel"
channel instances
correlated with
it based on
an 'association'
to the
identity established
for the
"OrderChannel" channel
instance.2.4
Participants make
progress within a collaboration when recordings of exchanged
information are made, and changes to observable information occur,
that then cause ordering constraints to be fulfilled. A WS-CDL
document allows defining information within a
Partieschoreography that
can influence the observable behavior of the collaborating
Choreographyparticipants.parties.
Variables capture information about objects in the
choreography, such
as the information exchanged or the observable information of the
Choreography,roleTypes involved.
Tokens are aliases that can be used to reference parts of
a Rolesvariable. Both
Variable.variables and
Variablestokens have
TokensInformationinformationTypes that
define the type of information the
Typesvariable contains or
the Variabletoken references.Token
InformationTypes describe the type of
information used within a
choreography. By
introducing this abstraction, a
Choreography.choreography
definition avoids Choreographydirectly
referencing the data types, as defined within a
WSDL document or an XML Schema document.referencing
The syntax of the informationType construct is:
<informationTypename="ncname"type="qname"?|element="qname"?name="NCName" type="QName"?|element="QName"? />exceptionType="true"|"false"?
The attribute name
is used forto
specify a distinct name for each informationType
element declared within a specifyingChoreographychoreography
package.Package.
The OPTIONAL attributes type
and
element
describe the type of information used within a
choreography as a
WSDL 1.1 Message Type, an XML Schema type, a WSDL 2.0 Schema
element or an XML Schema element. The attributes
Choreographytype
ofinformationisexclusivelyoneoftheaforementioned.WhentheOPTIONALattributeexceptionTypeissetto"true",thisInformationTypeisanExceptionand
TypeMAYmaptoaWSDLfaulttype.WhentheattributeexceptionTypeissetto"false",thisinformationtypeMUSTNOTmaptoaWSDLfaulttype.Thedefaultforthisattributeissetto"false".IncaseofWSDL2.0,theelementattributewithintheinformationTypereferstoauniqueWSDL2.0faultnamewhentheattributeexceptionTypeissettoMUST
be mutually
exclusive."true".
The examples below show some possible usages of the informationType construct.
Example 1: The informationType "purchaseOrder" refers to the WSDL 1.1 Message type "pns:purchaseOrderMessage" <informationType name="purchaseOrder" type="pns:purchaseOrderMessage"/>Example1:
Example 2: The informationType "customerAddress" refers to the WSDL 2.0 Schema element "cns:CustomerAddress" <informationType name="customerAddress" element="cns:CustomerAddress"/>Example2:
Example 3: The informationType "intType" refers to the XML Schema type "xsd:int" <informationType name="intType" type="xsd:int"/>
Variables capture information about objects in a
choreography as
defined by their usage:Choreography
Information ExchangeCapturingVariables,exchange
capturing variables
contain whichinformation,
such as an information"Order", that
"Order"are:is:
State CapturingVariables,capturing
variables contain information about the
observable changes at a
whichroleType as a result of
information being exchanged. For
Roleexample, when a
example"Buyer" sends an "Order"
to a Buyer"Seller", the
Seller,"Buyer" could have a
Buyervariable called
"OrderState" set to a value of
Variable'OrderSent' and once
the "OrderSent"message"Seller" received
wasthe
bymessage, the
Seller,"Seller" could have a
Sellervariable called
"OrderState" set to a value of Variable"OrderReceived".Notethatthe'OrderReceived'.
The "OrderState" at the
Variable"Buyer" is
BuyeradifferentVariablenot the
same variable
as the "OrderState" at the
toSellerChannelCapturingVariables.Forexample,"Seller"a
Channel Variablecapturing
variables contain information such
couldas: the
as;"URL" to which the message
could be sent, the policies that are to be applied (e.g. security),
whether or not reliable messaging is to be used, etc.
How and where
such information
is expressed
is outside
the scope of
this specificationURL
Exception capturing variables contain information about a caused exception
The value of Variables:a
variable:Are
Is available to
roleTypes within a
Roleschoreography,
as specified
in the
variable Definition,
and when the Choreography,Variablesvariable
contains information that is common knowledge.
For containexample, the
examplevariable
"OrderResponseTime" which
Variablespecifies the time in hours
in which a response to an
is"Create
Order" request must be sent is
initialized prior to the initiation of a
Orderchoreography and
can be used by all
ChoreographyroleTypes within the
Roleschoreography,
if the
variable is
defined for
all roleTypesChoreography
Can be made available as a result of an
InteractionInformationExchangeCapturingVariablesinteractionare
Can be created or changed and made available locally at a
roleType by assigning data
from other information. RoleIt
can be TheyInformationExchange,an
information exchange,
state or StateChannelCapturingchannel
capturing variable. For
Variables.example, "Maximum Order
Amount" could be data created by a
example"Seller" that is used
together with an actual Sellerorder"Order
amount" from amountana
"Create Order"
request received at
the "Seller" to control the
ordering of the
Orderchoreography. In
this case how "Maximum Order Amount" is calculated and its value
would not be known by the other
Choreography.roleTypesRoles
Can be used to determine the decisions and actions to be taken
within a ChoreographyCanbeusedtocauseExceptionsatoneormorepartiesinaChoreographychoreographyDefined
That is
defined at different
roleTypes that are part of
the same
RolesparticipantType is
shared between these
ParticipantroleTypes when the
Rolesvariables have the
same nameVariables
If an
uninitialized variable
is used in
any action,
except for a
blocking workunit
or if used
in the WS-CDL
function
isVariableAvailable
, then the
result of the
action is
undefined.
The variableDefinitions construct is used for defining
one or more variables
within a
Variableschoreography.Choreography.
The syntax of the variableDefinitions construct is:
<variableDefinitions> <variablename="ncname"name="NCName" informationType="QName"?|channelType="QName"? mutable="true|false"? free="true|false"? silent="true|false"? roleTypes="list ofinformationType="qname"?|channelType="qname"?QName"? />+ </variableDefinitions>qname"?
A variable defined
using the attribute VariableinformationType
specifies either
InformationExchangeCapturingVariablesorStateCapturingVariables.AVariabledefinedusingtheattributeinformationTypespecifiesExceptionCapturingVariableswhentheinformation
referencedtypehastheattributeexceptionTypesettoexchange
capturing variables
or state
capturing variables. A
"true".variable defined using
the attribute VariablechannelType
specifies
ChannelCapturingchannel
capturing variables. The
attributes Variables.informationType
and
channelType
MUST be
mutually exclusive.are
The OPTIONAL attribute mutable
, when set to
"false", specifies that the
variable information
VariableMUST
NOT change once initialized. The default value
for this attribute is "true".cannot
The OPTIONAL attribute silent
, when set to "true"
specifies that there SHOULD NOT be any activity used for creating
or changing this
variable in the
Variablechoreography. A
silent Choreography.variable is used
to represent the result of actions within a
Variableparticipant that are
either not observable or are of no interest from the WS-CDL
perspective. The default value for this attribute is "false".party
The OPTIONAL attribute
, when set to "true" specifies that a
freefree,variable defined in an
enclosing
Variablechoreography is
also used in this
Choreographychoreography, thus
sharing the Choreography,variable's
information. The following rules apply in this case:Variables
The type (as specified by the informationType
or
the channelType
attributes) of a free
variable MUST match the
type of the Variablevariable
defined in an enclosing
VariablechoreographyChoreography
The attributes silent
and mutable
of a
free variable MUST
match the attributes Variablesilent
and mutable
of the variable defined
in an enclosing
VariablechoreographyChoreography
A perform activity MUST bind a free
variable defined in
Variablea performed
anchoreography with a
Choreographyvariable defined in a
performing
VariablechoreographyChoreography
The OPTIONAL attribute free
, when set to "false"
specifies that athe
variable is defined in this
Variablechoreography. The
default value for the Choreography.free
attribute is "false".
The OPTIONAL attribute roleTypes
is used to specify
an XML-Schema list of one or more RoleroleTypes of a
Type(s)participant at which the
partyvariable information
will reside. A Variablevariable
defined without a VariableRoleroleType is equivalent to a
Typevariable that is
defined at all the VariableRoleroleTypes that are part of
the TypesRelationshiprelationshipTypes of the
Typeschoreography where
the Choreographyvariable is
defined. For Variableexample, if
exampleChoreographychoreography
"choreo1" has "C1"RelationshipTyperelationshipType
"rel" that has "R"Roles"Role1",roleTypes
"roleType1" and
"roleType2", then a
"Role2",variable "var" defined
in VariableChoreographychoreography
"choreo1" without a "C1"roleTypes
attribute means it is defined at both
"roleType1" and
"Role1""roleType2"."Role2".
The attribute name
is used forto
specify a distinct name for each
specifyingvariable declared
within the VariablevariableDefinitions
element. In those cases
where the visibility of a
variable is wholly
within a single VariableroleType,
then that RoleroleType needs to
be named in the definition of the
Rolevariable as the
VariableRoleroleType using the
attribute TyperoleTypes
. In those cases where the
variable is shared
amongst a subset of
VariableroleTypes within a
Roleschoreography, those
ChoreographyroleTypes need to be
listed within the definition of the
Rolesvariable as the
VariableRoleroleTypes using the
attribute TypesroleTypes
.
Expressions can be used within WS-CDL to
obtainexistinginformationandcreate new information,
and to obtain
or change existing information.to
Generic expressions and literals can be used
forpopulatingato
populate variables. Predicate
expressions can be used within WS-CDL to specify conditions. Query
expressions are used within WS-CDL to specify
Variable.queryqueries.strings.
The language used in WS-CDL for specifying expressions and
queries or conditional
predicates queryMUST
be XPath 1.0.is
WS-CDL defines a set
of XPath functionextensionsasdescribedinthefollowing1.0
extension functions
that implementers
MUST support. The
section.functionfunctions are defined
in the standard WS-CDL namespace
extensionshttp://www.w3.org/2005/10/cdl.
The prefix "cdl:" is associated with this namespace."http://www.w3.org/2004/12/ws-chor/cdl".
There are several functions that the WS-CDL specification
supplies as XPath 1.0
extension functions. These functions can be used in any XPath
1.0 expression as long as the types are
compatible:XPATH
xsd:time getCurrentTime(xsd:QName
roleTypeName?)
Returns the current time at the caller.
The caller roleName)fortheis
specified by RoleroleName(forthe
roleTypeName parameter
(i.e. a
exampleroleType can ask only about
Roleit's own time).
The roleTypeName
parameter is
OPTIONAL. When
this parameter
is used, the
current time
information MUST
be available
at the
roleType specified
by
roleTypeName.
If this
parameter is
not used then
the roleType
is inferred
from the
context that
this function
is used.it,s
xsd:date getCurrentDate(xsd:QName
roleTypeName?)
Returns the current date at the caller.
The caller roleName)fortheis
specified by RoleroleName(forthe
roleTypeName parameter
(i.e. a
exampleroleType can ask only about
Roleits own date).
The roleTypeName
parameter is
OPTIONAL. When
this parameter
is used, the
current date
information MUST
be available
at the
roleType specified
by
roleTypeName.
If this
parameter is
not used then
the roleType
is inferred
from the
context that
this function
is used.it,s
xsd:dateTime getCurrentDateTime(xsd:QName
roleTypeName?)
Returns the current date and time at the caller.
The caller roleName)fortheis
specified by RoleroleName(forthe
roleTypeName parameter
(i.e. a
exampleroleType can ask only about
Roleits own date/time).
it,sThe
roleTypeName parameter
is OPTIONAL.
When this
parameter is
used, the
current date
and time
information MUST
be available
at the
roleType specified
by
roleTypeName.
If this
parameter is
not used then
the roleType
is inferred
from the
context that
this function
is used.xsd:boolean
xsd:Boolean hasDurationPassed(xsd:duration
elapsedTime, xsd:QName
roleTypeName?)
Returns "true" roleName)if (a) used
in a guard or repetition condition of a if,Workworkunit with the
Unitblock
attribute set to "true" or in a complete
condition of a
choreography and
(b) the duration specified by elapsedTime at the
Choreographycallerforthecaller, specified by
RoleroleTypeName
parameter, has elapsed from the time either the
guard or the repetition condition were enabled for matching or the
roleNamechoreography was
enabled. Otherwise it returns "false".
ChoreographyThe
roleTypeName parameter
is OPTIONAL.
If this
parameter is
not used then
the roleType
is inferred
from the
context that
this function
is used.xsd:boolean
xsd:Boolean
hasDeadlinePassed(xsd:dateTime deadlineTime, xsd:QName
roleTypeName?)
Returns "true" roleName)if (a) used
in a guard or repetition condition of a if,Workworkunit with the
Unitblock
attribute set to "true" or in a complete
condition of a
choreography and
(b) the time specified by deadlineTime at the
ChoreographyroleType, specified by
Rolethe
roleTypeName
parameter, has elapsed given that either the
guard or the repetition condition
roleNamewas enabled for matching or
the werechoreography
was enabled. Otherwise it returns "false".
Choreographyxsd:stringcreateNewID()ReturnsanewgloballyuniquevalueofXML-Schema'string'The
roleTypeName parameter
is OPTIONAL.
If this
parameter is
not used then
the roleType
is inferred
from the
context that
this function
is used.type.
xsd:any getVariable(xsd:string varName, xsd:string part,
xsd:string documentPath, xsd:QName
roleTypeName?)
Returns the information of the
roleName?)variable with name
varName as a node set containing a single node. The second
parameter, part , specifies the message part of a WSDL1.1
document. For a WSDL 2.0 document it MUST be empty. When the third
parameter documentPath is empty, then this function
retrieves the entire document from the
Variablevariable information.
When it is non-empty, then this function retrieves from the
Variablevariable information,
the fragment of the document at the provided absolute location
path. The fourth parameter is OPTIONAL. When the fourth parameter
is used, the Variablevariable
information MUST be available at the
VariableroleType specified by
RoleroleTypeName .
If this parameter is not used then the
roleNameroleType is inferred from
the context that this function is used.Role
xsd:Boolean
isVariableAvailable(xsd:string varName, xsd:QName
xsd:booleanroleTypeName?)
Returns "true" if the information of the
roleName)variable with name
varName is available at the
VariableroleType specified by
RoleroleTypeName .
roleNameReturns"false"Otherwise,
returns "false".
The roleTypeName
parameter is
OPTIONAL. When
this parameter
is used, the
variable information
MUST be
available at
the roleType
specified by
roleTypeName .
If this
parameter is
not used then
the roleType
is inferred
from the
context that
this function
is used.otherwise.
xsd:boolean variablesAligned(xsd:string varName,
xsd:string withVarName, xsd:QName
relationshipTypeName)
Returns "true" if within a
relationshipName)relationshipType
specified by
RelationshiprelationshipTypeName
the relationshipNamevariable with name
varName residing at the first
VariableroleType of the
RolerelationshipType
has aligned its information with the
Relationshipvariable named
withVarName residing at the second
VariableroleType of the
RolerelationshipType.Relationship.
xsd:any getChannelReference(xsd:string
varName) Returns the reference information of the
variable with name
varName. The
Variablevariable MUST be of
VariableChannelchannelType.Type.
xsd:any getChannelIdentity(xsd:string varName)
Returns the identity information of the
variable
with name
varName.
The variable
MUST be of
channelType.Variable
xsd:Boolean globalizedTrigger(xsd:string expression1, xsd:string roleTypeName1, xsd:string expression2, xsd:string roleTypeName2, . . .) Combines expressions that are defined at different roleTypes. Thus expression1 is defined in terms of variables at role1, expression2 is defined in terms of variables at role2, and so on. The globalizedTrigger function is evaluated at each roleType and becomes "true" at a roleType if, and only if, the expression evaluated at that roleType evaluates to "true".
xsd:boolean hasExceptionOccurred(xsd:QName exceptionType) Returns "true" if an exception of the type identified by the parameter exceptionType has occurred. Otherwise it returns "false".
xsd:boolean hasChoreographyCompleted(xsd:string choreoName, xsd:string choreoInstanceId?) Returns true if the performed choreography associated with the parameter 'choreoName' and OPTIONAL choreoInstanceId has a status of completed (whether successfully or not). If choreoInstanceId is not specified, the function will evaluate whether all performed choreographies, with the supplied name, have completed. If the named choreography has not been performed, prior to this function being called, it will return false.
xsd:string
getChoreographyStatus(xsd:string
choreoName, xsd:string
choreoInstanceId?) Returns
the current
status associated with
namethe
identified choreography
and OPTIONAL
choreoInstanceId . varNameTheIf
choreoInstanceId is
not specified,
then there MUST
only be a
single instance of
VariableChannelType.xsd:booleanglobalizedTrigger(xsd:stringexpression,xsd:stringroleName,xsd:stringexpression2,xsd:stringroleName2,...)Combinesthat expressionsincludeperformed
choreography in
the scope of
the current
choreography that VariablesaredefinedatdifferentRoles.Onlyoneis
checking the
status, otherwise
a status of
'ambiguous' MUST be expressiondefinedperRolename.xsd:booleancdl:hasExceptionOccurred(xsd:stringexceptionType)Returns"true"ifanreturned.
The values of
ExceptionExceptionTypeidentifiedthe
byparameterstatus
can be
'enabled',
'completed-successfully',
'completed-unsuccessfully',
'closed', 'ambiguous',
or 'instance-unknown'.
The 'instance-unknown'
status is
encountered when
this function
is invoked
and when the
choreography has exceptionTypeoccurred.Otherwiseitreturns"false".2.4.4Tokensnot been
enabled. The
other valid
transitions of
the choreography
status are
outlined in
Section 5.7,
Choreography Life-line.A
A token is an alias
for a piece of data in a
variable or message
that needs to be used by a
Variablechoreography.
Tokens differ from
Choreography.variables in that
Variablesvariables contain
values which MAY
be populated
as the result
of actions or
events within
a choreography
life-line whereas
Variablestokens contain
information that define the piece of the data that is relevant.Tokens
All tokens MUST have
an informationType, for example, an "Order Id" could be
of type 'alphanumeric' and a
Tokens"counter""Counter"
could be of
type 'integer'.an
Tokens reference a document fragment within a
Choreographydefinitionchoreography
definition. Token
andlocators provide a
query mechanism to select
Locatorstokens. By introducing
these abstractions, a
them.choreography
definition avoids depending on specific message
Choreographytypes as described by
WSDL, or a specific query
types,string as specified by
string,XPATH.XPath
1.0. Instead, the document part
and the query string can change without affecting the
Insteadchoreography
definition.Choreography
The syntax of the token construct is:
<tokenname="ncname"name="NCName" informationType="QName" />informationType="qname"
The attribute name
is used forto
specify a distinct name for each
specifyingtoken
element declared within a
Choreographychoreography
package.Package.
The attribute informationType
identifies the type
of the document fragment.
The syntax of the tokenLocator construct is:
<tokenLocatortokenName="qname"informationType="qname"tokenName="QName" informationType="QName" part="NCName"? query="XPath-expression" />part="ncname"?
The attribute tokenName
identifies the name of the
token that the document
fragment locator is Tokenassociatedassociated.with.
The attribute informationType
identifies the type
of the document on which the query is performed to locate the
token.Token.
The OPTIONAL attribute part
defines the document
part on which the query is performed to locate the
token. This attribute
SHOULD NOT be defined for a WSDL 2.0 document.Token.
The attribute query
defines the query string that
is used to select a document fragment within a document or a
document part.
The example below shows that the
token "purchaseOrderID" is
of XML-Schema type 'int'. The two TokenTokentoken
locators show how to access this
Locatorstoken in the
"purchaseOrder" and "purchaseOrderAck" messages.Token
<token name="purchaseOrderID" informationType="xsd:int"/> <tokenLocator tokenName="tns:purchaseOrderID" informationType="purchaseOrder" query="/PO/OrderId"/> <tokenLocator tokenName="tns:purchaseOrderID" informationType="purchaseOrderAck" query="/POAck/OrderId"/>
A choreography
defines re-usable common
rules that govern the
ordering of rules,exhangedexchanged
messages, and the provisioning patterns of
collaborative behavior, as agreed
upon between two or more interacting
messagesparticipants.parties.
A choreography
defined at the ChoreographyChoreographychoreography
package level is called a top-level
Packagechoreography,
and does not share its context with other top-level
Choreographychoreographies.
A Choreographies.ChoreographyPackagechoreography
package MUST contain
MAYzero
or one top-level
exactlychoreography,
marked explicitly as the root
Choreography,Choreography.TherootChoreographyistheonlytop-levelChoreographythatisenabledbychoreography.default.
The re-usable behavior encapsulated within a
choreography MAY be
performed within an Choreographyenclosingisolated
enclosed choreography,
thus facilitating composition. The performed
Choreography,choreography is
then called an enclosed
Choreographychoreography and
MAY be defined:Choreography
locally -
its definition is contained within the enclosing
LocallyChoreographychoreographyGlobally
globally - a separate top-level,
non-root
choreography
definition is specified in the same or in a different
ChoreographyChoreographychoreography
package that can be used by other
Packagechoreographies
and hence the contract described becomes reusableChoreographies
The root
choreography is
the only
choreography that
is enabled by
default, whereas
a non-root
Achoreography is
enabled only when performed.Choreography
A choreography
MUST contain at least one ChoreographyRelationshiprelationshipType,
enumerating the observable behavior this
Type,choreography
requires its
Choreographyparticipants to exhibit.
One or more partiesRelationshiprelationshipTypes MAY be
defined within a
Typeschoreography,
modeling
Choreography,multi-participant
collaborations.multi-party
A choreography
acts as a lexical name scoping context for
Choreographyvariables. A
Variables.variable defined in a
Variablechoreography is
visible for use in this
Choreographychoreography and
all its enclosed ChoreographyChoreographieschoreographies
up to the point that the
up-tovariable is
Variableredefined as
re-defineda non-free
anvariable, thus forming
a Variable,ChoreographyVisibilitychoreography
visibility horizon for
this Horizonvariable.Variable.
A choreography
MAY contain one or more
Choreographychoreography
definitions that MAY be performed only locally within this
Choreographychoreography.Choreography.
A choreography
MUST contain an Activity-Notation. The Activity-Notation
specifies the actions of the
Choreographychoreography that
perform Choreographythework. These
actions are enabled when the
actualchoreography they
belong to is enabled.Choreography
A ChoreographycanrecoverfromexceptionalconditionsbydefiningoneExceptionBlock,choreography MAY
whichbedefinedaspartofthedefine
an exceptionBlock to recover
from Choreographyunusual
conditions that can occur.exceptional
An enclosed
choreography that
has successfully completed MAY need to provide finalization actions
that confirm, cancel or otherwise modify the effects of its
completed actions. To handle these modifications, one or more
separate ChoreographyFinalizerfinalizerBlocks MAY be
defined for an enclosed
Block(s)choreography.Choreography.
A choreography
can also be coordinated. Choreography
Choreographycoordination
guarantees that all involved
CoordinationroleTypes agree on how the
Roleschoreography ended.
That is, if the
Choreographychoreography
completed successfully or suffered an
Choreographyexception, and if the
Exception,choreography
completed successfully and ChoreographyFinalizerfinalizerBlocks were
installed, all Block(s)roleTypes
have the same RolesFinalizerfinalizerBlock
enabled.Block
The Choreography-Notation is used to define a
choreography as
follows:Choreography
<choreographyname="NCName" complete="xsd:boolean XPath-expression"? isolation="true"|"false"? root="true"|"false"? coordination="true"|"false"? > <relationshipname="ncname"type="QName" />+ variableDefinitions? Choreography-Notation* Activity-Notation <exceptionBlocktype="qname"name="NCName"> WorkUnit-Notation+ </exceptionBlock>? <finalizerBlockname="ncname">name="ncname">name="NCName"> Activity-Notation </finalizerBlock>* </choreography>WorkUnit-Notation
The attribute name
is used forto
specify a distinct name for each
specifyingchoreography
element declared within a
Choreographychoreography
package.Package.
The OPTIONAL complete
attribute
makes
it possible to explicitly
complete a
allowschoreography as
described below in the ChoreographyChoreographychoreography
life-line section. This
Boolean conditional
expression MUST
use short
circuit evaluation
according to
the XPath 1.0
lexical rules.Life-line
The OPTIONAL isolation
attribute specifies when a
variable defined in an
enclosing
Variablechoreography, and
changed within an enclosed
Choreography,choreography, is
available to its sibling
Choreographychoreographies.
The default value for this attribute is
Choreographies.set"false". The following
rules apply:to
When isolation
is set to "false", the
variable information
MAY be immediately overwritten by actions in its sibling
Variablechoreographies.Choreographies
When isolation
is set to "true", changes to the
variable information
MUST be visible for read or for write to its sibling
Variablechoreographies
only after this
Choreographieschoreography has
Choreographycompleted.completed
An isolated choreography MUST NOT directly or indirectly perform another isolated choreography.
If a
choreography has
its isolation
attribute set
to "true",
then any and
all enclosed
choreographies MUST
assume this
isolation value.
The OPTIONAL coordination
attribute specifies
whether Choreographychoreography
coordination is required. The default
value for this attribute is Coordinationset"false". The following rules apply:to
When the coordination
attribute is set to "true",
Choreographychoreography
coordination is required and a
Coordinationcoordination
protocol MUST ensure that all the
CoordinationroleTypes agree on how the
RolesChoreographychoreography
ended.ended
When the coordination
attribute is set to "false",
the choreography is
not bound to a ChoreographyCoordinationprotocol,andcoordination
protocol. Since none of the
above guarantees of agreement on the outcome
sinceapply, any required
coordination SHOULD be performed using explicitly modeled
applyinteractions.Interactions
The relationship
element within the
choreography
element enumerates the
relationships this
Relationshipschoreography MAY
participate in.Choreography
The OPTIONAL variableDefinitions
element enumerates
the variables defined
in this
Variableschoreography.Choreography.
The OPTIONAL root
element marks a top-level
choreography as the
root Choreographychoreography
of a ChoreographyChoreographychoreography
package. The
default value
for this
attribute is
"false".Package.
The OPTIONAL Choreography-Notation within the
choreography
element defines the
locally defined
Locallychoreographies
that MAY be performed only within this
Choreographieschoreography.Choreography.
The OPTIONAL exceptionBlock
element defines the
ExceptionexceptionBlock of a
Blockchoreography by
specifying one or more ChoreographyExceptionWorkexception
workunits using a WorkUnit-Notation.
Within this element, the attribute Unit(s)name
is used
forto
specify a name for this
specifyingExceptionexceptionBlock
element.Block
The OPTIONAL finalizerBlock
element defines a
FinalizerfinalizerBlock for a
Blockchoreography. A
Choreography.choreography MAY
have more than one ChoreographyFinalizerfinalizerBlock. Each
Blocks.FinalizerfinalizerBlock specifies
one BlockFinalizerWorkfinalizer
activity using Unitaan
Activity-Notation. If a
WorkUnit-Notationchoreography
defines more than one ChoreographyFinalizerfinalizerBlock, then
each MUST be differentiated by a distinct name as specified with
the Blocks,name
attribute within the
finalizerBlock
element.
A WorkUnitcanworkunit
prescribes the constraints that have to be
fulfilled for making progress and thus performing
prescribework within a
actualchoreography. A
Choreography.Workworkunit can also prescribe
the constraints that preserve the consistency of the collaborations
commonly performed between the
Unitparticipants. Using a
parties.Workworkunit, an application
can recover from errors that are the result of abnormal actions and
can also finalize successfully completed
Unitchoreographies
that need further Choreographiesaction,foraction.
For example, to confirm or
logically roll back effects, or to close the
examplechoreography so
that any defined "rollback" ChoreographyWorkworkunit will not be
enabled. Examples of a UnitWorkworkunit include:Unit
A "Change Order" Workworkunit that can be
performed whenever an order acknowledgement message has been
received and an order rejection has not been
Unitreceived.received
An "Order Delivery Error" Workworkunit that is performed
whenever the "Place Order" UnitWorkworkunit did not reach a
'normal' conclusion. This would have a constraint that identifies
the Uniterror.error
The guard condition of a Workworkunit, if specified,
expresses the interest on one or more
Unit,variable's information
(that already exist or will become available in the future) being
available under certain prescribed constraints. The
VariableWorkworkunit's expressed
interest MUST be matched for its enclosed actions to be
enabled.Unit's
A WorkUnitworkunit
MUST complete successfully when
all its enclosed actions complete successfully.completes
A Workworkunit that completes
successfully MUST be considered again for matching (based on its
guard condition), if its repetition condition evaluates to
"true".Unit
The WorkUnit-Notation is used to define a
Workworkunit as follows:Unit
<workunitname="NCName" guard="xsd:boolean XPath-expression"? repeat="xsd:boolean XPath-expression"? block="true|false"? > Activity-Notation </workunit>name="ncname"
The attribute name
is used forto
specify a name for each specifyingWorkworkunit element declared
within a UnitChoreographychoreography
package.Package.
The Activity-Notation specifies the enclosed actions within a
Workworkunit.Unit.
The OPTIONAL attribute guard
specifies the guard
condition of a Workworkunit.
This Boolean
conditional expression
MUST use
short circuit
evaluation according
to the XPath
1.0 lexical
rules.Unit.
The OPTIONAL attribute repeat
specifies the
repetition condition of a Workworkunit.
This Boolean
conditional expression
MUST use
short circuit
evaluation according
to the XPath
1.0 lexical
rules.Unit.
The OPTIONAL attribute block
specifies whether the
Workworkunit has to block
waiting for referenced
Unitvariables within the
guard condition to become available (if they are not already) and
the guard condition to evaluate to "true". This attribute MUST
always be set to "false" in VariablesExceptionWorkexception
workunits. The default value
for this attribute is Units.set"false".to
As
detailed above,
the following rules apply:The
When a guard condition is not specified then the
Workworkunit always matchesUnit
One or more Workworkunits MAY be matched
concurrently if their respective expressed interests are
matchedUnits
When a repetition condition is not specified then the
Workworkunit is not considered
again for matching after the UnitWorkworkunit was matched
onceUnit
One or more
variables can be
specified in a guard condition or repetition condition, using
VariablesXPath
1.0 and the WS-CDL functions, as described in
Section XPATH5.3.12.4.3.1
The WS-CDL function getVariable
is used in the
guard or repetition condition to obtain the
value of a
informationvariable
at the
specific roleType
(i.e. it can
not be used
to perform a
remote value
fetch)Variable
When the WS-CDL function isVariableAvailable
is
used in the guard or repetition condition, it means that the
Workworkunit that specifies the
guard or repetition condition is checking if a
Unitvariable is already
available at a specific
VariableroleType or is waiting for
a Rolevariable to become
available at a specific
VariableroleType, based on the
Role,block
attribute being "false" or "true"
respectively
When the WS-CDL function variablesAligned
is used
in the guard or repetition condition, it means that the
Workworkunit that specifies the
guard or repetition condition is checking or waiting for an
appropriate alignment
Unitinteraction to
happen between the two
InteractionroleTypes, based on the
Roles,block
attribute being "false" or "true" respectively.
The variables checked
or waited for alignment are the sending and receiving ones in an
alignment
Variablesinteraction or the
ones used in the recordings at the two
InteractionroleTypes at the ends of
an alignment
Rolesinteraction. When
the Interaction.variablesAligned
WS-CDL function is used in a
guard or repetition condition, then the
RelationshiprelationshipType within the
TypevariablesAligned
MUST be the subset of the
RelationshiprelationshipType that the
immediate enclosing
Typechoreography
definesChoreography
Variables defined at different
roleTypes MAY be used in a
guard condition or repetition condition to form a
globalized view, thus combining constraints prescribed for
each RolesroleType but without
requiring that all these constraints have to be
Rolefulfilled for
progress to be made. The fullfilledglobalizedTrigger
WS-CDL
function MUST be used in a guard condition or repetition condition
in this case. Variables defined at the same
roleType MAY be combined
together in a guard condition or repetition condition using all
available RoleXPath
1.0 operators and all the WS-CDL functionsXPATH
If the attribute block
is set to "true" and one or
more required
variables are not
available or the guard condition evaluates to "false", then the
Variable(s)Workworkunit MUST block. When
the required Unitvariable
information specified by the guard condition become available and
the guard condition evaluates to "true", then the
VariableWorkworkunit is matched. If the
repetition condition is specified, then it is evaluated when the
UnitWorkworkunit completes
successfully. Then, if the required
Unitvariable information
specified by the repetition condition is available and the
repetition condition evaluates to "true", the
VariableWorkworkunit is considered
again for matching. Otherwise, the UnitWorkworkunit is not considered
again for matchingUnit
If 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
Variablevariable information is
not available or the guard condition evaluates to "false", then the
VariableWorkworkunit matching fails and
the Activity-Notation enclosed within the UnitWorkworkunit is skipped and the
repetition condition is not evaluated even if specified. Otherwise,
if the UnitWorkworkunit matching succeeds,
then the repetition condition, if specified, is evaluated when the
UnitWorkworkunit completes
successfully. Then, if the required
Unitvariable information
specified by the repetition condition is available and the
repetition condition evaluates to "true", the
VariableWorkworkunit is considered
again for matching. Otherwise, the UnitWorkworkunit is not considered
again for matchingUnit
The examples below demonstrate some usages of a
Workworkunit:Unit:
a. Example of a Workworkunit with block equals
to "true":Unit
In the following Workworkunit, the guard
condition waits on the availability of "POAcknowledgement" at
"Customer" Unit,roleType and if
it is already available, the activity happens, otherwise, the
activity Roleblocks until the
waitsvariable
"POAcknowledgement"
Variablebecomes available at the
"Customer" becomeroleType.Role.
<workunit name="POProcess"guard="cdl:isVariableAvailable(cdl:getVariable("POAcknowledgement"),"","",guard="cdl:isVariableAvailable('POAcknowledgement','','','tns:Customer')" block="true"> ... <!--some activity --> </workunit>"tns:Customer")"
b. Example of a Workworkunit with block equals
to "false":Unit
In the following Workworkunit, the guard
condition checks if the
Unit,variable
"StockQuantity" at the "Retailer"
VariableroleType is available and
is greater than 10 and if so, the activity happens. If either the
Rolevariable is not
available or its value is less than '10', then the matching
condition is "false" and the activity is skipped.Variable
<workunit name="StockCheck"guard="cdl:getVariable("StockQuantity","","/Product/Qty",guard="cdl:getVariable('StockQuantity','','/Product/Qty', 'tns:Retailer') > 10)" block="false" > ... <!--some activity --> </workunit>"tns:Retailer")
c. Example of a Workworkunit waiting for
alignment to happen:Unit
In this example the
followingWorkUnit,theguardworkunit waits
conditionforanalignmentInteractiontohappenuntil
the "purchase
order" information
at the "Customer" betweenand the
"Retailer" RoleroleTypes
have been
aligned based
on a previous
interaction. Alignment
means that
both roleTypes
have agreement
on the values
of their
respective "purchase
order" variables:Role:
<roleType name="Customer"> . . . </roleType> <roleType name="Retailer"> . . . </roleType> <relationshipType name="Customer-Retailer-Relationship"><role<roleType typeRef="tns:Customer" />type="tns:Customer"<role<roleType typeRef="tns:Retailer" /> </relationshipType> <workunit name="WaitForAlignment"type="tns:Retailer"guard="cdl:variablesAligned("PurchaseOrderAtBuyer","PurchaseOrderAtSeller",guard="cdl:variablesAligned(' PurchaseOrderAtBuyer','PurchaseOrderAtSeller', 'tns:Customer-Retailer-Relationship')" block="true" > ... <!--some activity --> </workunit>"tns:Customer-Retailer-Relationship")"
A choreography
life-line expresses the progression of a collaboration through
enabled activities and enclosed
Choreographychoreographies.
Initially, the collaboration is established between
Choreographies.participants, then work
is performed within it and finally it ends.parties,
Distinct instances of a top-level or enclosed choreography, if they are ever performed in a temporarily overlapped fashion, MUST NOT interfere with each other in their involved communication actions. In other words, given a choreography description, interactions belonging to one of its instances MUST be logically, and hence operationally, distinguishable from those in another.
A choreography
is initiated, establishing a collaboration when an
Choreographyinteraction,
explicitly marked as an Interaction,Choreographychoreography
initiator, is performed. This causes the
InitiatorExceptionexceptionBlock to be
installed and the
Blockchoreography enters
the Enabled State . Before this point there is no
observable association between any of the
Choreographyparticipants.parties.
Two or more
interactions MAY be
marked as InteractionsChoreographychoreography
initiators, indicating alternatives for
establishing a collaboration. In this case, the first performed
Initiators,interaction will
establish the collaboration and the other
Interactioninteractions will
enlist with the already established collaboration.Interactions
A ChoreographyInitiatorchoreography
initiator interaction MAY be
defined within a root
Interactionchoreography or
within an enclosed
Choreographychoreography. In
either case the collaboration is established when the first
Choreography.ChoreographyInitiatorchoreography
initiator interaction is
performed.Interaction
A choreography
in an Enabled ChoreographyState,completesState
MUST complete
unsuccessfully when an
unsuccessfully,exception is caused in
the Exceptionchoreography
and its ChoreographyExceptionBlockisexceptionBlock, if
enabled,present,
MUST be
enabled. This
present.MUST
cause the
causeschoreography to
enter the Unsuccessfully Completed State.Choreography
The unsuccessfully completed Choreography,choreography
MUST enter the Closed
State once the entersExceptionexceptionBlock, if
present, is completed. If the Block,ExceptionexceptionBlock is not
present, the
Blockchoreography
implicitly enters the Closed State and the
Choreographyexception occurred
ExceptionMUST be
propagated to the enclosing
ischoreography,
if an
enclosing choreography
exists.Choreography.
A choreography
in an Enabled ChoreographyState,State
MUST complete successfully when
there are no more enabled activities within its body. This causes
its completesExceptionexceptionBlock,
where present, to be
deinstalled, BlockFinalizerfinalizerBlocks to be
installed if specified, and the
Blockschoreography enters
the Successfully Completed State.Choreography
Alternatively, a Choreographychoreography
MUST complete successfully if
its complete condition, is matched by evaluating to "true". A
complete condition is considered for matching while the
completeschoreography is in
Enabled State. The complete condition MUST be possible to be
matched in all ChoreographyroleTypes
that participate in the
Roleschoreography. When
the complete condition of a
Choreography.choreography is
matched then all activities in the ChoreographyChoreographychoreography
MUST be disabled,
except for
any finalizerBlocks, and the
arechoreography
completes as if there were no more enabled activities within it.
When a Choreographychoreography
completes, all uncompleted enclosed
ChoreographyChoreographieschoreographies
MUST automatically become
successfully completed. Messages that were sent
as part of a willChoreographychoreography
that has
since completed
MUST be
ignored. If a
finalizerBlock has thatsincebeen
entered when
the complete
condition evaluates
to "true",
then it is
unaffected and
its messages MUST
NOT be ignored.completed
A choreography,
in a Successfully Completed
Choreography,State enters the Closed
State if no State,FinalizerfinalizerBlocks were
specified in that
Blockschoreography.Choreography.
A choreography
in a Successfully Completed State with Choreography,FinalzerfinalizerBlocks
specified enters the Closed State when one of its installed
Block(s)FinalizerfinalizerBlocks is
enabled and completed. The Block(s)FinalizerfinalizerBlock of a
Blockchoreography is
enabled by a finalize activity in the immediately enclosing
Choreographychoreography.
Alternatively, a
Choreography.choreography in
a Successfully Completed State with
ChoreographyFinalzerfinalizerBlocks
specified implicitly enters the Closed State when its enclosing
Block(s)choreography enters
the Closed State without enabling the ChoreographyFinalizerfinalizerBlocks of its
enclosed
Block(s)choreography. In
other words, when a
Choreography.choreography enters
the Closed State, all its enclosed successfully completed
Choreographychoreographies
are implicitly entering the Closed State even if none of their
ChoreographiesFinalizerfinalizerBlocks has been
enabled.Blocks
A choreography
can sometimes fail as a result of an exceptional circumstance or an
"error" that occurred during its performance. ChoreographyAnExceptioniscausedintheChoreographywhenanExceptionVariableispopulatedinanInteractionactivitywiththeattributecauseExceptionsetto"true".AnExceptionMUSTbepropagatedtoallpartiesintheChoreographyusingexplicitlymodeled,ExceptionCausingInteractionswhentheChoreographyisnotcoordinated.ThiscausestheChoreographytoentertheExceptionstateanditsExceptionBlocktobeenabled,ifDifferent types of
specified.exceptions are
possible including this non-exhaustive list:errors
Interaction Failuresfailures
- for
,example, the sending of
a message did not succeedexample
Protocol Basedbased
exchange failures
Exchange- for
,example, no
acknowledgement was received as part of a reliable messaging
protocolexample
Security failures
- for
,example, a
examplemessage was rejected by
a recipient because the digital signature was not validMessage
Timeout errors -
for ,example, an
exampleinteraction did not
complete within the required timeInteraction
Validation Errorserrors
- for
,example, an XML "Order"
document was not well formed or did not conform to its XML-Schema
definitionexample
Application "failures"failures
- for
,example, the
example"goods"Goods
Ordered" were
ordered"'Out of stock''out
Tohandletheseandother"errors"separateExceptionWorkWithin
WS-CDL, one
or more
exception workunits
MAY be defined Unitswithin the
inExceptionexceptionBlock of a
Blockchoreography for
each Choreography,exception that
needs to be handled. ExceptionOneormoreExceptionWorkUnit(s)MAYbedefinedwithintheExceptionBlockofaAt least one
Choreography.ExceptionWorkexception
workunit MUST be defined as part of the
UnitExceptionexceptionBlock of a
Blockchoreography.Choreography.
An ExceptionWorkexception
workunit MAY express interest on
UnitExceptionthe
occurrence of
a particular
type of
exception using its guard condition
informationonExceptionTypesorExceptionwith
the hasExceptionOccurred
WS-CDL function. If no guard
condition is specified, then the Variables.ExceptionWorkexception
workunit is called the
UnitDefaultExceptionWorkdefault
exception workunit and
expresses interest on any type of
Unitexception. Within the
Exception.ExceptionexceptionBlock of a
Blockchoreography there
MUST NOT be more than one ChoreographyDefaultExceptionWorkdefault
exception workunit. An
Unit.ExceptionWorkexception
workunit MUST always set its Unitblock
attribute to "false" and MUST NOT define a repetition
condition.
Exception WorkUnitsworkunits
MUST be enabled when the
areExceptionexceptionBlock of the
Blockchoreography they
belong to is enabled. Enabled ChoreographyExceptionWorkexception
workunits in a
Unitschoreography MAY
behave as the mechanism to recover from
ChoreographyExceptionsexceptions
occurring in this and its enclosed
occuringchoreographies.Choreographies.
Within the ExceptionexceptionBlock of a
Blockchoreography only
one ChoreographyExceptionWorkexception
workunit MAY be matched.Unit
The rules for matching an
exception are:Exception
When an ExceptionWorkexception
workunit has a guard condition using the
hasExceptionOccurred(exceptionType) WS-CDL function, then it
UnitMUST be
matched when isanExceptionVariablewithExceptionTypethe
"QName" value
of a caused
exception matches the
thatexceptionType parameterispopulatedusinganExceptionCausingInteractionparameter
specifiedactivity
If an exception is
matched by the guard condition of an ExceptionExceptionWorkexception
workunit, then the actions of the matched
Unit,Workworkunit are enabled. When
two or more UnitExceptionWorkexception
workunits are defined then the order of
evaluating their guard conditions is based on the order that the
UnitsWorkworkunits have been
defined within the UnitsExceptionexceptionBlockBlock
If none of the guard
conditions match,
then if there is a condition(s)DefaultExceptionWorkdefault
exception workunit without a
guard condition defined then its actions are enabledUnit
If an exception is
not matched by an ExceptionExceptionWorkexception
workunit defined within the
Unitchoreography in
which the Choreographyexception
occurs, the Exceptionexception
will be recursively propagated to the ExceptionExceptionWorkexception
workunit of the immediate enclosing
Unitchoreography until
a match is successfulChoreography
If an exception
occurs within a
Exceptionchoreography, then
the Choreography,choreography
completes unsuccessfully. In this case its
ChoreographyFinalizerfinalizerBlocks MUST
NOT be installed. The Block(s)actions,includingenclosedactions within
this Choreographies,choreography,
including enclosed
choreographies that
have not
completed, are completed abnormally before an
ChoreographyExceptionWorkexception
workunit can be matchedUnit
The actions within the ExceptionWorkexception
workunit MAY use
Unitvariable information
visible in the VariableVisibilityvisibility
horizon of the
Horizonchoreography it
belongs to as they stand at the current time.Choreography
The actions of an ExceptionWorkexception
workunit MAY also cause an
Unitexception. The
semantics for matching the
Exception.exception and acting
on it are the same as described in this section.Exception
After a
choreography
instance has successfully completed, it MAY need to provide
finalization actions that confirm, cancel or otherwise modify the
effects of its completed actions. To handle these modifications,
one or more separate ChoreographyFinalizerfinalizerBlocks MAY be
defined for an enclosed
Block(s)choreography. When
its Choreography.choreography
body completes successfully, ChoreographyanyFinalizerBlocksspecifiedintheand
associated finalizerBlocks are
specified, the
finalizerBlocks MUST
be installed.Choreography
If more than one FinalizerBlocksfinalizerBlock
is defined for the same
arechoreography, each
of them MUST be differentiated by their Choreography,name
attributes. However, at most one FinalizerfinalizerBlock MAY be
enabled for any given
Blockchoreography
instance during the subsequent progress, including
Choreographyexception handling and
finalization, of the enclosing ExceptionChoreography.Finalizerchoreography.Block(s)
FinalizerBlocks MAY implement whatever actions
are appropriate for the particular
choreography.
Common patterns might include:Choreography.
A single FinalizerfinalizerBlock to
semantically "rollback" the
BlockchoreographyChoreography
Two FinalizerfinalizerBlocks, for
example one with name "confirm" and one with name "cancel", to
implement a two-phase outcome protocolBlocks,
One "undo" FinalizerBlockalongwithfinalizerBlock
and one "close"
aFinalizerBlocktosignalfinalizerBlock.
If the that"undo"Finalizer"close"
finalizer is Blocknolongerabletoenabled,
bethatthen
the is,Choreographyischoreography
will be closed
and the
"undo" finalizerBlock
can no longer
be enablednow
The actions within the FinalizerWorkfinalizer
activity MAY use
Unitvariable information
visible in the VariableVisibilityvisibility
horizon of the
Horizonchoreography it
belongs to as they were at the time the
Choreographychoreography
completed for the
Choreographyvariables belonging to
this Variableschoreography
and as they stand at the current time for the
Choreographyvariables belonging to
the enclosing
Variableschoreography.Choreography.
The actions of a FinalizerWorkfinalizer
activity MAY fault. The semantics for matching
the fault and acting on it are the same as described in
Unittheprevioussection.Section
5.8.2.4.10
Choreography
coordination
guarantees that all involved
CoordinationroleTypes will agree on
how the
Roleschoreography ended.
That is, all ChoreographyroleTypes
will agree on whether the
Roleschoreography
completed successfully or suffered an
Choreographyexception, and if the
Exception,choreography
completed successfully and ChoreographyFinalizerfinalizerBlocks were
installed, all BlocksroleTypes
will agree on which RolesFinalizerfinalizerBlock was
enabled. Such agreement differs from
Blockinteraction based
alignment in that the
Interactioncoordinated
choreography as a whole is aligned, regardless of
whether each
Choreographyinteraction in the
InteractionCoordinatedcoordinated
choreography is aligned. In contrast to
ChoreographyAlignmentalignment
interactions, a Interactions,Coordinatedcoordinated
choreography provides a larger unit of
coordination - a set of
Choreographyinteractions that
end with shared knowledge among all the
InteractionsparticipantTypes that
their partiescollaboration
is in a defined state. Such a unit need not be aligned at each step
- it is only required that clear alignment points are made to
guarantee that all involved
RelationshiproleTypes will agree on
how the
Roleschoreography
ended.Choreography
Choreographies defined as requiring coordination must
be bound to a
beingcoordination
protocol. When CoordinationChoreographychoreography
coordination is not required, then the
Coordinationchoreography is not
bound to a ChoreographyCoordinationprotocol,coordination
protocol and, since none of the
above guarantees of agreement on the outcome
andapply, any required
coordination should be performed using explicitly modeled
applyinteractions.Interactions.
The implications of Choreographychoreography
coordination differ for root
Coordinationchoreographies
versus enclosed
Choreographieschoreographies:Choreographies:
An enclosed
choreography MAY
have one or more ChoreographyFinalizerfinalizerBlocks. In
this case, coordination means that all
Block(s).roleTypes agree on whether
the Roleschoreography
completed successfully or suffered an ChoreographyException,andexception.
If the
ifchoreography
completed successfully and ChoreographyFinalizerfinalizerBlocks were
installed, all Block(s)roleTypes
agree on which RolesFinalizerfinalizerBlock was
enabledBlock
A root
choreography can
also be coordinated, but it
ChoreographyMUST
NOT have any cannotFinalizerfinalizerBlocks. In
this case, coordination means that all
Block(s).roleTypes agree on whether
the Roleschoreography
completed successfully or suffered an
ChoreographyexceptionException
In both cases, all
roleTypes MUST agree on
whether the
Roleschoreography
completed successfully, or if an
Choreographyexception occurs, all
ExceptionroleTypes MUST experience
an Rolesexception rather
than successful completion. When an
Exceptionexception occurs
within a
Exceptionchoreography, the
Choreography,coordination
protocol will throw an
Coordinationexception to
ExceptionroleTypes which have not
otherwise detected the
Rolesexception that
occurredException
An exception MUST be propagated to all participants in the choreography using explicitly modeled, exception causing interactions when the choreography is not coordinated. This MUST cause the choreography to enter the exception state, and its exceptionBlock, if specified, MUST be enabled.
The two examples below show two usages of
Coordinatedcoordinated
choreographies.Choreographies.
Example 1: Coordinated credit authorization withoutFinalizerfinalizerBlocks: <informationType name="creditDeniedType"Block(s):/> <!-- Coordinated CreditAuthorizationexceptionType="true"/>Choreography withoutchoreographyFinalizerfinalizerBlocks--> <choreography name="CreditAuthorization" root="false" coordination="true"> <relationship type="tns:CreditReqCreditResp"/> <variableDefinitions> <variable name="CreditExtended" informationType="xsd:int" silent="true" roleTypes="tns:CreditResponder"/> <variable name="creditRequest"/> <variable name="creditAuthorized"/> <variable name="creditDenied" informationType =Block(s)-->"tns:creditDeniedType"/> </variableDefinitions> <!-- the normal work - receive the request and decide whether to approve --> <interaction name="creditAuthorization" channelVariable="tns:CreditRequestor" operation="authorize"> <participate relationshipType="SuperiorInferior""creditDeniedType"/>fromRole="tns:Superior"fromRoleTypeRef="tns:Superior" toRoleTypeRef="tns:Inferior"/> <exchange name="creditRequest" informationType="creditRequest" action="request"> <sendtoRole="Inferior"/>variable="getVariable('tns:creditRequest','','')"/> <receivevariable="tns:creditRequest"/>variable="getVariable('tns:creditRequest','','')"/> </exchange> <exchange name="creditAuthorized" informationType="creditAuthorizedType" action="respond"> <sendvariable="tns:creditRequest"/>variable="getVariable('tns:creditAuthorized','','')"/> <receivevariable="tns:creditAuthorized"/>variable="getVariable('tns:creditAuthorized','','')"/> </exchange> <exchange name="creditDenied" informationType="creditDeniedType" action="respond"> <sendvariable="tns:creditAuthorized"/>variable="tns:creditDenied"variable="getVariable('tns:creditDenied','','')" causeException="tns:creditDenied"/> <receivecauseException="true"/>variable="tns:creditDenied"variable="getVariable('tns:creditDenied','','')" causeException="tns:creditDenied"/> </exchange> </interaction> <!-- catch the (application) exception - as an exception it will abort the choreography --> <exceptionBlock name="handleBadCreditException"> <workunit name="handleBadCredit" > <interaction name="badCreditInteraction" channelVariable="tns:CreditResponder" operation="creditDenied"> <participate relationshipType="CreditReqCreditResp"causeException="true"/>fromRole="tns:Responder"fromRoleTypeRef="tns:Responder" toRoleTypeRef="tns:CreditRequestor"/> </interaction> </workunit> </exceptionBlock> </choreography>toRole="CreditRequestor"/>
Example 2: Coordinated credit authorization withFinalizerfinalizerBlocks <informationType name="creditDeniedType"Block(s):/> <!-- Coordinated CreditAuthorizationexceptionType="true"/>Choreography withchoreographyFinalizerfinalizerBlocks --> <choreography name="CreditAuthorization" root="false" coordination="true"> <relationship type="tns:CreditReqCreditResp"/> <variableDefinitions> <variable name="CreditExtended" informationType="xsd:int" silent="true" roleTypes="tns:CreditResponder"/> <variable name="creditRequest"/> <variable name="creditAuthorized"/> <variable name="creditDenied" informationType = "creditDeniedType"/> </variableDefinitions> <!-- the normal work -receive the request and decide whether to approve --> <interaction name="creditAuthorization" channelVariable="tns:CreditRequestor" operation="authorize"> <participate relationshipType="SuperiorInferior"Block(s)fromRole="tns:Superior"fromRoleTypeRef="tns:Superior" toRoleTypeRef="tns:Inferior"/> <exchange name="creditRequest" informationType="creditRequest" action="request"> <send variable="tns:creditRequest"/> <receive variable="tns:creditRequest"/> </exchange> <exchange name="creditAuthorized" informationType="creditAuthorizedType" action="respond"> <send variable="tns:creditAuthorized"/> <receive variable="tns:creditAuthorized"/> </exchange> <exchange name="creditDenied" informationType="creditDeniedType" action="respond"> <send variable="tns:creditDenied"toRole="Inferior"/>causeException="tns:creditDenied"/> <receive variable="tns:creditDenied"causeException="true"/>causeException="tns:creditDenied"/> </exchange> </interaction> <!-- catch the (application) exception - as an exception it will abort the choreography and thecauseException="true"/>FinalizerfinalizerBlocks are not accessible --> <exceptionBlock name="handleBadCreditException"> <workunit name="handleBadCredit" > <interaction name="badCreditInteraction" channelVariable="tns:CreditResponder" operation="creditDenied"> <participate relationshipType="CreditReqCreditResp"Block(s)fromRole="tns:Responder"fromRoleTypeRef="tns:Responder" toRoleTypeRef="tns:CreditRequestor"/> </interaction> </workunit> </exceptionBlock> <!--toRole="CreditRequestor"/>FinalizerfinalizerBlocks --> <!-- what to do if the credit is drawn down --> <finalizerBlock name="drawDown"> <!-- if there is no application content to send, this could just be an assignment to the statecapturevariable creditExtended --> <workunit name="drawdown" > <interaction name="drawdownInteraction" channelVariable="tns:CreditRequestor" operation="drawDown"> <participate relationshipType="CreditReqCreditResp"Block(s)fromRole="tns:CreditRequestor"fromRoleTypeRef="tns:CreditRequestor" toRoleTypeRef="tns:CreditResponder"/> <exchange name="dummy" action="request"> <send></send> <receive recordReference="drawdownRecord"/> </exchange> <record name="drawdownRecord" when="before"> <source expression="drawnDown"/> <target variable="CreditExtended"/> </record> </interaction> </workunit> </finalizerBlock> <!-- what to do if the credit is not used --> <finalizerBlock name="replenish"> <!-- if there is no application content to send, this could just be an assignment to the state capturing variable creditExtended --> <workunit name="replenishWU"> <interaction name="replenishInteraction" channelVariable="tns:CreditRequestor" operation="replenish"> <participate relationshipType="CreditReqCreditResp"toRole="CreditResponder"/>fromRole="tns:CreditRequestor"fromRoleTypeRef="tns:CreditRequestor" toRoleTypeRef="tns:CreditResponder"/> <exchange name="dummy" action="request"> <send></send> <receive recordReference="replenishRecord"/> </exchange> <record name="replenishRecord" when="before"> <source expression="released"/> <target variable="CreditExtended"/> </record> </interaction> </workunit> </finalizerBlock> </choreography>toRole="CreditResponder"/>
Activities arethelowestlevelcomponentsoftheChoreography,useddescribe the
toactualworkactions
performed within
a choreography. The
Activity-Notation is used to define activities as
either:performed.
An Orderingordering
structure - which combines
Structureactivities with other
ActivitiesOrderingordering
structures in a nested way to
Structuresexpress the ordering
rules of specifyactions
performed within activitiesthea
choreographyChoreography
A WorkUnit-Notation - which is used to guard and/or provide a means of repetition of those activities enclosed within the workunit
A BasicActivitythatbasic
activity -
which is used
to describe the
performsactuallowest
level actions
performed within
a choreography. A
work.Basicbasic
activity is then either:Activity
Ordering
Anstructures
combine activities
with other
ordering structures
in a nested
structure to
express the
ordering rules
of actions
performed within
a choreography.
An ordering
structure is one of the following:Structure
SequenceParallelChoicesequence2.5.1.1
parallel
choice
The sequence ordering structure contains one or more
Activity-Notations. When the sequence activity is enabled, the
sequence element MUST
restrict the series of enclosed activities (as
defined by one or more Activity-Notations) to be enabled
sequentially, in the same order that they are defined.restricts
The syntax of this construct is:
<sequence> Activity-Notation+ </sequence>
The parallel ordering structure contains one or more
Activity-Notations
that are enabled concurrently when the parallel activity is
enabled. The parallel activity
Activity-NotationMUST
complete successfully when all activities (as
defined by one or more Activity-Notations) performing work within
it complete successfully.completes
The syntax of this construct is:
<parallel> Activity-Notation+ </parallel>
The choice ordering structure enables specifying that only one of two or more activities (as defined by 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
Workworkunits with guard
conditions, the first UnitsWorkworkunit that matches the
guard condition is selected and the other UnitWorkworkunits are disabled.
Where there
is more than
one match,
lexical ordering
is used to
select a
match. If the choice has other activities, it is
assumed that the selection criteria for
Unitsthose activities are
non-observable.the
The syntax of this construct is:
<choice> Activity-Notation+ </choice>
In the example below, choice element has two
interactions,
"processGoodCredit" and "processBadCredit". The
Interactions,interactions have
the same directionality, participate within the same
InteractionsrelationshipType
and have the same
RelationshipfromRoleTypeRef and
fromRolestoRoleTypeRef names. If
one toRolesinteraction
happens, then the other one is disabled.Interaction
<choice> <interaction name=""processGoodCredit" channelVariable="goodCredit-channel" operation="doCredit"> ... </interaction> <interaction name=""processBadCredit" channelVariable="badCredit-channel" operation="doBadCredit"> ... </interaction> <choice>
An
interaction
is the basic building block of a InteractionChoreography,choreography.
It results in information exchanged between
collaborating
whichparticipants and
possibly the synchronization of their observable information
changes and the values of the exchanged information.parties
An interaction
forms the base atom of the InteractionChoreographycomposition,wheremultiplechoreography
composition. Multiple
interactions are combined to form a
Interactionschoreography,
which can then be used in different business contexts.Choreography,
An interaction is
initiated when one of the
InteractionroleTypes participating in
the Rolesinteraction
sends a Interactionmessage through
a common message,channel to
another Channel,roleType that is
participating in the RoleInteraction,thatreceivestheinteraction. If the
initial message is a request, then the accepting
message.roleType can optionally
respond with a normal response message or a fault message, which
will be received by the initiating
RoleroleType.Role.
An interaction
also contains "references" to:Interaction
The ChannelCapturingVariablethatspecifiestheinterfaceandotherchannel
capturing variable that
datadescribes where and how
the message is to be sent to and received into the accepting
describeroleTypeRole
The
operation
that specifies what the recipient of the message should do with the
message when it is receivedOperation
The From'from'
roleType and RoleTo'to'
roleType that are involvedRole
The InformationinformationType or
TypeChannelchannelType that is
being exchangedType
The InformationExchangeCapturinginformation
exchange capturing
variables at the VariablesFrom'from'
roleType and RoleTo'to'
roleType that are the source and destination for
the message contentRole
A list of potential observableinformationstate
capturing variable
recordings that changescanoccurandmayneedtobealignedattheFromRoleandtheTocapture
observable information
changes that
can occur as a result of
carrying out the Role,Interactioninteraction2.5.2.1
In some
choreographies
there may be a requirement
Choreographiesthat when the
that,interaction is
performed, the InteractionroleTypes
in the Roleschoreography
have agreement on the outcome. More specifically within an
Choreographyinteraction, a
Interaction,RoleroleType
may need to have a common understanding of the
observable information creations or changes of one or more
MAYStateCapturingstate
capturing variables that
are complementary to one or more VariablesStateCapturingstate
capturing variables of its
partner VariablesroleType.
Additionally, within an
Role.interaction a
InteractionRoleroleType
may need to have a common understanding of the
values of the MAYInformationExchangeCapturinginformation
exchange capturing
variables at the partner
VariablesroleType.Role.
For example, after an
interaction happens,
both the Interaction"Buyer" and the
Buyer"Seller" want to have a
common understanding that:Seller
State Capturingcapturing
variables, such as "Order State", that contain
observable information at the
Variables,"Buyer" and
Buyer"Seller", have values
that are complementary to each other, e.g.
Seller,'Sent' at the
"Sent""Buyer" and
Buyer'Received' at the
"Received""Seller", andSeller,
Information ExchangeCapturingexchange
capturing variables have the
same types with the same content, e.g. The "Order"
Variablesvariables at the
Variables"Buyer" and
Buyer"Seller" have the same
SellerInformationinformationTypes and hold
the same order informationTypes
In WS-CDL, an Alignmentalignment
interaction MUST be explicitly
Interactionused in the cases where
two interacting
used,participants require the
alignment of their observable information changes and the values of
their exchanged information. After the alignment
partiesinteraction
completes, both
Interactionparticipants progress at
the same partiestime in a
lock-step time,fashion, and
the fashionvariable
information in both
Variableparticipants is aligned.
Their partiesvariable
alignment comes from the fact that the requesting
Variableparticipant has to
partybe
assured that the accepting
knowparticipant has received
the partymessage, and the
messageotherwayaround,accepting
theparticipant has to
partybe
assured that the requesting
knowparticipant has sent the
message before both of them progress. There is no intermediate
state, where one
partyparticipant sends a
message and then it proceeds
partyindependently, or
the other independentlyparticipant
receives a message and then it proceeds independently.
partyIn
other words,
after each
alignment interaction
both participants
act on the
basis of
their shared
understanding for
the messages
exchanged and
the information
recorded.2.5.2.2
An Interactioninteraction
MUST complete normally when its
message completesexchanges
complete successfully.exchange(s)
An Interactioninteraction
MUST complete abnormally
when:completes
An application signals an error condition during the management
of a request or within a
participant when
processing the requestparty
Its
time-to-complete Thetimeout,identifyingthetimeframewithinwhichanInteractionMUSTtimeout occurs after
the complete,interaction was
initiated but before it completedInteraction
OtherSome
other type of
typeserror
occurs, such as errors,ProtocolBasedprotocol
based exchange failures,
Exchangesecurity failures,
SecurityDocumentdocument
validation errors, etc.Validation
The syntax of the interaction construct is:
<interactionname="ncname"channelVariable="qname"name="NCName" channelVariable="QName" operation="NCName" align="true"|"false"? initiate="true"|"false"? > <participateoperation="ncname"relationshipType="qname"fromRole="qname"relationshipType="QName" fromRoleTypeRef="QName" toRoleTypeRef="QName" /> <exchangetoRole="qname"name="ncname"name="NCName" faultName="QName"? informationType="QName"?|channelType="QName"? action="request"|"respond" > <send variable="XPath-expression"? recordReference="list ofinformationType="qname"?|channelType="qname"?ncname"?NCName"? causeException="QName"? /> <receive variable="XPath-expression"? recordReference="list ofcauseException="true"|"false"?ncname"?NCName"? causeException="QName"? /> </exchange>* <timeout time-to-complete="XPath-expression"causeException="true"|"false"?fromRoleTypeRecordRef="list offromRoleRecordReference="listncname"?NCName"? toRoleTypeRecordRef="list oftoRoleRecordReference="listNCName"? />? <recordncname"?name="NCName" when="before"|"after"|"timeout"name="ncname"causeException="QName"? > <source variable="XPath-expression"? |causeException="true"|"false"?expression="XPath-expression"? /> <target variable="XPath-expression" /> </record>* </interaction>expression="Xpath-expression"?
The attribute name
is used forto
specify a name for each
specifyinginteraction element
declared within a
Interactionchoreography.Choreography.
The channelVariable
attribute specifies the
ChannelVariablechannel
capturing variable
used for
communicating during
this interaction.
The channel
variable contains information
containingofaparty,about
the participant
that is the target of the
beingInteraction,interaction.
The information is used for
determining where and how to send and receive information to and
whichfrom the
intoparticipant. The
party.Channelchannel
variable used in an
Variableinteraction MUST be
available at the two
InteractionroleTypes before the
RolesInteractioninteraction
MAY occur. At runtime,
information about a occurs.Channelchannel
variable is expanded further. This requires that
the messages exchanged in the
Variablechoreography also
contain reference and correlation information, for example by:Choreography
Including a protocol header, such as a SOAP header or
Using the actual value of data within a message, for example the
"Order Number" of the
"Order" that is common to
all the messages sent over the
OrderchannelChannel
The operation
attribute specifies the name of the
operation that is associated with this
interaction. The
specified operation belongs to the interface, as identified by the
Interaction.
and
roleTyperolebehavior
elements of the ChannelTypechannelType
specified in the
ofChannelchannel
variable used in this
Variableinteraction.Interaction.
The OPTIONAL align
attribute, when set to
attribute"true", means that this
"true"Alignmentalignment
interaction results in the common understanding
of both the information exchanged and the resulting observable
information creations or changes at the ends of the
Interactioninteraction, as
specified in the
Interaction
and the
fromRoleTypeReffromRoletoRoleTypeRef
elements. In
other words,
after each
alignment interaction
both participants
act on the
basis of
their shared
understanding for
the messages
exchanged and the
information
recorded. The default value for
this attribute is "false".toRole.
AnInteractionactivitycanbemarkedasaChoreographyInitiatorWhen the OPTIONAL
wheninitiate
attribute is set to
"true",
an interaction
activity MUST
be marked as
a choreography
initiator. The default value
for this attribute is "false"."true".
Within the participate
element, the
relationshipType
attribute specifies the
RelationshiprelationshipType this
Typeinteraction
participates Interactionin, and the
in
and
fromRoleTypeReffromRole
attributes specify the requesting and the accepting
toRoleTypeReftoRoleRoleroleTypes respectively.
The TypesRoletype of
the roleType identified by the
Type
attribute MUST be the same as the toRoleTypeReftoRoleRoleroleType identified by the
Type
element of the roleTyperoleChannelTypechannelType
specified in the
ofChannelchannel
variable used in the
Variableinteractioninteraction.activity.
The OPTIONAL exchange
element allows information to
be exchanged during an
interaction. The
attribute Interaction.name
is used forto
specify a name for this exchange element.specifying
Within the exchange element, the OPTIONAL
faultName
attribute is
used to
identify this
exchange element
as a fault
exchange with
the specified
name. If the
faultName
attribute is
specified, then
it will be
used to
identify the
specific fault
within the
context of
the operation.
If the
operation is
defined using
WSDL, this
MUST occur in
the following
way:
For WSDL1.1, the LocalPart of the "QName" will be used to match the name of a fault declared within the operation. If a prefix is specified, it must match the namespace associated with the operation. If a WSDL1.1 operation has more than one fault reference with the same LocalPart as the name specified in the faultName attribute, this will be considered an error
For WSDL2, the fully qualified "QName" will be used to match the fault declaration. If only the LocalPart of the "QName" is specified, then the match will initially be performed using the targetNamespace to qualify the LocalPart. If a fault declaration is still not found, then the LocalPart will be matched against the LocalPart of the 'ref' attribute of each fault reference defined for the operation. If a WSDL2 operation has more than one fault reference with the same LocalPart as the name specified in the faultName attribute, this will be considered an error
Within the
exchange
element,
the OPTIONAL attributes
informationType
and channelType
identify
the InformationinformationType or the
TypeChannelchannelType of the
information that is exchanged between the two
TyperoleTypes in an
Rolesinteraction. The
attributes Interaction.informationType
and
channelType
MUST be
mutually exclusive. If none of these attributes are specified, then
it is assumed that either no actual information is exchanged or the
type of information being exchanged is of no interest to the
arechoreography
definition.Choreography
Within the exchange
element, the attribute
action
specifies the direction of the information
exchanged in the
interaction:Interaction:
When the action
attribute is set to "request", then
the information exchange happens
from
the 'from'
roleType to
fromRolethe
'to' roleTypetoRole
When the action
attribute is set to "respond", then
the information exchange happens from
the
'to' roleType to
toRolethe
'from' roleTypefromRole
Within the exchange
element, the send
element shows that information is sent from a
roleType and the
Rolereceive
element shows that information is received at
a roleType respectively in
the
Roleinteraction:Interaction:
The send
and the receive
elements MUST
only use the WS-CDL function getVariable
within the
variable
attribute
The OPTIONAL
variables specified
within the Variablessend
and receive
elements MUST
be of type as described in the informationType
or
channelType
attributes
When the action
element is set to "request", then
the variable specified
within the Variablesend
element using the
variable
attribute MUST be defined at the
'from'
roleType and the
fromRolevariable specified
within the Variablereceive
element using the
variable
attribute MUST be defined at the
'to'
roleType. A
variable is
associated with
a specific
roleType as
described in
Section 5.2toRole
When the action
element is set to "respond", then
the variable specified
within the Variablesend
element using the
variable
attribute MUST be defined at the
'to'
roleType and the
toRolevariable specified
within the Variablereceive
element using the
variable
attribute MUST be defined at
'from'
roleType. A
variable is
associated with
a specific
roleType as
described in
Section 5.2fromRole
The variable
specified within the Variablereceive
element MUST
NOT be defined with the
attribute notsilent
set to "true"
Within the send
or the receive
elements of an
element(s)exchange
element, the recordReference
attribute contains an XML-Schema list of references to
record
elements in the same
element(s)interaction. The
same Interaction.record
element MAY be referenced from different
send
or the receive
elements within the
same element(s)interaction
thus enabling re-useInteraction
Within the send
or the receive
elements of an
exchange element, if the
OPTIONAL element(s)causeException
attribute
whensettois
set, it specifies that an
"true",exception MUST be
caused at the respective
ExceptionroleTypes. In this case,
the Roles."QName"
value of this
attribute will
identify the informationTypeexchangeexception
that MUST be elementofExceptionType.Thedefaultforthisattributeiscaused"false"
The request exchange MUST NOT have the
faultName
or
causeException
attributesettoattributes
specified"true"
When two or more respond exchanges are
specified,onerespondexchangeMAYbeofnormalinformationTypeandallspecified
there MUST be othersofExceptionType.Therean implicit choice
between two or more respond exchangesis
If the align
attribute is set to "false" for the
interaction, then
it means that the:Interaction,
send
element and the Request exchange
completes successfully for the accepting
receive
elementsend
element and the Response exchange
completes successfully for the requesting
receive
elementIf the align
attribute is set to "true" for the
interaction, then
it means that the Interaction,Interactioninteraction
MUST complete successfully if
its Request and Response exchanges complete
completessuccessfully, and
all referenced records complete successfully:successfully
receive
elementreceive
elementWithin the OPTIONAL timeout
element, the
time-to-complete
attribute identifies the timeframe
within which an
interaction MUST
complete after it was
Interactioninitiated, or the
deadline before which an
initiatedinteraction MUST
complete. When the
Interactiontime-to-complete
has been
exceeded, a
time-to-complete
timeout occurs
after the
interaction was
initiated, but
before it
completed. The time-to-complete
SHOULD be of XML-Schema duration type when conveying the timeframe
and SHOULD be of XML-Schema dateTime type when conveying the
deadline. When
used, the OPTIONAL
The
attribute contains an XML-Schema list of references to
fromRoleTypeRecordReffromRoleRecordReferencerecord
elements in the same
element(s)interaction that
InteractionSHOULD take effect at the
will'from'
roleType when a timeout occurs.
fromRoleWhen used,
the OPTIONAL
The
attribute contains an XML-Schema list of references to
toRoleTypeRecordReftoRoleRecordReferencerecord
elements in the same
element(s)interaction that
InteractionSHOULD take effect at the
will'to'
roleType when a timeout occurs.toRole
The OPTIONAL
element is used to create or change and then make
available within one
recordelementroleType, the value of one
or more Role,variables
using another Variablesvariable
or an expression. The attribute Variablename
is used
forto
specify a distinct name for a specifyingrecord
element within an
interaction. Within
the Interaction.record
element, the source
and
target
elements specify these recordings of
information happening at the send and receive ends of the
interaction:Interaction:
When the action
element is set to "request", then
the recordings
specified within the recording(s)source
and the
target
elements MUST occur at the
'from'
roleType for the send and at the
fromRole'to'
roleType for the receivetoRole
When the action
element is set to "response", then
the recordings
specified within the recording(s)source
and the
target
elements MUST occur at the
'to'
roleType for the send and at the
toRole'from'
roleType for the receivefromRole
Within the record
element, the when
attribute specifies if a recording happens before or after
athe
send, or
sendbefore or
"before""after"after the
receive of a message at a
aroleType in a Request or a
Response exchange or when a timeout has expired. When the
Rolewhen
attribute is set to "timeout", the
record
element specifies the recording to be performed
when a timeout occurs. If two or more record
elements
have the same value in their when
attribute and are
referenced within the recordReference
attribute of a
send
or a receive
element, then they are
performed in the order in which they are specified.
The following rules apply for the information recordings when
using the record
element:
The source MUST define either a variable
attribute
or an expression
attribute
expression
attribute,
it MUST contain expressions, as defined in Section
When the source defines a
variable, then the
source and the target
Variable,variable MUST be
defined at the same
VariableroleType. When the
attribute Rolevariable
is defined it MUST use only the
WS-CDL function getVariable
.
The variable
specified within
this function
is associated
with a
specific roleType
as described
in Section
5.2
The target variable
MUST NOT be defined with the attribute Variablesilent
set to
"true"
One or more record
elements MAY be specified and
performed at one or both the
roleTypes within an
RolesinteractionInteraction
A record
element MUST NOT be specified in the
absence of an exchange element or a timeout
element
that reference it
TheattributecauseExceptionMAYbesetto"true"inarecordelementifthetargetVariableisanExceptionWhen the OPTIONAL
attribute VariablecauseException
is settospecified in a
"true"record
element, then
an exception
MAY be caused
at the corresponding RolegetsroleType.
In this case,
the intoException"QName"
value of this
attribute will
identify the
exception that
MAY be
causedstate
When two or more record
elements are specified for
the same roleType in an
Roleinteraction, with
InteractiontargetVariablesofExceptiontheir
Type,causeException
attributes set
to indicate
that an
exception should
be caused,
then one of the Exceptionexception
types MAY recordingsoccur.AnExceptionrecordingbe caused.
The throwing
of an exception
has a non-observable predicate
hascondition associated
implicitly with it, that decides if an condition,Exceptionexception
is causedoccurs
If the align
attribute is set to "false" for the
interaction, then
it means that the Interaction,roleType
specified within the Rolerecord
element makes available
the creation or change of the information specified within the
record
element immediately after the successful
completion of each record
If the align
attribute is set to "true" for the
interaction, then
it means thatInteraction,
record
element only at the successful completion of
the record
elements specified
within an
target
attribute will be affectedThe example below shows a complete
choreography that
involves one
Choreographyinteraction
performed from InteractionRolea
roleType "Consumer" to TypeRolea
roleType "Retailer" on the
Typechannel
"retailer-channel" as a request/response exchange:Channel
The message "purchaseOrder" is sent from the "Consumer" to the "Retailer" as a request message
The message "purchaseOrderAck" is sent from the "Retailer" to the "Consumer" as a response message
The variable
"consumer-channel" is made available at the "Retailer" using the
record elementVariable
The interaction
happens on the "retailer-channel", which has a
Interactiontoken "purchaseOrderID"
used within the Tokenidentity
element of the
channel. This
Channel.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 part of "purchaseOrder"
interaction from the
"Consumer" to the "Retailer" on "retailer-channel" during the
request. Here the record element makes available the
"Consumer-channel" at the "Retailer"
InteractionroleType. If the
Role.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 the "Consumer". In another example, the
"Consumer" could set its
Interaction,variable "OrderSent" to
"true" and the "Retailer" would set its
Variablevariable
"OrderReceived" to "true" using the Variablerecord
element
The exchange "badPurchaseOrderAckException" specifies that an
exception
type of Exception"badPOAckType"Exception"badPOAck" could occur at
both Typeparticipantsparties
<?xml version="1.0" encoding="UTF-8"?> <packagexmlns="http://www.w3.org/2005/10/cdl" xmlns:cdl="http://www.w3.org/2005/10/cdl" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"xmlns="http://www.w3.org/2004/12/ws-chor/cdl"targetNamespace="http://www.oracle.com/ashwini/sample"xmlns:rns="http://www.example.com/ConsumerRetailerChoreographyIFsample" xmlns:tns="http://www.example.com/ConsumerRetailerChoreographysample" targetNamespace="http://www.example.com/ConsumerRetailerChoreographysample" name="ConsumerRetailerChoreography" version="1.0"> <informationType name="purchaseOrderType" type="tns:PurchaseOrderMsg"/> <informationType name="purchaseOrderAckType" type="tns:PurchaseOrderAckMsg"/> <informationType name="badPOAckType" type="xsd:QName" /> <informationType name="uriType" type="xsd:string"xmlns:tns=http://www.oracle.com/ashwini/sample"/> <informationType name="intType" type="xsd:integer" /> <token name="purchaseOrderID" informationType="tns:intType"/> <token name="retailerRef" informationType="tns:uriType"/> <token name="consumerRef" informationType="tns:uriType"/> <tokenLocator tokenName="tns:purchaseOrderID" informationType="tns:purchaseOrderType" query="/PO/orderId"/> <tokenLocator tokenName="tns:purchaseOrderID" informationType="tns:purchaseOrderAckType" query="/PO/orderId"/> <roleType name="Consumer"> <behavior name="consumerForRetailer"exceptionType="true"/>interface="rns:ConsumerRetailerPT"/> <behavior name="consumerForWarehouse"interface="tns:ConsumerRetailerPT"/>interface="rns:ConsumerWarehousePT"/> </roleType> <roleType name="Retailer"> <behavior name="retailerForConsumer"interface="tns:ConsumerWarehousePT"/>interface="rns:RetailerConsumerPT"/> </roleType> <relationshipType name="ConsumerRetailerRelationship">interface="tns:RetailerConsumerPT"/><role<roleType typeRef="tns:Consumer" behavior="consumerForRetailer"/>type="tns:Consumer"<role<roleType typeRef="tns:Retailer" behavior="retailerForConsumer"/> </relationshipType> <channelType name="ConsumerChannel">type="tns:Retailer"<role<roleType typeRef="tns:Consumer"/> <reference> <token name="tns:consumerRef"/> </reference> <identity> <token name="tns:purchaseOrderID"/> </identity> </channelType> <channelType name="RetailerChannel"> <passing channel="ConsumerChannel" action="request" />type="tns:Consumer"/><role<roleType typeRef="tns:Retailer" behavior="retailerForConsumer"/> <reference> <token name="tns:retailerRef"/> </reference> <identity> <token name="tns:purchaseOrderID"/> </identity> </channelType> <choreographytype="tns:Retailer"name="ConsumerRetailerChoreography"name="ConsumerRetailerChoreography"> <relationship type="tns:ConsumerRetailerRelationship"/> <variableDefinitions> <variable name="purchaseOrder" informationType="tns:purchaseOrderType"root="true">silent="false" /> <variable name="purchaseOrderAck" informationType="tns:purchaseOrderAckType" /> <variable name="retailer-channel" channelType="tns:RetailerChannel"/> <variable name="consumer-channel" channelType="tns:ConsumerChannel"/> <variable name="badPurchaseOrderAck" informationType="tns:badPOAckType"silent="true"roleTypes="tns:Consumer"/><variablename="badPurchaseOrderAck"informationType="tns:badPOAckType"roleTypes="tns:Retailer"/> </variableDefinitions> <interaction name="createPO" channelVariable="tns:retailer-channel" operation="handlePurchaseOrder"silent="true"align="true"> <participate relationshipType="tns:ConsumerRetailerRelationship"initiate="true">fromRole="tns:Consumer"fromRoleTypeRef="tns:Consumer" toRoleTypeRef="tns:Retailer"/> <exchange name="request" informationType="tns:purchaseOrderType" action="request"> <sendtoRole="tns:Retailer"/>variable="cdl:getVariable("tns:purchaseOrder","",variable="cdl:getVariable('tns:purchaseOrder','','')" /> <receive"")"variable="cdl:getVariable("tns:purchaseOrder","",variable="cdl:getVariable('tns:purchaseOrder','','')" recordReference="record-the-channel-info" /> </exchange> <exchange name="response" informationType="purchaseOrderAckType" action="respond"> <send"")"variable="cdl:getVariable("tns:purchaseOrderAck","",variable="cdl:getVariable('tns:purchaseOrderAck','','')" /> <receive"")"variable="cdl:getVariable("tns:purchaseOrderAck","",variable="cdl:getVariable('tns:purchaseOrderAck','','')" /> </exchange> <exchange name="badPurchaseOrderAckException" faultName="badPurchaseOrderAckException" informationType="badPOAckType" action="respond"> <send"")"variable="cdl:getVariable(,tns:badPurchaseOrderAck,,,,,,,)"variable="cdl:getVariable('tns:badPurchaseOrderAck','','')" causeException="tns:badPOAck" /> <receivecauseException="true"variable="cdl:getVariable("tns:badPurchaseOrderAck","","")"variable="cdl:getVariable('tns:badPurchaseOrderAck','','')" causeException="tns:badPOAck" /> </exchange> <record name="record-the-channel-info" when="after"> <sourcecauseException="true"variable="cdl:getVariable("tns:purchaseOrder,"",variable="cdl:getVariable('tns:purchaseOrder','', '/PO/CustomerRef')"/> <target"PO/CustomerRef")"/>variable="cdl:getVariable("tns:consumer-channel","",variable="cdl:getVariable('tns:consumer-channel','','')"/> </record> </interaction> </choreography> </package>"")"/>
The perform activity realizes the
composition of
"compositionChoreographies",choreographies
by combining existing
whereasChoreographiesresultsinthecreationchoreographies
to create new
ofones. For
Choreographies.example, if two separate
examplechoreographies
were defined as follows:Choreographies
A "Request for Quote" ("RFQ")
choreography that
involves a "Buyer" ChoreographyroleType
sending a request for a quotation for goods and services to a
"Supplier" RoleroleType to
which the "Supplier"
RoleroleType responds with
either a "Quotation" or a "Decline to Quote" message, andRole
An "Order Placement"
choreography,
where the "Buyer" Choreography,roleType
places Rolean order for goods or
services and the "Supplier"
androleType either accepts the
order or rejects itRole
One could then create a new "Quote and Order"
choreography by
reusing the two, where the "RFQ"
Choreographychoreography was
performed first, and then, depending on the outcome of the "RFQ"
Choreographychoreography, the
order is placed using the "Order Placement"
Choreography,choreography. In
this case the new
Choreography.choreography is
"composed" Choreographyoutusing the two previously
defined
ofchoreographies.
Using this approach,
Choreographies.choreographies
can be combined to support
Choreographieschoreographies of
any required complexity, allowing more flexibility as
Choreographieschoreographies
defined elsewhere can be reused.Choreographies
The perform activity enables a
choreography to
specify that another
Choreographychoreography is
performed at this point in its definition, as an enclosed
Choreographychoreography. The
performed
Choreography.choreography, even
when defined in a different Choreography,Choreographychoreography
package, is conceptually treated as an enclosed
Package,choreography.Choreography.
The syntax of the perform construct is:
<performchoreographyName="QName" choreographyInstanceId="XPath-expression"? block="true|false"? > <bindchoreographyName="qname"name="NCName"> <this variable="XPath-expression"name="ncname">roleType="QName"/> <free variable="XPath-expression"role="qname"/>roleType="QName"/> </bind>* Choreography-Notation? </perform>role="qname"/>
Within the perform
element, the
choreographyName
attribute references the name of the
choreography to be
performed.Choreography
The OPTIONAL choreographyInstanceId
attribute
defines an identifier for this performance of the
choreography
identified by the ChoreographychoreographyName
attribute. If the
performed
choreography can
only be performed once within the enclosing
Choreographychoreography, the
Choreography,choreographyInstanceId
attribute is OPTIONAL.
Otherwise it MUST be specified and the value MUST be different for
each performance. This is a dynamic requirement. For example, if a
single perform
element appears in a
Workworkunit that can repeat,
then each use of perform must assign a different
Unit
identifier.choreographyInstanceIdChoreographyInstanceId
The OPTIONAL block
attribute is
used to
indicate whether
the performing
choreography should
wait for the
performed choreography
to complete
before the
perform activity
completes:
If the
block
attribute
is set to
"true", then
the perform
activity MUST
wait for the
performed choreography
to complete
If the block attribute is set to "false", then the perform activity MUST complete immediately following the enablement of the performed choreography, which may cause the performed choreography to be active concurrently with other activities following the perform activity
The default
value for the
block
attribute
is "true".
For the
purpose of
clarity, any
non-blocking performed
enclosed choreographies
that have not
completed prior
to the end
of the
performing choreography,
are considered
to be
successfully completed
upon the
completion of
the performing
choreography.
The OPTIONAL
Choreography-Notation within the perform
element
defines a locally
defined
Locallychoreography that
is performed only by this perform activity. If specified, the
ChoreographychoreographyName
attribute within the
perform
element MUST match the attribute
name
within the choreography
element of
the Choreography-Notation.
The OPTIONAL bind
element within the perform
element enables information in the performing
choreography to be
shared with the performed
Choreographychoreography and
vice versa. Within the Choreographybind
element, the attribute
name
is used forto
specify a name for each specifyingbind
element
declared within this perform activity. Within the bind
element, the
attribute aliases the
roleTyperoleroleTypes from the
performing
Roleschoreography to the
performed
Choreographychoreography.Choreography.
The variable
attribute within the
this
element specifies that a
variable in the
performing
Variablechoreography is
bound with the Choreographyvariable
identified by the variable attribute within the Variablefree
element in the performed
choreography.Choreography.
The following rules apply:
The choreography
to be performed MUST be either a
Choreographylocally defined
Locallychoreography that
is immediately contained within the performing
Choreographychoreography or a
Choreographyglobally defined
Globallychoreography.
Performed
Choreography.choreographies
that are declared in a different ChoreographiesChoreographychoreography
package MUST be included first before they can be
performedPackage
The RoleroleTypes within a single
Typesbind
element MUST be carried out by the same
participant, hence they
MUST belong to the same party,ParticipantparticipantTypeType
The variable
attribute within this
element and free
element MUST define only the WS-CDL
function getVariable
The free variables
specified within the Variablesfree
element MUST have the
attribute free
set to "true" in their definition
within the performed
choreographyChoreography
There MUST NOT be a
cyclic dependency on the
notchoreographies
performed. For example,
Choreographieschoreography "C1"
is performing
Choreographychoreography "C2"
which is performing
Choreographychoreography "C1"
again is disallowedChoreography
The example below shows a
choreography
composition, where a
Choreographychoreography
"PurchaseChoreography" is performing the
Choreographyglobally defined
Globallychoreography
"RetailerWarehouseChoreography" and aliases the
Choreographyvariable
"purchaseOrderAtRetailer" to the
Variablevariable
"purchaseOrder" defined at the performed
Variablechoreography
"RetailerWarehouseChoreography". Once aliased, the
Choreographyvariable
"purchaseOrderAtRetailer" extends to the enclosed
Variablechoreography and
thus these Choreographyvariables
can be used interchangeably for sharing their information.Variables
<choreography name="PurchaseChoreography"> ... <variableDefinitions> <variable name="purchaseOrderAtRetailer" informationType="purchaseOrder"roleTypes="tns:Retailer"/> </variableDefinitions> ... <perform choreographyName="RetailerWarehouseChoreography"> <bind name="aliasRetailer"> <thisrole="tns:Retailer"/>variable="cdl:getVariable("tns:purchaseOrderAtRetailer","","")"variable="cdl:getVariable('tns:purchaseOrderAtRetailer','','')" roleType="tns:Retailer"/> <freerole="tns:Retailer"/>variable="cdl:getVariable("tns:purchaseOrder","","")"variable="cdl:getVariable('tns:purchaseOrder','','')" roleType="tns:Retailer"/> </bind> </perform> ... </choreography> <choreography name="RetailerWarehouseChoreography"> <variableDefinitions> <variable name="purchaseOrder" informationType="purchaseOrder"role="tns:Retailer"/>roleTypes="tns:Retailer" free="true"/> </variableDefinitions> ... </choreography>role="tns:Retailer"
The Assign activity is used to create or change, and
then make available within one
roleType, the value of one
or more Role,variables
using the value of another
Variablesvariable or
expression.Variable
The assign activity MAY also be used to cause an
exception at a
ExceptionroleType.Role.
The syntax of the assign construct is:
<assignroleType="QName"> <copyroleType="qname">name="ncname"name="NCName" causeException="QName"? > <sourcecauseException="true"|"false"?variable="XPath-expression"?|expression="XPath-expression"? /> <target variable="XPath-expression" /> </copy>+ </assign>variable="XPath-expression"?|expression="Xpath-expression"?
The copy
element within the assign
element creates or changes, at the
roleType specified by the
RoleroleType
attribute, the
variable defined by the
Variabletarget
element using the
variable or expression
defined by the Variablesource
element at the same
roleType. Within the
Role.copy
element, the attribute name
is used
forto
specify a name for each specifyingcopy
element
declared within this assign activity.
The following rules apply to assignment:
The source MUST define either a variable
attribute
or an expression
attribute
expression
attribute,
it MUST contain When the attribute variable
is defined it MUST use
only the WS-CDL function getVariable
The target variable
MUST NOT be defined with the attribute Variablesilent
set to
"true"
When two or more copy
elements belong to the same
assign
element, then they are performed in the order
in which they are defined
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 Variablestarget
attribute will be affected
TheOPTIONALattributecauseExceptionMAYbesetto"true"inacopyelementifthetargetVariableisanExceptionVariable.ThedefaultforthisattributeisAt most one
"false"copy
element MAY have the OPTIONAL
attribute causeException
settospecified"true"
When the attribute causeException
is
settospecified in a
"true"copy
element, then
an exception
SHOULD be
caused at the
roleType specified by the
attribute RoleroleType
getsintotheExceptionafter the assign
activity has
statecompleted.
In this case,
the "QName"
value of the
completedcauseException
attribute will
identify the
exception that
SHOULD be
caused
The examples below show some possible usages of
the
assign construct.assign.
Example 1: <assign roleType="tns:Retailer"> <copy name="copyAddressInfo"> <sourcevariable="cdl:getVariable("PurchaseOrderMsg","",variable="cdl:getVariable('PurchaseOrderMsg','', '/PO/CustomerAddress')" /> <target"/PO/CustomerAddress")"variable="cdl:getVariable("CustomerAddress","",variable="cdl:getVariable('CustomerAddress','','')" /> </copy> </assign>"")"
Example 2: <assign roleType="tns:Retailer"> <copy name="copyPriceInfo"> Â <source expression="(10+237)/34" /> Â <targetvariable="cdl:getVariable("ProductPrice","","",variable="cdl:getVariable('ProductPrice','','','tns:Retailer')" /> </copy> </assign>"tns:Retailer")"
Example 3: <assign roleType="tns:Customer"> <copy name="copyLiteral"> Â <sourceexpression="Helloexpression="'Hello World'" /> Â <targetWorld"variable="cdl:getVariable("VarName","","",variable="cdl:getVariable('VarName','','','tns:Customer')" /> </copy> </assign>"tns:Customer")"
The SilentsilentAction
activity is an explicit designator used for marking the point where
Actionparticipant specific
actions with non-observable operational details MUST be performed.
For example, the mechanism a
"Buyer" is
using for checking the inventory of a warehouse
should not be observable to other
partyparticipants, but the
fact that the inventory level does influence the global observable
behavior with a parties,buyer"Buyer" needs to be
specified in the
partychoreography
definition.Choreography
The syntax of the silentsilentAction
construct is:action
<silentActionroleType="QName"? />roleType="qname?
The OPTIONAL attribute roleType
is used to specify
the participant at which
the partysilentsilentAction will be
performed. If a silent action is defined without a
actionRoleroleType, it is implied
that the action is performed at all the Type,RoleroleTypes that are part of
the Typesrelationships
of the Relationshipschoreography
this activity is enclosed within.Choreography
The NonoAction activity is
an explicit designator used for marking the point where a
Actionparticipant does not
perform any action. The noAction
activity can
be used in
scenarios where
an activity
is syntactically
required but
no activity
is applicable,
in an
exceptionBlock as
demonstrated in
the example
below.party
<exceptionBlock name="handleTimeoutException"> <workunit name="handleTimeoutException" > <noAction> </workunit> </exceptionBlock>
The syntax of the nonoAction construct
is:action
<noActionroleType="QName? />roleType="qname?
The OPTIONAL attribute roleType
is used to specify
the participant at which
no action will be performed. If a noAction is defined without a
partyRoleroleType, it is implied
that no action will be performed at any of the
Type,RoleroleTypes that are part of
the Typesrelationships
of the Relationshipschoreography
this activity is enclosed within.Choreography
The finalize activity is used to enable a specific
FinalizerfinalizerBlock in
successfully completed instances of immediately enclosed
Blockchoreographies,
and thus bring those
Choreographies,choreographies to
defined conclusions.Choreographies
A choreography
that does not perform any
Choreographychoreographies
that have ChoreographiesFinalizerfinalizerBlocks defined
MUST NOT have any finalize activities specified within it. A
finalize activity MAY be present within a
Block(s)choreography that
has performed a
Choreographychoreography with
one or more defined ChoreographyFinalizerfinalizerBlocks - that
is a finalize activity can be specified within the
Block(s)choreography body,
within an ChoreographyExceptionexceptionBlock and within
BlockFinalizerfinalizerBlocks.Blocks.
For a single performed
choreography
instance, at most one of its ChoreographyFinalizerfinalizerBlocks SHOULD
be enabled by a finalize activity during the subsequent progress,
including Block(s)exception
handling and finalization, of the enclosing
Exceptionchoreography.
A finalize
activity performed
on uninstalled
finalizerBlocks will
have no
effect.Choreography.
The syntax of the finalize construct is:
<finalizename="ncname"?><finalizerReferencename="NCName"? choreographyName="NCName" choreographyInstanceId="XPath-expression"?choreographyName="ncname"finalizerName="NCName"? />finalizerName="ncname"?
</finalizerReference>+The OPTIONAL attribute
</finalize>name
is used forto
specify a distinct name for each
specifyingfinalize
element declared within a
ChoreographyPackage.EachfinalizerReferencechoreography
package.element
The finalize
activity enables a FinalizerfinalizerBlock in a
performed instance BlockofanimmediatelyenclosedChoreography.Withinafinalizeelement,eachfinalizerReferenceMUSTrefertoadifferentperformedChoreographyinstance.WithinthefinalizerReferenceelement,of an
immediately enclosed
choreography.the
The choreographyName
attribute
identifies the
choreography
referenced by the ChoreographychoreographyName
attribute of the
perform construct.
WithinthefinalizerReferenceelement,The OPTIONAL
thechoreographyInstanceId
attribute identifies the
performed
choreography
instance to be finalized, using the value defined by the
ChoreographychoreographyInstanceId
attribute of the perform
construct. The choreographyInstanceId
attribute MAY be
omitted if the contract logic of the performing
choreography is
such that only one instance of the
Choreographychoreography
identified by the ChoreographychoreographyName
attribute could
have been performed when the finalize activity is enabled. If more
than one instance of the
choreography
identified by the ChoreographychoregraphyName
attribute could have
been performed, then the
choreographyInstanceId
attribute MUST be present.
WithinthefinalizerReferenceelement,The attribute
thefinalizerName
indicates which
FinalizerfinalizerBlock is to be
enabled in the performed instance. If the targeted, immediately
enclosed,
Blockchoreography has
Choreographymore than
one defined onlyFinalizerfinalizerBlock, then the
Block,finalizerName
attribute isMUST
be present.OPTIONAL.
In the example below,
choreography
"CreditDecider" gets credit authorizations for two bidders, "A" and
"B", at most one of which can be selected. The "CreditDecider"
performs a "CoordinatedCreditAuthorization"
Choreographychoreography for
each bidder, and then finalizes each performed
Choreographychoreography
depending on whether "A", "B" or neither was selected.Choreography
<choreography name="CreditDecider"> <!-- only a snippet is shown here --> <parallel> <perform name="creditForA" choreographyName="CoordinatedCreditAuthorization"choreographyInstanceId="'creditForA'"> <!-- bind such that this does the business for A --> </perform> <perform name="creditForB" choreographyName="CoordinatedCreditAuthorization"choreographyInstance="creditForA">choreographyInstanceId="'creditForB'"> <!-- bind such that this does the business forchoreographyInstance="creditForB">B --> </perform> </parallel> <!-- other stuff here --> <workunit name="chooseA"Aguard="cdl:getVariable('Chosen','','','Broker')='A'" >guard="cdl:getVariable(,Chosen,,,,,Broker,)=,A,"<finalize><finalize choreographyName="CoordinatedCreditAuthorization"<finalizerReferencechoreographyInstanceId="'creditForA'" finalizerName="drawDown"/>choreographyInstanceId="creditForA"<finalize choreographyName="CoordinatedCreditAuthorization"<finalizerReferencechoreographyInstanceId="'creditForB'" finalizerName="replenish"/>choreographyInstanceId="creditForB"</workunit> <workunit name="chooseB"</finalize>guard="cdl:getVariable('Chosen','','','Broker')='B'" >guard="cdl:getVariable(,Chosen,,,,,Broker,)=,B,"<finalize><finalize choreographyName="CoordinatedCreditAuthorization"<finalizerReferencechoreographyInstanceId="'creditForB'" finalizerName="drawDown"/>choreographyInstanceId="creditForB"<finalize choreographyName="CoordinatedCreditAuthorization"<finalizerReferencechoreographyInstanceId="'creditForA'" finalizerName="replenish"/>choreographyInstanceId="creditForA"</workunit> <workunit name="chooseNeither"</finalize>guard="cdl:getVariable('Chosen','','','Broker')='0'" >guard="cdl:getVariable(,Chosen,,,,,Broker,)=,0,"<finalize><finalize choreographyName="CoordinatedCreditAuthorization"<finalizerReferencechoreographyInstanceId="'creditForA'" finalizerName="replenish"/>choreographyInstanceId="creditForA"<finalize choreographyName="CoordinatedCreditAuthorization"<finalizerReferencechoreographyInstanceId="'creditForB'" finalizerName="replenish"/>choreographyInstanceId="creditForB"</workunit> </choreography></finalize>
Security specifications,
such as WS-Security
[WSS
specification]],
provide enhancements to SOAP messaging to provide
quality of protection through message integrity, message
confidentiality, and single message authentication, including a
general-purpose mechanism for associating security tokens with
messages, and a description of how to encode binary security
tokens.provides
As messages can have consequences in the real world,
collaboration
participants will impose
security requirements on their information exchanges. WS-Security
and other
security specifications can be
used satisfy many of these requirements.parties
5RelationshipA
violation of
any of the
security consistency
guarantees provided
by the
security specifications
results in
"errors" which
MAY be
reflected in the
choreography as
exceptions, identified
by different
"QNames".with
Reliability specifications,
such as WS-Reliability
[WSRM]
specificationand
WS-ReliableMessaging [WSRM],
provide a reliable mechanism to exchange
information among collaborating providesparties.TheWS-Reliabilityspecificationparticipants.
These specifications
prescribe the formats for all information
exchanged without placing any restrictions on the content of the
encapsulated business documents. prescribesTheWS-ReliabilityspecificationThese
specifications support message
exchange supportspatterns over
various transport protocols (examples are HTTP/S, FTP, SMTP, etc.).
patterns,TheWS-ReliabilityspecificationThese
specifications support
sequencing of messages and guaranteed, exactly once delivery.supports
A violation of any of these consistency guarantees results in
an"errors" which MAY be
reflected in the "error",ChoreographywithanException.6choreography
as exceptions,
identified by
different "QNames".Relationship
In WS-CDL, Alignmentalignment
interactions and
InteractionsCoordinatedcoordinated
choreographies require support from a
Choreographiescoordination
protocol, where agreement on the outcome among
Coordinationparticipants can be
reached even in the case of failures and loss of messages. In this
case, the partiesAlignmentalignment
interactions and the
InteractionsCoordinatedcoordinated
choreographies MUST be bound to a
Choreographiescoordination
protocol.Coordination
Web Services
Addressing [WSAD] provides
transport-neutral mechanisms to address Web services and
messages,messages.
Web Services
Addressing 1.0
- Core
defines a set
of abstract
properties and
an XML Infoset [XML], [XMLNS]
specifically,representation
thereof to identify Web service endpoints and to
elementsfacilitate end-to-end
secureidentification of
endpoints in messages.
endpointThe
specification enables messaging systems to
support message transmission through networks that include
processing nodes such as endpoint managers, firewalls, and gateways
in a transport-neutral manner.WS-Addressing
WS-Addressing can be used to convey the reference and
correlation information for normalizing expanded
Channelchannel
variable information into
Variablea uniform format that can be
processed independently of transport or application.an
The WS-Addressing specification is in progress and the
WS-Choreography Working Group will review and comment on
developments of this effort
on an inongoingbasis.8ConformanceTobeongoing
basis.completed
This document has been produced by the members of the Web
Services Choreography Working Group. The chairs of this Working
Group are Martin Chapman (Oracle Corporation) and Steve Ross-Talbot
(Enigmatec(Pi4
Technologies Ltd). The editors
would like to thank the Working Group members for their
contributions. Members of the Working Group are (at the time of
writing): Daniel Austin
(Sun Microsystems,
Inc.), Abbie Barbir (Nortel Networks), Charlton
Barreto Corporation).(webMethods,(Adobe
Systems, Inc), Carine Bournez
(W3C), Gary Brown
Inc.),(Pi4
Technologies Ltd),
Ugo Corda
(SeeBeyond Technology
Corporation), Anthony Fletcher (Choreology Ltd), Peter Furniss
(Choreology Ltd), (EnigmatecJimHendler(UniversityofMaryland(MindKohei Honda (Queen Mary and Westerfield
College), Lab)),Duncan
Johnston-Watt (Enigmatec
Corporation), Nickolas Kavantzas
(Oracle Corporation), NickolasYutakaKudou(Hitachi,Yves Lafon (W3C), Monica Martin (Sun
Microsystems, Inc.), Robin Milner (Cambridge University), Jeff
Mischkinsky (Oracle Corporation), Ltd.),BijanParsia(UniversityofMaryland(MindGreg Ritzinger
(Novell), Lab)),YokoSeki(Hitachi,Ltd.),PrasadYendluri(webMethods,Nobuko
Yoshida (Imperial College London). Previous members of the Working
Group were: Assaf Arkin (Intalio Inc.), Inc.),DanielAustin(SunMicrosystems,Alistair
Barros (DSTC Pty Ltd (CITEC)), Richard Bonneau (IONA), Allen Brown
(Microsoft Corporation), Mike Brumbelow (Apple), David Burdett
(Commerce One), Ravi Byakod (Intalio Inc.), Michael Champion
(Software AG), David Chapell (Sonic Software),
Inc.),UgoCorda(SeeBeyondTechnologyFred Cummins (EDS), Jon Dart (TIBCO
Software), Jean-Jacques Dubray (Attachmate), William Eidson (TIBCO
Software), Colleen Evans (Sonic Software), Keith Evans
(Hewlett-Packard), Yaron Goland (BEA Systems), Leonard Greski (W.
W. Grainger, Inc.), Jim Hendler
(University of
Maryland (Mind
Lab)), Ricky Ho (Cisco Systems Inc.), Andre
Huertas (Uniform Code Council), Corporation),DuncanJohnston-Watt(EnigmatecEunju Kim (National Computerization
Agency), Mayilraj Krishnan (Cisco Systems Inc.), Melanie Kudela
(Uniform Code Council), Yutaka
Kudou (Hitachi,
Ltd.), Bruno Kurtic (webMethods,
Corporation),Inc.), Paul
Lipton (Computer Associates), Kevin Liu (SAP AG), Francis McCabe
(Fujitsu
Inc.),Ltd.), Carol
McDonald (Sun Microsystems, Inc.), Greg Meredith (Microsoft
Corporation), Eric Newcomer (IONA), Bijan
Parsia (University
of Maryland
(Mind Lab)), Sanjay Patil
(IONA), Ed Peters (webMethods, Inc.), Steve Pruitt (Novell),
Yoko Seki
(Hitachi, Ltd.), Dinesh Shahane
(TIBCO Software), Evren Sirin (University of Maryland (Mind Lab)),
Ivana Trickovic (SAP AG), William Vambenepe (Hewlett-Packard), Jim
Webber (Arjuna Technologies Ltd.), Stuart Wheater (Arjuna
Technologies Ltd.), Steven White (SeeBeyond Technology
Corporation), Prasad Yendluri
(webMethods, Inc.), Hadrian
Zbarcea (IONA).Ltd.),
application
cdl+xml
none
This parameter
has identical
semantics to athe
charset parameter
of the
"application/xml" media
type as
specified in
RFC 3023 [RFC
3023].lack
Identical to
those of
"application/xml"
as described in
clarityexistingXMLRFC
3023 [RFC
3023],
section 3.2.specifications,
WS-CDL has the
WS-ChoreographyWorkingGroupisunablesame
security considerations
described in
RFC3023 [RFC
3023],
section 10.at
There are no known interoperability issues.
This document
No known applications currently use this media type.
CDL
Identical to recommendanapproachforaccessingandmodifyingthat of
members"application/xml"
as described
in RFC 3023
[RFC
3023],
section 5.lists
As specified in RFC 3023 [RFC 3023], section 6.
TEXT
Yves Lafon <[email protected]>
COMMON
The WS-CDL
1.0 specification is
a specifyingchoreographybydefininghowitisbasedonanotherchoreography).work Thisisnotfinalizedproduct of
asyet,butwedonotbelieveitwillhaveamajorimpactthe onarchitecture.World Wide
Web Consortium's http://www.w3.org/2002/ws/chor/.
The W3C has
change control
over this
specification.12
<?xml version="1.0" encoding="UTF-8"?> <schema xmlns="http://www.w3.org/2001/XMLSchema"xmlns:cdl="http://www.w3.org/2004/12/ws-chor/cdl"xmlns:cdl="http://www.w3.org/2005/10/cdl" targetNamespace="http://www.w3.org/2005/10/cdl" elementFormDefault="qualified"> <complexType name="tExtensibleElements"> <annotation> <documentation> This type is extended by othertargetNamespace="http://www.w3.org/2004/12/ws-chor/cdl"WS-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 allCDLWS-CDL constructs. </documentation> </annotation> <sequence> <element name="description" minOccurs="0"> <complexType mixed="true"> <sequence minOccurs="0" maxOccurs="unbounded"> <any processContents="lax"/> </sequence> <attribute name="type" type="cdl:tDescriptionType" use="optional" default="documentation"/> </complexType> </element>CDL<anynamespace="##other"<element name="CDLExtension" minOccurs="0"processContents="lax"maxOccurs="unbounded"> <complexType> <sequence minOccurs="0" maxOccurs="unbounded"> <any processContents="lax"/> </sequence> </complexType> </element> </sequence> <anyAttribute namespace="##other" processContents="lax"/> </complexType> <element name="package" type="cdl:tPackage"/> <complexType name="tPackage"> <complexContent> <extension base="cdl:tExtensibleElements"> <sequence> <element name="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="roleType" type="cdl:tRoleType" minOccurs="0" maxOccurs="unbounded"/> <element name="relationshipType" type="cdl:tRelationshipType" minOccurs="0" maxOccurs="unbounded"/> <element name="participantType" type="cdl:tParticipantType" 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="optional"/> <attribute name="targetNamespace" type="anyURI" use="required"/> </extension> </complexContent> </complexType> <complexType name="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"/>maxOccurs="unbounded"/><attributename="exceptionType"type="boolean"use="optional"default="false"</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="part" type="NCName" use="optional" /> <attribute name="query" type="cdl:tXPath-expr" use="required"/> </extension> </complexContent> </complexType> <complexType 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="tRelationshipType"> <complexContent> <extension base="cdl:tExtensibleElements"> <sequence> <element/>name="roleType" 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"> <attributename="role"name="typeRef" type="QName" use="required"/> <attribute name="behavior" use="optional"> <simpleType> <list itemType="NCName"/> </simpleType> </attribute> </extension> </complexContent> </complexType> <complexType name="tParticipantType"> <complexContent> <extension base="cdl:tExtensibleElements"> <sequence> <elementname="type"name="roleType" type="cdl:tRoleRef2" maxOccurs="unbounded"/> </sequence> <attribute name="name" type="NCName" use="required"/> </extension> </complexContent> </complexType> <complexType name="tRoleRef2"> <complexContent> <extension base="cdl:tExtensibleElements"> <attributename="role"name="typeRef" 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"/> <elementname="type"name="roleType" type="cdl:tRoleRef3"/> <element name="reference" type="cdl:tReference"/> <element name="identity" type="cdl:tIdentity" minOccurs="0"name="role"maxOccurs="unbounded"/> </sequence> <attribute name="name" type="NCName" use="required"/> <attribute name="usage" type="cdl:tUsage" use="optional"maxOccurs="1"/>default="distinct"/> <attribute name="action" type="cdl:tAction" use="optional" default="request"/> </extension> </complexContent> </complexType> <complexType name="tRoleRef3"> <complexContent> <extension base="cdl:tExtensibleElements"> <attributedefault="unlimited"/>name="typeRef" 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"/> <attribute name="new" type="boolean" use="optional" default="false"/> </extension> </complexContent> </complexType> <complexType name="tReference"> <complexContent> <extension base="cdl:tExtensibleElements"> <sequence> <element name="token" type="cdl:tTokenReference" 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> <attribute name="usage" type="cdl:tUsageI" use="optional" default="primary"/> </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="exceptionBlock" type="cdl:tException" minOccurs="0"/> <element name="finalizerBlock" type="cdl:tFinalizer" minOccurs="0" maxOccurs="unbounded"/> </sequence> <attribute name="name" type="NCName" use="required"/> <attribute name="complete" type="cdl:tBoolean-expr" use="optional"/> <attribute name="isolation" type="boolean" use="optional" default="false"/> <attribute name="root" type="boolean" use="optional" default="false"/> <attribute name="coordination" 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" type="boolean" use="optional" default="false"/> <attribute name="roleTypes" use="optional"> <simpleType> <list itemType="QName"/> </simpleType> </attribute> </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="silentAction" type="cdl:tSilentAction"/> <element name="noAction" type="cdl:tNoAction"/> <element name="finalize" type="cdl:tFinalize"/> <any namespace="##other" processContents="lax"/> </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="optional" default="false"/> </extension> </complexContent> </complexType> <complexType name="tPerform"> <complexContent> <extension base="cdl:tExtensibleElements"> <sequence> <element name="bind" type="cdl:tBind" minOccurs="0" maxOccurs="unbounded"/> <element name="choreography" type="cdl:tChoreography" minOccurs="0" maxOccurs="1"/> </sequence> <attribute name="choreographyName" type="QName" use="required"/> <attribute name="choreographyInstanceId" type="cdl:tXPath-expr" use="optional"/> <attribute name="block" type="boolean" use="optional" default="true"/> </extension> </complexContent> </complexType> <complexType name="tBind"> <complexContent> <extension base="cdl:tExtensibleElements"> <sequence> <element name="this" type="cdl:tBindVariable"/> <element name="free" type="cdl:tBindVariable"/> </sequence> <attribute name="name" type="NCName" use="required"/> </extension> </complexContent> </complexType> <complexType name="tBindVariable"> <complexContent> <extension base="cdl:tExtensibleElements"> <attribute name="variable" type="cdl:tXPath-expr" use="required"/> <attributename="type"name="roleType" 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="timeout" type="cdl:tTimeout" minOccurs="0" maxOccurs="1"/> <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="align" type="boolean" use="optional" default="false"/> <attribute name="initiate" type="boolean" use="optional" default="false"/> </extension> </complexContent> </complexType> <complexType name="tTimeout"> <complexContent> <extension base="cdl:tExtensibleElements"> <attribute name="time-to-complete" type="cdl:tXPath-expr" use="required"/> <attributename="role"name="fromRoleTypeRecordRef" use="optional"> <simpleType> <list itemType="NCName"/> </simpleType> </attribute> <attributename="fromRoleRecordReference"name="toRoleTypeRecordRef" use="optional"> <simpleType> <list itemType="NCName"/> </simpleType> </attribute> </extension> </complexContent> </complexType> <complexType name="tParticipate"> <complexContent> <extension base="cdl:tExtensibleElements"> <attribute name="relationshipType" type="QName" use="required"/> <attributename="toRoleRecordReference"name="fromRoleTypeRef" type="QName" use="required"/> <attributename="fromRole"name="toRoleTypeRef" type="QName" use="required"/> </extension> </complexContent> </complexType> <complexType name="tExchange"> <complexContent> <extension base="cdl:tExtensibleElements"> <sequence> <element name="send" type="cdl:tVariableRecordRef"/> <element name="receive" type="cdl:tVariableRecordRef"/> </sequence> <attribute name="name" type="NCName" use="required"/> <attribute name="faultName" type="QName" use="optional"/> <attribute name="informationType" type="QName" use="optional"/> <attribute name="channelType" type="QName" 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> <attribute name="causeException"name="toRole"type="QName" use="optional"type="boolean"/> </extension> </complexContent> </complexType> <complexType name="tRecord"> <complexContent> <extension base="cdl:tExtensibleElements"> <sequence> <element name="source" type="cdl:tSourceVariableRef"/> <element name="target" type="cdl:tVariableRef"/> </sequence> <attribute name="name" type="NCName" use="required"/> <attribute name="causeException"default="false"/>type="QName" use="optional"type="boolean"/> <attribute name="when" type="cdl:tWhenType" use="required"/> </extension> </complexContent> </complexType> <complexType name="tSourceVariableRef"> <complexContent> <extension base="cdl:tExtensibleElements"> <attribute name="variable" type="cdl:tXPath-expr" use="optional"/> <attribute name="expression" type="cdl:tXPath-expr" use="optional"/> </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="tAssign"> <complexContent> <extension base="cdl:tExtensibleElements"> <sequence> <element name="copy" type="cdl:tCopy" maxOccurs="unbounded"/> </sequence> <attribute name="roleType" type="QName" use="required"/> </extension> </complexContent> </complexType> <complexType name="tCopy"> <complexContent> <extension base="cdl:tExtensibleElements"> <sequence> <element name="source" type="cdl:tSourceVariableRef"/> <element name="target" type="cdl:tVariableRef"/> </sequence> <attribute name="name" type="NCName" use="required"/> <attribute name="causeException"default="false"/>type="QName" use="optional"type="boolean"/> </extension> </complexContent> </complexType> <complexType name="tSilentAction"> <complexContent> <extension base="cdl:tExtensibleElements"> <attribute name="roleType" type="QName" use="optional"/> </extension> </complexContent> </complexType> <complexType name="tNoAction"> <complexContent> <extension base="cdl:tExtensibleElements"> <attribute name="roleType" type="QName" use="optional"/> </extension> </complexContent> </complexType> <complexType name="tFinalize"> <complexContent> <extension base="cdl:tExtensibleElements">default="false"/><sequence><elementname="finalizerReference"type="cdl:tFinalizerReference"maxOccurs="unbounded"/><attribute name="name" type="NCName" use="required"/></sequence></extension></complexContent></complexType><complexTypename="tFinalizerReference"><complexContent><extension<attribute name="choreographyName" type="NCName" use="required"/> <attribute name="choreographyInstanceId" type="cdl:tXPath-expr" use="optional"/> <attribute name="finalizerName" type="NCName" 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>base="cdl:tExtensibleElements"><elementname="workunit"<group ref="cdl:activity"/> </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"/> <enumerationtype="cdl:tWorkunit"/>value="distinct"/> <enumeration value="shared"/> </restriction> </simpleType> <simpleType name="tUsageI"> <restriction base="string"> <enumeration value="primary"/> <enumeration value="alternate"/> <enumeration value="derived"/> <enumeration value="association"/> </restriction> </simpleType> <simpleType name="tWhenType"> <restriction base="string"> <enumeration value="before"/> <enumeration value="after"/> <enumeration value="timeout"/> </restriction> </simpleType> <simpleType name="tBoolean-expr"> <restriction base="string"/> </simpleType> <simpleType name="tXPath-expr"> <restriction base="string"/> </simpleType> <simpleType name="tDescriptionType"> <restriction base="string"> <enumeration value="documentation"/> <enumeration value="reference"/> <enumeration value="semantics"/> </restriction> </simpleType> </schema>value="unlimited"/>