| 1 | = Reasoning in OntoCAT = |
| 2 | |
| 3 | Reasoning over ontologies and extracting relationships is supported by using [http://www.hermit-reasoner.com/ HermiT] reasoner. |
| 4 | OBO ontologies are translated by [http://owlapi.sourceforge.net OWL API] into valid OWL format that can be reasoned over. |
| 5 | |
| 6 | '''What reasoning is needed for?''' |
| 7 | |
| 8 | Reasoning is fundamental to exploring any sort of hierarchies of the more expressive ontologies. |
| 9 | We present here a simple example how reasoner could be employed, but considerably more complicated scenarios are in use by the OWL community. |
| 10 | |
| 11 | [[Image(wiki:r:ontology.png)]] |
| 12 | |
| 13 | Consider the following hypothetical ontology (annotated with Description Logic syntax above) describing the anatomical relations among the parts of heart. |
| 14 | We start by defining four classes: ''Heart'', ''!HeartComponent'', ''!LeftHeart'', and ''!MitralValve'' and two object properties to describe the partonomy: ''partOf'' and ''hasPart''. The two '''''primitive classes''''' ''!LeftHeart'' and ''!MitralValve'' have additional necessary conditions defined as ''partOf some Heart'' and ''partOf some !LeftHeart'' respectively in order to describe that mitral valve is a component of left heart, which in turn is a part of the whole heart. We additionally create a '''''defined class''''' ''!HeartComponent'' as a convenience class to capture all the different parts of heart as subsumptions and this is our primary query -- find all parts of heart. |
| 15 | |
| 16 | Simply parsing the ontology to find which classes have the statement ''partOf some Heart'' among their restrictions would only return ''!LeftHeart'', but miss ''!MitralValve'' completely. However, if we additionally specify that ''partOf'' is transitive, the reasoner would be able to infer that ''!MitralValve'' is also a ''!HeartComponent''. |
| 17 | |
| 18 | Conversely, while it is possible to query for all classes fulfilling the existential restriction ''partOf some Heart'' to retrieve all parts of heart, the opposite query for ''hasPart some !LeftHeart'' will not return ''Heart'' due to the OWL's open world assumption, unless a [http://ontogenesis.knowledgeblog.org/1001 closure axiom] ''hasPart some Heart AND hasPart only Heart'' is additionally specified on ''!LeftHeart'' class. |
| 19 | This limitation is not directly addressed in the package, as it would require precomputing a complete graph of different relations axes, which is computationally intensive and heavily dependant on the size and expressiveness of the ontology in question. |
| 20 | |
| 21 | Furthermore, while the reasoner does return ''!LeftHeart'' and ''!MitralValve'' when queried for subclasses of '''''anonymous class''''' ''partOf some Heart'' (equivalent to the aforementioned '''''defined class''''' ''!HeartComponent'') we additionally transform all the properties into their inverses at this stage, so that ''partOf'' becomes ''hasPart'' and the resulted output from the package is ''Heart'' ''hasPart'' ''!LeftHeart'' and ''!MitralValve''. As this depends on the existence of inverse restrictions on the object properties within the ontology, these are automatically added based on the [http://www.obofoundry.org/ro/ Relation Ontology] where necessary. |