>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: [EMAIL PROTECTED] dnfoote <[EMAIL PROTECTED]> 27/12/2006 04:47 AM To xalan-j-users@xml.apache.org 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.