import module namespace qs = "http://www.demaq.net/dql"; declare default errorqueue outgoingMessages; declare namespace soap = "http://schemas.xmlsoap.org/soap/envelope/"; declare default element namespace "http://xmlns.demaq.net/onlineshop"; create queue incomingMessages kind incoming interface "http" port "2342" response outgoingMessages mode persistent; create queue customerMasterData kind basic mode persistent; create queue bookCart kind basic mode persistent; create queue musicCart kind basic mode persistent; create property customerID queue customerMasterData fixed value //customer/ID/text(); create property transactionID queue bookCart fixed value //transactionID/text() queue musicCart fixed value //transactionID/text(); create property bookTransactionID queue bookCart fixed value //transactionID/text(); create property musicTransactionID queue musicCart fixed value //transactionID/text(); create slicing masterDataForCustomer on customerID require false(); create slicing cartItemsForCustomer on transactionID require false(); create slicing bookCartItemsForCustomer on bookTransactionID require false(); create slicing musicCartItemsForCustomer on musicTransactionID require false(); (: START RULE registerNewCustomer :) create rule registerNewCustomer for incomingMessages if(//registerNewCustomer) then( enqueue message . into customerMasterData, enqueue message Inserted customer masterdata into outgoingMessages ) else (); (: END RULE registerNewCustomer :) (: START RULE addItemToCart :) create rule addItemToCart for incomingMessages if(//addItem) then if(//addItem/book) then (enqueue message . into bookCart, enqueue message Added item to bookCart into outgoingMessages) else (enqueue message . into musicCart , enqueue message Added item to musicCart into outgoingMessages) else (); (: END RULE addItemToCart :) (: START RULE updateMasterData :) create rule updateMasterData for incomingMessages if(//updateCustomerData) then ( enqueue message . into customerMasterData, enqueue message Changed master data into outgoingMessages ) else(); (: END RULE updateMasterData :) (: START RULE cartContent :) create rule cartContent for incomingMessages let $request := //requestCartContent return if($request) then let $relevantMessages := if($request/books) then qs:slice($request/transactionID/text(), "bookCartItemsForCustomer") else if($request/music) then qs:slice($request/transactionID/text(), "musicCartItemsForCustomer") else qs:slice($request/transactionID/text(), "cartItemsForCustomer") let $resultDocument := {sum($relevantMessages//price)} return enqueue message $resultDocument into outgoingMessages else(); (: END RULE cartContent :) (: START RULE handleCheckout :) create rule handleCheckout for incomingMessages let $request := //checkout return if($request) then let $transactionID := $request/transactionID/text() let $customerID := $request/customerID/text() let $customerMasterData := qs:slice($customerID, "masterDataForCustomer")[position() = last()] let $customerOrders := qs:slice($transactionID, "cartItemsForCustomer") let $result := {$customerOrders//item}{$customerMasterData//address} return enqueue message $result into outgoingMessages else(); (: END RULE handleCheckout :)