<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

	<xsd:annotation>
		<xsd:documentation xml:lang="en">
		'Species list' schema created for used with 'The Semantic Web' website by Conrad Williams.
		Licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported (CC BY-NC-SA 3.0) License.
		</xsd:documentation>
	</xsd:annotation>
	
	<xsd:element name="locationSpeciesList" type="locationSpeciesListType" />
	
	<xsd:complexType name="locationSpeciesListType">
		<xsd:all>
			<xsd:element name="locationName" type="plainNameType" />
			<!--xsd:date is of the form YYYY-MM-DD -->
			<xsd:element name="lastUpdated" type="xsd:date" />
			<xsd:element name="location" type="locationType" />
			<xsd:element name="speciesList" type="speciesListType" />
		</xsd:all>
	</xsd:complexType>
	
	<xsd:complexType name="speciesListType">
		<xsd:sequence>
			<xsd:element name="species" type="speciesType" minOccurs="1" maxOccurs="unbounded" />
		</xsd:sequence>
	</xsd:complexType>
	
	<xsd:complexType name="speciesType">
		<xsd:sequence>
			<xsd:element name="genus" type="taxonType" minOccurs="1" maxOccurs="1" />
			<xsd:element name="specificName" type="taxonType" minOccurs="1" maxOccurs="1" />
			<xsd:element name="subspecies" type="taxonType" minOccurs="0" maxOccurs="1" />
			<xsd:element name="commonName" type="plainNameType" minOccurs="0" maxOccurs="1" />
			<xsd:element name="explicitLocations" type="explicitLocationsType" minOccurs="0" maxOccurs="1" />
		</xsd:sequence>
	</xsd:complexType>
	
	<xsd:simpleType name="taxonType">
		<xsd:restriction base="xsd:string">
			<xsd:pattern value="[a-zA-Z]+" />
			<xsd:whiteSpace value="collapse" />
		</xsd:restriction>
	</xsd:simpleType>
	
	<xsd:simpleType name="plainNameType">
		<xsd:restriction base="xsd:string">
			<!-- ONLY ALPHABETIC CHARACTERS AND WHITESPACE AND HYPHENS! -->
			<xsd:pattern value="(([a-zA-Z]+[\-]?[a-zA-Z]+)+[\s]*)+" />
			<xsd:whiteSpace value="collapse" />
		</xsd:restriction>
	</xsd:simpleType>
	
	<!-- This could be used for sedentary organisms.  Many more "extra" categories
		 such as this could be imagined, but will not be implemented in this example. -->
	<xsd:complexType name="explicitLocationsType" >
		<xsd:sequence>
			<xsd:element name="exLoc" type="locationType" minOccurs="1" maxOccurs="unbounded" />
		</xsd:sequence>
	</xsd:complexType>
	
	<xsd:complexType name="locationType">
		<xsd:all>
			<!-- North latitude and East longitude are positive;
				 South latitude and West longitude are negative; -->
			<xsd:element name="latitude" type="xsd:decimal" />
			<xsd:element name="longitude" type="xsd:decimal" />
		</xsd:all>
	</xsd:complexType>
	
</xsd:schema>