﻿<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="TCSsubset" targetNamespace="http://www.tdwg.org/schemas/tcs/1.01" 
	xmlns="http://www.tdwg.org/schemas/tcs/1.01" 
	xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" 
			  attributeFormDefault="unqualified">
	<xs:element name="DataSet">
		<xs:annotation>
			<xs:appinfo>
				This is the subset of the TDWG schema that has been implemented in species files.
				It may also include additional portions in design for possible implementation.
				Any such additional portions should be documented as not yet implemented.
				A few items are included to avoid schema errors and annotated as not used in species files.
				Element "Error" has been implemented even though not found in the TDWG schema.
			</xs:appinfo>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element name="Error" type="xs:string" minOccurs="0"/>
				<xs:element name="TaxonNames" minOccurs="0">
					<xs:complexType>
						<xs:sequence>
							<xs:element name="TaxonName" type="ScientificName" minOccurs="0" maxOccurs="unbounded"/>
						</xs:sequence>
					</xs:complexType>
				</xs:element >
				<xs:element name="TaxonConcepts" minOccurs="0">
					<xs:complexType>
						<xs:sequence>
							<xs:element name="TaxonConcept" minOccurs="0" maxOccurs="unbounded">
								<xs:complexType mixed="false">
									<xs:sequence minOccurs="0">
										<xs:element name="Name">
											<xs:complexType>
												<xs:complexContent>
													<xs:extension base="ReferenceType">
														<xs:attribute name="scientific" type="xs:boolean" use="required" /> 
													</xs:extension>
												</xs:complexContent>
											</xs:complexType>
										</xs:element>
										<xs:element name="Rank" type="TaxonomicRank" minOccurs="0"/>
										<xs:element name="TaxonRelationships" minOccurs="0">
											<xs:complexType>
												<xs:sequence>
													<xs:element name="TaxonRelationship" maxOccurs="unbounded">
														<xs:complexType>
															<xs:complexContent>
																<xs:extension base="RelationshipType">
																	<xs:sequence>
																		<xs:element name="ToTaxonConcept" type="ReferenceType"/>
																	</xs:sequence>
																</xs:extension>
															</xs:complexContent>
														</xs:complexType>
													</xs:element>
												</xs:sequence>
											</xs:complexType>
										</xs:element>
									</xs:sequence>
								</xs:complexType>
							</xs:element>
						</xs:sequence>
					</xs:complexType>
				</xs:element >
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:complexType name="ReferenceType" mixed="true">
		<xs:attribute name="ref" type="xs:token" use="optional"/>
		<xs:attribute name="linktype" use="optional" default="local">
			<xs:simpleType>
				<xs:restriction base="xs:string">
					<xs:enumeration value="local">
						<xs:annotation>
							<xs:appinfo>Not used in species files</xs:appinfo>
						</xs:annotation>
					</xs:enumeration>
					<xs:enumeration value="external"/>
				</xs:restriction>
			</xs:simpleType>
		</xs:attribute>
	</xs:complexType>
	<xs:complexType name="ScientificName">
		<xs:sequence>
			<xs:element name="Simple" type="xs:string"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="RelationshipType">
		<xs:attribute name="type" use="required">
			<xs:simpleType>
				<xs:restriction base="xs:string">
					<xs:enumeration value="is child taxon of"/>
					<xs:enumeration value="is parent taxon of"/>
				</xs:restriction>
			</xs:simpleType>
		</xs:attribute>
	</xs:complexType>
	<xs:complexType name="TaxonomicRank" mixed="true">
		<xs:attribute name="code" type="TaxonomicRankEnum" use="optional"/>
	</xs:complexType>
	<xs:simpleType name="TaxonomicRankEnum">
		<xs:union memberTypes="TaxonomicRankSpeciesGroupEnum 
			TaxonomicRankGenusSubdivisionEnum TaxonomicRankGenusGroupEnum TaxonomicRankFamilySubdivisionEnum 
			TaxonomicRankFamilyGroupEnum TaxonomicRankAboveSuperfamilyEnum" />
	</xs:simpleType>
	<xs:simpleType name="TaxonomicRankSpeciesGroupEnum">
		<xs:restriction base="xs:Name">
			<xs:enumeration value="ssp"/>
			<xs:enumeration value="sp"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="TaxonomicRankGenusSubdivisionEnum">
		<xs:restriction base="xs:Name">
			<xs:enumeration value="subser"/>
			<xs:enumeration value="ser"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="TaxonomicRankGenusGroupEnum">
		<xs:restriction base="xs:Name">
			<xs:enumeration value="subgen"/>
			<xs:enumeration value="gen"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="TaxonomicRankFamilySubdivisionEnum">
		<xs:restriction base="xs:Name">
			<xs:enumeration value="infratrib"/>
			<xs:enumeration value="subtrib"/>
			<xs:enumeration value="trib"/>
			<xs:enumeration value="supertrib"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="TaxonomicRankFamilyGroupEnum">
		<xs:restriction base="xs:Name">
			<xs:enumeration value="infrafam"/>
			<xs:enumeration value="subfam"/>
			<xs:enumeration value="fam"/>
			<xs:enumeration value="superfam"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="TaxonomicRankAboveSuperfamilyEnum">
		<xs:restriction base="xs:Name">
			<xs:enumeration value="infraord"/>
			<xs:enumeration value="subord"/>
			<xs:enumeration value="ord"/>
			<xs:enumeration value="superord"/>
			<xs:enumeration value="infracl"/>
			<xs:enumeration value="subcl"/>
			<xs:enumeration value="cl"/>
			<xs:enumeration value="supercl"/>
			<xs:enumeration value="infraphyl_div"/>
			<xs:enumeration value="subphyl_div"/>
			<xs:enumeration value="phyl_div"/>
			<xs:enumeration value="superphyl_div"/>
			<xs:enumeration value="infrareg"/>
			<xs:enumeration value="subreg"/>
			<xs:enumeration value="reg"/>
			<xs:enumeration value="superreg"/>
		</xs:restriction>
	</xs:simpleType>
</xs:schema>
