{-------------------------------------------------------------- - - A main program to test the XQuery processor - Programmer: Leonidas Fegaras (fegaras@cse.uta.edu) - Date: 07/24/2008 - ---------------------------------------------------------------} {-# LANGUAGE TemplateHaskell #-} module Main where import Text.XML.HXQ.XQuery f(d,s) = $(xq "{$s//firstname/text(),$s//lastname/text()}") main = do a <- $(xq " for $s in doc('data/cs.xml')//gradstudent \ \ order by $s/gpa descending, $s//lastname \ \ return {$s//firstname/text(), \ \ $s//lastname/text(), \ \ $s/gpa/text()} ") putXSeq a let query name = $(xq " doc('data/cs.xml')//gradstudent[.//lastname = $name]//firstname ") b <- query $(xe " 'Galanis' ") putXSeq b c <- $(xq " { \ \ let $d := doc('data/cs.xml') \ \ for $s in $d//gradstudent \ \ where $s/gpa = 4.0 \ \ return f($d//deptname,$s) \ \ } ") putXSeq c d <- $(xq " let $d := doc('data/cs.xml')//gradstudent \ \ return ($d/../deptname,count($d)) ") putXSeq d putStrLn "Type an XQuery:" iquery <- getLine -- read an XQuery from input e <- xquery iquery -- evaluate it using the XQuery interpreter putXSeq e