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

Re: When to use conditional constructions?

Subject: Re: When to use conditional constructions?
From: David Rudel <fwqhgads@xxxxxxxxx>
Date: Tue, 1 Apr 2014 11:14:44 +0200
Re:  When to use conditional constructions?
On Mon, Mar 31, 2014 at 7:15 PM, Abel Braaksma (Exselt) <abel@xxxxxxxxxx> wrote:

> In 3.0 you can assign function items to variables, allowing something
> like this:
>
> <xsl:variable name="predicates" as="function(*)*">
>    <xsl:sequence select="
>       function($a) { $a/local-name() = 'para' },
>       function($a) { $a/text() = 'hello world'}" />
> </xsl:variable>
>
> <xsl:template match="*[some $f in $predicates satisfies $f(.)]">
>     <xsl:text>Found it!</xsl:text>
> </xsl:template>
>
> Whether this proves to be handy in practical scenarios, I am not sure.

A similar technique has been very helpful for me in my practical,
day-to-day work. I say "similar" because for me the main benefit has
not been to reduce re-use of predicates but to use function-valued
parameters to make my code more modular so I can put complex templates
that might use one of these complex predicates into an imported
stylesheet. I can then call them with a small template in my main
stylesheet and pass them whatever predicate is needed for the task at
hand.

Here is how it works for me:

I run analysis on data associated to students. A given data set may
have half a million students in it, but for a given *analysis* I might
only want to inspect 50,000 or 100,000 students. To avoid time lost
parsing files I don't want, I use the following workflow:

1. When I get my data, I first create a text file catalog with one
line per file.
2. I then run a catalog-making XSLT script that inspects each of these
files and writes out some key information about the student into a
catalog file. This information will later be used to determine whether
that student is included or excluded from a given data analysis
project.
3. At the start of most of my analyses, I call a template that
includes a couple of filter parameters that take functions. For
example:
    <xsl:template name="Batch_from_Catalog">
       <xsl:param name="student.filter" select="function($x as node())
as xs:boolean{($x/@userName ne '') and not($x/@firstGradeLevelID='0')
and (+$x/@firstGradeLevelID le 6)}"/>
       <xsl:param name="stint.filter"
select="function($x){boolean(1)}" as="function(*)"/>
....

These filter functions are then used to select the relevant students
from the catalog:

<xsl:for-each select="document(concat($path,$catalog))//student[$student.filter(.)]">
...

When calling the above template, I can enter whatever filters I want
as functions for the $student.filter and $stint.filter variables.

The above template (or, rather, a more complex version that both
selects students for analysis and and organizing the output from each
student's analysis a single data brick) is contained in an imported
stylesheet.

To use it I just have to put a small-footprint initial template
(including the filters I want to use for that analysis) into the sheet
specifying the analysis I'm doing at the moment.

-David

-- 

"A false conclusion, once arrived at and widely accepted is not
dislodged easily, and the less it is understood, the more tenaciously
it is held." - Cantor's Law of Preservation of Ignorance.

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.