Hello,
I’m trying to build my first BaseX web application. I’ve got a RESTXQ function for returning static files to the browser, and other RESTXQ functions corresponding to URLs in the web application. The function for static files is based on the one in DBA:
(:~ Returns the specified static file to the browser as binary data. :)
declare
%rest:GET
%rest:path('theocom/static/{$dir=.+}/{$file=.+}')
function c:file($dir as xs:string, $file as xs:string)
{
let $path := file:base-dir() || 'static/' || $dir || '/' || $file
return
(
web:response-header(
map { 'media-type': web:content-type($path) },
map { 'Content-Length': file:size($path) }
),
file:read-binary($path)
)
};
Another function returns the home page for the web application. That page works just fine. The HTML document gets returned to the browser, and the static CSS and image files are sent to the browser successfully.
(:~ Returns the home page for the entire web application. :)
declare
%rest:GET
%rest:path('theocom')
%output:method('html')
%output:html-version('5')
function c:home()
{
let $params := c:http-params()
return
(
c:extra-response-headers(),
home:get-home-page($params)
)
};
I have another RESTXQ function that corresponds to a URL that goes deeper into the web application:
(:~ Returns a page listing contributors (libraries whose content we've imported), for browsing. :)
declare
%rest:GET
%rest:path('theocom/contributors/{$alpha=[a-z]}')
%output:method('html')
%output:html-version('5')
function c:browse-contributors($alpha as xs:string)
{
let $params :=
map:merge(
(
map:entry("browse", "contributor"),
map:entry("alpha", upper-case($alpha)),
c:http-params()
)
)
return
(
c:extra-response-headers(),
browse:contributors($params)
)
};
The problem I’m having is that on this page, the browser returns 404 for the static files, even though the code for the HTML <head> where the CSS files are linked is identical to the home page. Am I doing something wrong, or is the BaseX RESTXQ implementation doing something unexpected?
Thanks,
Greg
Gregory Murray
Director of Digital Initiatives
Wright Library
Princeton Theological Seminary