首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用OR语句的SWRL规则

使用OR语句的SWRL规则
EN

Stack Overflow用户
提问于 2011-07-06 00:35:28
回答 1查看 2.8K关注 0票数 2

我试图找出一种实现SWRL规则的方法,该规则需要使用OR类型语句。下面是一个场景:本体有一个类"MachineTool“,它有一个对象属性"hasProcess”和许多类的进程。我们希望能够获得MachineTool的个人列表,该列表的hasProcess值为"EndMilling“或”钻孔“。

如果允许使用“或”语句,SWRL规则将类似于:

代码语言:javascript
运行
复制
MachineTool(?mt) ^ hasProcess(?mt, ?p) ^ (EndMilling OR Drilling)(?p) -> MyMachineTools(?mt)

但这条规则不合法。有人知道一条规则(或一套规则)可以完成我们正在寻找的东西吗?我曾想过有一种选择是可以的(但还没有测试过,目前抗议者很奇怪):

代码语言:javascript
运行
复制
EndMilling(?p) -> MyProcesses(?p)
Drilling(?p) -> MyProcesses(?p)
MachineTool(?mt) ^ hasProcess(?mt, ?p) ^ MyProcesses(?p) -> MyMachineTools(?mt)

我欢迎大家对这个问题的看法。

EN

回答 1

Stack Overflow用户

发布于 2011-07-06 18:21:54

如果使用OWL的ObjectUnionOf表示,在SWRL规则中也是合法的。

我认为问题在于工具对SWRL表面语法的支持,就像代码示例中所提供的那样。Proge3.x在语法上不支持这个或-结构(至少上次我没有检查过),虽然Protege 4.1可以呈现它,但是它不能对它进行修复(刚刚用rc5检查过)。但是,如果您使用的是最近的OWL (v3.2.x),并且使用像XML这样的语法或函数式语法,那么一切都应该工作。(请注意,Protege 3.x和4.x使用非常不同的OWL,我建议您只使用Protege 4.x和OWL 3.x。)

如果无法使OR在SWRL中工作,则可以使用与ObjectUnionOf等效的命名类。

代码语言:javascript
运行
复制
EquivalentClasses(my-processes, ObjectUnionOf(end-milling, drilling))

machine-tool(?mt) ^ has-process(?mt, ?p) ^ my-processes(?p)
                                                        -> my-machine-tool(?mt)

请注意,您的工作(第二个代码示例)并没有给出语义等效的语句,因为您只是在声明:

代码语言:javascript
运行
复制
SubClassOf(end-milling, my-processes)
SubClassOf(drilling, my-processes)

这与声明相同:

代码语言:javascript
运行
复制
SubClassOf(ObjectUnionOf(end-milling, drilling), my-processes)

也就是说,要声明一种等价性,还需要另一种含义:

代码语言:javascript
运行
复制
SubClassOf(my-processes, ObjectUnionOf(end-milling, drilling))

还请注意,您的规则可以很容易地用OWL表示,也就是说,对于这个规则您根本不需要SWRL:

代码语言:javascript
运行
复制
SubClassOf(
   ObjectIntersectionOf(
      :machine-tool
      ObjectSomeValuesFrom(
         :has-process
         ObjectUnionOf(
            :end-milling
            :drilling
         )
      )
   )
   :my-machine-tool
)

在OWL中声明所有东西(如果可能的话)都有一些好处,例如您得到了更好的工具支持(比SWRL推理器更多OWL推理器),并且您得到了更强大的推理(SWRL推理器只对已知的个人应用该规则)。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6590406

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档