OWL类和子类属性继承

Bea*_*ind 8 rdf owl ontology rdfs

我对OWL类和子类属性的继承感到困惑。一些帖子说OWL中没有继承(OWL:如何从超类继承两个类之间的属性关系?)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 .
      
      Run Code Online (Sandbox Code Playgroud)

如果有人为我提供了一个很好的例子的答案,那将非常有帮助。先感谢您。

Jos*_*lor 6

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

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

x p y
Run Code Online (Sandbox Code Playgroud)

你可以推断出三重

x rdf:type D
Run Code Online (Sandbox Code Playgroud)

没有继承属性的概念。如果您知道E是D的子类,那么您会看到三元组

e p y  
e rdf:type E  
E rdfs:subClassOf D
Run Code Online (Sandbox Code Playgroud)

你现在有两种方法可以知道ËRDF:类型d。首先是因为EPY意味着èRDF:类型d。第二个原因是因为您知道e是E并且E是D的子类,e也是D。

RDF / OWL中的继承是什么意思?

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

属性也是如此。如果q是p的子性质,则意味着xqy表示xpy

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

您在这里的意思还不清楚。您需要准确指定OO语言类型class-subclass继承的含义。您会得到很多相同的行为。例如,如果您知道D的每个实例都有一个特定的对象,那么您就知道E的每个实例也都存在,因为E的每个实例都是 DEg的实例,如果您有

D SubClassOf (hasColor some Color)
Run Code Online (Sandbox Code Playgroud)

那么你可以推断

E SubClassOf (hasColor some Color)
Run Code Online (Sandbox Code Playgroud)

所以从这个意义上讲,就是继承。

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

“可用”可能会误导您。对于类(即类中的个人)可用或不可用的属性没有意义。如果您具有类似以下的层次结构:

Lecturer rdfs:subClassOf Person  
teachesCourse rdfs:domain Lecturer
teachesCourse rdfs:range Course
Run Code Online (Sandbox Code Playgroud)

这意味着当您看到三重

Jones teachesCourse Calculus
Run Code Online (Sandbox Code Playgroud)

你可以推断

Jones rdf:type Lecturer  
Jones rdf:type Person  
Calculus rdf:type Course
Run Code Online (Sandbox Code Playgroud)

属性teachCourse在某种意义上对每个人都是“可用的”,但是,一旦使用它,则意味着该人必须是一名讲师。这真的非常类似于您面向对象的编程语言中的语言,不是吗?例如,如果您使用Java:

x p y
Run Code Online (Sandbox Code Playgroud)

那么可能存在具有getCourses()方法的Person实例。碰巧的是,Person的那些实例也必须是Lecturer的实例。


小智 2

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

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

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

从你自己的例子中,你会问:
“讲师”的所有属性和“学生”课程可以用于“个人”课程吗?
嗯,不,因为您已将 Lecutrer 和 Student 定义为 Person 类(集)的子类(子集)。基本上,每个学生或讲师都是一个人,但反之则不然。因此,讲师和学生可以使用 Person 上定义的属性。

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

希望这能稍微消除您的困惑。我建议使用本体论和推理机来了解这些断言的实际行为。有很多有趣的行为(部分源于深度学习,但主要是由于开放世界假设)。Protege 是一个出色的工具。