# GLOBAL PatientSupporter @prefix : . @prefix rdf: . @prefix rdfs: . @prefix math: . @prefix log: . @prefix e: . @prefix list: . @prefix str: . #PARTONOMY :Body rdf:type rdfs:Class. :Head rdfs:subClassOf :Body. :Skull rdfs:subClassOf :Head. :Nose rdfs:subClassOf :Head. :Ears rdfs:subClassOf :Head. :Lips rdfs:subClassOf :Head. :Face rdfs:subClassOf :Head. :Neck rdfs:subClassOf :Body. :NeckJoint rdfs:subClassOf :Neck. :Throat rdfs:subClassOf :Neck. :Shoulder rdfs:subClassOf :Body. :Scapula rdfs:subClassOf :Shoulder. :ShoulderJoint rdfs:subClassOf :Shoulder. :Arm rdfs:subClassOf :Body. :UpperARm rdfs:subClassOf :Arm. :Elbow rdfs:subClassOf :Arm. :Forearm rdfs:subClassOf :Arm. :Hand rdfs:subClassOf :Arm. :Back rdfs:subClassOf :Body. :UpperBack rdfs:subClassOf :Back. :LowerBack rdfs:subClassOf :Back. :Torso rdfs:subClassOf :Body. :Chest rdfs:subClassOf :Torso. :Abdomen rdfs:subClassOf :Torso. :Leg rdfs:subClassOf :Body. :Thigh rdfs:subClassOf :Leg. :Knee rdfs:subClassOf :Leg. :LowerLeg rdfs:subClassOf :Leg. :Foot rdfs:subClassOf :Leg. :Heel rdfs:subClassOf :Foot. :Toe rdfs:subClassOf :Foot. {?A rdfs:subClassOf ?B.} => {?A rdf:type ?B}. ####################### # GOOD DURATION CHECK # ####################### #All equal { ?event rdf:type :Event; :profileID ?ProfileID; :injury ?Injury; :tense :Possible; :startDateTime [:year ?StartYear; :month ?StartMonth; :day ?StartDay; :hour ?StartHour; :minute ?StartMinute]; :endDateTime [:year ?EndYear; :month ?EndMonth; :day ?EndDay; :hour ?EndHour; :minute ?EndMinute]. :duration rdf:type :Duration; :profileID ?ProfileID; :injury ?Injury; :duration [:year ?DurYear; :month ?DurMonth; :day ?DurDay; :hour ?DurHour; :minute ?DurMinute]. #Rounding is used here 2629743.83 #Convert all duration variables into seconds. (?DurYear 31556926) math:product ?DurYearSeconds. (?DurMonth 2629744) math:product ?DurMonthSeconds. (?DurDay 86400) math:product ?DurDaySeconds. (?DurHour 3600) math:product ?DurHourSeconds. (?DurMinute 60) math:product ?DurMinuteSeconds. #Add them together in a single variable DurTotal. (?DurYearSeconds 0) math:sum ?DurTotal1. (?DurMonthSeconds ?DurTotal1) math:sum ?DurTotal2. (?DurDaySeconds ?DurTotal2) math:sum ?DurTotal3. (?DurHourSeconds ?DurTotal3) math:sum ?DurTotal4. (?DurMinuteSeconds ?DurTotal4) math:sum ?DurTotal5. #Get the difference between start and end time of each variable. (?EndYear ?StartYear) math:difference ?DurYearTemp. (?EndMonth ?StartMonth) math:difference ?DurMonthTemp. (?EndDay ?StartDay) math:difference ?DurDayTemp. (?EndHour ?StartHour) math:difference ?DurHourTemp. (?EndMinute ?StartMinute) math:difference ?DurMinuteTemp. #Get the absolute value of the results. This essentially gives you an event duration. ?DurYearTemp math:absoluteValue ?DurYearAbs. ?DurMonthTemp math:absoluteValue ?DurMonthAbs. ?DurDayTemp math:absoluteValue ?DurDayAbs. ?DurHourTemp math:absoluteValue ?DurHourAbs. ?DurMinuteTemp math:absoluteValue ?DurMinuteAbs. #Convert all event duration variables into seconds. (?DurYearAbs 31556926) math:product ?DurYearSeconds2. (?DurMonthAbs 2629744) math:product ?DurMonthSeconds2. (?DurDayAbs 86400) math:product ?DurDaySeconds2. (?DurHourAbs 3600) math:product ?DurHourSeconds2. (?DurMinuteAbs 60) math:product ?DurMinuteSeconds2. #Add them together in a single variable EventDurTotal. (?DurYearSeconds2 0) math:sum ?EventDurTotal1. (?DurMonthSeconds2 ?EventDurTotal1) math:sum ?EventDurTotal2. (?DurDaySeconds2 ?EventDurTotal2) math:sum ?EventDurTotal3. (?DurHourSeconds2 ?EventDurTotal3) math:sum ?EventDurTotal4. (?DurMinuteSeconds2 ?EventDurTotal4) math:sum ?EventDurTotal5. #Insure EventDurTotal is not greater than DurTotal #(the event has a good duration for the start and end time given) ?EventDurTotal5 math:greaterThan ?DurTotal5. } => { _:goodDuration rdf:type :GoodDuration; :profileID ?ProfileID; :injury ?Injury; :duration [:year ?DurYear; :month ?DurMonth; :day ?DurDay; :hour ?DurHour; :minute ?DurMinute]; :startDateTime [:year ?StartYear; :month ?StartMonth; :day ?StartDay; :hour ?StartHour; :minute ?StartMinute]; :endDateTime [:year ?EndYear; :month ?EndMonth; :day ?EndDay; :hour ?EndHour; :minute ?EndMinute]. }.