simphony/simphony-osp

return classes with proper ontological hierarchy

adhamhashibon opened this issue · 2 comments

the superclasses attribute returns the classes in random (alphabetical?) order, but should be in proper hierarchical order as it will convey more added value in applications.

e.g., superclasses of a citizen is now:

frozenset({<OntologyClass: City [https://www.simphony-osp.eu/city#City>,](https://www.simphony-osp.eu/city#City%3E,)
           <OntologyClass: Geographical Place [https://www.simphony-osp.eu/city#GeographicalPlace>,](https://www.simphony-osp.eu/city#GeographicalPlace%3E,)
           <OntologyClass: Populated Place [https://www.simphony-osp.eu/city#PopulatedPlace>,](https://www.simphony-osp.eu/city#PopulatedPlace%3E,)
           <OntologyClass: [http://www.w3.org/2002/07/owl#Thing>})](http://www.w3.org/2002/07/owl#Thing%3E}))

probably we need to add a way to traverse iteratively from one level to the other, as in the original pretty_print function.

@yoavnash @kysrpex could you please review this and let me know whether it came up before?

just to add:

- Ontology individual:
  identifier: e4afaa4e-4600-4236-9627-61dd1275eb0b
  type: City (city)
  superclasses: City (city), Geographical Place (city), Populated Place (city), None (owl)
  values: coordinates: [0 0]

pretty print also gets it wrong, it should be as below:

image

This seems due to the use of frozenset which does not attempt to preserve the order (and in fact seems to order the elements alphanumerically...). Will try to use instead list(dict.fromkeys([...]))!.

as in:

for i in (list(dict.fromkeys([1, 3, 2, 2, 3, 4, 4, 5, 5]))):
    print(i)
1
3
2
4
5