将 属性 与 OWL/Protege 中的 class 相关联
Associate a property with a class in OWL/Protege
考虑这种情况:
- 有雇主和雇员。我用 class
Employer
和 class Employee
对此建模。
- 然后我创建一个对象 属性
hasEmployer
与逆 hasEmployee
。
- 现在我还创建了一个名为
EmploymentContract
的 class。
我想说的是,对于每个 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
。这意味着 Employer
与 EmploymentContract
处于 providesEmploymentContract
关系,其中 EmploymentContract
处于 hasEmployeeAsParticipant
与 Employee
,是一个Employer
与 Employee
.
有 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
考虑这种情况:
- 有雇主和雇员。我用 class
Employer
和 classEmployee
对此建模。 - 然后我创建一个对象 属性
hasEmployer
与逆hasEmployee
。 - 现在我还创建了一个名为
EmploymentContract
的 class。
我想说的是,对于每个 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
。这意味着 Employer
与 EmploymentContract
处于 providesEmploymentContract
关系,其中 EmploymentContract
处于 hasEmployeeAsParticipant
与 Employee
,是一个Employer
与 Employee
.
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