Как заставить класс иметь ровно одно из заданного свойства

У меня есть класс Person и набор свойств данных: First_Name, фамилия, Gender, DoB, Country_of_Birth. Для свойств данных их Домены имеют значение Персона. То, что я хотел бы установить в моей онтологии, - это правило, которое гласит, что у каждого Человека должно быть ровно 1 из каждого из этих свойств.

Поэтому в Protege я настроил Person в качестве подкласса "First_Name ровно 1 xsd:string", "Фамилия ровно 1 xsd: string" и так далее. Затем я настраиваю человека с фамилией, но без имени, фамилии и т. Д.

Я тогда управляю мыслителем. Я ожидал бы, что это приведет к противоречиям (фамилия присваивается человеку, который не соответствует требованиям, чтобы быть Человеком), но нет, умозаключающий делает вывод, что Человек - это Человек, несмотря на тот факт, что он не имеет требуемых свойств.

Это правильное поведение? Как заставить онтологию вести себя так, как я хочу? Потому что я хочу, чтобы онтология была устойчивой к неполным данным (например, вы не можете добавить человека без имени).

1 ответ

Решение

Да, это правильное поведение благодаря тому, что Protege использует предположение об открытом мире, а не предположение о замкнутом мире, например, в реляционных базах данных. В предположении открытого мира нельзя предположить ничего, что не указано явно или может быть получено из явно известной информации. Когда вы создаете человека (возможно, типа Person) для которого вы назначены нет First_Name в предположении открытого мира мыслитель просто предполагает, что First_Name не известно, не то, что он не существует (как в случае предположения о замкнутом мире). Следовательно, причина, по которой мыслитель не дает несогласованности, хотя и подразумевает, что индивид должен быть типом Person, Чтобы получить несоответствие, вы должны заявить, что известно, что Person и не имеет First_Name, Это может быть достигнуто для человека john утверждая:

john Type Person
john Type First_Name max 0 xsd:string
Другие вопросы по тегам