<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
	<xs:annotation>
		<xs:documentation>
			Draft of station XML schema.
		</xs:documentation>
	</xs:annotation>
	<!-- Root element -->
	<xs:element name="StaMessage">
		<xs:annotation>
			<xs:documentation>Station message</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element name="Source" type="xs:string"/>
				<xs:element name="Sender" type="xs:string" minOccurs="0"/>
				<xs:element name="Module" type="xs:string" minOccurs="0"/>
				<xs:element name="Sent" type="xs:dateTime"/>
				<xs:element name="Action">
					<xs:simpleType>
						<xs:restriction base="xs:NMTOKEN">
							<xs:enumeration value="OPEN"/>
							<xs:enumeration value="CLOSE"/>
							<xs:enumeration value="UPDATE"/>
						</xs:restriction>
					</xs:simpleType>
				</xs:element>
				<xs:element name="ActionDate" type="xs:dateTime" minOccurs="0"/>
				<xs:element name="Station" type="sta_type" maxOccurs="unbounded"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<!--
		 Additional complex types 
	-->
	<xs:complexType name="sta_type">
		<xs:annotation>
			<xs:documentation>Representation of one station.</xs:documentation>
		</xs:annotation>
		<xs:sequence>
			<xs:element name="StationID" maxOccurs="unbounded">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="NetCode" type="xs:string"/>
						<xs:element name="StaCode" type="xs:string"/>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
			<xs:element name="StaLat" type="latlon_type"/>
			<xs:element name="StaLon" type="latlon_type"/>
			<xs:element name="StaElev" type="elev_type"/>
			<xs:element name="Site" type="xs:string"/>
			<xs:element name="Installation" minOccurs="0">
				<xs:simpleType>
					<xs:restriction base="xs:NMTOKEN">
						<xs:enumeration value="BB_SEISMIC"/>
						<xs:enumeration value="SP_SEISMIC"/>
						<xs:enumeration value="SM_REFERENCE"/>
						<xs:enumeration value="SM_BUILDING"/>
						<xs:enumeration value="BB_PORTABLE"/>
						<xs:enumeration value="SP_PORTABLE"/>
						<xs:enumeration value="SP_ARRAY"/>
						<xs:enumeration value="LP_ARRAY"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:element>
			<xs:element name="Instrument" minOccurs="0">
				<xs:simpleType>
					<xs:restriction base="xs:NMTOKEN">
						<xs:enumeration value="SPx1"/>
						<xs:enumeration value="SPx3"/>
						<xs:enumeration value="BBx1"/>
						<xs:enumeration value="BBx3"/>
						<xs:enumeration value="SMx1"/>
						<xs:enumeration value="SMx3"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:element>
			<!-- What does instrument refer to? Number of instruments? -->
			<xs:element name="Vault" type="xs:string" minOccurs="0"/>
			<xs:element name="Geology" type="xs:string" minOccurs="0"/>
			<xs:element name="Model" type="xs:string" minOccurs="0"/>
			<!-- Possible values? -->
			<xs:element name="Equipment" type="equip_type" minOccurs="0" maxOccurs="unbounded">
				<xs:annotation>
					<xs:documentation>Generic equipment used by all channels in a station</xs:documentation>
				</xs:annotation>
			</xs:element>
			<xs:element name="Operator" minOccurs="0" maxOccurs="unbounded">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="Agency" type="xs:string"/>
						<xs:element name="Contact" type="contact_type" minOccurs="0" maxOccurs="unbounded"/>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
			<xs:element name="StaBegin" type="xs:dateTime">
				<xs:annotation>
					<xs:documentation>Station ondate</xs:documentation>
				</xs:annotation>
			</xs:element>
			<xs:element name="StaEnd" type="xs:dateTime" minOccurs="0">
				<xs:annotation>
					<xs:documentation>Station offdate. Blank value means the station is active.</xs:documentation>
				</xs:annotation>
			</xs:element>
			<xs:element name="StaEpoch" type="epoch_type" maxOccurs="unbounded">
				<xs:annotation>
					<xs:documentation>
						Station epoch. If only one epoch is included, it should be the current epoch. Past epochs can also
						be included.
					</xs:documentation>
				</xs:annotation>
			</xs:element>
			<xs:element name="StaDataless" type="xs:anyURI" minOccurs="0"/>
			<xs:element name="StaComment" type="xs:string" minOccurs="0"/>
			<!-- new element -->
			<xs:element name="StaLog" type="log_type" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="Channel" type="chan_type" minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="chan_type">
		<xs:sequence>
			<xs:element name="ChnCode" type="xs:string"/>
			<xs:element name="LocCode" minOccurs="0">
				<xs:simpleType>
					<xs:restriction base="xs:NMTOKEN">
						<xs:maxLength value="2"/>
						<xs:pattern value="[\w\-][\w\-]"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:element>
			<xs:element name="ChnBegin" type="xs:dateTime"/>
			<xs:element name="ChnEnd" type="xs:dateTime" minOccurs="0"/>
			<xs:element name="ChnDataless" type="xs:anyURI" minOccurs="0"/>
			<xs:element name="ChnEpoch" maxOccurs="unbounded">
				<xs:complexType>
					<xs:complexContent>
						<xs:extension base="epoch_type">
							<xs:sequence>
								<xs:element name="ChnLat" type="latlon_type" minOccurs="0"/>
								<xs:element name="ChnLon" type="latlon_type" minOccurs="0"/>
								<xs:element name="ChnElev" type="elev_type" minOccurs="0"/>
								<xs:element name="Rate" type="freq_type" minOccurs="0"/>
								<xs:element name="Azim" type="latlon_type" minOccurs="0"/>
								<xs:element name="Dip" type="latlon_type" minOccurs="0"/>
								<xs:element name="Output" minOccurs="0">
									<xs:simpleType>
										<xs:restriction base="xs:NMTOKEN">
											<xs:enumeration value="CONTINUOUS"/>
											<xs:enumeration value="TRIGGERED"/>
										</xs:restriction>
									</xs:simpleType>
								</xs:element>
								<xs:element name="StorageFormat" default="UNKNOWN" minOccurs="0">
									<xs:simpleType>
										<xs:restriction base="xs:string">
											<xs:enumeration value="ASCII Quanterra Baler 14 LOG files, State of Health"/>
											<xs:enumeration value="Quanterra ACE Channel"/>
											<xs:enumeration value="Quanterra OCF Channel"/>
											<xs:enumeration value="STEIM1"/>
											<xs:enumeration value="STEIM-1 Integer Compression Format"/>
											<xs:enumeration value="STEIM-2 Integer Compression Format"/>
											<xs:enumeration value="STEIM2 Integer Compression Format"/>
											<xs:enumeration value="UNKNOWN"/>
										</xs:restriction>
									</xs:simpleType>
								</xs:element>
								<xs:element name="Clockdrift" minOccurs="0">
									<xs:simpleType>
										<xs:restriction base="xs:double">
											<xs:minInclusive value="0"/>
										</xs:restriction>
									</xs:simpleType>
								</xs:element>
								<xs:element name="SignalUnit" type="sensor_unit" minOccurs="0"/>
								<xs:element name="CalibrationUnit" type="cal_unit" minOccurs="0"/>
								<xs:element name="Blocklength" minOccurs="0">
									<xs:simpleType>
										<xs:restriction base="xs:integer">
											<xs:enumeration value="512"/>
											<xs:enumeration value="4096"/>
										</xs:restriction>
									</xs:simpleType>
								</xs:element>
								<xs:element name="ChannelFlags" minOccurs="0">
									<xs:complexType>
										<xs:sequence>
											<xs:element name="Flag" maxOccurs="unbounded">
												<xs:simpleType>
													<xs:restriction base="xs:NMTOKEN">
														<xs:enumeration value="C"/>
														<xs:enumeration value="D"/>
														<xs:enumeration value="E"/>
														<xs:enumeration value="G"/>
														<xs:enumeration value="H"/>
														<xs:enumeration value="L"/>
														<xs:enumeration value="T"/>
													</xs:restriction>
												</xs:simpleType>
											</xs:element>
										</xs:sequence>
									</xs:complexType>
								</xs:element>
								<xs:element name="DataLogger" type="dl_complex_type" minOccurs="0" maxOccurs="unbounded"/>
								<xs:element name="Sensor" type="sens_complex_type" minOccurs="0" maxOccurs="unbounded"/>
								<xs:element name="Response" type="resp_complex_type" minOccurs="0"/>
							</xs:sequence>
						</xs:extension>
					</xs:complexContent>
				</xs:complexType>
			</xs:element>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="epoch_type">
		<xs:sequence>
			<xs:element name="EpochBegin" type="xs:dateTime"/>
			<xs:element name="EpochEnd" type="xs:dateTime" minOccurs="0"/>
			<xs:element name="EpochComment" type="xs:string" minOccurs="0"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="equip_type">
		<xs:sequence>
			<xs:element name="EquipType" type="xs:string"/>
			<xs:element name="EquipDesc" type="xs:string" minOccurs="0"/>
			<xs:element name="Vendor" type="xs:string" minOccurs="0"/>
			<xs:element name="Model" type="xs:string" minOccurs="0"/>
			<xs:element name="SN" type="xs:string" minOccurs="0"/>
			<xs:element name="Ondate" type="xs:dateTime" minOccurs="0"/>
			<xs:element name="Offdate" type="xs:dateTime" minOccurs="0"/>
			<xs:element name="CalibrationDate" type="xs:dateTime" minOccurs="0"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="dl_complex_type">
		<xs:annotation>
			<xs:documentation>
				Datalogger
			</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="equip_type">
				<xs:sequence>
					<xs:element name="Module" minOccurs="0" maxOccurs="unbounded">
						<xs:complexType>
							<xs:sequence>
								<xs:element name="BoardSN" type="xs:string"/>
								<xs:element name="Sensitivity"/>
								<xs:element name="DateCalibrated" type="xs:dateTime"/>
							</xs:sequence>
						</xs:complexType>
					</xs:element>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="sens_complex_type">
		<xs:annotation>
			<xs:documentation>
				Sensors
			</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="equip_type">
				<xs:sequence>
					<xs:element name="Component" minOccurs="0" maxOccurs="unbounded">
						<xs:complexType>
							<xs:sequence>
								<xs:element name="Component" type="sens_comp_type" minOccurs="0" maxOccurs="unbounded"/>
								<xs:element name="DispUnitIn" type="sensor_unit" minOccurs="0"/>
								<xs:element name="DispUnitOut" type="sensor_unit" minOccurs="0"/>
								<xs:element name="DispSensitivity" type="sensitivity_type" minOccurs="0"/>
								<xs:element name="Gain" type="gain_type" minOccurs="0"/>
								<xs:element name="Frequency" type="freq_type" minOccurs="0"/>
								<xs:element name="NaturalFrequency" type="freq_type" minOccurs="0"/>
								<xs:element name="Damping" minOccurs="0"/>
								<xs:element name="InputRange" minOccurs="0"/>
								<xs:element name="RangeUnitIn" type="sensor_unit" minOccurs="0"/>
								<xs:element name="OutputRange" type="sensor_unit" minOccurs="0"/>
								<xs:element name="RangeUnitOut" type="sensor_unit" minOccurs="0"/>
							</xs:sequence>
							<xs:attribute name="number" type="counter_type"/>
						</xs:complexType>
					</xs:element>
					<xs:element name="Response" type="resp_complex_type" minOccurs="0"/>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="resp_complex_type">
		<xs:annotation>
			<xs:documentation>
				Channel or sensor response. Includes poles and zeros and generic response.
			</xs:documentation>
		</xs:annotation>
		<xs:choice>
			<!-- Poles and zeroes -->
			<xs:element name="PNZ">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="PNZComment" type="xs:string" minOccurs="0"/>
						<xs:element name="Units" type="pnz_output_unit" default="COUNTS" minOccurs="0"/>
						<xs:element name="Const"/>
						<xs:element name="Zero" type="pnz_type" minOccurs="0" maxOccurs="unbounded"/>
						<xs:element name="Pole" type="pnz_type" maxOccurs="unbounded"/>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
			<!-- Generic response: highpass, lowpass, polynomials, etc. -->
			<xs:element name="Generic">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="GenComment" type="xs:string" minOccurs="0"/>
						<xs:element name="Units" type="sensitivity_unit" minOccurs="0"/>
						<xs:element name="Sensitivity" type="sensitivity_type"/>
						<xs:element name="FreeFreq" type="freq_type"/>
						<!-- Highpass and lowpass response -->
						<xs:element name="PassResp" minOccurs="0" maxOccurs="2">
							<xs:annotation>
								<xs:documentation>Highpass or lowpass response.</xs:documentation>
							</xs:annotation>
							<xs:complexType>
								<xs:sequence>
									<xs:element name="RespComponent" maxOccurs="unbounded">
										<xs:complexType>
											<xs:sequence>
												<xs:element name="Corner" type="freq_type"/>
												<xs:element name="Roll" type="rolloff_type"/>
												<xs:element name="Damping" type="xs:double"/>
												<xs:element name="Polenumber" type="counter_type"/>
											</xs:sequence>
											<xs:attribute name="number" type="counter_type"/>
											<!-- Attribute for component number -->
										</xs:complexType>
									</xs:element>
								</xs:sequence>
								<xs:attribute name="passtype" type="pass_simple_type"/>
								<!-- Attribute for pass type - high or low -->
							</xs:complexType>
						</xs:element>
						<!-- End PassResponse -->
					</xs:sequence>
				</xs:complexType>
			</xs:element>
			<!-- End Generic -->
		</xs:choice>
		<!-- <xs:complexType> -->
		<!-- </xs:complexType> -->
	</xs:complexType>
	<!-- End Response -->
	<xs:complexType name="simple_response_type">
		<xs:sequence>
			<xs:element name="Corner" type="freq_type"/>
			<xs:element name="Damping" type="xs:double"/>
			<xs:element name="Gain" type="gain_type"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="latlon_type">
		<xs:simpleContent>
			<xs:extension base="coord_type">
				<xs:attribute name="unit" type="lonlat_unit" use="optional" default="degree"/>
				<xs:attribute name="error" type="xs:double" use="optional" default="0"/>
			</xs:extension>
		</xs:simpleContent>
	</xs:complexType>
	<xs:complexType name="elev_type">
		<xs:simpleContent>
			<xs:extension base="xs:double">
				<xs:attribute name="unit" use="optional" default="m"/>
			</xs:extension>
		</xs:simpleContent>
	</xs:complexType>
	<xs:complexType name="freq_type">
		<xs:simpleContent>
			<xs:extension base="freq_val_type">
				<xs:attribute name="unit" type="freq_unit" default="Hz"/>
			</xs:extension>
		</xs:simpleContent>
	</xs:complexType>
	<xs:complexType name="gain_type">
		<xs:simpleContent>
			<xs:extension base="xs:double">
				<xs:attribute name="stage" type="counter_type" default="0"/>
				<xs:attribute name="nominal" type="nominal_type" default="NOMINAL"/>
				<xs:attribute name="unit" type="gain_unit" default="V/M/S"/>
			</xs:extension>
		</xs:simpleContent>
	</xs:complexType>
	<xs:complexType name="rolloff_type">
		<xs:simpleContent>
			<xs:extension base="xs:double">
				<xs:attribute name="unit" type="rolloff_unit" default="DB/OCTAVE"/>
			</xs:extension>
		</xs:simpleContent>
	</xs:complexType>
	<xs:complexType name="log_type">
		<xs:sequence>
			<xs:element name="Date" type="xs:dateTime" minOccurs="0"/>
			<xs:element name="Entry" type="xs:string"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="pnz_type">
		<xs:annotation>
			<xs:documentation>
				Poles or zeroes.
			</xs:documentation>
		</xs:annotation>
		<xs:sequence>
			<xs:element name="Re" type="pnz_detail_type"/>
			<xs:element name="Im" type="pnz_detail_type"/>
		</xs:sequence>
		<xs:attribute name="number" type="counter_type" use="optional"/>
	</xs:complexType>
	<xs:complexType name="pnz_detail_type">
		<xs:simpleContent>
			<xs:extension base="xs:double">
				<xs:attribute name="error" type="uncertainty_type" use="optional" default="0"/>
			</xs:extension>
		</xs:simpleContent>
	</xs:complexType>
	<xs:complexType name="contact_type">
		<xs:sequence>
			<xs:element name="Name" type="xs:string"/>
			<xs:element name="Email" type="email_type" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="Phone" type="phone_type" minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:complexType>
	<!-- Simple types -->
	<xs:simpleType name="coord_type">
		<xs:restriction base="xs:double">
			<xs:minInclusive value="-180"/>
			<xs:maxExclusive value="180"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="lonlat_unit">
		<xs:restriction base="xs:NMTOKEN">
			<xs:enumeration value="degree"/>
			<xs:enumeration value="km"/>
			<xs:enumeration value="m"/>
		</xs:restriction>
	</xs:simpleType>
	<!-- Type for PassResponse attribute -->
	<xs:simpleType name="pass_simple_type">
		<xs:restriction base="xs:NMTOKEN">
			<xs:enumeration value="highpass"/>
			<xs:enumeration value="lowpass"/>
		</xs:restriction>
	</xs:simpleType>
	<!-- Positive integers used as counters for stage numbers, component numbers, etc. -->
	<xs:simpleType name="counter_type">
		<xs:restriction base="xs:integer">
			<xs:minInclusive value="0"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="elev_unit">
		<xs:restriction base="xs:NMTOKEN">
			<xs:enumeration value="m"/>
			<xs:enumeration value="km"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="freq_unit">
		<xs:restriction base="xs:NMTOKEN">
			<xs:enumeration value="Hz"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="sens_comp_type">
		<xs:restriction base="xs:string">
			<xs:enumeration value="E"/>
			<xs:enumeration value="N"/>
			<xs:enumeration value="Z"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="nominal_type">
		<xs:restriction base="xs:string">
			<xs:enumeration value="NOMINAL"/>
			<xs:enumeration value="CALCULATED"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="gain_unit">
		<xs:restriction base="xs:string">
			<xs:enumeration value="V/M/S"/>
			<xs:enumeration value="V/M/S**2"/>
			<xs:enumeration value="COUNTS/CM/SEC"/>
			<xs:enumeration value="COUNTS/CM/SEC**2"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="freq_val_type">
		<xs:restriction base="xs:double">
			<xs:minExclusive value="0"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="rolloff_unit">
		<xs:restriction base="xs:string">
			<xs:enumeration value="DB/OCTAVE"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="sensitivity_unit">
		<xs:restriction base="xs:string">
			<xs:enumeration value="COUNTS/NM"/>
			<xs:enumeration value="M/M"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="sensitivity_type">
		<xs:restriction base="xs:double">
			<xs:minInclusive value="0"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="pnz_output_unit">
		<xs:restriction base="xs:NMTOKEN">
			<xs:enumeration value="COUNTS"/>
			<xs:enumeration value="V"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="uncertainty_type">
		<xs:restriction base="xs:double">
			<xs:annotation>
				<xs:documentation>
					Uncertainty_type is used to express measurement errors. For example, a value of 0.3 means there is
					an uncertainty error of +/- 0.3.
				</xs:documentation>
			</xs:annotation>
			<xs:minInclusive value="0"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="sensor_unit">
		<xs:restriction base="xs:string">
			<xs:enumeration value="V"/>
			<xs:enumeration value="G"/>
			<xs:enumeration value="M/S"/>
			<xs:enumeration value="M/S**2"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="cal_unit">
		<xs:restriction base="xs:NMTOKEN">
			<xs:enumeration value="A"/>
			<xs:enumeration value="COUNTS"/>
			<xs:enumeration value="V"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="email_type">
		<xs:restriction base="xs:string">
			<xs:pattern value="[\w\.\-_]+@[\w\.\-_]+"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="phone_type">
		<xs:restriction base="xs:string">
			<xs:pattern value="\(?\d\d\d\)?\-\d\d\d\-\d\d\d\d"/>
		</xs:restriction>
	</xs:simpleType>
</xs:schema>
