I have triples that say patient P
participates in health care encounter E
which has output M
, a drug prescription. Prescriptions can mention
a drug from the Drug Ontology, or DrOn.
In this case, let's say that M1
mentions the cholesterol-lowering medication atorvastatin, which was imported into DrOn from ChEBI as http://purl.obolibrary.org/obo/CHEBI_39548:
prefix obo: <http://purl.obolibrary.org/obo/>
:M1 obo:IAO_0000142 obo:CHEBI_39548 .
ChEBI has an axiom that obo:CHEBI_39548 has the role http://purl.obolibrary.org/obo/CHEBI_35821, "anticholesteremic drug". That makes it easy to find patients who have been prescribed atorvastatin, or other drugs with the same role.
Unfortunately, DrOn created its own terms for some drugs instead of importing them from ChEBI. For example, another cholesterol-lowering drug, rosuvastatin, is modeled as http://purl.obolibrary.org/obo/DRON_00018679 instead of http://purl.obolibrary.org/obo/CHEBI_38545. ChEBI's term for rosuvastatin is also annotated with the role obo:CHEBI_39548, but obo:DRON_00018679 is not. So patients in my dataset who were prescribed rosuvastatin do not show up in my existing role-based query.
I have these data in a GraphDB RDFS-plus repository, and I'd prefer not to change the reasoning level right now. If it was an OWL repository, I would just say
obo:CHEBI_38545 owl:equivalentClass obo:DRON_00018679
Is there something similar I can do with RDFS, or a GraphDB custom ruleset?
If it was an OWL repository, I would just say
obo:CHEBI_38545 owl:equivalentClass obo:DRON_00018679
Is there something similar I can do with RDFS, or a GraphDB custom ruleset?
First
You obviously can replace owl:equivalentClass
with two reciprocal rdfs:subClassOf
. As for the very equivalence of these formulations, I suppose this is relevant:
Second
owl:equivalentClass
is already within RDFS-Plus.
From chapter 7 of the 1st edition of Semantic Web for the Working Ontologist, where RDFS-Plus was first introduced:
RDFS-Plus provides a more intuitive expression of class equivalence, using the construct
owl:equivalentClass
.
In GraphDB, the RDFS-Plus and RDFS-Plus (Optimized) rulesets support owl:equivalentClass
. There are the following rule in the builtin_rdfsPlus-optimized.pie
file:
Id: owl_EquivClassBySubClass
a <rdfs:subClassOf> b [Constraint b != a]
b <rdfs:subClassOf> a [Cut]
------------------------------------
a <owl:equivalentClass> b
and the following axioms:
<owl:equivalentClass> <rdf:type> <owl:TransitiveProperty>
<owl:equivalentClass> <rdf:type> <owl:SymmetricProperty>
<owl:equivalentClass> <rdfs:subPropertyOf> <rdfs:subClassOf>
In higher profiles, two rules are used instead:
Id: scm_eqc1
c1 <owl:equivalentClass> c2 [Constraint c1 != c2 ]
-------------------------------
c1 <rdfs:subClassOf> c2
c2 <rdfs:subClassOf> c1
Id: scm_eqc2
c1 <rdfs:subClassOf> c2 [Constraint c1 != c2 ]
c2 <rdfs:subClassOf> c1
-------------------------------
c1 <owl:equivalentClass> c2