xquery version "1.0"; declare namespace util="http://exist-db.org/xquery/util"; declare namespace i18n="http://apache.org/cocoon/i18n/2.1"; declare function local:get-doc($lang as xs:string) as xs:string { let $doc := concat('/db/ordbase/terms/SD-terms/terms-',$lang,'.xml') return $doc }; (: Save an edited entry, the grammar part common to all senses: :) declare function local:saveentry() as element() { let $id := request:request-parameter("id", ""), $lang := request:request-parameter("lang", ""), $entry := request:request-parameter("entry", ""), $pos := request:request-parameter("pos", ""), $orth := request:request-parameter("orthstatus", ""), $checked := request:request-parameter("commonchecked", ""), $inflmajor := request:request-parameter("inflmajor", ""), $inflminor := request:request-parameter("inflminor", ""), $inflexmpl := request:request-parameter("inflexmpl", "") let $user := request:get-session-attribute("user") , $pass := request:get-session-attribute("password"), $coll := "/db/ordbase/terms/SD-terms", $doc := local:get-doc($lang), $db := concat('xmldb:exist://',$coll) let $checkeddate := if ($checked eq "true") then current-date() else () let $paramters := request:parameter-names() (: $collection should refer to the collection, not the document in the collecion! :) let $collection := xmldb:collection( $db, $user, $pass) (: The document reference needs to include the collection path even though it is given in the $collection argument in the xmldb:update command (below). :) let $xupdate := {$entry} {$inflexmpl} let $dummy := xmldb:update($collection, $xupdate) return

Parameter: {$paramters}
Database: {$db}
ID: {$id}
Oppslag: {$entry}
XUpdate: {$xupdate}
Result: {$dummy}
Lagra!

}; (: Create filter expression from query term, field and mode :) declare function local:filter-expr($record as xs:string) as xs:string { let $pos := request:request-parameter("pos", "S") let $t := concat("'", $record, "\", $pos, "'") return concat("@id &= ", $t) }; (: Assemble the query string :) declare function local:build-query($record as xs:string, $entrylang as xs:string) as xs:string { let $expr := local:filter-expr($record), $doc := local:get-doc($entrylang) return concat("for $r in document('", $doc, "')//entry[", $expr, "] return $r") }; (: Modify the query results before display: :) declare function local:display($entrylang as xs:string, $hits as node()+) as element() { let $entry := item-at($hits, 1), $common := $entry/common, $senses := $entry/senses, $id := $entry/@id return {$common} { for $s in $entry/senses/sense let $status := $s/@status order by $status return { if ( $s/def ) then $s/def else (), if ( $s/synonyms ) then $s/synonyms else () } } }; (: Main function - retrieves some request attributes, forks further processing to other defined functions depending on the retrieved values :) declare function local:main() as element()+ { let $record := request:request-parameter("id", ""), $entry := request:request-parameter("entry", ""), $entrylang := request:request-parameter("lang", ""), $inputtype := request:request-parameter("common", ""), $entry := request:request-parameter("entry", "") let $t := if ($entrylang = "sme") then request:set-session-attribute("record-exists", "yes") else request:set-session-attribute("record-exists", "") return if(string-length($record) = 0) then

WARNING: There was an error with this request! Please check with the webmaster. Cause: No request record value.

else let $query := local:build-query($entry, $entrylang), $saveresult := if ($inputtype = 'savecommon') then local:saveentry() else

Nothing saved!

, $hits := util:eval( $query ) return if (empty($hits)) then (

ERROR! Record {$record} not found!

,

Your language: {$entrylang}

,

Your request: {$record}

,

Your entry: {$entry}

,

Your search query:

) else ( (: DEBUG:

Your search query:

,

The input type: {$inputtype}

,

The save result: {$saveresult}

, :) local:display($entrylang, $hits) ) };
{ let $start := util:system-time() return ( local:main(),

Søket tok { seconds-from-duration(util:system-time()-$start) } sekund.

) }