将 属性 与 OWL/Protege 中的 class 相关联

Associate a property with a class in OWL/Protege

考虑这种情况:

我想说的是,对于每个 hasEmployer 属性 及其倒数,必须存在与该关系相关联的 EmploymentContract

所以基本上我想要一个叫做 hasEmploymentContract 的东西,它是一个 属性,域 hasEmployer(一个对象 属性)和范围 EmploymentContract(一个 class).

这在 OWL 中可行吗?是我想错了问题吗?

如果可能,使用 Protege Ontology 编辑器的实现也将不胜感激。

尽管有尖酸刻薄的评论说我很愚蠢,但看来直接实现这个逻辑确实是不可能的。 W3C 工作组已经确定了这个缺点,发布了 "Working Group Note" 设计模式,用于通过其他方式实现这种行为,我最终找到了。事实上,文件头部的一个例子几乎与我的问题相同:

再比如描述购买一本书时表示多个个体之间的关系,例如买家、卖家、购买的物品。

对于其他感兴趣的人,可以在此处找到该文档:https://www.w3.org/TR/swbp-n-aryRelations/

n 元关系是处理此问题的一种方法。另一种是通过 属性 链接。为此,我将假设图表如下所示。这里的链式属性 providesEmploymentContract, hasEmployeeAsParticipant 表示 属性 hasEmployee。这意味着 EmployerEmploymentContract 处于 providesEmploymentContract 关系,其中 EmploymentContract 处于 hasEmployeeAsParticipantEmployee,是一个EmployerEmployee.

hasEmployee 关系

类似关系可以根据图hasEmployer建立。在 Protege 中,这可以表示如下:

Class: Employee    
Class: Employer    
Class: EmploymentContract

ObjectProperty: providesEmploymentContract
  Domain: Employer
  Range: EmploymentContract

ObjectProperty: agreesToEmploymentContract
  Domain:Employee
  Range: EmploymentContract

ObjectProperty: hasEmployerAsParticipant
  Domain: EmploymentContract
  Range: Employer

ObjectProperty: hasEmployeeAsParticipant
  Domain: EmploymentContract
  Range: Employee

ObjectProperty: hasEmployee
  SubPropertyChain: providesEmploymentContract o hasEmployeeAsParticipant
  Domain: Employer
  Range:  Employee
  InverseOf: hasEmployer

ObjectProperty: hasEmployer
  SubPropertyChain: agreesToEmploymentContract o hasEmployerAsParticipant
  Domain: Employee
  Range: Employer
  InverseOf: hasEmployee