xsl-list
[Top] [All Lists]

RE: xsl:result-document and Saxon serializer problems

2005-08-21 05:25:32
I suspect the answer to questions 1 and 2 lies in the bits of the stylesheet
that you haven't shown us. 

The answer to question 3 is that you seem to have misunderstood
exclude-result-prefixes:

(a) it only affects the behavior of literal result elements, and I don't see
any literal result elements in your code

(b) its scope is static rather than dynamic. If you put the attribute on an
element such as xsl:result-document, it only affects literal result elements
that are physically contained within that xsl:result-document element.

To work out where the "thin air" attributes are coming from, I can assure
you Saxon isn't making them up! You might find that the -T trace option
helps with your debugging.

Michael Kay
http://www.saxonica.com/


-----Original Message-----
From: Kenneth Stephen 
[mailto:marvin(_dot_)the(_dot_)cynical(_dot_)robot(_at_)gmail(_dot_)com] 
Sent: 21 August 2005 05:24
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: [xsl] xsl:result-document and Saxon serializer problems

Hi,

    I have the following input data :

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" 
      "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd";>
<svg xmlns="http://www.w3.org/2000/svg";
      xmlns:img-parms="http://xml.megadodo.umb/svg";
      img-parms:width="" img-parms:height="" img-parms:x="" 
img-parms:y="">
      <rect img-parms:x="" img-parms:y="" img-parms:width="" 
img-parms:height="" 
              img-parms:rx="" img-parms:ry="" img-parms:style="">
              <img-parms:data />
      </rect>
</svg>

    ....and the following code :

                      <xsl:result-document href="{$svg-filename}"
doctype-public="-//W3C//DTD SVG 1.1//EN"
                              
doctype-system="http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd";
exclude-result-prefixes="img-parms">
                              <xsl:call-template name="create-svg">
                                      <xsl:with-param 
name="template-name"
select="concat($config-dir,$chart-name,'Template.xml')" />
                                      <xsl:with-param 
name="img-width" select="$width" />
                                      <xsl:with-param 
name="img-height" select="$height" />
                              </xsl:call-template>
                      </xsl:result-document>

    <xsl:template name="create-svg">
          <xsl:param name="template-name" />
          <xsl:param name="img-width" />
          <xsl:param name="img-height" />
    
            <xsl:if test="$template-name = '' or $img-width = '' or
$img-height = ''">
              <xsl:message terminate="yes">Invalid input 
parameters</xsl:message>
          </xsl:if>
          <xsl:apply-templates 
select="document($template-name)/*" mode="chart">
              <xsl:with-param name="template-name" 
select="$template-name"/>
              <xsl:with-param name="img-width" select="$img-width" />
              <xsl:with-param name="img-height" 
select="$img-height" />
          </xsl:apply-templates>
    </xsl:template>

    <xsl:template match="@*[namespace-uri() != 
'http://xml.megadodo.umb/svg'] |
              node()[namespace-uri() != 
'http://xml.megadodo.umb/svg']" mode="chart" >
          <xsl:param name="template-name" />
      <xsl:param name="img-width" />
          <xsl:param name="img-height" />
    
      <xsl:copy>
              <xsl:apply-templates select="@*|node()" mode="chart">
                          <xsl:with-param 
name="template-name" select="$template-name"/>
                      <xsl:with-param name="img-width" 
select="$img-width" />
                      <xsl:with-param name="img-height" 
select="$img-height" />
              </xsl:apply-templates>
      </xsl:copy>
    </xsl:template>
    
    <xsl:template match="@*[namespace-uri() =
'http://xml.megadodo.umb/svg']" mode="chart">
          <xsl:param name="template-name" />
      <xsl:param name="img-width" />
          <xsl:param name="img-height" />
    
      <xsl:attribute name="{local-name()}">
              <xsl:choose>
                      <xsl:when test="local-name() = 'height'">
                              <xsl:value-of select="$img-height" />
                      </xsl:when>
                      <xsl:when test="local-name() = 'width'">
                              <xsl:value-of select="$img-width" />
                      </xsl:when>
                      <xsl:when test="local-name() = 'x' and 
../local-name() = 'svg'">
                              <xsl:value-of select="'0'" />
                      </xsl:when>
                      <xsl:when test="local-name() = 'y' and 
../local-name() = 'svg'">
                              <xsl:value-of select="'0'" />
                      </xsl:when>
                      <xsl:when test="local-name() = 'x' and 
../local-name() = 'rect'">
                              <xsl:value-of select="'0'" />
                      </xsl:when>
                      <xsl:when test="local-name() = 'y' and 
../local-name() = 'rect'">
                              <xsl:value-of select="'0'" />
                      </xsl:when>
                      <xsl:when test="local-name() = 'style'">
                              <xsl:value-of 
select="'fill:yellow;stroke:black'" />
                      </xsl:when>
                      <xsl:otherwise />
              </xsl:choose>
      </xsl:attribute>
    </xsl:template>
    
    <xsl:template match="img-parms:data" mode="chart" />
    
    <xsl:template match="text()[../local-name() = 'rect']"
mode="chart" priority="2" />

    This produces the following output :

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg
  PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd";>
<svg xmlns="http://www.w3.org/2000/svg";
xmlns:img-parms="http://xml.megadodo.umb/svg";
xmlns:xlink="http://www.w3.org/1999/xlink"; width="500" height="500"
x="0" y="0" preserveAspectRatio="xMidYMid meet" zoomAndPan="magnify"
version="1.1" contentScriptType="text/ecmascript"
contentStyleType="text/css">
      <rect x="0" y="0" width="500" height="500" rx="" ry=""
style="fill:yellow;stroke:black"/>
</svg>

Questions:

1.  Why is the saxon serializer defining the namespace of xlink on the
svg element?
2.  Where in heavens name are the preserveAspectRation, zoomAndPan,
etc attributes coming from? Saxon appears to be conjuring them out of
thin air.
3.  The XSLT 2.0 draft specifies that....

<quote>
3.5 Standard Attributes

[Definition: There are a number of standard attributes that may appear
on any XSLT element: specifically version, exclude-result-prefixes,
extension-element-prefixes, xpath-default-namespace,
default-collation, and use-when.]</quote>

    ....and saxon appears to be ignoring the exclude-result-prefixes
that I've specified on the result-document element. Is this valid
behaviour?

Thanks,
Kenneth

--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: 
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--





--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--



<Prev in Thread] Current Thread [Next in Thread>