1

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.

Chris
  • 119
  • 2
  • 10
  • And what does not work? When I open your ontology in Protege, the inferred axioms like `:Role1 :requiresCompetency :Competency1` are shown as expected. – UninformedUser Oct 11 '17 at 09:04
  • Apologies for the ambiguity. You are correct that `:Role1 :requiresCompetency :Competency1`, which is correct since `:Role1` requires all skills in my ontology. However in the current ontology the following is also true: `:Role2 :requiresCompetency :Competency2`. Since `:Competency2` also has `:Skill1` and `:Skill3` as a part, `:Role2 :requiresCompetency :Competency2` is not true. – Chris Oct 11 '17 at 10:13
  • I understand what you mean but cannot follow your conclusion. If some role requires some skill which is part of a competency, why should the role not require this competency? E.g. if there is a role DB1 that requires the skill "SQL querying" which is part of "databases" competency, then indeed it requires the competency, or not? I mean, it doesn't matter whether there is another skill "database setup" as part of "databases" competency. Ok, this is probably some opinion-based thing. You're maybe also allowing for simple skill requirements without the whole competency. – UninformedUser Oct 11 '17 at 10:54
  • Nevertheless, I don't think this is possible in OWL. You should think about using rules – UninformedUser Oct 11 '17 at 10:54
  • Thanks. My client is thinking about competencies as a higher level of abstraction than skills. In order to attain the "databases" competency you might require "SQL querying", "SQL profiling", and "database design" skills. However that doesn't mean a role requires all three of these skills. I will look into rules. Thanks for the help. – Chris Oct 11 '17 at 18:56

0 Answers0