<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

	<!-- Editor: Thomas Nicolai, VSP, Berlin Institute of Technology (TU Berlin) -->
	<!-- This xml schema contains xml definitions used for MATSim4UrbanSim -->
	
	<!-- root element -->
	<xs:element name="matsim_config" type="matsim_configType"/>
	<!-- root elemet definition -->
	<xs:complexType name="matsim_configType">
		<xs:sequence>
			<xs:element name="config" type="configType" minOccurs="1" 
				maxOccurs="1"/>
			<xs:element name="matsim4urbansim" type="matsim4urbansimType" minOccurs="1" 
				maxOccurs="1"/>
		</xs:sequence>
	</xs:complexType>
	
	<!-- MATSim to UrbanSim integration element definition -->
	<xs:complexType name="matsim4urbansimType">
		<xs:sequence>
			<xs:element name="urbansimParameter" type="urbansimParameterType" 
				minOccurs="1" maxOccurs="1"/>
			<xs:element name="matsim4urbansimContoler" type="matsim4urbansimContolerType" 
				minOccurs="1" maxOccurs="1"/>
			<xs:element name="accessibilityParameter" type="accessibilityParameterType" 
				minOccurs="1" maxOccurs="1"/>
		</xs:sequence>
	</xs:complexType>
	
	<!-- MATSim config element definition -->
	<xs:complexType name="configType">
		<xs:sequence>
		    <xs:element name="matsim_config" type="fileType" minOccurs="1" 
				maxOccurs="1"/>
			<xs:element name="network" type="fileType" minOccurs="1" 
				maxOccurs="1"/>
			<xs:element name="inputPlansFile" type="inputPlansFileType" minOccurs="1" 
				maxOccurs="1"/>
			<xs:element name="hotStartPlansFile" type="inputPlansFileType" minOccurs="1" 
				maxOccurs="1"/>
			<xs:element name="controler" type="controlerType" minOccurs="1" 
				maxOccurs="1"/>
			<xs:element name="planCalcScore" type="planCalcScoreType" 
				minOccurs="1" maxOccurs="1"/>
			<xs:element name="strategy" type="strategyType" 
				minOccurs="1" maxOccurs="1"/>
		</xs:sequence>
	</xs:complexType>
	
	<!-- file element definition -->
	<xs:complexType name="fileType">
		<xs:sequence>
			<xs:element name="inputFile" type="xs:token"/>
		</xs:sequence>
	</xs:complexType>
	
	<!-- input plans file element definition -->
	<xs:complexType name="inputPlansFileType">
		<xs:sequence>
			<xs:element name="inputFile" type="xs:token"/>
		</xs:sequence>
	</xs:complexType>
	
	<!-- controler element definition -->
	<xs:complexType name="controlerType">
		<xs:sequence>
			<xs:element name="firstIteration" type="xs:nonNegativeInteger"/>
			<xs:element name="lastIteration" type="xs:nonNegativeInteger"/>
		</xs:sequence>
	</xs:complexType>
	
	<!-- planCalcScore element definition -->
	<xs:complexType name="planCalcScoreType">
		<xs:sequence>
			<xs:element name="activityType_0" type="xs:token"/>
			<xs:element name="activityType_1" type="xs:token"/>
			<xs:element name="homeActivityTypicalDuration" type="xs:nonNegativeInteger"/>
			<xs:element name="workActivityTypicalDuration" type="xs:nonNegativeInteger"/>
			<xs:element name="workActivityOpeningTime" type="xs:nonNegativeInteger"/>
			<xs:element name="workActivityLatestStartTime" type="xs:nonNegativeInteger"/>
		</xs:sequence>
	</xs:complexType>
	
	<!-- strategy element definition -->
	<xs:complexType name="strategyType">
		<xs:sequence>
			<xs:element name="maxAgentPlanMemorySize" type="xs:nonNegativeInteger"/>
			<xs:element name="timeAllocationMutatorProbability" type="xs:double"/>
			<xs:element name="changeExpBetaProbability" type="xs:double"/>
			<xs:element name="reRouteDijkstraProbability" type="xs:double"/>
		</xs:sequence>
	</xs:complexType>
	
	<!-- urbansimParameter element definition -->
	<xs:complexType name="urbansimParameterType">
		<xs:sequence>
			<xs:element name="populationSamplingRate" type="xs:double"/>
			<xs:element name="year" type="xs:nonNegativeInteger"/>
			<xs:element name="opusHome" type="xs:token"/>
			<xs:element name="opusDataPath" type="xs:token"/>
			<xs:element name="matsim4opus" type="xs:token"/>
			<xs:element name="matsim4opusConfig" type="xs:token"/>
			<xs:element name="matsim4opusOutput" type="xs:token"/>
			<xs:element name="matsim4opusTemp" type="xs:token"/>
			<xs:element name="isTestRun" type="xs:boolean"/>
			<xs:element name="randomLocationDistributionRadiusForUrbanSimZone" type="xs:double"/>
			<xs:element name="testParameter" type="xs:token"/>
			<xs:element name="backupRunData" type="xs:boolean"/>
		</xs:sequence>
	</xs:complexType>
	
	<!-- matsim4urbansimContoler element definition -->
	<xs:complexType name="matsim4urbansimContolerType">
		<xs:sequence>
			<xs:element name="zone2zoneImpedance" type="xs:boolean"/>
			<xs:element name="agentPerformance" type="xs:boolean"/>
			<xs:element name="zoneBasedAccessibility" type="xs:boolean"/>
			<xs:element name="cellBasedAccessibility" type="xs:boolean"/>
			<xs:element name="cellSizeCellBasedAccessibility" type="xs:nonNegativeInteger"/>
			<xs:element name="shapeFileCellBasedAccessibility" type="fileType" minOccurs="1" 
				maxOccurs="1"/>
			<xs:element name="useCustomBoundingBox" type="xs:boolean"/>
			<xs:element name="boundingBoxTop" type="xs:double"/>
			<xs:element name="boundingBoxLeft" type="xs:double"/>
			<xs:element name="boundingBoxRight" type="xs:double"/>
			<xs:element name="boundingBoxBottom" type="xs:double"/>
		</xs:sequence>
	</xs:complexType>
	
	<!-- accessibilityParameter element definition -->
	<xs:complexType name="accessibilityParameterType">
		<xs:sequence>
			<xs:element name="accessibilityDestinationSamplingRate" type="xs:double"/>
			<xs:element name="useLogitScaleParameterFromMATSim" type="xs:boolean"/>
			<xs:element name="useCarParameterFromMATSim" type="xs:boolean"/>
			<xs:element name="useWalkParameterFromMATSim" type="xs:boolean"/>
			<xs:element name="useRawSumsWithoutLn" type="xs:boolean"/>
			<xs:element name="logitScaleParameter" type="xs:double"/>
			<xs:element name="betaCarTravelTime" type="xs:double"/>
			<xs:element name="betaCarTravelTimePower2" type="xs:double"/>
			<xs:element name="betaCarLnTravelTime" type="xs:double"/>
			<xs:element name="betaCarTravelDistance" type="xs:double"/>
			<xs:element name="betaCarTravelDistancePower2" type="xs:double"/>
			<xs:element name="betaCarLnTravelDistance" type="xs:double"/>
			<xs:element name="betaCarTravelCost" type="xs:double"/>
			<xs:element name="betaCarTravelCostPower2" type="xs:double"/>
			<xs:element name="betaCarLnTravelCost" type="xs:double"/>
			<xs:element name="betaWalkTravelTime" type="xs:double"/>
			<xs:element name="betaWalkTravelTimePower2" type="xs:double"/>
			<xs:element name="betaWalkLnTravelTime" type="xs:double"/>
			<xs:element name="betaWalkTravelDistance" type="xs:double"/>
			<xs:element name="betaWalkTravelDistancePower2" type="xs:double"/>
			<xs:element name="betaWalkLnTravelDistance" type="xs:double"/>
			<xs:element name="betaWalkTravelCost" type="xs:double"/>
			<xs:element name="betaWalkTravelCostPower2" type="xs:double"/>
			<xs:element name="betaWalkLnTravelCost" type="xs:double"/>
		</xs:sequence>
	</xs:complexType>
	
</xs:schema>