1

I am new to ontology design, and I have a project that requires me to match some individuals if they point to the same values for some of their properties.

I've posted some screenshots with the classes, object properties, data properties and individuals here: https://i.stack.imgur.com/6lj7H.jpg

A more "in detail" explanation(CAN ALSO BE DEDUCED FROM THE PICS): I have the class Person, who has a subclass Expert. There are also class FieldOfPractice(subclasses: computer_science, engineering, public_administration, etc.), Expertise(very_low,low,moderate,high,very_high) and Certification(A,B,C,D), Book and Expertise_Community classes. I have as data properties firstName, lastName, dateAdded, bookName, communityName.

Each Person (so also Expert) has to have hasCertification, hasExpertise, hasFieldOfPractice properties which will all have the obvious range. The Expert has to have recommendedBooks() and isInExpertCommunity properties.

The requirement: Create some Individuals of type Person, Expert, Book,etc. Make an "inference algorithm" such that for each person who has the same certification, expertise and field of practice as any of the experts, recommendedBooks() and isInExpertCommunity properties are inferred from the corresponding Expert Individuals to the Person Individual.

So for example lets say that: We have an individual Person: Mr.A , who has as object properties hasFieldOfPractice() computer_science, hasCertification() B, hasExpertise() very_low.

We also have an individual Expert: Expert5 with the same values for hasFieldOfPractice(), hasCertification() and hasExpertise() as Mr.A. Expert5 has as recommendedBooks() book1, book6 and for isInExpertiseCommunity() community4.

The "inference algorithm" should infer to Mr.A the recoomendedBooks() book1, book6 and isInExpertiseCommunity() community4. It should also do this if Mr.A matches with another expert who points at different books for reccomendedBooks() and/or another expertise community.

I have also found some similar questions but haven't been able to link the answers properly to my problem:

How to infer isBrotherOf property between two individuals - very good answers, but I need to change the SameAs() property instead of hasBrother() from the question.

Using Property Chains to get inferred Knowledge in an OWL Ontology(Protege) - same problem, but here my SameAs() which I think its predefined, corresponds with the example's employs().

From what I've seen I have to link somehow the sameAs() -> property chain -> rollification concepts, but I don't really get it yet.

Ovidiu Deliu
  • 21
  • 1
  • 6
  • 1
    Not sure whether you understood the semantics of `owl:sameAs` properly, but there is no need to use this property explicit in any OWL class expression. `owl:sameAs` is a built-in property of OWL and has a well-defined semantics. What you're describing is for sure just a use-case of rules, e.g. written in SWRL. Open the rule tab in Protege and just add the appropriate rule, the rest is up to the reasoner. `Person(?x), hasFieldOfPractice(?x, ?f), Expert(?y), hasFieldOfPractice(?y, ?f), ... -> ...` – UninformedUser Jan 08 '18 at 04:11
  • I've mentioned it because that what my ontology to do. I can manually add the same as individuals who fulfill the requirement, but that's not the programmer way to do it (and what if in the future I may have 100 individuals). I've researched your answer, and I still have the same question. I can't really use directly the owl:sameAs property (as you said), and if so, what should it be after -> in the swrl? As I see it now my swqr would be:Person(?x), hasFieldOfPractice(?x, ?f), Expert(?y), hasFieldOfPractice(?y, ?f), hasCertification(?x,?c), hasCertification(?y,?c)... -> sameAs(?x,?y) – Ovidiu Deliu Jan 08 '18 at 05:56

0 Answers0