Как заставить класс иметь ровно одно из заданного свойства
У меня есть класс 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