xsl-list
[Top] [All Lists]

Re: [xsl] Call java function to do background work

2012-06-19 10:17:48
Thanks a lot! I am actually using xsl:result-document when I need to generate 
multiple output files from one source file. But I'm not using it when it's 
one-to-one scenario. The variable I'm appending to from my background function 
call is for sure being used. In this case, I can make sure that the background 
function call will be executed.

Again, thanks for the help.

Ming


----- Original Message -----
From: Michael Kay <mike(_at_)saxonica(_dot_)com>
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Cc: 
Sent: Tuesday, June 12, 2012 1:10 PM
Subject: Re: [xsl] Call java function to do background work


It's not a good idea to do something involving side-effects while evaluating a 
variable, because optimizers tend to assume that evaluating a variable is 
something they can do as and when and as often as they please. If the variable 
isn't used, it's very likely that it will never be evaluated; if two variables 
are involved, it's unpredictable which order they will be evaluated in. In some 
cases an optimizer might decide to evaluate a variable repeatedly rather than 
allocating memory to hold its value.

It might not seem an obvious approach, but my suggestion would be to do this 
using xsl:result-document. That's about the closest XSLT gets to an instruction 
designed to have side effects, and there are rules about its behaviour designed 
to limit the damage that optimizers can do. There's still no absolute rule 
ensuring the order in which different result documents are generated (in recent 
Saxon releases, you can create lots of result documents in parallel), but at 
least there's a reasonable chance that each one will be written exactly once.

In Saxon there's a mechanism (the OutputURIResolver) that allows the Java 
application to intercept calls to xsl:result-document. So by encapsulating the 
information needed by the application within the URI given to the result 
document (or putting it within the document itself) you can use 
xsl:result-document as a way of saying "here's some information, please process 
it in the background".

Michael Kay
Saxonica

On 12/06/2012 16:07, Ming Yu wrote:
Sorry if this is a very simple question but I couldn't seem to come up with a 
neat solution.

During xslt transformation, I need to call a java function to do some 
background work (such as adding some values to the database, etc). The java 
function doesn't need to return anything. At this moment, I just use the 
normail<xsl:value-of>  tag to append to a variable. Since it doesn't return 
anything, the variable value stays the same.

Is there a neater to achieve this goal?

Thanks a lot!

Ming

--~------------------------------------------------------------------
XSL-List info and archive:http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to:http://lists.mulberrytech.com/xsl-list/
or 
e-mail:<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--



--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--

--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--