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&amp;pn={$pn}</image>
      <image-echo>http://echo.mpiwg-berlin.mpg.de/zogilib?fn=/permanent/archimedes/{$document}/{$pb1ImageRefLeft}-{$pb1ImageRefRight}-pageimg&amp;pn={$pn}</image-echo>
      <image-scaler>http://nausikaa2.rz-berlin.mpg.de/digitallibrary/servlet/Scaler?fn=/permanent/archimedes/{$document}/{$pb1ImageRefLeft}-{$pb1ImageRefRight}-pageimg&amp;pn={$pn}</image-scaler>
      <xml-url>?document={$document}&amp;pn={$pn}&amp;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