[xquery-talk] XQuery in Web Application
Wei, Alice J.
ajwei at indiana.edu
Fri Mar 7 15:16:02 PST 2008
Hi, XQueryers,
I don't know if anyone has tried this.
I intend on turning the code below into a web interface so I could search through my database collections. I used Saxon to debug my errors, and it apparently is giving me something like this in the following:
F [Saxon9B XQuery] Cannot find a matching 1-argument function named {http://chausie.slis.indiana.edu:8080/exist/xquery/request}get-parameter()
It appears that this is an XQuery issue, but I am not sure if something like get-parameter() or session:set-attribute() is an XQuery supported function.
If anyone has tried designing a web search using XQuery, I would love to hear about what are the possible solutions to my errors here.
Thanks in advance.
xquery version "1.0";
(: Searching through Collections :)
declare namespace request="http://chausie.slis.indiana.edu:8080/exist/xquery/request";
declare namespace session="http://chausie.slis.indiana.edu:8080/exist/xquery/session";
declare variable $data := fn:collection("xmldb:exist://db/cbml")//ad;
declare function local:input($search as xs:anyAtomicType)
as xs:string?
{
let $search := request:get-parameter($search")
return
( session:set-attribute("search", 0)
)
};
declare function local:search($search as xs:anyAtomicType
) as element()
{
let $sorted_result:=
for $doc in session:get-attribute(distinct-values($search))
order by $doc
return $doc
for $d at $count in $sorted_result
return (
session:set-attribute("search", $count),
if ($count lt 1) then
<p>Sorry, there are no results retrieved back. Please check for your input. </p>
else if ($count gt 200) then
<p>Sorry, too many results returned. Please refine your search to have them displayed.</p>
else
let $journal := $search[. =$d][1]/ancestor::cbml//seriesStmt/title[@level='journal']
let $volume := $search[. =$d][1]/ancestor::cbml//seriesStmt/idno[@type='volume']
let $issue := $search[. =$d][1]/ancestor::cbml//seriesStmt/idno[@type='issue']
let $head2 := $search[.=$d][1]/parent::ad/child::head
let $para := $search[.=$d][1]/parent::ad/child::p
let $note := $search[.=$d][1]/parent::ad/child::note
let $pb := $search[.=$d][1]/preceding::pb[1]
order by $d
return
<ad>
<statistics>
Showing Result: {$count} / {count($sorted_result)}
</statistics>
<information_source>
{$journal}
<publication>Volume {data($volume)}, Issue {data($issue)}</publication>
</information_source>
{$head2}
<description>{$para}</description>
{$note}
<information>Source from page {$pb}</information></ad>
)
};
declare function local:main() as node()?
{
session:create(),
let $search := xs:string(request:get-parameter("search", ()))
return
if ($search) then local:guess($search)
else
<p>You have not entered any search terms!</p>
};
<html>
<head><title>Collection Advertisement Testing Page</title></head>
<body>
<form action="{session:encode-url(request:get-uri())}">
<table border="0">
<tr>
<th colspan="2">Welcome to My XQuery Web Application Testing</th>
</tr>
<tr>
<td>Type in Your Search Term:</td>
<td><input type="text" name="search" size="3"/></td>
</tr>
<tr>
<td colspan="2" align="left"><input type="submit"/></td>
</tr>
</table>
</form>
{ local:main() }
<p><small>View <a href="guess.xql?_source=yes">source code</a></small></p>
</body>
</html>
======================================================
Alice Wei
MIS 2008
School of Library and Information Science
Indiana University Bloomington
ajwei at indiana.edu
More information about the talk
mailing list