Как правильно установить ограничение «только» в протеже? - PullRequest
0 голосов
/ 01 июля 2018

Я хочу представить в Protégé контейнер с шариками. У меня есть класс RedBallContainer, который является контейнером, и RedBall, который является мячом, как показано на следующем рисунке:

class hierarchy

Я создал свойство Contains с доменом Container и Range Ball.

Теперь я хотел сказать, что «контейнер - это RedBallContainer, если он содержит только красные шары». Для этого я добавил следующее правило:

rule

Теперь, когда я запускаю рассуждение, он говорит мне, что класс Container равен Thing, но я думаю, что это неправильно для того, что я хотел представить! Вот изображение того, что умозаключает:

reasoner result

Что я делаю не так?

1 Ответ

0 голосов
/ 02 июля 2018

Ну, ваше правило ограничения неверно. Это говорит

«RedballContainer эквивалентен классу, который только содержит RedBallContainers»

Должно быть:

«RedballContainer эквивалентен классу, который только содержит RedBalls»

Редактировать Как вы узнали выше, исправление не удаляет странное предполагаемое отношение эквивалентности. Причина, по которой он там, несколько запутанная, но примерно такая:

  1. мы знаем, что домен contains равен Container, поэтому все, что использует свойство contains, по определению, Container.
  2. мы знаем, что RedBallContainer эквивалентно всему, что содержит только RedBall с, поэтому любой предмет, который содержит только красные шары, является контейнером из красных шаров.
  3. мы также знаем, что RedBallContainer является подклассом Container.

А теперь представьте себе предмет, который не является Container. Возможны два варианта: он либо содержит что-то, либо ничего. Если оно содержит что-то, то по определению 1 оно все равно равно Container.

Однако, если он не содержит что-либо, это означает, что все содержащиеся в нем шары на самом деле являются красными шарами (поскольку ни один из содержащихся в нем нулевых шаров не является красными шарами)! По нашему второму определению, эта вещь, следовательно, является RedBallContainer. По нашему третьему определению, это должно быть Container в конце концов.

Короче говоря, в соответствии с этим набором правил что-то не может быть Container. Все это Container, поэтому Container и Thing эквивалентны.

Ах, логика.

Чтобы исправить, вы можете изменить ограничение, указав, что RedBallContainer эквивалентен любому Container, который содержит только красные шары:

   EquivalentTo Container and contains only RedBall
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...