<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" xmlns:dc="http://purl.org/dc/terms/" xmlns:r="http://www.formatdata.com/recipeml">
  <xs:import namespace="http://purl.org/dc/terms/" schemaLocation="dc.xsd"/>
  <xs:import namespace="http://www.formatdata.com/recipeml" schemaLocation="r.xsd"/>
  <xs:element name="recipes">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="recipe"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="recipe">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="dc:title"/>
        <xs:element ref="dc:alternative"/>
        <xs:element ref="DishCreator"/>
        <xs:element ref="DishName"/>
        <xs:element ref="GeographicOrigin"/>
        <xs:element ref="MealCategory"/>
        <xs:element ref="DishCategory"/>
        <xs:element ref="DistinguishingNote"/>
        <xs:element ref="dc:description"/>
        <xs:element maxOccurs="unbounded" ref="ServeWithDishes"/>
        <xs:element ref="DifficultyCategory"/>
        <xs:element ref="r:preptime"/>
        <xs:element maxOccurs="unbounded" ref="MainIngredient"/>
        <xs:element ref="Ingredients"/>
        <xs:element ref="RecipeSteps"/>
        <xs:element ref="Yield"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="DishCreator" type="xs:string"/>
  <xs:element name="DishName" type="xs:string"/>
  <xs:element name="GeographicOrigin" type="xs:string"/>
  <xs:element name="MealCategory" type="xs:NCName"/>
  <xs:element name="DishCategory" type="xs:string"/>
  <xs:element name="DistinguishingNote" type="xs:string"/>
  <xs:element name="ServeWithDishes" type="xs:string"/>
  <xs:element name="DifficultyCategory" type="xs:NCName"/>
  <xs:element name="PrepTimeActive" type="xs:NMTOKEN"/>
  <xs:element name="PrepTimeInactive" type="xs:NMTOKEN"/>
  <xs:element name="MainIngredient" type="xs:string"/>
  <xs:element name="Ingredients">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" ref="IngredientItem"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="IngredientItem">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="Ingredient"/>
        <xs:element minOccurs="0" ref="AlternativeIngredient"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="Ingredient">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="IngredientName"/>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="IngredientDescriptor"/>
        <xs:element ref="Amount"/>
        <xs:element minOccurs="0" ref="IngredientPrePrep"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="AlternativeIngredient">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="IngredientName"/>
        <xs:element minOccurs="0" ref="IngredientDescriptor"/>
        <xs:element ref="Amount"/>
        <xs:element ref="IngredientPrePrep"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="RecipeSteps">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" ref="RecipeStep"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="RecipeStep">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="DefaultStep"/>
        <xs:element minOccurs="0" ref="AlternativeStep"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="DefaultStep">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="Narrative"/>
        <xs:choice>
          <xs:element ref="Action"/>
          <xs:element ref="Transformation"/>
        </xs:choice>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="Transformation">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="TransformationName"/>
        <xs:element minOccurs="0" ref="TransformationTemp"/>
        <xs:element ref="TransformationDuration"/>
        <xs:sequence minOccurs="0">
          <xs:element ref="TransformationDurationOffset"/>
          <xs:element ref="TransformationCeaseSign"/>
        </xs:sequence>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="TransformationName" type="xs:NCName"/>
  <xs:element name="TransformationTemp">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="TemperatureUnit"/>
        <xs:element ref="TemperatureQuantity"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="TemperatureUnit" type="xs:NCName"/>
  <xs:element name="TemperatureQuantity" type="xs:integer"/>
  <xs:element name="TransformationDuration" type="xs:NMTOKEN"/>
  <xs:element name="TransformationDurationOffset" type="xs:NMTOKEN"/>
  <xs:element name="TransformationCeaseSign" type="xs:string"/>
  <xs:element name="AlternativeStep">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="Narrative"/>
        <xs:element ref="Action"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="Yield">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="YieldQuantity"/>
        <xs:element ref="YieldUnit"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="YieldQuantity" type="xs:integer"/>
  <xs:element name="YieldUnit" type="xs:NCName"/>
  <xs:element name="IngredientName" type="xs:string"/>
  <xs:element name="IngredientDescriptor" type="xs:NCName"/>
  <xs:element name="Amount">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="IngredientAmountQuantity"/>
        <xs:choice>
          <xs:element ref="IngredientAmountDescriptor"/>
          <xs:element ref="IngredientAmountUnit"/>
        </xs:choice>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="IngredientAmountQuantity" type="xs:decimal"/>
  <xs:element name="IngredientAmountDescriptor" type="xs:NCName"/>
  <xs:element name="IngredientAmountUnit" type="xs:NCName"/>
  <xs:element name="IngredientPrePrep" type="xs:NCName"/>
  <xs:element name="Narrative" type="xs:string"/>
  <xs:element name="Action">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="ActionName"/>
        <xs:element minOccurs="0" ref="ActionModifier"/>
        <xs:sequence minOccurs="0">
          <xs:element ref="ActionDuration"/>
          <xs:element ref="ActionDurationOffset"/>
        </xs:sequence>
        <xs:element minOccurs="0" ref="ActionCeaseSign"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="ActionName" type="xs:string"/>
  <xs:element name="ActionModifier" type="xs:string"/>
  <xs:element name="ActionDuration" type="xs:NMTOKEN"/>
  <xs:element name="ActionDurationOffset" type="xs:NMTOKEN"/>
  <xs:element name="ActionCeaseSign" type="xs:NCName"/>
</xs:schema>
