Dear Christian, Martin

Thank you very much for this invaluable info, and everyone's general 
helpfulness which is very much appreciated.

I can confirm that with the tweak below to wrapper.xqy, the 

    basex -o output.xml -b input=small.xml -b stylesheet=transform.xsl 
wrapper.xqy

command works great.

The command line xslt:transform invocation below failed, however, with:

    Illegal character in opaque part at index 15: xslt:transform("small.xml", 
"transform.xsl")

Best wishes,
Rory

On 22/07/25, Christian Grün (c...@basex.org) wrote:
> Hi Roy, thanks all,
> 
> As indicated by Martin, …
> 
>     file:write($output, xslt:transform($input, $stylesheet))
> 
> …works with BaseX 10.5. For the latest proposed syntax, you will need to 
> switch to a newer version.
> 
> You can also use supply the XQuery code on command line and specify an output 
> target:
> 
> basex -o output.xml 'xslt:transform("small.xml", "transform.xsl")'
> 
> …or, as suggested:
> 
> __ wrapper.xqy:
> declare variable $input as xs:string external;
> declare variable $stylesheet as xs:string external;
> xslt:transform($input, $stylesheet)
> 
> __ command-line:
> basex -o output.xml -b input=small.xml -b stylesheet=transform.xsl wrapper.xqy
> 
> Best,
> Christian
> 
> ________________________________
> Von: Martin Honnen via BaseX-Talk <basex-talk@mailman.uni-konstanz.de>
> Gesendet: Dienstag, 22. Juli 2025 18:23
> An: basex-talk@mailman.uni-konstanz.de <basex-talk@mailman.uni-konstanz.de>
> Betreff: [basex-talk] Re: command line xsl transformation
> 
> 
> On 22/07/2025 18:03, Rory Campbell-Lange wrote:
> > Hi Yitzhak
> >
> > That is an incredibly helpful Xquery example.
> >
> > Unfortunately I'm unable to get it to run on my Linux machine.
> >
> > While this (Saxon-HE) works ok:
> >
> >      saxon -s:small.xml -xsl:transform.xsl -o:result.html
> >
> > basex returns a stacktrace (shown at the bottom of my email) when I run the 
> > basex query below, modelled on yours but using quoting which I think is 
> > correct for linux.
> >
> >      basex -b '$input=small.xml' -b '$stylesheet=transform.xsl' wrapper.xqy
> >
> > This fails with a
> >
> >      java.lang.ArrayIndexOutOfBoundsException: Index -1 out of bounds for 
> > length 8
> >
> > error, although I don't believe I'm using any range/iterator expressions.
> 
> 
> First of all, to use XSLT 2 or 3 with BaseX, you need to add Saxon HE
> Java library (current version is 12.8, but I think 11.7 or even 10.9
> would work, too) to the BaseX lib folder, plus its dependencies like XML
> resolver.
> 
> Then note that the current version of BaseX is 12, so with 10.5 you are
> using an outdated version (might be because you went with a Linux package).
> 
> 
> I am not quite sure what causes the error you get but I think Yitzhak
> took advantage of recent updates to XQuery, like the "->" operator, I am
> not sure that was supported in 10.5. Wait for Christian to tell.
> 
> Perhaps instead of
> 
>    xslt:transform($input, $stylesheet) -> file:write($output, .)
> 
> you could try
> 
>     file:write($output, xslt:transform($input, $stylesheet))
> 
> 
> 

Reply via email to