我已经使用以下类,属性和具有对象属性断言的个体定义了一个本体:
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职位所需的全部三项技能。
答案 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 有三种技能,足以符合资格。
@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 .