I need to infer that one individual is the brother of other one if they have the same father.
So, if I have this:
Bart hasFather Homer.
A brother is a male sibling. Consequently, we should define both 'male' and being a sibling. But since a sibling is itself a non-identical child of the same parents, one should also define being a child. For simplicity, we'll treat half-siblings as siblings, restrict the domain to humans, and leave the explicit definition of related concepts like motherhood and fatherhood aside.
Human classGender class disjoint with the Human class. Create male and female as individuals instantiating the Gender type (there are other ways to do this, but this is a pretty simple one).hasGender Object property, with Human as domain and Gender for its rangeMan class as a subclass of Human. Make it equivalent to Human and (hasGender value male).isChildOf Object property with Human for both its domain and range (Optional: Define a Child class as a subtype of human equivalent to isChildOf some Human. In similar fashion, you can also create object properties, then classes for Mother, Parent, Daughter, etc).isSiblingOf object property in Protege with Human for its domain and range.isChildOf(?sibling1, ?parent) ^ isChildOf(?sibling2, ?parent) ^ differentFrom(?sibling1, ?sibling2) -> isSiblingOf(?sibling1, ?sibling2)
You may also want to add rules for what you want to be able to infer from the siblinghood relation, e.g isSiblingOf(?x, ?y) ^ isChildOf(?x, z?) -> isChildOf(?y, ?z)isBrotherOf Object property in Protege with domain Man and range HumanMan(?x) ^ isSiblingOf(?x, ?y) -> isBrotherOf(?x, ?y) isBrotherOf(?x, ?y) -> Man(?x)
isBrotherOf(?x, ?y) -> isSiblingOf(?x, ?y)
The first rule states that any male sibling is a brother. The second and third infer maleness and siblinghood from brotherhood.
Brother class equivalent to isBrotherOf some Human to complete the rollification process.