public class SpeciesMergeUtil extends Object
The goal is to avoid having a lattice of classes in the merged ontology - e.g. zebrafish brain, mouse brain, fly brain, generic brain, ... -- at the same time, as much of the species-specific logic should be retained, but in a way that is biologically correct and logically valid. E.g. we do not want to infer that all brains develop from a neural keel because the zebrafish brain does. We do this by merging "duplicate" classes, but retaining species axioms as "taxon GCIs".
The procedure relies on "taxonomic equivalence axioms" of the form
zfa:brain EquivalentTo ubr:brain and part_of some tax:7954
These are available from URLs such as:
http://purl.obolibrary.org/obo/uberon/bridge/uberon-bridge-to-zfa.owl
It uses a technique called "unfolding", whereby named classes (e.g. zfa:brain) can be replaced by an equivalent class expression (e.g. ubr:brain and part_of some tax:7954) whilst retaining equivalent entailments in the ontology.
E.g
zfa:brain SubClassOf develops_from some zfa:neural keel
==>
(ubr:brain and part_of some tax:7954) SubClassOf develops_from some zfa:neural keel
==>
(ubr:brain and part_of some tax:7954) SubClassOf develops_from some (ubr:neural keel and part_of some tax:7954)
If there is no taxonomic equivalence axiom, the species class is retained.
In itself, this is fairly trivial, but the resulting ontology is not necessarily easier to work with. In particular, the unfolded axioms can't be represented in .obo format.
Additional procedures are performed - these maintain correctness, but may lose some information - this is the tradeoff in a multi-species composite ontology.
The key lossy transformation is to replace (X and part_of some T) with (X) -- in cases where it is safe to do so. For now, the only place this is done is where the expression appears on the RHS of a SubClassOf axiom, either as the sole expression, or directly within a SomeValuesFrom expression.
For example, we can replace
(ubr:brain and part_of some tax:7954) SubClassOf develops_from some (ubr:neural keel and part_of some tax:7954)
==>
(ubr:brain and part_of some tax:7954) SubClassOf develops_from some uber:neural keel
In obo-format this is represented as:
id: UBERON:nnn
name: brain
relationship: develops_from UBERON:mmmm {gci_relation="part_of",gci_filler="NCBITaxon:7954"} ! neural keel
For example, the class "somite 23" from EHDAA2 may have no taxonomic equivalence axiom (we don't group most serially homologous structures based purely on position). It would therefore not be unfolded by the above technique. The same for the ZFA class "somite 23". To avoid confusion, these are relabeled "somite 23 (zebrafish)" and "somite 23 (human)". In future we may explore the use of the obo-forundry unique label here.
Modifier and Type | Class and Description |
---|---|
class |
SpeciesMergeUtil.UnmergeableOntologyException |
Modifier and Type | Field and Description |
---|---|
Set<org.semanticweb.owlapi.model.OWLObjectProperty> |
includedProperties |
org.semanticweb.owlapi.reasoner.OWLReasoner |
reasoner |
String |
suffix |
org.semanticweb.owlapi.model.OWLClass |
taxClass |
org.semanticweb.owlapi.model.OWLObjectProperty |
viewProperty |
Constructor and Description |
---|
SpeciesMergeUtil(OWLGraphWrapper g) |
Modifier and Type | Method and Description |
---|---|
void |
createMap()
builds ecmap, a map between species-classes to generic-classes
also populates ssClasses
|
boolean |
isSkippable(org.semanticweb.owlapi.model.OWLClass c) |
void |
merge() |
org.semanticweb.owlapi.model.OWLAxiom |
tr(org.semanticweb.owlapi.model.OWLEquivalentClassesAxiom ax) |
org.semanticweb.owlapi.model.OWLAxiom |
tr(org.semanticweb.owlapi.model.OWLSubClassOfAxiom ax) |
public Set<org.semanticweb.owlapi.model.OWLObjectProperty> includedProperties
public org.semanticweb.owlapi.reasoner.OWLReasoner reasoner
public String suffix
public org.semanticweb.owlapi.model.OWLObjectProperty viewProperty
public org.semanticweb.owlapi.model.OWLClass taxClass
public SpeciesMergeUtil(OWLGraphWrapper g)
public void createMap()
public void merge() throws SpeciesMergeUtil.UnmergeableOntologyException
public org.semanticweb.owlapi.model.OWLAxiom tr(org.semanticweb.owlapi.model.OWLSubClassOfAxiom ax)
public org.semanticweb.owlapi.model.OWLAxiom tr(org.semanticweb.owlapi.model.OWLEquivalentClassesAxiom ax)
public boolean isSkippable(org.semanticweb.owlapi.model.OWLClass c)
Copyright © 2010–2015. All rights reserved.