Ontology 用OWL表示if-then语句?
我正在使用基本的OWL,很容易表达一些简单的句子,比如“Songoku是一名讲师,他教数学” 例如:Ontology 用OWL表示if-then语句?,ontology,owl,Ontology,Owl,我正在使用基本的OWL,很容易表达一些简单的句子,比如“Songoku是一名讲师,他教数学” 例如: 但当我试图表达这句话时,我遇到了一个问题:鲍勃是一名学生,如果鲍勃有5条狗,那么他至少有一只猫。 你能告诉我一些建议吗?你可以用一般的子类公理在OWL中表示一些相当复杂的条件句。让我们看几个例子。如果你在尝试简单一点的东西,说 Students with at least five dogs have at least one cat. 这是量化条件“对于所有x,如果x是一个至少有五只狗的
但当我试图表达这句话时,我遇到了一个问题:鲍勃是一名学生,如果鲍勃有5条狗,那么他至少有一只猫。
你能告诉我一些建议吗?你可以用一般的子类公理在OWL中表示一些相当复杂的条件句。让我们看几个例子。如果你在尝试简单一点的东西,说
Students with at least five dogs have at least one cat.
这是量化条件“对于所有x,如果x是一个至少有五只狗的学生,那么x至少有一只猫,你可以用猫头鹰和
(Student and hasPet min 5 Dog) subClassOf (hasPet some Cat)
这两个都是匿名类表达式,但您可以定义一些等效类以简化某些操作:
StudentWithAtLeastFiveDogs equivalentClass (Student and hasPet min 5 Dogs)
CatOwner equivalentClass (hasPet some Cat)
StudentWithAtLeastFiveDogs subClassOf CatOwner
现在,您的示例是鲍勃是一名学生,如果鲍勃有5条狗,那么他至少有一只猫。这里有两个句子。第一个句子很容易用
Bob a Student
第二个有点复杂。你是说Bob是这类事物中的一员,如果他们至少有五只狗,他们至少有一只猫。一个(物质)条件“如果p那么Q”在逻辑上等同于析取(不是p)或Q所以我们说Bob是至少没有五个点或者至少有一只猫的那类事物中的一员。它的类表达式是
(not (hasPet min 5 Dog)) or (hasPet some Cat)
现在我们对鲍勃的了解是
Bob a Student
Bob a (not (hasPet min 5 Dog)) or (hasPet some Cat)
您可以为那个匿名类表达式定义一个等价的类,但我怀疑它在大多数语言中是否会被非常自然地呈现出来。以下是包含关于Bob的知识的本体(在中):
本体N3序列化的相关部分为:
:Bob a [ a owl:Class ;
owl:unionOf ([ a owl:Class ;
owl:complementOf
[ a owl:Restriction ;
owl:onProperty :hasWeight ;
owl:someValuesFrom
[ a rdfs:Datatype ;
owl:onDatatype xsd:int ;
owl:withRestrictions
([ xsd:minInclusive 60
])
]
]
] [ a owl:Restriction ;
owl:onProperty :hasHeight ;
owl:someValuesFrom
[ a rdfs:Datatype ;
owl:onDatatype xsd:int ;
owl:withRestrictions
([ xsd:minInclusive 180
])
]
])
] .
这是一个文本:
它在OWL中有这样的表示:
ClassAssertion(
:student
:Bob
)
SubClassOf(
ObjectIntersectionOf(
ObjectOneOf(
:Bob
)
ObjectMinCardinality(
5
:have
:dog
)
)
ObjectSomeValuesFrom(
:have
:cat
)
)
可以使用自动计算。
因此,如果您已经设法用英语对您的语句进行概念化,那么值得检查ACE解析器是否能够将其自动映射到OWL,请参见。So,@Joshua Taylor,我应该定义3个类:
Student
(基类)、Anon1
(Student没有宠物min Dog-Student的子类)、Anon2
(Student
也有一些Student
的cat-子类,Anon1
和Anon2
是不相交的(通过使用关键字owl:disjointWith
),对吧?好吧,你不需要定义那些类(也就是说,通过让一些命名类与匿名类表达式owl:equalentclass
),您也不需要声明类是不相交的。毕竟,有些人可能没有五条狗,但他们仍然可以有一只猫,在这种情况下,它们将是Anon1
和Anon2
,如果您使这些类不相交,这将是不一致的。@Songokute我更新了答案以说明这一点“关于Bob的知识”看起来像是在一个本体中,唯一命名的类是Student、Cat和Dog。我没有用任何owl:equivalentClass
定义匿名类。谢谢你的热情:)非常感谢!我将阅读更多内容来理解OWL,你的回答对我帮助很大:)问题中的RDF片段没有表达“Songoku是一个讲师,他教数学”,它只是说“讲师是一个OWL班”。这门课是猫头鹰课。teach是一个具有领域讲师和范围主题的属性。“是的,所以我更新了我的问题:)啊,很高兴看到这一点提供的答案适合您吗?我现在正在移动设备上,但当我回来时,我会用一个限制数据类型属性的示例来更新答案,例如hasHeight。我已经用一个与数据类型属性相关的示例来更新我的答案。
:Bob a [ a owl:Class ;
owl:unionOf ([ a owl:Class ;
owl:complementOf
[ a owl:Restriction ;
owl:onProperty :hasWeight ;
owl:someValuesFrom
[ a rdfs:Datatype ;
owl:onDatatype xsd:int ;
owl:withRestrictions
([ xsd:minInclusive 60
])
]
]
] [ a owl:Restriction ;
owl:onProperty :hasHeight ;
owl:someValuesFrom
[ a rdfs:Datatype ;
owl:onDatatype xsd:int ;
owl:withRestrictions
([ xsd:minInclusive 180
])
]
])
] .
Bob is a student. If Bob has 5 dogs then Bob has at least 1 cat.
ClassAssertion(
:student
:Bob
)
SubClassOf(
ObjectIntersectionOf(
ObjectOneOf(
:Bob
)
ObjectMinCardinality(
5
:have
:dog
)
)
ObjectSomeValuesFrom(
:have
:cat
)
)