<?xml version="1.0" encoding="UTF-8" ?>

<schema xmlns="http://www.w3.org/2001/XMLSchema"
   xmlns:oai_ims="http://oai.dlib.vt.edu/metadata/oai_ims"
   targetNamespace="http://oai.dlib.vt.edu/metadata/oai_ims"
   xmlns:xml="http://www.w3.org/XML/1998/namespace"
   elementFormDefault="qualified"
   attributeFormDefault="unqualified">

<import namespace="http://www.w3.org/XML/1998/namespace"
        schemaLocation="http://oai.dlib.vt.edu/OAI/xml.xsd"/>

   <annotation>
      <documentation>
         Draft XML Schema for IMS Metadata Set v1.1 (IMS-MS)
         Version 0.2, 2001-03-31
         Hussein Suleman
         Digital Library Research Laboratory, Virginia Tech
         hussein@vt.edu
      </documentation>
   </annotation>

   <complexType name="LangStringType">
      <annotation>
         <documentation>
            String with language information encoded
         </documentation>
      </annotation>
      <simpleContent>
         <extension base="string">
            <attribute ref="xml:lang"/>
         </extension>
      </simpleContent>
   </complexType>

   <complexType name="DateType">
      <simpleContent>
         <extension base="string">
            <attribute name="datetype" use="required">
               <simpleType>
                  <restriction base="string">
                     <enumeration value="description"/>
                     <enumeration value="datetime"/>
                  </restriction>                  
               </simpleType>
            </attribute>
         </extension>
      </simpleContent>
   </complexType>

   <complexType name="CatalogEntryType">
      <sequence>
         <element name="catalogue" type="string" minOccurs="0" maxOccurs="1"/>
         <element name="entry" type="oai_ims:LangStringType" minOccurs="0" maxOccurs="8"/>
      </sequence>
   </complexType>

   <complexType name="ContributeType">
      <sequence>
         <element name="role" type="oai_ims:LangStringType" minOccurs="0" maxOccurs="1"/>
         <element name="entity" type="string" minOccurs="0" maxOccurs="8"/>
         <element name="date" type="oai_ims:DateType" minOccurs="0" maxOccurs="1"/>
      </sequence>
   </complexType>
   
   <simpleType name="ZeroToFourType">
      <restriction base="integer">
         <minInclusive value="0"/>
         <maxInclusive value="4"/>
      </restriction>
   </simpleType>

   <simpleType name="YesNoType">
      <restriction base="string">
         <enumeration value="yes"/>
         <enumeration value="no"/>
      </restriction>
   </simpleType>
   
   <element name="oai_ims">
      <complexType>
         <sequence>

            <element name="general" minOccurs="0" maxOccurs="1">
               <complexType>
                  <sequence>
                     <element name="identifier" type="string" minOccurs="0" maxOccurs="1"/>
                     <element name="title" type="oai_ims:LangStringType" minOccurs="0" maxOccurs="8"/>
                     <element name="catalogentry" type="oai_ims:CatalogEntryType" minOccurs="0" maxOccurs="8"/>
                     <element name="language" type="string" minOccurs="0" maxOccurs="8"/>
                     <element name="description" type="oai_ims:LangStringType" minOccurs="0" maxOccurs="8"/>
                     <element name="keywords" type="oai_ims:LangStringType" minOccurs="0" maxOccurs="64"/>
                     <element name="coverage" type="oai_ims:LangStringType" minOccurs="0" maxOccurs="8"/>
                     <element name="structure" minOccurs="0" maxOccurs="1">
                        <simpleType>
                           <restriction base="string">
                              <enumeration value="Collection"/>
                              <enumeration value="Mixed"/>
                              <enumeration value="Linear"/>
                              <enumeration value="Hierarchical"/>
                              <enumeration value="Networked"/>
                              <enumeration value="Branched"/>
                              <enumeration value="Parceled"/>
                              <enumeration value="Atomic"/>
                           </restriction>
                        </simpleType>
                     </element>
                     <element name="aggregationlevel" minOccurs="0" maxOccurs="1">
                        <simpleType>
                           <restriction base="integer">
                              <minInclusive value="0"/>
                              <maxInclusive value="3"/>
                           </restriction>
                        </simpleType>
                     </element>
                  </sequence>
               </complexType>
            </element>
            
            <element name="lifecycle" minOccurs="0" maxOccurs="1">
               <complexType>
                  <sequence>
                     <element name="version" type="oai_ims:LangStringType" minOccurs="0" maxOccurs="1"/>
                     <element name="status" minOccurs="0" maxOccurs="1">
                        <simpleType>
                           <restriction base="string">
                              <enumeration value="Draft"/>
                              <enumeration value="Final"/>
                              <enumeration value="Revised"/>
                              <enumeration value="Unavailable"/>
                           </restriction>
                        </simpleType>
                     </element>
                     <element name="contribute" type="oai_ims:ContributeType" minOccurs="0" maxOccurs="32"/>
                  </sequence>
               </complexType>
            </element>
            
            <element name="metametadata" minOccurs="0" maxOccurs="1">
               <complexType>
                  <sequence>
                     <element name="identifier" type="string" minOccurs="0" maxOccurs="1"/>
                     <element name="catalogentry" type="oai_ims:CatalogEntryType" minOccurs="0" maxOccurs="8"/>
                     <element name="contribute" type="oai_ims:ContributeType" minOccurs="0" maxOccurs="8"/>
                     <element name="metadatascheme" type="string" minOccurs="0" maxOccurs="8"/>
                     <element name="language" type="string" minOccurs="0" maxOccurs="1"/>
                  </sequence>
               </complexType>
            </element>

            <element name="technical" minOccurs="0" maxOccurs="1">
               <complexType>
                  <sequence>
                     <element name="format" type="string" minOccurs="0" maxOccurs="8"/>
                     <element name="size" type="nonNegativeInteger" minOccurs="0" maxOccurs="1"/>
                     <element name="location" type="string" minOccurs="0" maxOccurs="8"/>
                     <element name="requirements" minOccurs="0" maxOccurs="8">
                        <complexType>
                           <sequence>
                              <element name="type" type="oai_ims:LangStringType" minOccurs="0" maxOccurs="1"/>
                              <element name="name" type="oai_ims:LangStringType" minOccurs="0" maxOccurs="1"/>
                              <element name="minimumversion" type="string" minOccurs="0" maxOccurs="1"/>
                              <element name="maximumversion" type="string" minOccurs="0" maxOccurs="1"/>                              
                           </sequence>
                        </complexType>
                     </element>
                     <element name="installationremarks" type="oai_ims:LangStringType" minOccurs="0" maxOccurs="1"/>
                     <element name="otherplatformrequirements" type="oai_ims:LangStringType" minOccurs="0" maxOccurs="1"/>
                     <element name="duration" type="oai_ims:DateType" minOccurs="0" maxOccurs="1"/>
                  </sequence>
               </complexType>
            </element>

            <element name="educational" minOccurs="0" maxOccurs="1">
               <complexType>
                  <sequence>
                     <element name="interactivitytype" minOccurs="0" maxOccurs="1">
                        <simpleType>
                           <restriction base="string">
                              <enumeration value="Active"/>
                              <enumeration value="Expositive"/>
                              <enumeration value="Mixed"/>
                              <enumeration value="Undefined"/>
                           </restriction>
                        </simpleType>
                     </element>
                     <element name="learningresourcetype" type="oai_ims:LangStringType" minOccurs="0" maxOccurs="8"/>
                     <element name="interactivitylevel" type="oai_ims:ZeroToFourType" minOccurs="0" maxOccurs="1"/>
                     <element name="semanticdensity" type="oai_ims:ZeroToFourType" minOccurs="0" maxOccurs="1"/>
                     <element name="intendedenduserrole" minOccurs="0" maxOccurs="4">
                        <simpleType>
                           <restriction base="string">
                              <enumeration value="Teacher"/>
                              <enumeration value="Author"/>
                              <enumeration value="Learner"/>
                              <enumeration value="Manager"/>
                           </restriction>
                        </simpleType>
                     </element>
                     <element name="learningcontext" type="oai_ims:LangStringType" minOccurs="0" maxOccurs="8"/>
                     <element name="typicalagerange" type="oai_ims:LangStringType" minOccurs="0" maxOccurs="4"/>
                     <element name="difficulty" type="oai_ims:ZeroToFourType" minOccurs="0" maxOccurs="1"/>
                     <element name="typicallearningtime" type="oai_ims:DateType" minOccurs="0" maxOccurs="1"/>
                     <element name="description" type="oai_ims:LangStringType" minOccurs="0" maxOccurs="8"/>
                     <element name="language" type="string" minOccurs="0" maxOccurs="8"/>
                  </sequence>
               </complexType>
            </element>

            <element name="rights" minOccurs="0" maxOccurs="1">
               <complexType>
                  <sequence>
                     <element name="cost" type="oai_ims:YesNoType" minOccurs="0" maxOccurs="1"/>
                     <element name="copyrightandotherrestrictions" type="oai_ims:YesNoType" minOccurs="0" maxOccurs="1"/>
                     <element name="description" type="oai_ims:LangStringType" minOccurs="0" maxOccurs="8"/>
                  </sequence>
               </complexType>
            </element>

            <element name="relation" minOccurs="0" maxOccurs="32">
               <complexType>
                  <sequence>
                     <element name="kind" type="oai_ims:LangStringType" minOccurs="0" maxOccurs="8"/>
                     <element name="resource" minOccurs="0" maxOccurs="1">
                        <complexType>
                           <sequence>
                              <element name="identifier" type="string" minOccurs="0" maxOccurs="1"/>
                              <element name="description" type="oai_ims:LangStringType" minOccurs="0" maxOccurs="8"/>
                           </sequence>
                        </complexType>
                     </element>
                  </sequence>
               </complexType>
            </element>

            <element name="annotation" minOccurs="0" maxOccurs="32">
               <complexType>
                  <sequence>
                     <element name="person" type="string" minOccurs="0" maxOccurs="1"/>
                     <element name="date" type="oai_ims:DateType" minOccurs="0" maxOccurs="1"/>
                     <element name="description" type="oai_ims:LangStringType" minOccurs="0" maxOccurs="1"/>
                  </sequence>
               </complexType>
            </element>

            <element name="classification" minOccurs="0" maxOccurs="10">
               <complexType>
                  <sequence>
                     <element name="purpose" type="oai_ims:LangStringType" minOccurs="0" maxOccurs="8"/>
                     <element name="taxonpath" minOccurs="0" maxOccurs="16">
                        <complexType>
                           <sequence>
                              <element name="source" type="string" minOccurs="0" maxOccurs="1"/>
                              <element name="taxon" minOccurs="0" maxOccurs="16">
                                 <complexType>
                                    <sequence>
                                       <element name="id" type="string" minOccurs="0" maxOccurs="1"/>
                                       <element name="entry" type="oai_ims:LangStringType" minOccurs="0" maxOccurs="1"/>
                                    </sequence>
                                 </complexType>
                              </element>
                           </sequence>
                        </complexType>
                     </element>
                     <element name="description" type="oai_ims:LangStringType" minOccurs="0" maxOccurs="1"/>
                     <element name="keywords" type="oai_ims:LangStringType" minOccurs="0" maxOccurs="8"/>
                  </sequence>
               </complexType>
            </element>

         </sequence>
       </complexType>
    </element>

</schema>


