<?xml version="1.0" encoding="UTF-8"?>
<xs:schema targetNamespace="http://docs.oasis-open.org/wscaf/2004/09/wsctx.xsd"
    xmlns:tns="http://docs.oasis-open.org/wscaf/2004/09/wsctx.xsd"
    xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified"
    xmlns:ref="http://docs.oasis-open.org/wsrm/2004/06/reference-1.1.xsd"
    xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
    <xs:import namespace="http://docs.oasis-open.org/wsrm/2004/06/reference-1.1.xsd"/>
    <xs:import namespace="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"/>    
    <!-- Fundamental wsctx types -->
    <xs:complexType name="ContextType">
        <xs:sequence>
            <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
            <xs:element name="context-identifier" type="tns:contextIdentifierType"/>
            <xs:element name="context-service" type="ref:ServiceRefType" minOccurs="0"/>
            <xs:element name="type" type="xs:anyURI" minOccurs="1"/>
            <xs:element name="context-manager" type="ref:ServiceRefType" minOccurs="0"/>
            <xs:element name="parent-context" type="tns:ContextType" minOccurs="0" maxOccurs="1"/>
        </xs:sequence>
        <xs:attribute name="timeout" type="xs:int" use="optional"/>
        <xs:attribute ref="wsu:Id" use="optional"/>
    </xs:complexType>
    <xs:complexType name="contextIdentifierType">
        <xs:simpleContent>
            <xs:extension base="xs:anyURI">
                <xs:attribute ref="wsu:Id" use="optional"/>
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>
    <xs:element name="service-ref" type="ref:ServiceRefType"/>   
    <xs:element name="context" type="tns:ContextType"/>
    <xs:complexType name="StatusType">
        <xs:simpleContent>
            <xs:extension base="xs:string">
                <xs:attribute name="namespace" type="xs:anyURI"/>
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>
    <xs:element name="status" type="tns:StatusType"/>    
    <xs:complexType name="CompletionCommandType">
        <xs:simpleContent>
            <xs:extension base="xs:string">
                <xs:attribute name="namespace" type="xs:anyURI"/>
            </xs:extension>
        </xs:simpleContent>    
    </xs:complexType>
    <xs:complexType name="AssertionType">
        <xs:sequence>
            <xs:any namespace="##other" processContents="lax" minOccurs="0"/>
            <xs:element name="correlation-id" type="xs:string"/>
            <!-- correlation id is mandatory -->
        </xs:sequence>
    </xs:complexType>
    <xs:element name="assertion" type="tns:AssertionType"/>
    <xs:complexType name="AssertionWithProtocolURIType">
        <xs:complexContent>
            <xs:extension base="tns:AssertionType">
                <xs:sequence>
                    <xs:element name="protocol-uri" type="xs:anyURI"/>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
    <xs:element name="begin">
        <xs:complexType>
            <xs:complexContent>
                <xs:extension base="tns:AssertionWithProtocolURIType">
                    <xs:sequence>
                        <xs:element name="timeout" type="xs:int"/>
                    </xs:sequence>
                </xs:extension>
            </xs:complexContent>
        </xs:complexType>
    </xs:element>
    <xs:element name="begun" type="tns:AssertionType"/>
    <xs:complexType name="completionType">
        <xs:complexContent>
            <xs:extension base="tns:AssertionWithProtocolURIType">
                <xs:sequence>
                    <xs:element name="completion-command" type="tns:CompletionCommandType" minOccurs="0"/>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
    <xs:element name="complete" type="tns:completionType"/>
    <xs:element name="completed" type="tns:completionType"/>
    <xs:element name="get-status" type="tns:AssertionWithProtocolURIType"/>
    <xs:element name="got-status">
        <xs:complexType>
            <xs:complexContent>
                <xs:extension base="tns:AssertionType">
                    <xs:sequence>
                        <xs:element ref="tns:status"/>
                    </xs:sequence>
                </xs:extension>
            </xs:complexContent>
        </xs:complexType>
    </xs:element>
    <xs:element name="get-activity-name" type="tns:AssertionWithProtocolURIType"/>
    <xs:element name="activity-name">
        <xs:complexType>
            <xs:complexContent>
                <xs:extension base="tns:AssertionType">
                    <xs:sequence>
                        <xs:element name="activity-name" type="xs:string"/>
                    </xs:sequence>
                </xs:extension>
            </xs:complexContent>
        </xs:complexType>
    </xs:element>
    <xs:element name="get-timeout" type="tns:AssertionWithProtocolURIType"/>
    <xs:element name="timeout">
        <xs:complexType>
            <xs:complexContent>
                <xs:extension base="tns:AssertionType">
                    <xs:sequence>
                        <xs:element name="timeout" type="xs:int"/>
                    </xs:sequence>
                </xs:extension>
            </xs:complexContent>
        </xs:complexType>
    </xs:element>
    <xs:element name="set-timeout">
        <xs:complexType>
            <xs:complexContent>
                <xs:extension base="tns:AssertionWithProtocolURIType">
                    <xs:sequence>
                        <xs:element name="timeout" type="xs:int"/>
                    </xs:sequence>
                </xs:extension>
            </xs:complexContent>
        </xs:complexType>
    </xs:element>
    <xs:element name="timeout-set">
        <xs:complexType>
            <xs:complexContent>
                <xs:extension base="tns:AssertionType">
                    <xs:sequence>
                        <xs:element name="timeout" type="xs:int"/>
                    </xs:sequence>
                </xs:extension>
            </xs:complexContent>
        </xs:complexType>
    </xs:element>
    <xs:element name="get-contents" type="tns:AssertionType"/>
    <xs:element name="contents">
        <xs:complexType>
            <xs:complexContent>
                <xs:extension base="tns:AssertionType">
                    <xs:sequence>
                        <xs:element ref="tns:context"/>
                    </xs:sequence>
                </xs:extension>
            </xs:complexContent>
        </xs:complexType>
    </xs:element>
    <xs:element name="set-contents">
        <xs:complexType>
            <xs:complexContent>
                <xs:extension base="tns:AssertionType">
                    <xs:sequence>
                        <xs:element ref="tns:context"/>
                    </xs:sequence>
                </xs:extension>
            </xs:complexContent>
        </xs:complexType>
    </xs:element>
    <xs:element name="contents-set" type="tns:AssertionType"/>
    <!-- Faults -->
    <xs:complexType name="FaultType">
        <xs:complexContent>
            <xs:extension base="tns:AssertionType">
                <xs:sequence>
                    <xs:element name="originator" type="xs:anyURI"/>
                    <xs:element name="error-code" type="xs:anyURI"/>
                    <xs:element name="description" type="xs:string" minOccurs="0"/>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
    <xs:element name="fault" type="tns:FaultType" abstract="true"/>
    <xs:element name="general-fault" type="tns:FaultType"/>
    <xs:element name="invalid-state-fault" type="tns:FaultType"/>
    <xs:element name="invalid-context-fault" type="tns:FaultType"/>
    <xs:element name="timeout-out-of-range-fault">
        <xs:complexType>
            <xs:complexContent>
                <xs:extension base="tns:FaultType">
                    <xs:sequence>
                        <xs:element name="specified-timeout" type="xs:int"/>
                        <xs:element name="maximum-timeout" type="xs:int"/>
                    </xs:sequence>
                </xs:extension>
            </xs:complexContent>
        </xs:complexType>
    </xs:element>
    <xs:element name="child-activity-pending-fault" type="tns:FaultType"/>
    <xs:element name="no-context-fault" type="tns:FaultType"/>
    <xs:element name="no-permission-fault" type="tns:FaultType"/>
    <xs:element name="valid-context-expected-fault" type="tns:FaultType"/>
    <xs:element name="unknown-context-fault">
        <xs:complexType>
            <xs:complexContent>
                <xs:extension base="tns:FaultType">
                    <xs:sequence>
                        <xs:element name="context-identifier" type="xs:anyURI"/>
                    </xs:sequence>
                </xs:extension>
            </xs:complexContent>
        </xs:complexType>
    </xs:element>
</xs:schema>
