semantic-web - 使用 OR 语句的 SWRL 规则

标签 semantic-web ontology owl swrl

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

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

MachineTool(?mt) ^ hasProcess(?mt, ?p) ^ (EndMilling OR Drilling)(?p) -> MyMachineTools(?mt)

但该规则不合法。有人知道可以实现我们正在寻找的目标的规则(或一组规则)吗?我曾想过一种替代方案(但尚未测试过,Protege 目前很奇怪):

EndMilling(?p) -> MyProcesses(?p)
Drilling(?p) -> MyProcesses(?p)
MachineTool(?mt) ^ hasProcess(?mt, ?p) ^ MyProcesses(?p) -> MyMachineTools(?mt)

我欢迎对此问题的所有想法。

最佳答案

或者如果使用 OWL 的 ObjectUnionOf 表达,则在 SWRL 规则中是合法的。

我认为问题在于对 SWRL 表面语法的工具支持,如代码示例中所示。 Protege 3.x 在语法上不支持这种 OR 构造(至少我上次检查时不支持),虽然 Protege 4.1 可以渲染它,但无法重新解析它(只是用 rc5 检查)。但是,如果您使用最新的 OWL-API (v3.2.x) 并使用 XML 或函数式语法等语法,则一切都应该有效。 (请注意,Protege 3.x 和 4.x 使用截然不同的 OWL API,我建议您仅使用 Protege 4.x 和 OWL-API 3.x。)

如果您无法在 SWRL 中使用 OR,那么您可以使用与 ObjectUnionOf 等效的命名类,例如

EquivalentClasses(my-processes, ObjectUnionOf(end-milling, drilling))

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

请注意,您的解决方法(第二个代码示例)没有给出语义上等效的语句,因为您只是声明:

SubClassOf(end-milling, my-processes)
SubClassOf(drilling, my-processes)

这与陈述相同:

SubClassOf(ObjectUnionOf(end-milling, drilling), my-processes)

即要陈述等价性,您还需要其他含义:

SubClassOf(my-processes, ObjectUnionOf(end-milling, drilling))

另请注意,您的规则可以很容易地用 OWL 表达,即您根本不需要 SWRL 来实现此规则:

SubClassOf(
   ObjectIntersectionOf(
      :machine-tool
      ObjectSomeValuesFrom(
         :has-process
         ObjectUnionOf(
            :end-milling
            :drilling
         )
      )
   )
   :my-machine-tool
)

在 OWL 中陈述所有内容(如果可能)有一些好处,例如您将获得更好的工具支持(OWL 推理器比 SWRL 推理器更多),并且您将获得更强大的推理(SWRL 推理器仅将规则应用于已知个体)。

关于semantic-web - 使用 OR 语句的 SWRL 规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6590406/

相关文章:

semantic-web - 如何查询匿名类型的实例?

json - 将 Typescript 接口(interface)与递归 JSON 结合使用

rdf - 如何在OWL中定义属性的域?

annotations - 如何在 Protege 中添加图像

java - 如何以编程方式使用 DL 查询

java - 遍历耶拿的匿名/空白节点

rdf - 多语言 OpenCalais 之类的系统?

语义网中的图遍历算法

java - 任何机构都可以提供下载 wordnet 本体 2.0 的链接吗?

java - 尝试在 jena api 中查找 RDFNode 对象的父类