RE: [xsl] GML transformation

Subject: RE: [xsl] GML transformation
From: "Michael Kay" <mhk@xxxxxxxxx>
Date: Fri, 21 May 2004 16:30:16 +0100
> -----Original Message-----
> From: sarra hamdi [mailto:hacker249@xxxxxxxxx] 
> Sent: 21 May 2004 12:45
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: [xsl] GML transformation
> 
> Hello,
> I have a valid GML file descriped follow, it was validated by 
> xmlspy. I want to transform it to SVG format using xslt but I 
> m newbie in xsl language.
> follow the xsl file that I writed but it cant give me a good result .
> from this can any one see this two file to help me to 
> represent the gml file.
> thanks advanced.
> ------------------------------------------------
> the gml file
> ------------------------------------------------
> 
> <?xml version="1.0" encoding="UTF-8"?>
> <!-- File: cambridge.xml -->
> <CityModel xmlns="http://www.opengis.net/examples"; 
>            xmlns:gml="http://www.opengis.net/gml"; 
>            xmlns:xlink="http://www.w3.org/1999/xlink"; 
>            xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance"; 
>            
> xsi:schemaLocation="http://www.opengis.net/examples 
> /u/pkg/gml4j/test/schemas/City.xsd">
> 
>   <gml:name>Cambridge</gml:name>
>   <gml:boundedBy>
>     <gml:Box srsName="http://www.opengis.net/gml/srs/epsg.xml#4326";>
>       <gml:coordinates>0.0 0.0,100.0 100.0</gml:coordinates>
>     </gml:Box>
>   </gml:boundedBy>
> 
>   <cityMember>
>     <River>
>       <gml:description>The river that runs through 
> Cambridge.</gml:description>
>       <gml:name>Cam</gml:name>
>       <gml:centerLineOf>
>         <gml:LineString 
> srsName="http://www.opengis.net/gml/srs/epsg.xml#4326";>
>           <gml:coordinates>0 50,70 60,100 50</gml:coordinates>
>         </gml:LineString>
>       </gml:centerLineOf>
>     </River>
>   </cityMember>
> 
>   <cityMember>
>     <Road>
>       <gml:name>M11</gml:name>
>         <linearGeometry>
>           <gml:LineString 
> srsName="http://www.opengis.net/gml/srs/epsg.xml#4326";>
>             <gml:coordinates>0 5.0,20.6 10.7,80.5 
> 60.9</gml:coordinates>
>           </gml:LineString>
>         </linearGeometry>
>       <classification>motorway</classification>
>       <number>11</number>
>     </Road>
>   </cityMember>
> 
>   <cityMember xlink:type="simple" xlink:title="Trinity Lane" 
>     xlink:href="http://www.foo.net/cgi-bin/wfs?FeatureID=C10239"; 
>     
> gml:remoteSchema="city.xsd#xpointer(//complexType[@name='RoadT
> ype'])"/>
>   <cityMember>
>     <Mountain>
>       <gml:description>World's highest mountain is in 
> Nepal!</gml:description>
>       <gml:name>Everest</gml:name>
>       <elevation>8850</elevation>
>     </Mountain>
>   </cityMember>
>   <dateCreated>2000-11</dateCreated>
> </CityModel>
> 
> 
> ------------------------------------------------
> the xsl file
> ------------------------------------------------

I've annotated this to show you some of the things that are wrong with your
code, but I haven't tried to correct your errors because I simply can't see
what you are aiming at.

<?xml version="1.0"?>
> <!DOCTYPE xsl:stylesheet SYSTEM "C:\Documents and 
> Settings\ines\Bureau\exemple3\Untitled2.dtd">

The location of the DTD must be a URI, not a filename. Some products let you
get away with this error, but they shouldn't.

> <xsl:stylesheet version="1.0" 
> xmlns:xsl="http://www.w3.org/1999/XSL/Transform"; 
> xmlns:xlink="http://www.w3.org/TR/xlink"; 
> xmlns:gml="http://www.opengis.net/gml"; 
> xmlns:redirect="org.apache.xalan.xslt.extensions.Redirect" 
> xmlns:mur="murmur" extension-element-prefixes="mur">

> 	<xsl:output method="xml" 
> doctype-system="D:\mesrecherchesmastere\svg\DTD\svg10.dtd" 
> doctype-public="-//W3C//DTD SVG 20000303 Stylable//EN"/>

> 	<xsl:variable name="boxCoord" select="//gml:Box/gml:coordinates/."/>

The trailing "/." is noise and should be removed.

> 	     <xsl:template
match="//gml:centerLineOf/gml:LineString/gml:coordinates">

The leading "//" is noise and should be removed.

> 		<xsl:variable name="clist" select="."/>
> 		<xsl:variable name="tclist"
select="normalize-space($clist)"/>

> 		<xsl:template match="/">

You can't have one template rule inside another. I don't know what you are
trying to achieve here.

> 			<xsl:variable name="boxCoord"></xsl:variable>

This variable will have a value that is always a result tree fragment
containing an empty string, which doesn't seem very useful.

> 			<xsl:template match="/">

Another nested template! You appear to be confused.

> 		<svg xml:space="preserve" viewBox="{$boxCoord}">
> 			<xsl:apply-templates/>
> 		</svg>
> 	</xsl:template>	
> 	</xsl:template>	
> 	</xsl:template>	
> </xsl:stylesheet>
> 

Michael Kay

Current Thread