Difference between revisions of "Web Module"
James Ball (talk | contribs) m (Spelling correction: reponse to response) |
|||
Line 37: | Line 37: | ||
* <code><nowiki>web:create-url('http://find.me', map { 'q': 'dog' })</nowiki></code> returns <code><nowiki>http://find.me?q=dog</nowiki></code> | * <code><nowiki>web:create-url('http://find.me', map { 'q': 'dog' })</nowiki></code> returns <code><nowiki>http://find.me?q=dog</nowiki></code> | ||
* <code><nowiki>web:create-url('search', map { 'year': (2000,2001), 'title':() })</nowiki></code> returns <code>search?year=2000&year=2001</code> | * <code><nowiki>web:create-url('search', map { 'year': (2000,2001), 'title':() })</nowiki></code> returns <code>search?year=2000&year=2001</code> | ||
+ | |} | ||
+ | |||
+ | ==web:encode-url== | ||
+ | |||
+ | {| width='100%' | ||
+ | |- | ||
+ | | width='120' | '''Signatures''' | ||
+ | |{{Func|web:encode-url|$string as xs:string|xs:string}}<br/> | ||
+ | |- | ||
+ | | '''Summary''' | ||
+ | |Encodes a string to a URL. Spaces are rewritten to {{Code|+}}, and all other non-ASCII characters and special characters except for {{Code|*}} are percent-encoded. | ||
+ | |- | ||
+ | | '''Examples''' | ||
+ | | | ||
+ | * <code><nowiki>web:encode-url("this is a test!.html")</nowiki></code> returns <code>this+is+a+test%21.html</code>. | ||
+ | |} | ||
+ | |||
+ | ==web:decode-url== | ||
+ | |||
+ | {| width='100%' | ||
+ | |- | ||
+ | | width='120' | '''Signatures''' | ||
+ | |{{Func|web:decode-url|$string as xs:string|xs:string}}<br/> | ||
+ | |- | ||
+ | | '''Summary''' | ||
+ | |Decodes a URL to the original string. Percent-encoded characters are decoded to their UTF8 codepoints, and {{Code|+}} characters are rewritten to spaces. | ||
+ | |- | ||
+ | | '''Examples''' | ||
+ | | | ||
+ | * <code><nowiki>web:decode-url("%E6%97%A5%E6%9C%AC%E8%AA%9E")</nowiki></code> returns <code>日本語</code>. | ||
|} | |} | ||
Line 103: | Line 133: | ||
=Changelog= | =Changelog= | ||
+ | |||
+ | ;Version 8.2 | ||
+ | |||
+ | * Added: [[#web:encode-url|web:encode-url]], [[#web:decode-url|web:decode-url]] | ||
The module was introduced with Version 8.1. | The module was introduced with Version 8.1. | ||
[[Category:XQuery]] | [[Category:XQuery]] |
Revision as of 16:48, 13 May 2015
This XQuery Module provides convenience functions for building web applications with RESTXQ.
Contents
Conventions
All functions in this module are assigned to the http://basex.org/modules/web
namespace, which is statically bound to the web
prefix.
All errors are assigned to the http://basex.org/errors
namespace, which is statically bound to the bxerr
prefix.
Functions
web:content-type
Signatures | web:content-type($path as xs:string) as xs:string |
Summary | Returns the content type of a path by analyzing its file suffix. application/octet-stream is returned if the file suffix is unknown.
|
Examples |
|
web:create-url
Signatures | web:create-url($url as xs:string, $parameters as map(*)) as xs:string |
Summary | Creates a new URL from the specified $url string and the $parameters specified in a map. The keys and and values of the map entries will be converted to strings, URI-encoded, and appended to the url as query parameters. If a map entry has more than a single item, all of them will be appended as single parameters.
|
Examples |
|
web:encode-url
Signatures | web:encode-url($string as xs:string) as xs:string |
Summary | Encodes a string to a URL. Spaces are rewritten to + , and all other non-ASCII characters and special characters except for * are percent-encoded.
|
Examples |
|
web:decode-url
Signatures | web:decode-url($string as xs:string) as xs:string |
Summary | Decodes a URL to the original string. Percent-encoded characters are decoded to their UTF8 codepoints, and + characters are rewritten to spaces.
|
Examples |
|
web:redirect
Signatures | web:redirect($location as xs:string) as element(rest:response) web:redirect($location as xs:string, $parameters as map(*)) as element(rest:response) |
Summary | Creates a RESTXQ redirection to the specified location. The returned response will only work if no other items are returned by the RESTXQ function. If $parameters are specified, they will be appended as query parameters to the URL as described for web:create-url.
|
Examples | The query web:redirect('/a/b') returns the following response element:
<rest:response xmlns:rest="http://exquery.org/ns/restxq"> <http:response xmlns:http="http://expath.org/ns/http-client" status="302"> <http:header name="location" value="/a/b"/> </http:response> </rest:response> |
web:response-header
Signatures | web:response-header() as element(rest:response) web:response-header($headers as map(*)) as element(rest:response) web:response-header($headers as map(*), $output as map(*)) as element(rest:response) |
Summary | Creates a RESTXQ response header with a default caching directive and default serialization parameters. Header options can be supplied via the
Serialization parameters can be supplied via the
|
Examples |
<rest:response xmlns:rest="http://exquery.org/ns/restxq"> <http:response xmlns:http="http://expath.org/ns/http-client"> <http:header name="Cache-Control" value="max-age=3600,public"/> </http:response> <output:serialization-parameters xmlns:output="http://www.w3.org/2010/xslt-xquery-serialization"> <output:media-type value="application/octet-stream"/> <output:method value="raw"/> </output:serialization-parameters> </rest:response>
declare %rest:path('media/{$file}') function local:get($file) { let $path := 'path/to/' || $file return ( web:response-header(map { 'media-type': web:content-type($path) }), file:read-binary($path) ) }; …a file resource with the correct content-type will be returned to user (provided that it exists in the web server's file system). |
Changelog
- Version 8.2
- Added: web:encode-url, web:decode-url
The module was introduced with Version 8.1.