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 (其中 ?p 是 owl:unionOf 而 ?o 是一个 RDF 列表).但是,对于任何需要多个三元组的 class 表达式,如果存在多个相同类型的等效 class 表达式,则有可能变得不明确。例如,如果您有三元组
_:x rdf:type owl:Restriction .
_:x owl:onProperty y .
_:x owl:someValuesFrom z .
指定一个 someValuesFrom 限制,然后一旦你有两个,你就没有办法知道哪个 owl:onProperty 与 owl: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
逻辑上不等价。
为什么需要一个空白节点来定义 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) .
不支持该缩写
这不完全是
_: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 (其中 ?p 是 owl:unionOf 而 ?o 是一个 RDF 列表).但是,对于任何需要多个三元组的 class 表达式,如果存在多个相同类型的等效 class 表达式,则有可能变得不明确。例如,如果您有三元组
_:x rdf:type owl:Restriction .
_:x owl:onProperty y .
_:x owl:someValuesFrom z .
指定一个 someValuesFrom 限制,然后一旦你有两个,你就没有办法知道哪个 owl:onProperty 与 owl:someValuesFrom 一起使用。这就是
_: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
逻辑上不等价。