<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" version="1.1">
	<xsd:element name="root">
		<xsd:complexType>
			<xsd:sequence>
				<xsd:element name="schemaVersion" type="xsd:string" minOccurs="0" maxOccurs="1"/>
				<xsd:element name="revisionHistory" type="revisions"/>
				<xsd:element ref="patient"/>
			</xsd:sequence>
		</xsd:complexType>
	</xsd:element>
	<!-- information describing the individual revision -->
	<xsd:complexType name="revisions">
		<xsd:sequence>
			<xsd:element name="indRevision" minOccurs="0" maxOccurs="unbounded">
				<xsd:complexType>
					<xsd:sequence>
						<xsd:element name="revisionDate" type="xsd:date"/>
						<xsd:element name="revisionTime" type="xsd:time"/>
						<xsd:element name="curatorLastName" type="xsd:string"/>
						<xsd:element name="curatorFirstName" type="xsd:string"/>
						<xsd:element name="curatorMiddleName" type="xsd:string"/>
						<xsd:element name="curatorMiddleInitial" type="xsd:string"/>
						<xsd:element name="curatorInstitution" type="xsd:string"/>
						<xsd:element name="curatorComment" type="xsd:string"/>
						<xsd:element name="readyToCommit" type="xsd:string"/>
						<xsd:element name="revisionCommitted" type="xsd:string"/>
						<xsd:element name="curatorIPAddress" type="xsd:string"/>
					</xsd:sequence>
				</xsd:complexType>
			</xsd:element>
		</xsd:sequence>
	</xsd:complexType>
	<xsd:element name="patient">	
		<xsd:complexType>
			<xsd:sequence>
				<xsd:element name="MDName" type="xsd:string"/>
				<xsd:element name="patientAlias" type="xsd:string"/>
				<xsd:element name="geographicRegion" type="xsd:string"/>
				<xsd:element name="dateEntered" type="xsd:date" minOccurs="0" maxOccurs="1"/>
				<xsd:element name="notes" type="PatientNotes" minOccurs="0" maxOccurs="1"/>
				<xsd:element name="status" type="xsd:string" minOccurs="0"/>
				<xsd:element ref="hivTreatmentHistory" minOccurs="0" maxOccurs="1"/>
				<xsd:element name="CD4Measurements" type="CD4Measurements" minOccurs="0" maxOccurs="1"/>
				<xsd:element name="viralRNAMeasurements" type="viralRNAMeasurements" minOccurs="0" maxOccurs="1"/>
				<xsd:element ref="hivIsolates" minOccurs="0" maxOccurs="unbounded"/>
				<xsd:element name="CD4NadirBeforeTCE" type="xsd:nonNegativeInteger" minOccurs="0" maxOccurs="1"/>
			</xsd:sequence>
			<xsd:attribute name="patientID" type="xsd:nonNegativeInteger"/>
			<xsd:attribute name="action" type="action" default="None"/>				
		</xsd:complexType>
	</xsd:element>
	<xsd:element name="hivTreatmentHistory">
		<xsd:complexType>
			<xsd:sequence>
				<xsd:element name="regimen" minOccurs="0" maxOccurs="unbounded">
					<xsd:complexType>
						<xsd:sequence>
							<xsd:element name="definite" type="xsd:boolean"/>
							<xsd:element name="regimenNumber" type="xsd:nonNegativeInteger" minOccurs="0" maxOccurs="1"/>
							<xsd:element name="regStartDate" type="xsd:date" nillable="true"/>
							<xsd:element name="regStartDateQualifier" type="MatchEnum" nillable="true"/>
							<xsd:element name="regStopDate" type="xsd:date" nillable="true"/>
							<xsd:element name="regStopDateQualifier" type="MatchEnum" nillable="true"/>
							<xsd:element name="duration" type="xsd:nonNegativeInteger" nillable="true"/>
							<xsd:element name="durationDefinite" type="xsd:boolean" minOccurs="0" nillable="true"/>
							<xsd:element name="isTCE" type="xsd:boolean" minOccurs="0" maxOccurs="1"/>
							<xsd:element name="regDrug" maxOccurs="unbounded">
								<xsd:complexType>
									<xsd:sequence>
										<xsd:element name="drugCode" type="xsd:string"/>
										<xsd:element name="drugClass" type="ARTDrugClass" nillable="true"/>
										<xsd:element name="dosage" type="xsd:nonNegativeInteger" nillable="true"/>
										<xsd:element name="frequency" type="xsd:nonNegativeInteger" nillable="true"/>
										<xsd:element name="adherence" type="xsd:string" nillable="true"/>
									</xsd:sequence>
									<!-- 
									type of a drug is either 'Definite' or 'Indefinite'. It indicates whether we know the 
									start/stop date, dosage, frequency etc.	of the drug. 'Indefinite' means that we only
									know that the drug was administered at some point in past but we don't have any other
									information about it.
									-->
								</xsd:complexType>
							</xsd:element>				
						</xsd:sequence>
						<xsd:attribute name="rxHistoryID" type="xsd:nonNegativeInteger"/>
						<xsd:attribute name="action" type="action" default="None"/>
					</xsd:complexType>
				</xsd:element>
			</xsd:sequence>
		</xsd:complexType>
	</xsd:element>
	<xsd:simpleType name="action">
		<xsd:restriction base="xsd:string">
			<xsd:enumeration value="Insert"/>
			<xsd:enumeration value="Update"/>
			<xsd:enumeration value="Delete"/>
			<xsd:enumeration value="None"/>
		</xsd:restriction>
	</xsd:simpleType>

  	<!-- top level 'hivClinicalSequence' element -->
	<xsd:element name="hivIsolates">
		<xsd:complexType>
			<xsd:sequence>
				<xsd:element name="isolateNumber" type="xsd:nonNegativeInteger" minOccurs="0" maxOccurs="1"/>
				<xsd:element name="hivIsolateDate" type="xsd:date" nillable="true"/>
				<xsd:element name="hivIsolateDateMatch" type="MatchEnum" nillable="true"/>
				<xsd:element name="hivIsolateName" type="xsd:string"/>
				<xsd:element name="gene" type="GeneType"/>
				<xsd:element name="hivIsolateType" default="Clinical">
					<xsd:simpleType>
						<xsd:restriction base="xsd:string">
							<xsd:enumeration value="Clinical"/>
							<xsd:enumeration value="Lab"/>
						</xsd:restriction>
					</xsd:simpleType>
				</xsd:element>
				<xsd:element name="hivIsolateDateEntered" type="xsd:date" minOccurs="0" maxOccurs="1"/>
				<xsd:choice minOccurs="0">
					<xsd:element name="clinIsolate" type="ClinicalIsolate"/>
					<xsd:element name="labIsolate" type="LabIsolate"/>
				</xsd:choice>
				<xsd:element name="hivAssignedSubtypes" minOccurs="0">
					<xsd:complexType>
						<xsd:sequence>
							<xsd:element name="assignedSubtype" maxOccurs="unbounded">
								<xsd:complexType>
									<xsd:sequence>
										<xsd:element name="subtype" type="xsd:string"/>
										<xsd:element name="method" type="xsd:string"/>
									</xsd:sequence>
								</xsd:complexType>
							</xsd:element>
						</xsd:sequence>
					</xsd:complexType>
				</xsd:element>
				<xsd:element name="hivHost" type="xsd:string"/>
				<xsd:element name="hivSpecies" nillable="true">
					<xsd:simpleType>
						<xsd:restriction base="xsd:string">
							<xsd:enumeration value="HIV1"/>
							<xsd:enumeration value="HIV2"/>
							<xsd:enumeration value="NHPL"/>
						</xsd:restriction>
					</xsd:simpleType>
				</xsd:element>
				<xsd:element name="filters" default="2ndSite">
					<xsd:simpleType>
						<xsd:restriction base="xsd:string">
							<xsd:enumeration value="2ndSite"/>
							<xsd:enumeration value="ROCont"/>
							<xsd:enumeration value="QA"/>
							<xsd:enumeration value="?Source"/>
							<xsd:enumeration value="Fragment"/>
							<xsd:enumeration value="OnHold"/>
							<xsd:enumeration value="?Duplicates"/>
							<xsd:enumeration value="?Transmitted"/>
							<xsd:enumeration value="Susc"/>
						</xsd:restriction>
					</xsd:simpleType>
				</xsd:element>
				<xsd:element name="literatureReferences" minOccurs="0">
					<xsd:complexType>
						<xsd:sequence>
							<xsd:element name="reference" type="xsd:string" maxOccurs="unbounded"/>
						</xsd:sequence>
					</xsd:complexType>
				</xsd:element>
				<xsd:element name="sequencingReads" type="sequencingReads" minOccurs="0"/>
				<xsd:element name="drugSusceptibilities" minOccurs="0">
					<xsd:complexType>
						<xsd:sequence>
							<xsd:element name="indDrugSusceptibility" maxOccurs="unbounded">
								<xsd:complexType>
									<xsd:sequence>
										<xsd:element name="suscMethod">
											<xsd:complexType>
												<xsd:sequence>
													<xsd:element name="method" type="xsd:string"/>
													<xsd:element name="notes" type="xsd:string" minOccurs="0"/>
												</xsd:sequence>
											</xsd:complexType>
										</xsd:element>
										<xsd:element name="drugName" type="xsd:string"/>
										<xsd:element name="resultMatch" type="MatchEnum"/>
										<xsd:element name="result" type="xsd:float" nillable="true"/>
										<xsd:element name="IC" default="50">
											<xsd:simpleType>
												<xsd:restriction base="xsd:string">
													<xsd:enumeration value="50"/>
													<xsd:enumeration value="90"/>
													<xsd:enumeration value="95"/>
												</xsd:restriction>
											</xsd:simpleType>
										</xsd:element>
										<xsd:element name="foldMatch" type="MatchEnum"/>
										<xsd:element name="fold" type="xsd:float"/>
										<xsd:element name="filter" default="QA">
											<xsd:simpleType>
												<xsd:restriction base="xsd:string">
													<xsd:enumeration value="QA"/>
													<xsd:enumeration value="Technique"/>
													<xsd:enumeration value="AnomResult"/>
													<xsd:enumeration value="NotHIV1"/>
													<xsd:enumeration value="Mixture"/>
													<xsd:enumeration value="NR"/>
												</xsd:restriction>
											</xsd:simpleType>
										</xsd:element>
									</xsd:sequence>
									<xsd:attribute name="suscID" type="xsd:nonNegativeInteger"/>
									<xsd:attribute name="action" type="action" default="None"/>
								</xsd:complexType>
							</xsd:element>
						</xsd:sequence>
					</xsd:complexType>
				</xsd:element>
				<xsd:element name="replication" minOccurs="0">
					<xsd:complexType>
						<xsd:sequence>
							<xsd:element name="replicationCapacity" type="xsd:float" minOccurs="1" maxOccurs="1"/>
							<xsd:element name="rangeLow" type="xsd:float" minOccurs="0" maxOccurs="1"/>
							<xsd:element name="rangeHigh" type="xsd:float" minOccurs="0" maxOccurs="1"/>
						</xsd:sequence>
						<xsd:attribute name="suscRCID" type="xsd:nonNegativeInteger"/>
						<xsd:attribute name="action" type="action" default="None"/>
					</xsd:complexType>
				</xsd:element>
			</xsd:sequence>
			<xsd:attribute name="hivIsolateID" type="xsd:nonNegativeInteger"/>
			<xsd:attribute name="action" type="action" default="None"/>
			<xsd:attribute name="externalID" type="xsd:string"/>
			<xsd:attribute name="accessControl" type="xsd:string"/>
		</xsd:complexType>
	</xsd:element>
	<xsd:complexType name="sequencingReads">
		<xsd:sequence>
			<xsd:element name="indSequencingRead" maxOccurs="unbounded">
				<xsd:complexType>
					<xsd:sequence>	
						<!-- This part of Sequence lists the metadata information that was used to generate mutation information -->
						<xsd:element name="consensusAASeq" type="xsd:string"/>
						<xsd:element name="consensusAASeqSource" type="xsd:string"/>
						<xsd:element name="ATypicalMutationSource" type="SourceInfo" minOccurs="0"/>
						<xsd:element name="PRMutationTypeSource" type="SourceInfo" minOccurs="0"/>
						<xsd:element name="RTMutationTypeSource" type="SourceInfo" minOccurs="0"/>
						<!-- End Metadata information part -->
						<!-- Start Sequence information part-->
						<xsd:element name="accessionID" type="xsd:string" nillable="true"/>
						<xsd:element name="sequenceType" default="Sequence">
							<xsd:simpleType>
								<xsd:restriction base="xsd:string">
									<xsd:enumeration value="Consensus"/>
									<xsd:enumeration value="Sequence"/>
									<xsd:enumeration value="IncompleteSequence"/>
								</xsd:restriction>
							</xsd:simpleType>
						</xsd:element>
						<xsd:element name="cloneName" type="xsd:string" nillable="true"/>
						<xsd:element name="aaStart" type="xsd:integer"/>
						<xsd:element name="aaStop" type="xsd:integer"/>
						<xsd:element name="nucleotideSequence" type="xsd:string" nillable="true"/>
						<xsd:element name="aaSequence" type="xsd:string"/>
						<xsd:element name="numberOfAmbiguityCodons" type="xsd:nonNegativeInteger" nillable="true"/>
						<xsd:element name="numberOfStopCodons" type="xsd:nonNegativeInteger"/>
						<xsd:element name="aaMutations" minOccurs="0">
							<xsd:complexType>
								<xsd:sequence>
									<xsd:element name="indAAMutation" maxOccurs="unbounded">
										<xsd:complexType>
											<xsd:sequence>
												<xsd:element name="position" type="xsd:nonNegativeInteger"/>
												<xsd:element name="aminoAcid" type="xsd:string"/>
												<xsd:element name="mixtures" type="xsd:string"/>
												<xsd:element name="isAtypical" type="xsd:boolean"/>
												<xsd:element name="mutationType" type="MutationType"/>
											</xsd:sequence>
										</xsd:complexType>
									</xsd:element>
								</xsd:sequence>
							</xsd:complexType>
						</xsd:element>
						<xsd:element name="insertions" minOccurs="0">
							<xsd:complexType>
								<xsd:sequence>
									<xsd:element name="indInsertion" maxOccurs="unbounded">
										<xsd:complexType>
											<xsd:sequence>
												<xsd:element name="position" type="xsd:nonNegativeInteger"/>
												<xsd:element name="aminoAcid" type="xsd:string"/>
												<xsd:element name="nucleicAcid" type="xsd:string"/>
											</xsd:sequence>
										</xsd:complexType>
									</xsd:element>
								</xsd:sequence>
							</xsd:complexType>
						</xsd:element>
					</xsd:sequence>
 					<xsd:attribute name="sequenceID" type="xsd:nonNegativeInteger"/>
					<xsd:attribute name="action" type="action" default="None"/>							
				</xsd:complexType>
			</xsd:element>
		</xsd:sequence>
	</xsd:complexType>
	
	<xsd:complexType name="PatientNotes">
		<xsd:sequence>
			<xsd:element name="patientNote" type="PatientNote" minOccurs="1" maxOccurs="unbounded"/>
		</xsd:sequence>	
	</xsd:complexType>
	
	<xsd:complexType name="PatientNote">
		<xsd:sequence>
			<xsd:element name="noteType" type="xsd:string" minOccurs="0" maxOccurs="1"/>
			<xsd:element name="header" type="xsd:string" minOccurs="0" maxOccurs="1"/>
			<xsd:element name="display" type="xsd:boolean" minOccurs="0" maxOccurs="1"/>
			<xsd:element name="text" type="xsd:string" minOccurs="1" maxOccurs="unbounded"/>
		</xsd:sequence>
	</xsd:complexType>
	
	<!--
    legitimate values for anti-retroviral drug types:
      'NRTI' - nucleoside reverse transcriptase inhibitor
      'NNRTI' - non-nucleoside reverse transcriptase inhibitor
      'PI' - protease inhibitor
      'FI' - fusion inhibitor
  -->
	<xsd:simpleType name="ARTDrugClass">
		<xsd:restriction base="xsd:string">
			<xsd:enumeration value="NRTI"/>
			<xsd:enumeration value="NNRTI"/>
			<xsd:enumeration value="PI"/>
			<xsd:enumeration value="FI"/>
		</xsd:restriction>
	</xsd:simpleType>
	
	<!--
    legitimate values for mutation categories for PR and RT genes:
	For RT:
      'NRTI' - Mutation develops drug resistance for nucleoside reverse transcriptase inhibitor
      'NNRTI' - Mutation develops drug resistance for non-nucleoside reverse transcriptase inhibitor
	For PR:
      'Major' - Mutation causes major drug resistance to PIs
      'Minor' - Mutation has a minor effect on drug resistance
  -->
	<xsd:simpleType name="MutationType">
		<xsd:restriction base="xsd:string">
			<xsd:enumeration value="NRTI"/>
			<xsd:enumeration value="NNRTI"/>
			<xsd:enumeration value="Major"/>
			<xsd:enumeration value="Minor"/>
			<xsd:enumeration value="Other"/>
			<xsd:enumeration value=""/>
		</xsd:restriction>
	</xsd:simpleType>
	
	<!--
	    Code for Protease, Reverse Transciptase, and Integrase genes
	-->
	<xsd:simpleType name="GeneType">
		<xsd:restriction base="xsd:string">
			<xsd:enumeration value="PR"/>
			<xsd:enumeration value="RT"/>
			<xsd:enumeration value="IN"/>
		</xsd:restriction>
	</xsd:simpleType>
	
	<!--
	Enumeration for type of values that Match elements (viral load, Date Match etc.) can take.
	-->
	<xsd:simpleType name="MatchEnum">
		<xsd:restriction base="xsd:string">
			<xsd:enumeration value="&gt;"/>
			<xsd:enumeration value="&lt;"/>
			<xsd:enumeration value="&lt;="/>
			<xsd:enumeration value="="/>
			<xsd:enumeration value=""/>
		</xsd:restriction>
	</xsd:simpleType>

	<!--
	This element is used to record the source information that we used to derive data (like Mutations, Atypical Mutation etc)
	-->
	<xsd:complexType name="SourceInfo">
		<xsd:sequence>
			<xsd:element name="URL" type="xsd:string"/>
			<xsd:element name="Version" type="xsd:string"/>
		</xsd:sequence>
	</xsd:complexType>

	<!-- viral load information -->
	<xsd:complexType name="viralRNAMeasurements">
		<xsd:sequence>
			<xsd:element name="indViralRNAMeasurement" maxOccurs="unbounded">
				<xsd:complexType>
					<xsd:sequence>
						<xsd:element name="measurementDate" type="xsd:date" nillable="true"/>
						<xsd:element name="measurementDateQualifier" type="MatchEnum"/>
						<xsd:element name="assayName" type="xsd:string"/>
						<xsd:element name="vLoadMatch" type="MatchEnum"/>
						<xsd:element name="logLoad" type="xsd:float"/>
						<xsd:element name="rawLoad" type="xsd:float"/>
						<xsd:element name="regimenNumber" type="xsd:nonNegativeInteger" minOccurs="0" maxOccurs="1"/>
						<xsd:element name="isolateNumber" type="xsd:nonNegativeInteger" minOccurs="0" maxOccurs="1"/>
						<xsd:element name="rnaNumber" type="xsd:nonNegativeInteger" minOccurs="0" maxOccurs="1"/>
					</xsd:sequence>
					<xsd:attribute name="rnaID" type="xsd:nonNegativeInteger"/>
					<xsd:attribute name="action" type="action" default="None"/>					
				</xsd:complexType>
			</xsd:element>
		</xsd:sequence>
	</xsd:complexType>
	<xsd:complexType name="ClinicalIsolate">
		<xsd:sequence>
			<xsd:element name="source" type="xsd:string" nillable="true"/>
			<xsd:element name="culture" default="Yes">
				<xsd:simpleType>
					<xsd:restriction base="xsd:string">
						<xsd:enumeration value="Yes"/>
						<xsd:enumeration value="No"/>
						<xsd:enumeration value="Unknown"/>
					</xsd:restriction>
				</xsd:simpleType>
			</xsd:element>
			<xsd:element name="seqTemplate" type="xsd:string" nillable="true"/>
			<xsd:element name="cloneMethod" default="None">
				<xsd:simpleType>
					<xsd:restriction base="xsd:string">
						<xsd:enumeration value="Biologic"/>
						<xsd:enumeration value="Consensus"/>
						<xsd:enumeration value="Genomic"/>
						<xsd:enumeration value="Molecular"/>
						<xsd:enumeration value="MultipleMolecular"/>
						<xsd:enumeration value="NA"/>
						<xsd:enumeration value="None"/>
						<xsd:enumeration value="Unknown"/>
					</xsd:restriction>
				</xsd:simpleType>
			</xsd:element>		
			<xsd:element name="seqMethod" default="Unknown">
				<xsd:simpleType>
					<xsd:restriction base="xsd:string">
						<xsd:enumeration value="Unknown"/>
						<xsd:enumeration value="Dideoxy"/>
						<xsd:enumeration value="DNAChip"/>
					</xsd:restriction>
				</xsd:simpleType>
			</xsd:element>
		</xsd:sequence>
	</xsd:complexType>
	<xsd:complexType name="LabIsolate">
		<xsd:sequence>
			<xsd:element name="parent" type="xsd:string" nillable="false"/>
			<xsd:element name="mutationList" type="xsd:string" nillable="true"/>
			<xsd:element name="SDM" default="Yes">
				<xsd:simpleType>
					<xsd:restriction base="xsd:string">
						<xsd:enumeration value="Yes"/>
						<xsd:enumeration value="No"/>
					</xsd:restriction>
				</xsd:simpleType>
			</xsd:element>
			<!-- passage is the drug used for passage, mistakenly used to be a Yes/No field -->
			<xsd:element name="passage" type="xsd:string" nillable="true"/>
		</xsd:sequence>
	</xsd:complexType>
	<!-- CD4 count information -->
	<xsd:complexType name="CD4Measurements">
		<xsd:sequence>
			<xsd:element name="indCD4Measurement" maxOccurs="unbounded">
				<xsd:complexType>
					<xsd:sequence>
						<xsd:element name="measurementDate" type="xsd:date" nillable="true"/>
						<xsd:element name="measurementDateQualifier" type="MatchEnum"/>
						<xsd:element name="count" type="xsd:nonNegativeInteger" nillable="true"/>
						<xsd:element name="regimenNumber" type="xsd:nonNegativeInteger" minOccurs="0" maxOccurs="1"/>
						<xsd:element name="isolateNumber" type="xsd:nonNegativeInteger" minOccurs="0" maxOccurs="1"/>
						<xsd:element name="CD4Number" type="xsd:nonNegativeInteger" minOccurs="0" maxOccurs="1"/>
					</xsd:sequence>
					<xsd:attribute name="CD4ID" type="xsd:nonNegativeInteger"/>
					<xsd:attribute name="action" type="action" default="None"/>					
				</xsd:complexType>
			</xsd:element>
		</xsd:sequence>
	</xsd:complexType>
</xsd:schema>
<!-- version 1.1 schema validated 9/25/2007 http://www.w3.org/2001/03/webdata/xsv -->
