<html dir="ltr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style id="owaParaStyle" type="text/css">P {margin-top:0;margin-bottom:0;}</style>
</head>
<body ocsi="0" fpstyle="1">
<div style="direction: ltr;font-family: Tahoma;color: #000000;font-size: 10pt;">Hi,<br>
<br>
I posted a comment on the XSpec issue tracker related to this patch (https://github.com/expath/xspec/pull/74), I copy-paste it here below.<br>
<br>
Best,<br>
<br>
Sandro<br>
<br>
<br>
<div class="edit-comment-hide">
<div class="comment-body markdown-body markdown-format js-comment-body">
<p>I tested the support for testing XSLT 3.0 with this XSpec test:</p>
<div class="highlight highlight-text-xml">
<pre><?<span class="pl-ent">xml</span><span class="pl-e"> version</span>=<span class="pl-s"><span class="pl-pds">"</span>1.0<span class="pl-pds">"</span></span><span class="pl-e"> encoding</span>=<span class="pl-s"><span class="pl-pds">"</span>UTF-8<span class="pl-pds">"</span></span>?>
<<span class="pl-ent">x</span><span class="pl-ent">:</span><span class="pl-ent">description</span> <span class="pl-e">xmlns</span><span class="pl-e">:</span><span class="pl-e">x</span>=<span class="pl-s"><span class="pl-pds">"</span>http://www.jenitennison.com/xslt/xspec<span class="pl-pds">"</span></span> <span class="pl-e">stylesheet</span>=<span class="pl-s"><span class="pl-pds">"</span>unit-converter.xsl<span class="pl-pds">"</span></span> <span class="pl-e">xslt-version</span>=<span class="pl-s"><span class="pl-pds">"</span>3.0<span class="pl-pds">"</span></span>>
<<span class="pl-ent">x</span><span class="pl-ent">:</span><span class="pl-ent">scenario</span> <span class="pl-e">label</span>=<span class="pl-s"><span class="pl-pds">"</span>When processing a data element with unit feet<span class="pl-pds">"</span></span>>
<<span class="pl-ent">x</span><span class="pl-ent">:</span><span class="pl-ent">context</span>>
<<span class="pl-ent">data</span>>
<<span class="pl-ent">altitude</span>>1200</<span class="pl-ent">altitude</span>>
<<span class="pl-ent">unit</span>>feet</<span class="pl-ent">unit</span>>
</<span class="pl-ent">data</span>>
</<span class="pl-ent">x</span><span class="pl-ent">:</span><span class="pl-ent">context</span>>
<<span class="pl-ent">x</span><span class="pl-ent">:</span><span class="pl-ent">expect</span> <span class="pl-e">label</span>=<span class="pl-s"><span class="pl-pds">"</span>convert feet to meters<span class="pl-pds">"</span></span>>
<<span class="pl-ent">data</span>>
<<span class="pl-ent">altitude</span>>365.76</<span class="pl-ent">altitude</span>>
<<span class="pl-ent">unit</span>>meters</<span class="pl-ent">unit</span>>
</<span class="pl-ent">data</span>>
</<span class="pl-ent">x</span><span class="pl-ent">:</span><span class="pl-ent">expect</span>>
</<span class="pl-ent">x</span><span class="pl-ent">:</span><span class="pl-ent">scenario</span>>
</<span class="pl-ent">x</span><span class="pl-ent">:</span><span class="pl-ent">description</span>></pre>
</div>
<p>It tests the following XSLT which makes use of high-order functions, a new feature of XSLT 3.0 (the example is adapted from
<a href="http://www.xfront.com/Pearls-of-XSLT-and-XPath-3-0-Design.pdf">www.xfront.com/Pearls-of-XSLT-and-XPath-3-0-Design.pdf</a>).</p>
<div class="highlight highlight-text-xml">
<pre><?<span class="pl-ent">xml</span><span class="pl-e"> version</span>=<span class="pl-s"><span class="pl-pds">"</span>1.0<span class="pl-pds">"</span></span><span class="pl-e"> encoding</span>=<span class="pl-s"><span class="pl-pds">"</span>UTF-8<span class="pl-pds">"</span></span>?>
<<span class="pl-ent">xsl</span><span class="pl-ent">:</span><span class="pl-ent">stylesheet</span> <span class="pl-e">xmlns</span><span class="pl-e">:</span><span class="pl-e">xsl</span>=<span class="pl-s"><span class="pl-pds">"</span>http://www.w3.org/1999/XSL/Transform<span class="pl-pds">"</span></span>
<span class="pl-e">xmlns</span><span class="pl-e">:</span><span class="pl-e">xs</span>=<span class="pl-s"><span class="pl-pds">"</span>http://www.w3.org/2001/XMLSchema<span class="pl-pds">"</span></span>
<span class="pl-e">xmlns</span><span class="pl-e">:</span><span class="pl-e">math</span>=<span class="pl-s"><span class="pl-pds">"</span>http://www.w3.org/2005/xpath-functions/math<span class="pl-pds">"</span></span> <span class="pl-e">exclude-result-prefixes</span>=<span class="pl-s"><span class="pl-pds">"</span>xs math<span class="pl-pds">"</span></span>
<span class="pl-e">version</span>=<span class="pl-s"><span class="pl-pds">"</span>3.0<span class="pl-pds">"</span></span>>
<<span class="pl-ent">xsl</span><span class="pl-ent">:</span><span class="pl-ent">variable</span> <span class="pl-e">name</span>=<span class="pl-s"><span class="pl-pds">"</span>unit-converter<span class="pl-pds">"</span></span>
<span class="pl-e">select</span>=<span class="pl-s"><span class="pl-pds">"</span>function(</span>
<span class="pl-s"> $value as xs:decimal,</span>
<span class="pl-s"> $f as function(item()*) as item()*</span>
<span class="pl-s"> )</span>
<span class="pl-s"> as xs:decimal</span>
<span class="pl-s"> {$f($value)}<span class="pl-pds">"</span></span>/>
<<span class="pl-ent">xsl</span><span class="pl-ent">:</span><span class="pl-ent">variable</span> <span class="pl-e">name</span>=<span class="pl-s"><span class="pl-pds">"</span>feet-to-meters<span class="pl-pds">"</span></span>
<span class="pl-e">select</span>=<span class="pl-s"><span class="pl-pds">"</span>function(</span>
<span class="pl-s"> $a as xs:decimal</span>
<span class="pl-s"> )</span>
<span class="pl-s"> as xs:decimal</span>
<span class="pl-s"> {$a * 0.3048}<span class="pl-pds">"</span></span>/>
<<span class="pl-ent">xsl</span><span class="pl-ent">:</span><span class="pl-ent">template</span> <span class="pl-e">match</span>=<span class="pl-s"><span class="pl-pds">"</span>data[unit='feet']<span class="pl-pds">"</span></span>>
<<span class="pl-ent">xsl</span><span class="pl-ent">:</span><span class="pl-ent">copy</span>>
<<span class="pl-ent">altitude</span>>
<<span class="pl-ent">xsl</span><span class="pl-ent">:</span><span class="pl-ent">value-of</span> <span class="pl-e">select</span>=<span class="pl-s"><span class="pl-pds">"</span>$unit-converter(altitude, $feet-to-meters)<span class="pl-pds">"</span></span>/>
</<span class="pl-ent">altitude</span>>
<<span class="pl-ent">unit</span>>meters</<span class="pl-ent">unit</span>>
</<span class="pl-ent">xsl</span><span class="pl-ent">:</span><span class="pl-ent">copy</span>>
</<span class="pl-ent">xsl</span><span class="pl-ent">:</span><span class="pl-ent">template</span>>
</<span class="pl-ent">xsl</span><span class="pl-ent">:</span><span class="pl-ent">stylesheet</span>></pre>
</div>
<p>I run this test with Oxygen 14.2 (which includes the Oxygen patch) and the test goes through successfully. However, I noticed that with this patch it is compulsory to specify the
<code>@xslt-version</code>with the value '3.0' when testing an XSLT 3.0. If the attribute is not provided, the Oxygen ant file complains that XPath 3.0 is needed to run the test.</p>
<p>If the patch is changed from:</p>
<div class="highlight highlight-text-xml">
<pre><<span class="pl-ent">stylesheet</span> <span class="pl-e">version</span>=<span class="pl-s"><span class="pl-pds">"</span>{( @xslt-version, '2.0' )[1]}<span class="pl-pds">"</span></span>></pre>
</div>
<p>to:</p>
<div class="highlight highlight-text-xml">
<pre><<span class="pl-ent">stylesheet</span> <span class="pl-e">version</span>=<span class="pl-s"><span class="pl-pds">"</span>{if ( @xslt-version, '3.0' ) then '3' else '2'}<span class="pl-pds">"</span></span>></pre>
</div>
<p>the XSpec test runs correctly even if <code>@xslt-version</code> is not provided.
</p>
<p><br>
</p>
<p>I wonder if this implementation may be more suitable as it does not force to specify the
<code>@xslt-version</code> in the XSpec test, one only needs to specify the XSLT version in the actual XSL stylesheet. It also seems to me more consistent when writing XSpec tests for XSLT 2.0 as it is not required to specify
<code>@xslt-version</code> in the XSpec test. </p>
<p><br>
</p>
<p>Unfortunately I'm unable to test this implementation when running XSpec from the command line as XSLT 3.0 requires saxon9ee.jar (I only have saxon9he.jar available).
</p>
</div>
</div>
<br>
</div>
<P>Oxford University Press (UK) Disclaimer</P>
<P>This message is confidential. You should not copy it or disclose its contents
to anyone. You may use and apply the information for the intended purpose only.
OUP does not accept legal responsibility for the contents of this message. Any
views or opinions presented are those of the author only and not of OUP. If this
email has come to you in error, please delete it, along with any attachments.
Please note that OUP may intercept incoming and outgoing email
communications.</P>
</body>
</html>