<?xml version = "1.0" encoding = "UTF-8"?>
<!--
    IPR, License and Distribution Notices
    This machine readable file is derived from IMS specification IMS Tools Interoperability Guidelines Version 1.0   
    found at http://www.imsglobal.org/ti/ and the original IMS schema binding or code base 
    http://www.imsglobal.org/ti/tiv1p0/imsti_guidev1p0.html.
    
    Recipients of this document are requested to submit, with their comments, notification of any relevant patent 
    claims or other intellectual property rights of which they may be aware that might be infringed by the schema 
    binding contained in this document.
    
    IMS takes no position regarding the validity or scope of any intellectual property or other rights that might be 
    claimed to pertain to the implementation or use of the technology described in this document or the extent to 
    which any license under such rights might or might not be available; neither does it represent that it has made 
    any effort to identify any such rights. Information on IMS’s procedures with respect to rights in IMS specifications 
    can be found at the IMS Intellectual Property Rights web page: http://www.imsglobal.org/ipr/imsipr_policyFinal.pdf.
    
    Copyright © IMS Global Learning Consortium 1999-2007. All Rights Reserved.
    
    License Notice for Users
    Users of products or services that include this document are hereby granted a worldwide, royalty-free, 
    non-exclusive license to use this document.
    
    Distribution Notice for Developers
    Developers of products or services that provide distribution of this document as is or with modifications are 
    required to register with the IMS community on the IMS website as described in the following two paragraphs:
    
    - If you wish to distribute this document as is, with no modifications, you are hereby granted permission to copy, 
    display and distribute the contents of this document in any medium for any purpose without fee or royalty provided 
    that you include this IPR, License and Distribution notice in its entirety on ALL copies, or portions thereof, that you 
    make and you complete a valid license registration with IMS and receive an email from IMS granting the license. 
    To register, follow the instructions on the IMS website: http://www.imsglobal.org/specificationdownload.cfm. Once 
    registered you are granted permission to transfer unlimited distribution rights of this document for the purposes 
    of third-party or other distribution of your product or service that incorporates this document as long as this IPR, 
    License and Distribution notice remains in place in its entirety.
    
    - If you wish to create and distribute a derived work from this document, you are hereby granted permission to copy, 
    display and distribute the contents of the derived work in any medium for any purpose without fee or royalty provided 
    that you include this IPR, License and Distribution notice in its entirety on ALL copies, or portions thereof, that you 
    make and you complete a valid profile registration with IMS and receive an email from IMS granting the license. To 
    register, follow the instructions on the IMS website: http://www.imsglobal.org/profile/. Once registered you are 
    granted permission to transfer unlimited distribution rights of the derived work for the purposes of third-party or 
    other distribution of your product or service that incorporates the derived work as long as this IPR, License and 
    Distribution notice remains in place in its entirety.
    
    The limited permissions granted above are perpetual and will not be revoked by IMS or its successors or assigns.
    
    THIS SPECIFICATION IS BEING OFFERED WITHOUT ANY WARRANTY WHATSOEVER, AND IN PARTICULAR, 
    ANY WARRANTY OF NONINFRINGEMENT IS EXPRESSLY DISCLAIMED. ANY USE OF THIS SPECIFICATION 
    SHALL BE MADE ENTIRELY AT THE IMPLEMENTER’S OWN RISK, AND NEITHER THE CONSORTIUM, NOR 
    ANY OF ITS MEMBERS OR SUBMITTERS, SHALL HAVE ANY LIABILITY WHATSOEVER TO ANY IMPLEMENTER 
    OR THIRD PARTY FOR ANY DAMAGES OF ANY NATURE WHATSOEVER, DIRECTLY OR INDIRECTLY, ARISING 
    FROM THE USE OF THIS SPECIFICATION.
-->
<xs:schema xmlns="http://www.imsglobal.org/services/cc/imsti_ptdd_v1p0"
    targetNamespace="http://www.imsglobal.org/services/cc/imsti_ptdd_v1p0"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    version="IMS TIPTDD v1.0"
    elementFormDefault="qualified"
    attributeFormDefault="unqualified">
    <xs:annotation>
        <xs:documentation>
            XSD Data File Information
            -------------------------
            Author:       Prashant Nayak, Bruce Barton, Colin Smythe
            Date:         28th February, 2006
            Version:      1.0
            Status:       Final Release
            Description:  Deployment descriptor for ProxyToolDeployment.

            History:      Version 1.0: This is is the first full release of this data model.

            Source XSLT File Information
            ----------------------------
            XSL Generator:    UMLtoXSDTransformv0p7.xsl
            XSLT Processor:   Xalan
            Release:          1.0 Beta 1
            Date:             30th November, 2005

            Auto-generation Tool
            --------------------
            This WSDL/XSD was auto-generated using the IMS WSDL/XSD auto-generation tool.  While every attempt
            has been made to ensure that this tool auto-generates the XSDs correctly, users should be aware
            that this is an experimental tool.  Permission is given to make use of this tool.  IMS makes no
            claim on the materials created by third party users of this tool.  Details on how to use this tool
            are contained in the IMS document: "IMS General Web Services: WSDL/XSD Binding Auto-generation"
            available at the IMS web-site.
            Tool Copyright:  2005 (c) IMS Global Learning Consortium Inc.  All Rights Reserved.
        </xs:documentation>
    </xs:annotation>

        <!-- Generate Global Attributes ***********************************************************************  -->

        <!-- =====================================  -->

        <!-- Generate Namespaced extension Group  *************************************************************  -->

            <xs:group name="grpLax.any">
                <xs:annotation>
                    <xs:documentation>
                        Any namespaced element from any namespace may be included within an "any" element.
                        The namespace for the imported element must be defined in the instance, and the schema must be imported.
                        The extension has a definition of "lax" i.e. they can reuse elements from the target namespace.
                    </xs:documentation>
                </xs:annotation>
                <xs:sequence>
                    <xs:any namespace = "##other" processContents = "lax" minOccurs = "0" maxOccurs = "unbounded"/>
                </xs:sequence>
            </xs:group>

        <!-- =====================================  -->

        <!-- Generate the enumerated simpleType declarations **************************************************  -->

        <!-- =====================================  -->

        <!-- Generate the simpleType elements based IMS data-types  *******************************************  -->

            <xs:element name="ProxyToolName" type="xs:string"/>

            <xs:element name="ProxyToolDescription" type="xs:string"/>

            <xs:element name="ServiceName" type="xs:string"/>

            <xs:element name="ServiceLocation" type="xs:string"/>

            <xs:element name="ServiceProfileName" type="xs:string"/>

            <xs:element name="major" type="xs:string"/>

            <xs:element name="minor" type="xs:string"/>

            <xs:element name="Role" type="xs:string"/>

            <xs:element name="SharedSecret" type="xs:string"/>

            <xs:element name="DigestedMessageElement" type="xs:string"/>

            <xs:element name="schemaLocation" type="xs:string"/>

        <!-- =====================================  -->

        <!-- Generate the derived data-type elements **********************************************************  -->

        <!-- =====================================  -->

        <!-- Generate the data-type elements ******************************************************************  -->

            <xs:complexType name="ProxyToolDeployment.Type">
                <xs:annotation>
                    <xs:documentation>
                        The schema for the Proxy Tool deployment
                    </xs:documentation>
                </xs:annotation>
                <xs:sequence>
                    <xs:element ref="DeploymentProfile" minOccurs = "1" maxOccurs = "unbounded"/>
                </xs:sequence>
            </xs:complexType>

            <xs:complexType name="DeploymentProfile.Type">
                <xs:annotation>
                    <xs:documentation>
                        The schema for a deployment type.  This will include the core 
                        settings (required) and (optional) contextual/security/outcome 
                        profiles and the tool specific settings.  Each ProxyTool deployment 
                        will allow one to many deployment profiles
                    </xs:documentation>
                </xs:annotation>
                <xs:sequence>
                    <xs:element ref="CoreSettings" minOccurs = "1" maxOccurs = "1"/>
                    <xs:element ref="SupportedLaunchRoles" minOccurs = "1" maxOccurs = "1"/>
                    <xs:element ref="ContextualProfile" minOccurs = "0" maxOccurs = "unbounded"/>
                    <xs:element ref="SecurityProfile" minOccurs = "0" maxOccurs = "unbounded"/>
                    <xs:element ref="OutcomeProfile" minOccurs = "0" maxOccurs = "unbounded"/>
                    <xs:element ref="ToolSettings" minOccurs = "0" maxOccurs = "1"/>
                </xs:sequence>
            </xs:complexType>

            <xs:complexType name="CoreSettings.Type">
                <xs:annotation>
                    <xs:documentation>
                        The structure is identical to that defined in the
                        TI Launch Service.
                    </xs:documentation>
                </xs:annotation>
                <xs:sequence>
                    <xs:element ref="ProxyTool" minOccurs = "1" maxOccurs = "1"/>
                    <xs:element ref="TIR" minOccurs = "1" maxOccurs = "1"/>
                </xs:sequence>
            </xs:complexType>

            <xs:complexType name="ProxyTool.Type">
                <xs:annotation>
                    <xs:documentation>
                    </xs:documentation>
                </xs:annotation>
                <xs:sequence>
                    <xs:element ref="ProxyToolName" minOccurs = "1" maxOccurs = "1"/>
                    <xs:element ref="ProxyToolVersion" minOccurs = "1" maxOccurs = "1"/>
                    <xs:element ref="IMSTIVersion" minOccurs = "1" maxOccurs = "1"/>
                    <xs:element ref="ProxyToolDescription" minOccurs = "1" maxOccurs = "1"/>
                </xs:sequence>
            </xs:complexType>

            <xs:complexType name="TIR.Type">
                <xs:annotation>
                    <xs:documentation>
                    </xs:documentation>
                </xs:annotation>
                <xs:sequence>
                    <xs:element ref="LaunchService" minOccurs = "0" maxOccurs = "1"/>
                    <xs:element ref="OutcomeService" minOccurs = "0" maxOccurs = "1"/>
                </xs:sequence>
            </xs:complexType>

            <xs:complexType name="TIRServiceLocator.Type">
                <xs:annotation>
                    <xs:documentation>
                    </xs:documentation>
                </xs:annotation>
                <xs:sequence>
                    <xs:element ref="ServiceName" minOccurs = "1" maxOccurs = "1"/>
                    <xs:element ref="ServiceLocation" minOccurs = "1" maxOccurs = "1"/>
                    <xs:element ref="ServiceProfileName" minOccurs = "1" maxOccurs = "1"/>
                </xs:sequence>
            </xs:complexType>

            <xs:complexType name="Version.Type">
                <xs:annotation>
                    <xs:documentation>
                    </xs:documentation>
                </xs:annotation>
                <xs:sequence>
                    <xs:element ref="major" minOccurs = "1" maxOccurs = "1"/>
                    <xs:element ref="minor" minOccurs = "1" maxOccurs = "1"/>
                </xs:sequence>
            </xs:complexType>

            <xs:complexType name="SupportedLaunchRoles.Type">
                <xs:annotation>
                    <xs:documentation>
                        Lists roles supported by the Tool that may appear in LaunchProfile/Role.
                    </xs:documentation>
                </xs:annotation>
                <xs:sequence>
                    <xs:element ref="Role" minOccurs = "1" maxOccurs = "unbounded"/>
                </xs:sequence>
            </xs:complexType>

            <xs:complexType name="ContextualProfile.Type">
                <xs:annotation>
                    <xs:documentation>
                        One or more contextual profiles for this deployment profile.  
                        Profiles are defined in imsti_pts schema.  For each profile 
                        the required flag has to be specified as well as the 
                        ContextualProfileType attribute as defined in the 
                        ims_pts_v0p1 schema
                    </xs:documentation>
                </xs:annotation>
                <xs:sequence>
                </xs:sequence>
                <xs:attribute name="Required" use="required" type="xs:boolean"/>
                <xs:attribute name="ContextualProfileType" use="required">
                    <xs:simpleType>
                        <xs:restriction base="xs:string">
                            <xs:enumeration value="SimpleUserProfile"/>
                            <xs:enumeration value="DeliveryContextProfile"/>
                            <xs:enumeration value="AcclipContextProfile"/>
                        </xs:restriction>
                    </xs:simpleType>
                </xs:attribute>
            </xs:complexType>

            <xs:complexType name="SecurityProfile.Type" abstract="true">
                <xs:annotation>
                    <xs:documentation>
                        One or more security profiles for this deployment profile.  
                        Profiles are defined in imsti_pts schema. For each profile 
                        the required flag and preference order have to be specified 
                        as well as the SecurityProfileType attribute as defined in 
                        the ims_pts_v0p1 schema
                    </xs:documentation>
                </xs:annotation>
                <xs:sequence>
                </xs:sequence>
                <xs:attribute name="Required" use="required" type="xs:boolean"/>
                <xs:attribute name="Preference" use="required" type="xs:integer"/>
                <xs:attribute name="SecurityProfileType" use="required">
                    <xs:simpleType>
                        <xs:restriction base="xs:string">
                            <xs:enumeration value="SharedSecretProfile"/>
                        </xs:restriction>
                    </xs:simpleType>
                </xs:attribute>
            </xs:complexType>

            <xs:complexType name="SharedSecretSecurityProfile.Type">
                <xs:annotation>
                    <xs:documentation>
                        A simple security profile for a shared secret that is used to 
                        calculate a MD5 digest of an element in the launch or outcome 
                        message, e.g. messageIdentifier.
                    </xs:documentation>
                </xs:annotation>
                <xs:complexContent>
                    <xs:extension base="SecurityProfile.Type">
                        <xs:sequence>
                            <xs:element ref="SharedSecret" minOccurs = "1" maxOccurs = "1"/>
                            <xs:element ref="DigestedMessageElement" minOccurs = "1" maxOccurs = "1"/>
                        </xs:sequence>
                    </xs:extension>
                </xs:complexContent>
            </xs:complexType>

            <xs:complexType name="OutcomeProfile.Type">
                <xs:annotation>
                    <xs:documentation>
                        The supported types of outcome profiles.  
                        These are referenced in the deployment 
                        descriptor schema by the OutcomeProfile 
                        element
                    </xs:documentation>
                </xs:annotation>
                <xs:sequence>
                </xs:sequence>
                <xs:attribute name="Required" use="required" type="xs:boolean"/>
                <xs:attribute name="Preference" use="required" type="xs:integer"/>
                <xs:attribute name="OutcomeProfileType" use="required">
                    <xs:simpleType>
                        <xs:restriction base="xs:string">
                            <xs:enumeration value="MinimalOutcomeProfile"/>
                            <xs:enumeration value="SimpleOutcomeProfile"/>
                        </xs:restriction>
                    </xs:simpleType>
                </xs:attribute>
            </xs:complexType>

            <xs:complexType name="ToolSettings.Type">
                <xs:annotation>
                    <xs:documentation>
                        A set of tool specific settings for this deployment profile.
                    </xs:documentation>
                </xs:annotation>
                <xs:sequence>
                    <xs:element ref="SettingsDefinition" minOccurs = "0" maxOccurs = "unbounded"/>
                </xs:sequence>
            </xs:complexType>

            <xs:complexType name="SettingsDefinition.Type">
                <xs:annotation>
                    <xs:documentation>
                        A documented settings definition consists of a documentation block 
                        that describes for administrators and users the use of the settings, 
                        a schema or schemas that can be used to validate an instance of 
                        the settings, and setting instance that includes default settings values.
                    </xs:documentation>
                </xs:annotation>
                <xs:sequence>
                    <xs:element ref="documentation" minOccurs = "1" maxOccurs = "1"/>
                    <xs:element ref="schema" minOccurs = "0" maxOccurs = "1"/>
                    <xs:element ref="instance" minOccurs = "0" maxOccurs = "1"/>
                </xs:sequence>
            </xs:complexType>

            <xs:complexType name="Extension.Type">
                <xs:annotation>
                    <xs:documentation>
                    </xs:documentation>
                </xs:annotation>
                <xs:sequence>
                    <xs:group ref="grpLax.any"/>
                </xs:sequence>
            </xs:complexType>

            <xs:complexType name="Schema.Type">
                <xs:annotation>
                    <xs:documentation>
                        The schema delivered in line.
                    </xs:documentation>
                </xs:annotation>
                <xs:choice>
                    <xs:element ref="schemaLocation" minOccurs = "1" maxOccurs = "1"/>
                    <xs:group ref="grpLax.any"/>
                </xs:choice>
            </xs:complexType>

        <!-- =====================================  -->

        <!-- Declaration of the elements **********************************************************************  -->

            <xs:element name="DeploymentProfile" type="DeploymentProfile.Type"/>

            <xs:element name="CoreSettings" type="CoreSettings.Type"/>

            <xs:element name="SupportedLaunchRoles" type="SupportedLaunchRoles.Type"/>

            <xs:element name="ContextualProfile" type="ContextualProfile.Type"/>

            <xs:element name="SecurityProfile" type="SecurityProfile.Type"/>

            <xs:element name="OutcomeProfile" type="OutcomeProfile.Type"/>

            <xs:element name="ToolSettings" type="ToolSettings.Type"/>

            <xs:element name="ProxyTool" type="ProxyTool.Type"/>

            <xs:element name="TIR" type="TIR.Type"/>

            <xs:element name="ProxyToolVersion" type="Version.Type"/>

            <xs:element name="IMSTIVersion" type="Version.Type"/>

            <xs:element name="LaunchService" type="TIRServiceLocator.Type"/>

            <xs:element name="OutcomeService" type="TIRServiceLocator.Type"/>

            <xs:element name="SettingsDefinition" type="SettingsDefinition.Type"/>

            <xs:element name="documentation" type="Extension.Type"/>

            <xs:element name="schema" type="Schema.Type"/>

            <xs:element name="instance" type="Extension.Type"/>

        <!-- =====================================  -->

        <!-- Declaration of the root element(s) ***************************************************************  -->

            <xs:element name="ProxyToolDeployment" type="ProxyToolDeployment.Type"/>

        <!-- =====================================  -->

</xs:schema>
