RE: [xsl] resolving relative path without base

Subject: RE: [xsl] resolving relative path without base
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Wed, 30 May 2007 10:47:54 +0100
I would expect that when you call setSystemID() on the StreamSource, the
URIResolver would see that value in the "base" argument.

What product are you using?

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

> -----Original Message-----
> From: Kai Hackemesser [mailto:kaha@xxxxxx] 
> Sent: 30 May 2007 09:53
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: Re: [xsl] resolving relative path without base
> 
> Hi, Michael,
> 
> I tried that but wasn't successful. I have added an URI 
> resolver to the transformer factory, because I want to lookup 
> the xsl sources from different jar files. As you told I'v set 
> systemID from the xsl source to an appropriate value, but the 
> uri resolver get called with base=null and so I can't find it 
> because href is an relative URI ("../../project.xsl"). How do 
> I get my resolve method called with base != null, or href not 
> relative?
> 
> Ciao!
> Kai
> 
> Michael Kay schrieb:
> > Use StreamSource.setSystemId() to define the base URI.
> >
> > Michael Kay
> > http://www.saxonica.com/ 
> >
> >   
> >> -----Original Message-----
> >> From: Kai Hackemesser [mailto:kaha@xxxxxx] 
> >> Sent: 29 May 2007 16:43
> >> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> >> Subject: Re: [xsl] resolving relative path without base
> >>
> >> Thanks, I tried that and it looks good.
> >>
> >> But now I have a problem with relative links. My task is as 
> >> follows: I have to create a xsl depending on some xml input. 
> >> The resulting xsl file will import another xsl (depending on 
> >> input from first xml file).
> >>
> >> This is my code so far:
> >>
> >> // loading preprocess XSL
> >> StreamSource src = new
> >> StreamSource(getClass().getResourceAsStream("/lrPreTransformHt
> >> ml.xsl"));
> >> // loading xml
> >> StreamSource xml = new StreamSource(new 
> >> ByteArrayInputStream(out.toByteArray()));
> >> StreamResult result = new StreamResult(outRes); // create 
> >> Transformer from factory and transform.
> >> getTransformer(src).transform(xml,result);
> >> // transform again and display
> >> 
> htmlPane.setText(transform(out.toByteArray(),outRes.toByteArray()));
> >>
> >> The problem currently appearing is that the xsl file imported 
> >> into the preprocess-created xsl stream also imports a xsl 
> >> file - and since I now have only a ByteStream as Source, I 
> >> lost the relativeness to that imported file. Is there another 
> >> way than giving an absolute address in that import? Like 
> >> setting a base url in FOP?
> >>
> >> Kind regards,
> >> Kai
> >>
> >> M. David Peterson schrieb:
> >>     
> >>> On Tue, 29 May 2007 06:35:47 -0600, Kai Hackemesser 
> >>>       
> >> <kaha@xxxxxx> wrote:
> >>     
> >>>> Has anybody seen an example how to create xsl output with xsl?
> >>>>         
> >>> <?xml version="1.0"?>
> >>> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"; 
> >>> version="1.0">
> >>>   <xsl:template match="/">
> >>>     <xsl:element name="xsl:stylesheet">
> >>>       <xsl:attribute 
> >> 
> ame="xmlns:xsl">http://www.w3.org/1999/XSL/Transform</xsl:attribute>
> >>     
> >>>       <xsl:attribute name="version">1.0</xsl:attribute>
> >>>       <xsl:element name="xsl:template">
> >>>         <xsl:attribute name="match">/</xsl:attribute>
> >>>         <xsl:element name="xsl:apply-templates"/>
> >>>       </xsl:element>
> >>>     </xsl:element>
> >>>   </xsl:template>
> >>> </xsl:stylesheet>

Current Thread