Mercurial > hg > mpdl-group
comparison software/eXist/webapp/mpdl/interface/xquery.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 (also im Fragment untersucht werden soll) geht es momentan nicht s.u. :) | |
8 (: ToDo wenn eine pn gegeben ist, wird momentan der namespace ignoriert wie z.B. xquery=//echo:s&pn=14 :) | |
9 let $xQuery := request:get-parameter("xquery", "") | |
10 let $xQueryPath := request:get-parameter("xqueryPath", "") | |
11 let $mpdlDocUri := request:get-parameter("document", "") | |
12 let $pn := number(request:get-parameter("pn", "-1")) | |
13 let $startRecord := number(request:get-parameter("startRecord", "1")) | |
14 let $maximumRecords := number(request:get-parameter("maximumRecords", "-1")) | |
15 let $output := request:get-parameter("output", "") | |
16 let $options := request:get-parameter("options", "") | |
17 | |
18 let $documentName := substring-before(substring-after(substring-after(substring-after($mpdlDocUri, "/"), "/"), "/"), ".") | |
19 let $docbase := substring-before(substring-after($mpdlDocUri, "/"), "/") | |
20 let $fullDocumentUri := concat('/db/mpdl/documents/morph', $mpdlDocUri) | |
21 let $document := doc($fullDocumentUri) | |
22 let $pageBreaks := | |
23 if ($docbase = 'archimedes') | |
24 then $document//pb | |
25 else if ($docbase = 'echo') | |
26 then $document//echo:pb | |
27 else $document//pb | |
28 let $countPBs := count($pageBreaks) | |
29 let $pb1 := subsequence($pageBreaks, $pn, 1) | |
30 let $pb2 := subsequence($pageBreaks, $pn + 1, 1) | |
31 let $pageFragmentStr := | |
32 if ($pn != -1 and $countPBs > 0) | |
33 then util:get-fragment-between($pb1, $pb2, true()) | |
34 else if ($pn != -1 and $countPBs = 0) | |
35 then "" | |
36 else "" | |
37 let $pageFragment := | |
38 if ($countPBs > 0) | |
39 then util:parse($pageFragmentStr) | |
40 else $document | |
41 (: ToDo im Fragment geht es nur mit vorn angehÃĪngtem Punkt. Das gibt aber Probleme, wenn es komplizierte XQueries gibt: let $xPathFragment := concat(".", $xpath) :) | |
42 let $resultEval := | |
43 if ($xQueryPath != "" and $document != "" and $pn > 0) | |
44 then util:eval-inline($pageFragment, $xQueryPath) | |
45 else if ($xQueryPath != "" and $document != "" and $pn = -1) | |
46 then util:eval-inline($document, $xQueryPath) | |
47 else if ($xQueryPath != "" and $mpdlDocUri = "") | |
48 then util:eval($xQueryPath) | |
49 else if ($xQueryPath = "" and $document != "" and $pn > 0) | |
50 then util:eval-inline($pageFragment, $xQuery) | |
51 else if ($xQueryPath = "" and $document != "" and $pn = -1) | |
52 then util:eval-inline($document, $xQuery) | |
53 else if ($xQueryPath = "" and $mpdlDocUri = "") | |
54 then util:eval($xQuery) | |
55 else () | |
56 let $size := count($resultEval) | |
57 let $from := $startRecord | |
58 let $to := | |
59 if ($maximumRecords != -1) | |
60 then $startRecord + $maximumRecords - 1 | |
61 else $size | |
62 let $resultEvalPage := | |
63 for $entry at $pos in $resultEval | |
64 where $pos >= $from and $pos <= $to | |
65 return | |
66 <record> | |
67 <id>{$pos}</id> | |
68 <content>{$entry}</content> | |
69 </record> | |
70 | |
71 let $resDocument := | |
72 if ($document != '' and $pn != -1) | |
73 then <document><id>{$mpdlDocUri}</id><pn>{$pn}</pn></document> | |
74 else if ($document != '' and $pn = -1) | |
75 then <document><id>{$mpdlDocUri}</id></document> | |
76 else '' | |
77 let $result := | |
78 <result> | |
79 <xquery>{$xQuery}</xquery> | |
80 {$resDocument} | |
81 <queryResult> | |
82 <size>{$size}</size> | |
83 <startRecord>{$startRecord}</startRecord> | |
84 <maximumRecords>{$maximumRecords}</maximumRecords> | |
85 <records> | |
86 {$resultEvalPage} | |
87 </records> | |
88 </queryResult> | |
89 </result> | |
90 | |
91 | |
92 | |
93 let $declare := | |
94 if ($output != "html") | |
95 then util:declare-option("exist:serialize", "method=xml media-type=text/xml omit-xml-declaration=no indent=yes encoding=utf-8") | |
96 else util:declare-option("exist:serialize", "method=html media-type=text/html omit-xml-declaration=no indent=yes encoding=utf-8") | |
97 | |
98 return $result |