Моделирование отношений классов в OWL - PullRequest
0 голосов
/ 02 июня 2018

У меня есть онтология, которая представляет мой взгляд на профессии и образовательные степени.Модель визуально представлена ​​следующим образом:

datamodel

Как часть моей онтологии, я хотел бы смоделировать степень по «путям» занятия для каждой степени (как отмечено на диаграмме выше).Вот несколько примеров того, что я пытаюсь описать:

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

Вот моя онтология на данный момент:

@prefix : <http://www.test.org/jobs#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix xml: <http://www.w3.org/XML/1998/namespace> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@base <http://www.test.org/jobs> .

<http://www.test.org/jobs> rdf:type owl:Ontology .

:hasEducationLevel rdf:type owl:ObjectProperty ;
                   rdfs:domain :Degree ;
                   rdfs:range :EducationLevel .

:hasOccupation rdf:type owl:ObjectProperty ;
               rdfs:domain :Job ;
               rdfs:range :Occupation .

:programOfStudy rdf:type owl:ObjectProperty ;
                rdfs:domain :Degree ;
                rdfs:range :ProgramOfStudy .

:requiresEducation rdf:type owl:ObjectProperty ;
                   rdfs:domain :Job ;
                   rdfs:range :Degree .

:title rdf:type owl:DatatypeProperty ;
       rdfs:domain :Job ;
       rdfs:range xsd:string .

:Accounting rdf:type owl:Class ;
            rdfs:subClassOf :Finance .

:Audit rdf:type owl:Class ;
       rdfs:subClassOf :Finance .

:BachelorsDegree rdf:type owl:Class ;
                 owl:equivalentClass [ owl:intersectionOf ( :Degree
                                                            [ rdf:type owl:Restriction ;
                                                              owl:onProperty :hasEducationLevel ;
                                                              owl:hasValue :BachelorsEducationLevel
                                                            ]
                                                          ) ;
                                       rdf:type owl:Class
                                     ] .

:Computer_Science rdf:type owl:Class ;
                  rdfs:subClassOf :ProgramOfStudy .

:Degree rdf:type owl:Class .

:EducationLevel rdf:type owl:Class .

:Finance rdf:type owl:Class ;
         rdfs:subClassOf :ProgramOfStudy .

:Job rdf:type owl:Class .

:Licensed_Practical_Nurse rdf:type owl:Class ;
                          rdfs:subClassOf :Nurse .

:MastersDegree rdf:type owl:Class ;
               owl:equivalentClass [ owl:intersectionOf ( :Degree
                                                          [ rdf:type owl:Restriction ;
                                                            owl:onProperty :hasEducationLevel ;
                                                            owl:hasValue :MastersEducationLevel
                                                          ]
                                                        ) ;
                                     rdf:type owl:Class
                                   ] .

:Mobile_Developer rdf:type owl:Class ;
                  rdfs:subClassOf :Software_Developer .

:Nurse rdf:type owl:Class ;
       rdfs:subClassOf :Nursing_Occupation .

:Nurse_Manager rdf:type owl:Class ;
               rdfs:subClassOf :Nursing_Occupation .

:Nursing rdf:type owl:Class ;
         rdfs:subClassOf :ProgramOfStudy .

:NursingDegree rdf:type owl:Class ;
               owl:equivalentClass [ owl:intersectionOf ( :Degree
                                                          [ rdf:type owl:Restriction ;
                                                            owl:onProperty :programOfStudy ;
                                                            owl:someValuesFrom :Nursing
                                                          ]
                                                        ) ;
                                     rdf:type owl:Class
                                   ] .

:Nursing_Occupation rdf:type owl:Class ;
                    rdfs:subClassOf :Occupation .

:Occupation rdf:type owl:Class .

:ProgramOfStudy rdf:type owl:Class .

:Registered_Nurse rdf:type owl:Class ;
                  rdfs:subClassOf :Nurse .

:Software_Developer rdf:type owl:Class ;
                    rdfs:subClassOf :Occupation .

:Web_Developer rdf:type owl:Class ;
               rdfs:subClassOf :Software_Developer .

:BachelorsEducationLevel rdf:type owl:NamedIndividual ,
                                  :EducationLevel .

:MastersEducationLevel rdf:type owl:NamedIndividual ,
                                :EducationLevel .

Я рассмотрел вопрос об использовании свойств объекта и отдельных лиц, но я не уверен, как добиться обобщения, которое я ищу при указании значения для свойства объекта отдельного лица.

Может кто-нибудь сделать предложение о том, как я мог бы смоделировать эту степень для профессий в OWL?Спасибо.

1 Ответ

0 голосов
/ 03 июня 2018

Если Software developer является вершиной вашей иерархии совместимых карьер для степеней CS, то вы бы заявили что-то вроде

Software developer subClassOf Существует hasDegree CS degree

Чтобы остановитьNurse manager от необходимости просто Nursing degree (я подозреваю, что им понадобится какой-нибудь курс управления?), вы можете сделать что-то похожее:

Nurse manager subClassOf Существует hasDegree Management role

Теперь, человек без такой степени не будет классифицирован как Nurse manager (потенциал).Если вы утверждаете, что они являются медсестрами, система не будет жаловаться.

...