<?xml version = "1.0" encoding = "UTF-8"?>
<xs:schema xmlns="http://www.w3.org/2001/XMLSchema"
    targetNamespace="http://www.imsglobal.org/services/lis/pms2p0/xsd/imspms_v2p0"
    xmlns:pms="http://www.imsglobal.org/services/lis/pms2p0/xsd/imspms_v2p0"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    version="IMS PMS 2.0"
    elementFormDefault="qualified"
    attributeFormDefault="unqualified">
    <xs:annotation>
        <xs:documentation>
            XSD Data File Information
            -------------------------
            Author:         Colin Smythe
            Date:           16th April, 2012
            Version:        Final 1.0
            Status:         Final Release
            Description:    The Person data model root for the service realisation of the Person Management Service. 
                            This service is a part of the IMS LIS v2.0.

            History:        Version 1.0: The first formal release of this PSM binding.

            License:        IPR, License and Distribution Notices

                            This machine readable file is derived from IMS Global Learning Consortium (GLC) specification IMS Person Management Service (PMS) Version 2.0
                            found at http://www.imsglobal.org/lis and the original IMS GLC schema binding or code base
                            http://www.imsglobal.org/lis.

                            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 GLC 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 GLCs
                            procedures with respect to rights in IMS GLC specifications can be found at the IMS GLC Intellectual Property
                            Rights web page: http://www.imsglobal.org/ipr/imsipr_policyFinal.pdf.

                            Copyright (c) IMS Global Learning Consortium 1999-2012. 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 are not original incorporators of this document and 
                            have not changed this document, that is, are distributing a software product that incorporates this 
                            document as is from a third-party source other than IMS, 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.

                            Developers of products or services that are original incorporators of this document and wish 
                            to provide distribution of this document as is or with modifications and developers of products and 
                            services that are not original incorporators of this document and have changed this document, are
                            required to register with the IMS GLC community on the IMS GLC 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 GLC and receive an email from IMS GLC granting the license. To register, follow
                               the instructions on the IMS GLC 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 GLC 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 IMPLEMENTERS 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.

            UML Source Service File Information
            -----------------------------------
            Choreography:     Sync
            Status Object:    StatusInfo

            Source UML File Information
            ---------------------------
            The source file information must be supplied as an XMI file (without diagram layout information).
            The supported UML authoring tools are:
            (a) Poseidon - v6 (and later)

            Source XSLT File Information
            ----------------------------
            XSL Generator:    UMLtoWSDLTransformv1p0.xsl
            XSLT Processor:   Xalan
            Release:          1.0
            Date:             31st March, 2012
            Autogen Engineer: Colin Smythe (IMS GLC, UK)
            Autogen Date:     2012-04-16

            IMS GLC Auto-generation Binding Tool-kit (I-BAT)
            ------------------------------------------------
            This file was auto-generated using the IMS GLC Binding Auto-generation Tool-kit (I-BAT).  While every
            attempt has been made to ensure that this tool auto-generates the files correctly, users should be aware
            that this is an experimental tool.  Permission is given to make use of this tool.  IMS GLC 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 GLC "I-BAT" Documentation available at the IMS GLC web-site.

            Tool Copyright:  2005-2012 (c) IMS Global Learning Consortium Inc.  All Rights Reserved.
        </xs:documentation>
    </xs:annotation>

    <!-- Generate Global Attributes *********************************************************************** -->

    <!-- ================================================================================================== -->

    <!-- Generate Global List Types *********************************************************************** -->

    <!-- ================================================================================================== -->

    <!-- Generate Namespaced extension Group  ************************************************************* -->

    <!-- ================================================================================================== -->

    <!-- Generate Special DataTypes  ********************************************************************** -->

    <!-- ================================================================================================== -->

    <!-- Generate the enumerated simpleType declarations ************************************************** -->

    <xs:simpleType name="imsx_CodeMajor.Type">
        <xs:restriction base="xs:string">
            <xs:enumeration value="success"/>
            <xs:enumeration value="processing"/>
            <xs:enumeration value="failure"/>
            <xs:enumeration value="unsupported"/>
        </xs:restriction>
    </xs:simpleType>

    <xs:simpleType name="imsx_Severity.Type">
        <xs:restriction base="xs:string">
            <xs:enumeration value="status"/>
            <xs:enumeration value="warning"/>
            <xs:enumeration value="error"/>
        </xs:restriction>
    </xs:simpleType>

    <xs:simpleType name="imsx_CodeMinorValue.Type">
        <xs:restriction base="xs:string">
            <xs:enumeration value="fullsuccess"/>
            <xs:enumeration value="createsuccess"/>
            <xs:enumeration value="idallocfail"/>
            <xs:enumeration value="overflowfail"/>
            <xs:enumeration value="idallocinusefail"/>
            <xs:enumeration value="invaliddata"/>
            <xs:enumeration value="incompletedata"/>
            <xs:enumeration value="partialdatastorage"/>
            <xs:enumeration value="unknownobject"/>
            <xs:enumeration value="deletefailure"/>
            <xs:enumeration value="targetreadfailure"/>
            <xs:enumeration value="nosourcedids"/>
            <xs:enumeration value="savepointerror"/>
            <xs:enumeration value="savepointsyncerror"/>
            <xs:enumeration value="unknownquery"/>
            <xs:enumeration value="unknownvocabulary"/>
            <xs:enumeration value="unknownmdvocabulary"/>
            <xs:enumeration value="unknownextension"/>
            <xs:enumeration value="toomuchdata"/>
            <xs:enumeration value="targetisbusy"/>
            <xs:enumeration value="unauthorizedrequest"/>
            <xs:enumeration value="linkfailure"/>
            <xs:enumeration value="unsupportedLIS"/>
            <xs:enumeration value="unsupportedLISoperation"/>
        </xs:restriction>
    </xs:simpleType>

    <xs:simpleType name="imsx_GWSVersionValue.Type">
        <xs:restriction base="xs:string">
            <xs:enumeration value="V1.0"/>
        </xs:restriction>
    </xs:simpleType>

    <xs:simpleType name="Gender.Type">
        <xs:restriction base="xs:string">
            <xs:enumeration value="male"/>
            <xs:enumeration value="female"/>
            <xs:enumeration value="unknown"/>
            <xs:enumeration value="other"/>
        </xs:restriction>
    </xs:simpleType>

    <xs:simpleType name="MediaMode.Type">
        <xs:restriction base="xs:string">
            <xs:enumeration value="uri"/>
            <xs:enumeration value="entityref"/>
            <xs:enumeration value="base64"/>
        </xs:restriction>
    </xs:simpleType>

    <xs:simpleType name="ContentRefType.Type">
        <xs:restriction base="xs:string">
            <xs:enumeration value="text"/>
            <xs:enumeration value="image"/>
            <xs:enumeration value="audio"/>
            <xs:enumeration value="video"/>
            <xs:enumeration value="application"/>
            <xs:enumeration value="applet"/>
        </xs:restriction>
    </xs:simpleType>

    <xs:element name="imsx_codeMajor" type="pms:imsx_CodeMajor.Type"/>

    <xs:element name="imsx_severity" type="pms:imsx_Severity.Type"/>

    <xs:element name="imsx_codeMinorFieldValue" type="pms:imsx_CodeMinorValue.Type"/>

    <xs:element name="imsx_version" type="pms:imsx_GWSVersionValue.Type"/>

    <xs:element name="gender" type="pms:Gender.Type" default = "unknown"/>

    <xs:element name="mediamode" type="pms:MediaMode.Type"/>

    <xs:element name="contentRefType" type="pms:ContentRefType.Type"/>

    <!-- ================================================================================================== -->

    <!-- Generate the simpleType elements based on IMS data-types (Parameter) ***************************** -->

    <!-- ================================================================================================== -->

    <!-- Generate the simpleType elements based on IMS data-types (Derived) ******************************* -->

    <!-- ================================================================================================== -->

    <!-- Generate the simpleType elements based on IMS data-types (Union) ********************************* -->

    <!-- ================================================================================================== -->

    <!-- Generate the simpleType elements based on IMS data-types (Complex) ******************************* -->

    <xs:element name="date" type="xs:date" />

    <xs:element name="extensionNameVocabulary" type="xs:anyURI" />

    <xs:element name="extensionTypeVocabulary" type="xs:anyURI" />

    <xs:element name="fieldName" type="xs:normalizedString" />

    <xs:element name="fieldType" type="xs:normalizedString" />

    <xs:element name="fieldValue" type="xs:normalizedString" />

    <xs:element name="imsx_codeMinorFieldName" type="xs:string" default="TargetEndSystem" />

    <xs:element name="imsx_description" type="xs:string" />

    <xs:element name="imsx_messageIdentifier" type="xs:string" />

    <xs:element name="imsx_messageRefIdentifier" type="xs:string" />

    <xs:element name="imsx_operationRefIdentifier" type="xs:string" />

    <xs:element name="imsx_sendingAgentIdentifier" type="xs:normalizedString" />

    <xs:element name="instanceVocabulary" type="xs:anyURI" />

    <xs:element name="language" type="xs:normalizedString" />

    <xs:element name="mimeType" type="xs:normalizedString" />

    <xs:element name="primaryroletype" type="xs:boolean" />

    <xs:element name="refAgentInstanceID" type="xs:normalizedString" />

    <xs:element name="textString" type="xs:string" />

    <!-- ================================================================================================== -->

    <!-- Generate the derived data-type elements based upon simpleType ************************************ -->

    <xs:simpleType name="GUID.Type">
        <xs:restriction base="xs:string"/>
    </xs:simpleType>

    <xs:simpleType name="SequenceIdentifier.Type">
        <xs:restriction base="xs:dateTime"/>
    </xs:simpleType>

    <xs:simpleType name="QueryObject.Type">
        <xs:restriction base="xs:string"/>
    </xs:simpleType>

    <!-- ================================================================================================== -->

    <!-- Generate the derived data-type elements based upon derived simpleType **************************** -->

    <!-- ================================================================================================== -->

    <!-- Generate the data-type ComplexTypes ************************************************************** -->

    <xs:complexType name="Address.Type" mixed="false">
        <xs:annotation>
            <xs:documentation source="umldocumentation">
                The Address complexType is the container for the set of addresses for the person. The type of address and permitted address parts are defined in two extenal vocabularys. The address type vocabulary is contained in the VDEX file &quot;addresstypevocabularyv1p0.xml&quot; and the address part is in &quot;addresspartvocabularyv1p0.xml&quot;.
            </xs:documentation>
        </xs:annotation>
        <xs:sequence>
            <xs:element ref="pms:addressType" minOccurs = "1" maxOccurs = "1"/>
            <xs:element ref="pms:addressPart" minOccurs = "1" maxOccurs = "unbounded"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="Agent.Type" mixed="false">
        <xs:annotation>
            <xs:documentation source="umldocumentation">
                The Agent complexType is the container for the information about agents who can act on behalf of the person. The type of agent is defined in an extenal vocabulary. The vocabulary is contained in the VDEX file &quot;agenttypevocabularyv1p0.xml&quot;.
            </xs:documentation>
        </xs:annotation>
        <xs:sequence>
            <xs:element ref="pms:agentType" minOccurs = "1" maxOccurs = "1"/>
            <xs:element ref="pms:agentId" minOccurs = "1" maxOccurs = "1"/>
            <xs:element ref="pms:agentDomain" minOccurs = "1" maxOccurs = "1"/>
            <xs:element ref="pms:description" minOccurs = "0" maxOccurs = "1"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="BaseValueSingle.Type" mixed="false">
        <xs:annotation>
            <xs:documentation source="umldocumentation">
                The BaseValueSingle complexType is the container for the structure that is used to identify a name/value pair from a vocabulary (the name is in the vocabulary).
            </xs:documentation>
        </xs:annotation>
        <xs:sequence>
            <xs:element ref="pms:instanceIdentifier" minOccurs = "1" maxOccurs = "1"/>
            <xs:element ref="pms:instanceVocabulary" minOccurs = "1" maxOccurs = "1"/>
            <xs:element ref="pms:instanceName" minOccurs = "1" maxOccurs = "1"/>
            <xs:element ref="pms:instanceValue" minOccurs = "1" maxOccurs = "1"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="BaseValueToken.Type" mixed="false">
        <xs:annotation>
            <xs:documentation source="umldocumentation">
                The BaseValueToken complexType is the container for the structure that is used to identify a value from a named vocabulary.
            </xs:documentation>
        </xs:annotation>
        <xs:sequence>
            <xs:element ref="pms:instanceIdentifier" minOccurs = "1" maxOccurs = "1"/>
            <xs:element ref="pms:instanceVocabulary" minOccurs = "1" maxOccurs = "1"/>
            <xs:element ref="pms:instanceValue" minOccurs = "1" maxOccurs = "1"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="ContactInfo.Type" mixed="false">
        <xs:annotation>
            <xs:documentation source="umldocumentation">
                The ContactInfo complexType is the container for the electronic-oriented contact information. The type of contact information is defined in an external vocabulary. the vocabulary is contained in the VDEX file &quot;contactinfotypevocabularyv1p0.xml&quot;.
            </xs:documentation>
        </xs:annotation>
        <xs:sequence>
            <xs:element ref="pms:contactinfoType" minOccurs = "1" maxOccurs = "1"/>
            <xs:element ref="pms:contactinfoValue" minOccurs = "1" maxOccurs = "1"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="Demographics.Type" mixed="false">
        <xs:annotation>
            <xs:documentation source="umldocumentation">
                The Demographics complexType is the container for the demographics information for the Person. The type of demographics is contained in an external vocabulary. The vocabulary is contained in the VDEX file &quot;demographicstypevocabularyv1p0.xml&quot;. The set of demographics structures can be extended using a vocabulary. The default vocabulary is contained in the external VDEX file &quot;demographicsinfovocabualryv1p0.xml&quot;.
            </xs:documentation>
        </xs:annotation>
        <xs:sequence>
            <xs:element ref="pms:demographicsType" minOccurs = "1" maxOccurs = "1"/>
            <xs:element ref="pms:representation" minOccurs = "0" maxOccurs = "unbounded"/>
            <xs:element ref="pms:eventDate" minOccurs = "0" maxOccurs = "unbounded"/>
            <xs:element ref="pms:gender" minOccurs = "0" maxOccurs = "1"/>
            <xs:element ref="pms:demographicInfo" minOccurs = "0" maxOccurs = "unbounded"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="Description.Type" mixed="false">
        <xs:annotation>
            <xs:documentation source="umldocumentation">
                The Description complexType is the container for all of the material that is used to describe something. It has short (text), long (text) and full (multimedia) forms.
            </xs:documentation>
        </xs:annotation>
        <xs:sequence>
            <xs:element ref="pms:shortDescription" minOccurs = "1" maxOccurs = "1"/>
            <xs:element ref="pms:longDescription" minOccurs = "0" maxOccurs = "1"/>
            <xs:element ref="pms:fullDescription" minOccurs = "0" maxOccurs = "1"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="EnterpriseRoles.Type" mixed="false">
        <xs:annotation>
            <xs:documentation source="umldocumentation">
                The EnterpriseRoles complexType is a container for all of the information used to define roles and access within the institution and system. The system roles are defined in an external vocabulary. This vocabulary is contained in the VDEX file &quot;systemrolesvocabualryv1p0.xml&quot;.
            </xs:documentation>
        </xs:annotation>
        <xs:sequence>
            <xs:element ref="pms:enterpriserolesType" minOccurs = "1" maxOccurs = "1"/>
            <xs:element ref="pms:systemRole" minOccurs = "0" maxOccurs = "1"/>
            <xs:element ref="pms:institutionRole" minOccurs = "0" maxOccurs = "unbounded"/>
            <xs:element ref="pms:userId" minOccurs = "0" maxOccurs = "1"/>
            <xs:element ref="pms:enrollment" minOccurs = "0" maxOccurs = "1"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="ExtensionField.Type" mixed="false">
        <xs:annotation>
            <xs:documentation source="umldocumentation">
                The ExtensionField complexType is the container for the 3-tuples that describe each extension field.
            </xs:documentation>
        </xs:annotation>
        <xs:sequence>
            <xs:element ref="pms:fieldName" minOccurs = "1" maxOccurs = "1"/>
            <xs:element ref="pms:fieldType" minOccurs = "1" maxOccurs = "1"/>
            <xs:element ref="pms:fieldValue" minOccurs = "1" maxOccurs = "1"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="FormName.Type" mixed="false">
        <xs:annotation>
            <xs:documentation source="umldocumentation">
                The FormName complexType is the container for the formatted name (s) of a Person. An external vocabulary is used for the set of types of formated name. This vocabulary is contained in the VDEX file &quot;formatnmetypevocabularyv1p0.xml&quot;..
            </xs:documentation>
        </xs:annotation>
        <xs:sequence>
            <xs:element ref="pms:formnameType" minOccurs = "1" maxOccurs = "1"/>
            <xs:element ref="pms:formattedName" minOccurs = "1" maxOccurs = "1"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="FullDescription.Type" mixed="false">
        <xs:annotation>
            <xs:documentation source="umldocumentation">
                The FullDescription complexType is the container for the multimedia-based description.
            </xs:documentation>
        </xs:annotation>
        <xs:sequence>
            <xs:element ref="pms:mediamode" minOccurs = "1" maxOccurs = "1"/>
            <xs:element ref="pms:contentRefType" minOccurs = "1" maxOccurs = "1"/>
            <xs:element ref="pms:mimeType" minOccurs = "1" maxOccurs = "1"/>
            <xs:element ref="pms:descriptionText" minOccurs = "1" maxOccurs = "1"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="GUIDSet.Type" mixed="false">
        <xs:annotation>
            <xs:documentation source="umldocumentation">
                The GUIDSet data-type is the container for a set of SourcedIds.
            </xs:documentation>
        </xs:annotation>
        <xs:sequence>
            <xs:element ref="pms:sourcedId" minOccurs = "0" maxOccurs = "unbounded"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="IMSExtension.Type" mixed="false">
        <xs:annotation>
            <xs:documentation source="umldocumentation">
                The IMSExtension complexType is the container for the set of extensions.
            </xs:documentation>
        </xs:annotation>
        <xs:sequence>
            <xs:element ref="pms:extensionNameVocabulary" minOccurs = "1" maxOccurs = "1"/>
            <xs:element ref="pms:extensionTypeVocabulary" minOccurs = "1" maxOccurs = "1"/>
            <xs:element ref="pms:extensionField" minOccurs = "1" maxOccurs = "unbounded"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="imsx_CodeMinor.Type" mixed="false">
        <xs:annotation>
            <xs:documentation source="umldocumentation">
                The CodeMinor complexType is the container for the set of code minor status codes reported in the associated IMS SOAP message header.
            </xs:documentation>
        </xs:annotation>
        <xs:sequence>
            <xs:element ref="pms:imsx_codeMinorField" minOccurs = "1" maxOccurs = "unbounded"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="imsx_CodeMinorField.Type" mixed="false">
        <xs:annotation>
            <xs:documentation source="umldocumentation">
                The CodeMinorField complexType is the container a single code minor status code.
            </xs:documentation>
        </xs:annotation>
        <xs:sequence>
            <xs:element ref="pms:imsx_codeMinorFieldName" minOccurs = "1" maxOccurs = "1"/>
            <xs:element ref="pms:imsx_codeMinorFieldValue" minOccurs = "1" maxOccurs = "1"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="imsx_RequestHeaderInfo.Type" mixed="false">
        <xs:annotation>
            <xs:documentation source="umldocumentation">
                The RequestHeaderInfo complexType is the container for the information to be placed in the SOAP header for the request message transmitted for the associated operation call.
            </xs:documentation>
        </xs:annotation>
        <xs:sequence>
            <xs:element ref="pms:imsx_version" minOccurs = "1" maxOccurs = "1"/>
            <xs:element ref="pms:imsx_messageIdentifier" minOccurs = "1" maxOccurs = "1"/>
            <xs:element ref="pms:imsx_sendingAgentIdentifier" minOccurs = "0" maxOccurs = "1"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="imsx_ResponseHeaderInfo.Type" mixed="false">
        <xs:annotation>
            <xs:documentation source="umldocumentation">
                The ResponseHeaderInfo complexType is the container for the information to be placed in the SOAP header for the response message transmitted for the associated operation call.
            </xs:documentation>
        </xs:annotation>
        <xs:sequence>
            <xs:element ref="pms:imsx_version" minOccurs = "1" maxOccurs = "1"/>
            <xs:element ref="pms:imsx_messageIdentifier" minOccurs = "1" maxOccurs = "1"/>
            <xs:element ref="pms:imsx_sendingAgentIdentifier" minOccurs = "0" maxOccurs = "1"/>
            <xs:element ref="pms:imsx_statusInfo" minOccurs = "1" maxOccurs = "1"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="imsx_StatusInfo.Type" mixed="false">
        <xs:annotation>
            <xs:documentation source="umldocumentation">
                The StatusInfo complexType is the container for the status code and associated information returned within the SOAP message as defined by the IMS GWSv1.0 specification.
            </xs:documentation>
        </xs:annotation>
        <xs:sequence>
            <xs:element ref="pms:imsx_codeMajor" minOccurs = "1" maxOccurs = "1"/>
            <xs:element ref="pms:imsx_severity" minOccurs = "1" maxOccurs = "1"/>
            <xs:element ref="pms:imsx_messageRefIdentifier" minOccurs = "1" maxOccurs = "1"/>
            <xs:element ref="pms:imsx_operationRefIdentifier" minOccurs = "0" maxOccurs = "unbounded"/>
            <xs:element ref="pms:imsx_description" minOccurs = "0" maxOccurs = "1"/>
            <xs:element ref="pms:imsx_codeMinor" minOccurs = "0" maxOccurs = "1"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="InstitutionRole.Type" mixed="false">
        <xs:annotation>
            <xs:documentation source="umldocumentation">
                The InstitutionRole complexType is the container used to identify the roles of the Person within the institution. The set of roles is defined in an external vocabulary. This vocabulary is contained within the VDEX file &quot;institutionroletypevocabularyv1p0.xml&quot;.
            </xs:documentation>
        </xs:annotation>
        <xs:sequence>
            <xs:element ref="pms:institutionroletype" minOccurs = "1" maxOccurs = "1"/>
            <xs:element ref="pms:primaryroletype" minOccurs = "1" maxOccurs = "1"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="Name.Type" mixed="false">
        <xs:annotation>
            <xs:documentation source="umldocumentation">
                The Name complexType is the container for the structured name(s) of a Person. The name is supplied in defined parts. There is no order preference of those parts. Each Name is typed e.g. alias, prefered, etc. An external vocabulary is used for the set of types of name. This vocabulary is contained in the VDEX file &quot;nametypevocabularyv1p0.xml&quot;. A separate vocabulary is used to contain the types of name parts. This vocabulary is contained in the VDEX file &quot;partnametypevocabularyv1p0.xml&quot;.
            </xs:documentation>
        </xs:annotation>
        <xs:sequence>
            <xs:element ref="pms:nameType" minOccurs = "1" maxOccurs = "1"/>
            <xs:element ref="pms:partName" minOccurs = "1" maxOccurs = "unbounded"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="Person.Type" mixed="false">
        <xs:annotation>
            <xs:documentation source="umldocumentation">
                The Person complexType is the top-level container for the Person data model as part of the IMS LIS v2.0 Person Management Service v2.0.
            </xs:documentation>
        </xs:annotation>
        <xs:sequence>
            <xs:element ref="pms:formname" minOccurs = "0" maxOccurs = "unbounded"/>
            <xs:element ref="pms:name" minOccurs = "0" maxOccurs = "unbounded"/>
            <xs:element ref="pms:address" minOccurs = "0" maxOccurs = "unbounded"/>
            <xs:element ref="pms:contactinfo" minOccurs = "0" maxOccurs = "unbounded"/>
            <xs:element ref="pms:demographics" minOccurs = "0" maxOccurs = "unbounded"/>
            <xs:element ref="pms:agent" minOccurs = "0" maxOccurs = "unbounded"/>
            <xs:element ref="pms:roles" minOccurs = "0" maxOccurs = "unbounded"/>
            <xs:element ref="pms:dataSource" minOccurs = "0" maxOccurs = "1"/>
            <xs:element ref="pms:extension" minOccurs = "0" maxOccurs = "1"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="PersonCore.Type" mixed="false">
        <xs:annotation>
            <xs:documentation source="umldocumentation">
                The PersonCore complexType is the top-level cntainer for the mandatory aspects of the Person data model. The data model consists of: (1) SourcedId; (2) Formatted Name; (3) UserId.
            </xs:documentation>
        </xs:annotation>
        <xs:sequence>
            <xs:element ref="pms:sourcedId" minOccurs = "1" maxOccurs = "1"/>
            <xs:element ref="pms:formname" minOccurs = "1" maxOccurs = "1"/>
            <xs:element ref="pms:userId" minOccurs = "1" maxOccurs = "1"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="PersonRecord.Type" mixed="false">
        <xs:annotation>
            <xs:documentation source="umldocumentation">
                The PersonRecord complexType is the container for the collation of the Person data structure
and its sourcedGUID.
            </xs:documentation>
        </xs:annotation>
        <xs:sequence>
            <xs:element ref="pms:sourcedGUID" minOccurs = "1" maxOccurs = "1"/>
            <xs:element ref="pms:person" minOccurs = "0" maxOccurs = "1"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="PersonRecordSet.Type" mixed="false">
        <xs:sequence>
            <xs:element ref="pms:personRecord" minOccurs = "0" maxOccurs = "unbounded"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="Representation.Type" mixed="false">
        <xs:annotation>
            <xs:documentation source="umldocumentation">
                The Representation complexType is a container for information that is used to represent the Person e.g. photograph. An external vocabulary is used to define the type of representation. This vocabulary is contained in the VDEX file &quot;representationtypevocabularyv1p0.xml&quot;.
            </xs:documentation>
        </xs:annotation>
        <xs:sequence>
            <xs:element ref="pms:representationType" minOccurs = "1" maxOccurs = "1"/>
            <xs:element ref="pms:date" minOccurs = "1" maxOccurs = "1"/>
            <xs:element ref="pms:description" minOccurs = "1" maxOccurs = "1"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="SourcedGUID.Type" mixed="false">
        <xs:annotation>
            <xs:documentation source="umldocumentation">
                The SourcedGUID complexType is the container for the extended sourcedId. The extension is the reference agent instance identifier.
            </xs:documentation>
        </xs:annotation>
        <xs:sequence>
            <xs:element ref="pms:refAgentInstanceID" minOccurs = "0" maxOccurs = "1"/>
            <xs:element ref="pms:sourcedId" minOccurs = "1" maxOccurs = "1"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="Text.Type" mixed="false">
        <xs:annotation>
            <xs:documentation source="umldocumentation">
                The Text data-type is the container for the language-string tuple. The type of language is expressed using RFC4646.
            </xs:documentation>
        </xs:annotation>
        <xs:sequence>
            <xs:element ref="pms:language" minOccurs = "1" maxOccurs = "1"/>
            <xs:element ref="pms:textString" minOccurs = "1" maxOccurs = "1"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="UserId.Type" mixed="false">
        <xs:annotation>
            <xs:documentation source="umldocumentation">
                The UserId comlexType is the container for the user's access information in the learning management system.
            </xs:documentation>
        </xs:annotation>
        <xs:sequence>
            <xs:element ref="pms:userIdValue" minOccurs = "1" maxOccurs = "1"/>
            <xs:element ref="pms:userIdType" minOccurs = "0" maxOccurs = "1"/>
            <xs:element ref="pms:password" minOccurs = "0" maxOccurs = "1"/>
            <xs:element ref="pms:pwEncryptionType" minOccurs = "0" maxOccurs = "1"/>
            <xs:element ref="pms:authenticationType" minOccurs = "0" maxOccurs = "1"/>
        </xs:sequence>
    </xs:complexType>

    <!-- ================================================================================================== -->

    <!-- Declaration of the elements (Complex) ************************************************************ -->

    <xs:element name="address" type="pms:Address.Type"/>

    <xs:element name="addressPart" type="pms:BaseValueSingle.Type"/>

    <xs:element name="addressType" type="pms:BaseValueToken.Type"/>

    <xs:element name="agent" type="pms:Agent.Type"/>

    <xs:element name="agentDomain" type="pms:Text.Type"/>

    <xs:element name="agentId" type="pms:Text.Type"/>

    <xs:element name="agentType" type="pms:BaseValueToken.Type"/>

    <xs:element name="authenticationType" type="pms:Text.Type"/>

    <xs:element name="contactinfo" type="pms:ContactInfo.Type"/>

    <xs:element name="contactinfoType" type="pms:BaseValueToken.Type"/>

    <xs:element name="contactinfoValue" type="pms:Text.Type"/>

    <xs:element name="demographicInfo" type="pms:BaseValueSingle.Type"/>

    <xs:element name="demographics" type="pms:Demographics.Type"/>

    <xs:element name="demographicsType" type="pms:BaseValueToken.Type"/>

    <xs:element name="description" type="pms:Description.Type"/>

    <xs:element name="descriptionText" type="pms:Text.Type"/>

    <xs:element name="enrollment" type="pms:BaseValueSingle.Type"/>

    <xs:element name="enterpriserolesType" type="pms:BaseValueToken.Type"/>

    <xs:element name="eventDate" type="pms:BaseValueSingle.Type"/>

    <xs:element name="extension" type="pms:IMSExtension.Type"/>

    <xs:element name="extensionField" type="pms:ExtensionField.Type"/>

    <xs:element name="formattedName" type="pms:Text.Type"/>

    <xs:element name="formname" type="pms:FormName.Type"/>

    <xs:element name="formnameType" type="pms:BaseValueToken.Type"/>

    <xs:element name="fullDescription" type="pms:FullDescription.Type"/>

    <xs:element name="imsx_codeMinor" type="pms:imsx_CodeMinor.Type"/>

    <xs:element name="imsx_codeMinorField" type="pms:imsx_CodeMinorField.Type"/>

    <xs:element name="imsx_statusInfo" type="pms:imsx_StatusInfo.Type"/>

    <xs:element name="instanceIdentifier" type="pms:Text.Type"/>

    <xs:element name="instanceName" type="pms:Text.Type"/>

    <xs:element name="instanceValue" type="pms:Text.Type"/>

    <xs:element name="institutionRole" type="pms:InstitutionRole.Type"/>

    <xs:element name="institutionroletype" type="pms:BaseValueToken.Type"/>

    <xs:element name="longDescription" type="pms:Text.Type"/>

    <xs:element name="name" type="pms:Name.Type"/>

    <xs:element name="nameType" type="pms:BaseValueToken.Type"/>

    <xs:element name="partName" type="pms:BaseValueSingle.Type"/>

    <xs:element name="password" type="pms:Text.Type"/>

    <xs:element name="person" type="pms:Person.Type"/>

    <xs:element name="pwEncryptionType" type="pms:Text.Type"/>

    <xs:element name="representation" type="pms:Representation.Type"/>

    <xs:element name="representationType" type="pms:BaseValueToken.Type"/>

    <xs:element name="roles" type="pms:EnterpriseRoles.Type"/>

    <xs:element name="shortDescription" type="pms:Text.Type"/>

    <xs:element name="sourcedGUID" type="pms:SourcedGUID.Type"/>

    <xs:element name="systemRole" type="pms:BaseValueToken.Type"/>

    <xs:element name="userId" type="pms:UserId.Type"/>

    <xs:element name="userIdType" type="pms:Text.Type"/>

    <xs:element name="userIdValue" type="pms:Text.Type"/>

    <!-- ================================================================================================== -->

    <!-- Declaration of the elements (Derived) ************************************************************* -->

    <xs:element name="dataSource" type="pms:GUID.Type"/>

    <!-- ================================================================================================== -->

    <!-- Declaration of the message parameter elements **************************************************** -->

    <xs:element name="fromSavePoint" type="pms:SequenceIdentifier.Type"/>

    <xs:element name="newSourcedId" type="pms:GUID.Type"/>

    <xs:element name="personCore" type="pms:PersonCore.Type"/>

    <xs:element name="personRecord" type="pms:PersonRecord.Type"/>

    <xs:element name="personRecordSet" type="pms:PersonRecordSet.Type"/>

    <xs:element name="queryObject" type="pms:QueryObject.Type"/>

    <xs:element name="savePoint" type="pms:SequenceIdentifier.Type"/>

    <xs:element name="sourcedId" type="pms:GUID.Type"/>

    <xs:element name="sourcedIdSet" type="pms:GUIDSet.Type"/>

    <!-- ================================================================================================== -->

    <!-- Declaration of the message body elements ********************************************************* -->

    <xs:element name="createPersonRequest">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="pms:sourcedId"/>
                <xs:element ref="pms:personRecord"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element name="createPersonResponse" />

    <xs:element name="createByProxyPersonRequest">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="pms:personRecord"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element name="createByProxyPersonResponse">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="pms:sourcedId" minOccurs="0" maxOccurs="1"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element name="deletePersonRequest">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="pms:sourcedId"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element name="deletePersonResponse" />

    <xs:element name="readPersonRequest">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="pms:sourcedId"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element name="readPersonResponse">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="pms:personRecord" minOccurs="0" maxOccurs="1"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element name="readPersonCoreRequest">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="pms:sourcedId"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element name="readPersonCoreResponse">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="pms:personCore" minOccurs="0" maxOccurs="1"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element name="readAllPersonIdsRequest" />

    <xs:element name="readAllPersonIdsResponse">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="pms:sourcedIdSet" minOccurs="0" maxOccurs="1"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element name="readPersonIdsFromSavePointRequest">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="pms:fromSavePoint"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element name="readPersonIdsFromSavePointResponse">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="pms:sourcedIdSet" minOccurs="0" maxOccurs="1"/>
                <xs:element ref="pms:savePoint" minOccurs="0" maxOccurs="1"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element name="readPersonsRequest">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="pms:sourcedIdSet"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element name="readPersonsResponse">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="pms:personRecordSet" minOccurs="0" maxOccurs="1"/>
                <xs:element ref="pms:savePoint" minOccurs="0" maxOccurs="1"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element name="readPersonsFromSavePointRequest">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="pms:fromSavePoint"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element name="readPersonsFromSavePointResponse">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="pms:personRecordSet" minOccurs="0" maxOccurs="1"/>
                <xs:element ref="pms:savePoint" minOccurs="0" maxOccurs="1"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element name="updatePersonRequest">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="pms:sourcedId"/>
                <xs:element ref="pms:personRecord"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element name="updatePersonResponse" />

    <xs:element name="replacePersonRequest">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="pms:sourcedId"/>
                <xs:element ref="pms:personRecord"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element name="replacePersonResponse" />

    <xs:element name="discoverPersonIdsRequest">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="pms:queryObject"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element name="discoverPersonIdsResponse">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="pms:sourcedIdSet" minOccurs="0" maxOccurs="1"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element name="changePersonIdentifierRequest">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="pms:sourcedId"/>
                <xs:element ref="pms:newSourcedId"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element name="changePersonIdentifierResponse" />

    <!-- ================================================================================================== -->

    <!-- Declaration of the root element(s) *************************************************************** -->

    <xs:element name="imsx_syncRequestHeaderInfo" type="pms:imsx_RequestHeaderInfo.Type"/>
    <xs:element name="imsx_syncResponseHeaderInfo" type="pms:imsx_ResponseHeaderInfo.Type"/>

    <!-- ================================================================================================== -->

</xs:schema>
