<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

	<xsd:annotation>
		<xsd:documentation xml:lang="en">
		'Phylogeny' 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="phylogeny" type="phylogenyType" />
	
	<xsd:complexType name="phylogenyType">
		<xsd:all>
			<xsd:element name="currentAsOf" type="xsd:date" />
			<xsd:element name="rootTaxon" type="rootTaxonType" minOccurs="1" maxOccurs="1" />
		</xsd:all>
	</xsd:complexType>
	
	<xsd:complexType name="rootTaxonType">
		<xsd:sequence>
			<xsd:element name="taxonName" type="scientificNameType" minOccurs="1" maxOccurs="1" />
			<xsd:choice>
				<xsd:element name="childTaxon" type="taxonType" minOccurs="1" maxOccurs="unbounded" />
				<xsd:element name="species" type="speciesType" minOccurs="1" maxOccurs="unbounded" />
			</xsd:choice>
		</xsd:sequence>
	</xsd:complexType>
	
	<xsd:complexType name="taxonType">
		<xsd:sequence>
			<!-- This may be an area of improvement in the future as many unnamed dichotomies exist.
				 Allowing a blank name string would probably be better. -->
			<xsd:element name="taxonName" type="scientificNameType" minOccurs="1" maxOccurs="1" />
			<xsd:choice>
				<xsd:element name="childTaxon" type="taxonType" minOccurs="1" maxOccurs="unbounded" />
				<xsd:element name="species" type="speciesType" minOccurs="1" maxOccurs="unbounded" />
			</xsd:choice>
		</xsd:sequence>
	</xsd:complexType>
	
	<xsd:complexType name="speciesType">
		<xsd:sequence>
			<!-- Species are assumed to be included in their genus, which makes up the first part of 
				 their unique binominal name.  Thus, it is omitted at an element within speciesType -->
			<xsd:element name="specificName" type="scientificNameType" minOccurs="1" maxOccurs="1" />
			<xsd:element name="subspecies" type="scientificNameType" minOccurs="0" maxOccurs="1" />
			<xsd:element name="commonName" type="plainNameType" minOccurs="0" maxOccurs="1" />
		</xsd:sequence>
	</xsd:complexType>
	
	<xsd:simpleType name="scientificNameType">
		<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>
	
</xsd:schema>