| 
 
Subject: RE: [xsl] probably a XPath mistake From: "Michael Kay" <mike@xxxxxxxxxxxx> Date: Tue, 30 Jan 2007 08:58:45 -0000  | 
This does look as if the JDK 5 processor had a pretty nasty bug.
The code seems to be written on the assumption that
key('vertex',@from)
will select data from EMBEDDING.XML; but the context node at the time is in
GRAPH.XML, so that is where the key should search. I'm afraid the fix for
this in XSLT 1.0 is tedious: my advice, since you're switching processors
anyway, would be to switch to XSLT 2.0 and Saxon, where you can write
key('vertex', @from, $embedding)
having declared the global variable:
<xsl:variable name="embedding" select="/"/>
Michael Kay
http://www.saxonica.com/ 
> -----Original Message-----
> From: Nico Van Cleemput [mailto:Nicolas.VanCleemput@xxxxxxxx] 
> Sent: 30 January 2007 07:46
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: [xsl] probably a XPath mistake
> 
> Hi,
> 
> in our application we use XSLT to construct a svg from some 
> of our XML-files. This worked find with java 5 until recently 
> someone upgraded to java 6 and it no longer works. I guess 
> there was always something wrong but the standard XSLT 
> processor in Java 5 probably wasn't that strict.
> 
> I have included the XSLT file, both the input files and the output.  
> The problem is of course that there appears NaN. The 
> transform is run on embedding.xml and document('graph') 
> returns the graph.xml file. My guess is that the key looks 
> for the coordinates inside the graph.xml file because 
> everything works fine in the part that draws the vertices. 
> The desired output is of course the output in java 5.
> 
> Can anyone help me on this?
> 
> Thanks,
> Nico Van Cleemput
> Ghent University
> 
> XSLT:
> <?xml version="1.0" encoding="ISO-8859-1"?> <xsl:transform 
> version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/
> Transform" xmlns:svg="http://www.w3.org/2000/svg">
>      <xsl:param name="linefactor"/>
>      <xsl:key name="vertex" match="coordinates" use="@id"/>
>      <xsl:template match="embedding">
>          <svg:svg width="3" height="3">
>              <xsl:apply-templates select="document('graph')/graph"/>
>              <xsl:apply-templates select="coordinates"/>
>          </svg:svg>
>      </xsl:template>
>      <xsl:template match="coordinates">
>          <svg:circle r="{0.075*$linefactor}" 
> style="stroke:black; stroke-width:{0.05*$linefactor}; 
> fill:white;" cx="{number(double[1]/ @value)+1.5}" 
> cy="{1.5-number(double[2]/@value)}"/>
>      </xsl:template>
>      <xsl:template match="edge">
>          <svg:line style="stroke:black; stroke-width:{0.05* 
> $linefactor}; fill:none;" x1="{number(key('vertex',@from)/double[1]/
> @value)+1.5}" 
> y1="{1.5-number(key('vertex',@from)/double[2]/@value)}"  
> x2="{number(key('vertex',@to)/double[1]/@value)+1.5}" 
> y2="{1.5-number (key('vertex',@to)/double[2]/@value)}"/>
>      </xsl:template>
> </xsl:transform>
> 
> EMBEDDING.XML:
> <?xml version="1.0" encoding="UTF-8"?>
> <embedding dimension="2">
>       <coordinates id="0">
>          <double value="-1.0" />
>          <double value="-1.0" />
>       </coordinates>
>       <coordinates id="1">
>           <double value="1.0" />
>           <double value="1.0" />
>       </coordinates>
> </embedding>
> 
> GRAPH.XML:
> <?xml version="1.0" encoding="UTF-8"?>
> <graph nrofvertices="2">
>     <edge from="0" to="1" />
> </graph>
> 
> 
> OUTPUT in java 5:
> <?xml version="1.0" encoding="UTF-8"?>
> <svg:svg xmlns:svg="http://www.w3.org/2000/svg" width="3" height="3">
>    <svg:line style="stroke:black; stroke-width:0.025; fill:none;"  
> x1="0.5" y1="2.5" x2="2.5" y2="0.5"/>
>    <svg:circle r="0.0375" style="stroke:black; 
> stroke-width:0.025; fill:white;" cx="0.5" cy="2.5"/>
>    <svg:circle r="0.0375" style="stroke:black; 
> stroke-width:0.025; fill:white;" cx="2.5" cy="0.5"/> </svg:svg>
> 
> OUTPUT in java 6:
> <?xml version="1.0" encoding="UTF-8"?>
> <svg:svg xmlns:svg="http://www.w3.org/2000/svg" width="3" height="3">
>    <svg:line style="stroke:black; stroke-width:0.025; fill:none;"  
> x1="NaN" y1="NaN" x2="NaN" y2="NaN"/>
>    <svg:circle r="0.0375" style="stroke:black; 
> stroke-width:0.025; fill:white;" cx="0.5" cy="2.5"/>
>    <svg:circle r="0.0375" style="stroke:black; 
> stroke-width:0.025; fill:white;" cx="2.5" cy="0.5"/> </svg:svg>
| Current Thread | 
|---|
  | 
| <- Previous | Index | Next -> | 
|---|---|---|
| Re: [xsl] probably a XPath mistake, George Cristian Bina | Thread | Re: [xsl] probably a XPath mistake, Nico Van Cleemput | 
| Re: [xsl] probably a XPath mistake, George Cristian Bina | Date | Re: [xsl] probably a XPath mistake, Nico Van Cleemput | 
| Month |