<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
	<xs:annotation>
		<xs:documentation> The master schema document for AML draft 0.3.4.
			It includes the sub schemas necessary for the full specification. </xs:documentation>
	</xs:annotation>
	<xs:include schemaLocation="beamparameters.xsd"/>
	<xs:include schemaLocation="initial.xsd"/>
	<xs:include schemaLocation="expressions.xsd"/>
	<xs:include schemaLocation="sectors.xsd"/>

	<xs:element name="laboratory">
		<xs:annotation>
			<xs:documentation>The root element of the AML description </xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="constant" minOccurs="0" maxOccurs="unbounded"/>
				<xs:element ref="doc" minOccurs="0" maxOccurs="1"/>
				<xs:element ref="parameter" minOccurs="0" maxOccurs="1"/>
				<xs:element ref="machine" minOccurs="1" maxOccurs="unbounded"/>
			</xs:sequence>
			<xs:attribute name="name" type="xs:string"/>
		</xs:complexType>
		<xs:unique name="labName">
			<xs:selector xpath="./laboratory"/>
			<xs:field xpath="@name"/>
		</xs:unique>
	</xs:element>
	<xs:element name="machine">
		<xs:annotation>
			<xs:documentation>This defines an actual machine</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="lattice_name" minOccurs="1"/>
				<xs:element ref="layout_name" minOccurs="1"/>
				<xs:element ref="constant" minOccurs="0" maxOccurs="unbounded"/>
				<xs:element ref="initial" minOccurs="0" maxOccurs="1"/>
				<xs:element ref="beam" minOccurs="1" maxOccurs="1"/>
				<xs:element ref="sector" minOccurs="0" maxOccurs="unbounded"/>
				<xs:element ref="element" minOccurs="0" maxOccurs="unbounded"/>
			</xs:sequence>
		</xs:complexType>
		<xs:unique name="sectorName">
			<xs:selector xpath="./sector"/>
			<xs:field xpath="@name"/>
		</xs:unique>
		<xs:unique name="constantName">
			<xs:selector xpath="./constant"/>
			<xs:field xpath="@name"/>
		</xs:unique>
		<xs:unique name="layoutName">
			<xs:selector xpath="./layout_name"/>
			<xs:field xpath="@name"/>
		</xs:unique>
		<xs:unique name="latticeName">
			<xs:selector xpath="./lattice_name"/>
			<xs:field xpath="@name"/>
		</xs:unique>
	</xs:element>
	<xs:element name="lattice_name" type="xs:string"/>
	<xs:element name="layout_name" type="xs:string"/>
	<xs:element name="doc">
		<xs:complexType>
			<xs:simpleContent>
				<xs:extension base="xs:string">
					<xs:attribute name="author" type="xs:string"/>
					<xs:attribute name="date" type="xs:date"/>
					<xs:attribute name="href" type="xs:anyURI"/>
				</xs:extension>
			</xs:simpleContent>
		</xs:complexType>
	</xs:element>
	<xs:element name="parameter">
		<xs:annotation>
			<xs:documentation>Defines some general parameters</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="ran_seed" minOccurs="0" maxOccurs="1"/>
				<xs:element ref="taylor_order" minOccurs="0" maxOccurs="1"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:element name="ran_seed">
		<xs:complexType>
			<xs:attribute name="value" type="xs:integer"/>
		</xs:complexType>
	</xs:element>
	<xs:element name="taylor_order">
		<xs:complexType>
			<xs:attribute name="value" type="arglist"/>
		</xs:complexType>
	</xs:element>
</xs:schema>
