This is the mail archive of the xsl-list@mulberrytech.com mailing list .


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

XSLT, Namespaces & SVG


Folks,

I have been trying to write XSLT stylesheets to transform SVG documents, and
I have encountered some challenges regarding SVG's use of namespaces.  SVG
(or at least the implementation I am working with) appears to specify a
default namespace using a parameter entity in the DTD.  When I define an
namespace for the svg prefix in my stylesheet, Xalan never appears to be
able to match any nodes by name from the SVG document.  The default
namespace is defined dynamically in the SVG DTD, and that may be causing
part of the problem, or it may be that Xalan's mechanism for binding the a
namespace dynamically is not functioning correctly.   I found a workaround
by stripping the namespace reference using the local-name() function, but
even here, the namespace parameter entity is not correctly resolved..  I
tested this particular solution with Saxon, and there it appeared to work
correctly.

The following is a representative example of the problem. I have a simple
SVG document, and a stylesheet that adds some tags and removes  some
attributes from the existing document.

I'm using Xalan 1.2.1 and Saxon 5.5.1 as my XLST processors.  The SVG
document is adapted from one generated from Adobe Illustrator 9.0. 

Am I missing something about how SVG should operate with XSLT?  Is this a
flaw in one (or both) of the specifications, or one of the implementations?

Thanks!

Sincerely,
David Kane

***************************  SVG DOCUMENT *************************** 

<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Generator: Adobe Illustrator 9.0, SVG Export Plug-In  -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20000303 Stylable//EN"
"http://www.w3.org/TR/2000/03/WD-SVG-20000303/DTD/svg-20000303-stylable.dtd"
[
	<!ENTITY st11
"fill-rule:evenodd;clip-rule:evenodd;fill:none;stroke-width:4;stroke-linecap
:square;">
	<!ENTITY st28 "font-family:'Helvetica';">
	<!ENTITY st33 "font-size:18;">
	<!ENTITY st38
"fill-rule:nonzero;clip-rule:nonzero;stroke:#000000;stroke-miterlimit:4;">
]>
<svg id="nsexample" width="100pt" height="100pt" viewBox="0 0 100 100"
xml:space="preserve">
	<g id="layer1" style="&st38; &st28; &st33;">
	    <path style="&st11;" d="M43,44.196h2280v1452H43v-1452z"/>
	</g>
    <g id="layer2" style="&st38; &st28; &st33;">	
	    <path style="&st11;" d="M23,24.196h2280v1452H43v-1452z"/>
	</g>
</svg>

***************************  XLST STYLESHEET *************************** 

<xsl:stylesheet
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
      xmlns:svg="http://www.w3.org/2000/svg-20000303-stylable"
      xmlns="http://www.w3.org/2000/svg-20000303-stylable"
     version="1.0">

   <xsl:output method="xml"  
        media-type="text/xml"
        omit-xml-declaration="no"
	
doctype-system="http://www.w3.org/TR/2000/03/WD-SVG-20000303/DTD/svg-2000030
3-stylable.dtd"
  		doctype-public="-//W3C//DTD SVG 20000303 Stylable//EN"/>
	    indent="yes"/>     
  
<!--
    Workaround that appears to work in Xalan
    <xsl:template match="*[local-name()='path']">
  -->
     
       <xsl:template match="svg:path">
       <addTag>
		 <xsl:copy>
    		<xsl:apply-templates 
     			select="*|processing-instruction()|text()"/>
  		  </xsl:copy>
	   </addTag>
   </xsl:template>

   <xsl:template match="*[local-name()!='path']">
		 <xsl:copy>
    		<xsl:apply-templates 
     			select="*|processing-instruction()|text()"/>
  		  </xsl:copy>
   </xsl:template>
	   
</xsl:stylesheet>

*************************** RESULTING DOCUMENT *************************** 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20000303 Stylable//EN"
"http://www.w3.org/TR/2000/03/WD-SVG-20000303/DTD/svg-20000303-stylable.dtd"
>

<!--
    Note that the namespace parameter entity is not resolved.
  -->

<svg xmlns="%SVGNamespace;">
	<g>
	    <addTag><path/></addTag>
	</g>
    <g>	
	    <addTag><path/></addTag>
	</g>
</svg>





 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]