OWL 等价物 Class 的空白节点

Blank Nodes for OWL Equivalent Class

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

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

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

不支持该缩写

这不完全是 的重复,但答案大致相同:从 RDF 到 OWL 的映射的定义方式使得此缩写不会当您将 RDF 映射到 OWL 时,生成您想要的 ontology。我不确定你是否会以歧义告终。但是,您最终不会得到想要的 ontology。从 RDF 到 OWL 的相关翻译说当你有:

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

你得到一个 class 表达式,ObjectUnionOf(CE(y1) … CE(yn))。根据3.2.4 Parsing of Expressions,先解析表达式,再解析公理。重要的是,"Each time a pattern is matched, the matched triples are removed from G." 这意味着我们解析表达式 RDF:

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

我们得到 class 表达式RedWine ∪ RoseWine ∪ WhiteWine,我们删除 图中的三元组。稍后,在 3.2.5 Parsing of Axioms 中,我们将开始寻找 ?x rdf:type owl:Class 的实例以获得声明公理 声明(Class(?x))。但是,我们在解析 unionOf 表达式时 删除了 三元组 :Wine rdf:type owl:Class。现在我们在 ontology.

中没有 Wine 作为 class

想法

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

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

可以替换为:

:A ?p ?o .

只要 :B 拥有的所有 ?p ?o 都已完成。这对于 unionOf 表达式来说可能不是问题,因为每个 unionOf 表达式都需要一个 ?p ?o (其中 ?powl:unionOf?o 是一个 RDF 列表).但是,对于任何需要多个三元组的 class 表达式,如果存在多个相同类型的等效 class 表达式,则有可能变得不明确。例如,如果您有三元组

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

指定一个 someValuesFrom 限制,然后一旦你有两个,你就没有办法知道哪个 owl:onPropertyowl:someValuesFrom 一起使用。这就是 中出现的问题 如果 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

逻辑上不等价。