一个Fact通过Session添加到规则网络中,如何进行规则匹配的大致过程如下

(1)通过根结点对象从EntryPointNode的Map集合中找到相应的EntryPointNode对象

(2)EntryPointNode对象有一个ObjectTypeNode的Map集合,把fact的class转化成ClassObjectType,从该集合中找到ObjectTypeNode

(3)OjectTypeNode对象的sink属性引用着这个fact事实的规则网络

(4)从sink属性中的链表中拿出一个alphaNode进行匹配,递归遍历所有alphaNode的子节点(sink属性),根据alphaNode中的条件对Fact数据进行比较。

  ==>(向下(子节点)是试图完整匹配一条规则),如果向下有不匹配的,表示该规则不符合当前fact,退出递归,开始向右匹配。

  ==>(向右(nextRightTupleSinkNode属性)开始试图匹配另一条规则)。

  ===>向下(当前AlphaNode子节点代表的规则的所有条件模式)匹配,如果所有的子节点alphaNode中隐藏的条件都符合,则完全匹配一条规则,形成议程加入冲突集合,待匹配完所有的规则,再根据规则的优先级执行匹配上的规则的结果部分,更改Fact的数据。

  ===>向右(进行另一个规则的匹配),如果所有的子节点alphaNode中隐藏的条件都符合,则完全匹配一条规则,形成议程加入冲突集合,待匹配完所有的规则,再根据规则的优先级执行匹配上的规则的结果部分,更改Fact的数据。

最新文章

  1. vue.js 接收url参数
  2. ASP.NET API(MVC) 对APP接口(Json格式)接收数据与返回数据的统一管理
  3. RDLC 设置标题每页显示
  4. JS绑定JavaScript事件
  5. [你必须知道的NOSQL系列]专题二:Redis快速入门
  6. mongodb备忘
  7. archlinux 安装mysql-workbench
  8. Eclipse提示Tomcat miss丢失bug:The Tomcat server configuration at \Servers\Tomcat v5.5 Server at localhost-config is missing.
  9. cocos2dx2.2.2登录场景中Checkbox选择框的实现
  10. Asp.net弹出层并且有遮罩层
  11. Codeforces Round #327 (Div. 2) E. Three States
  12. nginx---reference
  13. USACO月赛数据
  14. .NET 4 并行(多核)编程系列之三 从Task的取消
  15. Python中fileinput模块使用
  16. python之字符串
  17. php下redis的安装教程
  18. Java | 原来 try 还可以这样用啊?!
  19. 用Laravel Sms实现 laravel短信验证码的发送
  20. Java 11新功能抢先了解

热门文章

  1. Safari通过JavaScript获取系统语言
  2. win32调试——OutputDebugString
  3. 用js来实现那些数据结构 第二章
  4. React routerV4 笔记
  5. ETL应用:一种处理接口的Pro*C实现方法
  6. 【leetcode刷题笔记】Minimum Window Substring
  7. Java智能图表类库JChartLib使用介绍
  8. Qt浅谈之二十六图片滑动效果
  9. request模块 一基础部分
  10. 基于Visual c++ 2012的php扩展开发 - 环境搭建