使用OWL代表if-then句子?

Son*_*ute 7 owl ontology

我正在使用基本的OWL,并且很容易表示一些简单的句子,例如"Songoku是讲师,他教数学".

例如:

<owl:Class rdf:ID="Lecturer"></owl:Class>
<owl:Class rdf:ID="Subject"></owl:Class>
<owl:Property rdf:ID="teach">
   <rdfs:domain rdf:resource="#Lecturer"/>
   <rdfs:range rdf:resource="#Subject"/>
</owl:Property>

<Subject rdf:ID="Maths"></Subject>
<Lecturer rdf:ID="Songoku">
    <teach>
        <Subject rdf:about="#Maths"></Subject>
    </teach>
</Lecturer>
Run Code Online (Sandbox Code Playgroud)

但是当我试图表达这句话时我遇到了一个问题:Bob是学生,如果Bob有5只狗,那么他至少有一只猫..

你能告诉我一些建议吗?

Jos*_*lor 14

您可以使用一般子类公理在OWL中表示一些相当复杂的条件句.我们来看几个例子.如果你想尝试一些更简单的东西,比如说

Students with at least five dogs have at least one cat.
Run Code Online (Sandbox Code Playgroud)

这是量化条件的缩写"对于所有x,如果 x是一个至少有五只狗的学生,那么 x至少有一只猫,你可以在OWL中做到这一点

(Student and hasPet min 5 Dog) subClassOf (hasPet some Cat)
Run Code Online (Sandbox Code Playgroud)

这些都是匿名类表达式,但您可以定义一些等效的类来使事情变得更简单:

StudentWithAtLeastFiveDogs equivalentClass (Student and hasPet min 5 Dogs)
CatOwner equivalentClass (hasPet some Cat)
StudentWithAtLeastFiveDogs subClassOf CatOwner
Run Code Online (Sandbox Code Playgroud)

现在,你的例子是鲍勃是学生,如果鲍勃有5只狗,那么他至少有一只猫. 那里有两句话.第一个很容易编码

Bob a Student
Run Code Online (Sandbox Code Playgroud)

第二个有点复杂.你说鲍勃是这类东西的成员,如果他们至少有五只狗,他们至少有一只猫.(材料)条件"如果P则Q"在逻辑上等同于"(不是P)或Q"的分离.因此,我们说,鲍勃是类的东西,无论是成员具有至少五个点,或至少有一只猫.该类的表达式是

(not (hasPet min 5 Dog)) or (hasPet some Cat)
Run Code Online (Sandbox Code Playgroud)

现在我们对鲍勃的了解就是这样

Bob a Student
Bob a (not (hasPet min 5 Dog)) or (hasPet some Cat)
Run Code Online (Sandbox Code Playgroud)

您可以为该匿名类表达式定义一个等效类,但我怀疑它在大多数语言中都会很自然地呈现.这是包含关于Bob的知识的本体论(在N3格式中):

@prefix :        <http://www.example.com/example#> .
@prefix rdfs:    <http://www.w3.org/2000/01/rdf-schema#> .
@prefix owl:     <http://www.w3.org/2002/07/owl#> .
@prefix xsd:     <http://www.w3.org/2001/XMLSchema#> .
@prefix rdf:     <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .

<http://www.example.com/example>
      a       owl:Ontology .
:Cat  a       owl:Class .
:Student
      a       owl:Class .
:Dog  a       owl:Class .
:hasPet
      a       owl:ObjectProperty .
:Bob  a       :Student , owl:NamedIndividual ;
      a       [ a       owl:Class ;
                owl:unionOf ([ a       owl:Class ;
                            owl:complementOf
                                    [ a       owl:Restriction ;
                                      owl:minQualifiedCardinality
                                              "5"^^xsd:nonNegativeInteger ;
                                      owl:onClass :Dog ;
                                      owl:onProperty :hasPet
                                    ]
                          ] [ a       owl:Restriction ;
                            owl:onProperty :hasPet ;
                            owl:someValuesFrom :Cat
                          ])
              ] .
Run Code Online (Sandbox Code Playgroud)

这种方法可以用于数据类型属性和对其值的限制.例如,要说"如果鲍勃体重至少60公斤,那么他至少180厘米高",我们可以说鲍勃是一类东西,如果它们的重量至少为60公斤,那么它们至少是180厘米高,或相当于,一类重量至少60公斤,或至少180厘米高的东西.在曼彻斯特语法中,类表达式看起来像

(not (hasWeight some int[>= 60])) or (hasHeight some int[>= 180])
Run Code Online (Sandbox Code Playgroud)

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
                                                ])
                                    ]
                          ])
              ] .
Run Code Online (Sandbox Code Playgroud)

  • @Songokute我更新了答案,以展示“关于鲍勃的知识”在本体中的样子,其中唯一命名的类是学生、猫和狗。我没有用任何“owl:equivalentClass”定义匿名类。 (2认同)