zoukankan      html  css  js  c++  java
  • RuleML入门(下)

    使用Datalog RuleML正向推理

    1. 鉴于Peter Miller之前消费的事实,
    2. 匹配规则<if>;
    3. 将<Ind>Peter Miller</Ind >绑定到<Var>顾客</Var>变量上;
    4. 使用相同的变量再绑定到规则<then>上,进行处理
    <Atom>
      <Ind>Peter Miller</Ind>
      <op><Rel>是优质的</Rel></op>
    </Atom>

    在这个推导的例子中,规则和事实,将一起使用:

    规则<If>匹配事实,将"<Ind>Peter Miller</Ind >"绑定到"<Var>顾客</Var>"变量上;

    使用相同的变量再绑定到规则<then>上,一个新的<Atom>推导出"<Ind>Peter Miller</Ind>"是一个"<Rel>是优质的</ Rel>"顾客。

    Datalog Rule联结

    一位顾客购买产品时享受了7.5%的折扣,如果顾客是优质的,则该产品是奢侈品。

    ...

    <if>

    <And>

    <Atom>

    <Var>顾客</Var>

    <Rel>是优质的</Rel>

    </Atom>

    <Atom>

    <Var>产品</Var>

    <Rel>是奢侈品</Rel>

    </Atom>

    </And>

    </if>

    </Implies>

    除了使用单一的Atom公式中的<If>线条,一个Datalog RuleML规则也可以使用整个联结的Atom。这将允许复杂的条件通过'联结'包含各种变量。

    产品分类事实

    上面一章提到引入了产品,那么接下来我们将细化产品的规则

    <Atom>

      <Ind>Porsche</Ind>

      <Rel>is luxury</Rel>

    </Atom>

    "A Porsche is a luxury product."

    "保时捷是一种奢侈品"

    虽然"<Rel>是优质的</ Rel>"是我们定义的第一条规则,接下来我们将定义"<Rel>是奢侈品</ Rel>":

    "保时捷是一种奢侈品"

    同样,这自然语言的语句也是可以用XML表示,同时可以看作成一个OrdLab Tree

    反向推理Backward Chaining Derivation

    1. 目标:"Peter Miller买保时捷能拿到什么样的折扣?"
    2. 折扣规则的结果=目标绑定如下参数
      1. 顾客:Peter Miller
      2. 产品:保时捷
      3. 折扣:7.5%

    这个新的规则和事实可以结合我们前面的例子变成一个链式推导,如下:

    第一步,关系"<Rel>折扣</Rel>"的规则匹配到<if>连接到"<Rel>是优质的</Rel>"规则,接下来如前面所述,绑定"<Ind>Peter Miller</Ind>"至变量"<Var>顾客</Var>"。

    第二步,仅匹配到"<Rel>是奢侈品</Rel>"事实,绑定"<Ind>保时捷</Ind>"至变量"<Var>产品</Var>"。

    1. 如果下面两个目标达成,则总目标达成
      1. 子目标:"Peter Miller是优质的客户"
      2. 子目标:"保时捷是一种奢侈品"
    2. 两个子目标都达成
      1. "Peter Miller是优质的客户"通过推演
      2. "保时捷是一种奢侈品"通过事实

    所以,"<Rel>折扣</Rel>"规则达成,也证明了接下来的Atom…

    反向推理结果

    Peter Miller gets a discount of 7.5 percent on the purchase of a Porsche.

    Peter Miller买保时捷时享受了7.5%的折扣。

    <Atom>

      <Ind>Peter Miller</Ind>

      <Rel>享受…折扣,在买…的时候</Rel>(这就是一个二元关系)

      <Ind>7.5%</Ind>

      <Ind>保时捷</Ind>

    </Atom>

    这个推导出的Atom标记可以被存储以供进一步处理:

    同样,这段XML也可以被看作是一个OrdLab Tree。

    请注意,第一条规则我们是自下而上(正向推理)的方式进行解释,而在第二条规则是自上而下(反向推理)的方式解释。其实,每个规则都可以在两种方式下使用;默认情况下,RuleML是中性的,与方向无关。

    RuleML hornlog (Horn Logic with Functional Expressions)

    <Atom>
      <Ind>Peter Miller</Ind>
      <Rel>享受…折扣/在买…的时候</Rel>
      <Expr>
        <Fun>%</Fun>
        <Data xsi:type="xs:decimal">7.5</Data>
      </Expr>
      <Ind>保时捷</Ind>
    </Atom>

    RuleML使用Datalog作为它的子语言家族的一部分。更神奇的子语言是RuleML hornlog(Horn logic),其中包括带有元素<Expr>和<Fun>的功能。

    RuleML1.0的XML语法由XML schemasRELAX NG schemas所定义。POSL可在线转换为RuleML/ XML。Datalog RuleML和Hornlog RuleML的语义采用Herbrand模型。Datalog和Hornlog RuleML实现是已经存在的,包括(NAF Hornlog)RuleML参考了OO jDREW的实现。

    RuleML查询与变量(all non-ground sublanguages)

    <Rulebase>
      <Query>
        <Atom>
          <Ind>Peter Miller</Ind>
          <Rel>享受…折扣/在买…的时候</Rel>
          <Var>x</Var>
          <Var>y</Var>
        </Atom>
      </Query>
    </Rulebase>

    </Query>:用来包装查询内容(可选:使用<formula>标记在外面),标记在"implicit <Rulebase>"内。这样就使得说明性内容与执行程序相分离(比如使用KQML驱动,他也有类似"ask"的执行)。

    <Query>
      <Atom>
        <Ind>Peter Miller</Ind>
        <Rel>享受…折扣/在买…的时候</Rel>
        <repo><Var>x</Var></repo>
      </Atom>
    </Query>

     

    <Plex>
      <Ind>7.5%</Ind>
      <Ind>保时捷 </Ind>
    </Plex>

    <repo>:在<Atom>, <Expr>和<Plex>标签中需要重置变量,使用该标签。需要注意的是,<Plex>是预先生成的,所以<repo>是在Datalog中唯一可以使用的标签。

    RuleML Slots

    <Atom>
      <oid><Ind>Peter Miller</Ind></oid>
      <Rel>is a Customer</Rel>
      <slot>
        <Ind>who has a Status of</Ind>
        <Ind>premium</Ind>
      </slot>
      <resl>
        <Var>x</Var>
      </resl>
    </Atom>

    </slot>:一个用户定义的扩展槽,包括名称(第一个Ind)和过滤条件(第二个Ind)。

    <resl>:在<Atom>, <Expr>和<Plex>标签中需要重置slot的变量,使用该标签。<Plex>是预先生成的,所以<resl>是在Datalog中唯一可以使用的标签。

    执行,否定,量词和相等比较

    <Assert>
      <Neg>
        <Exists>
          <Var>x</Var>
          <Forall>
            <Var>y</Var>
            <Equal>
              <Var>x</Var>
              <Var>y</Var>
            </Equal>
          </Forall>
        </Exists>
      </Neg>
    </Assert>

     

    RuleML这个官方的入门教程,大致介绍了规则的定义以及使用方法,但是感觉很多东西没有说清楚,当然也有很多东西我也没能理解,之后我将准备看看该标准中具体提供的内容,做一个真实的例子来体验。

  • 相关阅读:
    Laravel学习之旅(一)
    telnet模拟邮件发送
    学习CodeIgniter框架之旅(二)继承自定义类
    学习CodeIgniter框架之旅(一)自定义模板目录
    MySQL主从复制实现
    coreseek增量索引
    锁(MySQL篇)—之MyISAM表锁

    php文件锁
    进程与线程
  • 原文地址:https://www.cnblogs.com/elvisqi/p/3536974.html
Copyright © 2011-2022 走看看