关于 OWL + SWRL 的几个问题:1/检查个人是否具有数据属性 2/获取树的“叶子”3/对所有树枝求和

问题描述 投票:0回答:0

我有几个关于 OWL + SWRL 的问题。请注意,我是逻辑和本体论背后所有科学的新手。还有 protégé 的新手。我目前正在使用 Protégé 5.6.1。我有一个本体,我在其中对由零件组成的组件进行建模。因此,我有一种树结构,使用称为

hasPart
的传递对象属性。逆属性是
isPartOf
.

我附上一个简约的本体来解释我的问题。你可以在这里下载它

我已经创建了个人并声明了属性,例如:

assembly_1 hasPart part_01.
part_01 hasPart part_02.

还有一个更复杂的例子:

assembly_2 hasPart part_10.
assembly_2 hasPart part_20.
assembly_2 hasPart part_30.

part_10 hasPart part_11.
part_30 hasPart part_31.
part_31 hasPart part_32.

每个部分都有一个数据属性

massKg
。除了
part_31

启动 Pellet reasonner,传递属性的行为正确恕我直言。例如,通过断言和推理,assembly_2 的所有部分 >= part_10。 part_32 是 part_31、part_30 和 assembly_2 的一部分。

但是现在,这就是我被困的地方......

我想通过 SWRL(根据我的理解)知道零件是装配树的一片叶子。 我很想编写类似的代码:

isPartOf(?object, ?parent) ^ not( hasPart(?object, ?noSubPart)) -> isLeaf(?object, true)

也就是说:“一个对象是父对象的一部分,但没有子部分,是一片叶子”。 遗憾的是,对象属性似乎不支持否定(查看此FAQ)。

我该怎么办?

类似的问题是关于数据属性。例如,如何在个人没有数据属性的情况下创建 SWRL 规则

massKg

最后,我想创建一个规则/方法(也许是 SQWRL ?)来获得程序集的总

massKg
。要么因为这是树的最顶层元素。或者(因为我以后会有这种情况),因为个人属于给定的类别,我想要属于它的所有部分的总和。

我愿意接受建议。并敞开心扉。因为我是OWL和SWRL的新手,目前还没有大写。因此,如果您向我建议其他方法来计算规则(前向和后向)以及关于本体或知识库/三元组/其他任何东西的数学,我什至可以接受(我很乐意了解您的想法)。

不要犹豫向我推荐网站/文章/书籍来提升自己。

提前致谢。 鲍里斯

owl protege swrl sqwrl
© www.soinside.com 2019 - 2024. All rights reserved.