Mik*_*ike 4 semantic-web owl turtle-rdf
这些陈述是否相同?如果我删除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 ] )
] .
Run Code Online (Sandbox Code Playgroud)
好问题.您需要指定这些类型的原因是由于从RDF图到OWL(2)Ontology的映射.在OWL 2本体中,每个实体必须显式地键入为类,对象属性,数据类型属性,注释属性,数据类型或本体.为了确保在OWL本体的所有RDF序列化中解决该约束,必须明确键入本体引入的所有资源,包括与限制,交叉点等相关联的这些空白节点.
话虽如此,有很多情况下显式输入并不真正有用,因为类型可以从其他三元组中推断出来.例如:
:myClass owl:intersectionOf ( owl:Thing ) .
Run Code Online (Sandbox Code Playgroud)
要求那:myClass
是一个owl:Class
.考虑一下您给出的示例:
:myClass owl:equivalentClass
[owl:intersectionOf (
[ owl:onProperty :hasProp ; owl:allValuesFrom :SomeOtherClass ]
[ owl:onProperty :hasProp ; owl:someValuesFrom :SomeOtherClass ] )
] .
Run Code Online (Sandbox Code Playgroud)
一方面,: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 ]
)
] .
Run Code Online (Sandbox Code Playgroud)
和:
# 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 ]
)
] .
Run Code Online (Sandbox Code Playgroud)
令人惊讶的是,Protégé决定将其解释:hasProp
为对象属性,而它可能是一个数据类型属性.
最后,为了回答这个问题,我注意到如果owl:Restriction
完全丢弃该类型,RDF中的本体仍然被曼彻斯特OWL 2验证器识别为有效的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 ]
)
] .
Run Code Online (Sandbox Code Playgroud)
编辑:我刚检查了OWL 2规范,看来上面的RDF图应该归类为OWL 2 DL本体文档.但是,在这个特定的例子中,实体的类型没有歧义.