首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >规则引擎验证

规则引擎验证
EN

Stack Overflow用户
提问于 2010-09-28 19:59:49
回答 2查看 2.6K关注 0票数 0

我们处理基于文本的消息(不使用XML)。我们的目标是验证消息,如果内容正确,则消息是有效的。我们开发了用XML定义的自己的语言来表达消息的规则。我们需要添加更复杂的规则,我们认为现在是时候考虑其他选择,使用真正的规则引擎了。我们支持这类规则:

  • 在值列表或正则表达式ex {SMITH,MOORE,A*}中的名称
  • 名字出现在信息中-
  • 名称不在消息中。
  • 如果条件,那么name = John = Jane注意到条件很简单,不包含任何逻辑运算符。

我们需要支持这些类型的规则:

  • 如果是,则条件包含逻辑运算符。
  • 为了..。循环:
    • 对于信息中的所有客户,我们希望至少有一个来自美国,至少一个来自法国。
    • 对于信息中的所有客户,我们希望至少有五位来自美国,并且每年购买1000美元以上
    • 对于任何一个名叫John的客户,姓必须是Doe。

  • 名为John < 15的客户总数
  • 公司名称等于消息中另一个位置上的公司名称。

规则将取决于我们处理的消息类型。因此,我们正在调查几种现有的解决方案,例如:

  • 杰斯
  • OWL (一致性检查)
  • Schematron (通过在XML中转换消息)

考虑到我们用Java开发的最好的替代方案是什么?另一件需要考虑的事情是,我们应该能够进行错误报告,比如错误描述、错误位置(行号和列号)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-09-29 00:03:48

在我看来,你已经走上了正确的道路;我的建议是:

  1. 使用解析器/解释器直接检查基于文本的消息,并对生成的对象应用规则。@Kdeveloper建议使用JavaCC来生成解析器/解释器,我可以亲自为ANTLRv3提供担保,这是在Java (以及其他语言)中生成解析器/解释器/转换器的极好环境。在那里,您可以使用Jess或其他Java规则引擎来验证您生成的对象。您也可以尝试将规则直接编码到解析器/解释器中,但我建议您不要这样做,而是选择将规则分离开来,以使解析和语义验证步骤保持分离。
  2. 将基于文本的消息转换为XML以应用Schematron也是另一个可行的选择,但您显然需要解析文本消息才能将它们转换为XML。为此,我仍然建议查看JavaCC或ANTLRv3,并可能填充可以封送到XML的预先确定的对象模型(例如卡斯特JAXB可以从W3C生成的对象模型)。在那里,您可以对结果XML应用Schematron。
  3. 我认为把你的建议转化为猫头鹰是最棘手的选择,但可能是最有力的选择。首先,您可能需要一个本体术语(TBox) (类、属性等)。将您的实例数据(ABox)映射到。从这里开始,一致性检查只会让您了解到;您所描述的想要捕获的许多约束都不能用OWL表示,也不能单独使用DL-reasoner进行验证。但是,如果将OWL本体与SWRL规则相结合(例如),您就有可能捕获您概述的大部分规则类型。看看规则和内置的SWRL的类型,看看这是否足以表达。如果是这样的话,您可以在SWRL支持(如球团HermiT )的情况下使用DL-原因。注意,OWL/SWRL推理器的单个实现(比如这些实现)可能或多或少地实现了W3C规范,因此您需要检查每个实现以确定它们的适用性。
票数 1
EN

Stack Overflow用户

发布于 2010-09-28 21:42:57

如果您的规则是静态的(即编译时已知的),您可以使用众所周知的JavaCC解析器生成器来实现这一点。

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

https://stackoverflow.com/questions/3816568

复制
相关文章

相似问题

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