这些陈述是否相同?如果我删除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 ] )
] .
答案 0 :(得分:6)
好问题。您需要指定这些类型的原因是由于从RDF图到OWL(2)Ontology的映射。在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本体文档。但是,在这个特定的例子中,实体的类型没有歧义。