Как я могу получить утверждение об отрицательном свойстве объекта? - PullRequest
0 голосов
/ 26 апреля 2018

Я работаю в онтологии, и у меня есть следующее правило swrl: Пользователь (? U) ^ Project (? P) ^ isRelatedTo (? U,? P) ^ isMemberOf (? U,? P) -> подтвержденная ассоциация (? U,? P)

И я хотел бы знать, когда происходит утверждение свойства отрицательного объекта (когда validAssociation имеет значение true).

Я нашел в Protégé вкладку Assertions свойства, но я хотел бы, чтобы это было сделано выводом (рассуждением). И я не знаю, как создать правило, чтобы это произошло.

Может ли кто-нибудь помочь мне? Спасибо!

1 Ответ

0 голосов
/ 26 апреля 2018

Нет никакого способа сделать такой вывод с помощью правила. Причина в том, что вам нужно, чтобы иметь возможность сказать, что

User(?u) ^ Project(?p) ^ isNotRelatedTo(?u, ?p) ^ isNotMemberOf(?u, ?p) 
  -> unverifiedAssociation(?u, ?p)

но вы должны сказать, что ?u не имеет отношения к любому ?p, а не только как к конкретному? P. Это выходит за рамки правил и выходит за рамки OWL / DL, поскольку требует формы рассуждений замкнутого мира, а не рассуждений открытого мира.

Чтобы достичь желаемого результата, вам нужно каким-то образом закрыть свой мир. Таким образом, у вас есть пользователи, которые либо назначены на проект, либо они еще не назначены. Введем класс NoProject, который не пересекается с Project. Затем вы добавляете правило

User(?u) ^ NoProject(?p)
  -> unverifiedAssociation(?u, ?p)

, где unverifiedAssociation не пересекается с verifiedAssociation.

Вы также можете посмотреть на Индивида с нулевым свойством объекта. Вопрос переполнения стека.

Update

SWRL не поддерживает отрицание в соответствии с SWRL FAQ . Единственный способ - определить двойственные свойства вашего объекта, которые не пересекаются. То есть.,

ObjectProperty: isMemberOf
ObjectProperty: isNotMemberOf
    DisjointWith: isMemberOf

Аналогично для VerifiedAssociation и NotVerifiedAssociation. Затем вы определяете свое правило в положительной форме:

User(?u) ^ Project(?p) ^ isRelatedTo(?u, ?p) ^ isNotMemberOf(?u, ?p) 
  -> NotVerifiedAssociation(?u, ?p)
...