Dear JiBa and friends!
I am working currently on a project to support the design of robot construction and I use the ontology to get the robot construction rules as meta models. I read the class of a robot part, which has differnt restrictions like below. Legged_Platform (a subclass of Robot_Platform of Robot_Subsystem class) * Equivalent_To: * Robot_Platform * and (hasNumberOfLeg exactly 1 xsd:int[>= "1"^^xsd:int]) * Subclass Of (Annonymous_Ancestor): (# The restrictions from Robot_Platfrom and Electrical_Device classes) * Robot_Platform * and ((hasNumberOfLeg exactly 1 xsd:int[> "0"^^xsd:int]) or (hasNumberOfWheel exactly 1 xsd:int[> "0"^^xsd:int])) * and (isSufficientForLocomotion some Locomotion_Capability) * and (hasRobotSubSystem min 1 Battery_Subsystem) * and (hasPayloadCapacity exactly 1 rdfs:Literal) * hasElectricalDeviceType some Electrical_Load My task is to find all releated restrictions (Equivalent To and Subclass of (Anonymous Ancestors) of a class) and parse each restriction to export it. I implemented the following code: .... for o in (system_modelling.Robot_Subsystem.subclasses ()): for s in o.descendants(include_self = False): # Get the robot platfrom types print('\n>', s.name, '\n') for l in s.ancestors(include_constructs = True): # find the all relations with grand relatives and restrictions restrictionParser(l) .... def restrictionParser(l): if (isinstance(l, owlready2.class_construct.Not) or isinstance(l, owlready2.class_construct.And) or isinstance(l, owlready2.class_construct.Or)): for p in l.is_a: print('call for', type(p), '\n',p)#, 'call parser for', p) if isinstance(p, owlready2.class_construct.Or): print(p.is_a) # is_a returns () for OR ??? restrictionParser(p) elif (isinstance(l, owlready2.class_construct.Restriction)): print(type(l)) print(l.property.name, l.value, owlready2.class_construct._restriction_type_2_label[l.type], l.property.range, l.cardinality,'\n') else: # ignore Thing Class Type members print('not parsed',type(l), l.name) ..... The code takes the descendants of a class, which contain several axioms, that can be composed from other axioms as logic statement (AND,OR) and parse it. It works for "owlready2.class_construct.And" and "owlready2.class_construct.Restriction" well. But for "owlready2.class_construct.Or" it doesnt work. Before I try to find another way, I would like to ask you: -Similar to owlready2.class_construct.And, can owlready2.class_construct.Or get the results for "is_a" as well? In my case it is empty. Thank you in advance! Greetings and regards, Mehmed |
Free forum by Nabble | Edit this page |