要求个人的 属性 值是另一个值的超集?

Require individual's property values to be a superset of another's?

我定义了一个 ontology 具有以下 classes、属性和具有对象 属性 断言的个体:

Class: Employee > Individuals: { EmployeeA }
Class: Skill > Individuals: { Skill1, Skill2, Skill3 }
Class: Job > Individuals: { DBA }
hasSkill > Domain (Employee) and Range (Skill)
isAskillBy > Domain (Skill) and Range (Employee) <inverse of hasSkill>
requireSkill > Domain (Job) and Range (Skill)
isAskillrequiredBy > Domain (Skill) and Range (Job) <inverse of requireSkill>
Individual: EmployeeA, object property assertion: hasSkill Skill1 
                                                  hasSkill Skill2
                     , types : hasSkill only ({Skill1,Skill2}) <to close OWA
                     , Negative object property assertion: hasSkill Skill3

Individual: DBA, object property assertion: requireSkill Skill1 
                                             requireSkill Skill2
                                             requireSkill Skill3

       , types : requireSkill only ({Skill1,Skill2, Skill3}) <to close OWA

为了class确定员工是否有资格胜任某项工作(在本例中为 DBA 职位),我创建了 class Fit 和使其等同于:

Employee and (hasSkill only (isAskillrequiredBy value DBA))

当我 运行 在 Protege 中成为推理者时,推理者 class 在 class Fit[ 下 EmployeeA =26=],但使用闭包公理来解决开放世界假设 (OWA),EmployeeA 不应 class 化为 Fit, 因为他不具备 DBA 职位所需的全部三项技能。

首先,回想一下 OWL 中的 "universal" 量化是什么意思。 class 表达式

仅 p C

是个体 x 使得 if x 与 y 相关 属性 p, then y 必须是 a C. 也就是说,p(x,y) 蕴含 C(y)。您的查询返回了正确的结果,但查询并不完全符合您的要求。查询

Employee and (hasSkill only (isAskillrequiredBy value DBA))

说某事必须是雇员,如果雇员有一项技能,那么该技能必须是必需的由DBA职位。 EmployeeA 肯定符合该定义,因为 EmployeeA 拥有的技能是 Skill1 和 Skill2,这两者都是 DBA 职位所必需的。

此查询中的问题是。它将以两种不同的方式表现出来:(i) 如果某人有资格担任 DBA 职位(即,拥有所有必要的技能),但有额外的技能,那么你不会检索它们,因为他们 DBA 职位 不需要 的技能(但也许您不想要资历过高的人); (ii) 它检索 DBA 职位所需的所有技能的人,但不要求这些人实际拥有 所有 DBA 职位所需的技能。

您真正想要的是拥有 DBA 职位所需的所有技能的人。您需要检查的是个人是否缺乏 DBA 所需的任何技能。 DBA 职位所需的技能可以通过以下方式找到:

inverse requiresSkill)value DBA

DBA 不需要的技能只是对它的否定:

not((inverse requiresSkill)value DBA)

你想说的是,个人没有的任何技能都必须来自class。目前,您没有 属性 将个人与他们 没有 的技能联系起来。如果你这样做了,那么你可以将 "Fit" class 定义为

员工(缺乏技能(( requiresSkill) value DBA)))

现在,问题是您是否可以定义一个 属性 lacksSkill,当员工 有一技之长。我不确定你是否能做到这一点,但你可以定义

lacksSkill disjointProperty hasSkill

这意味着如果 hasSkill(x,y) 为真,则 lacksSkill(x,y) 必须为假。它与否定并不完全相同,因为它们可以同时为,但不能同时为真。

这足以让这个查询工作,并且它消除了对一些闭包公理的需要。您仍然需要关闭职位所需的内容,但不需要关闭员工的技能。也就是说,您无需说明,例如,EmployeeA 技能 Skill1、Skill2。我在 Protege 中创建了一个 ontology,您可以使用它来查看实际效果。它有一个 EmployeeA 拥有 Skill1 和 Skill2(不足以胜任这份工作),还有一个 EmployeeB 拥有所有三种技能,即足以获得资格。

@prefix :      <http://example.org/> .
@prefix rdf:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix owl:   <http://www.w3.org/2002/07/owl#> .
@prefix xsd:   <http://www.w3.org/2001/XMLSchema#> .
@prefix rdfs:  <http://www.w3.org/2000/01/rdf-schema#> .
@prefix example: <http://example.org/> .

example:Skill  a  owl:Class .

example:Position  a  owl:Class .

example:Skill3  a  owl:NamedIndividual , example:Skill .

example:hasSkill  a               owl:ObjectProperty ;
        owl:propertyDisjointWith  example:lacksSkill .

example:requiresSkill
        a       owl:ObjectProperty .

example:  a     owl:Ontology .

example:DBA  a                 owl:NamedIndividual , example:Position ;
        a                      [ a                  owl:Restriction ;
                                 owl:allValuesFrom  [ a          owl:Class ;
                                                      owl:oneOf  ( example:Skill3 example:Skill2 example:Skill1 )
                                                    ] ;
                                 owl:onProperty     example:requiresSkill
                               ] ;
        example:requiresSkill  example:Skill1 , example:Skill2 , example:Skill3 .

example:Skill2  a  owl:NamedIndividual , example:Skill .

example:Employee  a  owl:Class .

example:EmployeeA  a      owl:NamedIndividual , example:Employee ;
        example:hasSkill  example:Skill1 , example:Skill2 .

example:Skill1  a  owl:NamedIndividual , example:Skill .

example:lacksSkill  a  owl:ObjectProperty .

example:EmployeeB  a      owl:NamedIndividual , example:Employee ;
        example:hasSkill  example:Skill1 , example:Skill2 , example:Skill3 .