# A vegan adaptation of a classic bechamel: the recipe's cow's milk is swapped for oat milk.
# The substitution specification has as its parts the recipe it amends, the two transformations
# it prescribes, the objective of the swap, and the three conditions under which it holds.
# One individual of every class the pattern declares, wired up as its restrictions prescribe.

@prefix foodingredientsubstitutes: <http://semantic.cs.put.poznan.pl/ontologies/food_ingredient_substitutes#> .
@prefix ex: <https://w3id.org/ontoboard/example/food-recipe-ingredient-substitution-ontology-design-pattern#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .

ex:OatMilkForCowsMilkInBechamel a owl:NamedIndividual , <http://semantic.cs.put.poznan.pl/ontologies/food_ingredient_substitutes#food_recipe_ingredient_substitution_(specification)> ;
    rdfs:label "swap oat milk for cow's milk in the bechamel" ;
    foodingredientsubstitutes:has_part ex:BechamelRecipe ,
        ex:ReplaceCowsMilkWithOatMilk ,
        ex:WhiskTheOatMilkInCold ,
        ex:DairyFreeWithoutLosingBody ,
        ex:GuestIsLactoseIntolerant ,
        ex:ServedAtAnItalianTable ,
        ex:RouxMustThickenBelowBoiling .

ex:BechamelRecipe a owl:NamedIndividual , foodingredientsubstitutes:food_recipe ;
    rdfs:label "bechamel sauce, the classic recipe" ;
    foodingredientsubstitutes:has_component ex:BechamelIngredientList , ex:BechamelMethod .

ex:BechamelIngredientList a owl:NamedIndividual , <http://semantic.cs.put.poznan.pl/ontologies/food_ingredient_substitutes#ingredient_set_(specification)> ;
    rdfs:label "the bechamel's ingredient list: butter, flour, milk, nutmeg" ;
    foodingredientsubstitutes:has_member ex:OatMilkIngredientLine .

ex:OatMilkIngredientLine a owl:NamedIndividual , foodingredientsubstitutes:ingredient_specification ;
    rdfs:label "250 ml unsweetened oat milk, as the amended list reads" ;
    foodingredientsubstitutes:has_component ex:QuantityOfOatMilk ;
    foodingredientsubstitutes:is_about ex:OatMilk .

ex:QuantityOfOatMilk a owl:NamedIndividual , foodingredientsubstitutes:data_item ;
    rdfs:label "the quantity the line calls for: 250, in millilitres" .

ex:OatMilk a owl:NamedIndividual , foodingredientsubstitutes:food_item ;
    rdfs:label "oat milk, unsweetened, 1.5% fat" ;
    foodingredientsubstitutes:has_quality ex:DairyFree ,
        ex:MildCerealSweetness ,
        ex:ThickensWithAStarchRoux .

ex:BechamelMethod a owl:NamedIndividual , <http://semantic.cs.put.poznan.pl/ontologies/food_ingredient_substitutes#instruction_set_(specification)> ;
    rdfs:label "the bechamel's method, in five steps" ;
    foodingredientsubstitutes:has_member ex:PourTheMilkIntoTheRoux .

ex:PourTheMilkIntoTheRoux a owl:NamedIndividual , foodingredientsubstitutes:step_specification ;
    rdfs:label "step 3: pour the milk into the roux, whisking all the while" .

ex:ReplaceCowsMilkWithOatMilk a owl:NamedIndividual , foodingredientsubstitutes:ingredient_set_transformation_specification ;
    rdfs:label "replace the 250 ml of cow's milk with 250 ml of oat milk" .

ex:WhiskTheOatMilkInCold a owl:NamedIndividual , foodingredientsubstitutes:instruction_set_transformation_specification ;
    rdfs:label "amend step 3: whisk the oat milk in cold and raise the heat slowly" .

ex:DairyFreeWithoutLosingBody a owl:NamedIndividual , foodingredientsubstitutes:objective ;
    rdfs:label "make the sauce dairy-free without losing its body" .

ex:GuestIsLactoseIntolerant a owl:NamedIndividual , foodingredientsubstitutes:dietary_condition ;
    rdfs:label "a guest at the table is lactose-intolerant" .

ex:ServedAtAnItalianTable a owl:NamedIndividual , foodingredientsubstitutes:cultural_condition ;
    rdfs:label "the sauce is served in an Italian kitchen, where nutmeg is expected" .

ex:RouxMustThickenBelowBoiling a owl:NamedIndividual , foodingredientsubstitutes:technological_condition ;
    rdfs:label "the sauce must thicken below boiling, without the fat separating" .

ex:DairyFree a owl:NamedIndividual , foodingredientsubstitutes:dietary_quality ;
    rdfs:label "dairy-free" .

ex:MildCerealSweetness a owl:NamedIndividual , foodingredientsubstitutes:tastiness_quality ;
    rdfs:label "a mild cereal sweetness, oat milk's own taste" .

ex:ThickensWithAStarchRoux a owl:NamedIndividual , foodingredientsubstitutes:technological_quality ;
    rdfs:label "thickens when cooked with a starch roux" .
