У меня есть онтология, которая представляет мой взгляд на профессии и образовательные степени.Модель визуально представлена следующим образом:
Как часть моей онтологии, я хотел бы смоделировать степень по «путям» занятия для каждой степени (как отмечено на диаграмме выше).Вот несколько примеров того, что я пытаюсь описать:
- Если я получу степень бакалавра в области компьютерных наук, я могу стать разработчиком программного обеспечения любого типа (включая веб-разработчика, который являетсяподкласс разработчика программного обеспечения).
- если я получу степень медсестры, я могу стать медсестрой любого типа, но не менеджером медсестры.
Вот моя онтология на данный момент:
@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?Спасибо.