I have an ontology which defines Roles, Skills, and Competencies. Roles require Skills and Skills are part of Competencies. I want to be able to infer the competencies required by a Role.
Here is a sample of my ontology:
@prefix : <http://www.semanticweb.org/chris/ontologies/2017/9/untitled-ontology-78#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@base <http://www.semanticweb.org/chris/ontologies/2017/9/untitled-ontology-78> .
<http://www.semanticweb.org/chris/ontologies/2017/9/untitled-ontology-78> rdf:type owl:Ontology .
:hasLevel rdf:type owl:ObjectProperty ,
owl:FunctionalProperty ;
rdfs:domain :Competency .
:partOf rdf:type owl:ObjectProperty ;
rdfs:domain :Skill ;
rdfs:range :Competency .
:requires rdf:type owl:ObjectProperty ;
rdfs:subPropertyOf owl:topObjectProperty ;
rdfs:domain :Role ;
rdfs:range :Skill .
:Competency rdf:type owl:Class ;
rdfs:subClassOf [ rdf:type owl:Restriction ;
owl:onProperty [ owl:inverseOf :partOf
] ;
owl:someValuesFrom :Skill
] .
:Role rdf:type owl:Class .
:Skill rdf:type owl:Class .
:Competency1 rdf:type owl:NamedIndividual ,
:Competency .
:Competency2 rdf:type owl:NamedIndividual ,
:Competency .
:Competency3 rdf:type owl:NamedIndividual ,
:Competency .
:Role1 rdf:type owl:NamedIndividual ,
:Role ;
:requires :Skill1 ,
:Skill2 ,
:Skill3 ,
:Skill4 .
:Role2 rdf:type owl:NamedIndividual ,
:Role ;
:requires :Skill2 .
:Skill1 rdf:type owl:NamedIndividual ,
:Skill ;
:partOf :Competency1 .
:Skill2 rdf:type owl:NamedIndividual ,
:Skill ;
:partOf :Competency1 ,
:Competency2 .
:Skill3 rdf:type owl:NamedIndividual ,
:Skill ;
:partOf :Competency1 ,
:Competency2 ,
:Competency3 .
:Skill4 rdf:type owl:NamedIndividual ,
:Skill .
[ rdf:type owl:AllDifferent ;
owl:distinctMembers ( :Skill1
:Skill2
:Skill3
:Skill4
)
] .
[ rdf:type owl:AllDifferent ;
owl:distinctMembers ( :Competency1
:Competency2
:Competency3
)
] .
I have defined the following property chain:
:requiresCompetency rdf:type owl:ObjectProperty ;
owl:propertyChainAxiom ( :requires
:partOf
) .
which, given a Role, provides the Competencies where the Role's required skills are a part. However, what I am really interested in inferring is any Competencies where the skills required by a Role are a superset of the skills which are part of a Competency.
Since I define which Skills are part of which Competency, the open world assumption should not apply to this problem.