[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

managing side-effects in XSLT

Subject: managing side-effects in XSLT
From: Gunther Schadow <gunther@xxxxxxxxxxxxxxxxxxxxxx>
Date: Tue, 10 Dec 2002 15:43:58 -0500
xsl side effects
Hi,

Dimitre's warning about the sequential occurrence of code in
XSLT templates not implying sequential execution of side-effects
(if any) is still spinning in my mind. I am doing quite a bit
of interaction with the real world in my XSLT work and one of
those is JDBC access. I am assuming XSLT v2.0 and XPath v2.0 as
implemented in Saxon 7.

Here is some use cases and I simplify the JDBC API a lot to avoid
cluttering the point. I will use the following namespace prefixes:

DriverManager
Connection
PreparedStatement
ResultSet

and now here is in imperative java code what needs to happen:

void DriverManager.registerDriver('my.Driver');
Connection conn = DriverManager.getConnection('jdbc:my:address');
PreparedStatement stmt =
   conn.prepareStatement('SELECT * FROM ANSWERS WHERE QUESTION=?');
void stmt.setString(1,'HOWSITGOING') // returns value that set before
ResultSet rset = stmt.executeQuery();

This is a nice overview of the cases:

- static functions returning void
- static functions returning an object
- method functions returning an object
- method functions returning irrelevant stuff

As I noted earlier, to make sure that thing happen in this
order, I want to define variables for most of these steps and
link them together. For the very little that I comprehend of
the very little that I had taken the time to read about monads,
this notion of a variable representing an action (once it is
being evaluated) is somewhat related to monads.

I welcome other suggestions, Dimitre mentioned continuation
passing, and it would be nice to see an example of that.

So, I would go

<xsl:variable name="drivers-registered"
   select="DriverManager:registerDriver('my.Driver')"/>

and now I would like to have a nice form that allows me to say that
first I need to have the drivers-registered and then I need to
get the connection.

<xsl:variable name="connection"
   select="..."/>

here are possible forms to put into the select:

ensure(drivers-registered) DriverManager.getConnection(...)

and here is how I can imagine practically doing it:

     if(empty($drivers-registered))
       then DriverManager.getConnection(...)
       else false()

this is because Saxon returns an empty sequence when a function returns
void. But this looks silly, so at least I could define a function
aliasing empty as "ensured"

     if(ensured($drivers-registered))
       then DriverManager.getConnection(...)
       else false()

but what's ugly here is that I need this "else" part, which really
doesn't make sense, instead of "else" I'd need to fail.

Another way of doing it would be to construct a sequence and then
pick the last value. This is sort of reminescent of the LISP
PROG form:

last($drivers-registered, DriverManager.getConnection(...))

but there is no last function for sequences standard in XPath, also,
this would not even ensure that the $drivers-registered are ever
evaluated because they are never asked for. The trick here is,
as I understand it, to make a form that would be guarranteed
executed in the order given.

So, I could just as well do this:

prog($drivers-registered, DriverManager.getConnection(...))

which, again, like LISP, would evaluate each argument and return the
value of the last.

Wouldn't it be nice if something like that was part of XSLT/XPath?
It seems that this needs to be a primitive function, because
nothing really guarantees this behavior in the general case.

What's the best approach?

thanks,
-Gunther

--
Gunther Schadow, M.D., Ph.D.                    gschadow@xxxxxxxxxxxxxxx
Medical Information Scientist      Regenstrief Institute for Health Care
Adjunct Assistant Professor        Indiana University School of Medicine
tel:1(317)630-7960                         http://aurora.regenstrief.org



XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list


Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.