我们处理基于文本的消息(非 XML)。我们的目标是验证消息,如果内容正确,则消息有效。我们开发了我们自己的用 XML 定义的语言来表达消息的规则。我们需要添加更复杂的规则,我们认为现在是时候寻找其他替代方案并使用真正的规则引擎了。我们支持以下类型的规则:
- 值列表或正则表达式中的名称,例如 {SMITH, MOORE, A*}
- 消息中存在名称-
- 消息中不存在名称
- if condition then name = John else name = Jane 请注意,条件很简单,不包含任何逻辑运算符。
我们需要支持这些类型的规则:
- if then else 但条件包含逻辑运算符
- for ...循环:
- 对于消息中的所有客户,我们希望至少一位来自美国,至少一位来自法国
- 对于消息中的所有客户,我们希望至少有五个来自美国并且每年购买超过 1000 美元
- 对于姓名为 John 的任何客户,姓氏必须是 Doe
- 姓名为 John < 15 的客户总数
- 公司名称等于消息中其他位置的公司名称
规则将取决于我们处理的消息类型。因此,我们正在研究几种现有的解决方案,例如:
- 杰斯
- OWL(一致性检查)
- Schematron(通过在 XML 中转换消息)
考虑到我们用 Java 开发,最好的选择是什么?要考虑的另一件事是我们应该能够进行错误报告,如错误描述、错误位置(行号和列号)。