如何在 OWL2 / Protege / Ontology 中将 属性 定义为两个 "conditions" 的交集
How to define a property as intersection of two "conditions" in OWL2 / Protege / Ontology
如果问题已经被问过或者回答很琐碎,我们深表歉意。我尝试搜索如何实现这个特定案例,但我还没有找到任何解决方案。
问题:这就是我想要建模的:
假设 属性 'isFriendOf' 不是对称的,为了使这种关系成为可能 (x isFriendOf y) 两个条件必须有效:
x sendsFriendRequestTo y
y acceptsFriendRequestFrom x
并且只要这两个属性出现在我们的 Ontology 中,就会自动推断出 属性 x isFriendOf y。即:
(x sendsFriendRequestTo y) AND (y acceptsFriendRequestFrom x) -> x isFriendOf y
到目前为止我尝试了什么
我试图通过以下方式将此 属性 建模为 属性 链 :
1) sendsFriendRequestTo some (acceptsFriendRequestFrom Self) -> isFriendOf
(reasoner 报错,日志说:Non-Simple Obj 属性 is used a simple one)
2) sendsFriendRequestTo o acceptsFriendRequestFrom -> isFriendOf
(虽然我意识到这不是两个属性的正确组合)
评论
我可以将 Classes 定义为两个 Classes/concepts 的交集;但我不清楚如何将 属性 定义为其他两个属性的交集(在这种情况下,如何指定最终 属性 的域和范围?)。
我在 "Rolification" 上找到了一些东西(即定义一个 Class 然后强制将其作为角色处理),但我不确定我是否理解它是如何工作的,或者它是否对我试图建模的东西有用。
有什么帮助吗?
在OWL中,恐怕你不能完全代表这一点。您可以选择两个选项:在 OWL 中指定您想要的部分公理化并接受它,或者依赖其他形式主义。对于您的具体示例,基于规则的框架就足够了(请参阅 )。也可以将 OWL 与临时程序扩展相结合,以处理 OWL 无法表达的内容。例如,如果你想表示物理系统的知识,其中数值根据算术公式相关,OWL 不能帮助你(例如,加速度和外力之间的关系)。但是您可以将具有数据类型属性的 OWL class 层次结构与物理公式的临时实现结合起来以涵盖这种情况。
仅 OWL 就可以涵盖知识表示方面的许多用例,但总的来说,认为 ontology 将对任何问题所需的所有知识进行编码是一种谬论你面对的。必须有编程代码来处理知识表示形式主义无法处理的差距。
如果你有一个特定的人 ex:p
,你可以在 OWL 中说这个人和谁是朋友,如下所示(在 Turtle 语法中):
[
a owl:Restriction;
owl:onProperty ont:isFriendWith;
owl:hasValues ex:p
]
owl:intersectionOf (
[
a owl:Restriction;
owl:onProperty [ owl:inverseOf ont:sendsFriendRequestTo ];
owl:hasValue ex:p
]
[
a owl:Restriction;
owl:onProperty ont:acceptsFriendRequestFrom;
owl:hasValue ex:p
]
) .
如果问题已经被问过或者回答很琐碎,我们深表歉意。我尝试搜索如何实现这个特定案例,但我还没有找到任何解决方案。
问题:这就是我想要建模的:
假设 属性 'isFriendOf' 不是对称的,为了使这种关系成为可能 (x isFriendOf y) 两个条件必须有效:
x sendsFriendRequestTo y
y acceptsFriendRequestFrom x
并且只要这两个属性出现在我们的 Ontology 中,就会自动推断出 属性 x isFriendOf y。即:
(x sendsFriendRequestTo y) AND (y acceptsFriendRequestFrom x) -> x isFriendOf y
到目前为止我尝试了什么
我试图通过以下方式将此 属性 建模为 属性 链 :
1) sendsFriendRequestTo some (acceptsFriendRequestFrom Self) -> isFriendOf
(reasoner 报错,日志说:Non-Simple Obj 属性 is used a simple one)
2) sendsFriendRequestTo o acceptsFriendRequestFrom -> isFriendOf
(虽然我意识到这不是两个属性的正确组合)
评论
我可以将 Classes 定义为两个 Classes/concepts 的交集;但我不清楚如何将 属性 定义为其他两个属性的交集(在这种情况下,如何指定最终 属性 的域和范围?)。
我在 "Rolification" 上找到了一些东西(即定义一个 Class 然后强制将其作为角色处理),但我不确定我是否理解它是如何工作的,或者它是否对我试图建模的东西有用。
有什么帮助吗?
在OWL中,恐怕你不能完全代表这一点。您可以选择两个选项:在 OWL 中指定您想要的部分公理化并接受它,或者依赖其他形式主义。对于您的具体示例,基于规则的框架就足够了(请参阅
OWL 就可以涵盖知识表示方面的许多用例,但总的来说,认为 ontology 将对任何问题所需的所有知识进行编码是一种谬论你面对的。必须有编程代码来处理知识表示形式主义无法处理的差距。
如果你有一个特定的人 ex:p
,你可以在 OWL 中说这个人和谁是朋友,如下所示(在 Turtle 语法中):
[
a owl:Restriction;
owl:onProperty ont:isFriendWith;
owl:hasValues ex:p
]
owl:intersectionOf (
[
a owl:Restriction;
owl:onProperty [ owl:inverseOf ont:sendsFriendRequestTo ];
owl:hasValue ex:p
]
[
a owl:Restriction;
owl:onProperty ont:acceptsFriendRequestFrom;
owl:hasValue ex:p
]
) .