我有一个简单的问题,我怀疑它没有简单的答案。从本质上讲,我想检查一个OWL表达式(#B)是否真的从另一个(#A)逻辑上跟随 - 换句话说我想问:是否#A - > #B?
这样做的原因是我正在为一个应用程序编写匹配算法,该算法将基于知识的结构(由#KnowledgeStructure类表示)与描述当前应用程序状态(#StateRequirement)需求的结构相匹配。 。两个结构都具有属性,这些属性具有表示第三种结构(#Model)状态下的OWL表达式的字符串值。它们是:#KnowledgeStructure.PostCondition,它表示应用于#Model的知识结构将如何转换#Model;和#StateRequirement.GoalCondition,表示应用程序旨在实现的#Model状态。因此,我希望看到#KnowledgeStructure是否满足#StateRequirement,方法是检查#KnowledgeStructure.PostCondition是否产生了所需的#StateRequiremment.GoalCondition。我可以抽象地表达为:(#KnowledgeStructure.Postcondition => #StateRequirement.GoalCondition)=>匹配(#KnowledgeStructure,#StateRequirement)。不那么容易混淆我可以表达为:((#A - > #B) - >匹配(#A,#B))其中#A和#B都是有效的OWL表达式。
在一般情况下,我希望能够表达以下规则:“如果表达式#B遵循#A,那么表达式匹配(#A,#B)也是如此”。
基本上,我的问题是:我如何在OWL中构建或实现这样的规则?如何测试一个表达式是否来自另一个表达式?此外,现有的reasoners足以确定关系#A - >如果没有明确说明这种关系,两个表达式之间的#B是什么?
答案 0 :(得分:1)
我并非100%确定我完全理解这个问题,但从我所掌握的情况来看,我会以这种方式面对这种情况。
首先,我指的是Java,因为我所知道的所有库都是针对这种语言的。其次,我不认为OWL本身能够满足你的目标,因为它可以代表规则和公理,但它不提供推理,也就是说,你需要一个推理器,所以你需要建立一个程序使用它,再加上我将在下面绘制的额外处理:
1)你没有提到它,但我猜你有一个潜在的本体论w.r.t.你需要证明你的后果关系(你用符号表示什么“ - >”)。如果本体不明确,也许它可以从您在问题中提到的文本表达式中提取/组合。
2)你需要使用一个库来进行本体操作,我建议来自曼彻斯特大学的OWL API,它非常强大和简单,在“文档”部分的教程中,你有一个主要功能的概述,包括使用reasoners(示例显示Hermit,但原则适用于任何其他推理者)。
3)此时你需要检查本体是否一致(否则可以导出任何东西,因为它经常发生在错误的前提下)
4)您将以下公理添加到本体中(您可以直接在Java中构建它,无需序列化,您可以让推理器处理内存中的表示)并检查一致性:A \ sqsubseteq B,也就是说,使用相关的解释:A ^ I \ subseteq B ^ I,所以它相当于A => B(他们有相同的真值表)。
5)此时你可以添加公理匹配(A,B),其中A和B是你的类表达式,匹配是一个角色/关系,它关联所有类表达式,其中第二个是第一
6)经过多次重复这些步骤之后,您可能希望序列化结果并将其存储起来,这可以通过内存表示中的OWL API非常简单地实现。
有关描述逻辑的基础知识(支持OWL本体的逻辑),您可以参考A description logic Primer (2012), Horrocks et al.和Foundations of Description Logics (2011), Rudolph。
我不是逻辑学家或DL专家,所以请验证我提供的所有信息并随时纠正我:)