(: Helper functions :) declare function local:distinct(\$a) { \$a[index-of(\$a,.)[1]] }; (: Group 1 :) (: ** which building has the most courses? :) let \$list := ( let \$buildings := ( for \$courses in //course return \$courses//building) for \$building in distinct-values(\$buildings) return \$building) for \$b in \$list return {\$b}, {count(//building[text() eq \$b])} (:Group 2 :) (: ** which instructor in a building has the earliest courses :) let \$all = //courses let \$blist = distinct-values(//courses//building) for \$b1 in \$blist let \$timelist = (for \$b2 in \$all where \$b1 = \$b2//building let \$t = \$b2//time/start_time[matches(. , 'AM')] order by \$t return \$t) let \$instr = \$timelist[1]/ancestor::course/instructor return \$instr (: Group 5 :) (: * list all courses that start before 10am :) for \$c in //course where \$c//start_time < "10:00AM" and substring(\$c//start_time, 6, 2) = "AM" return {\$c} (: * name all instructors that teach at least three courses :) let \$i := local:distinct(//instructor) for \$t in \$i where count(//course[./instructor=\$t]) >= 3 return {\$t} (: Group 6 :) (: ** Which building has the most rooms? :) let \$total:=( for \$b in local:distinct(//building) let \$c := //place[./building = \$b] let \$count := count(\$c/room) return {\$b/text()} {\$count} ) let \$maxcount := max(\$total//count) return \$total[count = \$maxcount]/bl (: ** what courses are taught in a given room in a given building and when? ** (you can pick a room/building that s interesting). :) for \$cs in //course[.//building/text()='PHYSIC' and .//room/text()='134'] return {\$cs//title,\$cs//time}