我正在调查OWL,但仍然无法理解以下内容。假设我们有家庭班。它有BadFamily和GoodFamily子类(这些也可以只是个体 - 而不是子类)。在现实世界中,家庭概念暗示了几个物体的存在(例如父亲,母亲,儿子,女儿)。家庭中的一些人可以彼此相爱或互相仇恨(据我所知,“爱”和“恨”是关系)。因此,在BadFamily中,有几个人互相仇恨。在GoodFamily中,有几个人彼此相爱。那么如何在OWL中表示(Protege示例或列表基本方向建议会很棒!)。
它也可以被视为不同的案例描述,其中相同的类和关系用于所有情况,但是以不同的组合。
答案 0 :(得分:0)
这是实现它的一种方法。您可以创建以下分类:
- 家庭
- GoodFamily
- BadFamilly
-FamilyMember
- LovesFamilyMember
和对象属性:
-hasFamilyMember
-hasRelative
-lovesFamilyMember
-hatesFamilyMember
其中后者应该被宣布为反射性的,以排除当一个家庭只爱自己时将一个家庭归为好。
然后你需要定义那些喜欢FamilyMember
等同于lovesFamilyMember some FamilyMember
的人的类,而GoodFamily' as equivalent of
的类有家庭成员一些LovesFamilyMember`。
你需要另外照顾受尊敬的爱戴和憎恨的成员属于同一个家庭。这可以通过首先定义hasRelative
是一个对象属性来链接一个家庭成员与来自同一家族的成员:
inverse (hasFamilyMember) o hasFamilyMember
。然后,您需要将此关系添加为类LovesFamilyMember
的成员资格的另一个条件。现在该类的完整定义将变为:
lovesFamilyMember some FamilyMember and hasRelative some FamilyMember
。
这就是Turtle与个人A
,B
和Family1
一起看待的情况:
#################################################################
# Object Properties
#################################################################
:hasFamilyMember rdf:type owl:ObjectProperty ;
rdfs:domain :Family ;
rdfs:range :FamilyMember .
:hates rdf:type owl:ObjectProperty ,
owl:IrreflexiveProperty .
:hatesFamilyMember rdf:type owl:ObjectProperty ;
rdfs:subPropertyOf :hates ;
rdfs:range :FamilyMember .
:loves rdf:type owl:ObjectProperty ,
owl:IrreflexiveProperty .
:lovesFamilyMember rdf:type owl:ObjectProperty ;
rdfs:subPropertyOf :loves ;
rdfs:range :FamilyMember .
#################################################################
# Classes
#################################################################
:BadFamily rdf:type owl:Class ;
rdfs:subClassOf :Family .
:Family rdf:type owl:Class .
:FamilyMember rdf:type owl:Class .
:GoodFamily rdf:type owl:Class ;
owl:equivalentClass [ rdf:type owl:Restriction ;
owl:onProperty :hasFamilyMember ;
owl:someValuesFrom :LovesFamilyMember
] ;
rdfs:subClassOf :Family .
:LovesFamilyMember rdf:type owl:Class ;
owl:equivalentClass [ owl:intersectionOf ( [ rdf:type owl:Restriction ;
owl:onProperty :hasRelative ;
owl:someValuesFrom :FamilyMember
]
[ rdf:type owl:Restriction ;
owl:onProperty :lovesFamilyMember ;
owl:someValuesFrom :FamilyMember
]
) ;
rdf:type owl:Class
] ;
rdfs:subClassOf :FamilyMember .
#################################################################
# Individuals
#################################################################
:A rdf:type owl:NamedIndividual ,
:FamilyMember ;
:lovesFamilyMember :B .
:B rdf:type owl:NamedIndividual ,
:FamilyMember .
:Family1 rdf:type owl:NamedIndividual ,
:Family ;
:hasFamilyMember :A ,
:B .
:Family2 rdf:type owl:NamedIndividual ,
:Family .
#################################################################
# General axioms
#################################################################
[ rdf:type owl:AllDifferent ;
owl:distinctMembers ( :A
:B
)
] .