Notes on the examples of relations
Here we try to take each of Colin Batchelor's example statements for proposed relations here, in English, and address how it could be reformulated in our OWL context. We let all our classes be subclassed to those in Dumontier's NULO, and we reuse the BRO properties (with liberties) as much as possible in order not to proliferate predicates. We also follow Dumontier's pattern (pdf) of Roles to partition the property chain for hasParticipant. The answer offered here to Batchelor's question of "what relations...?" (at least for the present examples) is, none but the lightest possible elaborations on the already-prepared BRO set.
In four of the examples here, Processes are central, Roles are connected to the center and other classes are peripherally connected to Roles. Among the proposed classes there are several that would be Processes, among which (now) are: AdverseEvent, ClinicalTrial, DrugNonDrugInteraction, ImmuneResponse, Intervention and Treatment. BioProcess would be an obvious candidate; perhaps Pathway or some version of Pathway could be construed as one. Whereas Processes are concepts that we readily recognize, Role classes tend to be more like artificial constructs. We are accepting a certain proliferation of roles to allay a probably more unruly proliferation of predicates.
Let us see where adhering to this discipline will take us. Along the way we develop a small doctrine for roles and their use in restrictions.
1) A drug participates in a treatment for a disease. The central nulo:Process here is transmed:Treatment, and for our purposes we usually will dispense with the obvious namespaces, will not distinguish between Process and ProcessAggregate, and will allow other oversights. So Treatment is a subclass of Process. To start,
drug participatesIn Treatment hasParticipant Disease
Dumontier shows how participatesIn can be decomposed into the property chain 'hasRole o realizedBy', with a Role in the middle. In a coarse granularity, Treatment would realize a DiseaseRole and a DrugRole. Now we can connect the drug (instance) to the disease (class) through their respective roles played in the process:
drug bears(hasRole) DrugRole realizedBy Treatment realizes DiseaseRole isRoleOf Disease
We should insert restrictions in this chain of alternating classes and properties, to demonstrate how a class can be constructed for such a drug. We can start with all four of the restrictions' being universal, in that all the components of the triangle with Treatment at the apex scope the range of the preceeding property.
drug bears only DrugRole realizedBy only Treatment realizes only DiseaseRole isRoleOf only Disease
So, we easily can construct a subclass of Drug that is formed by restriction on 'bears' (or more properly 'playsRole', or less poetically 'hasRole'). On closer inspection we see that Treatment realizes two Role classes, and some instance of each of them must be identical since Treatment realizes only one of them. So we must change the third restriction to existential.
drug bears only DrugRole realizedBy only Treatment realizes some DiseaseRole isRoleOf only Disease
Question: Can the DrugRole class that is realized by a Treatment be the same DrugRole class that is realized by some other Process? One could easily imagine 'DrugRole' being utilized in OWL patterns for regulatory practice, in manufacturing, in immune suppression, in molecular interactions, etc. Dumontier's EnzymeRole is the sort of role that would repose at a single "granularity" in discourse, whereas our 'DrugRole' would be the name of roles that repose at different such granularities, and indeed at wildly different domains of discourse. 'The role of an enzyme' in chemistry is more tightly constrained than 'the role of a drug' in the pharmaceutical industry. One would like not to have to elaborate separate DrugRoleInTreatment, DrugRoleInAdverseEvent, etc. But in order to justify overloading all the different meanings into one class, one would have to be convinced that the 'Role' classes really are just placeholders in the partitioning of the intended 'participatesIn' properties. If a DrugRole is realizedBy both Treatment and AdverseEvent then one would expect always to have to qualify its use by 'realizedBy <some or only> <Treatment or AdverseEvent>'.
If we overload DrugRole in this way then there is the possibility of branching instigated by some other statement, with a different meaning of DrugRole. So we must change the second restriction to existential.
drug bears only DrugRole realizedBy some Treatment realizes some DiseaseRole borneBy only Disease
One is tempted to posit that the DrugRole class should have a single instance, which then might even have its own URI. Then the manner of restriction used with 'bears' (or hasRole) would not matter. We would be assured that the first and fourth restrictions above could be universal and inferences through them would succeed. However, consider the case of a Role class for NSAIDS. While there could be a flat list of Role classes, there probably would be greater advantage to having the Role class structure mirror that of the declared class structure of the 'borneBy' classes. In this later case, insisting on a unique instance in each Role class would be untenable. All we need is a unique instance *for* each Role class. This mechanism will remain intact even after inferencing, when the inferred subclass structure of the 'borneBy' classes may be more elaborate than their declared structure. Hence, for best practice, one would scope each particular Role class to its intended 'borneBy' class and would declare a single individual in the former.
DrugRole := isRoleOf only Drug NSAIDS_Role := isRoleOf only NSAIDS DiseaseRole := isRoleOf only Disease ... ClassAssertion( DrugRole transmed:drugRole ) ClassAssertion( NSAIDS_Role transmed:nsaidsRole ) ClassAssertion( DiseaseRole transmed:diseaseRole ) ...
2) A compound has the function of an active ingredient in a drug. Here DrugAction is a Process that realizes an Active(Ingredient)Role, and certainly also a role for a biological entity. We are using only one branch from DrugAction, instead of two as we did with Treatment above.
compound (isPartOf some Drug) and bears only ActiveRole realizedBy some DrugAction
We might like further to connect Drug and DrugAction, but the drug action is more closely tied to the compound than it is to the packaged drug product.
3) A population has a statistically-significant SNP. Both SNP and statistically-significant would be Qualities, the latter being a quality of a quality.
population hasQuality some SNP hasQuality some StatisticallySignificant
We are saying that the tomato bears its color, which in turn bears its redness, and so we are committing to an intervening category. This is aligned with PATO's addressing the quality of the phenotype as opposed to addressing the phenotype itself.
4) A population has a predisposition to a disease. Suppose we take Predisposition as a subclass of Disposition, and suppose we make a general sort of process, 'Manifestation', that realizes both an IndependentRole and a RealizableRole. If we are willing simply to elide over the fact that a population is an aggregate of people, then we can write:
population bears some Predisposition toManifesting some Manifestation (realizes some IndependentRole borneBy only Person) and (realizes some RealizableRole borneBy only Disease)
Here we have formed a new property 'toManifesting' for its specialized purpose, and its domain and range probably should be as narrow as possible, Predisposition and Manifestation, respectively. The first restriction must be existential because a population certainly may bear roles other than the Predisposition described here. And the second restriction must be existential because a process is not abstract in the way a role is.
If we were describing a person who bears such a Predisposition, there still would be no way to tie him to the one that bears the IndependentRole. See the discussion of the fifth example, below.
If a PersonRole were subclassed to IndependentRole then we would be more confident in the universal restriction in 'borneBy only Person'. So we should subclass all of the tightly-scoped Role classes for subclasses to IndependentContinuants and RealizableEntities to their respective upper Role classes. As per above, it might be advisable strictly to have the Role class hierarchy mirror that of the 'borneBy' classes.
IndependentRole := isRoleOf only IndependentContinuant RealizableRole := isRoleOf only RealizableEntity ClassAssertion( IndependentRole transmed:independentRole ) ClassAssertion( RealizableRole transmed:realizableRole )
We are back to:
population bears some Predisposition toManifesting some Manifestation (realizes some PersonRole borneBy only Person) and (realizes some DiseaseRole borneBy only Disease)
I am in general a little uncomfortable with a disease's being a 'disposition'. An example in the comments for nulo:Disposition is "the disposition of a patient with a weakened immune system to contract a disease." If disease is really a disposition then we would have something like "the disposition...to contract a disposition," which sounds unacceptably circular. Indeed, none of the four synsets for 'disposition' in WordNet would be able to carry 'disease' as an example.
But, if we accept that there is no slot for Disease other than nulo:Disposition, then the solution offered here can be made to work, since the domain of bro:hasRole is any sort of Continuant, including Disposition. So Disease bears a Role in a Manifestation, a disposition bears a role in a process. And now perhaps we reach the outer limits of what we are willing to hold in a single idea: a population bears a disposition to manifesting a process that realizes a role that is borne by a disposition. At this point I will need to appeal to faith in the integrity of the constructive discipline.
5) A patient suffers an adverse event in the context of a treatment. We can add PatientRole to those roles realized by Treatment.
patient (bears only PatientRole realizedBy some Treatment) and participatesIn some AdverseEvent
Further, an AdverseEvent will realize a PatientRole as well. We have not yet placed the adverse event in the context of the treatment, so we might make a new asymmetric property to tie the two Processes together.
patient bears only PatientRole (realizedBy some Treatment) and (realizedBy some AdverseEvent inContextOf only Treatment)
The remaining problem with this formulation is that we cannot 'complete the circle' back to the same treatment instance in Treatment. The Treatment class hangs out at the end of two branches, and there is no way to tie to the same instance of 'treatment' within the class. This is an inherent limitation in OWL descriptions, referenced in 5.1(pdf), the same limitation encountered when describing cyclic molecules.
The style used and the lessons learned here can be distilled into a doctrine, which perhaps can stand until exposed to further test cases.
1) Default quantifications are universal.
2) isRoleOf and hasRole quantifications are universal.
3) When we go down through one entity that forks down through the same predicate then both quantifiers must be existential.
4) When we go up one fork and down its inverse then the first one is universal, the second one must be existential.
5) Role class structure mirrors that of the declared 'borneBy' classes.
6) Each Role class is scoped to its 'borneBy' class by universal restriction.
7) Each Role class has a single assertion of an individual, unique to the class.