# $Id: core.ttl,v 1.17 2014/09/23 09:55:56 eric Exp $
#
# ericP at the keyboard

@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix skos: <http://www.w3.org/2004/02/skos/core#> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .

@prefix bridg: <http://www.bridgmodel.org/owl#> .
@prefix bridg999: <http://www.bridgmodel.org/owl999#> .

@prefix data: <http://www.w3.org/2013/12/FDA-TA/datatypes#> .
@prefix dt: <http://www.hl7.org/owl/iso-dt-2.0#> . # really <http://hl7.org/owl/datatypes/uv#> .

@prefix : <http://www.w3.org/2013/12/FDA-TA/core#> .

<http://www.w3.org/2013/12/FDA-TA/core> a owl:Ontology ;
    owl:imports <http://www.w3.org/2013/12/FDA-TA/bridg-classes> ,
                <http://www.w3.org/2013/12/FDA-TA/datatypes> .

###############################################################################
# primitives
#

# clinical trial subject or clinical care patient
# bridg:StudySubject is a participation of an individual (in this case) in a trial


# TemporalProfile is one of: :Acute :Subacute :Chronic
# @@ separated out 'cause it appeared thrice in MetaModel, but maybe they are different beasts.
# :PrognosisProfile owl:disjointUnionOf ( # administrative, clinical, prognosisProfile
#     :Acute :Subacute :Chronic
# ) .
# :Acute    rdfs:subClassOf :TemporalProfile .
# :Subacute rdfs:subClassOf :TemporalProfile .
# :Chronic  rdfs:subClassOf :TemporalProfile .

# :temporalProfile a owl:ObjectProperty ;
#     rdfs:range :TemporalProfile .


###############################################################################
# Therapeutic Interventions (left, purple)
#

# TherapeuticIntervention is one of :BehaviorModification :TherapeuticProcedure :MedicationAdministration
:TherapeuticIntervention a owl:Class ; 
    owl:disjointUnionOf (
        :BehaviorModification :TherapeuticProcedure :MedicationAdministration 
    ) ;
#     rdfs:subClassOf [
#         owl:onProperty :temporalProfile ;
# 	owl:allValuesFrom :TemporalProfile
#     ] 
.
:BehaviorModification     a owl:Class ; rdfs:subClassOf :TherapeuticIntervention .
:TherapeuticProcedure     a owl:Class ; rdfs:subClassOf :TherapeuticIntervention , bridg:PerformedProcedure .
:MedicationAdministration a owl:Class ; rdfs:subClassOf :TherapeuticIntervention ,
        bridg:PerformedSubstanceAdministration ,
        [ a owl:Restriction ; owl:onProperty :hasMedication ; owl:cardinality 1 ] .


:hasInterventionTime a owl:DatatypeProperty ;
    rdfs:domain :TherapeuticIntervention ;
    rdfs:range xsd:dateTime ;
    rdfs:subPropertyOf bridg:PerformedActivity.dateRange .

# :Prescription is a bridg:ScheduledSubstanceAdministration\
# bridg:ConcomitantAgent
:MedicationPrescription a owl:Class ;
    rdfs:subClassOf [ a owl:Restriction ; owl:onProperty :hasDosagePlan ; owl:cardinality 1 ] ;
    rdfs:subClassOf [ a owl:Restriction ; owl:onProperty :hasMedication ; owl:cardinality 1 ] .

:Medication a owl:Class ; rdfs:subClassOf bridg:Drug . # can revert to bridg:Drug if we never need to differentiate.

# TI properties
:hasIntervention a owl:ObjectProperty ;
    rdfs:range :TherapeuticIntervention .

:hasMedication   a owl:ObjectProperty ;
    # rdfs:domain :MedicationAdministration ; # :MedicationAdministration or :MedicationPrescription
    rdfs:range :Medication .

:hasActiveIngredient a owl:ObjectProperty ;
    rdfs:domain :Medication ;
    rdfs:range :ActiveIngredient .

:ActiveIngredient a owl:Class . # see drugs.ttl for members

:hasConsentForIntervention a owl:ObjectProperty ;
    rdfs:domain :TherapeuticIntervention ;
    rdfs:range :ConsentForIntervention . # @@ BRIDG-ify

:hasEncounterProfile a owl:ObjectProperty ;
    rdfs:domain :TherapeuticIntervention ;
    rdfs:range :EncounterProfile .


:hasDosagePlan a owl:ObjectProperty ; # @@ move to BRIDG
#    rdfs:domain :MedicationAdministration ;
    rdfs:range :DosagePlan .
:hasMedicationSchedule a owl:ObjectProperty ;
     rdfs:domain :DosagePlan ;
     rdfs:range :MedicationSchedule .
# :medicationRoute a owl:ObjectProperty ; # ignoring route elides coded concept for now.
#     rdfs:domain :Dosage ;
#     rdfs:range :MedicationRoute .
# :MedicationRoute rdfs:subClassOf :CodedConcept.
:hasMedicationQuantity a owl:ObjectProperty ;
    rdfs:domain :Dosage ;
    rdfs:range :MedicationQuantity .
:MedicationQuantity    a owl:Class ; rdfs:subClassOf dt:PQ.

:DosagePlan a owl:Class ;
    rdfs:subClassOf 
        [ a owl:Restriction ; owl:onProperty :hasMedicationSchedule ; owl:cardinality 1 ] ,
        # [ a owl:Restriction ; owl:onProperty :medicationRoute ; owl:cardinality 1 ] ,
        [ a owl:Restriction ; owl:onProperty :hasMedicationQuantity ; owl:cardinality 1 ] .

:hasMedicationFrequency a owl:DatatypeProperty ;
    rdfs:domain :Dosage ;
    rdfs:range xsd:integer .
:hasMedicationDuration  a owl:DatatypeProperty ;
    rdfs:domain :Dosage ;
    rdfs:range xsd:float .
:hasMedicationUnits     a owl:DatatypeProperty ;
    rdfs:domain :Dosage ;
    rdfs:range xsd:string .
:MedicationSchedule a owl:Class ;
    rdfs:subClassOf
        [ a owl:Restriction ; owl:onProperty :hasMedicationFrequency ; owl:cardinality 1 ] ,
        [ a owl:Restriction ; owl:onProperty :hasMedicationDuration ; owl:cardinality 1 ] ,
        [ a owl:Restriction ; owl:onProperty :hasMedicationUnits ; owl:cardinality 1 ] .

:EncounterProfile a owl:Class . # @@ elided schedule and emergency status


###############################################################################
# Observations (middle, yellow)
#

:hasObservation a owl:ObjectProperty ;
    rdfs:range :Observation ;
    rdfs:seeAlso bridg:AssessedActivityRelationship . # ?s :hasObservation ?o -> [ a AAR: ; AAR:.assessedPerformedActivity ?s ; AAR:assessingPerformedObservation ?o ] .

:Observation a owl:Class ;
    owl:disjointUnionOf (
        :AdministrativeObservation :ClinicalObservation 
    ) ;
    rdfs:subClassOf bridg:PerformedObservation ,
        [ a owl:Restriction ; owl:onProperty :hasObservationTime ; owl:cardinality 1 ] . # ,
:AdministrativeObservation a owl:Class ; rdfs:subClassOf :Observation .
:ClinicalObservation       a owl:Class ; rdfs:subClassOf :Observation .

        # Don't apply cardinality constraints to properties defined as property
        # chains or you'll get a "reasoner died" dialgo with e.g. (from Fact++):
        # org.semanticweb.owlapi.reasoner.OWLReasonerRuntimeException: Non-simple object property 'http://www.w3.org/2013/12/FDA-TA/core#hasResultValue' is used as a simple one
        # [ a owl:Restriction ; owl:onProperty :hasResultValue ; owl:cardinality 1 ] .

:AdministrativeObservation     a owl:Class .
:Disposition                   a owl:Class ; rdfs:subClassOf :AdministrativeObservation ,
    [ a owl:Restriction ; owl:onProperty :hasResultValue ; owl:someValuesFrom :DispositionValue ] .
:DispositionValue a owl:Class ; owl:equivalentClass [ a owl:Class ;
            owl:oneOf ( :Deceased :LostToFollowup :AdministrativeWithdrawl :ConsentWithdrawl ) ] .
:DefinedAdministrativeEndpoint a owl:Class ; rdfs:subClassOf bridg:DefinedObservation .
:AdministrativeEndpoint        a owl:Class ; rdfs:subClassOf 
    :Disposition ,
    [ a owl:Restriction ; owl:onProperty :dependsOn ; owl:minCardinality 1 ] ,
    [ a owl:Restriction ; owl:onProperty :sparqlQuery ; owl:cardinality 1 ] .

# @@ Will we use this hierarchy from cUTI?
###   :Disposition :includes :Prematurely_Withdrawn_from_Treatment .
###     :Prematurely_Withdrawn_from_Treatment :includes :Unacceptable_or_Intolerable_AE .
###     :Prematurely_Withdrawn_from_Treatment :includes :Lack_of_Efficacy .
###     :Prematurely_Withdrawn_from_Treatment :includes :Investigator_Decision .
###   :Disposition :includes :Prematurely_Withdrawn_from_Study .
###     :Prematurely_Withdrawn_from_Study :includes :Lost_to_Follow-Up .
###     :Prematurely_Withdrawn_from_Study :includes :Administrative_Reasons .
###     :Prematurely_Withdrawn_from_Study :includes :Consent_Withdrawn .

# A couple standard outcome queries for all TA-protocols to use:
:Death a :AdministrativeEndpoint ;
    :sparqlQuery """
    SELECT ("Death" AS ?endpoint) (COUNT(*) AS ?count) (GROUP_CONCAT(?name) AS ?labels)
    WHERE {
      BIND (1 AS ?g)
      [
        bridg:Subject.performingBiologicEntity [ foaf:name ?name ] ;
        :hasDisposition [ :hasResultValue :Deceased ]
      ]
    } GROUP BY ?g
""" .

:LTFU a :AdministrativeEndpoint ;
    :sparqlQuery """
    SELECT ("LTFU" AS ?endpoint) (COUNT(*) AS ?count) (GROUP_CONCAT(?name) AS ?labels)
    WHERE {
      BIND (1 AS ?g)
      [
        bridg:Subject.performingBiologicEntity [ foaf:name ?name ] ;
        :hasDisposition [ :hasResultValue :LostToFollowUp ]
      ]
    } GROUP BY ?g
""" .


# ClinicalObservation is one of: :Assessment :DiagnosticProcedure :QuantitativeMeasurement :SignsAndSymptoms
:ClinicalObservation 
    owl:disjointUnionOf (
        :Assessment :SingleObservation :InferrableDiagnosis 
    ) .
:Assessment          a owl:Class ; rdfs:subClassOf :ClinicalObservation .
:SingleObservation   a owl:Class ; rdfs:subClassOf :ClinicalObservation .
:InferrableDiagnosis a owl:Class ; rdfs:subClassOf :ClinicalObservation .

# :Assessment described below
:SingleObservation 
    owl:unionOf (
        :DiagnosticProcedure :QuantitativeMeasurement :SignsAndSymptoms 
    ) .
:DiagnosticProcedure     a owl:Class ; rdfs:subClassOf :SingleObservation .
:QuantitativeMeasurement a owl:Class ; rdfs:subClassOf :SingleObservation .
:SignsAndSymptoms        a owl:Class ; rdfs:subClassOf :SingleObservation .

:isJustifiedBy a owl:ObjectProperty ; # @@reasonCode
    rdfs:domain :DiagnosticProcedure ;
    rdfs:range :ClinicalObservation .
:hasLabReport a owl:ObjectProperty ;
    rdfs:domain :DiagnosticProcedure ;
    rdfs:range :LabReport .

:specimentAccepability a owl:DatatypeProperty ;
    rdfs:range [ a owl:Class; owl:unionOf (true false) ] .
:performedAtLocalOrCentralLab a owl:ObjectProperty ;
    rdfs:range [ a owl:Class ; owl:oneOf ( :LocalLab :CentralLab ) ] .
:LabTest   a owl:Class ;
    rdfs:subClassOf 
        :QuantitativeMeasurement , # @@ subclass QuantitativeMeasurement for lab reports?
        [ a owl:Restriction ; owl:onProperty :specimentAccepability ; owl:maxCardinality 1 ] ,
        [ a owl:Restriction ; owl:onProperty :performedAtLocalOrCentralLab ; owl:maxCardinality 1 ] .
:LabReport a owl:Class ; rdfs:subClassOf bridg:PerformedObservationResult .

:PathologyReport     a owl:Class ; rdfs:subClassOf :QuantitativeMeasurement .
:hasClassification   a owl:ObjectProperty ;
    rdfs:domain :PathologyReport . # can have any value .
:hasPathologyFinding a owl:ObjectProperty ;
    rdfs:domain :PathologyReport . # can have any value .
:SignsAndSymptoms    a owl:Class ; rdfs:subClassOf :SingleObservation .
# [] a owl:AllDisjointClasses ; # @@ needed?
#     owl:members ( :Assessment :DiagnosticProcedure :QuantitativeMeasurement :SignsAndSymptoms ) .

# Observation properties
:monitorsEffectivenessOf a owl:ObjectProperty ;
    rdfs:domain :SingleOutcomeAssessment ;
    rdfs:range :TherapeuticIntervention .

# Observation properties
# :monitorsStateOf a owl:ObjectProperty ;
#     rdfs:domain :SingleOutcomeAssessment ;
#     rdfs:range :PhysiologicalProcess .
# 
# :hasPlaceOfMeasurement a owl:ObjectProperty ;
#     rdfs:domain :ClinicalObservation ;
#     rdfs:range :PlaceOfMeasurement .
# :PlaceOfMeasurement a owl:Class .
# 
# :hasMeasurementMethodology a owl:ObjectProperty ;
#     rdfs:domain :ClinicalObservation ;
#     rdfs:range :MeasurementMethodology .
# :MeasurementMethodology a owl:Class .

# Information Model imposed on Observation.
:hasObservationTime a owl:DatatypeProperty ;
    rdfs:domain :Observation ;
    rdfs:range xsd:dateTime .

:Assessment a owl:Class ;
    rdfs:subClassOf 
        :ClinicalObservation ,
        [ a owl:Restriction ; owl:onProperty :hasObservation ; owl:minCardinality 1 ] .

:hasObservation a owl:ObjectProperty ;
#    rdfs:domain :Assessment ; # lots of things have observations.
    rdfs:range :ClinicalObservation .

# Outcome Assessment - a conclusions (disposition) based on a set of
# observations before and after a clinical intervention. Outcome
# assessments are themselves observations, permitting them to provide
# (before/after) evidence for further assessments.

:beforeIntervention a owl:ObjectProperty ;
    rdfs:subPropertyOf :hasObservation ;
    rdfs:domain :SingleOutcomeAssessment ;
    rdfs:range :ClinicalObservation .
:afterIntervention a owl:ObjectProperty ;
    rdfs:subPropertyOf :hasObservation ;
    rdfs:domain :SingleOutcomeAssessment ;
    rdfs:range :ClinicalObservation .

:hasResultValue a owl:ObjectProperty ;
    # BRIDG structure is
    #   ?r a bridg:PerformedObservationResults ;
    #       bridg:PerformedObservationResult.producingPerformedObservation ?o .
    #   ?o a bridg:PerformedObservation ;
    #       bridg:PerformedObservation.resultedPerformedObservationResult ?r . # !inv
    #
    # per DL Query: bridg:PerformedObservation.resultedPerformedObservationResult some bridg:PerformedClinicalResult
    # !!! uncomment for mapping to BRIDG ObservationResults.
    # commented because it makes Fact++ crawl.
    #owl:propertyChainAxiom ( bridg:PerformedObservation.resultedPerformedObservationResult bridg:PerformedObservationResult.value ) ;
    rdfs:domain :Observation ;
    rdfs:range :SingleOutcomeAssessmentValue .

:SingleOutcomeAssessmentValue a owl:Class .

:lastInterventionToAfterDuration a owl:DatatypeProperty ;
    rdfs:range xsd:string . # P10DT15H !! xsd:duration

:hasOutcomeAssessment a owl:ObjectProperty ;
    # rdfs:domain :Subject ; or :EfficacyEndpoint
    rdfs:range :SingleOutcomeAssessment .

:hasEndpoint a owl:ObjectProperty ;
    rdfs:domain :TAProtocol ;
    rdfs:range :EfficacyEndpoint .
:TAProtocol a owl:Class ; rdfs:subClassOf bridg:StudyProtocol .

:hasObservationType a owl:ObjectProperty .
:hasInterventionType a owl:ObjectProperty .

:DefinedSingleOutcomeAssessment a owl:Class ; rdfs:subClassOf 
    bridg:DefinedObservation ,
    [ a owl:Restriction ; owl:onProperty :hasObservationType ; owl:minCardinality 1 ] ,
    [ a owl:Restriction ; owl:onProperty :hasInterventionType ; owl:minCardinality 1 ] ,
    [ a owl:Restriction ; owl:onProperty :lastInterventionToAfterDuration ; owl:maxCardinality 1 ] .
:SingleOutcomeAssessment a owl:Class ; rdfs:subClassOf 
    :Assessment ,
    [ a owl:Restriction ; owl:onProperty :beforeIntervention ; owl:minCardinality 1 ] ,
    [ a owl:Restriction ; owl:onProperty :hasIntervention ; owl:minCardinality 1 ] ,
    [ a owl:Restriction ; owl:onProperty :afterIntervention ; owl:minCardinality 1 ] .

:DeathAssessment a owl:Class ; rdfs:subClassOf :SingleOutcomeAssessment ;
    rdfs:label "death assessment" ;
    skos:definition "attests that hasObservation identifies evidence of a subject's death." ;
    owl:equivalentClass [ a owl:Class ;
            owl:oneOf ( :CardioVascularDeath :NonCardioVascularDeath ) ] .

:CardiacDeath    a owl:Class ; rdfs:subClassOf :DeathAssessment ;
    skos:defintion "Death defined as the irreversible cessation of circulatory and respiratory functions. Death is declared in accordance with hospital policy and applicable state and local statues or regulation." .

:CardioVascularDeath a owl:Class ; rdfs:subClassOf :DeathAssessment ;
    owl:equivalentClass [ a owl:Class ;
        owl:oneOf ( 
:HeartFailure :MyocardialInfarction :Stroke :CardiovascularHemorrhage :SuddenCardiacDeath :CardiovascularProcedures :Non-CNSSystemicEmbolism :CardiacTamponade :DocumentedAsystole :SystemicArterialEmbolicEvent :PulmonaryEmbolism :OtherCardiovascular 
     ) ] .

:HeartFailure a owl:Class ; rdfs:subClassOf :CardioVascularDeath .
:MyocardialInfarction a owl:Class ; rdfs:subClassOf :CardioVascularDeath .
:Stroke a owl:Class ; rdfs:subClassOf :CardioVascularDeath .
:CardiovascularHemorrhage a owl:Class ; rdfs:subClassOf :CardioVascularDeath .
:SuddenCardiacDeath a owl:Class ; rdfs:subClassOf :CardioVascularDeath .
:CardiovascularProcedures a owl:Class ; rdfs:subClassOf :CardioVascularDeath .
:Non-CNSSystemicEmbolism a owl:Class ; rdfs:subClassOf :CardioVascularDeath .
:CardiacTamponade a owl:Class ; rdfs:subClassOf :CardioVascularDeath .
:DocumentedAsystole a owl:Class ; rdfs:subClassOf :CardioVascularDeath .
:SystemicArterialEmbolicEvent a owl:Class ; rdfs:subClassOf :CardioVascularDeath .
:PulmonaryEmbolism a owl:Class ; rdfs:subClassOf :CardioVascularDeath .
:OtherCardiovascular a owl:Class ; rdfs:subClassOf :CardioVascularDeath .
#:OtherCardiac

:NonCardioVascularDeath a owl:Class ; rdfs:subClassOf :DeathAssessment ;
    owl:equivalentClass [ a owl:Class ;
        owl:oneOf ( 
:PulmonaryDeath :RenalDeath :GastrointestinalDeath :HepatobiliaryDeath :PancreaticDeath :InfectionDeath :InflammatoryDeath :Hemorrhage_OtherDeath :CardiovascularBleedingOrStrokeDeath :Non-CVProcedureOrSurgeryDeath :TraumaDeath :SuicideDeath :NonPrescriptionDrugReactionOrOverdoseDeath :PrescriptionDrugReactionOverdoseOrAnaphylaxisDeath :Neurological_non-cardiovascularDeath :CancerDeath :TraumaDeath :InfectionDeath :RespiratoryFailureDeath :Non-bleedingStudyDrugToxicityDeath :Non-CNSBleedingDeath :CNSBleedingDeath :PeripheralEmbolismDeath :AorticDissectionOrRupture :OtherDeath
    ) ] .

:PulmonaryDeath a owl:Class ; rdfs:subClassOf :NonCardioVascularDeath .
:RenalDeath a owl:Class ; rdfs:subClassOf :NonCardioVascularDeath .
:GastrointestinalDeath a owl:Class ; rdfs:subClassOf :NonCardioVascularDeath .
:HepatobiliaryDeath a owl:Class ; rdfs:subClassOf :NonCardioVascularDeath .
:PancreaticDeath a owl:Class ; rdfs:subClassOf :NonCardioVascularDeath .
:InfectionDeath a owl:Class ; rdfs:subClassOf :NonCardioVascularDeath .
:InflammatoryDeath a owl:Class ; rdfs:subClassOf :NonCardioVascularDeath .
:Hemorrhage_OtherDeath a owl:Class ; rdfs:subClassOf :NonCardioVascularDeath .
:CardiovascularBleedingOrStrokeDeath a owl:Class ; rdfs:subClassOf :NonCardioVascularDeath .
:Non-CVProcedureOrSurgeryDeath a owl:Class ; rdfs:subClassOf :NonCardioVascularDeath .
:TraumaDeath a owl:Class ; rdfs:subClassOf :NonCardioVascularDeath .
:SuicideDeath a owl:Class ; rdfs:subClassOf :NonCardioVascularDeath .
:NonPrescriptionDrugReactionOrOverdoseDeath a owl:Class ; rdfs:subClassOf :NonCardioVascularDeath .
:PrescriptionDrugReactionOverdoseOrAnaphylaxisDeath a owl:Class ; rdfs:subClassOf :NonCardioVascularDeath .
:Neurological_non-cardiovascularDeath a owl:Class ; rdfs:subClassOf :NonCardioVascularDeath .
:CancerDeath a owl:Class ; rdfs:subClassOf :NonCardioVascularDeath .
:TraumaDeath a owl:Class ; rdfs:subClassOf :NonCardioVascularDeath .
:InfectionDeath a owl:Class ; rdfs:subClassOf :NonCardioVascularDeath .
:RespiratoryFailureDeath a owl:Class ; rdfs:subClassOf :NonCardioVascularDeath .
:Non-bleedingStudyDrugToxicityDeath a owl:Class ; rdfs:subClassOf :NonCardioVascularDeath .
:Non-CNSBleedingDeath a owl:Class ; rdfs:subClassOf :NonCardioVascularDeath .
:CNSBleedingDeath a owl:Class ; rdfs:subClassOf :NonCardioVascularDeath .
:PeripheralEmbolismDeath a owl:Class ; rdfs:subClassOf :NonCardioVascularDeath .
:AorticDissectionOrRuptureDeath a owl:Class ; rdfs:subClassOf :NonCardioVascularDeath .
:OtherDeath a owl:Class ; rdfs:subClassOf :NonCardioVascularDeath .


:FunctionOutcomeAssessment a owl:Class ; rdfs:subClassOf :SingleOutcomeAssessment .

:DefinedEfficacyEndpoint   a owl:Class ; rdfs:subClassOf bridg:DefinedObservation .
:Endpoint                  a owl:Class ;
    owl:disjointUnionOf ( :SafetyEndpoint :EfficacyEndpoint ) ;
    rdfs:subClassOf 
        :Assessment ,
        [ a owl:Restriction ; owl:onProperty :hasObservation ; owl:allValuesFrom :SingleOutcomeAssessment ] ,
        [ a owl:Restriction ; owl:onProperty :dependsOn ; owl:minCardinality 1 ] ,
        [ a owl:Restriction ; owl:onProperty :sparqlQuery ; owl:cardinality 1 ] .
:EfficacyEndpoint rdfs:subClassOf :Endpoint .
:SafetyEndpoint rdfs:subClassOf :Endpoint .
:dependsOn   a owl:DatatypeProperty .
:sparqlQuery a owl:DatatypeProperty ;
    rdfs:range xsd:string .
:confirms    a owl:DatatypeProperty ;
    rdfs:domain :SingleOutcomeAssessment .

:PositiveOutcome a owl:Class ; rdfs:subClassOf :SingleOutcomeAssessment .
:NegativeOutcome a owl:Class ; rdfs:subClassOf :SingleOutcomeAssessment .
#:DeathOtherReasons rdfs:subClassOf :EfficacyEndpoint .


# Diagnosis

###############################################################################
# PhysiologicalProcess (right, blue)
#

# :PhysiologicalProcess a owl:Class .
# :PhysiologicalProcess
#     owl:disjointUnionOf (
#         :NormalPhysiologicalProcess :PathoPhysiologicalProcess
#     ) .
# :NormalPhysiologicalProcess a owl:Class ; rdfs:subClassOf :PhysiologicalProcess .
# :PathoPhysiologicalProcess  a owl:Class ; rdfs:subClassOf :PhysiologicalProcess .


:hasSpecimen a owl:ObjectProperty .

:ScreenValue a owl:Class ;
    rdfs:subClassOf 
        :SingleOutcomeAssessmentValue ,
        [ a owl:Restriction ; owl:oneOf (:Positive :Negative :Unknown) ] .

bridg999:StudySubject.involvingScheduledSubstanceAdministration a owl:ObjectProperty ;
    rdfs:domain bridg:StudySubject ;
    rdfs:range bridg:ScheduledSubstanceAdministration .
bridg999:performedSpecimenCollection.material a owl:ObjectProperty ;
    rdfs:domain bridg:PerformedSpecimenCollection ;
    rdfs:range bridg:Biologic .
bridg999:PerformedSubstanceExtraction.usedBiologic a owl:ObjectProperty ;
    rdfs:label "uses"^^xsd:string ;
    rdfs:domain bridg:PerformedSubstanceExtraction ;
    rdfs:range bridg:Biologic ;
    rdfs:subPropertyOf bridg:associationProperty ;
    # owl:inverseOf bridg999:Biologic.usingPerformedSubstanceExtraction
.

[ a owl:AllDisjointClasses ;
  owl:members ( bridg:PerformedObservation
                bridg:DefinedObservation
              )
] .
# @@ need to merge these ^v
[ a owl:AllDisjointClasses ;
  owl:members ( bridg:PerformedObservationResult
                bridg:DefinedObservationResult
              )
] .

