<?xml version='1.0' encoding="UTF-8"?>
<!--

Legal Disclaimer

The presentation, distribution or other dissemination of the information 
contained in this specification is not a license, either expressly or impliedly, 
to any intellectual property owned or controlled by BEA or IBM or Microsoft and\or any other 
third party.  BEA and IBM and Microsoft and\or any other third party may have patents, patent 
applications, trademarks, copyrights, or other intellectual property rights 
covering subject matter in this document.  The furnishing of this document 
does not give you any license to BEA's and IBM's and Microsoft's or any other third party's patents, 
trademarks, copyrights, or other intellectual property.

This specification and the information contained herein is provided on an "AS IS"
 basis and to the maximum extent permitted by applicable law, BEA and IBM and Microsoft provides 
the document AS IS AND WITH ALL FAULTS, and hereby disclaims all other warranties 
and conditions, either express, implied or statutory, including, but not limited 
to, any (if any) implied warranties, duties or conditions of merchantability, of 
fitness for a particular purpose, of accuracy or completeness of responses, of 
results, of workmanlike effort, of lack of viruses, and of lack of negligence, 
all with regard to the document. ALSO, THERE IS NO WARRANTY OR CONDITION OF 
TITLE, QUIET ENJOYMENT, QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR 
NON-INFRINGEMENT OF ANY INTELLECTUAL PROPERTY RIGHTS WITH REGARD TO THE DOCUMENT.

IN NO EVENT WILL BEA or IBM or MICROSOFT BE LIABLE TO ANY OTHER PARTY FOR THE COST OF PROCURING 
SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS OF USE, LOSS OF DATA, OR ANY 
INCIDENTAL, CONSEQUENTIAL, DIRECT, INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER 
CONTRACT, TORT, WARRANTY, OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY 
OTHER AGREEMENT RELATING TO THIS DOCUMENT, WHETHER OR NOT SUCH PARTY HAD ADVANCE 
NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.

Copyright Notice

Copyright 2001, 2002 BEA Systems and IBM Corporation and Microsoft Corporation. All rights reserved

-->

<schema xmlns="http://www.w3.org/2001/XMLSchema"    
        xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 
        xmlns:bpws="http://schemas.xmlsoap.org/ws/2002/07/business-process/" 
        targetNamespace="http://schemas.xmlsoap.org/ws/2002/07/business-process/" 
        elementFormDefault="qualified">

   <import namespace="http://schemas.xmlsoap.org/wsdl/"/>

   <element name="property">
       <complexType>
          <attribute name="name" type="NCName"/>
          <attribute name="type" type="QName"/>
       </complexType>
   </element>

   <element name="propertyAlias">
       <complexType>
          <attribute name="propertyName" type="QName" />
          <attribute name="messageType" type="QName"/>
          <attribute name="part" type="NCName"/>
          <attribute name="select" type="string"/>
       </complexType>
    </element>

    <complexType name="tExtensibleElements">
        <annotation>
            <documentation>This type is extended by other component types to allow elements and attributres from other namespaces to be added. .</documentation>
        </annotation>
        <sequence>
            <any namespace="##other" minOccurs="0" maxOccurs="unbounded" processContents="lax"/>
        </sequence>
        <anyAttribute namespace="##other" processContents="lax"/>

    </complexType>

    <element name="process" type="bpws:tProcess"/>
    <complexType name="tProcess">
        <complexContent>
            <extension base="bpws:tExtensibleElements">
                <sequence>
                    <element name="partners" type="bpws:tPartners" minOccurs="0"/>
                    <element name="containers" type="bpws:tContainers" minOccurs="0"/>
                    <element name="correlationSets" type="bpws:tCorrelationSets" minOccurs="0"/>
                    <element name="faultHandlers" type="bpws:tFaultHandlers" minOccurs="0"/>
                    <element name="compensationHandler" type="bpws:tCompensationHandler" minOccurs="0"/>
                    <group ref="bpws:activity"/>
                </sequence>
                <attribute name="name" type="NCName"/>
                <attribute name="targetNamespace" type="anyURI"/>
                <attribute name="suppressJoinFailure" type="bpws:tBoolean" default="no"/>
                <attribute name="containerAccessSerializable" type="bpws:tBoolean" default="no"/>
                <attribute name="enableInstanceCompensation" type="bpws:tBoolean" default="no"/>
                <attribute name="abstractProcess" type="bpws:tBoolean" default="no"/>
            </extension>
        </complexContent>
    </complexType>

    <group name="activity">
        <choice>
            <element name="empty" type="bpws:tEmpty"/>
            <element name="invoke" type="bpws:tInvoke"/>
            <element name="receive" type="bpws:tReceive"/>
            <element name="reply" type="bpws:tReply"/>
            <element name="assign" type="bpws:tAssign"/>
            <element name="wait" type="bpws:tWait"/>
            <element name="throw" type="bpws:tThrow"/>
            <element name="terminate" type="bpws:tTerminate"/>
            <element name="flow" type="bpws:tFlow"/>
            <element name="switch" type="bpws:tSwitch"/>
            <element name="while" type="bpws:tWhile"/>
            <element name="sequence" type="bpws:tSequence"/>
            <element name="pick" type="bpws:tPick"/>
            <element name="scope" type="bpws:tScope"/>
        </choice>
    </group>


    <complexType name="tPartners">
        <complexContent>
            <extension base="bpws:tExtensibleElements">

                <sequence>
                    <element name="partner" type="bpws:tPartner" minOccurs="1" maxOccurs="unbounded"/>
                </sequence>
            </extension>
        </complexContent>
    </complexType>

    <complexType name="tPartner">
        <complexContent>
            <extension base="bpws:tExtensibleElements">
                <attribute name="name" type="NCName" use="required"/>
                <attribute name="serviceLinkType" type="QName" use="required"/>
                <attribute name="myRole" type="NCName"/>
                <attribute name="partnerRole" type="NCName"/>
            </extension>
        </complexContent>
    </complexType>

    <complexType name="tFaultHandlers">
        <complexContent>
            <extension base="bpws:tExtensibleElements">

                <sequence>
                    <element name="catch" type="bpws:tCatch" minOccurs="0" maxOccurs="unbounded"/>
                    <element name="catchAll" type="bpws:tActivityOrCompensateContainer" minOccurs="0"/>
                </sequence>
            </extension>
        </complexContent>
    </complexType>

    <complexType name="tCatch">
        <complexContent>
            <extension base="bpws:tActivityOrCompensateContainer">
                <attribute name="faultName" type="QName" use="optional"/>
                <attribute name="faultContainer" type="NCName" use="optional"/>
            </extension>
        </complexContent>
    </complexType>


    <complexType name="tActivityContainer">
        <complexContent>
            <extension base="bpws:tExtensibleElements">
                <sequence>
                    <group ref="bpws:activity"/>
                </sequence>
            </extension>
        </complexContent>
    </complexType>
    <complexType name="tActivityOrCompensateContainer">
        <complexContent>
            <extension base="bpws:tExtensibleElements">
                <choice>
                    <group ref="bpws:activity"/>
                    <element name="compensate" type="bpws:tCompensate"/>
                </choice>
            </extension>
        </complexContent>
    </complexType>


    <complexType name="tOnMessage">
        <complexContent>
            <extension base="bpws:tExtensibleElements">

                <sequence>
                    <element name="correlations" type="bpws:tCorrelations" minOccurs="0"/>
                    <group ref="bpws:activity"/>
                </sequence>
                <attribute name="partner" type="NCName" use="required"/>
                <attribute name="portType" type="QName" use="required"/>
                <attribute name="operation" type="NCName" use="required"/>
                <attribute name="container" type="NCName" use="required"/>
            </extension>
        </complexContent>

    </complexType>

    <complexType name="tOnAlarm">
        <complexContent>
            <extension base="bpws:tActivityContainer">
                <attribute name="for" type="bpws:tDuration-expr" use="optional"/>
                <attribute name="until" type="bpws:tDeadline-expr" use="optional"/>
            </extension>
        </complexContent>
    </complexType>

    <complexType name="tCompensationHandler">
        <complexContent>
            <extension base="bpws:tActivityOrCompensateContainer"/>
        </complexContent>
    </complexType>

    <complexType name="tContainers">
        <complexContent>
            <extension base="bpws:tExtensibleElements">

                <sequence>
                    <element name="container" type="bpws:tContainer" maxOccurs="unbounded"/>
                </sequence>
            </extension>
        </complexContent>

    </complexType>

    <complexType name="tContainer">
             
                <!-- container does not allow extensibility elements           because otherwise its content model would be non-deterministic -->
                <sequence>
                    <element name="message" type="wsdl:tMessage"
                             minOccurs="0">
                        <unique name="part">
                             <selector xpath="wsdl:part"/>
                             <field xpath="@name"/>
                        </unique>
                    </element>
                </sequence>
                <attribute name="name" type="NCName" use="required"/>
                <attribute name="messageType" type="QName" use="optional"/>
                <anyAttribute namespace="##other" processContents="lax"/>
        

    </complexType>

    <complexType name="tCorrelationSets">
        <complexContent>
            <extension base="bpws:tExtensibleElements">


                <sequence>
                    <element name="correlationSet" type="bpws:tCorrelationSet" maxOccurs="unbounded"/>
                </sequence>
            </extension>
        </complexContent>

    </complexType>

    <complexType name="tCorrelationSet">
        <complexContent>
            <extension base="bpws:tExtensibleElements">

                <attribute name="properties" use="required">
                    <simpleType>
                        <list itemType="QName"/>
                    </simpleType>
                </attribute>
                <attribute name="name" type="NCName" use="required"/>
            </extension>
        </complexContent>

    </complexType>

    <complexType name="tActivity">
        <complexContent>
            <extension base="bpws:tExtensibleElements">


                <sequence>
                    <element name="target" type="bpws:tTarget" minOccurs="0" maxOccurs="unbounded"/>
                    <element name="source" type="bpws:tSource" minOccurs="0" maxOccurs="unbounded"/>
                </sequence>
                <attribute name="name" type="NCName" use="optional"/>
                <attribute name="joinCondition" type="bpws:tBoolean-expr" use="optional"/>
                <attribute name="suppressJoinFailure" type="bpws:tBoolean" use="optional"/>
            </extension>
        </complexContent>

    </complexType>

    <complexType name="tSource">
        <complexContent>
            <extension base="bpws:tExtensibleElements">


                <attribute name="linkName" type="NCName" use="required"/>
                <attribute name="transitionCondition" type="bpws:tBoolean-expr" use="optional"/>
            </extension>
        </complexContent>

    </complexType>

    <complexType name="tTarget">
        <complexContent>
            <extension base="bpws:tExtensibleElements">


                <attribute name="linkName" type="NCName" use="required"/>
            </extension>
        </complexContent>

    </complexType>

    <complexType name="tEmpty">
        <complexContent>
            <extension base="bpws:tActivity"/>
        </complexContent>
    </complexType>

    <complexType name="tCorrelations">
        <complexContent>
            <extension base="bpws:tExtensibleElements">
               <sequence>
            <element name="correlation" type="bpws:tCorrelation" minOccurs="1" maxOccurs="unbounded" />
         </sequence>
      </extension>
   </complexContent>
   </complexType>
   <complexType name="tCorrelation">
      <complexContent>
         <extension base="bpws:tExtensibleElements">
                <attribute name="set" type="NCName" use="required"/>
                <attribute name="initiation" type="bpws:tBoolean" use="optional" default="no"/>
          <attribute name="pattern" use="optional">
          <simpleType>
            <restriction base="string">
               <enumeration value="in" />
               <enumeration value="out" />
               <enumeration value="out-in" />
            </restriction>
          </simpleType>
           </attribute>
            </extension>
        </complexContent>

    </complexType>

    <complexType name="tInvoke">
        <complexContent>
            <extension base="bpws:tActivity">
                <sequence>
                    <element name="correlations" type="bpws:tCorrelations"  minOccurs="0" maxOccurs="1"/>
                    <element name="catch" type="bpws:tCatch" minOccurs="0" maxOccurs="unbounded"/>
                    <element name="catchAll" type="bpws:tActivityOrCompensateContainer" minOccurs="0"/>
                    <element name="compensationHandler" type="bpws:tCompensationHandler" minOccurs="0"/>
                </sequence>
                <attribute name="partner" type="NCName" use="required"/>
                <attribute name="portType" type="QName" use="required"/>
                <attribute name="operation" type="NCName" use="required"/>
                <attribute name="inputContainer" type="NCName" use="required"/>
                <attribute name="outputContainer" type="NCName" use="optional"/>
            </extension>
        </complexContent>
    </complexType>

    <complexType name="tReceive">
        <complexContent>
            <extension base="bpws:tActivity">
                <sequence>
                    <element name="correlations" type="bpws:tCorrelations" minOccurs="0"/>
                </sequence>
                <attribute name="partner" type="NCName" use="required"/>
                <attribute name="portType" type="QName" use="required"/>
                <attribute name="operation" type="NCName" use="required"/>
                <attribute name="container" type="NCName" use="required"/>
                <attribute name="createInstance" type="bpws:tBoolean" use="optional"/>
            </extension>
        </complexContent>
    </complexType>

    <complexType name="tReply">
        <complexContent>
            <extension base="bpws:tActivity">
                <sequence>
                    <element name="correlations" type="bpws:tCorrelations" minOccurs="0"/>
                </sequence>
                <attribute name="partner" type="NCName" use="required"/>
                <attribute name="portType" type="QName" use="required"/>
                <attribute name="operation" type="NCName" use="required"/>
                <attribute name="container" type="NCName" use="required"/>
                <attribute name="faultName" type="QName" use="optional"/>
            </extension>
        </complexContent>
    </complexType>

    <complexType name="tAssign">
        <complexContent>
            <extension base="bpws:tActivity">
                <sequence>
                    <element name="copy" type="bpws:tCopy" minOccurs="1" maxOccurs="unbounded"/>
                </sequence>
            </extension>
        </complexContent>
    </complexType>

    <complexType name="tCopy">
        <complexContent>
            <extension base="bpws:tExtensibleElements">

                <sequence>
                    <element ref="bpws:from"/>
                    <element ref="bpws:to"/>
                </sequence>
            </extension>
        </complexContent>
    </complexType>

    <element name="from" type="bpws:tFrom"/>
    <complexType name="tFrom">
        <complexContent>
            <extension base="bpws:tExtensibleElements">


                <attribute name="container" type="NCName"/>
                <attribute name="part" type="NCName"/>
                <attribute name="select" type="string"/>
                <attribute name="property" type="QName"/>
                <attribute name="partner" type="NCName"/>
                <attribute name="expression" type="string"/>
                <attribute name="opaque" type="bpws:tBoolean"/>
            </extension>
        </complexContent>

    </complexType>
    <element name="to">
        <complexType>
            <complexContent>
                <restriction base="bpws:tFrom">
                    <attribute name="expression" type="string" use="prohibited"/>
                    <attribute name="opaque" type="bpws:tBoolean" use="prohibited"/>
                </restriction>
            </complexContent>
        </complexType>
    </element>
    
    
    <complexType name="tWait">
        <complexContent>
            <extension base="bpws:tActivity">
                <attribute name="for" type="bpws:tDuration-expr" use="optional"/>
                <attribute name="until" type="bpws:tDeadline-expr" use="optional"/>
            </extension>
        </complexContent>
    </complexType>

    <complexType name="tThrow">
        <complexContent>
            <extension base="bpws:tActivity">
                <attribute name="faultName" type="QName" use="required"/>
                <attribute name="faultContainer" type="NCName"/>
            </extension>
        </complexContent>
    </complexType>

    <complexType name="tCompensate">
        <complexContent>
            <extension base="bpws:tActivity">
                <attribute name="scope" type="NCName" use="optional"/>
            </extension>
        </complexContent>
    </complexType>

    <complexType name="tTerminate">
        <complexContent>
            <extension base="bpws:tActivity"/>
        </complexContent>
    </complexType>

    <complexType name="tFlow">
        <complexContent>
            <extension base="bpws:tActivity">
                <sequence>
                    <element name="links" type="bpws:tLinks" minOccurs="0"/>
                    <group ref="bpws:activity" maxOccurs="unbounded"/>
                </sequence>
            </extension>
        </complexContent>
    </complexType>

    <complexType name="tLinks">
        <complexContent>
            <extension base="bpws:tExtensibleElements">
                <sequence>
                    <element name="link" type="bpws:tLink" maxOccurs="unbounded"/>
                </sequence>
            </extension>
        </complexContent>

    </complexType>

    <complexType name="tLink">
        <complexContent>
            <extension base="bpws:tExtensibleElements">
                <attribute name="name" type="NCName" use="required"/>
            </extension>
        </complexContent>

    </complexType>

    <complexType name="tSwitch">
        <complexContent>
            <extension base="bpws:tActivity">
                <sequence>
                    <element name="case" maxOccurs="unbounded">
                        <complexType>
                            <complexContent>
                                <extension base="bpws:tActivityContainer">
                                    <attribute name="condition" type="bpws:tBoolean-expr" use="required"/>
                                </extension>
                            </complexContent>
                        </complexType>
                    </element>
                    <element name="otherwise" type="bpws:tActivityContainer" minOccurs="0"/>
                </sequence>
            </extension>
        </complexContent>
    </complexType>

    <complexType name="tWhile">
        <complexContent>
            <extension base="bpws:tActivity">
                <sequence>
                    <group ref="bpws:activity"/>
                </sequence>
                <attribute name="condition" type="bpws:tBoolean-expr" use="required"/>
            </extension>
        </complexContent>
    </complexType>

    <complexType name="tSequence">
        <complexContent>
            <extension base="bpws:tActivity">
                <sequence>
                    <group ref="bpws:activity" maxOccurs="unbounded"/>
                </sequence>
            </extension>
        </complexContent>
    </complexType>

    <complexType name="tPick">
        <complexContent>
            <extension base="bpws:tActivity">
                <sequence>
                    <element name="onMessage" type="bpws:tOnMessage" maxOccurs="unbounded"></element>
                    <element name="onAlarm" type="bpws:tOnAlarm" minOccurs="0" maxOccurs="unbounded"/>
                </sequence>
                <attribute name="createInstance" type="bpws:tBoolean" use="optional"/>
            </extension>
        </complexContent>
    </complexType>

    <complexType name="tScope">
        <complexContent>
            <extension base="bpws:tActivity">
                <sequence>
                    <element name="faultHandlers" type="bpws:tFaultHandlers" minOccurs="0"/>
                    <element name="compensationHandler" type="bpws:tCompensationHandler" minOccurs="0"/>
                    <group ref="bpws:activity"/>
                </sequence>
                <attribute name="containerAccessSerializable" type="bpws:tBoolean" use="required"/>
            </extension>
        </complexContent>
    </complexType>

    <simpleType name="tListOfNCNames">
        <list itemType="NCName"/>
    </simpleType>

    <simpleType name="tBoolean-expr">
        <restriction base="string"/>
    </simpleType>

    <simpleType name="tDuration-expr">
        <restriction base="string"/>
    </simpleType>

    <simpleType name="tDeadline-expr">
        <restriction base="string"/>
    </simpleType>

    <simpleType name="tBoolean">
        <restriction base="string">
            <enumeration value="yes"/>
            <enumeration value="no"/>
        </restriction>
    </simpleType>
</schema>

