<?xml version = "1.0" encoding = "UTF-8"?>
<xs:schema xmlns="http://www.imsglobal.org/xsd/imscp_util"
    targetNamespace="http://www.imsglobal.org/xsd/imscp_util"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance"
    xmlns:xlink="http://www.w3.org/1999/xlink"
    version="IMS Packaging Utility 1.0"
    elementFormDefault="qualified"
    attributeFormDefault="unqualified">
    <xs:import namespace = "http://www.w3.org/1999/xlink" schemaLocation = "http://www.imsglobal.org/xsd/ims_xlink.xsd"/>
    <xs:annotation>
        <xs:documentation>
            XSD Data File Information
            -------------------------
            Author:       CP1P2 Project Team
            Date:         2005-11-11
            Version:      1.0
            Status:       Public Draft - IMS Packaging Utility v1.0 - WD2
            Description:  This is a normative representation of the IMS Packaging Utility 1.0 Information Model for binding 
                          purposes.  Read the corresponding IMS Packaging Utility Information Model for the Platform 
                          Independent Model representation.

            History:      This is version 1 of the IMS Packaging Utility v1.2 XSD.
                          It has a target namespace of http://www.imsglobal.org/xsd/imscp_util.
                          This Utility uses this general approach to modeling:
                          (1) All of the elements and attributes are defined as local to their host object;
                          (2) There are multiple host objects;
                          (3) Comments have been added to the complexType definitions.

            Copyright:    2005 (c) IMS Global Learning Consortium Inc.  All Rights Reserved.
                          IMS Global Learning Consortium, Inc. (IMS) is publishing the information
                          contained in this binding ("Specification") for purposes of scientific
                          experimental and scholarly collaboration only.  IMS makes no warranty or 
                          representation regarding the accuracy or completeness of the Specification.
                          This material is provided on an "As Is" and "As Available basis".
                          The Specification is at all times subject to change and revision without
                          notice. It is your sole responsibility to evaluate the usefulness, accuracy
                          and completeness of the Specification as it relates to you.  IMS would
                          appreciate receiving your comments and suggestions.  Please contact IMS
                          through our website at: http://www.imsglobal.org.

            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="grpStrict.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 "strict" i.e. they must have their own namespace.
                    </xs:documentation>
                </xs:annotation>
                <xs:sequence>
                    <xs:any namespace = "##other" processContents = "strict" minOccurs = "0" maxOccurs = "unbounded"/>
                </xs:sequence>
            </xs:group>

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

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

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

        <!-- Generate the simpleType elements based IMS data-types  *******************************************  -->

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

        <!-- Generate the derived data-type elements **********************************************************  -->

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

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

            <xs:complexType name="IMSPointer.Type">
                <xs:annotation>
                    <xs:documentation>
                        A bound instance of an IMS Pointer object allows a packager to 
                        associate a specific XML node set in the same IMS Manifest Document
                        that contains it or an XML node set in a different IMS Manifest Document
                        instance with the parent object containing an IMS Pointer instance.  
                        
                        A referenced node set must be a valid child of the referencing parent element, 
                        both as to kind and multiplicity in a referencing parent's context.

                        <p>Represents a binding of the kinds of objects defined as children of ims-cp-imManifest : Manifest.[ ManifestMetadata, Organizations, Resources, Manifest, Extension ].</p>
                    </xs:documentation>
                </xs:annotation>
                <xs:sequence>
                    <xs:group ref="grpStrict.any"/>
                </xs:sequence>
                <xs:attribute name="identifier" use="required" type="xs:ID"/>
                <xs:attribute ref="xlink:type" use="optional" default="simple"/>
                <xs:attribute ref="xlink:href" use="required"/>
                <xs:anyAttribute namespace = "##other" processContents = "strict"/>
            </xs:complexType>

            <xs:complexType name="Metadata.Type">
                <xs:annotation>
                    <xs:documentation>
                        An instance of the metadata element contains data structures that declare descriptive
                        information about a metadata element's parent only.
                        
                        One or more different metadata models may be declared as child extensions of a 
                        metadata element.

                        <p>Represents a binding of the kinds of child objects defined for ims-cp-imMetadata:  Metadata.[ Extension ].</p>
                    </xs:documentation>
                </xs:annotation>
                <xs:sequence>
                    <xs:group ref="grpStrict.any"/>
                </xs:sequence>
            </xs:complexType>

            <xs:complexType name="Variant.Type">
                <xs:annotation>
                    <xs:documentation>
                        A variant element is closely analogous to a resource element in the 
                        IMS Content Packaging Information Model.  Variant is a container for a 
                        particular asset or collection of assets.  A resource may contain references 
                        to assets that are all of the same type or different types (i.e., file formats).
                        
                        The Variant family of objects allows a packager to identify alternative collections
                        of resources.  Metadata is used to describe the nature of a collection of alternative
                        assets and their intended use.  Examples include, but are not limited to, use as
                        lingual variants, visual or auditory variants, remediation variants, or platform
                        delivery variants.
                        
                        The scope of referenced assets is specific to a Variant object.  Their use is in the
                        context of the parent object containing a variant instance, typically a bound instance
                        of a Resource object from the IMS CP namespace.

                        <p>Represents a binding of the kinds of child objects defined for ims-cp-imResource: Resource.[ Metadata, File, Dependency, Extension ].</p>
                    </xs:documentation>
                </xs:annotation>
                <xs:sequence>
                    <xs:element name="metadata" type="Metadata.Type" minOccurs = "1" maxOccurs = "1"/>
                    <xs:group ref="grpStrict.any"/>
                </xs:sequence>
                <xs:attribute name="identifier" use="required" type="xs:ID"/>
                <xs:attribute ref="xlink:type" use="optional" default="simple"/>
                <xs:attribute ref="xlink:href" use="required"/>
                <xs:anyAttribute namespace = "##other" processContents = "strict"/>
            </xs:complexType>

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

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

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

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

            <xs:element name="imsptr" type="IMSPointer.Type"/>
            <xs:element name="variant" type="Variant.Type"/>

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

</xs:schema>
