comparison software/eXist/webapp/mpdl/interface/xpath.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 d6f528ad5d96
comparison
equal deleted inserted replaced
6:2396a569e446 7:5589d865af7a
1 xquery version "1.0";
2
3 declare namespace request = "http://exist-db.org/xquery/request";
4 declare namespace util = "http://exist-db.org/xquery/util";
5 declare namespace echo="http://www.mpiwg-berlin.mpg.de/ns/echo/1.0/";
6
7 (: ToDo wenn eine pn gegeben ist, wird momentan der namespace ignoriert :)
8 let $mpdlDocUri := request:get-parameter("document", "")
9 let $pn := number(request:get-parameter("pn", "-1"))
10 let $xpath := request:get-parameter("xpath", "")
11 let $output := request:get-parameter("output", "")
12 let $resultPageNumber := number(request:get-parameter("resultPN", "1"))
13 let $resultPageSize := number(request:get-parameter("resultPageSize", "50"))
14
15 let $documentName := substring-before(substring-after(substring-after(substring-after($mpdlDocUri, "/"), "/"), "/"), ".")
16 let $docbase := substring-before(substring-after($mpdlDocUri, "/"), "/")
17 let $fullDocumentUri := concat('/db/mpdl/documents/morph', $mpdlDocUri)
18 let $document := doc($fullDocumentUri)
19 let $pageBreaks :=
20 if ($docbase = 'archimedes' and $pn != -1)
21 then $document//pb
22 else if ($docbase = 'echo' and $pn != -1)
23 then $document//echo:pb
24 else $document//pb
25 let $countPBs := count($pageBreaks)
26 let $pb1 := subsequence($pageBreaks, $pn, 1)
27 let $pb2 := subsequence($pageBreaks, $pn + 1, 1)
28 let $pageFragmentStr :=
29 if ($pn != -1 and $countPBs > 0)
30 then util:get-fragment-between($pb1, $pb2, true())
31 else if ($pn != -1 and $countPBs = 0)
32 then ""
33 else ()
34 let $pageFragment :=
35 if ($countPBs > 0)
36 then util:parse($pageFragmentStr)
37 else $document
38 let $xPathFragment := concat(".", $xpath)
39 let $resultEval :=
40 if ($pn > 0)
41 then util:eval-inline($pageFragment, $xPathFragment)
42 else util:eval-inline($document, $xPathFragment)
43 let $from := ($resultPageNumber * $resultPageSize) - $resultPageSize + 1
44 let $to := $resultPageNumber * $resultPageSize
45 let $resultEvalPage :=
46 for $entry at $pos in $resultEval
47 where $pos >= $from and $pos <= $to
48 return $entry
49 let $size := count($resultEval)
50 let $pages :=
51 if ($size = 0)
52 then 0
53 else $size idiv $resultPageSize + 1
54 let $result :=
55 <result>
56 <document>{$mpdlDocUri}</document>
57 <documentPageNumber>{$pn}</documentPageNumber>
58 <resultSize>{$size}</resultSize>
59 <resultPageSize>{$resultPageSize}</resultPageSize>
60 <countResultPages>{$pages}</countResultPages>
61 <resultPageNumber>{$resultPageNumber}</resultPageNumber>
62 <resultPage>{$resultEvalPage}</resultPage>
63 </result>
64
65 let $declare :=
66 if ($output != "html")
67 then util:declare-option("exist:serialize", "method=xml media-type=text/xml omit-xml-declaration=no indent=yes encoding=utf-8")
68 else util:declare-option("exist:serialize", "method=html media-type=text/html omit-xml-declaration=no indent=yes encoding=utf-8")
69
70 return $result