<?xml version="1.0" encoding="UTF-8"?>

<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
	
	<xs:annotation>
	  <xs:documentation xml:lang="en">
	  	Recipe Sharing Protocol Markup Language 1.0 Draft
	  	Copyright 2007 Daniel G. Taylor
	  </xs:documentation>
	</xs:annotation>
	
	<xs:element name="rsmpl">
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="recipe"/>
			</xs:sequence>
			<xs:attribute name="version" type="xs:float" fixed="1.0"/>
		</xs:complexType>
	</xs:element>
	
	<xs:element name="recipe">
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="name"/>
				<xs:element minOccurs="0" ref="description"/>
				<xs:element minOccurs="0" ref="photo"/>
				<xs:element minOccurs="0" ref="tags"/>
				<xs:element minOccurs="0" ref="yield"/>
				<xs:element minOccurs="0" ref="time"/>
				<xs:element minOccurs="0" ref="ingredients"/>
				<xs:element minOccurs="0" ref="directions"/>
			</xs:sequence>
			<xs:attribute name="id" type="xs:nonNegativeInteger"/>
		</xs:complexType>
	</xs:element>
	
	<xs:element name="name" type="xs:string"/>
	
	<xs:element name="description" type="xs:string"/>
	
	<xs:element name="photo">
		<xs:complexType>
			<xs:simpleContent>
				<xs:extension base="xs:string">
					<xs:attribute name="type">
						<xs:simpleType>
							<xs:restriction base="xs:token">
								<xs:enumeration value="jpg"/>
								<xs:enumeration value="png"/>
							</xs:restriction>
						</xs:simpleType>
					</xs:attribute>
				</xs:extension>
			</xs:simpleContent>
		</xs:complexType>
	</xs:element>
	
	<xs:simpleType name="stringList">
		<xs:list itemType="xs:string"/>
	</xs:simpleType>
	
	<xs:element name="tags" type="stringList"/>
	
	<xs:element name="yield">
		<xs:complexType>
			<xs:simpleContent>
				<xs:extension base="positiveInteger">
					<xs:attribute name="type">
						<xs:simpleType>
							<xs:restriction base="xs:token">
								<xs:enumeration value="servings"/>
								<xs:enumeration value="cups"/>
							</xs:restriction>
						</xs:simpleType>
					</xs:attribute>
				</xs:extension>
			</xs:simpleContent>
		</xs:complexType>
	</xs:element>
	
	<xs:element name="prep" type="nonNegativeInteger"/>
	
	<xs:element name="cook" type="nonNegativeInteger"/>
	
	<xs:element name="time">
		<xs:complexType>
			<xs:sequence>
				<xs:element minOccurs="0" ref="prep"/>
				<xs:element minOccurs="0" ref="cook"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	
	<xs:element name="ingredients">
		<xs:complexType>
			<xs:sequence>
				<xs:element maxOccurs="unbounded" ref="ingredientgroup"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	
	<xs:element name="ingredientgroup">
		<xs:complexType>
			<xs:sequence>
				<xs:element maxOccurs="unbounded" ref="ingredient"/>
			</xs:sequence>
			<xs:attribute name="name" type="xs:string"/>
		</xs:complexType>
	</xs:element>
	
	<xs:element name="ingredient">
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="name"/>
				<xs:element ref="amount"/>
				<xs:element minOccurs="0" ref="key"/>
			</xs:sequence>
			<xs:attribute name="optional" type="boolean" default="false"/>
		</xs:complexType>
	</xs:element>
	
	<xs:element name="amount">
		<xs:complexType>
			<xs:simpleContent>
				<xs:extension base="xs:positiveInteger">
					<xs:attribute name="unit" default="other">
						<xs:simpleType>
							<xs:restriction base="xs:token">
								<xs:enumeration value="mg"/>
								<xs:enumeration value="g"/>
								<xs:enumeration value="kg"/>
								<xs:enumeration value="oz"/>
								<xs:enumeration value="lb"/>
								<xs:enumeration value="ml"/>
								<xs:enumeration value="l"/>
								<xs:enumeration value="floz"/>
								<xs:enumeration value="cup"/>
								<xs:enumeration value="pt"/>
								<xs:enumeration value="qt"/>
								<xs:enumeration value="gal"/>
								<xs:enumeration value="tbsp"/>
								<xs:enumeration value="tsp"/>
								<xs:enumeration value="part"/>
								<xs:enumeration value="pinch"/>
								<xs:enumeration value="clove"/>
								<xs:enumeration value="head"/>
								<xs:enumeration value="can"/>
								<xs:enumeration value="bottle"/>
								<xs:enumeration value="other"/>
							</xs:restriction>
						</xs:simpleType>
					</xs:attribute>
				</xs:extension>
			</xs:simpleContent>
		</xs:complexType>
	</xs:element>
	
	<xs:element name="key" type="xs:string"/>
	
	<xs:element name="directions">
		<xs:complexType>
			<xs:sequence>
				<xs:element maxOccurs="unbounded" ref="stepgroup"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	
	<xs:element name="stepgroup">
		<xs:complexType>
			<xs:sequence>
				<xs:element minOccurs="0" maxOccurs="unbounded" ref="step"/>
				<xs:element minOccurs="0" maxOccurs="unbounded" ref="variation"/>
			</xs:sequence>
			<xs:attribute name="name" type="xs:string"/>
		</xs:complexType>
	</xs:element>
	
	<xs:element name="step" type="xs:string"/>

</xs:schema>
