问题标签 [rules]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
import - Drools 规则使用通配符导入
我正在使用 Drools 规则。一些开发人员创建了规则,我必须将它们放在 Guvnor(规则存储库)上并构建包。在这些规则中,它们具有带通配符的导入语句,例如:import org.drools.runtime.rule.*;
当我将它上传到 Guvnor 并尝试构建时,它告诉我:无法自省模型以进行通配符导入 (org.drools.runtime.rule.*)。请明确导入您需要的每种事实类型。
是否可以在 Drools 规则中使用通配符导入???
spring - ETL、Esper 还是 Drools?
题环境涉及JavaEE、Spring
我正在开发一个可以为传入消息启动和停止任意 TCP(或其他)侦听器的系统。可能需要对这些消息进行身份验证。这些消息需要解析并存储在其他一些实体中。这些实体对它们存储的字段进行建模。
因此,例如,如果我的 property1 可以有两个文本字段 FillLevel1 和 FillLevel2,我可以在 TCP 上接收消息,其中两个填充级别在文本中指定为 F1=100;F2=90
稍后当我开始接收消息 F1=xx;F2=xx;F3=xx 时,我可以添加另一个字段,例如 FillLevel3。但这是系统建模者有意识的决定。
我的问题是您认为什么更好用于解析和存储消息。ETL(使用 Pantaho,在其他系统中使用)在其中存储原始消息并使用任务执行器一一使用它们并根据您的规则存储转换后的消息。
可以使用 Espr 或 Drools 来做同样的事情,存储规则并使用计时器执行它们,但我不确定通过制定规则可以获得多大的动态(它们必须由最终用户在正在运行的系统中制定,最好是在大多数情况下)用户友好的方式,即没有脚本或代码,只有 GUI)
最终用户应该能够更改解析规则。最终用户也可能希望更改存档数据(例如,在上面的示例中,如果添加了新的 FillLevel 值,则希望将 FillLevel=-99 放在以前的值中以生成数据持续的)。
请大家多多指教,我感觉这个问题需要稍微修改一下。
谢谢
postgresql - PostgreSQL中可以修改DELETE的返回值吗
我试图阻止用户不可撤销地删除 Confluence wiki 中的空间。我的第一个快速想法是将spaces
表重命名为allspaces
,添加一个新列deleted
,并创建一个视图spaces
来代替旧表。该视图将仅返回未删除的空格。我创建了三个规则来允许spaces
视图上的 INSERT、UPDATE 和 DELETE。DELETE 规则只是更改deleted
字段,从而将其从视图中删除,但所有数据仍保留在数据库中。
现在的问题是从 PostgreSQLspaces
返回时的 DELETE 语句。DELETE 0
这会导致 Hibernate 跳出并抛出异常,Confluence 崩溃了。
无论如何要让 PostgreSQL 返回行被修改,而不是在 INSTEAD 规则上删除行。
random - 以未知格式对捕获的数据进行分类?
我有大量捕获的数据(可能有数十万条记录),我需要能够对其进行分解,这样我既可以对其进行分类,也可以自己生成“典型”数据。让我进一步解释...
如果我有以下数据字符串:
您可能会开始推断以下内容:
- 可能所有字符串都是 14 个字符长
- 第 4、8、10 和 14 个字符可能始终是字母,而其余字符是数字
- 第一个字符可能始终是“1”
- 第 4 个字符可能总是字母 'T'
- 第 14 个字符可能仅限为“S”或“T”
- 等等...
随着您获得越来越多的真实数据样本,其中一些“规则”可能会消失;如果您看到一个 15 个字符长的字符串,那么您就有证据表明第一条“规则”不正确。但是,给定足够大的字符串样本,长度正好是 14 个字符,您可以开始假设“所有字符串都是 14 个字符长”,并为您的置信度分配一个数字(围绕事实进行适当的假设您正在看到一组适当随机的所有可能捕获的数据)。
正如您可能知道的那样,人类可以通过肉眼进行很多此类分类,但我不知道允许计算机进行分类的库或算法。
给定一组捕获的数据(比上面的要复杂得多......),我可以在我的代码中应用哪些库来为我进行这种分类,从而以给定的置信度识别“规则”?
作为下一步,我需要能够采用这些规则,并使用它们来创建符合这些规则的我自己的数据。我认为这比分类要容易得多,但我以前从未执行过这样的任务,所以我真的不确定它有多复杂。
猜测一下,Python 或 Java(或者可能是 Perl 或 R)可能是最有可能拥有这类库的“通用”语言,而且也许一些生物信息库会做这类事情。我真的不在乎我必须使用哪种语言。我需要尽我所能解决问题。
任何指向信息的指针都会非常有用。正如您可能知道的那样,我正在努力清楚地描述这个问题,并且可能有一组合适的关键字我可以插入谷歌,这将指向我的解决方案。
java - 推理引擎根据内部规则计算匹配集
我有一组具有属性的对象和一堆规则,当应用于这组对象时,这些规则提供了这些对象的子集。为了让这更容易理解,我将提供一个具体的例子。
我的对象是人,每个人都有三个属性:原籍国、性别和年龄组(所有属性都是离散的)。我有一堆规则,比如“所有来自美国的男性”,它们与这个更大对象集的子集相对应。
我正在寻找一个现有的 Java“推理引擎”或类似的东西,它能够从规则映射到一个人的子集,或者关于如何创建我自己的建议。我已经阅读了规则引擎,但该术语似乎专门用于将业务规则外部化的专家系统,并且通常不包括任何高级形式的推理。以下是我必须处理的更复杂场景的一些示例:
我需要规则的结合。因此,当同时出现“包括所有男性”和“排除 10 至 20 岁年龄段的所有美国人”时,我只对美国以外的男性以及美国境内 10 至 20 岁以下的男性感兴趣。 20岁年龄段。
规则可能有不同的优先级(明确定义)。因此,“排除所有男性”的规则将覆盖“包括所有美国男性”的规则。
规则可能有冲突。因此,我可以同时设置“包括所有男性”和“排除所有男性”,在这种情况下,必须优先解决问题。
规则是对称的。所以“包括所有男性”相当于“排除所有女性”。
规则(或更确切地说是子集)可能具有与之关联的元规则(明确定义)。在应用原始规则或通过推理达到子集的任何情况下,都必须应用这些元规则。因此,如果“排除美国”的元规则附加到“包括所有男性”规则,并且我为引擎提供“排除所有女性”规则,它应该能够推断出“排除所有女性”子集相当于“包括所有男性”子集,因此另外应用“排除美国”规则。
如果没有第 5 项,我很可能可以生活,但我确实需要提到的所有其他属性。我的规则和对象都存储在数据库中,并且可以在任何阶段更新,因此我需要在需要时实例化“推理引擎”并在之后销毁它。
design-patterns - 翻译/规则模式
我有一些代码可以将一个域对象转换为第二个域对象。第二个对象中的一个字段值通过一个包含大量“If then else”和返回语句(100 行代码)的长函数进行转换。可以说,第一个对象中的几个字段用于确定第二个域对象中 1 个字段的值。
现在的问题是,是否有一种模式可以使它更具可读性?……也许为利益相关者提取这些规则?
makefile - Make 中的默认规则
make 中是否有一种机制允许在任何地方都可用的默认全局隐式规则,类似于内置规则?
Make 为编译 C/C++/Fortran 文件提供了一些内置的隐式规则,Makefile
对于简单的情况甚至不需要 a。但是,在编译其他语言(例如 Go 编程语言文件)时,Makefile
始终需要 a。我想扩展我的 Makeenvironment 以默认提供隐式规则。
parsing - 如何检查 ANTLR 令牌在解析器中仅使用一次或更少
在 Antlr 中,如果我有一个规则,例如:
它会接受:“tokena tokenb”
如果我希望 TOKENA 是可选的,我可以说,
那么我可以拥有:“tokena tokenb”或“tokenb”或“tokena tokena tokenb”
但这也意味着它可以重复多次。无论如何我可以说这个令牌可以出现1次或更少但不超过一次?所以它会接受:
“tokena tokenb”或“tokenb”但不是“tokena tokena tokenb”?
非常感谢
postgresql - 如何使用分区表插入和选择数据?
我根据http://www.postgresql.org/docs/8.1/interactive/ddl-partitioning.html上的文档设置了一组分区表
据我了解,如果我 INSERT INTO t (year, a) VALUES (1980, 5),它将转到 t_1980,如果我 INSERT INTO t (year, a) VALUES (1981, 3),它将转到 t_1981 . 但是,我的理解似乎是不正确的。首先,我无法从文档中理解以下内容
“目前没有简单的方法来指定行不能插入到主表中。主表上的 CHECK (false) 约束将被所有子表继承,因此不能用于此目的。一种可能性是在总是引发错误的主表上设置 ON INSERT 触发器。(或者,可以使用这样的触发器将数据重定向到正确的子表,而不是使用上面建议的一组规则。)“
以上是否意味着尽管设置了 CHECK 约束和 RULE,我还必须在主表上创建 TRIGGER,以便 INSERT 进入正确的表?如果是这种情况,那么数据库支持分区的意义何在?我可以自己设置单独的表格吗?我在主表中插入了一堆值,这些行仍然在主表中,而不是在继承表中。
第二个问题。检索行时,我是从主表中选择,还是必须根据需要从各个表中选择?以下如何工作?
更新:好像我已经找到了我自己问题的答案
“请注意,COPY 命令会忽略规则。如果您使用 COPY 插入数据,则必须将数据复制到正确的子表中,而不是复制到父表中。COPY 会触发触发器,因此如果您创建分区,则可以正常使用它使用触发器方法的表。”
我确实使用 COPY FROM 来加载数据,因此忽略了规则。将尝试使用触发器。
package - 我需要我的 Debian 规则文件来简单地将文件复制到它的目标
我有一个大项目,我们有以下文件:
- 一些第 3 方预编译的二进制文件
- 我们自己的内部二进制文件
- Ruby 脚本集合
- 一个相当大的 Ruby on Rails 项目
该产品将安装在我的雇主已经选择的设备硬件上,使用 Ubuntu Linux (Lucid) 作为目标操作系统,我们的目标是将存档作为 Debian 软件包分发以简化安装和升级。此外,我们有许多 ERB 模板,我们需要在每个客户的基础上“填写”适当的值,因此postinst脚本的使用对于我们的目的来说特别方便。
附带说明一下,Debian 软件包将存储在我们内部管理的服务器存储库中。
在这个阶段,我已经使用dh_make创建了 Debian 目录和相关文件(例如,规则、控件等),但是生成的规则文件对于我的目的来说似乎是多余的。
根据这个描述,我真正需要“规则”文件做的只是将文件从源目录(或存档中)复制到如下所示的目标目录:
...等等。
我已经阅读了 Debian Policy Manual 和几个 How-To,它们表明您不应该更改mkdir
用于创建目录的规则文件,并且通常有一个dh_应用程序(例如 dh_installdirs 等)可以满足您的需求几乎任何安装目的。这些dh_相关应用程序的手册页充其量是粗略的,我是一个“示例”类型的人。
也就是说,我有点迷失了最好的方法是让我的规则文件将我的各种预编译二进制文件和 Ruby/Rails 文本文件安装到所需的位置。
这是我的初始规则文件。它几乎是 dh_make 创建的标准样板规则文件。我的想法是我应该注释掉除安装之外的所有部分,然后在该部分中找到适当的命令来创建目录、复制文件等。
非常感谢任何意见或建议。