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 namespace xmldb="http://exist-db.org/xquery/xmldb"; import module namespace ristenutil="http://www.risten.no/shared/util" at "../xquery/ristenutil.xqm"; declare function local:filter-expr($entry as xs:string) as xs:string { let $t := concat("@id &= '", $entry, "'") return $t }; declare function local:build-query($entry as xs:string, $lang as xs:string) as xs:string { let $expr := local:filter-expr($entry), $doc := ristenutil:get-doc('center') return concat("for $r in document('", $doc, "')//entry[", $expr, "] return $r") }; declare function local:checkNewEntry($entry as xs:string, $lang as xs:string) as xs:boolean { let $query := local:build-query($entry, $lang), $hits := util:eval($query), $count := count($hits) return if ($count = 0) then false() else true() }; declare function local:saveNewCenter($entry as xs:string, $sem as xs:string, $lang as xs:string) as empty() { let $sem := fn:normalize-space($sem), $lang := fn:normalize-space($lang), $coll := ristenutil:get-collection(), $semantics := if (string-length($sem) > 0) then element { "sem" } { element {$sem} {()} } else "" return update insert {$semantics} into collection($coll)//termCenter }; declare function local:saveNewLangEntry($entry as xs:string, $lang as xs:string, $infl as xs:string, $stem as xs:string) as empty() { let $lang := fn:normalize-space($lang), $infl := fn:normalize-space($infl), $coll := ristenutil:get-collection(), $stemelem := if (string-length($stem) > 0) then element { "stem" } { $stem } else "" return update insert {$stemelem} into collection($coll)//terminology[@xml:lang="{$lang}"] }; (: For now getEntry consists only function call to cleanEntry, but in the future it would be nice to enter a list of names and then get the lemma part with this function. :) declare function local:getEntry($rawentry as xs:string) as xs:string+ { let $entry := ristenutil:cleanEntry($rawentry) return $entry }; declare function local:main() as element()+ { let $lang := request:get-parameter("lang", ""), $rawentry := string-join(request:get-parameter("entry", ""), '\n'), $infl := request:get-parameter("infl", ""), $entry := local:getEntry( $rawentry ), $sem := request:get-parameter("sem", "") let $l := session:set-attribute("newreclang", $lang), $p := session:set-attribute("newrecinfl", $infl), $c := session:set-attribute("sem", $sem) let $exists := local:checkNewEntry($rawentry, $lang) return if ($exists) then

{$exists}

else (: let $newcenter := local:saveNewCenter($rawentry, $sem, $lang), $newlang := local:saveNewLangEntry($rawentry, $lang, $infl, "") return :) };
{ let $start := util:system-time() return ( (: pre-main should be here :) local:main(),

SearchTime { seconds-from-duration(util:system-time()-$start) }

) }