Семантика транзитивных ролей: если (x, y) \in R
и (y, z) \in R
, то (x, z) \in R
.Исходя из этого из вашей онтологии, у вас есть:
(1) Course_1 partOf Knowledge_Area_1 partOf Knowledge_Group_1
, что означает Course_1 partOf Knowledge_Group_1
, что эквивалентно Knowledge_Area
.
(2) Course_1 partOf Term_1 partOf partOf Year_1
, что означает Course_1 partOf Year_1
, что эквивалентно Term
.
Следовательно, Course_1
представляет собой Term
и Knowledge_Area
, а с Course
эквивалентно Term or Knowledge_Area
, Course_1
также является Course
, что в значительной степени объясняется объяснением того, почему Course_1
является Term
.
На мой взгляд, ключевая вещь, которую нужно осознатьздесь то, что вы на самом деле имеете дело с разными partOf
отношениями, а не с одним.Подсказка к этому факту заключается в том, что в разных контекстах вы хотите вывести информацию о разных типах из вашего отношения partOf
.Тип информации из отношений в OWL выводится в основном из ограничений домена и диапазона.Вот возможное решение вашей проблемы:
ObjectProperty: partOf
ObjectProperty: partOfKA
SubPropertyOf: partOf
Domain: Course
ObjectProperty: partOfKG
SubPropertyOf: partOf
Domain: Knowledge_Area
ObjectProperty: partOfTerm
SubPropertyOf: partOf
Domain: Course
ObjectProperty: partOfYear
SubPropertyOf: partOf
Domain: Term
Class: Course
Class: Knowledge_Area
Class: Knowledge_Group
DisjointWith: Year
Class: Term
Class: Year
DisjointWith: Knowledge_Group
Individual: Course_1
Facts:
partOfKA Knowledge_Area_1,
partOfTerm Term_1
Individual: Knowledge_Area_1
Facts: partOfKG Knowledge_Group_1
Individual: Knowledge_Group_1
Types: Knowledge_Group
Individual: Term_1
Facts: partOfYear Year_1
Individual: Year_1
Types: Year
Строго говоря, вам не нужно свойство partOf
в моем примере онтологии.Я просто добавил это для концептуальной ясности.Более того, в моем примере онтологии нет необходимости в переходных свойствах.