为什么这个DL-Query没有返回任何个人?

Ant*_*ony 5 rdf owl dlquery protege description-logic

此DL-Query不会返回任何个人:

  • 查询(Protégé语法): hasPet exactly 1 DomesticAnimal

这是本体的一部分:

:hasPet a           owl:ObjectProperty;
        rdfs:domain :Human;
        rdfs:range  :DomesticAnimal;
        owl:inverseOf : petOf;


:Joe    a           :Human;
        hasPet      :Lassy.

:Bob    a           :Human;
        hasPet      :Sparkey, Lucky.
Run Code Online (Sandbox Code Playgroud)

查询:

  • petOf value Bob 回归Sparkey和Lucky
  • petOf value Joe 回报 Lassy
  • hasPet exactly 1 没有回报.

为什么不是最后一个查询返回Joe?我在使用Pellet,HermiT和FaCT ++的Protégé中尝试过它,但它没有用.

Jos*_*lor 7

类表达式hasPet exactly 1 DomesticAnimal具有与属性hasPet正好相关的那些个体的实例DomesticAnimal. 恰好一个意味着至少一个,不超过一个.基于三元组

:Joe :hasPet :Lassy .
:Bob :hasPet :Sparkey ;
     :hasPet :Lucky .
Run Code Online (Sandbox Code Playgroud)

我们知道乔和鲍勃每人至少有一只宠物,但我们不知道他们可能有多少宠物.Joe可能有Lassy以外的宠物,所以我们不知道Joe 只有一只宠物.Sparkey和Lucky可能是同一个人,所以Bob至少有一只宠物,但我们没有Bob的宠物数量的上限.

OWL以及RDF构成了开放世界的假设,这意味着OWL并不认为所提供的数据是对世界上所有事物的详尽列举.如果确实如此,那么推论就没有意义了.没有断言s p o并不意味着NOT( s p o ),而是仅仅是没有判断s p o.

但是,您可以为数据添加更多知识,以获得所需的结论.您用以下内容描述Joe:

Joe a Human ;
    hasPet Lassy ;
    hasPet only { Lassy } .

Lassy a DomesticAnimal .
Run Code Online (Sandbox Code Playgroud)

从这里你可以推断出来

Joe a (hasPet exactly 1 DomesticAnimal) .
Run Code Online (Sandbox Code Playgroud)

对于Bob来说,看起来你希望Sparkey和Lucky是不同的动物,所以你需要owl:differentFrom:

Bob a Human ;
    hasPet Sparkey, Lucky .

Sparkey a DomesticAnimal .

Lucky a DomesticAnimal ; 
      owl:differentFrom Sparkey .
Run Code Online (Sandbox Code Playgroud)

我没有包含Bob hasPet only { Sparkey, Lucky }这些公理,因为他们没有必要推断鲍勃有多只宠物,但你可以包括它.我还包括了一个本owl:differentFrom可以做出的断言.现在鲍勃已知有两种不同的宠物,并且因此已知不是一个hasPet exactly 1 DomesticAnimal.将此数据加载到Protégé后,DL查询hasPet exactly 1 DomesticAnimal按预期工作:

在此输入图像描述

示例本体

如果您希望能够快速将此结构加载到Protégé中,这里是一个包含个人,属性和公理的本体,如上所述.我没有定义的petOf属性,但你仍然可以运行你的前两个查询,inverse hasPet value Joe并inverse hasPet value Bob和获得预期的结果.

@prefix :        <http://www.example.com/owa#> .
@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#> .
@prefix owa:     <http://www.example.com/owa#> .

owa:Bob
      a       owl:NamedIndividual , owa:Human ;
      owa:hasPet owa:Sparkey , owa:Lucky .

owa:Sparkey
      a       owl:NamedIndividual , owa:DomesticAnimal .

owa:Lassy
      a       owl:NamedIndividual , owa:DomesticAnimal .

[]    a       owl:AllDifferent ;
      owl:distinctMembers (owa:Lucky owa:Sparkey) .

owa:Joe
      a       owl:NamedIndividual , owa:Human ;
      a       [ a       owl:Restriction ;
                owl:allValuesFrom
                        [ a       owl:Class ;
                          owl:oneOf (owa:Lassy)
                        ] ;
                owl:onProperty owa:hasPet
              ] ;
      owa:hasPet owa:Lassy .

<http://www.example.com/owa>
      a       owl:Ontology .

owa:Lucky
      a       owl:NamedIndividual , owa:DomesticAnimal .

owa:Human
      a       owl:Class .

owa:hasPet
      a       owl:ObjectProperty .

owa:DomesticAnimal
      a       owl:Class .
Run Code Online (Sandbox Code Playgroud)