4

这些陈述是否相同?owl:Restriction如果我删除and有什么顾虑吗owl:Class?它们似乎是多余的,但这总是我在网上看到的例子。 owl:onProperty具有域owl:restriction并且owl:restriction是 subclassOf 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 ] )
] .
4

1 回答 1

6

好问题。您需要指定这些类型的原因是由于从 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 2 验证器owl:Restriction仍将 RDF 中的本体识别为有效的 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 本体文档。然而,在这个特定的例子中,实体的类型没有歧义。

于 2014-02-22T13:36:16.200 回答