<?xml version="1.0" encoding="UTF-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://docs.oasis-open.org/ws-caf/2005/10/wsctx" xmlns:ref="http://docs.oasis-open.org/wsrm/2004/06/reference-1.1.xsd" xmlns:tns="http://docs.oasis-open.org/ws-caf/2005/10/wsctx" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <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 maxOccurs="unbounded" minOccurs="0" namespace="##other" processContents="lax"/>
            <xs:element name="context-identifier" type="tns:contextIdentifierType"/>
            <xs:element minOccurs="0" name="context-service" type="ref:ServiceRefType"/>
            <xs:element minOccurs="0" name="context-manager" type="ref:ServiceRefType"/>
            <xs:element maxOccurs="1" minOccurs="0" name="parent-context" type="tns:ContextContainerType"/>
        </xs:sequence>
        <xs:attribute name="expiresAt" type="xs:dateTime" use="optional"/>
        <xs:attribute ref="wsu:Id" use="optional"/>
    </xs:complexType>
    <xs:complexType name="ContextContainerType">
        <xs:sequence>
            <xs:element ref="tns:context"/>
        </xs:sequence>
    </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="context" type="tns:ContextType" abstract="true"/>
    <xs:element name="status" type="xs:QName"/>    
    <xs:complexType name="AssertionType">
        <xs:sequence>
            <xs:any minOccurs="0" namespace="##other" processContents="lax"/>
        </xs:sequence>
        <xs:attribute ref="wsu:Id" use="optional"/>
    </xs:complexType>
    <xs:element name="begin">
        <xs:complexType>
            <xs:complexContent>
                <xs:extension base="tns:AssertionType">
                    <xs:sequence>
                        <xs:element name="type" type="xs:QName"/>
                        <xs:element name="expiresAt" minOccurs="0">
                            <xs:simpleType>
                                <xs:union memberTypes="xs:dateTime">
                                    <xs:simpleType>
                                        <xs:restriction base="xs:token">
                                            <xs:enumeration value=""/>
                                        </xs:restriction>
                                    </xs:simpleType>
                                </xs:union>
                            </xs:simpleType>
                        </xs:element>
                    </xs:sequence>
                </xs:extension>
            </xs:complexContent>
        </xs:complexType>
    </xs:element>
    <xs:element name="begun" type="tns:AssertionType"/>
    <xs:element name="complete" type="tns:AssertionType"/>
    <xs:element name="completed" type="tns:AssertionType"/>
    <xs:element name="get-status" type="tns:AssertionType"/>
    <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:AssertionType"/>
    <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:AssertionType"/>
    <xs:element name="timeout">
        <xs:complexType>
            <xs:complexContent>
                <xs:extension base="tns:AssertionType">
                    <xs:sequence>
                        <xs:element name="timeout" type="xs:duration" minOccurs="0"/>
                    </xs:sequence>
                </xs:extension>
            </xs:complexContent>
        </xs:complexType>
    </xs:element>
    <xs:element name="set-timeout">
        <xs:complexType>
            <xs:complexContent>
                <xs:extension base="tns:AssertionType">
                    <xs:sequence>
                        <xs:element name="timeout" type="xs:duration" minOccurs="0"/>
                    </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:duration" minOccurs="0"/>
                    </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"/>
    <!-- Fault sub code type -->
    <xs:simpleType name="FaultSubCodeType">
        <xs:restriction base="xs:QName">
            <xs:enumeration value="tns:InvalidState"/>
            <xs:enumeration value="tns:InvalidContext"/>
            <xs:enumeration value="tns:InvalidStructure"/>
            <xs:enumeration value="tns:TimeoutNotSupported"/>
            <xs:enumeration value="tns:ChildActivityPending"/>
            <xs:enumeration value="tns:NoContext"/>
            <xs:enumeration value="tns:NoPermission"/>
            <xs:enumeration value="tns:ValidContextExpected"/>
            <xs:enumeration value="tns:UnknownContext"/>
        </xs:restriction>
    </xs:simpleType>
    <!-- Fault detail types -->
    <xs:complexType name="TimeoutNotSupportedFaultDetailType">
        <xs:complexContent>
            <xs:extension base="tns:AssertionType">
                <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:complexType name="UnknownContextFaultDetailType">
        <xs:complexContent>
            <xs:extension base="tns:AssertionType">
                <xs:sequence>
                    <xs:element name="context-identifier" type="tns:contextIdentifierType"/>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
</xs:schema>
