xquery version "1.0";
declare namespace util="http://exist-db.org/xquery/util";
declare namespace fn="http://exist-db.org/local-functions";
declare namespace i18n="http://apache.org/cocoon/i18n/2.1";
declare namespace xmldb="http://exist-db.org/xquery/xmldb";
import module namespace save="http://www.risten.no/edit/save" at "saveroutines.xqm";
import module namespace ristenutil="http://www.risten.no/shared/util" at "../xquery/ristenutil.xqm";
(: Assemble the query string :)
declare function fn:build-query($record as xs:string, $entrylang as xs:string)
as xs:string
{
let $pos := request:request-parameter("pos", "S"),
$newRecID := ristenutil:makeTermID($record, $pos),
$expr := ristenutil:id-filter($newRecID),
$doc := ristenutil:get-doc($entrylang)
return
concat("for $r in document('", $doc, "')//entry[",
$expr, "] return $r")
};
(: Check for the existence of the new entry: :)
declare function fn:check-exists($entry as xs:string, $entrylang as xs:string)
as xs:boolean
{
let $query := fn:build-query($entry, $entrylang),
$hits := util:eval( $query ),
$count := count($hits)
return if ( $count = 0 ) then
false()
else
true()
};
(: Check for the existence of the language in the term center -
only one term/language in each term record: :)
declare function fn:check-center($centerid as xs:string, $entrylang as xs:string)
as xs:boolean
{
let $query := concat("for $r in document",
"('/db/ordbase/terms/SD-terms/termcenter.xml')",
"/termCenter/entry[@id='", $centerid,
"']/entryref[@xml:lang='", $entrylang,
"'] return $r"),
$hits := util:eval( $query ),
$count := count($hits)
return if ( $count = 0 ) then
false()
else
true()
};
(: Modify the query results before display: :)
declare function fn: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
WARNING: The term record «{$centerid}» does already have an entry for this language! If you want to add alternative terms, please add them as synonyms (click the existing term to add synonyms).
else if( $exists ) then let $savedentry := save:saveExistingEntry($centerid), $savedcenter := save:updatecenter($centerid), $query := fn:build-query($entry, $entrylang), $hits := util:eval( $query ) return ( (:The result: {$savedentry}
,In Term Record: {$savedcenter}
, :) fn:display($entrylang, $hits) ) else let $saveresult := save:saveNewEntry($centerid), $savedcenter := save:updatecenter($centerid), $query := fn:build-query($entry, $entrylang), $hits := util:eval( $query ) return if (empty($hits)) then (ERROR! Record {$centerid} not found!
,Your language: {$entrylang}
,Your request: {$centerid}
,Your entry: {$entry}
,New entry exists: {$exists}
,Your search query:
Your search query:
The save result: {$saveresult}
,The article does exist: {$exists}
, :) fn:display($entrylang, $hits) ) };Søket tok { seconds-from-duration(current-time()-$start) } sekund.
) }