<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xlink="http://www.w3.org/1999/xlink">
<!--
<xs:import namespace="http://www.w3.org/1999/xlink"/>
-->
	<xs:element name="cxml">
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="header"/>
				<xs:element ref="data" minOccurs="1" maxOccurs="2"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>

	<xs:element name="header">
		<xs:annotation>
			<xs:documentation>Metadata about production center and base time
			of the analysis and/or forecast</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:all>
				<xs:element ref="product"/>
				<xs:element ref="generatingApplication"/>
				<xs:element ref="productionCenter" minOccurs="0" maxOccurs="1"/>
				<xs:element ref="moreInfo" minOccurs="0" maxOccurs="1"/>
				<xs:element ref="moreMetadata" minOccurs="0" maxOccurs="1"/>
				<xs:element ref="baseTime" minOccurs="0" maxOccurs="1"/>
				<xs:element ref="creationTime" minOccurs="0" maxOccurs="1"/>
			</xs:all>
		</xs:complexType>
	</xs:element>

	<xs:element name="product" type="xs:string"/>

	<xs:element name="generatingApplication">
		<xs:complexType>
			<xs:all>
				<xs:element ref="applicationType"/>
				<xs:element ref="model" minOccurs="0" maxOccurs="1"/>
				<xs:element ref="ensemble" minOccurs="0" maxOccurs="1"/>
			</xs:all>
		</xs:complexType>
	</xs:element>

	<xs:element name="applicationType" type="xs:string"/>

	<xs:element name="model">
		<xs:annotation>
			<xs:documentation>Information about the NWP model producing the analysis or forecast</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="name"/>
				<xs:element ref="domain"/>
				<xs:element ref="resolution" minOccurs="0" maxOccurs="1"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>

	<xs:element name="name" type="xs:normalizedString"/>
	<xs:element name="domain" type="xs:normalizedString"/>
	<xs:element name="resolution" type="xs:normalizedString"/>

	<xs:element name="ensemble">
		<xs:annotation>
			<xs:documentation>Information about the ensemble prediction system</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="numMembers"/>
				<xs:element ref="perturbationMethod"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>

	<xs:element name="numMembers" type="xs:integer"/>
	<xs:element name="perturbationMethod" type="xs:normalizedString"/>

	<xs:element name="productionCenter">
		<xs:complexType mixed="true">
			<xs:sequence>
				<xs:element ref="subCenter" minOccurs="0" maxOccurs="1"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>

	<xs:element name="subCenter" type="xs:string"/>
	<xs:element name="moreInfo" type="xs:anyURI"/>

	<xs:element name="moreMetadata">
		<xs:complexType>
			<xs:simpleContent>
				<xs:extension base="xs:string">
					<xs:anyAttribute namespace="http://www.w3.org/1999/xlink" />
				</xs:extension>
			</xs:simpleContent>
		</xs:complexType>
	</xs:element>

	<xs:element name="baseTime" type="xs:dateTime"/>
	<xs:element name="creationTime" type="xs:dateTime"/>

	<xs:element name="data">
		<xs:annotation>
			<xs:documentation>Data content of the analysis or forecast.
			The type can be 'analysis', 'forecast' or 'ensembleForecast'
			Normally a file would have only one type of data
			but in some cases it may be desirable to have both an analysis and a forecast.
			Several disturbances (cyclones) can be included in a single data element.
			</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="disturbance" minOccurs="0" maxOccurs="unbounded"/>
			</xs:sequence>
			<xs:attribute name="type" use="required" type="dataType"/>
			<xs:attribute name="member" use="optional" type="xs:nonNegativeInteger"/>
			<xs:attribute name="perturb" use="optional" type="perturbType"/>
		</xs:complexType>
	</xs:element>

	<xs:element name="disturbance">
		<xs:annotation>
			<xs:documentation>Data on a particular storm (disturbance)</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="cycloneName" minOccurs="0" maxOccurs="1"/>
				<xs:element ref="basin" minOccurs="0" maxOccurs="1"/>
				<xs:element ref="cycloneNumber" minOccurs="0" maxOccurs="1"/>
				<xs:element ref="objTechNum" minOccurs="0" maxOccurs="1"/>
				<xs:element ref="objTech" minOccurs="0" maxOccurs="1"/>
				<xs:element ref="fix" minOccurs="1" maxOccurs="unbounded"/>
			</xs:sequence>
			<xs:attribute name="ID" use="required" type="xs:NMTOKEN"/>
		</xs:complexType>
	</xs:element>

	<xs:element name="cycloneName" type="xs:normalizedString"/>

	<xs:element name="basin">
		<xs:annotation>
			<xs:documentation>Basin in which the storm is located at analysis time.
			Either 2-letter abbreviation or full words are acceptable.</xs:documentation>
		</xs:annotation>
	<xs:simpleType>
		<xs:restriction base="xs:string">
			<xs:enumeration value="WP"/>
			<xs:enumeration value="Western North Pacific"/>
			<xs:enumeration value="IO"/>
			<xs:enumeration value="North Indian Ocean"/>
			<xs:enumeration value="SH"/>
			<xs:enumeration value="Southern Hemisphere"/>
			<xs:enumeration value="CP"/>
			<xs:enumeration value="Central North Pacific"/>
			<xs:enumeration value="EP"/>
			<xs:enumeration value="Eastern North Pacific"/>
			<xs:enumeration value="AL"/>
			<xs:enumeration value="North Atlantic"/>
		</xs:restriction>
	</xs:simpleType>
	</xs:element>

	<xs:element name="cycloneNumber" type="xs:integer"/>   <!-- ATCF - annual cyclone number -->
	<xs:element name="objTechNum" type="xs:integer"/>   <!-- ATCF - objective technique sorting number - obsolete? -->
	<xs:element name="objTech" type="xs:string"/>   <!-- ATCF - acronym for each objective technique -->

	<xs:element name="fix">
		<xs:annotation>
			<xs:documentation>Position of a disturbance at a particular time</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="validTime"/>
				<xs:element ref="latitude"/>
				<xs:element ref="longitude"/>
				<xs:element ref="cycloneData"/>
			</xs:sequence>
			<xs:attribute name="hour" use="optional" type="xs:decimal"/>
		</xs:complexType>
	</xs:element>

	<xs:element name="validTime" type="xs:dateTime"/>

	<xs:element name="latitude">
		<xs:complexType>
			<xs:simpleContent>
				<xs:extension base="xs:decimal">
					<xs:attribute name="units" use="required" type="xs:normalizedString"/>
				</xs:extension>
			</xs:simpleContent>
		</xs:complexType>
	</xs:element>
		
	<xs:element name="longitude">
		<xs:complexType>
			<xs:simpleContent>
				<xs:extension base="xs:decimal">
					<xs:attribute name="units" use="required" type="xs:normalizedString"/>
				</xs:extension>
			</xs:simpleContent>
		</xs:complexType>
	</xs:element>

	<xs:element name="cycloneData">
		<xs:annotation>
			<xs:documentation>Data describing the storm's development and status</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:all>
				<xs:element ref="development" minOccurs="0" maxOccurs="1"/>
				<xs:element ref="minimumPressure" minOccurs="0" maxOccurs="1"/>
				<xs:element ref="maxWind" minOccurs="0" maxOccurs="1"/>
				<xs:element ref="lastClosedIsobar" minOccurs="0" maxOccurs="1"/>
				<xs:element ref="stormMotion" minOccurs="0" maxOccurs="1"/>
				<xs:element ref="gusts" minOccurs="0" maxOccurs="1"/>
				<xs:element ref="eyeDiameter" minOccurs="0" maxOccurs="1"/>
				<xs:element ref="subRegion" minOccurs="0" maxOccurs="1"/>
				<xs:element ref="systemDepth" minOccurs="0" maxOccurs="1"/>
				<xs:element ref="maxSeas" minOccurs="0" maxOccurs="1"/>
				<xs:element ref="maxPrecip" minOccurs="0" maxOccurs="1"/>
				<xs:element ref="radii" minOccurs="0" maxOccurs="1"/>
				<xs:element ref="cyclonePhase" minOccurs="0" maxOccurs="1"/>
			</xs:all>
			<xs:attribute name="biasCorrected" use="optional" type="xs:boolean"/>
		</xs:complexType>
	</xs:element>

	<xs:element name="development" nillable="true">
		<xs:annotation>
			<xs:documentation>Development status of a disturbance (ATCF codes).
			The spelled out words correspond to the 2-letter abbreviations.
			Either way of representing development is acceptable.</xs:documentation>
		</xs:annotation>
		<xs:simpleType>
			<xs:restriction base="xs:string">
				<xs:enumeration value="DB"/>
				<xs:enumeration value="disturbance"/>
				<xs:enumeration value="TD"/>
				<xs:enumeration value="tropical depression"/>
				<xs:enumeration value="TS"/>
				<xs:enumeration value="tropical storm"/>
				<xs:enumeration value="TY"/>
				<xs:enumeration value="typhoon"/>
				<xs:enumeration value="ST"/>
				<xs:enumeration value="super typhoon"/>
				<xs:enumeration value="TC"/>
				<xs:enumeration value="tropical cyclone"/>
				<xs:enumeration value="HU"/>
				<xs:enumeration value="hurricane"/>
				<xs:enumeration value="SD"/>
				<xs:enumeration value="subtropical depression"/>
				<xs:enumeration value="SS"/>
				<xs:enumeration value="subtropical storm"/>
				<xs:enumeration value="EX"/>
				<xs:enumeration value="extratropical system"/>
				<xs:enumeration value="IN"/>
				<xs:enumeration value="inland"/>
				<xs:enumeration value="DS"/>
				<xs:enumeration value="dissipating"/>
				<xs:enumeration value="LO"/>
				<xs:enumeration value="low"/>
				<xs:enumeration value="WV"/>
				<xs:enumeration value="tropical wave"/>
				<xs:enumeration value="ET"/>
				<xs:enumeration value="extrapolated"/>
				<xs:enumeration value="XX"/>
				<xs:enumeration value="unknown"/>
			</xs:restriction>
		</xs:simpleType>
	</xs:element>

	<xs:element name="maxWind">
		<xs:annotation>
			<xs:documentation>Data describing the storm's maximum sustained wind speed</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:all>
				<xs:element ref="speed"/>
				<xs:element ref="latitude" minOccurs="0" maxOccurs="1"/>
				<xs:element ref="longitude" minOccurs="0" maxOccurs="1"/>
				<xs:element ref="radius" minOccurs="0" maxOccurs="1"/>
			</xs:all>
		</xs:complexType>
	</xs:element>

	<xs:element name="speed" nillable="true">
		<xs:complexType>
			<xs:simpleContent>
				<xs:extension base="xs:decimal">
					<xs:attribute name="units" use="required" type="xs:normalizedString"/>
				</xs:extension>
			</xs:simpleContent>
		</xs:complexType>
	</xs:element>

	<xs:element name="radius" nillable="true">
		<xs:annotation>
			<xs:documentation>Radial distance at which a threshold value is met.
			This can be within a particular sector or around the full circle.
			Sector must be specified (NEQ, SWQ, etc., or AAA for full circle).
			Default sector is "AAA"</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:simpleContent>
				<xs:extension base="xs:decimal">
					<xs:attribute name="sector" use="optional" type="sectorType"/>
					<xs:attribute name="units" use="required" type="xs:normalizedString"/>
				</xs:extension>
			</xs:simpleContent>
		</xs:complexType>
	</xs:element>

	<xs:element name="minimumPressure" nillable="true">
		<xs:complexType>
			<xs:simpleContent>
				<xs:extension base="xs:decimal">
					<xs:attribute name="units" use="required" type="xs:normalizedString"/>
				</xs:extension>
			</xs:simpleContent>
		</xs:complexType>
	</xs:element>

	<xs:element name="lastClosedIsobar">
		<xs:annotation>
			<xs:documentation>Data describing the pressure and radius of the last closed isobar</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:all>
				<xs:element ref="pressure"/>
				<xs:element ref="radius" minOccurs="0" maxOccurs="1"/>
			</xs:all>
		</xs:complexType>
	</xs:element>

	<xs:element name="pressure" nillable="true">
		<xs:complexType>
			<xs:simpleContent>
				<xs:extension base="xs:decimal">
					<xs:attribute name="units" use="required" type="xs:normalizedString"/>
				</xs:extension>
			</xs:simpleContent>
		</xs:complexType>
	</xs:element>

	<xs:element name="gusts" nillable="true">
		<xs:complexType>
			<xs:simpleContent>
				<xs:extension base="xs:decimal">
					<xs:attribute name="units" use="required" type="xs:normalizedString"/>
				</xs:extension>
			</xs:simpleContent>
		</xs:complexType>
	</xs:element>

	<xs:element name="eyeDiameter" nillable="true">
		<xs:complexType>
			<xs:simpleContent>
				<xs:extension base="xs:decimal">
					<xs:attribute name="units" use="required" type="xs:normalizedString"/>
				</xs:extension>
			</xs:simpleContent>
		</xs:complexType>
	</xs:element>

	<xs:element name="subRegion" nillable="true">
		<xs:annotation>
			<xs:documentation>Subregion within the basin. Either 1-letter abbreviation
			or full words are acceptable.</xs:documentation>
		</xs:annotation>
		<xs:simpleType>
			<xs:restriction base="xs:string">
				<xs:enumeration value="A"/>
				<xs:enumeration value="Arabian Sea"/>
				<xs:enumeration value="B"/>
				<xs:enumeration value="Bay of Bengal"/>
				<xs:enumeration value="C"/>
				<xs:enumeration value="Central Pacific"/>
				<xs:enumeration value="E"/>
				<xs:enumeration value="Eastern Pacific"/>
				<xs:enumeration value="L"/>
				<xs:enumeration value="Atlantic"/>
				<xs:enumeration value="P"/>
				<xs:enumeration value="South Pacific"/>
				<xs:enumeration value="S"/>
				<xs:enumeration value="South Indian Ocean"/>
				<xs:enumeration value="W"/>
				<xs:enumeration value="Western Pacific"/>
			</xs:restriction>
		</xs:simpleType>
	</xs:element>

	<xs:element name="stormMotion">
		<xs:annotation>
			<xs:documentation>Data describing the storm's speed and direction</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:all>
				<xs:element ref="speed"/>
				<xs:element ref="directionToward"/>
			</xs:all>
		</xs:complexType>
	</xs:element>

	<xs:element name="directionToward" nillable="true">
		<xs:complexType>
			<xs:simpleContent>
				<xs:extension base="xs:decimal">
					<xs:attribute name="units" use="required" type="xs:normalizedString"/>
				</xs:extension>
			</xs:simpleContent>
		</xs:complexType>
	</xs:element>

	<xs:element name="systemDepth" nillable="true">
		<xs:annotation>
			<xs:documentation>Storm depth. Either 1-letter abbreviation
			or full words are acceptable.</xs:documentation>
		</xs:annotation>
		<xs:simpleType>
			<xs:restriction base="xs:string">
				<xs:enumeration value="D"/>
				<xs:enumeration value="deep"/>
				<xs:enumeration value="M"/>
				<xs:enumeration value="medium"/>
				<xs:enumeration value="S"/>
				<xs:enumeration value="shallow"/>
				<xs:enumeration value="X"/>
				<xs:enumeration value="unknown"/>
			</xs:restriction>
		</xs:simpleType>
	</xs:element>

	<xs:element name="maxSeas" nillable="true">
		<xs:annotation>
			<xs:documentation>Maximum wave height</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:simpleContent>
				<xs:extension base="xs:decimal">
					<xs:attribute name="units" use="required" type="xs:normalizedString"/>
				</xs:extension>
			</xs:simpleContent>
		</xs:complexType>
	</xs:element>

	<xs:element name="maxPrecip">
		<xs:annotation>
			<xs:documentation>Data describing the storm's maximum precipitation</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:all>
				<xs:element ref="intensity"/>
				<xs:element ref="latitude" minOccurs="0" maxOccurs="1"/>
				<xs:element ref="longitude" minOccurs="0" maxOccurs="1"/>
				<xs:element ref="precipType" minOccurs="0" maxOccurs="1"/>
			</xs:all>
		</xs:complexType>
	</xs:element>

	<xs:element name="intensity" nillable="true">
		<xs:complexType>
			<xs:simpleContent>
				<xs:extension base="xs:decimal">
					<xs:attribute name="units" use="required" type="xs:normalizedString"/>
				</xs:extension>
			</xs:simpleContent>
		</xs:complexType>
	</xs:element>

	<xs:element name="precipType" nillable="true">
		<xs:annotation>
			<xs:documentation>Dominant precipitation type. If neither
			"rain" nor "snow" then use "mixed"</xs:documentation>
		</xs:annotation>
		<xs:simpleType>
			<xs:restriction base="xs:string">
				<xs:enumeration value="rain"/>
				<xs:enumeration value="snow"/>
				<xs:enumeration value="mixed"/>
			</xs:restriction>
		</xs:simpleType>
	</xs:element>

	<xs:element name="radii">
		<xs:annotation>
			<xs:documentation>Radii at which certain thresholds in the winds or seas are met.</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="winds" minOccurs="0" maxOccurs="unbounded"/>
				<xs:element ref="seas" minOccurs="0" maxOccurs="unbounded"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>

	<xs:element name="winds">
		<xs:annotation>
			<xs:documentation>Data on winds within sectors</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="speed"/>
				<xs:element ref="radius" minOccurs="0" maxOccurs="17"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>

	<xs:element name="seas">
		<xs:annotation>
			<xs:documentation>Data on wave heights within sectors</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="waveHeight"/>
				<xs:element ref="radius" minOccurs="0" maxOccurs="17"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>

	<xs:element name="waveHeight" nillable="true">
		<xs:complexType>
			<xs:simpleContent>
				<xs:extension base="xs:decimal">
					<xs:attribute name="units" use="required" type="xs:normalizedString"/>
				</xs:extension>
			</xs:simpleContent>
		</xs:complexType>
	</xs:element>

	<xs:element name="cyclonePhase">
		<xs:annotation>
			<xs:documentation>Data on cyclone phase from Hart et al. 1993</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:all>
				<xs:element ref="stormRelThkSymmetry"/>
				<xs:element ref="thermalWindLower"/>
				<xs:element ref="thermalWindUpper"/>
			</xs:all>
		</xs:complexType>
	</xs:element>

	<xs:element name="stormRelThkSymmetry" nillable="true">
		<xs:complexType>
			<xs:simpleContent>
				<xs:extension base="xs:decimal">
					<xs:attribute name="units" use="required" type="xs:normalizedString"/>
				</xs:extension>
			</xs:simpleContent>
		</xs:complexType>
	</xs:element>

	<xs:element name="thermalWindLower" nillable="true">
		<xs:complexType>
			<xs:simpleContent>
				<xs:extension base="xs:decimal">
					<xs:attribute name="units" use="required" type="xs:normalizedString"/>
				</xs:extension>
			</xs:simpleContent>
		</xs:complexType>
	</xs:element>

	<xs:element name="thermalWindUpper" nillable="true">
		<xs:complexType>
			<xs:simpleContent>
				<xs:extension base="xs:decimal">
					<xs:attribute name="units" use="required" type="xs:normalizedString"/>
				</xs:extension>
			</xs:simpleContent>
		</xs:complexType>
	</xs:element>

	<xs:simpleType name="dataType">
		<xs:restriction base="xs:string">
			<xs:enumeration value="analysis"/>
			<xs:enumeration value="forecast"/>
			<xs:enumeration value="ensembleForecast"/>
		</xs:restriction>
	</xs:simpleType>

	<xs:simpleType name="perturbType">
		<xs:restriction base="xs:string">
			<xs:enumeration value="control"/>
			<xs:enumeration value="positive"/>
			<xs:enumeration value="negative"/>
		</xs:restriction>
	</xs:simpleType>

	<xs:simpleType name="sectorType">
		<xs:restriction base="xs:string">
			<xs:enumeration value="AAA"/>
			<xs:enumeration value="full circle"/>
			<xs:enumeration value="NNS"/>
			<xs:enumeration value="north semicircle"/>
			<xs:enumeration value="NES"/>
			<xs:enumeration value="northeast semicircle"/>
			<xs:enumeration value="EES"/>
			<xs:enumeration value="east semicircle"/>
			<xs:enumeration value="SES"/>
			<xs:enumeration value="southeast semicircle"/>
			<xs:enumeration value="SSS"/>
			<xs:enumeration value="south semicircle"/>
			<xs:enumeration value="SWS"/>
			<xs:enumeration value="southwest semicircle"/>
			<xs:enumeration value="WWS"/>
			<xs:enumeration value="west semicircle"/>
			<xs:enumeration value="NWS"/>
			<xs:enumeration value="northwest semicircle"/>
			<xs:enumeration value="NNQ"/>
			<xs:enumeration value="north quadrant"/>
			<xs:enumeration value="NEQ"/>
			<xs:enumeration value="northeast quadrant"/>
			<xs:enumeration value="EEQ"/>
			<xs:enumeration value="east quadrant"/>
			<xs:enumeration value="SEQ"/>
			<xs:enumeration value="southeast quadrant"/>
			<xs:enumeration value="SSQ"/>
			<xs:enumeration value="south quadrant"/>
			<xs:enumeration value="SWQ"/>
			<xs:enumeration value="southwest quadrant"/>
			<xs:enumeration value="WWQ"/>
			<xs:enumeration value="west quadrant"/>
			<xs:enumeration value="NWQ"/>
			<xs:enumeration value="northwest quadrant"/>
		</xs:restriction>
	</xs:simpleType>
</xs:schema>
