要求个人的财产价值成为另一个人的超集?

时间:2016-05-22 23:36:08

标签: semantic-web owl protege

我已经使用以下类,属性和具有对象属性断言的个体定义了一个本体:

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

为了分类员工是否有资格获得工作(在这种情况下,DBA职位),我创建了类适合并使其等同于:

Employee and (hasSkill only (isAskillrequiredBy value DBA))

当我在Protege中运行推理器时,推理器将类适合下的 EmployeeA 分类,但使用闭包公理来解决开放世界假设(OWA),< strong> EmployeeA 不应归类为 Fit ,因为他没有DBA职位所需的全部三项技能。

1 个答案:

答案 0 :(得分:0)

首先,回想一下OWL中“通用”量化的含义。类表达式

p only C

是个体x,如果如果 x与属性p的y相关,那么那么 y必须是C.也就是说,p(x,y)暗示C(Y)。您的查询返回正确的结果,但查询并不意味着您想要它的意思。查询

  

员工和(仅限有技能(isAskillrequiredBy值DBA))

说必须是员工,如果员工有技能,那么技能必须是DBA职位要求的技能。 EmployeeA肯定符合这个定义,因为EmployeeA拥有的技能是Skill1和Skill2,这两者都是DBA职位所必需的。

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

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

反向 requiresSkill) DBA

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

((反向 requiresSkill) DBA)

您想说的是, 目前,您没有将个人与他们拥有的技能相关联的属性。如果你这样做,那么你可以将“Fit”类定义为

员工(缺少技能((反向 requiresSkill) DBA)))

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

缺少技能 disjointProperty hasSkill

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

这足以使这个查询起作用,它消除了对某些闭包公理的需要。您仍然需要关闭职位要求,但您不需要关闭员工的技能。也就是说,您不需要说,例如,EmployeeA只有 技能Skill1,Skill2。我在Protege中创建了一个本体,您可以使用它来查看此操作。它有一个 EmployeeA 谁有Skill1和Skill2(不足以胜任这份工作), EmployeeB 有三种技能,足以符合资格。

screenshot

@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 .