# MARIO, the social robot of the pattern's own scenario. Two stereotyped situations - the
# user asking for music, and the battery falling to a critical level - each afford a goal,
# and the affordance strength decides which goal MARIO adopts: recharging outweighs
# entertaining, and the same critical battery suppresses entertaining with a negative strength.

@prefix affordance: <https://w3id.org/MON/affordance.owl#> .
@prefix dul: <http://www.ontologydesignpatterns.org/ont/dul/DUL.owl#> .
@prefix ex: <https://w3id.org/ontoboard/example/affordance#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .

ex:Mario a owl:NamedIndividual , dul:Agent ;
    rdfs:label "MARIO, the social robot" .

ex:MarioInTheLoungeAtHalfPastTen a owl:NamedIndividual , dul:Situation ;
    rdfs:label "the lounge at 10:30, MARIO present and the user asking for music" ;
    dul:includesAgent ex:Mario ;
    dul:satisfies ex:TheUserWantsToListenToMusic .

ex:TheUserWantsToListenToMusic a owl:NamedIndividual , dul:Description ;
    rdfs:label "the user wants to listen to some music" .

ex:TheBatteryIsAtCriticalLevel a owl:NamedIndividual , dul:Description ;
    rdfs:label "the battery is at critical level" .

ex:EntertainTheUser a owl:NamedIndividual , dul:Goal ;
    rdfs:label "entertain the user" .

ex:RechargeTheBattery a owl:NamedIndividual , dul:Goal ;
    rdfs:label "recharge the battery" .

ex:MusicRequestAffordsEntertaining a owl:NamedIndividual , affordance:Affordance ;
    rdfs:label "a request for music affords entertaining the user" ;
    affordance:affordanceStrength "10.0"^^xsd:double ;
    affordance:hasGoal ex:EntertainTheUser ;
    affordance:holds ex:TheUserWantsToListenToMusic .

ex:CriticalBatteryAffordsRecharging a owl:NamedIndividual , affordance:Affordance ;
    rdfs:label "a critical battery affords recharging, and at a strength that outranks everything else" ;
    affordance:affordanceStrength "100.0"^^xsd:double ;
    affordance:hasGoal ex:RechargeTheBattery ;
    affordance:holds ex:TheBatteryIsAtCriticalLevel .

ex:CriticalBatterySuppressesEntertaining a owl:NamedIndividual , affordance:Affordance ;
    rdfs:label "a critical battery suppresses entertaining the user, which is what a negative strength is for" ;
    affordance:affordanceStrength "-10.0"^^xsd:double ;
    affordance:hasGoal ex:EntertainTheUser ;
    affordance:holds ex:TheBatteryIsAtCriticalLevel .

# Only one direction of each inverse pair is asserted: holds/isHeldBy, includesAgent/isAgentIncludedIn, satisfies/isSatisfiedBy. A reasoner adds the other.

