1

在猫头鹰:

  • 有一个类 X 和属性 P1、P2 和 P3,每个属性都有域 X。

我想说:

  • X 的每个实例必须至少参与与属性 P1 或 P3 之一的关系。
  • 参与与 P2 关系的 X 的每个实例也必须参与与 P1 的关系。
  • 但是 X 的每个实例可能只参与与 P1 和 P2 的关系或与 P3 的关系。

也许使用一些语法和标签更容易理解:

:Chronology a owl:Class ;
    rdfs:label "X" ;
:hasBegin a owl:DatatypeProperty ;
    rdfs:label "P1" ;
    rdfs:domain :Chronology .
:hasEnd a owl:DatatypeProperty ;
    rdfs:label "P2" ;
    rdfs:domain :Chronology .
:hasNoBeginNoEnd a owl:DatatypeProperty ;
    rdfs:label "P3" ;
    rdfs:domain :Chronology .

我了解匿名类和限制的概念,但似乎没有什么真正适合的。

4

1 回答 1

0

这里有一些不同的约束,但它们都可以在 OWL 中表示。让我们一次解决一个约束。

  • X 的每个实例必须至少参与与属性 P1 或 P3 之一的关系。

这表示对于每个x,要么有一个y满足P1(x,y),要么有一个z满足P2(x,z)。在 OWL 中,这表示为

X SubClassOf ((P1 some Thing) or (P2 some Thing))

类表达式表示与某个实体P1 some Thing相关的事物的类。P1同样对于P2 some Thing。整个 subClassOf 公理说“如果某物是 X,那么它要么是 a 要么是P1 some Thinga P2 some Thing”。(如果你愿意,你也可以使用P min 1而不是P some Thing。这不是一个显着的区别。)

  • 参与与 P2 关系的 X 的每个实例也必须参与与 P1 的关系。

这表示对于每个x如果有一个y使得P2(x,y),那么也有一个z使得P1(x,z)。另一种说法是“对于每个x,如果x是一个X并且有一个y满足P2(x,y),那么也有一个z满足P1(x,z)。” 这可以用另一个子类公理来表达:

(X and (P2 some Thing)) SubClassOf (P1 some Thing)

(为了一般性,我X and (P2 some Thing)在这个子类公理的左边使用了。在这个特定的情况下,由于XP2的域,我们可以推断它P2 some ThingX的子类,所以我们也可以只P2 some Thing在剩下。)

  • 但是 X 的每个实例可能只参与与 P1 和 P2 的关系或与 P3 的关系。

这就是说,如果某个x是一个X并且有一个y满足P3(x,y),那么就没有z满足P1(x,z)P2(x,y),反之亦然。您可以通过几种方式表示这一点。您可以使用两个子类公理:

(X and (P3 some Thing))                      SubClassOf ((P1 max 0) and (P2 max 0))
(X and ((P1 some Thing) or (P2 some Thing))) SubClassOf (P3 max 0)

您还可以使用单个不相交的类公理(注意X出现在两侧)

(X and (P3 some Thing)) DisjointWith (X and ((P1 some Thing) or (P2 some Thing)))

(正如我在前面的例子中所指出的,由于属性的域是X,类X and (P3 some Thing)等价于P3 some Thing。这些子类公理的左侧也可以是简单的P3 some Thingand (P1 some Thing) or (P2 some Thing),不相交公理中的类可以是P3 some Thingand (P1 some Thing) or (P2 some Thing)。)

下面是本体中的类和公理的样子(N3 格式):

:X    a       owl:Class ;
      rdfs:subClassOf
              [ a       owl:Class ;
                owl:unionOf ([ a       owl:Restriction ;
                            owl:onProperty :P1 ;
                            owl:someValuesFrom owl:Thing
                          ] [ a       owl:Restriction ;
                            owl:onProperty :P2 ;
                            owl:someValuesFrom owl:Thing
                          ])
              ] .

[]    a       owl:Class ;
      rdfs:subClassOf
              [ a       owl:Restriction ;
                owl:onProperty :P1 ;
                owl:someValuesFrom owl:Thing
              ] ;
      owl:intersectionOf (:X [ a       owl:Restriction ;
                  owl:onProperty :P2 ;
                  owl:someValuesFrom owl:Thing
                ]) .

[]    a       owl:Class ;
      owl:disjointWith
              [ a       owl:Class ;
                owl:intersectionOf (:X [ a       owl:Restriction ;
                            owl:onProperty :P3 ;
                            owl:someValuesFrom owl:Thing
                          ])
              ] ;
      owl:intersectionOf (:X [ a       owl:Class ;
                  owl:unionOf ([ a       owl:Restriction ;
                              owl:onProperty :P1 ;
                              owl:someValuesFrom owl:Thing
                            ] [ a       owl:Restriction ;
                              owl:onProperty :P2 ;
                              owl:someValuesFrom owl:Thing
                            ])
                ]) .

空白节点使用说明

正如评论中所指出的,上述本体使用空白节点表示的类表达式作为两个“通用类公理”的主体,即关联两个类表达式的子类公理,两者都不是简单的类标识符。原始的OWL Web Ontology Language Reference附录 E:OWL DL Ontologies 的经验法则中包括:

避免孤立的空白节点通常,图中出现的空白节点要么代表未命名的个人,要么应该是以下之一:

  • rdfs:subClassOf、owl:equivalentClass、owl:disjointWith、owl:someValuesFrom、owl:allValuesFrom 或 rdf:type 三元组的对象。
  • 带有对象 owl:AllDifferent 的 rdf:type 三元组的主题。
  • rdf:List 中的一个元素。

孤立的空白节点,即那些不是三元组对象的节点,通常是不允许的(除了上面描述的 owl:AllDifferent 情况)。

乍一看,上面提供的本体似乎违反了这一点,因为“一般类公理”(主题不是类标识符的类公理)将类表达式作为它们的主题。但是,第3.2 节类公理给出了例如rdfs:subClassOf公理的语法为

AXIOM SCHEMA:类描述 rdfs:subClassOf 类描述

该部分还包括注释:

注意:在 OWL Lite 中,rdfs:subClassOf语句的主题必须是类标识符。该对象必须是类标识符或属性限制。

这表明附录 E忽略了允许“孤立空白节点”的某些情况是错误的。当然,这个建议并不规范。它以介绍开头:

以下规则给出了RDF 图成为 DL 本体的条件的非正式表征。这并不是要取代 S&AS 中给出的特征,而是给出一些一般性的指导——这个想法是,如果你坚持这些指导方针,你更有可能产生 OWL DL 本体。[重点补充]

为了确认,我们需要查看第8 节。OWL Full、OWL DL 和 OWL Lite,它描述了 OWL Full、OWL DL 和 Owl Lite 本体中允许的精确构造。该部分重申,在 OWL Lite 中,

rdfs:subClassOf 三元组的主题是类名,而 rdfs:subClassOf 三元组的对象是类名或限制;

但对 OWL DL 本体没有这样的限制。第 8 节确实要求,对于 OWL DL 本体,

所有公理都必须是格式良好的,没有遗漏或多余的组件,并且必须形成树状结构。最后一个约束意味着一个人引用的所有类和属性分别显式类型化为 OWL 类或属性。

这指出

[] rdfs:subClassOf :Foo . 

不是有效的 OWL DL,但

[] a owl:Class ; 
   rdfs:subClassOf :Foo .

是(当然前提是:Fooowl:Class)。非规范性附录 E只是漏掉了一个可以使用“孤立空白节点”的情况。一般类公理并不经常被使用,除非需要表示一些特别复杂的句子,所以这不是一个很难犯的错误。

有关一般类公理的更多信息,请参阅左侧的复杂性:一般概念包含

于 2013-05-29T14:36:24.167 回答