gpt4 book ai didi

java - 使用规则引擎进行验证

转载 作者:行者123 更新时间:2023-12-01 16:01:17 25 4
gpt4 key购买 nike

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

  • 值列表或常规名称中的名称表达式 ex {SMITH, MOORE, A*}
  • 姓名出现在消息中 -
  • 消息中没有姓名
  • if 条件 then name = John else name = Jane请注意,条件很简单,不包含任何逻辑运算符。

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

  • if then else 但条件包含逻辑运算符
  • for ... 循环:
    • 对于消息中的所有客户,我们希望至少有一位来自美国,至少一位来自法国
    • 对于消息中的所有客户,我们希望至少有五个来自美国且每年购买超过 1000 美元的客户
    • 对于任何名为 John 的客户,姓氏必须为 Doe
  • 名为 John 的客户总数 < 15
  • 公司名称与消息中其他位置的公司名称相同

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

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

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

最佳答案

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

  1. 使用解析器/解释器直接检查基于文本的消息,并对生成的对象应用规则。 @Kdeveloper 建议JavaCC用于生成解析器/解释器,我可以通过个人担保 ANTLRv3 来添加此内容这是用 Java(以及其他语言)生成解析器/解释器/转换器的绝佳环境。从那里,您可以使用 Jess 或其他一些 Java 规则引擎来验证您生成的对象。您也可以尝试直接将规则编码到解析器/解释器中,但我建议不要这样做,而是选择将规则分开,以将解析和语义验证步骤分开。
  2. 将基于文本的消息转换为 XML 以应用 Schematron 也是另一个可行的选择,但显然您无论如何都需要解析文本消息以将其转换为 XML。为此,我仍然建议查看 JavaCC 或 ANTLRv3,也许填充一个可以编码到 XML 的预先确定的对象模型(例如可以由 CastorJAXBW3C XML Schema 生成的对象模型)。 )。从那里,您可以对生成的 XML 应用 Schematron。
  3. 我认为转换为 OWL 是您建议中最棘手的选择,但可能是最强大的。首先,您可能需要一个 ontology terminology (TBox) (类、属性等)。映射您的instance data (ABox)进入。从那时起,一致性检查只能让你走到这一步。您概述的想要捕获的许多类型的约束根本无法用 OWL 表示,也无法单独使用 DL 推理器进行验证。但是,如果您将 OWL 本体与 SWRL 结合起来。规则(例如),您就有机会捕获您所概述的大部分规则类型。查看规则类型和built-ins available in SWRL看看这对你来说是否足够表达。如果是,您可以使用具有 SWRL 支持的 DL-Reasoners,例如 PelletHermiT 。请注意,诸如此类的 OWL/SWRL 推理器的单独实现可能会或多或少地实现W3C specification。 ,因此您需要检查每一个以确定它们的适用性。

关于java - 使用规则引擎进行验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3816568/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com