xsl-list
[Top] [All Lists]

RE: xsl:result-document and Saxon serializer problems

2005-08-21 11:38:56
Your mystery attributes, as well as the XLink namespace declaration, are
coming from the SVG DTD. I don't know my way around this DTD, so I can't
tell you exactly where they are declared, but if you remove the DOCTYPE
declaration from your source document then they disappear from the result.

Note that if your source document references a DTD, then attributes defined
in the DTD with a default value are treated by XSLT just as if they were
present in the source document. Declaring namespaces in a DTD is a practice
I regard as quite abominable, but because DTDs are part of the XML core
which treats namespace declarations just like ordinary attributes, DTDs can
do this and some do.

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

Michael,

    I'm posting the complete code, below as well as the output
produced via -T. I do have a question about your answer, below,
though. In XSLT 1.0, whenever I applied exlcude-result-prefixes to the
xsl-stylesheet element, it worked on the entire result tree - not just
LRE's. Atleast thats the way I remember it - I may be able to work out
a testcase later. Did the behaviour of this attribute change in XSLT
2.0? It seems to me that this behaviour is much more useful over the
entire result document rather than LRE's only. Why is this defined the
way it is in 2.0?

Nothing has changed here: except that the exclude-result-prefixes attribute
is now available on any XSLT element, and applies to all LREs lexically
contained within that element. Previously it could be specified only on the
xsl:stylesheet element or on the literal result element itself. But e-r-p
has always affected LREs only.

It might be true that a dynamic scope would sometimes be more useful than a
static scope, but that's not the way it is (and it's not the way it was in
1.0.)

    Also, I didnt understand your point (b). I did want it to apply
only to everything within that result-document element.

Fine, I was trying to work out the thinking behind your incorrect code and I
obviously got it wrong. But the code was still incorrect: the only element
child of xsl:result-document is a call-template instruction, and e-r-p has
no effect on a call-template instruction. I guessed that you had written it
because you thought e-r-p might somehow be passed via the call-template to
the template being called as a sort of implicit parameter.

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



Input data svg/config/ChartTemplate.xml:

<?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>

Code file svg/code/PageTemplate.xsl :

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
      xmlns:img-parms="http://xml.megadodo.umb/svg";
    version="2.0">
    
    <xsl:output doctype-public="-//W3C//DTD XHTML 1.0 
Transitional//EN"
      
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transit
ional.dtd"
method="xml" />
    
    <xsl:param name="width" select="'500'" />
    <xsl:param name="height" select="'500'" />
    
    <xsl:variable name="chart-name" select="'Chart'" />
    <xsl:variable name="chart-location" select="'svg/data/'" />
    <xsl:variable name="config-dir" select="'../config/'" />
    
    <xsl:include href="SVGRoutines.xsl" />
    
    <xsl:template match="/">
      <html>
              <head><title>A title</title></head>
              <body>
                      <xsl:variable name="svg-filename"
select="concat($chart-location,$chart-name,'.svg')" />
                      <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>
                      <object data="{$svg-filename}" width="{$width}"
height="{$height}" type="image/svg+xml" />
              </body>
      </html>
    </xsl:template>
    
</xsl:stylesheet>

Code file svg/code/SVGRoutines.xsl:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
      xmlns:img-parms="http://xml.megadodo.umb/svg";
      xmlns:svg="http://www.w3.org/2000/svg";
    version="2.0">

    <!-- xsl:output doctype-public="-//W3C//DTD SVG 1.1//EN"
      
doctype-system="http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"; /-->
    
    <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" />
    
</xsl:stylesheet>

Invocation : java net.sf.saxon.Transform -T svg/code/PageTemplate.xsl
svg/code/PageTemplate.xsl

Output produced (stdout + stderr) :

<trace saxon-version="8.5" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
 <xsl:variable name="config-dir" select="'../config/'" line="14"
module="PageTemplate.xsl">
 </xsl:variable>
 <xsl:variable name="chart-location" select="'svg/data/'" line="13"
module="PageTemplate.xsl">
 </xsl:variable>
 <xsl:variable name="height" select="'500'" line="10" 
module="PageTemplate.xsl">
 </xsl:variable>
 <xsl:variable name="chart-name" select="'Chart'" line="12"
module="PageTemplate.xsl">
 </xsl:variable>
 <xsl:variable name="width" select="'500'" line="9" 
module="PageTemplate.xsl">
 </xsl:variable>
 <source node="/" line="0" file="PageTemplate.xsl">
  <xsl:template match="/" line="18" module="PageTemplate.xsl">
   <LRE name="html" line="19" module="PageTemplate.xsl">
    <LRE name="head" line="20" module="PageTemplate.xsl">
     <LRE name="title" line="20" module="PageTemplate.xsl">
     </LRE>
    </LRE>
    <LRE name="body" line="21" module="PageTemplate.xsl">
     <xsl:variable name="svg-filename" line="22" 
module="PageTemplate.xsl">
      <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" line="24"
module="PageTemplate.xsl">
       <xsl:call-template name="create-svg" line="25" 
module="PageTemplate.xsl">
        <xsl:template name="create-svg" line="10" 
module="SVGRoutines.xsl">
         <xsl:variable name="template-name" line="11" 
module="SVGRoutines.xsl">
         </xsl:variable>
         <xsl:variable name="img-width" line="12" 
module="SVGRoutines.xsl">
         </xsl:variable>
         <xsl:variable name="img-height" line="13" 
module="SVGRoutines.xsl">
         </xsl:variable>
         <xsl:if test="$template-name = '' or $img-width = '' or
$img-height = ''" line="15" module="SVGRoutines.xsl">
         </xsl:if>
         <xsl:apply-templates select="document($template-name)/*"
mode="chart" line="18" module="SVGRoutines.xsl">
          <source node="/svg" line="6" file="ChartTemplate.xml">
           <xsl:template match="@*[namespace-uri() !=
'http://xml.megadodo.umb/svg'] | node()[namespace-uri() !=
'http://xml.megadodo.umb/svg']" mode="chart" line="26"
module="SVGRoutines.xsl">
            <xsl:variable name="template-name" line="27"
module="SVGRoutines.xsl">
            </xsl:variable>
            <xsl:variable name="img-width" line="28" 
module="SVGRoutines.xsl">
            </xsl:variable>
            <xsl:variable name="img-height" line="29" 
module="SVGRoutines.xsl">
            </xsl:variable>
            <xsl:copy line="31" module="SVGRoutines.xsl">
             <xsl:apply-templates select="@*|node()" mode="chart"
line="32" module="SVGRoutines.xsl">
              <source node="/svg/@img-parms:width" line="6"
file="ChartTemplate.xml">
               <xsl:template match="@*[namespace-uri() =
'http://xml.megadodo.umb/svg']" mode="chart" line="40"
module="SVGRoutines.xsl">
                <xsl:variable name="template-name" line="41"
module="SVGRoutines.xsl">
                </xsl:variable>
                <xsl:variable name="img-width" line="42"
module="SVGRoutines.xsl">
                </xsl:variable>
                <xsl:variable name="img-height" line="43"
module="SVGRoutines.xsl">
                </xsl:variable>
                <xsl:attribute name="{local-name()}" line="45"
module="SVGRoutines.xsl">
                 <xsl:choose line="46" module="SVGRoutines.xsl">
                  <xsl:value-of select="$img-width" line="51"
module="SVGRoutines.xsl">
                  </xsl:value-of>
                 </xsl:choose>
                </xsl:attribute>
               </xsl:template>
              </source><!-- /svg/@img-parms:width -->
              <source node="/svg/@img-parms:height" line="6"
file="ChartTemplate.xml">
               <xsl:template match="@*[namespace-uri() =
'http://xml.megadodo.umb/svg']" mode="chart" line="40"
module="SVGRoutines.xsl">
                <xsl:variable name="template-name" line="41"
module="SVGRoutines.xsl">
                </xsl:variable>
                <xsl:variable name="img-width" line="42"
module="SVGRoutines.xsl">
                </xsl:variable>
                <xsl:variable name="img-height" line="43"
module="SVGRoutines.xsl">
                </xsl:variable>
                <xsl:attribute name="{local-name()}" line="45"
module="SVGRoutines.xsl">
                 <xsl:choose line="46" module="SVGRoutines.xsl">
                  <xsl:value-of select="$img-height" line="48"
module="SVGRoutines.xsl">
                  </xsl:value-of>
                 </xsl:choose>
                </xsl:attribute>
               </xsl:template>
              </source><!-- /svg/@img-parms:height -->
              <source node="/svg/@img-parms:x" line="6"
file="ChartTemplate.xml">
               <xsl:template match="@*[namespace-uri() =
'http://xml.megadodo.umb/svg']" mode="chart" line="40"
module="SVGRoutines.xsl">
                <xsl:variable name="template-name" line="41"
module="SVGRoutines.xsl">
                </xsl:variable>
                <xsl:variable name="img-width" line="42"
module="SVGRoutines.xsl">
                </xsl:variable>
                <xsl:variable name="img-height" line="43"
module="SVGRoutines.xsl">
                </xsl:variable>
                <xsl:attribute name="{local-name()}" line="45"
module="SVGRoutines.xsl">
                 <xsl:choose line="46" module="SVGRoutines.xsl">
                  <xsl:value-of select="'0'" line="54" 
module="SVGRoutines.xsl">
                  </xsl:value-of>
                 </xsl:choose>
                </xsl:attribute>
               </xsl:template>
              </source><!-- /svg/@img-parms:x -->
              <source node="/svg/@img-parms:y" line="6"
file="ChartTemplate.xml">
               <xsl:template match="@*[namespace-uri() =
'http://xml.megadodo.umb/svg']" mode="chart" line="40"
module="SVGRoutines.xsl">
                <xsl:variable name="template-name" line="41"
module="SVGRoutines.xsl">
                </xsl:variable>
                <xsl:variable name="img-width" line="42"
module="SVGRoutines.xsl">
                </xsl:variable>
                <xsl:variable name="img-height" line="43"
module="SVGRoutines.xsl">
                </xsl:variable>
                <xsl:attribute name="{local-name()}" line="45"
module="SVGRoutines.xsl">
                 <xsl:choose line="46" module="SVGRoutines.xsl">
                  <xsl:value-of select="'0'" line="57" 
module="SVGRoutines.xsl">
                  </xsl:value-of>
                 </xsl:choose>
                </xsl:attribute>
               </xsl:template>
              </source><!-- /svg/@img-parms:y -->
              <source node="/svg/@preserveAspectRatio" line="6"
file="ChartTemplate.xml">
               <xsl:template match="@*[namespace-uri() !=
'http://xml.megadodo.umb/svg'] | node()[namespace-uri() !=
'http://xml.megadodo.umb/svg']" mode="chart" line="26"
module="SVGRoutines.xsl">
                <xsl:variable name="template-name" line="27"
module="SVGRoutines.xsl">
                </xsl:variable>
                <xsl:variable name="img-width" line="28"
module="SVGRoutines.xsl">
                </xsl:variable>
                <xsl:variable name="img-height" line="29"
module="SVGRoutines.xsl">
                </xsl:variable>
                <xsl:copy line="31" module="SVGRoutines.xsl">
                </xsl:copy>
               </xsl:template>
              </source><!-- /svg/@preserveAspectRatio -->
              <source node="/svg/@zoomAndPan" line="6" 
file="ChartTemplate.xml">
               <xsl:template match="@*[namespace-uri() !=
'http://xml.megadodo.umb/svg'] | node()[namespace-uri() !=
'http://xml.megadodo.umb/svg']" mode="chart" line="26"
module="SVGRoutines.xsl">
                <xsl:variable name="template-name" line="27"
module="SVGRoutines.xsl">
                </xsl:variable>
                <xsl:variable name="img-width" line="28"
module="SVGRoutines.xsl">
                </xsl:variable>
                <xsl:variable name="img-height" line="29"
module="SVGRoutines.xsl">
                </xsl:variable>
                <xsl:copy line="31" module="SVGRoutines.xsl">
                </xsl:copy>
               </xsl:template>
              </source><!-- /svg/@zoomAndPan -->
              <source node="/svg/@version" line="6" 
file="ChartTemplate.xml">
               <xsl:template match="@*[namespace-uri() !=
'http://xml.megadodo.umb/svg'] | node()[namespace-uri() !=
'http://xml.megadodo.umb/svg']" mode="chart" line="26"
module="SVGRoutines.xsl">
                <xsl:variable name="template-name" line="27"
module="SVGRoutines.xsl">
                </xsl:variable>
                <xsl:variable name="img-width" line="28"
module="SVGRoutines.xsl">
                </xsl:variable>
                <xsl:variable name="img-height" line="29"
module="SVGRoutines.xsl">
                </xsl:variable>
                <xsl:copy line="31" module="SVGRoutines.xsl">
                </xsl:copy>
               </xsl:template>
              </source><!-- /svg/@version -->
              <source node="/svg/@contentScriptType" line="6"
file="ChartTemplate.xml">
               <xsl:template match="@*[namespace-uri() !=
'http://xml.megadodo.umb/svg'] | node()[namespace-uri() !=
'http://xml.megadodo.umb/svg']" mode="chart" line="26"
module="SVGRoutines.xsl">
                <xsl:variable name="template-name" line="27"
module="SVGRoutines.xsl">
                </xsl:variable>
                <xsl:variable name="img-width" line="28"
module="SVGRoutines.xsl">
                </xsl:variable>
                <xsl:variable name="img-height" line="29"
module="SVGRoutines.xsl">
                </xsl:variable>
                <xsl:copy line="31" module="SVGRoutines.xsl">
                </xsl:copy>
               </xsl:template>
              </source><!-- /svg/@contentScriptType -->
              <source node="/svg/@contentStyleType" line="6"
file="ChartTemplate.xml">
               <xsl:template match="@*[namespace-uri() !=
'http://xml.megadodo.umb/svg'] | node()[namespace-uri() !=
'http://xml.megadodo.umb/svg']" mode="chart" line="26"
module="SVGRoutines.xsl">
                <xsl:variable name="template-name" line="27"
module="SVGRoutines.xsl">
                </xsl:variable>
                <xsl:variable name="img-width" line="28"
module="SVGRoutines.xsl">
                </xsl:variable>
                <xsl:variable name="img-height" line="29"
module="SVGRoutines.xsl">
                </xsl:variable>
                <xsl:copy line="31" module="SVGRoutines.xsl">
                </xsl:copy>
               </xsl:template>
              </source><!-- /svg/@contentStyleType -->
              <source node="/svg/text()[1]" line="6" 
file="ChartTemplate.xml">
               <xsl:template match="@*[namespace-uri() !=
'http://xml.megadodo.umb/svg'] | node()[namespace-uri() !=
'http://xml.megadodo.umb/svg']" mode="chart" line="26"
module="SVGRoutines.xsl">
                <xsl:variable name="template-name" line="27"
module="SVGRoutines.xsl">
                </xsl:variable>
                <xsl:variable name="img-width" line="28"
module="SVGRoutines.xsl">
                </xsl:variable>
                <xsl:variable name="img-height" line="29"
module="SVGRoutines.xsl">
                </xsl:variable>
                <xsl:copy line="31" module="SVGRoutines.xsl">
                </xsl:copy>
               </xsl:template>
              </source><!-- /svg/text()[1] -->
              <source node="/svg/rect[1]" line="8" 
file="ChartTemplate.xml">
               <xsl:template match="@*[namespace-uri() !=
'http://xml.megadodo.umb/svg'] | node()[namespace-uri() !=
'http://xml.megadodo.umb/svg']" mode="chart" line="26"
module="SVGRoutines.xsl">
                <xsl:variable name="template-name" line="27"
module="SVGRoutines.xsl">
                </xsl:variable>
                <xsl:variable name="img-width" line="28"
module="SVGRoutines.xsl">
                </xsl:variable>
                <xsl:variable name="img-height" line="29"
module="SVGRoutines.xsl">
                </xsl:variable>
                <xsl:copy line="31" module="SVGRoutines.xsl">
                 <xsl:apply-templates select="@*|node()" mode="chart"
line="32" module="SVGRoutines.xsl">
                  <source node="/svg/rect[1]/@img-parms:x" line="8"
file="ChartTemplate.xml">
                   <xsl:template match="@*[namespace-uri() =
'http://xml.megadodo.umb/svg']" mode="chart" line="40"
module="SVGRoutines.xsl">
                    <xsl:variable name="template-name" line="41"
module="SVGRoutines.xsl">
                    </xsl:variable>
                    <xsl:variable name="img-width" line="42"
module="SVGRoutines.xsl">
                    </xsl:variable>
                    <xsl:variable name="img-height" line="43"
module="SVGRoutines.xsl">
                    </xsl:variable>
                    <xsl:attribute name="{local-name()}" line="45"
module="SVGRoutines.xsl">
                     <xsl:choose line="46" module="SVGRoutines.xsl">
                      <xsl:value-of select="'0'" line="60"
module="SVGRoutines.xsl">
                      </xsl:value-of>
                     </xsl:choose>
                    </xsl:attribute>
                   </xsl:template>
                  </source><!-- /svg/rect[1]/@img-parms:x -->
                  <source node="/svg/rect[1]/@img-parms:y" line="8"
file="ChartTemplate.xml">
                   <xsl:template match="@*[namespace-uri() =
'http://xml.megadodo.umb/svg']" mode="chart" line="40"
module="SVGRoutines.xsl">
                    <xsl:variable name="template-name" line="41"
module="SVGRoutines.xsl">
                    </xsl:variable>
                    <xsl:variable name="img-width" line="42"
module="SVGRoutines.xsl">
                    </xsl:variable>
                    <xsl:variable name="img-height" line="43"
module="SVGRoutines.xsl">
                    </xsl:variable>
                    <xsl:attribute name="{local-name()}" line="45"
module="SVGRoutines.xsl">
                     <xsl:choose line="46" module="SVGRoutines.xsl">
                      <xsl:value-of select="'0'" line="63"
module="SVGRoutines.xsl">
                      </xsl:value-of>
                     </xsl:choose>
                    </xsl:attribute>
                   </xsl:template>
                  </source><!-- /svg/rect[1]/@img-parms:y -->
                  <source node="/svg/rect[1]/@img-parms:width"
line="8" file="ChartTemplate.xml">
                   <xsl:template match="@*[namespace-uri() =
'http://xml.megadodo.umb/svg']" mode="chart" line="40"
module="SVGRoutines.xsl">
                    <xsl:variable name="template-name" line="41"
module="SVGRoutines.xsl">
                    </xsl:variable>
                    <xsl:variable name="img-width" line="42"
module="SVGRoutines.xsl">
                    </xsl:variable>
                    <xsl:variable name="img-height" line="43"
module="SVGRoutines.xsl">
                    </xsl:variable>
                    <xsl:attribute name="{local-name()}" line="45"
module="SVGRoutines.xsl">
                     <xsl:choose line="46" module="SVGRoutines.xsl">
                      <xsl:value-of select="$img-width" line="51"
module="SVGRoutines.xsl">
                      </xsl:value-of>
                     </xsl:choose>
                    </xsl:attribute>
                   </xsl:template>
                  </source><!-- /svg/rect[1]/@img-parms:width -->
                  <source node="/svg/rect[1]/@img-parms:height"
line="8" file="ChartTemplate.xml">
                   <xsl:template match="@*[namespace-uri() =
'http://xml.megadodo.umb/svg']" mode="chart" line="40"
module="SVGRoutines.xsl">
                    <xsl:variable name="template-name" line="41"
module="SVGRoutines.xsl">
                    </xsl:variable>
                    <xsl:variable name="img-width" line="42"
module="SVGRoutines.xsl">
                    </xsl:variable>
                    <xsl:variable name="img-height" line="43"
module="SVGRoutines.xsl">
                    </xsl:variable>
                    <xsl:attribute name="{local-name()}" line="45"
module="SVGRoutines.xsl">
                     <xsl:choose line="46" module="SVGRoutines.xsl">
                      <xsl:value-of select="$img-height" line="48"
module="SVGRoutines.xsl">
                      </xsl:value-of>
                     </xsl:choose>
                    </xsl:attribute>
                   </xsl:template>
                  </source><!-- /svg/rect[1]/@img-parms:height -->
                  <source node="/svg/rect[1]/@img-parms:rx" line="8"
file="ChartTemplate.xml">
                   <xsl:template match="@*[namespace-uri() =
'http://xml.megadodo.umb/svg']" mode="chart" line="40"
module="SVGRoutines.xsl">
                    <xsl:variable name="template-name" line="41"
module="SVGRoutines.xsl">
                    </xsl:variable>
                    <xsl:variable name="img-width" line="42"
module="SVGRoutines.xsl">
                    </xsl:variable>
                    <xsl:variable name="img-height" line="43"
module="SVGRoutines.xsl">
                    </xsl:variable>
                    <xsl:attribute name="{local-name()}" line="45"
module="SVGRoutines.xsl">
                     <xsl:choose line="46" module="SVGRoutines.xsl">
                      <xsl:otherwise line="68" 
module="SVGRoutines.xsl">
                      </xsl:otherwise>
                     </xsl:choose>
                    </xsl:attribute>
                   </xsl:template>
                  </source><!-- /svg/rect[1]/@img-parms:rx -->
                  <source node="/svg/rect[1]/@img-parms:ry" line="8"
file="ChartTemplate.xml">
                   <xsl:template match="@*[namespace-uri() =
'http://xml.megadodo.umb/svg']" mode="chart" line="40"
module="SVGRoutines.xsl">
                    <xsl:variable name="template-name" line="41"
module="SVGRoutines.xsl">
                    </xsl:variable>
                    <xsl:variable name="img-width" line="42"
module="SVGRoutines.xsl">
                    </xsl:variable>
                    <xsl:variable name="img-height" line="43"
module="SVGRoutines.xsl">
                    </xsl:variable>
                    <xsl:attribute name="{local-name()}" line="45"
module="SVGRoutines.xsl">
                     <xsl:choose line="46" module="SVGRoutines.xsl">
                      <xsl:otherwise line="68" 
module="SVGRoutines.xsl">
                      </xsl:otherwise>
                     </xsl:choose>
                    </xsl:attribute>
                   </xsl:template>
                  </source><!-- /svg/rect[1]/@img-parms:ry -->
                  <source node="/svg/rect[1]/@img-parms:style"
line="8" file="ChartTemplate.xml">
                   <xsl:template match="@*[namespace-uri() =
'http://xml.megadodo.umb/svg']" mode="chart" line="40"
module="SVGRoutines.xsl">
                    <xsl:variable name="template-name" line="41"
module="SVGRoutines.xsl">
                    </xsl:variable>
                    <xsl:variable name="img-width" line="42"
module="SVGRoutines.xsl">
                    </xsl:variable>
                    <xsl:variable name="img-height" line="43"
module="SVGRoutines.xsl">
                    </xsl:variable>
                    <xsl:attribute name="{local-name()}" line="45"
module="SVGRoutines.xsl">
                     <xsl:choose line="46" module="SVGRoutines.xsl">
                      <xsl:value-of
select="'fill:yellow;stroke:black'" line="66"
module="SVGRoutines.xsl">
                      </xsl:value-of>
                     </xsl:choose>
                    </xsl:attribute>
                   </xsl:template>
                  </source><!-- /svg/rect[1]/@img-parms:style -->
                  <source node="/svg/rect[1]/text()[1]" line="8"
file="ChartTemplate.xml">
                   <xsl:template match="text()[../local-name() =
'rect']" mode="chart" priority="2" line="75" module="SVGRoutines.xsl">
                   </xsl:template>
                  </source><!-- /svg/rect[1]/text()[1] -->
                  <source node="/svg/rect[1]/img-parms:data[1]"
line="9" file="ChartTemplate.xml">
                   <xsl:template match="img-parms:data" mode="chart"
line="73" module="SVGRoutines.xsl">
                   </xsl:template>
                  </source><!-- /svg/rect[1]/img-parms:data[1] -->
                  <source node="/svg/rect[1]/text()[2]" line="9"
file="ChartTemplate.xml">
                   <xsl:template match="text()[../local-name() =
'rect']" mode="chart" priority="2" line="75" module="SVGRoutines.xsl">
                   </xsl:template>
                  </source><!-- /svg/rect[1]/text()[2] -->
                 </xsl:apply-templates>
                </xsl:copy>
               </xsl:template>
              </source><!-- /svg/rect[1] -->
              <source node="/svg/text()[2]" line="9" 
file="ChartTemplate.xml">
               <xsl:template match="@*[namespace-uri() !=
'http://xml.megadodo.umb/svg'] | node()[namespace-uri() !=
'http://xml.megadodo.umb/svg']" mode="chart" line="26"
module="SVGRoutines.xsl">
                <xsl:variable name="template-name" line="27"
module="SVGRoutines.xsl">
                </xsl:variable>
                <xsl:variable name="img-width" line="28"
module="SVGRoutines.xsl">
                </xsl:variable>
                <xsl:variable name="img-height" line="29"
module="SVGRoutines.xsl">
                </xsl:variable>
                <xsl:copy line="31" module="SVGRoutines.xsl">
                </xsl:copy>
               </xsl:template>
              </source><!-- /svg/text()[2] -->
             </xsl:apply-templates>
            </xsl:copy>
           </xsl:template>
          </source><!-- /svg -->
         </xsl:apply-templates>
        </xsl:template>
       </xsl:call-template>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html
  PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
<html xmlns:img-parms="http://xml.megadodo.umb/svg";><head><title>A
title</title></head><body><object data="svg/data/Chart.svg"
width="500" height="500" type="image/svg+xml"/></body></html>     
</xsl:result-document>
      <LRE name="object" line="31" module="PageTemplate.xsl">
      </LRE>
     </xsl:variable>
    </LRE>
   </LRE>
  </xsl:template>
 </source><!-- / -->
</trace>

On 8/21/05, Michael Kay <mike(_at_)saxonica(_dot_)com> wrote:
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/



resulting svd/data/Chart.svg:

<?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>

Thanks,
Kenneth
 >
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>
--~--



--~------------------------------------------------------------------
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>