Search code examples
rdfowlprotegedescription-logic

Class relations in OWL


Given:

Three owl classes: emptyTask, task, and userTask.

The relationship between the classes are as follows: userTask is equivalentTo task - which implies all individuals that are in userTask are also in task. emptyTask is a subclassOf task.

But what I want to achieve with such relation is that: all Individuals from userTask are also in task (done, reasoner logic). All individuals from emptyTask are in task, but emptyTask and userTask have no relation to each other. They are not in any way related in my Ontology.

Using 3 times equivalentTo is not what i wanna do. Hope you guys can understand what i want to achieve.

How would such a relation look like in Protege for instance. A answer in DL might be helpfull, but i would prefer a practical answer. This picture might help to understand want i want to say with all indiviudals. Screenshot from protege with hermit reasoner:

runningReasoner from class Task

This picture shows a equivalentTo relation between task and userTask. All individuals from userTask are also in task(reasoner logic)

When I want to open task with the reasoner i want to see all individuals from userTask and emptyTask

When I want to open userTask with the reasoner I want to see individuals from task only.

When I want to open emptyTask with the reasoner I want to see no Individuals from userTask or Task.

The question is how should I set the relations to each other to achieve so?

edit: screen 1 Screen 2

As you can see even with 3 classes it is not working. The button is always gray. I tried 2 different version of Protege!


Solution

  • It is not possible for emptyTask to be a subclass of task and have no relationship to userTask, if userTask is equivalent to task.

    Consider an instance of task, t.

    t is an instance of task by way of your subclass axiom. All instances of task are instances of userTask, by your equivalence. If t is not an instance of userTask, you have that it is not an instance of task either, by your equivalence.

    This leads to a clash: t is and is not an instance of task. This would make the ontology inconsistent.

    Do you mean to have userTask as a separate subclass of task?

    In Manchester syntax a disjoint union looks like this:

    Class: <http://iri/#b>
    Class: <http://iri/#c>
    Class: <http://iri/#d>
    
    Class: <http://iri/#a>
        DisjointUnionOf: 
            <http://iri/#b>, <http://iri/#c>, <http://iri/#d>
    

    A disjoint union is equivalent to declaring the main class as equivalent to the union of all classes mentioned, and declaring these classes disjoint. So you can achieve the same result without using a disjoint union axiom explicitly.

    Protege should allow you to create these axioms in its GUI as well.

    Protege interface for creating disjoint union axioms