Проблемы использования экзистенциальных ограничений в Protege
Я хочу выяснить, имеет ли Лицо, принадлежащее к классу А, хотя бы одно отношение ко ВСЕМ лицам, принадлежащим к классу В.
У меня проблема с поиском подходящего выражения, которое дает мне желаемые результаты запроса DL. Для приведенного ниже примера:
Classs: Course {CourseA, CourseB, CourseC, CourseD}
Class: Program {UG_CE, G_CE}
Class: Student {John}
ObjectProperty: is-PartOf (Course,Program)
ObjectProperty: hasEnrolledIn (Student, Course)
для физических лиц: CourseA и CourseB, я подтвердил свойство:
is-PartOf UG_CE
Для Индивидуального Джона были утверждены следующие 3 свойства:
hasEnrolledIn CourseA
hasEnrolledIn CourseB
hasEnrolledIn CourseC
Я также добавил к индивидуальному типу
hasEnrolledIn only ({CourseA , CourseB , CourseC})
для решения проблем OWA.
Я хочу знать, записался ли Джон на все курсы, которые требуются для UG_CE, обратите внимание, что Джон записался на все курсы и дополнительный курс.
После вызова аргумента следующий запрос не даст мне желаемого результата:
Student that hasEnrolledIn only (is-PartOf value UG_CE)
поскольку "только" ограничивается определением точного количества отношений, оно не служит намеченной цели. Кроме того, я не могу использовать Макс или Мин, так как количество курсов выведено и неизвестно заранее.
Может ли другой подход решить мою проблему?
1 ответ
Хотя хорошо "закрывать" мир в отношении того, какие классы посещает Джон, столь же важно закрывать его в отношении того, какие классы требуются для UG_CE. Я думаю, что вам нужен такой подход:
М требует А.
М требует Б.
M: требуется только {A, B}.
J поступил в A.
Я поступил в Б.
J поступил в C.
J: зарегистрирован только в {A, B, C}.
Для отдельного ученика J вы можете узнать, зачислены ли они во все классы, необходимые для M, спросив, является ли набор классов, требуемый для M, подмножеством набора классов, зачисленных студентом:
(обратное(требует) значение M) SubClassOf (обратное(enrolledIn) значение J)
или, в нотации DL, с перечисленными классами (множество возможных способов выразить это):
∃ требуется-1. {M} ⊑ ∃ зарегистрирован в-1. {J}
Теперь, если у OWL было отрицание свойства, вы могли бы получить набор учеников, которые только не зачислены в классы, не требующиеся для выражения вроде этого:
not(enrolledIn) только not(обратное(требует) значение M)
Это требует таких вещей, что единственные курсы, на которые они не зачислены, - это курсы, которые не требуются М. Однако OWL не имеет выражений отрицания свойств, поэтому я не уверен, куда это нас уходит. Самое простое, что можно сделать - добавить свойство "не зарегистрирован", хотя это не выглядит элегантно.