<?xml version="1.0" encoding="UTF-8"?>
<!-- edited with XML Spy v4.3 U (http://www.xmlspy.com) by Matthias Troyer (ETH Zürich) -->
<!--W3C Schema generated by XML Spy v4.0 beta 3 build Aug 24 2001 (http://www.xmlspy.com)-->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
	<xs:element name="LATTICES">
		<xs:complexType>
			<xs:choice minOccurs="0" maxOccurs="unbounded">
				<xs:element ref="LATTICE"/>
				<xs:element ref="UNITCELL"/>
				<xs:element ref="LATTICEGRAPH"/>
				<xs:element ref="GRAPH"/>
				<xs:element ref="FINITELATTICE"/>
			</xs:choice>
		</xs:complexType>
	</xs:element>
	<xs:element name="LATTICE">
		<xs:complexType>
			<xs:sequence minOccurs="0">
				<xs:element name="BASIS" type="VectorsType"/>
			</xs:sequence>
			<xs:attributeGroup ref="NameDimRefAttribute"/>
		</xs:complexType>
	</xs:element>
	<xs:element name="UNITCELL">
		<xs:complexType>
			<xs:choice minOccurs="0" maxOccurs="unbounded">
				<xs:element name="VERTEX" type="VertexType"/>
				<xs:element name="EDGE" type="CellEdgeType"/>
			</xs:choice>
			<xs:attributeGroup ref="EdgesVerticesAttribute"/>
			<xs:attributeGroup ref="NameDimAttribute"/>
		</xs:complexType>
	</xs:element>
	<xs:element name="GRAPH">
		<xs:complexType>
			<xs:sequence>
				<xs:sequence minOccurs="0" maxOccurs="unbounded">
					<xs:element name="VERTEX" type="VertexType"/>
				</xs:sequence>
				<xs:sequence minOccurs="0" maxOccurs="unbounded">
					<xs:element name="EDGE" type="EdgeType"/>
				</xs:sequence>
			</xs:sequence>
			<xs:attribute name="name" type="xs:string" use="optional"/>
			<xs:attributeGroup ref="EdgesVerticesAttribute"/>
		</xs:complexType>
	</xs:element>
	<xs:element name="FINITELATTICE">
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="LATTICE"/>
				<xs:choice maxOccurs="unbounded">
					<xs:element name="EXTENT" type="ExtentType"/>
					<xs:element name="BOUNDARY" type="BoundaryType"/>
				</xs:choice>
			</xs:sequence>
			<xs:attributeGroup ref="NameDimRefAttribute"/>
		</xs:complexType>
	</xs:element>
	<xs:element name="LATTICEGRAPH">
		<xs:complexType>
			<xs:sequence>
				<xs:choice>
					<xs:element ref="LATTICE"/>
					<xs:element ref="FINITELATTICE"/>
				</xs:choice>
				<xs:element ref="UNITCELL"/>
			</xs:sequence>
			<xs:attributeGroup ref="NameDimAttribute"/>
		</xs:complexType>
	</xs:element>
	<xs:complexType name="VertexCellRefType">
		<xs:attribute name="vertex" type="xs:nonNegativeInteger" use="required"/>
		<xs:attribute name="offset" type="numberlist" use="optional"/>
	</xs:complexType>
	<xs:complexType name="BoundaryType">
		<xs:attribute name="dimension" type="xs:nonNegativeInteger" use="optional"/>
		<xs:attribute name="type" type="boundaryconditions" use="required"/>
	</xs:complexType>
	<xs:complexType name="ExtentType">
		<xs:attribute name="dimension" type="xs:nonNegativeInteger" use="optional"/>
		<xs:attribute name="size" type="numberlist" use="optional"/>
		<xs:attribute name="parameter" type="xs:string" use="optional"/>
	</xs:complexType>
	<xs:complexType name="CellEdgeType">
		<xs:all>
			<xs:element name="SOURCE" type="VertexCellRefType"/>
			<xs:element name="TARGET" type="VertexCellRefType"/>
		</xs:all>
		<xs:attributeGroup ref="TypeNumberAttributes"/>
	</xs:complexType>
	<xs:complexType name="VertexType">
		<xs:sequence minOccurs="0">
			<xs:element name="COORDINATE" type="numberlist" minOccurs="0"/>
		</xs:sequence>
		<xs:attributeGroup ref="TypeNumberAttributes"/>
	</xs:complexType>
	<xs:complexType name="VectorsType">
		<xs:sequence minOccurs="0" maxOccurs="unbounded">
			<xs:element name="VECTOR" type="numberlist"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="EdgeType">
		<xs:attributeGroup ref="TypeNumberAttributes"/>
		<xs:attribute name="source" type="xs:nonNegativeInteger" use="required"/>
		<xs:attribute name="target" type="xs:nonNegativeInteger" use="required"/>
	</xs:complexType>
	<xs:simpleType name="numberlist">
		<xs:list itemType="xs:double"/>
	</xs:simpleType>
	<xs:simpleType name="boundaryconditions">
		<xs:restriction base="xs:string">
			<xs:enumeration value="open"/>
			<xs:enumeration value="periodic"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:attributeGroup name="TypeNumberAttributes">
		<xs:attribute name="type" type="xs:nonNegativeInteger" use="optional" default="0"/>
		<xs:attribute name="id" type="xs:nonNegativeInteger" use="optional"/>
	</xs:attributeGroup>
	<xs:attributeGroup name="EdgesVerticesAttribute">
		<xs:attribute name="vertices" type="xs:nonNegativeInteger" use="optional"/>
		<xs:attribute name="edges" type="xs:nonNegativeInteger" use="optional"/>
	</xs:attributeGroup>
	<xs:attributeGroup name="NameDimAttribute">
		<xs:attribute name="name" type="xs:string" use="optional"/>
		<xs:attribute name="dimension" type="xs:nonNegativeInteger" use="optional"/>
	</xs:attributeGroup>
	<xs:attributeGroup name="NameDimRefAttribute">
		<xs:attributeGroup ref="NameDimAttribute"/>
		<xs:attribute name="ref" type="xs:string" use="optional"/>
	</xs:attributeGroup>
</xs:schema>

