Рисунок 6

Рис. 6: Вычисление счета для каждого заказа: с помощью XQuery, расширенного поддержкой XLink, (вверху) и с помощью Scheme (внизу).

 

for $order in document("purchase-orders.xml")//order
return <bill>
         <total-price>{ fn:sum( for $entry in $order/entry
                                return item/traverse::*/price * quantity )
         }</total-price>
         {$order/customer/traverse::person/name}
       </bill>
 
(map
  (lambda (order)
    `(bill
      (total-price
       ,(apply + (map (sxpath/c "item/traverse::*/price * quantity")
                      ((sxpath/c "entry") order))))
      ,@((sxpath/c "customer/traverse::person/name") order)))
  ((sxpath/c "//order")
   (xlink:documents "purchase-orders.xml")))