在 OWL class 限制构造函数的存在量化 (owl:SomeValuesFrom) 的情况下使用 rdfs:subClassOf 或 owl:equivalentClass 时?
When using rdfs:subClassOf or owl:equivalentClass in case of existential quantification (owl:SomeValuesFrom) for a OWL class restriction constructor?
我们将 class A 定义为 owl:equivalentClass,将 class A2 定义为 rdfs:subClassOf,基于具有关系 a_to_b 和 a_to_c 分别带有 B 或 C 的实例。请看例子:
:A rdf:type owl:Class ;
owl:equivalentClass [ owl:intersectionOf ( [ rdf:type owl:Restriction ;
owl:onProperty :a_to_b ;
owl:someValuesFrom :B
]
[ rdf:type owl:Restriction ;
owl:onProperty :a_to_c ;
owl:someValuesFrom :C
]
) ;
rdf:type owl:Class
] .
这里作为子class:
:A2 rdf:type owl:Class ;
rdfs:subClassOf [ owl:intersectionOf ( [ rdf:type owl:Restriction ;
owl:onProperty :a_to_b ;
owl:someValuesFrom :B
]
[ rdf:type owl:Restriction ;
owl:onProperty :a_to_c ;
owl:someValuesFrom :C
]
) ;
rdf:type owl:Class
] .
使用 owl:equivalentClass 的原因是什么?我什么时候使用 rdfs:subClassOf?区别和最后真正表达的意思我不是很清楚。
我的进一步观察/问题:
a) 当我用三元组创建实例 x 时:(x, a_to_b, b1) 和 (x, a_to_c, c1),x 被自动推断为 A 的类型,但是不是A2。 (将 Protege 与 Hermit Reasoner 一起使用)(c1 是 C 的类型,b1 是 B 的类型)。
b) 当我创建实例 y 并手动为 y 分配类型 A 和 A2 时,如果 y 通过 a_to_b 与 B 的实例无关且与实例无关,这会是一个问题吗C 通过 a_to_c? Hermit Reasoner 没有显示出任何问题的迹象,但这不是 class A 的必要(必须满足)条件吗?
c) 这些陈述是否适用于 A:
c1) 如果我知道 z 来自类型 A,则它必须与 B 的实例具有 a_to_b 关系,并且必须与 C 的实例具有 a_to_C 关系。
c2) 如果我知道 z 与 B 的实例有关系 a_to_b 并且它与 C 的实例有关系 a_to_C ,则 z 必须是类型 A.
c3) A 是与 B 的一个实例有 a_to_b 关系并且与 C 的一个实例有 a_to_C 关系的所有事物的 class。
我可以说 c1 和 c3 也关于 A2 或陈述如何改变吗?
意思我不是很清楚。我希望有人能澄清事情。提前致谢
我认为首先要注意的是等价性,比如 D equivalentClass E
,是 D subClassOf E
和 E subClassOf D
的缩写。 subClassOf
的语义是子集。这意味着集合D
是集合E
的子集,集合E
是D
的子集,也就是说集合D
和集合[=15] =] 是完全相同的集合。我们说它们是等价的。
现在请注意 subClassOf
的语义。如果我知道 F subClassOf E
和 G subClassOf E
,我能说说 F
和 G
之间的关系吗?绝对没有。这有点像知道自行车和卡车都是交通工具。这并不能使自行车成为卡车或卡车成为自行车,尽管两者都是车辆。
因此,在您的示例中,A
可以扩展为 2 个公理
A subClassOf (a_to_b some B) and (a_to_c some C)
(a_to_b some B) and (a_to_c some C) subClassOf A
您问题的答案:
(a) 根据您对 x
的断言,我们可以看到 x
确实是 A
的一个实例。但是,没有关于 x
的信息可以让我们说 x
是 A2
类型。我们所知道的是 x
和 A2
都是 (a_to_b some B) and (a_to_c some C)
.
的子class
(b) 这是由于Open World Assumption,即推理者不会根据信息的缺失做出任何假设。如果您没有明确声明 y
与 B
没有 a_to_b
关系,它会假定 a_to_b
关系存在,但只是未知。这与数据库通常做出的封闭世界假设相反。也就是说,如果客户没有雇主信息,通常会假设客户没有工作。
您可以通过声明 a_to_b max 0 B
来声明 y
没有 a_to_b
关系。然后reasoner会给出一个不一致的地方。
(c1) 是的,但由于开放世界假设,这些目前可能未知。
(c2) 是的,基于等价的语义
(c3) 是的。
这对于A2
来说不是,因为它只是一个子class而不是所有的东西与 B 的实例有 a_to_b 关系,与 C 的实例有 a_to_C 关系。
何时使用等同于 subClassOf
等价用于定义。那就是当你想陈述被称为A
(从你的例子)的必要和充分条件时。
当您想定义从最一般到最具体的层次结构时,使用 SubClassOf。也就是说,它通常是您在分类法和编程中看到的,您将把它视为面向对象的 class 层次结构。
我们将 class A 定义为 owl:equivalentClass,将 class A2 定义为 rdfs:subClassOf,基于具有关系 a_to_b 和 a_to_c 分别带有 B 或 C 的实例。请看例子:
:A rdf:type owl:Class ;
owl:equivalentClass [ owl:intersectionOf ( [ rdf:type owl:Restriction ;
owl:onProperty :a_to_b ;
owl:someValuesFrom :B
]
[ rdf:type owl:Restriction ;
owl:onProperty :a_to_c ;
owl:someValuesFrom :C
]
) ;
rdf:type owl:Class
] .
这里作为子class:
:A2 rdf:type owl:Class ;
rdfs:subClassOf [ owl:intersectionOf ( [ rdf:type owl:Restriction ;
owl:onProperty :a_to_b ;
owl:someValuesFrom :B
]
[ rdf:type owl:Restriction ;
owl:onProperty :a_to_c ;
owl:someValuesFrom :C
]
) ;
rdf:type owl:Class
] .
使用 owl:equivalentClass 的原因是什么?我什么时候使用 rdfs:subClassOf?区别和最后真正表达的意思我不是很清楚。
我的进一步观察/问题:
a) 当我用三元组创建实例 x 时:(x, a_to_b, b1) 和 (x, a_to_c, c1),x 被自动推断为 A 的类型,但是不是A2。 (将 Protege 与 Hermit Reasoner 一起使用)(c1 是 C 的类型,b1 是 B 的类型)。
b) 当我创建实例 y 并手动为 y 分配类型 A 和 A2 时,如果 y 通过 a_to_b 与 B 的实例无关且与实例无关,这会是一个问题吗C 通过 a_to_c? Hermit Reasoner 没有显示出任何问题的迹象,但这不是 class A 的必要(必须满足)条件吗?
c) 这些陈述是否适用于 A:
c1) 如果我知道 z 来自类型 A,则它必须与 B 的实例具有 a_to_b 关系,并且必须与 C 的实例具有 a_to_C 关系。
c2) 如果我知道 z 与 B 的实例有关系 a_to_b 并且它与 C 的实例有关系 a_to_C ,则 z 必须是类型 A.
c3) A 是与 B 的一个实例有 a_to_b 关系并且与 C 的一个实例有 a_to_C 关系的所有事物的 class。
我可以说 c1 和 c3 也关于 A2 或陈述如何改变吗?
意思我不是很清楚。我希望有人能澄清事情。提前致谢
我认为首先要注意的是等价性,比如 D equivalentClass E
,是 D subClassOf E
和 E subClassOf D
的缩写。 subClassOf
的语义是子集。这意味着集合D
是集合E
的子集,集合E
是D
的子集,也就是说集合D
和集合[=15] =] 是完全相同的集合。我们说它们是等价的。
现在请注意 subClassOf
的语义。如果我知道 F subClassOf E
和 G subClassOf E
,我能说说 F
和 G
之间的关系吗?绝对没有。这有点像知道自行车和卡车都是交通工具。这并不能使自行车成为卡车或卡车成为自行车,尽管两者都是车辆。
因此,在您的示例中,A
可以扩展为 2 个公理
A subClassOf (a_to_b some B) and (a_to_c some C)
(a_to_b some B) and (a_to_c some C) subClassOf A
您问题的答案:
(a) 根据您对 x
的断言,我们可以看到 x
确实是 A
的一个实例。但是,没有关于 x
的信息可以让我们说 x
是 A2
类型。我们所知道的是 x
和 A2
都是 (a_to_b some B) and (a_to_c some C)
.
(b) 这是由于Open World Assumption,即推理者不会根据信息的缺失做出任何假设。如果您没有明确声明 y
与 B
没有 a_to_b
关系,它会假定 a_to_b
关系存在,但只是未知。这与数据库通常做出的封闭世界假设相反。也就是说,如果客户没有雇主信息,通常会假设客户没有工作。
您可以通过声明 a_to_b max 0 B
来声明 y
没有 a_to_b
关系。然后reasoner会给出一个不一致的地方。
(c1) 是的,但由于开放世界假设,这些目前可能未知。
(c2) 是的,基于等价的语义
(c3) 是的。
这对于A2
来说不是,因为它只是一个子class而不是所有的东西与 B 的实例有 a_to_b 关系,与 C 的实例有 a_to_C 关系。
何时使用等同于 subClassOf
等价用于定义。那就是当你想陈述被称为A
(从你的例子)的必要和充分条件时。
当您想定义从最一般到最具体的层次结构时,使用 SubClassOf。也就是说,它通常是您在分类法和编程中看到的,您将把它视为面向对象的 class 层次结构。