1

为什么需要一个空白节点来定义 OWL 中的等效类?以下两个不相等吗?

:Wine owl:equivalentClass [
      a owl:Class ;
      owl:unionOf (:RedWine :RoséWine :WhiteWine) ] .

:Wine a owl:Class .
:Wine owl:unionOf (:RedWine :RoséWine :WhiteWine) .
4

1 回答 1

1

不支持此缩写

这与Why use owl:Restriction as own:EquivalenceClass's property的重复并不完全一致?,但答案大致相同:从 RDF 到 OWL 的映射是这样定义的,当您将 RDF 映射到 OWL 时,这个缩写不会产生您想要的本体。不管你最终是否会模棱两可,我不确定。但是,您最终不会得到您想要的本体。从 RDF 到 OWL 的相关翻译说,当你有:

_:x rdf:type owl:Class .
_:x owl:unionOf T(SEQ y1 ... yn) .
{ n ≥ 2 and CE(yi) ≠ ε for each 1 ≤ i ≤ n }

你得到一个类表达式,ObjectUnionOf(CE(y1) ... CE(yn))。根据3.2.4表达式解析,先解析表达式,再解析公理。重要的是,“每次匹配模式时,匹配的三元组都会从 G 中删除。” 这意味着我们解析 RDF 的表达式:

:Wine rdf:type owl:Class .
:Wine owl:unionOf (:RedWine :RoséWine :WhiteWine) .

我们得到类表达式RedWine ∪ RoseWine ∪ WhiteWine,然后从图中删除三元组。稍后,在3.2.5 Parsing of Axioms中,我们将开始寻找?x rdf:type owl:Class的实例,以获得声明 axiom Declaration(Class(?x))。但是,我们在解析 unionOf 表达式时删除了三元组:Wine rdf:type owl:Class 。现在我们没有 Wine 作为本体中的一个类。

想法

现在,缩写不起作用的原因是因为翻译不支持它。翻译在遇到三元组时会从图中删除它们,并首先删除表达式,这将使必要的三元组无法用于声明公理。但是,我们可以想象一个翻译公理不会删除它们;它可能只是先解析表达式,然后再解析公理。我认为您所描述的缩写是

:A owl:equivalentClass :B .
:B ?p ?o .

可以替换为:

:A ?p ?o .

只要对 :B的所有?p ?o都完成了。这对于unionOf表达式可能不是问题,因为每个unionOf表达式都需要一个?p ?o(其中?powl:unionOf?o是一个 RDF 列表)。但是,对于任何需要一个以上三元组的类表达式,如果有多个相同类型的等效类表达式,则可能会变得模棱两可。例如,如果你有三元组

_:x rdf:type owl:Restriction .
_:x owl:onProperty y .
_:x owl:someValuesFrom z .

要指定someValuesFrom限制,那么一旦你有两个,你就无法知道哪个owl:onProperty与哪个owl:someValuesFrom一起使用。这就是为什么使用 owl:Restriction 作为 own:EquivalenceClass 的属性中出现的问题?如果owl:unionOf的编码稍有不同,就会出现同样的问题。例如,如果 A ∪ B 被编码为:

_:x rdf:type owl:Class .
_:x owl:unionMember :A .
_:x owl:unionMember :B .

那么如果你试图对公理进行编码,你会遇到歧义:

    A ≡ B ∪ C
    A ≡ D ∪ E

你会得到编码:

:A rdf:type owl:Class .
:A owl:unionMember :B .
:A owl:unionMember :C .
:A owl:unionMember :D .
:A owl:unionMember :E .

您可能会读回:

    A ≡ B ∪ C ∪ D ∪ E

这在逻辑上是不等价的。

于 2015-12-15T20:43:58.830 回答