【问题标题】:Reasoning over OWL cardinality restrictionOWL 基数限制的推理
【发布时间】:2021-04-26 16:40:15
【问题描述】:

我认为我对 OWL 公理仍然存在根本性的误解 :(。

这是我创建的一个小型测试本体:

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

: a owl:Ontology .

:prop1 a owl:DatatypeProperty .
:prop2 a owl:DatatypeProperty .

:Class1 owl:equivalentClass [
    a owl:Restriction ;
    owl:onProperty :prop1 ;
    owl:cardinality "1"^^xsd:int
  ] .

:Ind1 a owl:NamedIndividual ;
  :prop1 "value1"^^xsd:string .

:Class2 owl:equivalentClass [
    a owl:Restriction ;
    owl:onProperty :prop2 ;
    owl:minCardinality "1"^^xsd:int
  ] .

:Ind2 a owl:NamedIndividual ;
  :prop2 "value2"^^xsd:string .

当我在 Protege 中运行 Hermit 推理器时,我得到了 :Ind2 的预期结果,即它是 :Class2 的成员。但是对于:Ind1 来说,作为:Class1 的成员,我并没有得到相同的结果。

我怀疑这与开放世界假设有关,:Ind1 可能还有另一个:prop1 断言。所以几个问题:

  • 我是否正确诊断了问题?
  • 我能否获得一个示例,说明如何让隐士在不明确做出断言的情况下推断:Ind1 是:Class1 的成员?

谢谢

【问题讨论】:

    标签: owl semantic-web protege hermit


    【解决方案1】:

    前提

    OWL 语义是在open-world assumption 下定义的,因此您无法检查某个属性的基数是否正好 N,因为即使没有声明,也可能存在其他属性实例。 p>

    更准确地说,您可以进行以下检查:

    Cardinality check Possible answers Sound Complete
    At-least N Yes (if N or more)
    I don't know (otherwise)
    Yes No
    Exactly N No (if N+1 or more)
    I don't know (otherwise)
    Yes No
    At-most N No (if N+1 or more)
    I don't know (otherwise)
    Yes No

    解决方案

    只有当您明确声明"value1" 是:Ind1 的唯一值时,您才能检查基数是否完全 1。在这种情况下,:Ind1 将成为 :Class1 的一部分。

    在 FOL 中:

    ∀x.(R(Ind1, x) → x = "value1")

    在深度学习中:

    ∃R⁻.{Ind1} ⊑ {"value1"}

    在 OWL2 中(未测试):

    :Ind1
      a owl:NamedIndividual ;
      a [ a                 owl:Restriction ;
          owl:onProperty    :prop1 ;
          owl:allValuesFrom [ a          rdfs:Datatype ;
                              owl:oneOf  ( "value1"^^xsd:string )
                            ]
        ] .
    

    【讨论】:

    • 请看我下面的评论,因为这似乎可以解决问题,而无需声明个别限制。
    • @stan_plogic 出于某种原因,我认为您正在寻找扩展解决方案是理所当然的。如果你可以修改你的内涵公理,那么这个解决方案显然更好。
    • 我仍然很欣赏您的解决方案。很高兴听到它有一个名字...... :) 如果您可以将这两种解决方案都添加到您的答案中,我将删除我在下面的评论并再次接受您的答案。我可以编辑它,但它似乎把它放在评论列表中,因为我还是这个平台的新手。
    • @stan_plogic 对我来说,这样没关系;-) 无论如何,我意识到我不建议您使用 FunctionalProperty 解决方案的原因。基本上,我认为您正在为任何类型的“minCardinality”/“cardinality”寻找通用解决方案,并且您想了解它们之间的主要区别。
    • 很公平。我会接受你的回答,如果没有别的让我阅读内涵与外延定义:)。感谢您抽出宝贵的时间。非常感谢。
    【解决方案2】:

    感谢@horcrux 提供提示。最后起作用的是将属性声明为owl:FunctionalProperty。将属性声明编辑为:

    :prop1 a owl:DatatypeProperty, owl:FunctionalProperty .
    :prop2 a owl:DatatypeProperty, owl:FunctionalProperty .
    
    

    这不需要为每个单独的声明添加额外的限制。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-03-18
      • 1970-01-01
      • 2013-04-07
      • 1970-01-01
      • 2011-06-08
      • 2013-12-26
      • 1970-01-01
      相关资源
      最近更新 更多