This notebook serves to support a question on stackoverflow.
import time
print(time.ctime())
%load_ext ipydex.displaytools
Sat Jan 29 18:02:46 2022
import owlready2 as owl2
# rme: rector-modularization-example
onto = owl2.get_ontology("https://w3id.org/yet/undefined/rme#")
with onto:
class Protein(owl2.Thing):
pass
class Insulin(Protein):
pass
class Hormone_Role(owl2.Thing):
pass
class plays_role(owl2.ObjectProperty):
pass
class Protein_Hormone(owl2.Thing):
equivalent_to = [Protein & plays_role.some(Hormone_Role)]
Insulin.is_a.append(plays_role.some(Hormone_Role))
protein_subclasses = list(Protein.subclasses()) ##:
superclasses = Insulin.is_a ##:
protein_subclasses := [rme.Insulin]
---
superclasses := [rme.Protein, rme.plays_role.some(rme.Hormone_Role)]
---
# save the ontology and check results with protegé
target_path = "rector-modularization-asserted-minimal.owl"
onto.save(target_path, format="rdfxml")
owl2.sync_reasoner_hermit(infer_property_values=True, debug=1)
* Owlready2 * Running HermiT... java -Xmx2000M -cp /media/workcard/workstickdir/RST/expertise_system/ontologie_experimente/owlready2_cvk_fork/owlready2/hermit:/media/workcard/workstickdir/RST/expertise_system/ontologie_experimente/owlready2_cvk_fork/owlready2/hermit/HermiT.jar org.semanticweb.HermiT.cli.CommandLine -c -O -D -I file:////tmp/tmpv4rve23z -Y * Owlready2 * HermiT took 0.7144069671630859 seconds * Owlready * Reparenting rme.Insulin: {rme.Protein} => {rme.Protein_Hormone} * Owlready * Reparenting rme.Protein_Hormone: {owl.Thing} => {rme.Protein} * Owlready * (NB: only changes on entities loaded in Python are shown, other changes are done but not listed)
protein_subclasses = list(Protein.subclasses()) ##:
insulin_superclasses = Insulin.is_a ##:
protein_subclasses := [rme.Insulin, rme.Protein_Hormone]
---
insulin_superclasses := [rme.plays_role.some(rme.Hormone_Role), rme.Protein_Hormone]
---
having Insulin
as a direct subclass of Protein
after reasoning is unexpected (see "Reparenting rme.Insulin: {rme.Protein} => {rme.Protein_Hormone}" in output above). This is the inferred class hierarchy obtained from Protegé: