Mercurial > hg > mpdl-group
view software/eXist/webapp/mpdl/_stuff/oxygen-projects/monte-project/page-query-result.xquery @ 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 source
xquery version "1.0"; import module namespace mpdl-time = "http://www.mpiwg-berlin.mpg.de/ns/mpdl/util/time" at "util/time.xquery"; import module namespace mpdl-lucene = "http://www.mpiwg-berlin.mpg.de/ns/mpdl/lucene/search" at "lucene/search.xquery"; import module namespace mpdl-text = "http://www.mpiwg-berlin.mpg.de/ns/mpdl/text" at "text/all.xquery"; declare namespace request = "http://exist-db.org/xquery/request"; declare namespace transform = "http://exist-db.org/xquery/transform"; declare namespace util = "http://exist-db.org/xquery/util"; let $document := request:get-parameter("document", "agric_remet_001_la_1556") let $mode := request:get-parameter("mode", "image") let $pn := number(request:get-parameter("pn", "1")) let $ftQuery := request:get-parameter("ft-query", "") let $indexTermsStartStr := request:get-parameter("index-terms-start-str", "") let $currentTimeBegin := util:system-time() let $docPath := concat("/db/archimedes/", $document, ".xml") let $docRoot := doc($docPath) let $archimedesInfo := $docRoot/archimedes/info let $locator := $archimedesInfo/locator let $countPages := count($docRoot//pb) let $pb1 := $docRoot//pb[$pn] let $positionOfFirstFigureAfterPB1 := count($pb1/following::figure[1]/preceding::figure) + 1 (: position der ersten figure nach pb1 :) let $pb1ImageRefLeft := substring-before($locator, ".") let $pb1ImageRefRight := "01" let $pb2 := $docRoot//pb[$pn + 1] let $errorCode := if ($pn < $countPages + 1 and $pn > 0) then 0 else 1 let $retPageFragment := if ($mode = "image" or $errorCode > 0) then () else util:get-fragment-between($pb1, $pb2, true()) let $returnPageFragment := util:parse($retPageFragment) (: string2xml: returns a valid xml document for that string :) let $ftHits := if ($ftQuery = "") then () else mpdl-lucene:search($docPath, $ftQuery) let $indexTerms := if($indexTermsStartStr = "") then () else mpdl-text:indexTerms($docRoot, $indexTermsStartStr, 100) let $currentTimeEnd := util:system-time() let $neededTime := mpdl-time:duration-as-ms($currentTimeEnd - $currentTimeBegin) let $xmlResult := if ($errorCode = 0) then <result> <mode>{$mode}</mode> <document-description> <document-name>{$document}</document-name> {$archimedesInfo} <count-pages>{$countPages}</count-pages> <performance>{$neededTime}</performance> </document-description> <page> <number>{$pn}</number> <image>http://nausikaa2.rz-berlin.mpg.de/digitallibrary/digilib.jsp?fn=/permanent/archimedes/{$document}/{$pb1ImageRefLeft}-{$pb1ImageRefRight}-pageimg&pn={$pn}</image> <image-echo>http://echo.mpiwg-berlin.mpg.de/zogilib?fn=/permanent/archimedes/{$document}/{$pb1ImageRefLeft}-{$pb1ImageRefRight}-pageimg&pn={$pn}</image-echo> <image-scaler>http://nausikaa2.rz-berlin.mpg.de/digitallibrary/servlet/Scaler?fn=/permanent/archimedes/{$document}/{$pb1ImageRefLeft}-{$pb1ImageRefRight}-pageimg&pn={$pn}</image-scaler> <xml-url>?document={$document}&pn={$pn}&mode=xml</xml-url> <firstFigurePosition>{$positionOfFirstFigureAfterPB1}</firstFigurePosition> <content>{$returnPageFragment}</content> </page> {$ftHits} {$indexTerms} </result> else if ($errorCode = 1) then <error>No result: Page {$pn} not found</error> else <error>undefined error: {$errorCode}</error> let $declare := if ($mode = "text" or $mode = "image" or $mode = "xml") then util:declare-option("exist:serialize", "method=html media-type=text/html omit-xml-declaration=no indent=yes encoding=UTF-8") else util:declare-option("exist:serialize", "method=xml media-type=text/xml omit-xml-declaration=no indent=yes encoding=UTF-8") let $result := transform:transform($xmlResult, doc("/db/xsl/archimedes-page-fragment.xsl"), ()) return $result