{--------------------------------------------------------------
-
- 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