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

an implementation of xsl:key for XT (2nd attempt)

Subject: an implementation of xsl:key for XT (2nd attempt)
From: Denys Duchier <Denys.Duchier@xxxxxxxxxxxx>
Date: 18 Aug 1999 23:27:08 +0200
xsl key declaration
Hi James,

I sent a message earlier, but I don't think it made it through.  In
the process of trying to clarify my understanding of xsl:key, I
prototyped an implementation of it in XT.  The idea is quite simple
and is described in more detail below.  In a nutshell, the mechanism
that creates key entries is explained and implemented by reduction to
template processing.  I wrote this in the past couple of days and I
have only minimally tested it (I tested a bit further this evening and
removed a couple of obvious bugs).  This being my first real
programming project in Java, I don't think the result should be
trusted blindly, but it appears to perform as expected.

I made a gzipped tar archive of my contribution available at

               http://www.ps.uni-sb.de/~duchier/XT.tgz

Here is the README file that explains the technique is some detail:

======================================================================
		    PROCESSING OF KEY DECLARATIONS
======================================================================

The idea is to compile key declarations into templates.  Thus the
processing of xsl:key can be explained and implemented in terms of a
matching process that we already have and understand.

When there are xsl:key declarations, processing starts in mode
xkey:top instead of the default null.

Suppose the document contains the following xsl:key declarations:

	<xsl:key name=NAME1 match=MATCH1 use=USE1/>
	...
	<xsl:key name=NAMEn match=MATCHn use=USEn/>

Then the templates below are created.  First a new `top level'
template: its job is to first create all key entries and then simply
revert to normal processing.

The key entries are created by a recursive process that starts from a
root set of nodes specified by an expression ROOTSET.  In the current
draft, ROOTSET is simply "/".

<template match="/" mode="xkey:top">
  <for-each select=ROOTSET>
    <apply-templates mode="xkey:decl.1" select="."/>
    ...
    <apply-templates mode="xkey:decl.n" select="."/>
    <apply-templates mode="xkey:rec" select="*"/>
  </for-each>
  <apply-templates select="."/>
</template>

Then there is a template that performs the recursive step of the
indexing process.

<template match="node()" mode="xkey:rec">
  <apply-templates mode="xkey:decl.1"/>
  ...
  <apply-templates mode="xkey:decl.n"/>
  <apply-templates mode="xkey:rec""/>
</template>

Finally there is a new mode and a single template for every xsl:key
declaration.  For e.g. xsl:key declaration number 3, we have:

<template match=MATCH3 mode="xkey:decl.3">
  <if test="xkey:use(NAME3,USE3,.)"/>
</template>
<!-- no recursion -->
<template match="/|node()" mode="xkey:decl.3" priority="-2.0"/>

The default rule _blocks_ recursion.  The recursive step is performed
only once in the template shown earlier.  The xsl:if instruction is
used purely for the side effect of invoking the xkey:use() function.
The job of this function is to evaluate USE3 in the context of the
match and register all corresponding key entries.

======================================================================
			       PROPOSAL
======================================================================

The fact that the root set expression is "/" considerably limits the
usefulness of the xsl:key mechanism.  I propose to allow:

	<xsl:apply-keys select=ROOTSET/>

to permit an arbitrary expression.  Thus you could have:

	<xsl:apply-key select="/|document('foo.xml')"/>


-- 
Dr. Denys Duchier			Denys.Duchier@xxxxxxxxxxxx
Forschungsbereich Programmiersysteme	(Programming Systems Lab)
Universitaet des Saarlandes, Geb. 45	http://www.ps.uni-sb.de/~duchier
Postfach 15 11 50			Phone: +49 681 302 5618
66041 Saarbruecken, Germany		Fax:   +49 681 302 5615


 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.