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"; (: Assemble the query string :) declare function local:save-entry( $id as xs:string, $lang as xs:string) as xs:string { let $coll := ristenutil:get-collection(), $label:= request:get-parameter("label", "") return ( update value collection($coll)//label[../@id eq $id][@xml:lang eq $lang] with $label, "true") }; (: Assemble the query string :) declare function local:build-query($id as xs:string, $lang as xs:string) as xs:string { let $coll := ristenutil:get-collection() return concat("for $r in collection('", $coll, "')//label[../@id eq '", $id, "'][@xml:lang eq '", $lang, "'] return $r") }; (: Present an overview of query results :) declare function local:displayHitlist($hits as node()+, $classID as xs:string) as element() { let $lang := request:get-parameter("showlang", "all"), $collID:= session:get-attribute("collection"), $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 $class := request:get-parameter("class", ""), $lang := request:get-parameter("lang", "") return let $save := local:save-entry( $class, $lang), $query := local:build-query($class, $lang), $hits := util:eval( $query ) return if (empty($hits)) then (

NoHit «{$class}» / «{$lang}»!

,

{$query}

) else ( (: DEBUG only - output some extra info :) (:

Your session attributes: {$session}
Your request attributes: {$request}
Your old/short search query: {$queryOld}
Your complete search query:
{$query}

,

UrSrchTrm: «{$class}», «{$lang}»

,

{$query}

, :) local:displayHitlist($hits, $class) ) };