<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:data="http://localhost/complex" elementFormDefault="qualified" targetNamespace="http://localhost/complex">
  
   	<!-- TYP -->
	<xsd:simpleType name="typ_sprache">
		<xsd:restriction base="xsd:string">
			<xsd:enumeration value="deu" />
			<xsd:enumeration value="eng" />
		</xsd:restriction>
	</xsd:simpleType>
	
	<xsd:simpleType name="typ_einheit">
		<xsd:restriction base="xsd:string">
			<xsd:enumeration value="kg" />
			<xsd:enumeration value="stueck" />
			<xsd:enumeration value="liter" />
		</xsd:restriction>
	</xsd:simpleType>
	
	<xsd:simpleType name="typ_waehrung">
		<xsd:restriction base="xsd:string">
			<xsd:enumeration value="ATS" />
			<xsd:enumeration value="EUR" />
		</xsd:restriction>
	</xsd:simpleType>
	
	<xsd:simpleType name="typ_gebiet">
		<xsd:restriction base="xsd:string">
			<xsd:enumeration value="wald" />
			<xsd:enumeration value="wiese" />
			<xsd:enumeration value="berg" />
			<xsd:enumeration value="garten" />
			<xsd:enumeration value="geschaeft" />
		</xsd:restriction>
	</xsd:simpleType>
	
	<xsd:simpleType name="typ_version">
		<xsd:restriction base="xsd:string">
			<xsd:enumeration value="1.0" />
		</xsd:restriction>
	</xsd:simpleType>
	
	
	<!-- ELEMENT -->
	<xsd:element name="base">
		<xsd:complexType>
			<xsd:sequence>
				<xsd:element ref="data:base-header"/>
				<xsd:element ref="data:base-zutaten"/>
				<xsd:element ref="data:base-gerichte"/>
			</xsd:sequence>
			<xsd:attribute name="version" type="data:typ_version" use="required"/>
		</xsd:complexType>
		<xsd:unique name="key_zutatname">
			<xsd:selector xpath="data:base-zutaten/data:zutat/data:zutat-name" />
			<xsd:field xpath="." />
		</xsd:unique> 
		<xsd:keyref name="keyref_verboten" refer="data:key_zutatname">
			<xsd:selector xpath="data:base-zutaten/data:zutat/data:zutat-verboten/data:verboten" />
			<xsd:field xpath="." />
		</xsd:keyref>
		<xsd:keyref name="keyref_rohstoff" refer="data:key_zutatname">
			<xsd:selector xpath="data:base-gerichte/data:gericht/data:gericht-zutaten/data:rohstoff" />
			<xsd:field xpath="." />
		</xsd:keyref>
	</xsd:element>
  
	<xsd:element name="base-header">
		<xsd:complexType>
			<xsd:sequence>
				<xsd:element name="preiseinheit" type="data:typ_waehrung"/>
				<xsd:element name="sprache" type="data:typ_sprache"/>
			</xsd:sequence>
		</xsd:complexType>
	</xsd:element>
  
	<xsd:element name="base-zutaten">
		<xsd:complexType>
			<xsd:sequence>
				<xsd:element ref="data:zutat" maxOccurs="unbounded"/>
			</xsd:sequence>
		</xsd:complexType>
	</xsd:element>

	<xsd:element name="zutat">
		<xsd:complexType>
			<xsd:sequence>
				<xsd:element name="zutat-name" type="xsd:string" />
				<xsd:element name="zutat-beschreibung" type="xsd:string" minOccurs="0"/>
				<xsd:element ref="data:zutat-preis"/>
				<xsd:element ref="data:zutat-gebiet" minOccurs="0"/>
				<xsd:element ref="data:zutat-verboten" minOccurs="0"/>
				<xsd:element ref="data:zutat-spezial" minOccurs="0" maxOccurs="unbounded"/>
			</xsd:sequence>
		</xsd:complexType>
		
	</xsd:element>

	<xsd:element name="zutat-preis">
		<xsd:complexType>
			<xsd:sequence>
				<xsd:element name="preis" type="xsd:decimal" />
				<xsd:element name="einheit" type="data:typ_einheit"/>
				<xsd:element name="menge" type="xsd:positiveInteger"/>
				<xsd:element name="preiseinheit" type="data:typ_waehrung" minOccurs="0"/>
			</xsd:sequence>
		</xsd:complexType>
	</xsd:element>
	
	<xsd:element name="zutat-gebiet">
	    <xsd:complexType>
			<xsd:sequence>
				<xsd:element name="gebiet" type="data:typ_gebiet" maxOccurs="unbounded"/>
			</xsd:sequence>
		</xsd:complexType>
	</xsd:element>

	<xsd:element name="zutat-verboten">
		<xsd:complexType>
			<xsd:sequence>
				<xsd:element name="verboten" type="xsd:string" maxOccurs="unbounded"/>
			</xsd:sequence>
		</xsd:complexType>
	</xsd:element>

	<xsd:element name="zutat-spezial">
		<xsd:complexType>
			<xsd:attribute name="name" type="xsd:string" use="required" />
			<xsd:attribute name="wert" type="xsd:string" use="required"/>
		</xsd:complexType>
	</xsd:element>

	<xsd:element name="base-gerichte">
		<xsd:complexType>
			<xsd:sequence>
				<xsd:element ref="data:gericht" maxOccurs="unbounded" />
			</xsd:sequence>
		</xsd:complexType>
		<xsd:unique name="unique_gerichtname">
			<xsd:selector xpath="data:gericht/data:gericht-name" />
			<xsd:field xpath="." />
		</xsd:unique>
	</xsd:element>

	<xsd:element name="gericht">
		<xsd:complexType>
			<xsd:sequence>
				<xsd:element name="gericht-name" type="xsd:string" />
				<xsd:element name="gericht-beschreibung" type="xsd:string" minOccurs="0"/>
				<xsd:element ref="data:gericht-rohstoff"/>
			</xsd:sequence>
		</xsd:complexType>
	</xsd:element>

	<xsd:element name="gericht-rohstoff">
		<xsd:complexType>
			<xsd:sequence>
				<xsd:element ref="data:rohstoff" maxOccurs="unbounded"/>
			</xsd:sequence>
		</xsd:complexType>
	</xsd:element>
	
	<xsd:element name="rohstoff">
		<xsd:complexType>
			<xsd:simpleContent>
				<xsd:extension base="xsd:string">
					<xsd:attribute name="menge" type="xsd:positiveInteger" use="required"/>
				</xsd:extension>
			</xsd:simpleContent>
		</xsd:complexType>
	</xsd:element>

</xsd:schema>
