Как получить отрицательное утверждение свойства объекта?

Я работаю в онтологии, и у меня есть следующее правило swrl:

User(?u) ^ Project(?p) ^ isRelatedTo(?u, ?p) ^ isMemberOf(?u, ?p) -> verifiedAssociation(?u, ?p)

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

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

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


person Maria Luiza    schedule 26.04.2018    source источник
comment
Добро пожаловать в Stackoverflow! Пожалуйста, проверьте Часто задаваемые вопросы о Запросе и сделайте его Минимальный, полный и проверяемый пример (MCVE) Пожалуйста, отформатируйте сообщение, чтобы сделать его более читабельным (полужирный, курсив, список, отступ кода и т. д.)   -  person Morse    schedule 26.04.2018


Ответы (1)


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

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.

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

Обновить

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

ObjectProperty: isMemberOf
ObjectProperty: isNotMemberOf
    DisjointWith: isMemberOf

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

User(?u) ^ Project(?p) ^ isRelatedTo(?u, ?p) ^ isNotMemberOf(?u, ?p) 
  -> NotVerifiedAssociation(?u, ?p)
person Henriette Harmse    schedule 26.04.2018
comment
Но если бы я хотел сказать: User(?u) ^ Project(?p) ^ isRelatedTo(?u, ?p) ^ isNotMemberOf(?u, ?p) -> NotVerifiedAssociation(?u, ?p) конкретный пользователь не имеет подтвержденной ассоциации с конкретным проектом. Это тоже было бы невозможно, верно? Obs: isRelatedTo и isMemberOf — это цепочки свойств с одним и тем же диапазоном и одним и тем же доменом, но с разными путями (свойствами подобъектов). Если один из них не выполняется, то я хочу сказать, что он не проверен / не соответствует. - person Maria Luiza; 26.04.2018
comment
SWRL не поддерживает отрицание. См. Часто задаваемые вопросы по SWRL. - person Henriette Harmse; 26.04.2018
comment
Обновлен ответ на ваш последний комментарий. - person Henriette Harmse; 27.04.2018