(define-ontology trigger (:base "http://obi.sourceforge.net/ontology/OBI.owl" :includes (bfo)) ; (ontology-annotation !owl:imports !) (class !plan :partial !snap:RealizableEntity) (class !instruction_trigger "A plan that when a certain process is recognized to happen, another plan should be acted on" :partial !plan) ;; instruction triggers (object-property !whenToTrigger (domain !instruction_trigger) (range !span:Process)) (object-property !whatToTrigger (domain !instruction_trigger) (range !plan)) (class !instruction_trigger :partial (intersection-of (restriction !whatToTrigger (min-cardinality 1)))) ;; all the plans we deal with are protocols (class !protocol :partial !plan) (class !time_trigger :partial !instruction_trigger) (object-property !whenOccurs (range !PlannedTime)) (object-property !monitorsProcess (domain !relative_time_trigger) (range !span:Process)) (object-property !plannedTimeInterval (range !PlannedTimeInterval)) (class !absolute_time_trigger "A time trigger which triggers at a specific time" :partial (intersection-of !time_trigger (restriction !whenOccurs (cardinality 1)))) (class !relative_time_trigger "A time trigger which triggers after some period relative to the start of a some kind of process" :partial (intersection-of !time_trigger (restriction !monitorsProcess (min-cardinality 1)) (restriction !plannedTimeInterval (cardinality 1)))) (class !adverse_event_trigger "An instruction_trigger that is triggered when something bad happens to a person" :partial (intersection-of !instruction_trigger (restriction !whenToTrigger (some-values-from !PersonGetsSick)))) (disjoint-classes !absolute_time_trigger !relative_time_trigger) (disjoint-classes !protocol !instruction_trigger) (disjoint-classes !time_trigger !adverse_event_trigger) (class !PersonGetsSick "A standin for a process in which someone get sick (or sicker) while participating in a clinical trial" :partial !span:Process) ;; what should be in BFO (object-property !realized_as (inverse-of !realization_of) (domain !snap:RealizableEntity) (range !span:Occurrent)) (object-property !part_of (inverse-of !has_part) :transitive) (object-property !has_part :transitive) (disjoint-classes !plan !TemporalFuture) (disjoint-classes !protocol !instruction_trigger) ;; talking about future times (class !TemporalFuture :partial (intersection-of !snap:RealizableEntity (restriction !realized_as (some-values-from !span:TemporalRegion)))) (class !PlannedTime :partial (intersection-of !TemporalFuture (restriction !realized_as (some-values-from !span:TemporalInstant)) (restriction !realized_as (cardinality 1)))) (class !PlannedTimeInterval :partial (intersection-of !TemporalFuture (restriction !realized_as (some-values-from !span:TemporalInterval)) (restriction !realized_as (cardinality 1)))) ;; Case 1, part of (any) clinical trial (class !ReportAdverseEvent "A protocol for reporting adverse events to the FDA" :partial !protocol) (class !ClinicalTrialAdverseEffectWatch "An adverse_event_trigger in which the protocol ReportAdverseEvent is to be acted on when triggered" :partial (intersection-of !adverse_event_trigger (restriction !whatToTrigger (some-values-from !ReportAdverseEvent)))) (class !ClinicalTrial :partial (intersection-of !protocol (restriction !has_part (some-values-from !ClinicalTrialAdverseEffectWatch)))) ;; Case 2, enrollment lasts for 3 months or until 50 people volunteer, after which selection occurs. (class !VolunteerEnlistment "A plan to eventually select 10 volunteers. Organized by some initial advertising and volunteer enrollement, which terminates after 3 months or r50 people have signed up, after which the 10 are selected." :partial (intersection-of !protocol (restriction !has_part (some-values-from !AdvertisingForVolunteers)) (restriction !has_part (some-values-from !VolunteerEnrollment)) (restriction !has_part (some-values-from !VolunteerSelection)) (restriction !has_part (some-values-from !ThreeMonthsAfterEnrollment)) (restriction !has_part (some-values-from !AfterFiftyPeopleEnrolled)))) (class !VolunteerEnrollment "A plan to record that someone has volunteered" :partial !protocol) (class !AdvertisingForVolunteers "A plan for advertising for volunteers" :partial !protocol) (class !VolunteerSelection "A plan for selecting at most 10 volunteers based on some criteria" :partial !protocol) (class !ThreeMonthPlannedTime "Realized by a 3 month time interval" :partial !PlannedTimeInterval) (class !ThreeMonthsAfterEnrollment "A time_trigger that triggers a certain amount of time after some process has started" :partial (intersection-of !relative_time_trigger (restriction !monitorsProcess (some-values-from (intersection-of !span:Process (restriction !realization_of (some-values-from !VolunteerEnrollment))))) (restriction !plannedTimeInterval (some-values-from !ThreeMonthPlannedTime)) (restriction !whatToTrigger (some-values-from !VolunteerSelection)) )) (class !AfterFiftyPeopleEnrolled "Trigger on an enrollment process has more than 50 people enrolled (don't know how to say this formally)" :partial (intersection-of !instruction_trigger (restriction !whatToTrigger (some-values-from !VolunteerSelection)) )) )