要求个人的 属性 值是另一个值的超集?
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 .
我定义了一个 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 .