Re: Fwd: [xsl] curly braces

Subject: Re: Fwd: [xsl] curly braces
From: Michael Kay <mike@xxxxxxxxxxxx>
Date: Thu, 20 Sep 2012 00:11:46 +0100
Ihe,

Your stylesheet contains the element

<this:fieldName elem="productThumbnail" plural="thumbnails" bracketType="{{"/>

as part of the definition of a global variable. If this is executed as a literal result element the result will be the element

<this:fieldName elem="productThumbnail" plural="thumbnails" bracketType="{"/>

(with a single "{").

But you are not executing it as a literal result element, you are reading it from the source XML of the stylesheet using the function call doc(''). In elements read from source documents, curly braces have no special significance, so "{{" represents itself. If the element were in a normal source document, then bracketType="{" would work fine, but because the element has a dual role (as an element in a source document and as a literal result element in a stylesheet), bracketType="{" is an error.

The idea of reading the source document using document('') is a hack used in XSLT 1.0 to get around the restrictions on using result tree fragments. It is never needed in XSLT 2.0: use the global variable directly. (It's also a very inefficient hack, because the stylesheet has to be parsed twice.)

Michael Kay
Saxonica


On 19/09/2012 12:03, Michael Kay wrote:
Could you please construct a complete example that demonstrates the
problem? We haven't been able to reproduce it.

(Ideally, product-specific issues shouldn't really go on this list.
But now the thread is started here, perhaps it's best to keep it here.)

Michael Kay
Saxonica

On 19/09/2012 11:47, Ihe Onwuka wrote:
The version that comes with Kernow. Saxon HE 9.3.0.5

On Wed, Sep 19, 2012 at 11:42 AM, O'Neil Delpratt
<oneil@xxxxxxxxxxxx> wrote:
Hi,

According to the specification a single curly bracket is not allowed
in an attribute. Please see:

http://www.w3.org/TR/xslt20/#attribute-value-templates

In Saxon 9.4.0.5 the bracket {{ is replaced by the single bracket {,
which is correct.
Which version of Saxon are you using?




-------- Original Message -------- Subject: [xsl] curly braces Date: Wed, 19 Sep 2012 04:19:53 +0100 From: Ihe Onwuka <ihe.onwuka@xxxxxxxxxxxxxx> Reply-To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx To: xsl-list <xsl-list@xxxxxxxxxxxxxxxxxxxxxx>


Not sure whether this is a saxon or XSLT issue (or just me for that matter).

Saxon wouldn't allow me to  set the bracketType attrtibute to "{"
(Unexpected token "<eof>" in path expression)

     <xsl:variable name="fieldNames" as="element()*">
        <this:fieldName elem="product" plural="products"
bracketType="["/>
        <this:fieldName elem="productThumbnail" plural="thumbnails"
bracketType="{{"/>
     </xsl:variable

so I set it to "{{" as above, which Saxon accepts but inserts {{ into
my result tree instead of {.

I have a workaround (substring the bracketType attribute) but would
like an explanation please.






kind regards,


--
O'Neil Delpratt
Software Developer, Saxonica Limited
Email: oneil@xxxxxxxxxxxx
Tel: +44 118 946 5894
Web: http://www.saxonica.com
Saxonica Community Site: http://dev.saxonica.com

Current Thread