我有公理:个人A不喜欢B个人所喜欢的。 然后,有属性,喜欢和不喜欢。 我想推断,当有人不喜欢某事时,他不喜欢它。
我已经补充说,喜欢和不喜欢是不相交的,但我不知道如何进一步使用Protege。
答案 0 :(得分:1)
如果你不坚持推断对象属性,那么使用覆盖公理就可以解决这个问题。
我们说我们有:Person_A
,如果他/她不喜欢某事,那么他/她不喜欢它。焦点需要改为:Person_A
喜欢或不喜欢的事物。它们属于班级: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的枚举类,
: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
]
)
] .
最后,重要的是要涵盖课程:ThingsThatAHasAttitudeTo
:ThingsThatAHasAttitudeTo rdf:type owl:Class ;
rdfs:subClassOf [ rdf:type owl:Class ;
owl:unionOf ( :ThingsThatADislikes
:ThingsThatALikes
)
] .
课程需要脱节,个人不同。
通过这些定义,如果有个人是类:ThingsThatAHasAttitudeTo
的成员,对于那些没有声明:Person_A
喜欢的人,他们将被推断为类:ThingsThatADislikes
的成员。 1}}。