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