<xs:schema targetNamespace="http://ltsc.ieee.org/xsd/LOM"
           xmlns="http://ltsc.ieee.org/xsd/LOM"
           xmlns:xs="http://www.w3.org/2001/XMLSchema"
	   xmlns:unique="http://ltsc.ieee.org/xsd/LOM/unique"
           xmlns:vocab="http://ltsc.ieee.org/xsd/LOM/vocab"
           xmlns:extend="http://ltsc.ieee.org/xsd/LOM/extend"
           elementFormDefault="qualified"
           version="IEEE LTSC LOM XML 1.0">

   <xs:annotation>
      <xs:documentation>
         This work is licensed under the Creative Commons Attribution-ShareAlike
         License.  To view a copy of this license, see the file license.txt,
         visit http://creativecommons.org/licenses/by-sa/1.0 or send a letter to
         Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.
      </xs:documentation>
      <xs:documentation>
         This file represents a composite schema for validating
         LOM V1.0 instances.  This file is built by default to represent a 
         composite schema for validation of the following:          

         1) The use of LOM Base Schema vocabulary source/value pairs only
         2) Uniqueness constraints defined by 1484.12.1-2002
         3) No existenace of any defined extensions

         Alternative composite schemas can be assembled by selecting
         from the various alternative component schema listed below.
      </xs:documentation>
      <xs:documentation>
        *****************************************************************************
        **                           CHANGE HISTORY                                **
        *****************************************************************************
        ** 11/14/2003:  1)Updated comment describing vocab/strict.xsd.  Indicated  **
        **                that the strict.xsd is used to validate vocabularies     **
        **                defined in the LOM V1.0 Base Schema.                     **
        **              2)Moved included schema elementNames.xsd just before       **
        **                elementTypes.xsd.                                        **
        **              3)Moved the element declaration for the top-level lom      **
        **                metadata element to a separate file (rootElement.xsd)    **
        **                and included this file just after elementTypes.xsd.      **
        **              4)Moved the XML Schema import statements before the XML    **
        **                Schema include statements.                               **
        **              5)Moved the element group declaration named                **
        **                lom:customElements to a separate file (anyElement.xsd)   **
        **                and included this new file just before the XML Schema    **
        **                import statments.                                        **
        **                                                                         **
        ** 03/15/2004:  1)Switched which vocabulary vaidation approach is the      **
        **                default to be used by this template from vocab/loose.xsd **
        **                to vocab/strict.xsd.  Base on ballot resolution comment  **
        **                addressed on 03/15/2004                                  **
        **              2)Switched the extension validation approach to use        **
        **                extend/strict.xsd.  The XSD now is reprsentative of      **
        **                a schema that can be used to validate strictly           **
        **                conforming LOM XML Instances.                            **
        *****************************************************************************
      </xs:documentation>
   </xs:annotation>

   <!-- Learning Object Metadata -->

   <!-- Element uniqueness:  use one of the following                   -->
   <!-- Use unique/loose.xsd to relax element uniqueness constraints    -->
   <!-- Use unique/strict.xsd to enforce element uniqueness constraints -->

    <xs:import namespace="http://ltsc.ieee.org/xsd/LOM/unique"
              schemaLocation="unique/loose.xsd"/>

   <!--<xs:import namespace="http://ltsc.ieee.org/xsd/LOM/unique"
              schemaLocation="unique/strict.xsd"/>-->

   <!-- Vocabulary checking:  use one of the following                             -->
   <!-- Use vocab/loose.xsd to relax vocabulary enumeration constraints            -->
   <!-- Use vocab/strict.xsd to enforce the LOM V1.0 Base Schema vocabulary values -->
   <!-- Use vocab/custom.xsd to enforce custom vocabulary values                   -->

   <!--<xs:import namespace="http://ltsc.ieee.org/xsd/LOM/vocab"
              schemaLocation="vocab/loose.xsd"/> -->

   <!--   <xs:import namespace="http://ltsc.ieee.org/xsd/LOM/vocab"
              schemaLocation="vocab/strict.xsd"/> --> 

    <xs:import namespace="http://ltsc.ieee.org/xsd/LOM/vocab"
              schemaLocation="vocab/custom.xsd"/> 

   <!-- Custom elements:  use one of the following                     -->
   <!-- Use extend/strict.xsd to enforce strictly conforming elements  -->
   <!-- Use extend/custom.xsd to allow custom metadata elements        -->

   <!-- <xs:import namespace="http://ltsc.ieee.org/xsd/LOM/extend"
             schemaLocation="extend/strict.xsd"/> -->  

   <xs:import namespace="http://ltsc.ieee.org/xsd/LOM/extend"
              schemaLocation="extend/custom.xsd"/> 

   <xs:group name="customElements">
      <xs:choice>
         <xs:any namespace="##other" processContents="lax"/>
      </xs:choice>
   </xs:group>


   <!-- Data type declarations -->

   <!-- CharacterString -->
   <xs:simpleType name="CharacterString">
      <xs:restriction base="xs:string"/>
   </xs:simpleType>

   <!-- LanguageId -->
   <xs:simpleType name="LanguageIdOrNone">
      <xs:union memberTypes="LanguageId LanguageIdNone"/>
   </xs:simpleType>

   <xs:simpleType name="LanguageId">
      <xs:restriction base="xs:language"/>
   </xs:simpleType>

   <xs:simpleType name="LanguageIdNone">
      <xs:restriction base="xs:token">
         <xs:enumeration value="none"/>
      </xs:restriction>
   </xs:simpleType>

   <!-- VCard -->
   <xs:simpleType name="VCard">
      <xs:restriction base="CharacterString"/>
   </xs:simpleType>

   <!-- MimeType -->
   <xs:simpleType name="MimeType">
      <xs:restriction base="CharacterString"/>
   </xs:simpleType>

   <!-- Size -->
   <xs:simpleType name="Size">
      <xs:restriction base="xs:nonNegativeInteger"/>
   </xs:simpleType>

   <!-- LangString -->
   <xs:complexType name="LangString">
      <xs:choice minOccurs="0" maxOccurs="unbounded">
         <xs:element name="string" type="langString"/>
         <xs:group ref="extend:customElements"/>
      </xs:choice>
   </xs:complexType>

   <xs:complexType name="langString">
      <xs:simpleContent>
         <xs:extension base="CharacterString">
            <xs:attribute name="language" type="LanguageId"/>
         </xs:extension>
      </xs:simpleContent>
   </xs:complexType>

   <!-- DateTime -->
   <xs:complexType name="DateTime">
      <xs:choice minOccurs="0" maxOccurs="unbounded">
         <xs:element name="dateTime" type="DateTimeValue"/>
         <xs:element name="description" type="description"/>
         <xs:group ref="extend:customElements"/>
      </xs:choice>
   </xs:complexType>

   <xs:complexType name="DateTimeValue">
      <xs:simpleContent>
         <xs:extension base="DateTimeString">
           <xs:attributeGroup ref="unique:DateTimeValue"/>
         </xs:extension>
      </xs:simpleContent>
   </xs:complexType>

   <!-- Regular expresion from Christian Klaue -->
   <xs:simpleType name="DateTimeString">
      <xs:restriction base="CharacterString">
         <xs:pattern value="([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]|[0-9][1-9][0-9]{2}|[1-9][0-9]{3})(\-(0[1-9]|1[0-2])(\-(0[1-9]|[1-2][0-9]|3[0-1])(T([0-1][0-9]|2[0-3])(:[0-5][0-9](:[0-5][0-9](\.[0-9]{1,}(Z|((\+|\-)([0-1][0-9]|2[0-3]):[0-5][0-9]))?)?)?)?)?)?)?"/>
      </xs:restriction>
   </xs:simpleType>

   <!-- Duration -->
   <xs:complexType name="Duration">
      <xs:choice minOccurs="0" maxOccurs="unbounded">
         <xs:element name="duration" type="DurationValue"/>
         <xs:element name="description" type="description"/>
         <xs:group ref="extend:customElements"/>
      </xs:choice>
   </xs:complexType>

   <xs:complexType name="DurationValue">
      <xs:simpleContent>
         <xs:extension base="DurationString">
            <xs:attributeGroup ref="unique:DurationValue"/>
         </xs:extension>
      </xs:simpleContent>
   </xs:complexType>

   <!-- Regular expresion from Christian Klaue -->
   <xs:simpleType name="DurationString">
      <xs:restriction base="CharacterString">
         <xs:pattern value="P([0-9]{1,}Y){0,1}([0-9]{1,}M){0,1}([0-9]{1,}D){0,1}(T([0-9]{1,}H){0,1}([0-9]{1,}M){0,1}([0-9]{1,}(\.[0-9]{1,}){0,1}S){0,1}){0,1}"/>
      </xs:restriction>
   </xs:simpleType>

   <!-- Element declarations -->

   <!-- Duplicate declarations are included as comments. -->

   <!-- Learning Object Metadata -->
   <xs:element name="lom" type="lom">
      <xs:unique name="lomUnique">
         <xs:selector xpath="*"/>
         <xs:field xpath="@uniqueElementName"/>
      </xs:unique>
   </xs:element>

   <!-- 1 General -->
   <xs:group name="general">
      <xs:sequence>
         <xs:element name="general" type="general">
            <xs:unique name="generalUnique">
               <xs:selector xpath="*"/>
               <xs:field xpath="@uniqueElementName"/>
            </xs:unique>
         </xs:element>
      </xs:sequence>
   </xs:group>

   <!-- 1.1 Identifier -->
   <xs:group name="identifier">
      <xs:sequence>
         <xs:element name="identifier" type="identifier">
            <xs:unique name="identifierUnique">
               <xs:selector xpath="*"/>
               <xs:field xpath="@uniqueElementName"/>
            </xs:unique>
         </xs:element>
      </xs:sequence>
   </xs:group>

   <!-- 1.1.1 Catalog -->
   <xs:group name="catalog">
      <xs:sequence>
         <xs:element name="catalog" type="catalog"/>
      </xs:sequence>
   </xs:group>

   <!-- 1.1.2 Entry -->
   <xs:group name="entry">
      <xs:sequence>
         <xs:element name="entry" type="entry"/>
      </xs:sequence>
   </xs:group>

   <!-- 1.2 Title -->
   <xs:group name="title">
      <xs:sequence>
         <xs:element name="title" type="title"/>
      </xs:sequence>
   </xs:group>

   <!-- 1.3 Language -->
   <xs:group name="languageIdOrNone">
      <xs:sequence>
         <xs:element name="language" type="LanguageIdOrNone"/>
      </xs:sequence>
   </xs:group>

   <!-- 1.4 Description -->
   <xs:group name="descriptionUnbounded">
      <xs:sequence>
         <xs:element name="description" type="LangString"/>
      </xs:sequence>
   </xs:group>

   <!-- 1.5 Keyword -->
   <xs:group name="keyword">
      <xs:sequence>
         <xs:element name="keyword" type="keyword"/>
      </xs:sequence>
   </xs:group>

   <!-- 1.6 Coverage -->
   <xs:group name="coverage">
      <xs:sequence>
         <xs:element name="coverage" type="coverage"/>
      </xs:sequence>
   </xs:group>

   <!-- 1.7 Structure -->
   <xs:group name="structure">
      <xs:sequence>
         <xs:element name="structure" type="structure">
            <xs:unique name="structureUnique">
               <xs:selector xpath="*"/>
               <xs:field xpath="@uniqueElementName"/>
            </xs:unique>
         </xs:element>
      </xs:sequence>
   </xs:group>

   <!-- 1.8 Aggregation Level -->
   <xs:group name="aggregationLevel">
      <xs:sequence>
         <xs:element name="aggregationLevel" type="aggregationLevel">
            <xs:unique name="aggregationLevelUnique">
               <xs:selector xpath="*"/>
               <xs:field xpath="@uniqueElementName"/>
            </xs:unique>
         </xs:element>
      </xs:sequence>
   </xs:group>

   <!-- 2 Life Cycle -->
   <xs:group name="lifeCycle">
      <xs:sequence>
         <xs:element name="lifeCycle" type="lifeCycle">
            <xs:unique name="lifeCycleUnique">
               <xs:selector xpath="*"/>
               <xs:field xpath="@uniqueElementName"/>
            </xs:unique>
         </xs:element>
      </xs:sequence>
   </xs:group>

   <!-- 2.1 Version -->
   <xs:group name="version">
      <xs:sequence>
         <xs:element name="version" type="version"/>
      </xs:sequence>
   </xs:group>

   <!-- 2.2 Status -->
   <xs:group name="status">
      <xs:sequence>
         <xs:element name="status" type="status">
            <xs:unique name="statusUnique">
               <xs:selector xpath="*"/>
               <xs:field xpath="@uniqueElementName"/>
            </xs:unique>
         </xs:element>
      </xs:sequence>
   </xs:group>

   <!-- 2.3 Contribute -->
   <xs:group name="contribute">
      <xs:sequence>
         <xs:element name="contribute" type="contribute">
            <xs:unique name="contributeUnique">
               <xs:selector xpath="*"/>
               <xs:field xpath="@uniqueElementName"/>
            </xs:unique>
         </xs:element>
      </xs:sequence>
   </xs:group>

   <!-- 2.3.1 Role -->
   <xs:group name="role">
      <xs:sequence>
         <xs:element name="role" type="role">
            <xs:unique name="roleUnique">
               <xs:selector xpath="*"/>
               <xs:field xpath="@uniqueElementName"/>
            </xs:unique>
         </xs:element>
      </xs:sequence>
   </xs:group>

   <!-- 2.3.2 Entity -->
   <xs:group name="entityUnbounded">
      <xs:sequence>
         <xs:element name="entity" type="VCard"/>
      </xs:sequence>
   </xs:group>

  <!-- 2.3.3 Date -->
  <xs:group name="date">
     <xs:sequence>
        <xs:element name="date" type="date">
           <xs:unique name="dateUnique">
              <xs:selector xpath="*"/>
              <xs:field xpath="@uniqueElementName"/>
           </xs:unique>
        </xs:element>
     </xs:sequence>
   </xs:group>

   <!-- 3 Meta-Metadata -->
   <xs:group name="metaMetadata">
      <xs:sequence>
         <xs:element name="metaMetadata" type="metaMetadata">
            <xs:unique name="metaMetadataUnique">
               <xs:selector xpath="*"/>
               <xs:field xpath="@uniqueElementName"/>
            </xs:unique>
         </xs:element>
      </xs:sequence>
   </xs:group>

   <!-- 3.1 Identifier
   <xs:group name="identifier">
      <xs:sequence>
         <xs:element name="identifier" type="identifier">
            <xs:unique name="identifierUnique">
               <xs:selector xpath="*"/>
               <xs:field xpath="@uniqueElementName"/>
            </xs:unique>
         </xs:element>
      </xs:sequence>
   </xs:group> -->

   <!-- 3.1.1 Catalog
   <xs:group name="catalog">
      <xs:sequence>
         <xs:element name="catalog" type="catalog"/>
      </xs:sequence>
   </xs:group> -->

   <!-- 3.1.2 Entry
   <xs:group name="entry">
      <xs:sequence>
         <xs:element name="entry" type="entry"/>
      </xs:sequence>
   </xs:group> -->

   <!-- 3.2 Contribute -->
   <xs:group name="contributeMeta">
      <xs:sequence>
         <xs:element name="contribute" type="contributeMeta">
            <xs:unique name="contributeMetaUnique">
               <xs:selector xpath="*"/>
               <xs:field xpath="@uniqueElementName"/>
            </xs:unique>
         </xs:element>
      </xs:sequence>
   </xs:group>

   <!-- 3.2.1 Role -->
   <xs:group name="roleMeta">
      <xs:sequence>
         <xs:element name="role" type="roleMeta">
            <xs:unique name="roleMetaUnique">
               <xs:selector xpath="*"/>
               <xs:field xpath="@uniqueElementName"/>
            </xs:unique>
         </xs:element>
      </xs:sequence>
   </xs:group>

   <!-- 3.2.2 Entity
   <xs:group name="entityUnbounded">
      <xs:sequence>
         <xs:element name="entity" type="VCard"/>
      </xs:sequence>
   </xs:group> -->

   <!-- 3.2.3 Date
   <xs:group name="date">
      <xs:sequence>
         <xs:element name="date" type="date">
            <xs:unique name="dateUnique">
               <xs:selector xpath="*"/>
               <xs:field xpath="@uniqueElementName"/>
            </xs:unique>
         </xs:element>
      </xs:sequence>
   </xs:group> -->

   <!-- 3.3 Metadata Schema -->
   <xs:group name="metadataSchema">
      <xs:sequence>
         <xs:element name="metadataSchema" type="metadataSchema"/>
      </xs:sequence>
   </xs:group>

   <!-- 3.4 Language -->
   <xs:group name="language">
      <xs:sequence>
         <xs:element name="language" type="language"/>
      </xs:sequence>
   </xs:group>

   <!-- 4 Technical -->
   <xs:group name="technical">
      <xs:sequence>
         <xs:element name="technical" type="technical">
            <xs:unique name="technicalUnique">
               <xs:selector xpath="*"/>
               <xs:field xpath="@uniqueElementName"/>
            </xs:unique>
         </xs:element>
      </xs:sequence>
   </xs:group>

   <!-- 4.1 Format -->
  <xs:group name="format">
      <xs:sequence>
         <xs:element name="format" type="format"/>
      </xs:sequence>
   </xs:group>

   <!-- 4.2 Size -->
   <xs:group name="size">
      <xs:sequence>
         <xs:element name="size" type="size"/>
      </xs:sequence>
   </xs:group>

   <!-- 4.3 Location -->
   <xs:group name="location">
      <xs:sequence>
         <xs:element name="location" type="location"/>
      </xs:sequence>
   </xs:group>

   <!-- 4.4 Requirement -->
   <xs:group name="requirement">
      <xs:sequence>
         <xs:element name="requirement" type="requirement"/>
      </xs:sequence>
   </xs:group>

   <!-- 4.4.1 OrComposite -->
   <xs:group name="orComposite">
      <xs:sequence>
         <xs:element name="orComposite" type="orComposite">
            <xs:unique name="orCompositeUnique">
               <xs:selector xpath="*"/>
               <xs:field xpath="@uniqueElementName"/>
            </xs:unique>
         </xs:element>
      </xs:sequence>
   </xs:group>

   <!-- 4.4.1.1 Type -->
   <xs:group name="type">
      <xs:sequence>
         <xs:element name="type" type="type">
            <xs:unique name="typeUnique">
               <xs:selector xpath="*"/>
               <xs:field xpath="@uniqueElementName"/>
            </xs:unique>
         </xs:element>
      </xs:sequence>
   </xs:group>

   <!-- 4.4.1.2 Name -->
   <xs:group name="name">
      <xs:sequence>
         <xs:element name="name" type="name">
            <xs:unique name="nameUnique">
               <xs:selector xpath="*"/>
               <xs:field xpath="@uniqueElementName"/>
            </xs:unique>
         </xs:element>
      </xs:sequence>
   </xs:group>

   <!-- 4.4.1.3 Minimum Version -->
   <xs:group name="minimumVersion">
      <xs:sequence>
         <xs:element name="minimumVersion" type="minimumVersion"/>
      </xs:sequence>
   </xs:group>

   <!-- 4.4.1.4 Maximum Version -->
   <xs:group name="maximumVersion">
      <xs:sequence>
         <xs:element name="maximumVersion" type="maximumVersion"/>
      </xs:sequence>
    </xs:group>

   <!-- 4.5 Installation Remarks -->
   <xs:group name="installationRemarks">
      <xs:sequence>
         <xs:element name="installationRemarks" type="installationRemarks"/>
      </xs:sequence>
   </xs:group>

   <!-- 4.6 Other Platform Requirements -->
   <xs:group name="otherPlatformRequirements">
      <xs:sequence>
         <xs:element name="otherPlatformRequirements" type="otherPlatformRequirements"/>
      </xs:sequence>
   </xs:group>

   <!-- 4.7 Duration -->
   <xs:group name="duration">
      <xs:sequence>
         <xs:element name="duration" type="duration">
            <xs:unique name="durationUnique">
               <xs:selector xpath="*"/>
               <xs:field xpath="@uniqueElementName"/>
            </xs:unique>
         </xs:element>
      </xs:sequence>
   </xs:group>

   <!-- 5 Educational -->
   <xs:group name="educational">
      <xs:sequence>
         <xs:element name="educational" type="educational">
            <xs:unique name="educationalUnique">
               <xs:selector xpath="*"/>
               <xs:field xpath="@uniqueElementName"/>
            </xs:unique>
         </xs:element>
      </xs:sequence>
   </xs:group>

   <!-- 5.1 Interactivity Type -->
   <xs:group name="interactivityType">
      <xs:sequence>
         <xs:element name="interactivityType" type="interactivityType">
            <xs:unique name="interactivityTypeUnique">
               <xs:selector xpath="*"/>
               <xs:field xpath="@uniqueElementName"/>
            </xs:unique>
         </xs:element>
      </xs:sequence>
   </xs:group>

   <!-- 5.2 Learning Resource Type -->
   <xs:group name="learningResourceType">
      <xs:sequence>
         <xs:element name="learningResourceType" type="learningResourceType">
            <xs:unique name="learningResourceTypeUnique">
               <xs:selector xpath="*"/>
               <xs:field xpath="@uniqueElementName"/>
            </xs:unique>
         </xs:element>
      </xs:sequence>
   </xs:group>

   <!-- 5.3 Interactivity Level -->
   <xs:group name="interactivityLevel">
      <xs:sequence>
         <xs:element name="interactivityLevel" type="interactivityLevel">
            <xs:unique name="interactivityLevelUnique">
               <xs:selector xpath="*"/>
               <xs:field xpath="@uniqueElementName"/>
            </xs:unique>
         </xs:element>
      </xs:sequence>
   </xs:group>

   <!-- 5.4 Semantic Density -->
   <xs:group name="semanticDensity">
      <xs:sequence>
         <xs:element name="semanticDensity" type="semanticDensity">
            <xs:unique name="semanticDensityUnique">
               <xs:selector xpath="*"/>
               <xs:field xpath="@uniqueElementName"/>
            </xs:unique>
         </xs:element>
      </xs:sequence>
   </xs:group>

   <!-- 5.5 Intended End User Role -->
   <xs:group name="intendedEndUserRole">
      <xs:sequence>
         <xs:element name="intendedEndUserRole" type="intendedEndUserRole">
            <xs:unique name="intendedEndUserRoleUnique">
               <xs:selector xpath="*"/>
               <xs:field xpath="@uniqueElementName"/>
            </xs:unique>
         </xs:element>
      </xs:sequence>
   </xs:group>

   <!-- 5.6 Context -->
   <xs:group name="context">
      <xs:sequence>
         <xs:element name="context" type="context">
            <xs:unique name="contextUnique">
               <xs:selector xpath="*"/>
               <xs:field xpath="@uniqueElementName"/>
            </xs:unique>
         </xs:element>
      </xs:sequence>
   </xs:group>

   <!-- 5.7 Typical Age Range -->
   <xs:group name="typicalAgeRange">
      <xs:sequence>
         <xs:element name="typicalAgeRange" type="typicalAgeRange"/>
      </xs:sequence>
   </xs:group>
  
   <!-- 5.8 Difficulty -->
   <xs:group name="difficulty">
      <xs:sequence>
         <xs:element name="difficulty" type="difficulty">
            <xs:unique name="difficultyUnique">
               <xs:selector xpath="*"/>
               <xs:field xpath="@uniqueElementName"/>
            </xs:unique>
         </xs:element>
      </xs:sequence>
   </xs:group>

   <!-- 5.9 Typical Learning Time -->
   <xs:group name="typicalLearningTime">
      <xs:sequence>
         <xs:element name="typicalLearningTime" type="typicalLearningTime">
            <xs:unique name="typicalLearningTimeUnique">
               <xs:selector xpath="*"/>
               <xs:field xpath="@uniqueElementName"/>
            </xs:unique>
         </xs:element>
      </xs:sequence>
   </xs:group>

   <!-- 5.10 Description
   <xs:group name="descriptionUnbounded">
      <xs:sequence>
         <xs:element name="description" type="LangString"/>
      </xs:sequence>
   </xs:group> -->

   <!-- 5.11 Language -->
   <xs:group name="languageId">
      <xs:sequence>
         <xs:element name="language" type="LanguageId"/>
      </xs:sequence>
   </xs:group>

   <!-- 6 Rights -->
   <xs:group name="rights">
      <xs:sequence>
         <xs:element name="rights" type="rights">
            <xs:unique name="rightsUnique">
               <xs:selector xpath="*"/>
               <xs:field xpath="@uniqueElementName"/>
            </xs:unique>
         </xs:element>
      </xs:sequence>
   </xs:group>

   <!-- 6.1 Cost -->
   <xs:group name="cost">
      <xs:sequence>
         <xs:element name="cost" type="cost">
            <xs:unique name="costUnique">
               <xs:selector xpath="*"/>
               <xs:field xpath="@uniqueElementName"/>
            </xs:unique>
         </xs:element>
      </xs:sequence>
   </xs:group>

   <!-- 6.2 Copyright and Other Restrictions -->
   <xs:group name="copyrightAndOtherRestrictions">
      <xs:sequence>
         <xs:element name="copyrightAndOtherRestrictions" type="copyrightAndOtherRestrictions">
            <xs:unique name="copyrightAndOtherRestrictionsUnique">
               <xs:selector xpath="*"/>
               <xs:field xpath="@uniqueElementName"/>
            </xs:unique>
         </xs:element>
      </xs:sequence>
   </xs:group>

   <!-- 6.3 Description -->
   <xs:group name="description">
      <xs:sequence>
         <xs:element name="description" type="description"/>
      </xs:sequence>
   </xs:group>

   <!-- 7 Relation -->
   <xs:group name="relation">
      <xs:sequence>
         <xs:element name="relation" type="relation">
            <xs:unique name="relationUnique">
               <xs:selector xpath="*"/>
               <xs:field xpath="@uniqueElementName"/>
            </xs:unique>
         </xs:element>
      </xs:sequence>
   </xs:group>

   <!-- 7.1 Kind -->
   <xs:group name="kind">
      <xs:sequence>
         <xs:element name="kind" type="kind">
            <xs:unique name="kindUnique">
               <xs:selector xpath="*"/>
               <xs:field xpath="@uniqueElementName"/>
            </xs:unique>
         </xs:element>
      </xs:sequence>
   </xs:group>

   <!-- 7.2 Resource -->
   <xs:group name="resource">
      <xs:sequence>
         <xs:element name="resource" type="resource"/>
      </xs:sequence>
   </xs:group>

   <!-- 7.2.1 Identifier
   <xs:group name="identifier">
      <xs:sequence>
         <xs:element name="identifier" type="identifier">
            <xs:unique name="identifierUnique">
               <xs:selector xpath="*"/>
               <xs:field xpath="@uniqueElementName"/>
            </xs:unique>
         </xs:element>
      </xs:sequence>
   </xs:group> -->

   <!-- 7.2.1.1 Catalog
   <xs:group name="catalog">
      <xs:sequence>
         <xs:element name="catalog" type="catalog"/>
      </xs:sequence>
   </xs:group> -->

   <!-- 7.2.1.2 Entry
   <xs:group name="entry">
      <xs:sequence>
         <xs:element name="entry" type="entry"/>
      </xs:sequence>
   </xs:group> -->

   <!-- 7.2.2 Description
   <xs:group name="description">
      <xs:sequence>
         <xs:element name="description" type="description"/>
      </xs:sequence>
   </xs:group> -->

   <!-- 8 Annotation -->
   <xs:group name="annotation">
      <xs:sequence>
         <xs:element name="annotation" type="annotation">
            <xs:unique name="annotationUnique">
               <xs:selector xpath="*"/>
               <xs:field xpath="@uniqueElementName"/>
            </xs:unique>
         </xs:element>
      </xs:sequence>
   </xs:group>

   <!-- 8.1 Entity -->
   <xs:group name="entity">
      <xs:sequence>
         <xs:element name="entity" type="entity"/>
      </xs:sequence>
   </xs:group>

   <!-- 8.2 Date
   <xs:group name="date">
      <xs:sequence>
         <xs:element name="date" type="date">
            <xs:unique name="dateUnique">
               <xs:selector xpath="*"/>
               <xs:field xpath="@uniqueElementName"/>
            </xs:unique>
         </xs:element>
      </xs:sequence>
   </xs:group> -->

   <!-- 8.3 Description
   <xs:group name="description">
      <xs:sequence>
         <xs:element name="description" type="description"/>
      </xs:sequence>
   </xs:group> -->

   <!-- 9 Classification -->
   <xs:group name="classification">
      <xs:sequence>
         <xs:element name="classification" type="classification">
            <xs:unique name="classificationUnique">
               <xs:selector xpath="*"/>
               <xs:field xpath="@uniqueElementName"/>
            </xs:unique>
         </xs:element>
      </xs:sequence>
   </xs:group>

   <!-- 9.1 Purpose -->
   <xs:group name="purpose">
      <xs:sequence>
         <xs:element name="purpose" type="purpose">
            <xs:unique name="purposeUnique">
               <xs:selector xpath="*"/>
               <xs:field xpath="@uniqueElementName"/>
            </xs:unique>
         </xs:element>
      </xs:sequence>
   </xs:group>

   <!-- 9.2 Taxon Path -->
   <xs:group name="taxonPath">
      <xs:sequence>
         <xs:element name="taxonPath" type="taxonPath">
            <xs:unique name="taxonPathUnique">
               <xs:selector xpath="*"/>
               <xs:field xpath="@uniqueElementName"/>
            </xs:unique>
         </xs:element>
      </xs:sequence>
   </xs:group>

   <!-- 9.2.1 Source -->
   <xs:group name="source">
      <xs:sequence>
         <xs:element name="source" type="source"/>
      </xs:sequence>
   </xs:group>

   <!-- 9.2.2 Taxon -->
   <xs:group name="taxon">
      <xs:sequence>
         <xs:element name="taxon" type="taxon">
            <xs:unique name="taxonUnique">
               <xs:selector xpath="*"/>
               <xs:field xpath="@uniqueElementName"/>
            </xs:unique>
         </xs:element>
      </xs:sequence>
   </xs:group>

   <!-- 9.2.2.1 Id -->
   <xs:group name="id">
      <xs:sequence>
         <xs:element name="id" type="id"/>
      </xs:sequence>
   </xs:group>

   <!-- 9.2.2.2 Entry -->
   <xs:group name="entryTaxon">
      <xs:sequence>
         <xs:element name="entry" type="entryTaxon"/>
      </xs:sequence>
   </xs:group>

   <!-- 9.3 Description
   <xs:group name="description">
      <xs:sequence>
         <xs:element name="description" type="description"/>
      </xs:sequence>
   </xs:group> -->

   <!-- 9.4 Keyword
   <xs:group name="keyword">
      <xs:sequence>
         <xs:element name="keyword" type="keyword"/>
      </xs:sequence>
   </xs:group> -->

  <!-- Element type declarations -->

  <!-- Learning Object Metadata -->
  <xs:complexType name="lom">
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:group ref="general"/>
      <xs:group ref="lifeCycle"/>
      <xs:group ref="metaMetadata"/>
      <xs:group ref="technical"/>
      <xs:group ref="educational"/>
      <xs:group ref="rights"/>
      <xs:group ref="relation"/>
      <xs:group ref="annotation"/>
      <xs:group ref="classification"/>
      <xs:group ref="extend:customElements"/>
    </xs:choice>
    <xs:attributeGroup ref="unique:lom"/>
  </xs:complexType>

  <!-- 1 General -->
  <xs:complexType name="general">
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:group ref="identifier"/>
      <xs:group ref="title"/>
      <xs:group ref="languageIdOrNone"/>
      <xs:group ref="descriptionUnbounded"/>
      <xs:group ref="keyword"/>
      <xs:group ref="coverage"/>
      <xs:group ref="structure"/>
      <xs:group ref="aggregationLevel"/>
      <xs:group ref="extend:customElements"/>
    </xs:choice>
    <xs:attributeGroup ref="unique:general"/>
  </xs:complexType>

  <!-- 1.1 Identifier -->
  <xs:complexType name="identifier">
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:group ref="catalog"/>
      <xs:group ref="entry"/>
      <xs:group ref="extend:customElements"/>
    </xs:choice>
    <xs:attributeGroup ref="unique:identifier"/>
  </xs:complexType>

  <!-- 1.1.1 Catalog -->
  <xs:complexType name="catalog">
    <xs:simpleContent>
      <xs:extension base="CharacterString">
        <xs:attributeGroup ref="unique:catalog"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <!-- 1.1.2 Entry -->
  <xs:complexType name="entry">
    <xs:simpleContent>
      <xs:extension base="CharacterString">
        <xs:attributeGroup ref="unique:entry"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <!-- 1.2 Title -->
  <xs:complexType name="title">
    <xs:complexContent>
      <xs:extension base="LangString">
        <xs:attributeGroup ref="unique:title"/>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <!-- 1.3 Language
  <xs:complexType name="language">
    <xs:simpleContent>
      <xs:extension base="LanguageIdOrNone">
        <xs:attributeGroup ref="unique:language"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType> -->

  <!-- 1.4 Description
  <xs:complexType name="description">
    <xs:complexContent>
      <xs:extension base="LangString">
        <xs:attributeGroup ref="unique:description"/>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType> -->

  <!-- 1.5 Keyword -->
  <xs:complexType name="keyword">
    <xs:complexContent>
      <xs:extension base="LangString">
        <xs:attributeGroup ref="unique:keyword"/>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <!-- 1.6 Coverage -->
  <xs:complexType name="coverage">
    <xs:complexContent>
      <xs:extension base="LangString">
        <xs:attributeGroup ref="unique:coverage"/>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <!-- 1.7 Structure -->
  <xs:complexType name="structure">
    <xs:complexContent>
      <xs:extension base="structureVocab">
        <xs:attributeGroup ref="unique:structure"/>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <!-- 1.8 Aggregation Level -->
  <xs:complexType name="aggregationLevel">
    <xs:complexContent>
      <xs:extension base="aggregationLevelVocab">
        <xs:attributeGroup ref="unique:aggregationLevel"/>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <!-- 2 Life Cycle -->
  <xs:complexType name="lifeCycle">
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:group ref="version"/>
      <xs:group ref="status"/>
      <xs:group ref="contribute"/>
      <xs:group ref="extend:customElements"/>
    </xs:choice>
    <xs:attributeGroup ref="unique:lifeCycle"/>
  </xs:complexType>

  <!-- 2.1 Version -->
  <xs:complexType name="version">
    <xs:complexContent>
      <xs:extension base="LangString">
        <xs:attributeGroup ref="unique:version"/>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <!-- 2.2 Status -->
  <xs:complexType name="status">
    <xs:complexContent>
      <xs:extension base="statusVocab">
        <xs:attributeGroup ref="unique:status"/>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <!-- 2.3 Contribute -->
  <xs:complexType name="contribute">
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:group ref="role"/>
      <xs:group ref="entityUnbounded"/>
      <xs:group ref="date"/>
      <xs:group ref="extend:customElements"/>
    </xs:choice>
    <xs:attributeGroup ref="unique:contribute"/>
  </xs:complexType>

  <!-- 2.3.1 Role -->
  <xs:complexType name="role">
    <xs:complexContent>
      <xs:extension base="roleVocab">
        <xs:attributeGroup ref="unique:role"/>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <!-- 2.3.2 Entity
  <xs:complexType name="entity">
    <xs:simpleContent>
      <xs:extension base="VCard">
        <xs:attributeGroup ref="unique:entity"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType> -->

  <!-- 2.3.3 Date -->
  <xs:complexType name="date">
    <xs:complexContent>
      <xs:extension base="DateTime">
        <xs:attributeGroup ref="unique:date"/>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <!-- 3 Meta-Metadata -->
  <xs:complexType name="metaMetadata">
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:group ref="identifier"/>
      <xs:group ref="contributeMeta"/>
      <xs:group ref="metadataSchema"/>
      <xs:group ref="language"/>
      <xs:group ref="extend:customElements"/>
    </xs:choice>
    <xs:attributeGroup ref="unique:metaMetadata"/>
  </xs:complexType>

  <!-- 3.1 Identifier
  <xs:complexType name="identifier">
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:group ref="catalog"/>
      <xs:group ref="entry"/>
      <xs:group ref="extend:customElements"/>
    </xs:choice>
    <xs:attributeGroup ref="unique:identifier"/>
  </xs:complexType> -->

  <!-- 3.1.1 Catalog
  <xs:complexType name="catalog">
    <xs:simpleContent>
      <xs:extension base="CharacterString">
        <xs:attributeGroup ref="unique:catalog"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType> -->

  <!-- 3.1.2 Entry
  <xs:complexType name="entry">
    <xs:simpleContent>
      <xs:extension base="CharacterString">
        <xs:attributeGroup ref="unique:entry"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType> -->

  <!-- 3.2 Contribute -->
  <xs:complexType name="contributeMeta">
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:group ref="roleMeta"/>
      <xs:group ref="entityUnbounded"/>
      <xs:group ref="date"/>
      <xs:group ref="extend:customElements"/>
    </xs:choice>
    <xs:attributeGroup ref="unique:contribute"/>
  </xs:complexType>

  <!-- 3.2.1 Role -->
  <xs:complexType name="roleMeta">
    <xs:complexContent>
      <xs:extension base="roleMetaVocab">
        <xs:attributeGroup ref="unique:role"/>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <!-- 3.2.2 Entity
  <xs:complexType name="entity">
    <xs:simpleContent>
      <xs:extension base="VCard">
        <xs:attributeGroup ref="unique:entity"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType> -->

  <!-- 3.2.3 Date
  <xs:complexType name="date">
    <xs:complexContent>
      <xs:extension base="DateTime">
        <xs:attributeGroup ref="unique:date"/>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType> -->

  <!-- 3.3 Metadata Schema -->
  <xs:complexType name="metadataSchema">
    <xs:simpleContent>
      <xs:extension base="CharacterString">
        <xs:attributeGroup ref="unique:metadataSchema"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <!-- 3.4 Language -->
  <xs:complexType name="language">
    <xs:simpleContent>
      <xs:extension base="LanguageId">
        <xs:attributeGroup ref="unique:language"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <!-- 4 Technical -->
  <xs:complexType name="technical">
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:group ref="format"/>
      <xs:group ref="size"/>
      <xs:group ref="location"/>
      <xs:group ref="requirement"/>
      <xs:group ref="installationRemarks"/>
      <xs:group ref="otherPlatformRequirements"/>
      <xs:group ref="duration"/>
      <xs:group ref="extend:customElements"/>
    </xs:choice>
    <xs:attributeGroup ref="unique:technical"/>
  </xs:complexType>

  <!-- 4.1 Format -->
  <xs:complexType name="format">
    <xs:simpleContent>
      <xs:extension base="MimeType">
        <xs:attributeGroup ref="unique:format"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <!-- 4.2 Size -->
  <xs:complexType name="size">
    <xs:simpleContent>
      <xs:extension base="Size">
        <xs:attributeGroup ref="unique:size"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <!-- 4.3 Location -->
  <xs:complexType name="location">
    <xs:simpleContent>
      <xs:extension base="CharacterString">
        <xs:attributeGroup ref="unique:location"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <!-- 4.4 Requirement -->
  <xs:complexType name="requirement">
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:group ref="orComposite"/>
      <xs:group ref="extend:customElements"/>
    </xs:choice>
    <xs:attributeGroup ref="unique:requirement"/>
  </xs:complexType>

  <!-- 4.4.1 OrComposite -->
  <xs:complexType name="orComposite">
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:group ref="type"/>
      <xs:group ref="name"/>
      <xs:group ref="minimumVersion"/>
      <xs:group ref="maximumVersion"/>
      <xs:group ref="extend:customElements"/>
    </xs:choice>
    <xs:attributeGroup ref="unique:orComposite"/>
  </xs:complexType>

  <!-- 4.4.1.1 Type -->
  <xs:complexType name="type">
    <xs:complexContent>
      <xs:extension base="typeVocab">
        <xs:attributeGroup ref="unique:type"/>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <!-- 4.4.1.2 Name -->
  <xs:complexType name="name">
    <xs:complexContent>
      <xs:extension base="nameVocab">
        <xs:attributeGroup ref="unique:name"/>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <!-- 4.4.1.3 Minimum Version -->
  <xs:complexType name="minimumVersion">
    <xs:simpleContent>
      <xs:extension base="CharacterString">
        <xs:attributeGroup ref="unique:minimumVersion"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <!-- 4.4.1.4 Maximum Version -->
  <xs:complexType name="maximumVersion">
    <xs:simpleContent>
      <xs:extension base="CharacterString">
        <xs:attributeGroup ref="unique:maximumVersion"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <!-- 4.5 Installation Remarks -->
  <xs:complexType name="installationRemarks">
    <xs:complexContent>
      <xs:extension base="LangString">
        <xs:attributeGroup ref="unique:installationRemarks"/>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <!-- 4.6 Other Platform Requirements -->
  <xs:complexType name="otherPlatformRequirements">
    <xs:complexContent>
      <xs:extension base="LangString">
        <xs:attributeGroup ref="unique:otherPlatformRequirements"/>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <!-- 4.7 Duration -->
  <xs:complexType name="duration">
    <xs:complexContent>
      <xs:extension base="Duration">
        <xs:attributeGroup ref="unique:duration"/>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <!-- 5 Educational -->
  <xs:complexType name="educational">
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:group ref="interactivityType"/>
      <xs:group ref="learningResourceType"/>
      <xs:group ref="interactivityLevel"/>
      <xs:group ref="semanticDensity"/>
      <xs:group ref="intendedEndUserRole"/>
      <xs:group ref="context"/>
      <xs:group ref="typicalAgeRange"/>
      <xs:group ref="difficulty"/>
      <xs:group ref="typicalLearningTime"/>
      <xs:group ref="descriptionUnbounded"/>
      <xs:group ref="languageId"/>
      <xs:group ref="extend:customElements"/>
    </xs:choice>
    <xs:attributeGroup ref="unique:educational"/>
  </xs:complexType>

  <!-- 5.1 Interactivity Type -->
  <xs:complexType name="interactivityType">
    <xs:complexContent>
      <xs:extension base="interactivityTypeVocab">
        <xs:attributeGroup ref="unique:interactivityType"/>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <!-- 5.2 Learning Resource Type -->
  <xs:complexType name="learningResourceType">
    <xs:complexContent>
      <xs:extension base="learningResourceTypeVocab">
        <xs:attributeGroup ref="unique:learningResourceType"/>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <!-- 5.3 Interactivity Level -->
  <xs:complexType name="interactivityLevel">
    <xs:complexContent>
      <xs:extension base="interactivityLevelVocab">
        <xs:attributeGroup ref="unique:interactivityLevel"/>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <!-- 5.4 Semantic Density -->
  <xs:complexType name="semanticDensity">
    <xs:complexContent>
      <xs:extension base="semanticDensityVocab">
        <xs:attributeGroup ref="unique:semanticDensity"/>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <!-- 5.5 Intended End User Role -->
  <xs:complexType name="intendedEndUserRole">
    <xs:complexContent>
      <xs:extension base="intendedEndUserRoleVocab">
        <xs:attributeGroup ref="unique:intendedEndUserRole"/>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <!-- 5.6 Context -->
  <xs:complexType name="context">
    <xs:complexContent>
      <xs:extension base="contextVocab">
        <xs:attributeGroup ref="unique:context"/>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <!-- 5.7 Typical Age Range -->
  <xs:complexType name="typicalAgeRange">
    <xs:complexContent>
      <xs:extension base="LangString">
        <xs:attributeGroup ref="unique:typicalAgeRange"/>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <!-- 5.8 Difficulty -->
  <xs:complexType name="difficulty">
    <xs:complexContent>
      <xs:extension base="difficultyVocab">
        <xs:attributeGroup ref="unique:difficulty"/>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <!-- 5.9 Typical Learning Time -->
  <xs:complexType name="typicalLearningTime">
    <xs:complexContent>
      <xs:extension base="Duration">
        <xs:attributeGroup ref="unique:typicalLearningTime"/>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <!-- 5.10 Description
  <xs:complexType name="description">
    <xs:complexContent>
      <xs:extension base="LangString">
        <xs:attributeGroup ref="unique:description"/>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType> -->

  <!-- 5.11 Language
  <xs:complexType name="language">
    <xs:simpleContent>
      <xs:extension base="LanguageId">
        <xs:attributeGroup ref="unique:language"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType> -->

  <!-- 6 Rights -->
  <xs:complexType name="rights">
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:group ref="cost"/>
      <xs:group ref="copyrightAndOtherRestrictions"/>
      <xs:group ref="description"/>
      <xs:group ref="extend:customElements"/>
    </xs:choice>
    <xs:attributeGroup ref="unique:rights"/>
  </xs:complexType>

  <!-- 6.1 Cost -->
  <xs:complexType name="cost">
    <xs:complexContent>
      <xs:extension base="costVocab">
        <xs:attributeGroup ref="unique:cost"/>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <!-- 6.2 Copyright and Other Restrictions -->
  <xs:complexType name="copyrightAndOtherRestrictions">
    <xs:complexContent>
      <xs:extension base="copyrightAndOtherRestrictionsVocab">
        <xs:attributeGroup ref="unique:copyrightAndOtherRestrictions"/>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <!-- 6.3 Description -->
  <xs:complexType name="description">
    <xs:complexContent>
      <xs:extension base="LangString">
        <xs:attributeGroup ref="unique:description"/>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <!-- 7 Relation -->
  <xs:complexType name="relation">
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:group ref="kind"/>
      <xs:group ref="resource"/>
      <xs:group ref="extend:customElements"/>
    </xs:choice>
    <xs:attributeGroup ref="unique:relation"/>
  </xs:complexType>

  <!-- 7.1 Kind -->
  <xs:complexType name="kind">
    <xs:complexContent>
      <xs:extension base="kindVocab">
        <xs:attributeGroup ref="unique:kind"/>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <!-- 7.2 Resource -->
  <xs:complexType name="resource">
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:group ref="identifier"/>
      <xs:group ref="description"/>
      <xs:group ref="extend:customElements"/>
    </xs:choice>
    <xs:attributeGroup ref="unique:resource"/>
  </xs:complexType>

  <!-- 7.2.1 Identifier
  <xs:complexType name="identifier">
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:group ref="catalog"/>
      <xs:group ref="entry"/>
      <xs:group ref="extend:customElements"/>
    </xs:choice>
    <xs:attributeGroup ref="unique:identifier"/>
  </xs:complexType> -->

  <!-- 7.2.1.1 Catalog
  <xs:complexType name="catalog">
    <xs:simpleContent>
      <xs:extension base="CharacterString">
        <xs:attributeGroup ref="unique:catalog"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType> -->

  <!-- 7.2.1.2 Entry
  <xs:complexType name="entry">
    <xs:simpleContent>
      <xs:extension base="CharacterString">
        <xs:attributeGroup ref="unique:entry"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType> -->

  <!-- 7.2.2 Description
  <xs:complexType name="description">
    <xs:complexContent>
      <xs:extension base="LangString">
        <xs:attributeGroup ref="unique:description"/>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType> -->

  <!-- 8 Annotation -->
  <xs:complexType name="annotation">
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:group ref="entity"/>
      <xs:group ref="date"/>
      <xs:group ref="description"/>
      <xs:group ref="extend:customElements"/>
    </xs:choice>
    <xs:attributeGroup ref="unique:annotation"/>
  </xs:complexType>

  <!-- 8.1 Entity -->
  <xs:complexType name="entity">
    <xs:simpleContent>
      <xs:extension base="VCard">
        <xs:attributeGroup ref="unique:entity"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <!-- 8.2 Date
  <xs:complexType name="date">
    <xs:complexContent>
      <xs:extension base="DateTime">
        <xs:attributeGroup ref="unique:date"/>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType> -->

  <!-- 8.3 Description
  <xs:complexType name="description">
    <xs:complexContent>
      <xs:extension base="LangString">
        <xs:attributeGroup ref="unique:description"/>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType> -->

  <!-- 9 Classification -->
  <xs:complexType name="classification">
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:group ref="purpose"/>
      <xs:group ref="taxonPath"/>
      <xs:group ref="description"/>
      <xs:group ref="keyword"/>
      <xs:group ref="extend:customElements"/>
    </xs:choice>
    <xs:attributeGroup ref="unique:classification"/>
  </xs:complexType>

  <!-- 9.1 Purpose -->
  <xs:complexType name="purpose">
    <xs:complexContent>
      <xs:extension base="purposeVocab">
        <xs:attributeGroup ref="unique:purpose"/>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <!-- 9.2 Taxon Path -->
  <xs:complexType name="taxonPath">
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:group ref="source"/>
      <xs:group ref="taxon"/>
      <xs:group ref="extend:customElements"/>
    </xs:choice>
    <xs:attributeGroup ref="unique:taxonPath"/>
  </xs:complexType>

  <!-- 9.2.1 Source -->
  <xs:complexType name="source">
    <xs:complexContent>
      <xs:extension base="LangString">
        <xs:attributeGroup ref="unique:source"/>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <!-- 9.2.2 Taxon -->
  <xs:complexType name="taxon">
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:group ref="id"/>
      <xs:group ref="entryTaxon"/>
      <xs:group ref="extend:customElements"/>
    </xs:choice>
    <xs:attributeGroup ref="unique:taxon"/>
  </xs:complexType>

  <!-- 9.2.2.1 Id -->
  <xs:complexType name="id">
    <xs:simpleContent>
      <xs:extension base="CharacterString">
        <xs:attributeGroup ref="unique:id"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <!-- 9.2.2.2 Entry -->
  <xs:complexType name="entryTaxon">
    <xs:complexContent>
      <xs:extension base="LangString">
        <xs:attributeGroup ref="unique:entry"/>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <!-- 9.3 Description
  <xs:complexType name="description">
    <xs:complexContent>
      <xs:extension base="LangString">
        <xs:attributeGroup ref="unique:description"/>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType> -->

  <!-- 9.4 Keyword
  <xs:complexType name="keyword">
    <xs:complexContent>
      <xs:extension base="LangString">
        <xs:attributeGroup ref="unique:keyword"/>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType> -->

   <!-- Vocabulary type declarations -->

   <!-- Source -->
   <xs:complexType name="sourceValue">
      <xs:simpleContent>
         <xs:extension base="vocab:source">
            <xs:attributeGroup ref="unique:source"/>
         </xs:extension>
      </xs:simpleContent>
   </xs:complexType>

   <!-- 1.7 Structure -->
   <xs:complexType name="structureVocab">
      <xs:choice minOccurs="0" maxOccurs="unbounded">
         <xs:element name="source" type="sourceValue"/>
         <xs:element name="value" type="structureValue"/>
         <xs:group ref="extend:customElements"/>
      </xs:choice>
   </xs:complexType>
  
   <xs:complexType name="structureValue">
      <xs:simpleContent>
         <xs:extension base="vocab:structure">
            <xs:attributeGroup ref="unique:value"/>
         </xs:extension>
      </xs:simpleContent>
   </xs:complexType>

   <!-- 1.8 Aggregation Level -->
   <xs:complexType name="aggregationLevelVocab">
      <xs:choice minOccurs="0" maxOccurs="unbounded">
         <xs:element name="source" type="sourceValue"/>
         <xs:element name="value" type="aggregationLevelValue"/>
         <xs:group ref="extend:customElements"/>
      </xs:choice>
   </xs:complexType>
  
   <xs:complexType name="aggregationLevelValue">
      <xs:simpleContent>
         <xs:extension base="vocab:aggregationLevel">
            <xs:attributeGroup ref="unique:value"/>
         </xs:extension>
      </xs:simpleContent>
   </xs:complexType>

   <!-- 2.2 Status -->
   <xs:complexType name="statusVocab">
      <xs:choice minOccurs="0" maxOccurs="unbounded">
         <xs:element name="source" type="sourceValue"/>
         <xs:element name="value" type="statusValue"/>
         <xs:group ref="extend:customElements"/>
      </xs:choice>
   </xs:complexType>

   <xs:complexType name="statusValue">
      <xs:simpleContent>
         <xs:extension base="vocab:status">
            <xs:attributeGroup ref="unique:value"/>
         </xs:extension>
      </xs:simpleContent>
   </xs:complexType>

   <!-- 2.3.1 Role -->
   <xs:complexType name="roleVocab">
      <xs:choice minOccurs="0" maxOccurs="unbounded">
         <xs:element name="source" type="sourceValue"/>
         <xs:element name="value" type="roleValue"/>
         <xs:group ref="extend:customElements"/>
      </xs:choice>
   </xs:complexType>

   <xs:complexType name="roleValue">
      <xs:simpleContent>
         <xs:extension base="vocab:role">
            <xs:attributeGroup ref="unique:value"/>
         </xs:extension>
      </xs:simpleContent>
   </xs:complexType>

   <!-- 3.2.1 Role -->
   <xs:complexType name="roleMetaVocab">
      <xs:choice minOccurs="0" maxOccurs="unbounded">
         <xs:element name="source" type="sourceValue"/>
         <xs:element name="value" type="roleMetaValue"/>
         <xs:group ref="extend:customElements"/>
      </xs:choice>
   </xs:complexType>
 
   <xs:complexType name="roleMetaValue">
      <xs:simpleContent>
         <xs:extension base="vocab:roleMeta">
            <xs:attributeGroup ref="unique:value"/>
         </xs:extension>
      </xs:simpleContent>
   </xs:complexType>

   <!-- 4.4.1.1 Type -->
   <xs:complexType name="typeVocab">
      <xs:choice minOccurs="0" maxOccurs="unbounded">
         <xs:element name="source" type="sourceValue"/>
         <xs:element name="value" type="typeValue"/>
         <xs:group ref="extend:customElements"/>
      </xs:choice>
   </xs:complexType>

   <xs:complexType name="typeValue">
      <xs:simpleContent>
         <xs:extension base="vocab:type">
            <xs:attributeGroup ref="unique:value"/>
         </xs:extension>
      </xs:simpleContent>
   </xs:complexType>

   <!-- 4.4.1.2 Name -->
   <xs:complexType name="nameVocab">
      <xs:choice minOccurs="0" maxOccurs="unbounded">
         <xs:element name="source" type="sourceValue"/>
         <xs:element name="value" type="nameValue"/>
         <xs:group ref="extend:customElements"/>
      </xs:choice>
   </xs:complexType>

   <xs:complexType name="nameValue">
      <xs:simpleContent>
         <xs:extension base="vocab:name">
            <xs:attributeGroup ref="unique:value"/>
         </xs:extension>
      </xs:simpleContent>
   </xs:complexType>

   <!-- 5.1 Interactivity Type -->
   <xs:complexType name="interactivityTypeVocab">
      <xs:choice minOccurs="0" maxOccurs="unbounded">
         <xs:element name="source" type="sourceValue"/>
         <xs:element name="value" type="interactivityTypeValue"/>
         <xs:group ref="extend:customElements"/>
      </xs:choice>
   </xs:complexType>

   <xs:complexType name="interactivityTypeValue">
      <xs:simpleContent>
         <xs:extension base="vocab:interactivityType">
            <xs:attributeGroup ref="unique:value"/>
         </xs:extension>
      </xs:simpleContent>
   </xs:complexType>

   <!-- 5.2 Learning Resource Type -->
   <xs:complexType name="learningResourceTypeVocab">
      <xs:choice minOccurs="0" maxOccurs="unbounded">
         <xs:element name="source" type="sourceValue"/>
         <xs:element name="value" type="learningResourceTypeValue"/>
         <xs:group ref="extend:customElements"/>
      </xs:choice>
   </xs:complexType>

   <xs:complexType name="learningResourceTypeValue">
      <xs:simpleContent>
         <xs:extension base="vocab:learningResourceType">
            <xs:attributeGroup ref="unique:value"/>
         </xs:extension>
      </xs:simpleContent>
   </xs:complexType>

   <!-- 5.3 Interactivity Level -->
   <xs:complexType name="interactivityLevelVocab">
      <xs:choice minOccurs="0" maxOccurs="unbounded">
         <xs:element name="source" type="sourceValue"/>
         <xs:element name="value" type="interactivityLevelValue"/>
         <xs:group ref="extend:customElements"/>
      </xs:choice>
   </xs:complexType>

   <xs:complexType name="interactivityLevelValue">
      <xs:simpleContent>
         <xs:extension base="vocab:interactivityLevel">
            <xs:attributeGroup ref="unique:value"/>
         </xs:extension>
      </xs:simpleContent>
   </xs:complexType>

   <!-- 5.4 Semantic Density -->
   <xs:complexType name="semanticDensityVocab">
      <xs:choice minOccurs="0" maxOccurs="unbounded">
         <xs:element name="source" type="sourceValue"/>
         <xs:element name="value" type="semanticDensityValue"/>
         <xs:group ref="extend:customElements"/>
      </xs:choice>
   </xs:complexType>

   <xs:complexType name="semanticDensityValue">
      <xs:simpleContent>
         <xs:extension base="vocab:semanticDensity">
            <xs:attributeGroup ref="unique:value"/>
         </xs:extension>
      </xs:simpleContent>
   </xs:complexType>

   <!-- 5.5 Intended End User Role -->
   <xs:complexType name="intendedEndUserRoleVocab">
      <xs:choice minOccurs="0" maxOccurs="unbounded">
         <xs:element name="source" type="sourceValue"/>
         <xs:element name="value" type="intendedEndUserRoleValue"/>
         <xs:group ref="extend:customElements"/>
      </xs:choice>
   </xs:complexType>

   <xs:complexType name="intendedEndUserRoleValue">
      <xs:simpleContent>
         <xs:extension base="vocab:intendedEndUserRole">
            <xs:attributeGroup ref="unique:value"/>
         </xs:extension>
      </xs:simpleContent>
   </xs:complexType>

   <!-- 5.6 Context -->
   <xs:complexType name="contextVocab">
      <xs:choice minOccurs="0" maxOccurs="unbounded">
         <xs:element name="source" type="sourceValue"/>
         <xs:element name="value" type="contextValue"/>
         <xs:group ref="extend:customElements"/>
      </xs:choice>
   </xs:complexType>

   <xs:complexType name="contextValue">
      <xs:simpleContent>
         <xs:extension base="vocab:context">
            <xs:attributeGroup ref="unique:value"/>
         </xs:extension>
      </xs:simpleContent>
   </xs:complexType>

   <!-- 5.8 Difficulty -->
   <xs:complexType name="difficultyVocab">
      <xs:choice minOccurs="0" maxOccurs="unbounded">
         <xs:element name="source" type="sourceValue"/>
         <xs:element name="value" type="difficultyValue"/>
         <xs:group ref="extend:customElements"/>
      </xs:choice>
   </xs:complexType>

   <xs:complexType name="difficultyValue">
      <xs:simpleContent>
         <xs:extension base="vocab:difficulty">
            <xs:attributeGroup ref="unique:value"/>
         </xs:extension>
      </xs:simpleContent>
   </xs:complexType>

   <!-- 6.1 Cost -->
   <xs:complexType name="costVocab">
      <xs:choice minOccurs="0" maxOccurs="unbounded">
         <xs:element name="source" type="sourceValue"/>
         <xs:element name="value" type="costValue"/>
         <xs:group ref="extend:customElements"/>
      </xs:choice>
   </xs:complexType>

   <xs:complexType name="costValue">
      <xs:simpleContent>
         <xs:extension base="vocab:cost">
            <xs:attributeGroup ref="unique:value"/>
         </xs:extension>
      </xs:simpleContent>
   </xs:complexType>

   <!-- 6.2 Copyright and Other Restrictions -->
   <xs:complexType name="copyrightAndOtherRestrictionsVocab">
      <xs:choice minOccurs="0" maxOccurs="unbounded">
         <xs:element name="source" type="sourceValue"/>
         <xs:element name="value" type="copyrightAndOtherRestrictionsValue"/>
         <xs:group ref="extend:customElements"/>
      </xs:choice>
   </xs:complexType>

   <xs:complexType name="copyrightAndOtherRestrictionsValue">
      <xs:simpleContent>
         <xs:extension base="vocab:copyrightAndOtherRestrictions">
            <xs:attributeGroup ref="unique:value"/>
         </xs:extension>
      </xs:simpleContent>
   </xs:complexType>

   <!-- 7.1 Kind -->
   <xs:complexType name="kindVocab">
      <xs:choice minOccurs="0" maxOccurs="unbounded">
         <xs:element name="source" type="sourceValue"/>
         <xs:element name="value" type="kindValue"/>
         <xs:group ref="extend:customElements"/>
      </xs:choice>
   </xs:complexType>

   <xs:complexType name="kindValue">
      <xs:simpleContent>
         <xs:extension base="vocab:kind">
            <xs:attributeGroup ref="unique:value"/>
         </xs:extension>
      </xs:simpleContent>
   </xs:complexType>

   <!-- 9.1 Purpose -->
   <xs:complexType name="purposeVocab">
      <xs:choice minOccurs="0" maxOccurs="unbounded">
         <xs:element name="source" type="sourceValue"/>
         <xs:element name="value" type="purposeValue"/>
         <xs:group ref="extend:customElements"/>
      </xs:choice>
   </xs:complexType>

   <xs:complexType name="purposeValue">
      <xs:simpleContent>
         <xs:extension base="vocab:purpose">
            <xs:attributeGroup ref="unique:value"/>
         </xs:extension>
      </xs:simpleContent>
   </xs:complexType>

   <!-- LOM V1.0 Base Schema vocabulary source and value declarations -->

   <!-- Source -->
   <xs:simpleType name="sourceValues">
      <xs:restriction base="xs:token">
         <xs:enumeration value="LOMv1.0"/>
      </xs:restriction>
   </xs:simpleType>

   <!-- 1.7 Structure -->
   <xs:simpleType name="structureValues">
      <xs:restriction base="xs:token">
         <xs:enumeration value="atomic"/>
         <xs:enumeration value="collection"/>
         <xs:enumeration value="networked"/>
         <xs:enumeration value="hierarchical"/>
         <xs:enumeration value="linear"/>
      </xs:restriction>
   </xs:simpleType>

   <!-- 1.8 Aggregation Level -->
   <xs:simpleType name="aggregationLevelValues">
      <xs:restriction base="xs:token">
         <xs:enumeration value="1"/>
         <xs:enumeration value="2"/>
         <xs:enumeration value="3"/>
         <xs:enumeration value="4"/>
      </xs:restriction>
   </xs:simpleType>

   <!-- 2.2 Status -->
   <xs:simpleType name="statusValues">
      <xs:restriction base="xs:token">
         <xs:enumeration value="draft"/>
         <xs:enumeration value="final"/>
         <xs:enumeration value="revised"/>
         <xs:enumeration value="unavailable"/>
      </xs:restriction>
   </xs:simpleType>

   <!-- 2.3.1 Role -->
   <xs:simpleType name="roleValues">
      <xs:restriction base="xs:token">
         <xs:enumeration value="author"/>
         <xs:enumeration value="publisher"/>
         <xs:enumeration value="unknown"/>
         <xs:enumeration value="initiator"/>
         <xs:enumeration value="terminator"/>
         <xs:enumeration value="validator"/>
         <xs:enumeration value="editor"/>
         <xs:enumeration value="graphical designer"/>
         <xs:enumeration value="technical implementer"/>
         <xs:enumeration value="content provider"/>
         <xs:enumeration value="technical validator"/>
         <xs:enumeration value="educational validator"/>
         <xs:enumeration value="script writer"/>
         <xs:enumeration value="instructional designer"/>
         <xs:enumeration value="subject matter expert"/>
      </xs:restriction>
   </xs:simpleType>

   <!-- 3.2.1 Role -->
   <xs:simpleType name="roleMetaValues">
      <xs:restriction base="xs:token">
         <xs:enumeration value="creator"/>
         <xs:enumeration value="validator"/>
      </xs:restriction>
   </xs:simpleType>

   <!-- 4.4.1.1 Type -->
   <xs:simpleType name="typeValues">
      <xs:restriction base="xs:token">
         <xs:enumeration value="operating system"/>
         <xs:enumeration value="browser"/>
      </xs:restriction>
   </xs:simpleType>

   <!-- 4.4.1.2 Name -->
   <xs:simpleType name="nameValues">
      <xs:restriction base="xs:token">
         <xs:enumeration value="pc-dos"/>
         <xs:enumeration value="ms-windows"/>
         <xs:enumeration value="macos"/>
         <xs:enumeration value="unix"/>
         <xs:enumeration value="multi-os"/>
         <xs:enumeration value="none"/>
         <xs:enumeration value="any"/>
         <xs:enumeration value="netscape communicator"/>
         <xs:enumeration value="ms-internet explorer"/>
         <xs:enumeration value="opera"/>
         <xs:enumeration value="amaya"/>
      </xs:restriction>
   </xs:simpleType>

   <!-- 5.1 Interactivity Type -->
   <xs:simpleType name="interactivityTypeValues">
      <xs:restriction base="xs:token">
         <xs:enumeration value="active"/>
         <xs:enumeration value="expositive"/>
         <xs:enumeration value="mixed"/>
      </xs:restriction>
   </xs:simpleType>

   <!-- 5.2 Learning Resource Type -->
   <xs:simpleType name="learningResourceTypeValues">
      <xs:restriction base="xs:token">
         <xs:enumeration value="exercise"/>
         <xs:enumeration value="simulation"/>
         <xs:enumeration value="questionnaire"/>
         <xs:enumeration value="diagram"/>
         <xs:enumeration value="figure"/>
         <xs:enumeration value="graph"/>
         <xs:enumeration value="index"/>
         <xs:enumeration value="slide"/>
         <xs:enumeration value="table"/>
         <xs:enumeration value="narrative text"/>
         <xs:enumeration value="exam"/>
         <xs:enumeration value="experiment"/>
         <xs:enumeration value="problem statement"/>
         <xs:enumeration value="self assessment"/>
         <xs:enumeration value="lecture"/>
      </xs:restriction>
   </xs:simpleType>

   <!-- 5.3 Interactivity Level -->
   <xs:simpleType name="interactivityLevelValues">
      <xs:restriction base="xs:token">
         <xs:enumeration value="very low"/>
         <xs:enumeration value="low"/>
         <xs:enumeration value="medium"/>
         <xs:enumeration value="high"/>
         <xs:enumeration value="very high"/>
      </xs:restriction>
   </xs:simpleType>

   <!-- 5.4 Semantic Density -->
   <xs:simpleType name="semanticDensityValues">
      <xs:restriction base="xs:token">
         <xs:enumeration value="very low"/>
         <xs:enumeration value="low"/>
         <xs:enumeration value="medium"/>
         <xs:enumeration value="high"/>
         <xs:enumeration value="very high"/>
      </xs:restriction>
   </xs:simpleType>

   <!-- 5.5 Intended End User Role -->
   <xs:simpleType name="intendedEndUserRoleValues">
      <xs:restriction base="xs:token">
         <xs:enumeration value="teacher"/>
         <xs:enumeration value="author"/>
         <xs:enumeration value="learner"/>
         <xs:enumeration value="manager"/>
      </xs:restriction>
   </xs:simpleType>

   <!-- 5.6 Context -->
   <xs:simpleType name="contextValues">
      <xs:restriction base="xs:token">
         <xs:enumeration value="school"/>
         <xs:enumeration value="higher education"/>
         <xs:enumeration value="training"/>
         <xs:enumeration value="other"/>
      </xs:restriction>
   </xs:simpleType>

   <!-- 5.8 Difficulty -->
   <xs:simpleType name="difficultyValues">
      <xs:restriction base="xs:token">
         <xs:enumeration value="very easy"/>
         <xs:enumeration value="easy"/>
         <xs:enumeration value="medium"/>
         <xs:enumeration value="difficult"/>
         <xs:enumeration value="very difficult"/>
      </xs:restriction>
   </xs:simpleType>

   <!-- 6.1 Cost -->
   <xs:simpleType name="costValues">
      <xs:restriction base="xs:token">
         <xs:enumeration value="yes"/>
         <xs:enumeration value="no"/>
      </xs:restriction>
   </xs:simpleType>

   <!-- 6.2 Copyright and Other Restrictions -->
   <xs:simpleType name="copyrightAndOtherRestrictionsValues">
      <xs:restriction base="xs:token">
         <xs:enumeration value="yes"/>
         <xs:enumeration value="no"/>
      </xs:restriction>
   </xs:simpleType>

   <!-- 7.1 Kind -->
   <xs:simpleType name="kindValues">
      <xs:restriction base="xs:token">
         <xs:enumeration value="ispartof"/>
         <xs:enumeration value="haspart"/>
         <xs:enumeration value="isversionof"/>
         <xs:enumeration value="hasversion"/>
         <xs:enumeration value="isformatof"/>
         <xs:enumeration value="hasformat"/>
         <xs:enumeration value="references"/>
         <xs:enumeration value="isreferencedby"/>
         <xs:enumeration value="isbasedon"/>
         <xs:enumeration value="isbasisfor"/>
         <xs:enumeration value="requires"/>
         <xs:enumeration value="isrequiredby"/>
      </xs:restriction>
   </xs:simpleType>

   <!-- 9.1 Purpose -->
   <xs:simpleType name="purposeValues">
      <xs:restriction base="xs:token">
         <xs:enumeration value="discipline"/>
         <xs:enumeration value="idea"/>
         <xs:enumeration value="prerequisite"/>
         <xs:enumeration value="educational objective"/>
         <xs:enumeration value="accessibility restrictions"/>
         <xs:enumeration value="educational level"/>
         <xs:enumeration value="skill level"/>
         <xs:enumeration value="security level"/>
         <xs:enumeration value="competency"/>
      </xs:restriction>
   </xs:simpleType>

</xs:schema>
