document( ' ') 2006-12-27 - By Christine Li
>which leads me to believe that Xalan is actually using the system id as a >URI to load a resource. It seems kind of broken to require that any >stylesheet that references itself be reloadable and that it actually would >reload it and reparse it.
You are right about this. For document function, the processor will reload the document using the system id as a URI
Christine Li XSLT Development IBM Toronto Lab Tel: (905)413-2601 Email: jycli@(protected)
dnfoote <dnfoote@(protected)> 27/12/2006 04:47 AM
To xalan-j-users@(protected) cc
Subject Re: document('')
Mike,
Thanks for the quick response. What you are saying makes sense, but I was hoping to use a dynamically generated stylesheet as an easy way to inject some lookup info into the result. If Xalan was just using the system id as a unique identifier then I would be okay. But instead if I change the code to the following:
Source xsl = new StreamSource(new FileInputStream("media.xsl")); xsl.setSystemId("MyXSL"); Transformer transformer = tFactory.newTransformer(xsl);
I get :
file:///C:/.../MyXSL; Line #34; Column #78; Can not load requested doc: C:\...\MyXSL (The system cannot find the file specified)
which leads me to believe that Xalan is actually using the system id as a URI to load a resource. It seems kind of broken to require that any stylesheet that references itself be reloadable and that it actually would reload it and reparse it.
I even thought, well, a StreamSource is not re-usable, so what if I use a DOMSource. Same story, Xalan tries to reload the original stylesheet using the system id. This is really bumming me out :)
Mike Brown-3 wrote: > > dnfoote wrote: >> I have done some testing with a style sheet that uses the document >> function >> with an empty string as its only argument. The document('') call errors >> out >> complaining 'SystemId Unknown' if I invoke newTransformer as follows: >> >> Transformer transformer = tFactory.newTransformer(new StreamSource(new >> FileInputStream("media.xsl"))); >> >> instead of: >> >> Transformer transformer = tFactory.newTransformer(new >> StreamSource("media.xsl")); > > Because when you constructed the StreamSource from a FileInputStream, you > didn't set the StreamSource's system ID, which is a URI to use as the > document's ID and against which your processor's URIResolver will resolve > relative references like the '' (empty string) in that document() call. > > See the StreamSource API docs and set the system ID to a full URI like > "file:///C:/path/to/media.xsl". > >> Is it true that Xalan cannot reference the stylesheet document tree >> unless >> it got the document from a URI in the first place? > > No, it's not true. > > However, every document has a URI / system ID, regardless of how the > document > was obtained, transmitted, or referred to in APIs. Maybe it represents > where > you got the doc from, maybe not. If you didn't set one, then one was > assigned > to it -- probably not very intelligently. If you did set one, but it > wasn't a > full URI, then the results are unpredictable and implementation-dependent > and > sometimes wrong, as you've observed with your test stylesheet. > >> Has anyone else seen this behavior? Is it correct? > > First time I've seen it. > > Even though you weren't really setting the base URI / system ID correctly, > your stylesheet shouldn't have failed. I'd consider it a bug in Xalan, > but > others may disagree. >
-- View this message in context: http://www.nabble.com/document%28%27%27%29-tf2884411.html#a8060924 Sent from the Xalan - J - Users mailing list archive at Nabble.com.
<br><font size=2 face="sans-serif">></font><tt><font size=2>which leads me to believe that Xalan is actually using the system id as a<br> >URI to load a resource. It seems kind of broken to require that any<br> >stylesheet that references itself be reloadable and that it actually would<br> >reload it and reparse it.</font></tt> <br> <br><tt><font size=2>You are right about this. For document function, the processor will reload the document using the system id as a URI</font></tt> <br> <br><font size=2 face="sans-serif">Christine Li<br> XSLT Development<br> IBM Toronto Lab<br> Tel: (905)413-2601<br> Email: jycli@(protected)</font> <br> <br> <br> <table width=100%> <tr valign=top> <td width=40%><font size=1 face="sans-serif"><b>dnfoote <dnfoote@(protected) ></b> </font> <p><font size=1 face="sans-serif">27/12/2006 04:47 AM</font> <td width=59%> <table width=100%> <tr valign=top> <td> <div align=right><font size=1 face="sans-serif">To</font></div> <td><font size=1 face="sans-serif">xalan-j-users@(protected)</font> <tr valign=top> <td> <div align=right><font size=1 face="sans-serif">cc</font></div> <td> <tr valign=top> <td> <div align=right><font size=1 face="sans-serif">Subject</font></div> <td><font size=1 face="sans-serif">Re: document('')</font></table> <br> <table> <tr valign=top> <td> <td></table> <br></table> <br> <br> <br><tt><font size=2><br> Mike,<br> <br> Thanks for the quick response. What you are saying makes sense, but I was<br> hoping to use a dynamically generated stylesheet as an easy way to inject<br> some lookup info into the result. If Xalan was just using the system id as<br> a unique identifier then I would be okay. But instead if I change the code<br> to the following:<br> <br> Source xsl = new StreamSource(new FileInputStream("media.xsl"));<br> xsl.setSystemId("MyXSL");<br> Transformer transformer = tFactory.newTransformer(xsl);<br> <br> I get :<br> <br> file:///C:/.../MyXSL; Line #34; Column #78; Can not load requested doc:<br> C:\...\MyXSL (The system cannot find the file specified)<br> <br> which leads me to believe that Xalan is actually using the system id as a<br> URI to load a resource. It seems kind of broken to require that any<br> stylesheet that references itself be reloadable and that it actually would<br> reload it and reparse it.<br> <br> I even thought, well, a StreamSource is not re-usable, so what if I use a<br> DOMSource. Same story, Xalan tries to reload the original stylesheet using<br> the system id. This is really bumming me out :)<br> <br> <br> <br> Mike Brown-3 wrote:<br> > <br> > dnfoote wrote:<br> >> I have done some testing with a style sheet that uses the document<br> >> function<br> >> with an empty string as its only argument. The document('') call errors<br> >> out<br> >> complaining 'SystemId Unknown' if I invoke newTransformer as follows: <br> >> <br> >> Transformer transformer = tFactory.newTransformer(new StreamSource(new <br> >> FileInputStream("media.xsl")));<br> >> <br> >> instead of:<br> >> <br> >> Transformer transformer = tFactory.newTransformer(new<br> >> StreamSource("media.xsl"));<br> > <br> > Because when you constructed the StreamSource from a FileInputStream, you<br> > didn't set the StreamSource's system ID, which is a URI to use as the<br> > document's ID and against which your processor's URIResolver will resolve<br> > relative references like the '' (empty string) in that document() call.<br> > <br> > See the StreamSource API docs and set the system ID to a full URI like<br> > "file:///C:/path/to/media.xsl".<br> > <br> >> Is it true that Xalan cannot reference the stylesheet document tree<br> >> unless<br> >> it got the document from a URI in the first place?<br> > <br> > No, it's not true.<br> > <br> > However, every document has a URI / system ID, regardless of how the<br> > document<br> > was obtained, transmitted, or referred to in APIs. Maybe it represents<br> > where<br> > you got the doc from, maybe not. If you didn't set one, then one was<br> > assigned<br> > to it -- probably not very intelligently. If you did set one, but it<br> > wasn't a<br> > full URI, then the results are unpredictable and implementation-dependent <br> > and <br> > sometimes wrong, as you've observed with your test stylesheet.<br> > <br> >> Has anyone else seen this behavior? Is it correct?<br> > <br> > First time I've seen it.<br> > <br> > Even though you weren't really setting the base URI / system ID correctly, <br> > your stylesheet shouldn't have failed. I'd consider it a bug in Xalan,<br> > but <br> > others may disagree.<br> > <br> <br> -- <br> View this message in context: http://www.nabble.com/document%28%27%27%29 -tf2884411.html#a8060924<br> Sent from the Xalan - J - Users mailing list archive at Nabble.com.<br> <br> </font></tt> <br>
|
|