Mercurial > hg > mpdl-group
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 |