2016-06-16 6 views
3

У меня есть путаница в отношении наследования класса 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). Тем не менее, я нашел и противоположное обсуждение. Например, в статье «Основы семантического веб-праймера для объектно-ориентированных разработчиков программного обеспечения» (https://www.w3.org/TR/sw-oosd-primer/) упоминалось, что для объектно-ориентированного языка OWL & RDF: «Классы могут быть организованы в иерархию подкласса с наследованием» (раздел 3.3). https://www.w3.org/TR/rdf-schema/#ch_subclassof отметил, что «Свойство rdfs: subClassOf - это экземпляр rdf: Свойство, которое используется для указания, что все экземпляры одного класса являются экземплярами другого». Следовательно, это сбивает меня с толку. Теперь я на следующие вопросы:Наследование свойств класса и подкласса OWL

  • Как объектно-ориентированный язык, является 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 . 
      

Если кто-то предоставить мне ответ с хорошим примером, который будет очень полезным. Заранее спасибо.

ответ

1

Я попытаюсь ответить на некоторые ваши вопросы

Какой смысл наследования в RDF/OWL?
Наследование в сове работает немного иначе, чем в объектно-ориентированных языках. Мы можем думать об этом с точки зрения теории множеств. Классы совы в основном обозначают множества людей. Затем свойства используются для указания фактов о физических лицах. Поэтому, когда вы «определяете» свойство в классе совы, вы в основном говорите, что у индивидуумов этого класса есть это свойство (все или некоторые в зависимости от того, как было определено свойство).
С постом вы связаны:
«Подкласс обозначает класс является подмножеством другого класса, а это означает, что вывод (через умозаключение) является то, что все члены подкласса являются членами (супер) класса»

Таким образом, если вы говорите, что класс является подклассом другого, это в основном означает, что любые свойства на лицах суперкласса (супер-набора) могут быть у индивидуумов подкласса (подмножество)

С вашего собственного примера вы спрашиваете:
Все ли свойства «Лектор» и «Студент» будут доступны для класса «Человек»?
Ну нет, поскольку вы определили, что Lecutrer и Student являются подклассами (подмножествами) класса (набора) Person. В принципе, каждый студент или лектор - это Личность, но не наоборот. Таким образом, свойства, определенные на Лице, могут быть использованы Лектором и Студентом.

Можно ли построить объектно-ориентированного типа языка класса подкласс наследования с OWL/RDF
Ну да, но это немного сложнее. Все это сделалось немного более мрачным из-за предположения открытого мира.

Надеюсь, это немного скроет ваше замешательство. Я бы рекомендовал сыграть с онтологией и рассудителем, чтобы увидеть, как эти утверждения действительно ведут себя. Существует много интересного поведения (частично внедренного в DL, но главным образом из-за предположения открытого мира). Protege - отличный инструмент для этого.

+0

Я думаю, что проблема путается, когда говорится, что RDFS/OWL имеет любую форму наследования. Это работает по смыслу семантики логики теории множеств/предикатов. Некоторые из них могут быть интерпретированы как похожие на наследование в OO-системах, но со временем во многих настройках я нашел, что лучше понять, что наследование отсутствует в RDFS/OWL и объясняет, как наборы, подмножества и стандартные рассуждения профили (последствия). – scotthenninger

+0

Спасибо за ваш ответ. Вы упомянули, что «Таким образом, если вы говорите, что класс является подклассом другого, это в основном означает, что любые свойства особей суперкласса (супер-набора) могут быть у индивидуумов подкласса (подмножества)». Тем не менее, @ Джошуа Тейлор: сказал, что «нет понятия о наследовании собственности». Разве это не противоречит? Если у меня есть класс под названием «Человек», и он имеет два свойства «возраст» и «адрес», и пусть «лектор» - это subClassOf «Person». Тогда свойства «возраст» и «адрес» будут доступны «лектору», как языки OO? –

+0

Нет, утверждения не противоречат друг другу. Определение класса ': Person' со свойствами': age' и ': address' не будет иметь никакого эффекта в экземплярах': Person' и не будет доступно для ': Lecturer'. ': age' и': address' будут доступны только для определения класса ': Person'. Это существенное различие между RDFS и языками программирования OO. – scotthenninger

2

Как объектно-ориентированный язык, это rdfs: subclassOf наследует свойство от суперкласса?

Сказать, что область свойств р класс D означает, что, когда у вас есть тройной

Xpy

можно сделать вывод, тройной

х РДФ: тип D

Нет понятия о наследовании имущества. Если вы знаете, что E является подклассом D, и вы увидите троек

EPY
е РДФ: тип E
E ИСС: subClassOf D

теперь у вас есть два пути, чтобы знать, что е РДФ : тип 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 является экземпляром D. E.g., Если у вас есть

D SubClassOf (hasColor некоторые цвета)

, то вы можете сделать вывод, что

E SubClassOf (hasColor некоторые цвета)

так что в этом смысле есть наследование.

Рассмотрите следующий пример. Все ли свойства «Лектор» и «Студент» будут доступны для класса «Личность»?

"Доступен" может быть неправильной. Нет смысла в том, какие свойства доступны или недоступны для класса (то есть для отдельных лиц в классе). Если у вас есть иерархия, как:

Лектор RDFS: subClassOf Person
teachesCourse ИСС: домен Лектор teachesCourse RDFS: диапазон курса

, что означает, что, когда вы видите тройной

Jones teachesCourse Исчисление

можно сделать вывод, что

Jones РДФ: Тип лектор
Jones РДФ: тип Person
Исчисление РДФ: Тип курса

Свойство teachesCourse является «доступным» для каждого человека, в некотором смысле, но как только он используется, то это означает, что этот человек должен быть преподаватель. Это действительно очень похоже на то, что у вас было бы на объектно-ориентированном языке программирования, не так ли? Например, если у вас есть в Java:

class Person { } 

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

затем могут быть случаи Person, которые имеют getCourses() метод. Просто случается, что в тех случаях, когда Лицо должно быть экземплярами Преподаватель, тоже.