Protege Owl: restrictions on individuals

553 views Asked by At

I have a little problem with my ontology! We work on an ontology which manage a smart home. So we have objects like Tables, Doors, Lamps, .... A object that is smart has:

  • an actuator which run an action like open a door for example
  • a sensor which gets informations about temperature for example

I have ObjectProperties for ex: hasActuator --> Door hasActuator DoorController

So now, the problem is the individuals! I would like that an object (Door_1 for example) has an actuator DoorController_1 but an other Door (Door_2) can't use the actuator DoorController_1 because he's already use !

How can I treat that? Which restrictions?

If I put hasActuator functional, it's only to say that a object can have only one actuator, but it's not that I want!

1

There are 1 answers

0
Joshua Taylor On

The short solution

It sounds like you're trying to say an entity can't be in use by more than one thing at a time. This is a candidate for InverseFunctionalProperties. If you say that

uses is an inverse functional property
door1 uses controller1
door1 ≠ door2

Then you can infer that

not( door1 uses controller1 )

How it works

Stating that a property p is an inverse functional property says that

Functional(p): if p(x,y) & p(x,z) then y = z

Stating that a property p is inverse function is similar, but says that

InverseFunctional(p): if p(x,z) & p(y,z) then x = y

So, suppose you have the data:

uses(door1,controller1)
door1 ≠ door2

Now consider the hypothesis that

uses(door2,controller1)

From it and the data, you can derive

door1 = door2

But from the data we already have

door1 ≠ door2

and this is a contradiction, so the hypothesis must be false. Therefore:

not(uses(door2,controller1))