xquery version "1.0"; declare namespace session="http://exist-db.org/xquery/session"; declare namespace request="http://exist-db.org/xquery/request"; declare namespace util="http://exist-db.org/xquery/util"; declare namespace i18n="http://apache.org/cocoon/i18n/2.1"; declare option exist:serialize "expand-xincludes=no"; import module namespace ristenutil="http://www.risten.no/shared/util" at "../xquery/ristenutil.xqm"; (: Create filter expression from query term :) declare function local:filter-expr($term as xs:string) as xs:string { let $f := "label", $t := concat("'", $term, "'") return concat(".//", $f, " &= ", $t) }; (: Assemble the query string :) declare function local:build-query($term as xs:string) as xs:string { let $expr := local:filter-expr($term), $coll := ristenutil:get-collection() return if ( string-length($term) = 0 ) then concat("for $r in collection('", $coll, "')/classification return $r") else concat("for $r in collection('", $coll, "')/classification[", $expr, "] return $r") }; (: Present an overview of query results :) declare function local:displayHitlist($hits as node()+) as element() { let $lang := request:get-parameter("showlang", "all"), $showclass := request:get-parameter("class", "all"), $collID := session:get-attribute("collection"), $termcoll := ristenutil:get-termcolls-from-class( $collID ), $classlangs := ristenutil:get-class-langs( $collID ) return { $classlangs, $hits } }; (: Main function - retrieves some request and session attributes, forks further processing to other defined functions depending on the retrieved values :) declare function local:main() as element()+ { let $term := request:get-parameter("term", "") return let $query := local:build-query($term), $hits := util:eval( $query ) return if (empty($hits)) then let $query := local:build-query(""), $hits := util:eval( $query ) return (

NoHit «{$term}» !
Query: «{$query}» !

) else ( local:displayHitlist($hits) ) };