我有一个定义角色,技能和能力的本体论。角色要求技能和技能是能力的一部分。我希望能够推断出角色所需的能力。
以下是我的本体的一个示例:
@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
)
] .
我定义了以下属性链:
:requiresCompetency rdf:type owl:ObjectProperty ;
owl:propertyChainAxiom ( :requires
:partOf
) .
,在给定角色的情况下,提供角色所需技能所属的能力。但是,我真正感兴趣的是推断任何能力,其中角色所需的技能是作为能力一部分的技能的超集。
由于我定义哪些技能属于哪个能力,因此开放世界的假设不适用于此问题。