可以将owl:class和owl:限制从限制类定义中删除吗?

时间:2014-02-22 07:54:17

标签: semantic-web owl turtle-rdf

这些陈述是否相同?如果我删除owl:Restrictionowl:Class,是否有任何问题。它们看起来似乎是多余的,但这总是我在网上看到的例子。 owl:onProperty有域owl:restrictionowl: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 ] )
] .

1 个答案:

答案 0 :(得分:6)

好问题。您需要指定这些类型的原因是由于从RDF图到OWL(2)Ontology的映射。在OWL 2本体中,每个实体必须显式类型为类,对象属性,数据类型属性,注释属性,数据类型或本体。为了确保在OWL本体的所有RDF序列化中解决此约束,必须明确键入本体引入的所有资源,包括与限制,交叉点等相关联的这些空白节点。

话虽如此,有很多情况下显式输入并不真正有用,因为类型可以从其他三元组中推断出来。例如:

:myClass  owl:intersectionOf  ( owl:Thing ) .

要求:myClassowl: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本体文档。但是,在这个特定的例子中,实体的类型没有歧义。