DL查询属性未与其他人连接的个人

时间:2013-10-13 16:18:24

标签: owl protege description-logic

我有一个OWL本体,有三个相互关联的个体: a b c ,还有两个孤立的个体 x y

相互关联的个人

  1. 至少有一个出站对象属性断言。例如: a hasRelationWith b ;或
  2. 至少有一个入站对象属性断言,例如:这样的c,因为b hasRelationWith c
  3. 孤立的个人

    1. 具有零出站对象属性断言,例如: x hasRelationWith [no individual] ;和
    2. 没有入站对象属性断言,例如:这样的x,因为[没有个人] hasRelationWith x
    3. 是否可以使用DL查询对所有孤立的个体进行分类(通过逻辑推理,而不是通过枚举)(在Protégé4.3中,如果它有所不同),如果可能,我该怎么做? / p>

      我的直觉猜测是这样的:(hasRelationWith min 0 Thing)排除(hasRelationWith min 1 Thing),但DL-Query似乎不支持Set Subtraction语法......


      更新:以下SPARQL可以实现,但不能在类定义中使用。

      PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
      PREFIX owl: <http://www.w3.org/2002/07/owl#>
      PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
      PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
      PREFIX my: <http://localhost:8080/ontology/untitled-ontology-26#>
      SELECT DISTINCT ?src_obj
      WHERE {
        ?src_obj a owl:NamedIndividual .
        minus {?src_obj my:hasRelationWith ?target_obj}
        minus {?target_obj my:hasRelationWith ?src_obj}
      }
      

1 个答案:

答案 0 :(得分:1)

您可以查询逻辑上可证明的内容。这意味着,如果您推断某些人与某个人的任何其他人无关,那么您可以询问它。例如,如果你有不相交的类CatDog,那么没有任何内容可以是两者的实例,并且你有一个Person jim也有其他类型hasPet only Cat and Dog,然后推理人可以推断出jim hasPet exactly 0

在DL查询语言中,您还可以使用 inverse 属性。前面的例子显示jim没有宠物(即hasPet exactly 0的实例)。你可以通过询问inverse hasPet exactly 0的实例来要求不是任何人的宠物的动物。例如,如果您添加PersonThisKindThatKind的不相交的子类,并说missy Cat inverse hasPet only ThisKind and ThatKind,那么一个推理者可以推断missy属性没有人与 {/ em> hasPet相关联。本答案的最后给出了这两个例子的本体论。

对于您的特定查询,您只需要组合我刚刚描述的表单的两个类表达式:

  

hasRelationWith正好为0,反hasRelationWith正好为0

或者,有一些括号:

  

(hasRelationWith正好为0)和((has hasRelationWith)正好为0)

然而,非常重要的是要注意,这只会使那些可以证明证明没有这种关系的人返回。仅仅数据还没有包含这样的关系是不够的。 OWL产生open world assumption,意味着没有明确陈述或可证明的东西不被认为是真或假。

示例本体

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

:fido   a       owl:NamedIndividual , :Dog .

:Dog    a       owl:Class .

:fluffy  a      owl:NamedIndividual , :Cat ;
        a       [ a                   owl:Class ;
                  owl:intersectionOf  ( :ThatKind [ a                  owl:Restriction ;
                                                    owl:allValuesFrom  :ThisKind ;
                                                    owl:onProperty     [ owl:inverseOf  :hasPet ]
                                                  ] )
                ] .

:ThatKind  a              owl:Class ;
        rdfs:subClassOf   :Person ;
        owl:disjointWith  :ThisKind .

:rover  a       owl:NamedIndividual , :Dog .

:hasPet  a      owl:ObjectProperty .

<http://www.example.org/cardinality-example>
        a       owl:Ontology .

:Person  a      owl:Class .

:jim    a       owl:NamedIndividual , :Person ;
        a       [ a                owl:Restriction ;
                  owl:cardinality  "0"^^xsd:nonNegativeInteger ;
                  owl:onProperty   :hasPet
                ] .

:missy  a       owl:NamedIndividual , :Cat .

:Cat    a                 owl:Class ;
        owl:disjointWith  :Dog .

:ThisKind  a             owl:Class ;
        rdfs:subClassOf  :Person .