<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
	targetNamespace="http://www.ivoa.net/xml/theory/Simulation/v0.1"
	xmlns="http://www.ivoa.net/xml/theory/Simulation/v0.1"
	xmlns:res="http://www.ivoa.net/xml/VOResource/v1.0"
	elementFormDefault="qualified">
	<xs:import namespace="http://www.ivoa.net/xml/VOResource/v1.0"
		schemaLocation="http://www.ivoa.net/xml/VOResource/VOResource-v1.0.xsd" />

	<xs:complexType name="Group">
		<xs:attribute name="id" type="xs:ID" use="optional" />
		<xs:attribute name="idref" type="xs:IDREF" use="optional" />
	</xs:complexType>

	<xs:complexType name="Quantity">
		<xs:simpleContent>
			<xs:extension base="xs:string">
				<xs:attribute name="ucd" type="xs:string" />
				<xs:attribute name="unit" type="xs:string" />
			</xs:extension>
		</xs:simpleContent>
	</xs:complexType>

	<xs:complexType name="GroupedQuantity">
		<xs:complexContent>
			<xs:extension base="Group">
				<xs:attribute name="ucd" type="xs:string" />
				<xs:attribute name="unit" type="xs:string" />
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>

	<xs:simpleType name="Cardinality">
		<xs:annotation>
			<xs:documentation>
				List of valid values for indicating the cardinality of a
				property. Values have usual meaning.
			</xs:documentation>
		</xs:annotation>
		<xs:restriction base="xs:string">
			<xs:enumeration value="0..1" />
			<xs:enumeration value="1" />
			<xs:enumeration value="0..*" />
			<xs:enumeration value="1..*" />
		</xs:restriction>
	</xs:simpleType>

	<xs:simpleType name="Datatype">
		<xs:annotation>
			<xs:documentation>
				List of primitive datatypes that a parameter can have.
				These are software datatypes (i.e. float and double iso
				only real).
			</xs:documentation>
		</xs:annotation>
		<xs:restriction base="xs:string">
			<xs:enumeration value="boolean" />
			<xs:enumeration value="complex" />
			<xs:enumeration value="datetime" />
			<xs:enumeration value="double" />
			<xs:enumeration value="float" />
			<xs:enumeration value="int" />
			<xs:enumeration value="long" />
			<xs:enumeration value="rational" />
			<xs:enumeration value="short" />
			<xs:enumeration value="string" />
		</xs:restriction>
	</xs:simpleType>

	<xs:complexType name="CharacterizationAxisType">
		<xs:complexContent>
			<xs:extension base="GroupedQuantity">
				<xs:sequence>
					<xs:element name="name" type="xs:string" />
					<xs:element name="datatype" type="Datatype" />
					<xs:element name="cardinality" type="Cardinality" />
					<xs:element name="description" type="xs:string"
						minOccurs="0" maxOccurs="1" />
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>


	<xs:complexType name="CharacterizationType">
		<xs:sequence>
			<xs:element name="lowerBound" type="Quantity" minOccurs="0" />
			<xs:element name="upperBound" type="Quantity" minOccurs="0" />
			<xs:element name="nominalValue" type="Quantity"
				minOccurs="0" />
			<xs:element name="min" type="Quantity" minOccurs="0" />
			<xs:element name="max" type="Quantity" minOccurs="0" />
			<xs:element name="mean" type="Quantity" minOccurs="0" />
			<xs:element name="standardDeviation" type="Quantity"
				minOccurs="0" />
		</xs:sequence>
		<xs:attribute name="charaxis" type="xs:IDREF" use="required" />
	</xs:complexType>

	<xs:complexType name="SnapshotType">
		<xs:sequence>
			<xs:element name="publisherDID" type="res:IdentifierURI" />
			<xs:element name="PhysicalTime" type="SnapshotTimeType"
				minOccurs="0" maxOccurs="unbounded" />
			<xs:element name="SimulationTime" type="SnapshotTimeType"
				minOccurs="0" maxOccurs="unbounded" />
			<xs:element name="Char" type="CharacterizationType"
				minOccurs="0" maxOccurs="unbounded" />
		</xs:sequence>
	</xs:complexType>

	<xs:complexType name="ProgramType">
		<xs:complexContent>
			<xs:extension base="Group">
				<xs:sequence>
					<xs:element name="Name" type="xs:string"
						maxOccurs="1" minOccurs="1" />
					<xs:element name="Version" type="xs:string"
						maxOccurs="1" minOccurs="0">
					</xs:element>
					<xs:element name="Reference" type="xs:anyURI"
						maxOccurs="1" minOccurs="0">
					</xs:element>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>

	<xs:complexType name="SimulationType">
		<xs:complexContent>
			<xs:extension base="res:Resource">
				<xs:sequence>
					<xs:element name="Program" type="ProgramType"
						maxOccurs="unbounded" minOccurs="0" />
					<xs:element name="CharAxis"
						type="CharacterizationAxisType" minOccurs="0"
						maxOccurs="unbounded" />
					<xs:element name="SimulationRun" type="RunType"
						minOccurs="0" maxOccurs="unbounded" />
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>

	<xs:complexType name="ParameterType">
		<xs:simpleContent>
			<xs:extension base="xs:string">
				<xs:attribute name="name" type="xs:string" />
				<xs:attribute name="reference" type="xs:anyURI" />
				<xs:attribute name="ucd" type="xs:string" />
				<xs:attribute name="unit" type="xs:string" />
			</xs:extension>
		</xs:simpleContent>
	</xs:complexType>

	<xs:complexType name="SnapshotTimeType">
		<xs:simpleContent>
			<xs:extension base="xs:string">
				<xs:attribute name="name" type="xs:string" />
				<xs:attribute name="ucd" type="xs:string" />
				<xs:attribute name="unit" type="xs:string" />
			</xs:extension>
		</xs:simpleContent>
	</xs:complexType>

	<xs:complexType name="RunType">
		<xs:sequence>
			<xs:element name="publisherDID" type="res:IdentifierURI" />
			<xs:element name="Parameter" type="ParameterType"
				minOccurs="0" maxOccurs="unbounded" />
			<xs:element name="InputSnapshot" type="res:IdentifierURI"
				minOccurs="0" maxOccurs="unbounded" />

			<xs:element name="Snaphot" type="SnapshotType" minOccurs="0"
				maxOccurs="unbounded" />
		</xs:sequence>
		<xs:attribute name="program" type="xs:IDREF" />
	</xs:complexType>

	<xs:element name="Simulation" type="SimulationType" />

</xs:schema>
