Ontology 用OWL表示if-then语句?

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是一个至少有五只狗的

我正在使用基本的OWL,很容易表达一些简单的句子,比如“Songoku是一名讲师,他教数学”

例如:


但当我试图表达这句话时,我遇到了一个问题:鲍勃是一名学生,如果鲍勃有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
  )
)