Thank you, Gerrit! I am not sure, though, that the remedy can be adapted to my 
case. The encoding is a level deeper, so-to-speak, than the text of a document 
type declaration. In your case, the solution is a manipulation of the contents 
of a string, but the encoding is a different matter. I mean, this would amount 
to manipulating the bytes, rather than the characters, which to deliver in the 
response! Is this not simply out of scope of what a query may attempt to do? 
Frankly, it is beyond what I can imagine.
But I take note of your idea and will try to pursue it further if no other 
solutions emerge.
Kind regards,Hans-Jürgen
    Am Donnerstag, 19. Januar 2023 um 15:28:57 MEZ hat Imsieke, Gerrit, le-tex 
<gerrit.imsi...@le-tex.de> Folgendes geschrieben:  
 
 Hi Hans-Jürgen,

I had a similar problem 2 weeks ago where I needed to be flexible with a 
public identifier in serialization, and I switched from 
%output:doctype-public to
serialize(…,
  map{'doctype-public':
      if ($niso-version = '1.2')
      then $tr:niso-1-2-public-identifier
      else $tr:niso-1-0-public-identifier,
      'doctype-system': 'NISO-STS-interchange-1-mathml3.dtd',
      'indent': 'no'}
)
as the function’s output.
Maybe you can also use serialize() inside your function?

Gerrit


On 19.01.2023 15:20, Hans-Jürgen Rennau wrote:
> Hello,
> 
> I encounter a problem with a RESTXQ application, perhaps someone can 
> help me?
> 
> *Goal:* Download a file with an encoding dependent on a user entry. The 
> request contains /form parameters/.
> 
> *Attempt:*
> I can control the encoding using the %output annotation. However, this 
> annotation must be a literal string, I think. Therefore I tried 
> /web:forward/, as well as /web:redirect/, thus triggering the execution 
> of a function with the desired %output declaration.
> 
> *Issue:* the form parameters get lost.
> 
> How to achieve the goal? Thank you for your advice.
> 
> With kind regards,
> Hans-Jürgen
> 
> declare %output:method("text")
>          %output:encoding("utf-8")
>          %rest:path("*/util/download/text*")
>          %rest:form-param("text", "{$text}", "")
>          %rest:form-param("file-name", "{$fileName}", "text.txt")
>          %rest:form-param("encoding", "{$encoding}", "utf-8")
>          function *f:downloadText*(
>              $text as xs:string,
>              $fileName as xs:string,
>              $encoding as xs:string) {
>    if ($encoding eq 'cp1252') then 
> *web:forward*('*/util/download/text-cp1252*')
>    else ...
> declare %output:method("text")
>          %output:encoding("cp1252")
>          %rest:path("*/util/download/text-cp1252*")
>          %rest:form-param("text", "{$text}", "")
>          %rest:form-param("file-name", "{$fileName}", "text.txt")
>          function *f:downloadTextCp1252*(
>              $text as xs:string,
>              $fileName as xs:string) {
>    let $text := replace($text, '&#xD;&#xA;', '&#xA;')
>    return (
>    <rest:response>
>      <http:response status="200">
>        <http:header name="Content-Disposition" value='attachment; 
> filename="{$fileName}"'/>
>        <http:header name="Content-Language" value="en"/>
>        <http:header name="Content-Type" value="text/csv; charset=cp1252"/>
>      </http:response>
>    </rest:response>,
>    $text
>    )
> };
> 
> PS: The <http:header> seems to be without effect - experiments seemd to 
> show that I have to use the %output declaration.
> 

-- 
Gerrit Imsieke
Geschäftsführer / Managing Director
le-tex publishing services GmbH
Weissenfelser Str. 84, 04229 Leipzig, Germany
Phone +49 341 355356 110, Fax +49 341 355356 510
gerrit.imsi...@le-tex.de, http://www.le-tex.de

Registergericht / Commercial Register: Amtsgericht Leipzig
Registernummer / Registration Number: HRB 24930

Geschäftsführer / Managing Directors:
Gerrit Imsieke, Svea Jelonek, Thomas Schmidt
  

Reply via email to