OWL 2 - 断言如果不喜欢 smth 则不喜欢它
OWL 2 - Assert that if not likes smth then dislikes it
我有一个公理:A 不喜欢 B 喜欢的东西。
然后是属性,喜欢和不喜欢。
我想推断,当某人不喜欢某事时,他就会不喜欢它。
我补充说,喜欢和不喜欢是不相交的,但我不知道如何进一步使用 Protege。
如果您不坚持推断对象属性,则有一种使用覆盖公理的解决方法,它可以关闭世界。
假设我们有一个 :Person_A
,如果 he/she 不喜欢某事,那么 he/she 不喜欢它。重点需要转移到 :Person_A
喜欢或不喜欢的事物上。他们将属于 class :ThingsThatAHasAttitudeTo
。
属性
首先,重要的是声明一个 属性 表示喜欢和不喜欢。
:dislikes rdf:type owl:ObjectProperty ;
rdfs:subPropertyOf :hasAttitude ;
owl:inverseOf :isDislikedBy .
:hasAttitude rdf:type owl:ObjectProperty .
:isDislikedBy rdf:type owl:ObjectProperty ;
rdfs:subPropertyOf :isLikedOrDislikedBy .
:isLikedBy rdf:type owl:ObjectProperty ;
rdfs:subPropertyOf :isLikedOrDislikedBy ;
owl:inverseOf :likes .
:isLikedOrDislikedBy rdf:type owl:ObjectProperty .
:likes rdf:type owl:ObjectProperty ;
rdfs:subPropertyOf :hasAttitude .
类
然后,如果您有一个仅包含个体 Person_A、
的枚举 class
:PersonClass_A rdf:type owl:Class ;
owl:equivalentClass [ rdf:type owl:Class ;
owl:oneOf ( :PersonClass_A
)
] .
对于喜欢的东西,需要以下限制:
:ThingsThatALikes rdf:type owl:Class ;
owl:equivalentClass [ owl:intersectionOf ( :ThingsThatAHasAttitudeTo
[ rdf:type owl:Restriction ;
owl:onProperty :isLikedBy ;
owl:someValuesFrom :PersonClass_A
]
) ;
rdf:type owl:Class
] .
...以及不喜欢的事物:
:ThingsThatADislikes rdf:type owl:Class ;
owl:equivalentClass [ rdf:type owl:Class ;
owl:unionOf ( [ owl:intersectionOf ( :ThingsThatAHasAttitudeTo
[ rdf:type owl:Restriction ;
owl:onProperty :isDislikedBy ;
owl:someValuesFrom :PersonClass_A
]
) ;
rdf:type owl:Class
]
[ owl:intersectionOf ( :ThingsThatAHasAttitudeTo
[ rdf:type owl:Restriction ;
owl:onProperty :isLikedOrDislikedBy ;
owl:someValuesFrom :PersonClass_A
]
) ;
rdf:type owl:Class
]
)
] .
最后,重要的是涵盖 class :ThingsThatAHasAttitudeTo
:ThingsThatAHasAttitudeTo rdf:type owl:Class ;
rdfs:subClassOf [ rdf:type owl:Class ;
owl:unionOf ( :ThingsThatADislikes
:ThingsThatALikes
)
] .
classes 需要不相交并且个体不同。
根据这些定义,如果有个人是 class :ThingsThatAHasAttitudeTo
的成员,对于那些没有断言 :Person_A
喜欢的人,他们将被推断为class :ThingsThatADislikes
.
成员
我有一个公理:A 不喜欢 B 喜欢的东西。 然后是属性,喜欢和不喜欢。 我想推断,当某人不喜欢某事时,他就会不喜欢它。
我补充说,喜欢和不喜欢是不相交的,但我不知道如何进一步使用 Protege。
如果您不坚持推断对象属性,则有一种使用覆盖公理的解决方法,它可以关闭世界。
假设我们有一个 :Person_A
,如果 he/she 不喜欢某事,那么 he/she 不喜欢它。重点需要转移到 :Person_A
喜欢或不喜欢的事物上。他们将属于 class :ThingsThatAHasAttitudeTo
。
属性
首先,重要的是声明一个 属性 表示喜欢和不喜欢。
:dislikes rdf:type owl:ObjectProperty ;
rdfs:subPropertyOf :hasAttitude ;
owl:inverseOf :isDislikedBy .
:hasAttitude rdf:type owl:ObjectProperty .
:isDislikedBy rdf:type owl:ObjectProperty ;
rdfs:subPropertyOf :isLikedOrDislikedBy .
:isLikedBy rdf:type owl:ObjectProperty ;
rdfs:subPropertyOf :isLikedOrDislikedBy ;
owl:inverseOf :likes .
:isLikedOrDislikedBy rdf:type owl:ObjectProperty .
:likes rdf:type owl:ObjectProperty ;
rdfs:subPropertyOf :hasAttitude .
类
然后,如果您有一个仅包含个体 Person_A、
的枚举 class:PersonClass_A rdf:type owl:Class ;
owl:equivalentClass [ rdf:type owl:Class ;
owl:oneOf ( :PersonClass_A
)
] .
对于喜欢的东西,需要以下限制:
:ThingsThatALikes rdf:type owl:Class ;
owl:equivalentClass [ owl:intersectionOf ( :ThingsThatAHasAttitudeTo
[ rdf:type owl:Restriction ;
owl:onProperty :isLikedBy ;
owl:someValuesFrom :PersonClass_A
]
) ;
rdf:type owl:Class
] .
...以及不喜欢的事物:
:ThingsThatADislikes rdf:type owl:Class ;
owl:equivalentClass [ rdf:type owl:Class ;
owl:unionOf ( [ owl:intersectionOf ( :ThingsThatAHasAttitudeTo
[ rdf:type owl:Restriction ;
owl:onProperty :isDislikedBy ;
owl:someValuesFrom :PersonClass_A
]
) ;
rdf:type owl:Class
]
[ owl:intersectionOf ( :ThingsThatAHasAttitudeTo
[ rdf:type owl:Restriction ;
owl:onProperty :isLikedOrDislikedBy ;
owl:someValuesFrom :PersonClass_A
]
) ;
rdf:type owl:Class
]
)
] .
最后,重要的是涵盖 class :ThingsThatAHasAttitudeTo
:ThingsThatAHasAttitudeTo rdf:type owl:Class ;
rdfs:subClassOf [ rdf:type owl:Class ;
owl:unionOf ( :ThingsThatADislikes
:ThingsThatALikes
)
] .
classes 需要不相交并且个体不同。
根据这些定义,如果有个人是 class :ThingsThatAHasAttitudeTo
的成员,对于那些没有断言 :Person_A
喜欢的人,他们将被推断为class :ThingsThatADislikes
.