Negotiating eBusiness Contracts Across Rule Platforms

From Wiki

Jump to: navigation, search
Rule: If an item is perishable and it is delivered more than 10 days after the scheduled delivery date then the item will be rejected
Presentation Syntax
?i#<j:Item>[(<j:isRejected>->"true"^^xs:boolean) :-
        And(
          ?i#<j:Item>[(<j:isPerishable>->"true"^^xs:boolean)                             
                      (<j:actualDeliveryDate>->?actualDeliveryDate )                             
                      (<j:scheduledDeliveryDate> ->?scheduledDeliveryDate)
          ]
          External(<fn:subtract-dateTimes-yielding-dayTimeDuration>(?actualDeliveryDate ?scheduledDeliveryDate ?diffduration))
          External(<fn:get-days-from-dayTimeDuration>(?diffduration ?diffdays))
          External(<op:numeric-greater-than>(?diffdays "10"^^xs:int))
        )
XML Syntax
<Implies>
  <if>
   <And>
   <formula>
     <Member>
      <lower>
       <Var>i</Var>
      </lower>
      <upper>
       <Const type="rif:iri">j:Item</Const>
      </upper>
     </Member>
   </formula>   
   <formula>
   <Frame>
    <object>
    <Var>i</Var>
    </object>
    <slot>
     <Prop>
      <key><Const type="">j:isPerishable</Const></key>
      <val><Const type="xs:boolean">true</Const></val>
     </Prop>
    </slot>
    <slot>
     <Prop>
      <key><Const type="j:actualDeliveryDate"></Const></key>
      <val><Var>actualDeliveryDate</Var></val>
     </Prop>
    </slot>
    <slot>
     <Prop>
      <key><Const type="rif:iri">j:scheduledDeliveryDate</Const></key>
      <val><Var>scheduledDeliveryDate</Var></val>
     </Prop>
    </slot>
   </Frame>
   </formula>
   <formula>
   <External>
    <content>
     <Atom>
      <op><Const type="rif:iri">fn:subtract-dateTimes-yielding-dayTimeDuration</Const></op>
      <arg><Var>actualDeliveryDate</Var></arg>
      <arg><Var>scheduledDeliveryDate</Var></arg>
      <arg><Var>diffduration</Var></arg>
     </Atom>
    </content>
   </External>
   </formula>
   <formula>
    <External>
     <content>
      <Atom>
       <op><Const type="rif:iri">fn:get-days-from-dayTimeDuration</Const></op>
       <arg><Var>diffduration</Var></arg>
       <arg><Var>diffdays</Var></arg>
      </Atom>
     </content>
    </External>
   </formula>
   <formula>
    <External>
     <content>
      <Atom>
       <op><Const type="rif:iri">op:numeric-greater-than</Const></op>
       <arg><Var>diffdays</Var></arg>
       <arg><Const type="xs:integer">10</Const></arg>
      </Atom>
     </content>
    </External>
   </formula>
   </And>
  </if>
  <then>
   <Frame>
    <object><Var>i</Var></object>
    <slot>
     <Prop>
      <key><Const type="rif:iri">j:isRejected</Const></key>
      <val><Const type="xs:boolean">true</Const></val>
     </Prop>
    </slot>
   </Frame>
  </then>
 </Implies>

See also: rif:UCR#Negotiating_eBusiness_Contracts_Across_Rule_Platforms

Personal tools