base # creating the nodes that has origin of suspicious party [?chain, a, type:PartialChain], [?chain, prop:hasOriginator, ?originator], [?chain, prop:hasBeneficiary, ?beneficiary], [?chain, prop:hasStartingAmount, ?amount], [?chain, prop:hasFinalAmount, ?amount], [?chain, prop:hasLength, 1], [?chain, prop:hasEndDate, ?transactionDate], [?chain, prop:containsTransaction, ?transaction] :- [?transaction, a, type:Transaction], [?transaction, prop:hasOriginator, ?originator], [?transaction, prop:hasBeneficiary, ?beneficiary], [?transaction, prop:hasAmount, ?amount], [?transaction, prop:hasDate, ?transactionDate], [?originator, prop:isSuspicious, true], BIND(IRI(MD5(CONCAT("PartialChain", STR(?transaction)))) as ?chain) . # create nodes that represent the partial chains [?chain, a, type:PartialChain], [?chain, prop:hasOriginator, ?oldChainOriginator], [?chain, prop:hasBeneficiary, ?transactionBeneficiary], [?chain, prop:derivedFrom, ?oldChain], [?chain, prop:hasLength, ?newLength], [?chain, prop:containsTransaction, ?transaction] :- [?oldChain, a, type:PartialChain], [?oldChain, prop:hasOriginator, ?oldChainOriginator], [?oldChain, prop:hasBeneficiary, ?oldChainBeneficiary], [?oldChain, prop:hasEndDate, ?oldChainDate], [?oldChain, prop:hasLength, ?oldLength], [?transaction, a, type:Transaction], [?transaction, prop:hasOriginator, ?oldChainBeneficiary], [?transaction, prop:hasBeneficiary, ?transactionBeneficiary], [?transaction, prop:hasDate, ?transactionDate], FILTER(?oldChainDate