OWL类和子类属性继承

时间:2016-06-16 09:02:45

标签: rdf owl ontology rdfs

我对OWL类和子类属性继承感到困惑。有些帖子称OWL中没有继承(OWL: How to get inheritance of property relations between two classes from those of superclasses?http://answers.semanticweb.com/questions/619/rdfs-owl-inheritance-with-josekipellet)。但是,我也发现了一些相反的讨论。例如,“面向对象的软件开发人员的语义Web入门”页面(https://www.w3.org/TR/sw-oosd-primer/)提到了对于面向对象的语言,OWL& RDF:“类可以在具有继承的子类层次结构中排列”(第3.3节)。 https://www.w3.org/TR/rdf-schema/#ch_subclassof提到“属性rdfs:subClassOf是rdf:Property的一个实例,用于声明一个类的所有实例都是另一个类的实例。”因此,这对我来说很困惑。现在我有以下问题:

  • 与面向对象语言一样,rdfs:subclassOf是否从超类继承属性?
  • 如果没有

    • RDF / OWL中继承的含义是什么?
    • 是否可以使用OWL / RDF构建面向对象的语言类型类 - 子类继承?
    • 请考虑以下示例。 “讲师”和“学生”的所有属性是否可用于“人”类?

      Example:
      --------
         ### Classes ###
       :CSModule rdf:type owl:Class ;
            rdfs:subClassOf :Module .
      
       :Lecturer rdf:type owl:Class ;
           rdfs:subClassOf :Person .
      
       :Student rdf:type owl:Class ;
          rdfs:subClassOf :Person .
      
       :Module rdf:type owl:Class .
      
       :Person rdf:type owl:Class .
      
      ### Object Properties ###
      
      :studies rdf:type owl:ObjectProperty ;
      
         rdfs:domain :Student ;
         rdfs:range :Module .
      
      :teaches rdf:type owl:ObjectProperty ;
      
         rdfs:domain :Lecturer ;
         rdfs:range :Module .
      
      ### Data properties ###
      
      :name rdf:type owl:DatatypeProperty ;
        rdfs:domain :Person ;
        rdfs:range xsd:string .
      
      :staffID rdf:type owl:DatatypeProperty ;
        rdfs:domain :Lecturer ;
        rdfs:range xsd:integer .
      
      :studentID rdf:type owl:DatatypeProperty ;
        rdfs:domain :Student ;
        rdfs:range xsd:integer .
      
      ### Individuals ###
      
      :CS101 rdf:type owl:NamedIndividual ,
       :CSModule .
      
      :Lecturer1 rdf:type owl:NamedIndividual ,
       :Lecturer ;
       :teaches :CS101 ;
       :name "Dr.John" ;
       :staffID 7777 .
      
      :Student1 rdf:type owl:NamedIndividual ,
       :Student ;
       :studies :CS101 ;
       :name "James" ;
       :studentID 1234 .
      

如果有人给我一个答案,并提供一个非常有用的好例子。提前谢谢。

2 个答案:

答案 0 :(得分:4)

  

与面向对象语言一样,rdfs:subclassOf是否从超类继承属性?

要说属性p的域是D类意味着当你有一个三元组时

x p y

你可以推断三重

x rdf:输入D

没有遗产继承的概念。如果你知道E是D的子类,你就会看到三元组

e p y
e rdf:E型 E rdfs:subClassOf D

您现在有两种方法可以知道 e rdf:D型。第一个是因为 e p y 意味着 e rdf:类型D 。第二个是因为你知道e是E而E是D的子类,e也是D。

  

RDF / OWL中继承的含义是什么?

RDF和OWL中的类是集合。当你知道E是D的子类时,它意味着E的每个元素都是D的元素;也就是说,E的个体集是D的个体集的子集。

同样适用于物业。如果q是p的子属性,则意味着 x q y 意味着 x p y

  

是否可以使用OWL / RDF构造面向对象的语言类型类 - 子类继承?

这里的意思并不清楚。您需要准确指定OO-langueg类型类 - 子类继承的含义。你会得到很多相同的行为。例如,如果您知道D的每个实例都有特定的,那么您知道E的每个实例也会因为E 的每个实例都是 DEg的实例这一事实,如果你有

D SubClassOf(hasColor some Color)

然后你可以推断出

E SubClassOf(hasColor some Color)

所以从那个意义上来说就是继承。

  

考虑以下示例。 “讲师”和“学生”的所有属性是否可用于“人”类?

“可用”可能会产生误导。没有任何关于哪个属性可用或不可用于某个类(即,类中的个体)的意义。如果您的层次结构如下:

讲师rdfs:subClassOf人员
teachesCourse rdfs:domain Lecturer teachesCourse rdfs:范围课程

这意味着当你看到三重

时 琼斯教授课程微积分

你可以推断出

Jones rdf:类型讲师
琼斯rdf:打字人 微积分rdf:类型课程

在某种意义上,属性教导课程对每个人都是“可用的”,但是一旦使用它,就意味着该人必须是讲师。这与你在面向对象编程语言中的表现非常相似,不是吗?例如,如果你有Java:

class Person { }

class Lecturer {
  Course[] getCourses() { /* ... */ }
}

然后可能存在具有 getCourses()方法的 Person 的实例。只是 Person 的实例也必须是 Lecturer 的实例。

答案 1 :(得分:2)

我会尝试回答你的一些问题

RDF / OWL中继承的含义是什么?
owl中的继承与面向对象语言中的继承有点不同。我们可以用集合论来思考它。猫头鹰类基本上表示一组个人。然后使用属性来指定有关个人的事实。所以当你"定义"对于猫头鹰类的属性,您基本上是说该类的个体具有该属性(全部或部分取决于属性的定义)。
从您链接的帖子:
"子类表示一个类是另一个类的子集,这意味着一个暗示(通过推理)是一个子类的所有成员都是(超级)类的成员"

因此,如果你说一个类是另一个类的子类,它基本上意味着超类(超集)的个体上的任何属性都可以在子类(子集)的个体上

从您自己的例子中,您可以问:" Lecturer"的所有属性和#34;学生"将被提供给#34; Person"类吗
嗯不,因为你已经将Lecutrer和Student定义为类(集)Person的子类(子集)。基本上,每个学生或讲师都是一个人,但反之亦然。因此,人员定义的属性可以由讲师和学生使用。

是否可以使用OWL / RDF构建面向对象的语言类型类 - 子类继承 嗯,是的,但有点困难。由于开放的世界假设,这一切都变得更加模糊。

希望这会让你的困惑更加清晰。我建议使用本体和推理器来查看这些断言的实际行为。有很多有趣的行为(部分植根于DL,但主要是由于开放世界的假设)。 Protege是一个很好的工具。