这些陈述是否相同?如果我删除 owl:Restriction
会有什么问题吗?和 owl:Class
.它们似乎多余,但这总是我在网上看到的例子。 owl:onProperty
有域名owl:restriction
和 owl:restriction
是子类owl:class
.
:myClass owl:equivalentClass
[a owl:Class ;
owl:intersectionOf (
[ a owl:Restriction ; owl:onProperty :hasProp ; owl:allValuesFrom :SomeOtherClass ]
[ a owl:Restriction ; owl:onProperty :hasChild ; owl:someValuesFrom :SomeOtherClass ] ) ] .
:myClass owl:equivalentClass
[owl:intersectionOf (
[ owl:onProperty :hasProp ; owl:allValuesFrom :SomeOtherClass ]
[ owl:onProperty :hasProp ; owl:someValuesFrom :SomeOtherClass ] )
] .
最佳答案
好问题。您需要指定这些类型的原因是由于从 RDF 图到 OWL (2) 本体的映射。在 OWL 2 本体中,每个实体都必须显式地类型化为类、对象属性、数据类型属性、注释属性、数据类型或本体。为了确保在 OWL 本体的所有 RDF 序列化中解决此约束,必须明确键入本体引入的所有资源,包括与限制、交集等相关联的这些空白节点。
话虽如此,在很多情况下,显式类型并不是真正有用的,因为可以从其他三元组中推断出类型。例如:
:myClass owl:intersectionOf ( owl:Thing ) .
要求
:myClass
是 owl:Class
.考虑你给出的例子::myClass owl:equivalentClass
[owl:intersectionOf (
[ owl:onProperty :hasProp ; owl:allValuesFrom :SomeOtherClass ]
[ owl:onProperty :hasProp ; owl:someValuesFrom :SomeOtherClass ] )
] .
一方面,
:myClass
必须是一个类,因为 owl:equivalentClass
;列表中的两个空白节点必然是owl:Restriction
, 因为使用了谓词 owl:onProperty
;这意味着带有 owl:intersectionOf
的空白节点属性必然是一个类。另一方面,不清楚是否
:SomeOtherClass
是类还是数据类型,因为不知道是否:hasProp
是对象属性或数据类型属性。所以在这里你会遇到是否显式键入会产生影响的情况。现在,真正的问题可能是:“我真的需要明确地将这些类型付诸实践吗?”我想说,这取决于您使用的工具。大多数 OWL 处理器会将许多不兼容的 RDF 图解释为有效的 OWL 本体,但您必须小心,因为可能会发生意外。例如,我尝试在 Protégé 中打开一个包含您提供的示例的文件。 Protégé 没有设法将内容解释为定义任何类或属性。然而,问题并不是因为缺少
owl:Restriction
或失踪的 owl:Class
对于空白节点。如果我只是为 :myClass
添加一个显式类型,然后 Protégé 将内容解释为定义了两个类、一个对象属性和一个关于 :myClass
的公理。 .相比:# This does not work in Protégé 4.3
@prefix : <http://ex.com/> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
:myClass owl:equivalentClass [
owl:intersectionOf (
[ owl:onProperty :hasProp; owl:allValuesFrom :SomeOtherClass ]
[ owl:onProperty :hasProp; owl:someValuesFrom :SomeOtherClass ]
)
] .
和:
# This works in Protégé 4.3
@prefix : <http://ex.com/> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
:myClass a owl:Class;
owl:equivalentClass [
owl:intersectionOf (
[ owl:onProperty :hasProp; owl:allValuesFrom :SomeOtherClass ]
[ owl:onProperty :hasProp; owl:someValuesFrom :SomeOtherClass ]
)
] .
出人意料的是,Protégé决定解读
:hasProp
作为对象属性,而它可能是数据类型属性。最后,总结一下这个答案,我注意到如果你丢弃
owl:Restriction
完全类型,RDF 中的本体仍然被 Manchester OWL 2 validator 认为是有效的 OWL 2 DL 本体。 .试试这个作为输入:@prefix : <http://ex.com/> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
:SomeOtherClass a owl:Class .
:hasProp a owl:ObjectProperty .
:myClass a owl:Class;
owl:equivalentClass [
owl:intersectionOf (
[ owl:onProperty :hasProp; owl:allValuesFrom :SomeOtherClass ]
[ owl:onProperty :hasProp; owl:someValuesFrom :SomeOtherClass ]
)
] .
编辑:我刚刚检查了 OWL 2 规范,上面的 RDF 图似乎应该被归类为 OWL 2 DL 本体文档。然而,在这个特定的例子中,实体的类型没有歧义。
关于semantic-web - 可以猫头鹰 :class and owl:restriction be removed from restriction class definitions?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21951485/