OWL 中的复杂概念描述
Complex concept description in OWL
我正在调查OWL,但仍然无法理解以下内容。假设我们有 Family class。它有 BadFamily 和 GoodFamily subclasses(这些也可以只是个人 - 不是 subclasses)。在现实世界中,家庭概念涉及多个对象的存在(例如父亲、母亲、儿子、女儿)。家庭中的某些人可以彼此相爱或彼此讨厌(“爱”和“恨”是我理解的关系)。因此,在 BadFamily 中,几个人互相憎恨。在 GoodFamily 中,几个人彼此相爱。那么如何在 OWL 中表示(Protege 示例或列表中的基本方向建议会很棒!)。
也可以理解为不同案例的描述,所有案例都使用相同的classes和关系,只是组合方式不同。
这是实现它的一种方法。您可以创建以下分类法:
-家庭
--好家庭
--坏家庭
-家庭成员
--爱家人
以及对象属性:
-有家庭成员
-hasRelative
-lovesFamilyMember
-讨厌家庭成员
其中后者应该被宣布为反身性,以排除class当成员只爱自己时将家庭视为好家庭。
那你需要定义class的FamilyMember
等同于lovesFamilyMember some FamilyMember
,而GoodFamily' as equivalent of
的class有一些FamilyMember LovesFamilyMember`.
你还需要注意你所爱的和恨你的人是一家人。为此,您可以首先定义 hasRelative
是一个对象 属性,将家庭成员与同一家庭的成员联系起来:
inverse (hasFamilyMember) o hasFamilyMember
。然后,您需要添加此关系作为 class LovesFamilyMember
成员资格的另一个条件。现在 class 的完整定义将变成:
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
)
] .
我正在调查OWL,但仍然无法理解以下内容。假设我们有 Family class。它有 BadFamily 和 GoodFamily subclasses(这些也可以只是个人 - 不是 subclasses)。在现实世界中,家庭概念涉及多个对象的存在(例如父亲、母亲、儿子、女儿)。家庭中的某些人可以彼此相爱或彼此讨厌(“爱”和“恨”是我理解的关系)。因此,在 BadFamily 中,几个人互相憎恨。在 GoodFamily 中,几个人彼此相爱。那么如何在 OWL 中表示(Protege 示例或列表中的基本方向建议会很棒!)。
也可以理解为不同案例的描述,所有案例都使用相同的classes和关系,只是组合方式不同。
这是实现它的一种方法。您可以创建以下分类法:
-家庭
--好家庭
--坏家庭
-家庭成员
--爱家人
以及对象属性:
-有家庭成员
-hasRelative
-lovesFamilyMember
-讨厌家庭成员
其中后者应该被宣布为反身性,以排除class当成员只爱自己时将家庭视为好家庭。
那你需要定义class的FamilyMember
等同于lovesFamilyMember some FamilyMember
,而GoodFamily' as equivalent of
的class有一些FamilyMember LovesFamilyMember`.
你还需要注意你所爱的和恨你的人是一家人。为此,您可以首先定义 hasRelative
是一个对象 属性,将家庭成员与同一家庭的成员联系起来:
inverse (hasFamilyMember) o hasFamilyMember
。然后,您需要添加此关系作为 class LovesFamilyMember
成员资格的另一个条件。现在 class 的完整定义将变成:
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
)
] .