Re: [xsl] OOXML

Subject: Re: [xsl] OOXML
From: "Dimitre Novatchev" <dnovatchev@xxxxxxxxx>
Date: Sat, 28 Jun 2008 07:49:40 -0700
> But it set me thinking for real. If Dimitre can have FXSL, why can't I
> have OOXSL (Dimitre, are you going to expel me now?)?
>


Colin,

I have done similar tings 6 years ago. For XSLT code that
*dynamically* creates the analog of classes with virtual functions
look here:

http://fxsl.sourceforge.net/articles/PartialApps/Partial%20Applications.html#5._Creating_a_new_function_dynamically_-_the_calculator_store_problem.

Approximately at that time I had implemented the XSLT 1.0 analog of a
Monad class and played with it a little. This allows to have
computations evaluated in a strict order. A much simpler demo how to
do perform actions in order is given by the XSLT Calculator:

   http://fxsl.sourceforge.net/articles/xslCalculator/The%20FXSL%20Calculator.html

There is no problem implementing such concepts. However, it is simply
boring to follow the OO principles in a functional environment.


--
Cheers,
Dimitre Novatchev
---------------------------------------
Truly great madness cannot be achieved without significant intelligence.
---------------------------------------
To invent, you need a good imagination and a pile of junk
-------------------------------------
Never fight an inanimate object
-------------------------------------
You've achieved success in your field when you don't know whether what
you're doing is work or play





On Fri, Jun 27, 2008 at 11:13 PM, Colin Paul Adams
<colin@xxxxxxxxxxxxxxxxxx> wrote:
>
> >>>>> "Colin" == Colin Paul Adams <colin@xxxxxxxxxxxxxxxxxx> writes:
>
> >>>>> "Alexander" == Alexander Johannesen <alexander.johannesen@xxxxxxxxx> writes:
>    Alexander> On Fri, Jun 27, 2008 at 21:58, John Snelson <john.snelson@xxxxxxxxxx> wrote:
>    >>> Maybe you've heard of a language called XSLT? Or XQuery? :-)
>
>    Alexander> Cheap shot. :) Besides, I meant real programming
>    Alexander> languages, not a faux functional LISP wannabe in XML
>    Alexander> guise, with no OO, so there!
>
>    Colin> :-)
>
>    Colin> So use Eiffel! (with XSLT callouts when desired).
>
> That was all very amusing (or not, according to your tastes).
>
> But it set me thinking for real. If Dimitre can have FXSL, why can't I
> have OOXSL (Dimitre, are you going to expel me now?)?
>
> Given the following file oo_demo.xsl:
>
> <?xml version="1.0" encoding="utf-8"?>
> <!-- Demonstration of Object-Oriented programming in XSLT -->
>
> <!--
>
> This demonstrates an OO class named ACCOUNT, which represents a
>  bank account equivalent to the following Eiffel class:
>
> class ACCOUNT
>
> feature - - Access
>
>   balance: DOUBLE
>        - - Balance of account in GBP
>
> feature - - Basic operations
>
>   deposit (a_value: DOUBLE) is
>        - - Add `a_value' to `Current'.
>      require
>         a_value_strictly_positive: a_value > 0.0
>      do
>        balance := balance + a_value
>      ensure
>        deposited: balance = old balance + a_value
>      end
>
>    withdraw (a_value: DOUBLE) is
>        - - Withdraw `a_value' from `Current'.
>      require
>         a_value_strictly_positive: a_value > 0.0
>         no_overdrafts: a_value <- balance
>      do
>        balance := balance - a_value
>      ensure
>        deposited: balance = old balance - a_value
>      end
>
> invariant
>
>   no_overdraft: balance >= 0.0
>
> end
>
> All operations are encoded in XML requests of the following forms:
>
> <balance-enquiry/>
>
> <deposit>a_positive_number</deposit>
>
> <withdraw>a_positive_number</withdraw>
>
> The document element is named requests. requests may take any number
>  of balance-enquiry, deposit and withdraw children.
>
> Contract-violation/error-checking code omitted for now.
>
> -->
>
>
> <xsl:transform
>   xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
>   xmlns:gexslt="http://www.gobosoft.com/eiffel/gobo/gexslt/extension";
>   xmlns:exslt="http://exslt.org/system/environment";
>   xmlns:account="http://colina.demon.co.uk/ooxsl/demo/account";
>   extension-element-prefixes="gexslt"
>   version="2.0">
>
>  <xsl:output method="text"/>
>
>  <xsl:template match="/requests">
>    <xsl:apply-templates />
>  </xsl:template>
>
>  <xsl:template match="balance-enquiry">
>    Balance is : <xsl:value-of select="account:balance()" />
>  </xsl:template>
>
>  <xsl:template match="deposit">
>    <xsl:variable name="amount" select="text()" />
>    <xsl:variable name="balance" select="account:balance()" />
>
>    <gexslt:set-environment-variable name="ACCOUNT_BALANCE"
>                                     value="$amount + $balance"/>
>  </xsl:template>
>
>  <xsl:template match="withdraw">
>    <xsl:variable name="amount" select="text()" />
>    <xsl:variable name="balance" select="account:balance()" />
>
>    <gexslt:set-environment-variable name="ACCOUNT_BALANCE"
>                                     value="$amount + $balance"/>
>  </xsl:template>
>
>  <xsl:function name="account:balance">
>    <!-- Logic omitted for treating empty string as zero -->
>    <xsl:value-of select="system-property('exslt:ACCOUNT_BALANCE')" />
>  </xsl:function>
>
> </xsl:transform>
>
> and oo_demo.xml:
>
> <requests>
>  <balance-enquiry/>
>  <deposit>3.45</deposit>
>  <balance-enquiry/>
>  <withdraw>1.45</withdraw>
>  <balance-enquiry/>
> </requests>
>
>
> Then the command:
>
> gestalt oo_demo.xsl oo_demo.xml
>
> yields:
>
>
>    Balance is :
>  At line 84 in file:///home/colin/gestalt/oo_demo.xsl:
> Fatal error: http://www.w3.org/2005/xqt-errors#XTDE1450: Unknown extension element: gexslt:set-environment-variable
>
> But that's not too difficult to remedy.
>
> The greater difficulty is that is relies on execution order. While
> that isn't a problem in practice with the current implementation of
> Gestalt, it probably will be in the future. So it becomes a problem of
> whether the extension function can be defined in such a way as to
> guaranteee the correct execution order (since
> http://exslt.org/system/environment is already defined without any
> such refinements, this might be difficult).
> --
> Colin Adams
> Preston Lancashire

Current Thread