2

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!

Richy
  • 27
  • 6
  • Ok, so if I understand you correct you currently have `:UserTask owl:equivalentTo :Task` and `:EmptyTask rdfs:subClassOf :Task`. What is unclear to me is where exactly the problem is. What part is not working correctly? Please [edit] to make your question more readable. Try and narrow down your example to its core. Not saying this to pick on you, by the way: it's a really important skill to develop and will help you analyze the problem yourself, as well. – Jeen Broekstra Aug 01 '16 at 03:41
  • To clarify: as far as I can tell the current setup (the two relations you already have) is enough to do everything you want. So what's going wrong according to you? – Jeen Broekstra Aug 01 '16 at 03:53
  • When using Subclass all instances from owl :class emptyTask are not in Task. I want all instances from userTask and emptyTask to be in Task. But emptyTask and userTask should not share instances with each other. – Richy Aug 01 '16 at 12:59
  • that problem was on the side of Protege. I installed the lastest version today and everything was fine. Before i had a beta version of protege desktop, which caused the malfunction. I use the relation from Jeen Broekstra and it works fine – Richy Aug 02 '16 at 19:59

2 Answers2

2

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

Ignazio
  • 10,504
  • 1
  • 14
  • 25
  • can a class be a instance of another class? Thought this works only for individuals? – Richy Aug 01 '16 at 08:14
  • 1
    That's punning - it's possible but it follows different rules. – Ignazio Aug 01 '16 at 08:48
  • You know how to apply a disjoint union to my example? – Richy Aug 01 '16 at 12:57
  • I'll update the answer once I get to my computer - hard to type Manchester syntax on the phone – Ignazio Aug 01 '16 at 15:33
  • Protege does not allow me to make Disjoint union with the provided tab for it, its always grey no matter which class i am using(seems bugged). Can you maybe provide this reference in owl manchester syntax? Task is equivalent to userTask(union). Task got aswell instances from emptyTask. EmptyTask and Task are disjoint, I will write this in the tab general class axioms – Richy Aug 02 '16 at 08:05
  • In my example the syntax is already available. It's just a matter of putting in the names. – Ignazio Aug 02 '16 at 08:11
  • alright i will do it. It just seems for me on the first glance there is something missing in betweeen to conver the relation. – Richy Aug 02 '16 at 08:18
  • what i did in manchester Syntax: emptyTask DisjointUnionOf Task and Task isequivlanentTo userTask. Protege does allow me to press the okay button but the result does not show up at the end – Richy Aug 02 '16 at 08:23
  • In Protege, select Task. The DisjointUnionOf link in the Description tab will be enabled. Clicking on it you'll be able to pick two (or more) existing classes. That's it. – Ignazio Aug 02 '16 at 20:50
  • Jepp that was I was doing. No matter what i do the okay button is not clickable. Even when i use a class from the hierarchy not class expression editor. Im pretty sure the option DisjointUnoinOf is bugged in Protege desktop 5.0. I tried evertything – Richy Aug 02 '16 at 22:18
  • does the tab work for you in Protege and which version you are using? How could i express it in owl instead that i can copy it straight into: owl:class externalTaskFactsype disjointUnionOf: emptytask and userTask – Richy Aug 03 '16 at 07:55
  • Protégé 5 beta 24 - yes it works, that's where the screenshot comes from. – Ignazio Aug 03 '16 at 07:59
  • same tab i was using. To do this in Protege is normally 2 clicks. I really look like a fool, but it is not working. Maybe it has something to do with my previous mappings and imports of other Ontologies. Its a huge project right now. Thank you for all the effort you are putting in. Means a lot really!! – Richy Aug 03 '16 at 14:39
  • I edited my initual post and provided 2 screenshots from my view. Im confused! – Richy Aug 03 '16 at 14:52
  • I think I needed to have Control pressed to select two or more classes – Ignazio Aug 03 '16 at 15:08
  • wow now its working. Thank you so much. That was really the issue. You need to press control :D – Richy Aug 03 '16 at 15:46
  • i somehow missunderstood the concept of disjointUnionOf: I said that externalTaskFactsType disjointunionOf task and emptyTask. But when running the reasoner there are 0 instances in externalTaskFactsytpye. I wanted to have all isntances from the classes: emptyTask has 2 instances and userTask5 instances which are not related – Richy Aug 03 '16 at 16:21
0
Class: <http://www.yawlfoundation.org/yawlschema#emptyTask>,
Class: <http://dkm.fbk.eu/index.php/BPMN2_Ontology#userTask>
Class: <http://www.yawlfoundation.org/yawlschema#ExternalTaskFactsType>

DisjointUnionOf:
    <http://www.yawlfoundation.org/yawlschema#emptyTask>,
    <http://dkm.fbk.eu/index.php/BPMN2_Ontology#userTask>

Relation: userTask is owl:equivalentTo ExternalTaskFactstype

Does not work when i copy this into my Ontology from my notepad. I tried to fallow your approach. I copied the DisjointUnionOf part.

Richy
  • 27
  • 6