<?xml version="1.0"?>
<!--<!DOCTYPE xs:schema PUBLIC "-//W3C//DTD XMLSCHEMA 200102//EN" "XMLSchema.dtd">-->
<!-- 
	CHANGE HISTORY
	CTV-12/30/02
		Capitalized all attributes:
			source->SOURCE
			scheme->SCHEME
		Removed entitiyDesc/projects, info now contained in METS:note
	CTV-1/07/2003
		Added committeeCoChair to thesis	
	CTV-1/08/2003
		Created createAndContribGroup to be used by palmmCreator and
		palmmContributor
	CTV-3/18/2003
		added spatialLongitude to palmmSpatial
		added spatialLatitude to palmmSpatial
	CTV-3/19/2003
		added <xs:element name="display" type="displayType"/>
		defined displayType with 4 optional attributes X, Y, TYPE, FACE
	CTV-6/16/2003
		added "SW" to entityDesc/@type enumeration
		
 -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
		   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns="http://www.fcla.edu/dls/md/palmm/"
           targetNamespace="http://www.fcla.edu/dls/md/palmm/"
           elementFormDefault="qualified"
           attributeFormDefault="unqualified"
           xsi:schemaLocation="http://www.w3.org/2001/XMLSchema http://www.w3.org/2001/XMLSchema.xsd">

  	<xs:annotation>
    	<xs:documentation xml:lang="en">
			Schema defining metadata elements to be used for PALMM projects and 
			elements relating to electronic theses and dissertations.
			This schema has been designed as an extension schema to the METS
			format. Components defined and declared here may be used in a METS
			mdWrap/xmlData section. 
			Developer: Chris Vicary fclctv@cns.ufl.edu
			Creation Date: 12/4/2002
			Last Modification Date: 12/30/2002			
	    </xs:documentation>
  	</xs:annotation>

  	<!-- 
  	for the initial attempt at defining palmm elements, I have decided
  	to group related elements together under a container element that 
  	did not preoviously exist. For example, creatorRole and creatorDates 
  	are now subelements of the new element creator.
  	 -->	

	<xs:element name="entityDesc" type="entityDescType"/>
  	<xs:element name="pages" type="palmmElement"/>
  	<xs:element name="creator" type="palmmCreator"/>
	<xs:element name="contributor" type="palmmContributor"/>
	<xs:element name="hasFormat" type="palmmHasFormat"/>
	<xs:element name="isFormatOf" type="palmmIsFormatOf"/>
	<xs:element name="spatial" type="palmmSpatial"/>
	<xs:element name="dc.coverage.spatial" type="palmmElement"/>
	<xs:element name="scale" type="palmmElement"/>
	<xs:element name="location" type="palmmElement"/>
	<xs:element name="notes" type="palmmElement"/>
	<xs:element name="thesis" type="thesisType"/>
	<xs:element name="display" type="displayType"/>
	<xs:element name="dc.title.alternative" type="palmmElement"/>
	<xs:element name="dc.description.abstract" type="palmmElement"/>
	<xs:element name="dc.description.release" type="palmmElement"/>
	<xs:element name="dc.description.tableOfContents" type="palmmElement"/>
	<xs:element name="dc.contributor.role" type="palmmElement"/>
	<xs:element name="dc.date.created" type="palmmElement"/>
	<xs:element name="dc.date.issued" type="palmmElement"/>
	<xs:element name="dc.date.modified" type="palmmElement"/>
	<xs:element name="dc.format.extent" type="palmmElement"/>
	<xs:element name="dc.format.medium" type="palmmElement"/>
	<xs:element name="dc.relation.isPartOf" type="palmmElement"/>
	<xs:element name="dc.relation.hasPart" type="palmmElement"/>
	<xs:element name="dc.relation.isVersionOf" type="palmmElement"/>
	<xs:element name="dc.relation.hasVersion" type="palmmElement"/>
	<xs:element name="dc.relation.isFormatOf" type="palmmElement"/>
	<xs:element name="dc.relation.hasFormat" type="palmmElement"/>
	<xs:element name="dc.coverage.temporal" type="palmmElement"/>
	

	<!-- 
	the group structure is borrowed from dc.xsd although I'm not sure
	what the practical use is.
	-->
  	<xs:group name="elementsGroup">
  		<xs:sequence>
	    	<xs:choice minOccurs="0" maxOccurs="unbounded">
	      		<!-- 
	      		do these need to have maxOccurs set to unbounded
	      		or is the value in the choice element sufficient?
	      		 -->
		      	<xs:element ref="entityDesc" minOccurs="0"/>
		      	<xs:element ref="pages" minOccurs="0"/>
	      		<xs:element ref="creator" minOccurs="0"/>	      		
	      		<xs:element ref="contributor" minOccurs="0"/>
	      		<xs:element ref="hasFormat" minOccurs="0"/>
	      		<xs:element ref="isFormatOf" minOccurs="0"/>
	      		<xs:element ref="spatial" minOccurs="0"/>
	      		<xs:element name="dc.coverage.spatial" type="palmmElement"/>
	      		<xs:element name="scale" type="palmmElement"/>
	      		<xs:element ref="location" minOccurs="0"/>
	      		<xs:element ref="notes" minOccurs="0"/>
	      		<xs:element ref="thesis" minOccurs="0"/>
	      		<xs:element ref="display" minOccurs="0"/>
				<xs:element ref="dc.title.alternative" minOccurs="0"/>
				<xs:element ref="dc.description.abstract" minOccurs="0"/>				
				<xs:element ref="dc.description.release" minOccurs="0"/>
				<xs:element ref="dc.description.tableOfContents" minOccurs="0"/>
				<xs:element ref="dc.contributor.role" minOccurs="0"/>
				<xs:element ref="dc.date.created" minOccurs="0"/>
				<xs:element ref="dc.date.issued" minOccurs="0"/>
				<xs:element ref="dc.date.modified" minOccurs="0"/>
				<xs:element ref="dc.format.extent" minOccurs="0"/>
				<xs:element ref="dc.format.medium" minOccurs="0"/>
				<xs:element ref="dc.relation.isPartOf" minOccurs="0"/>
				<xs:element ref="dc.relation.hasPart" minOccurs="0"/>
				<xs:element ref="dc.relation.isVersionOf" minOccurs="0"/>
				<xs:element ref="dc.relation.hasVersion" minOccurs="0"/>
				<xs:element ref="dc.relation.isFormatOf" minOccurs="0"/>
				<xs:element ref="dc.relation.hasFormat" minOccurs="0"/>
				<xs:element ref="dc.coverage.temporal" minOccurs="0"/>	      		
	    	</xs:choice>
  	  	</xs:sequence>
  	</xs:group>

	<xs:group name="creatorAndContribGroup">
		<xs:sequence>
			<xs:element name="name" type="palmmElement" minOccurs="0" maxOccurs="unbounded"/>			
			<xs:element name="type" type="palmmElement" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="role" type="palmmElement" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="dates" type="palmmElement" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="location" type="palmmElement" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="affiliation" type="palmmElement" minOccurs="0" maxOccurs="unbounded"/>			
		</xs:sequence>
	</xs:group>	

  	<xs:complexType name="palmmElement">
    	<xs:simpleContent>
      		<xs:extension base="xs:string"/>
    	</xs:simpleContent>
  	</xs:complexType>	
  	
	<xs:complexType name="entityDescType">
		<xs:attribute name="SOURCE" use="required">
			<xs:simpleType>
				<xs:restriction base="xs:NMTOKEN">
					<xs:enumeration value="FAMU"/>
					<xs:enumeration value="FAU"/>
					<xs:enumeration value="FCLA"/>
					<xs:enumeration value="FDA"/>
					<xs:enumeration value="FGCU"/>
					<xs:enumeration value="FHS"/>
					<xs:enumeration value="FIU"/>
					<xs:enumeration value="FSU"/>
					<xs:enumeration value="MCPL"/>
					<xs:enumeration value="SW"/>
					<xs:enumeration value="UCF"/>
					<xs:enumeration value="UF"/>
					<xs:enumeration value="UM"/>
					<xs:enumeration value="UNF"/>
					<xs:enumeration value="USF"/>
					<xs:enumeration value="UWF"/>
					<xs:enumeration value="UVI"/>
					<xs:enumeration value="FW"/>
				</xs:restriction>
			</xs:simpleType>
		</xs:attribute>
	</xs:complexType>  	
  	
  	<xs:complexType name="palmmCreator">
		<xs:sequence maxOccurs="unbounded">			
			<xs:choice>								
				<xs:group ref="creatorAndContribGroup"/>			
			</xs:choice>
		</xs:sequence>
  	</xs:complexType>	

  	<xs:complexType name="palmmContributor">
		<xs:sequence maxOccurs="unbounded">
			<xs:choice>
				<xs:group ref="creatorAndContribGroup"/>
			</xs:choice>
		</xs:sequence>
  	</xs:complexType>	

  	<xs:complexType name="palmmHasFormat">
		<xs:sequence>
			<xs:element name="identifier" type="palmmElement" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="date" type="xs:gYear" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="creator" type="palmmCreator" minOccurs="0" maxOccurs="unbounded"/>			
			<xs:element name="scanner" type="palmmElement" minOccurs="0" maxOccurs="unbounded"/>	
		</xs:sequence>
  	</xs:complexType>	

  	<xs:complexType name="palmmIsFormatOf">
		<xs:sequence>			
			<!-- can turn this into an element group to use here and with palmmHasFormat -->
			<xs:element name="identifier" type="palmmElement" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="format" type="palmmElement" minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
  	</xs:complexType>	

  	<xs:complexType name="palmmSpatial">
		<xs:sequence>			
			<xs:element name="name" minOccurs="0" maxOccurs="unbounded">					
				<xs:complexType>
					<xs:simpleContent>					
						<xs:extension base="palmmElement">
							<xs:attribute name="SCHEME">
								<xs:simpleType>
									<xs:restriction base="xs:NMTOKEN">
										<xs:enumeration value="fips"/>
										<xs:enumeration value="gnis"/>
										<xs:enumeration value="huc"/>
										<xs:enumeration value="lcsh"/>
									</xs:restriction>
								</xs:simpleType>
							</xs:attribute>
						</xs:extension>
					</xs:simpleContent>					
				</xs:complexType>
			</xs:element>
			<xs:group ref="longitudeAndLatitude" minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
  	</xs:complexType>	

	<xs:group name="longitudeAndLatitude">
		<xs:sequence>
			<xs:element name="longitude" minOccurs="1" maxOccurs="1"/>		
			<xs:element name="latitude" minOccurs="1" maxOccurs="1"/>		
		</xs:sequence>
	</xs:group>

	<xs:complexType name="thesisType">
		<xs:sequence>	
			<xs:element name="committeeChair" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="committeeCoChair" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="committeeMember" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="graduationDate" type="xs:date" minOccurs="0"/>
			<xs:element name="degree" type="xs:string" minOccurs="0"/>			
			<xs:element name="degreeDiscipline" type="xs:string" minOccurs="0"/>
			<xs:element name="degreeGrantor" type="xs:string" minOccurs="0"/>
			<xs:element name="degreeLevel" type="xs:string" minOccurs="0"/>			
		</xs:sequence>
	</xs:complexType>

	<xs:complexType name="displayType">
		<xs:attribute name="X" type="xs:int"/>
		<xs:attribute name="Y" type="xs:int"/>
		<xs:attribute name="TYPE">
			<xs:simpleType>
				<xs:restriction base="xs:NMTOKEN">							
					<xs:enumeration value="DET"/>
					<xs:enumeration value="SUMM"/>
				</xs:restriction>
			</xs:simpleType>
		</xs:attribute>
		<xs:attribute name="FACE">
			<xs:simpleType>
				<xs:restriction base="xs:NMTOKEN">							
					<xs:enumeration value="FRONT"/>
					<xs:enumeration value="BACK"/>
					<xs:enumeration value="LEFT"/>
					<xs:enumeration value="RIGHT"/>
					<xs:enumeration value="TOP"/>
					<xs:enumeration value="BOTTOM"/>
				</xs:restriction>
			</xs:simpleType>
		</xs:attribute>
	</xs:complexType>

</xs:schema>

