Mercurial > hg > mpdl-group
diff 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 diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/software/eXist/webapp/mpdl/_stuff/oxygen-projects/monte-project/page-query-result.xquery Tue Feb 08 15:16:46 2011 +0100 @@ -0,0 +1,88 @@ +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 \ No newline at end of file