Mercurial > hg > mpdl-group
diff software/eXist/webapp/mpdl/_stuff/oxygen-projects/monte-project/text/all.xql @ 7:5589d865af7a
Erstellung XQL/XSL Applikation
author | Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de> |
---|---|
date | Tue, 08 Feb 2011 15:16:46 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/software/eXist/webapp/mpdl/_stuff/oxygen-projects/monte-project/text/all.xql Tue Feb 08 15:16:46 2011 +0100 @@ -0,0 +1,48 @@ +xquery version "1.0"; + +module namespace mpdl-text = "http://www.mpiwg-berlin.mpg.de/ns/mpdl/text"; + +declare namespace text = "http://exist-db.org/xquery/text"; +declare namespace util = "http://exist-db.org/xquery/util"; +declare namespace local = "http://www.mpiwg-berlin.mpg.de/ns/mpdl/local"; + +declare function mpdl-text:indexTerms($document, $indexTermsStartStr, $pn as xs:int, $pageSize as xs:int) as node()* { + let $index := $document/archimedes/text + let $language := $document/archimedes/info/lang + let $from := ($pn * $pageSize) - $pageSize + 1 + let $to := $pn * $pageSize + let $maxTo := 10000 + let $callback := util:function(QName("http://www.mpiwg-berlin.mpg.de/ns/mpdl/local", "local:termEntries"), 2) + let $indexResult := text:index-terms($index, $indexTermsStartStr, $callback, $maxTo) + let $count := count($indexResult) + let $pages := + if ($count = 0) + then 0 + else $count idiv $pageSize + 1 + let $resultEntries := + for $entry at $pos in $indexResult + where $pos >= $from and $pos <= $to + return $entry + + let $result := + <index-terms> + <start-string>{$indexTermsStartStr}</start-string> + <size>{$count}</size> + <pages>{$pages}</pages> + <pn>{$pn}</pn> + {$resultEntries} + </index-terms> + return $result +}; + +declare function local:termEntries($term as xs:string, $data as xs:int+) { + let $result := + <entry> + <term>{$term}</term> + <frequency>{$data[1]}</frequency> + <documents>{$data[2]}</documents> + <position>{$data[3]}</position> + <rank>{$data[4]}</rank> + </entry> + return $result +};