1
votes

I try to create an ontology in OWL, using Protégé 5.5.0. No I have a little trouble with inferred classes.

I have three classes: Agents and as subclasses Groups and Persons. Persons can be members of Groups. Now I want to create two inferred classes: a) "Members of groups" and b) "Not members of groups" (both as subclasses of Person)

I was successful with a), using the axiom equivalent class: Person and member_of some Group. I created one individual, which is a person and member of a group and it was inferred to be member of the class "Members of groups".

Now I'm stuck with b). I tried several options for the equivalent class, for example: Person and member_of max 0 Group Or: Person and member_of exactly 0 Group Or: Person and not member_of some Group I created an individual which is a person but no groupmember. But the reasoner does not agree with me about the fact, that this individual should belong to the inferred class "Not members of groups".

What did I do wrong?

1
Thanks for the comment! For the individual I wanted to put in the class "Not members of groups" I added the following type: "member_of max 0 Group". So now, obviously, the individual is inferred to be member of "Not members of groups". But that doesn't really solve the problem, because my intention was to find a way, to automatically find all the individuals, who are not members of a group without having to add this information for every individual by myself. Isn't this possible to do this somehow?LenaWC
Not in Protégé. Stardog supports closed world reasoning; or try SPIN/SHACL.Stanislav Kralin

1 Answers

0
votes

One way to achieve this in OWL, using your Person and not member_of some Group, is to define a MemberOfGroup class that is defined as you suggested. Then define a NotMemberOfGroup class, that is disjoint with the MemberOfGroup class. If you now define your individual to be of type Person, as well as of type not member_of some Group, then your individual will be classified as belonging to the NotMemberOfGroup class.

The reason why you have to do this, is that OWL uses the open world assumption and hence it can only make inferences about things it knows for sure. I.e. saying that the individual is a Person, while making no statement regarding member_of provides the reasoner with zero explicit info to determine that the individual either belongs or does not to a group.

The other option is to use SHACL/SHEX/SPIN.