考虑这种情况:
Employer
和类Employee
来模拟它。hasEmployer
创建一个对象属性hasEmployee
。EmploymentContract
的类。我想能够说,对于每个hasEmployer
属性及其逆,必须存在与该关系相关的EmploymentContract
。
所以基本上我想要一个名为hasEmploymentContract
的东西,它是一个具有域hasEmployer
(一个对象属性)和范围EmploymentContract
(一个类)的属性。
这是否可能在OWL中?我是否想错了问题呢?
如果可能,使用Protege Ontology Editor的实现也将非常受欢迎。
n-ary关系是解决这个问题的一种方法。另一个是通过财产链接。为此,我将假设下面给出的图表。在这里链接属性providesEmploymentContract, hasEmployeeAsParticipant
代表属性hasEmployee
。这意味着Employer
与providesEmploymentContract
的EmploymentContract
关系,其中EmploymentContract
在hasEmployeeAsParticipant
与Employee
,是Employer
与hasEmployee
关系Employee
。
基于该图,可以为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
尽管有讽刺的评论表明我是愚蠢的,但似乎确实无法直接实现这种逻辑。 W3C工作组已经发现这个缺点发布了一个关于通过其他方式实现这种行为的设计模式的“工作组注释”,我最终发现了这一点。事实上,文档头部的一个例子几乎与我的问题相同:
另一个例子是表示多个个体之间的关系,例如买方,卖方和在描述购买书籍时购买的对象。
对于其他任何感兴趣的人,可以在这里找到该文件:https://www.w3.org/TR/swbp-n-aryRelations/