>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.


Reply via email to