Subject: Re: [xsl] XSLT result tree fragment, with XSLT 3.0 and xsl:variable From: "G. Ken Holman g.ken.holman@xxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> Date: Tue, 11 Apr 2023 19:21:58 -0000 |
Dave, are you thinking of sosofos? Specification of a sequence of flow objects?
beneficial).Mike, don't forget the history of XSL? DSSSL provided a functional approach (totally convinced me it was
instruction.XSL *included* xsl-fo originally (DSSSL history) - how did this impact the design? I can't remember the name (Ken H, can you help?) but DSSSL had a name for RTF's (rather strange IIRC)
It was only when users realised we could use 'parts' of XSL (XSLT) that we clamoured for the XSL / XSLT split to build HTML?
regards
On Tue, 11 Apr 2023 at 18:48, Michael Kay michaelkay90@xxxxxxxxx <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote: > > A little bit of historical context here. > > In the December 1998 draft of XSLT 1.0, "result tree fragments" were not distinguished as a separate data type. The term was used, rather loosely and without definition, to describe the results of an instruction (any instruction): > > "A template can also contain elements that are instructions for creating result tree fragments. When a template is instantiated, each instruction is executed and replaced by the result tree fragment that it creates." > > There was no xsl:variable defined at that stage. > > In the April 1999 draft we start to see the 1.0 rules take shape. In particular, we see two separate data types: "node-sets" for sets of nodes selected from a source document, and "result-tree-fragments" for nodes constructed by an xsl:variable
node-set.> > In the final (Nov 1999) 1.0 specification, result tree fragments are defined in more detail, and an equivalence to node-sets is recognized: > > A result tree fragment is treated equivalently to a node-set that contains just a single root node. However, the operations permitted on a result tree fragment are a subset of those permitted on a node-set. An operation is permitted on a result tree fragment only if that operation would be permitted on a string (the operation on the string may involve first converting the string to a number or boolean). In particular, it is not permitted to use the /, //, and []operators on result tree fragments. When a permitted operation is performed on a result tree fragment, it is performed exactly as it would be on the equivalent
SAXON.> > Why the WG felt it necessary to impose these restrictions has always eluded me. In a post on this list on 15 Sept 1999 Tangi Vass wrote that the main weaknesses of the specification were (a) the non-mutability of variables, and (b) the inability to process result tree fragments as node sets. I responded by saying > > (a) But I personally believe the benefits of [immutability] do not justify the > restrictions it imposes, which is why I have implemented assignment (and > loops) in SAXON. [a decision I have come to regret], and > > > (b) I think that a function to convert a result tree fragment into a node-set > that can be further processed is a perfectly reasonable extension to the > standard and I've started experimenting to see if it can be done in
by> > > the following day Dave Pawson asked > > If reuse of result trees was possible, 90% off my problems and ugly > hacks would disappear. I would really appreciate to know the rationale > why the spec says what is says (implementation problems?) > > > to which Oren Ben-Kiki responded: > > This was discussed in this mailing list; the main reason given was that
-> limiting XSLT to a "single pass" it would be easier to implement > "incremental" XSLT processors. Such processors are deemed important for > editors etc. I don't know whether this was in fact the main reason for it
of> and we wouldn't know unless some WG member confirms it. > > I personally don't buy this reason because (i) even a single pass > incremental XSLT processor is very hard to do and (ii) even with the current > restricted spec it is possible to write a multi-pass stylesheet. In fact > XSLT has hit the Turing-complete limit and attempts to justify all sort
> restrictions in order to allow "automatic reasoning" of various types onit
a> are pretty much futile. This is not to say that incremental processors or > other form of automatic reasoning on XSLT stylesheets would not be available > in practice; it is just that such tools would by necessity be limited to > "simple enough" stylesheets. > > [The idea of "incremental" XSLT processors was, I think, that if you made
re-evaluating> small change to the source document, the XSLT processor would be able to > make corresponding adjustments to the result document without
restriction> the whole stylesheet. Of course, that never happened.] > > As soon as XSLT 1.0 came out, it became rapidly clear that the
> on result tree fragments was a great nuisance; and while thexx:node-set()
> extension function provided a workaround, a new version of the specshould
> combine node-sets and result tree fragments into a single data type.Making
> this work in a backwards compatible way was not easy; a lot of the key ideas > came from Jeni Tennison. But a key part of the solution was a paradigm shift: whereas > in 1.0 instructions were described as being "instantiated", which caused things > to be "created" or "output", in 2.0, instructions were evaluated to return a result, > thus behaving in a much more "functional" way. > > Associated with this, XSLT 1.0 described a sequence of instructions as a > "template", but no-one ever used this terminology, because the term was > too closely associated with template rules and named template. The new > name "sequence constructor" was my invention. > > Michael Kay > Saxonica > > > > On 11 Apr 2023, at 16:05, Mukul Gandhi mukulg@xxxxxxxxxxxxxxxxx <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote: > > > > Hi Wendell, > > > > On Tue, Apr 11, 2023 at 7:09b/PM Piez, Wendell A. (Fed) wendell.piez@xxxxxxxx <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote: > > > > The essential difference is that you were not allowed in *unextended* XSLT 1.0 to treat the fragment like a tree. In 2.0 you were invited to do so. > > > > I think, its certainly more useful as an XSLT language, to treat the fragment like a tree by default (as you rightly wrote). This helps us solve, more kinds of XML transformation use cases, with the standard XSLT language (2.0 and 3.0). > > > > > > -- > > Regards, > > Mukul Gandhi > > XSL-List info and archive > > EasyUnsubscribe (by email) > >
-- Dave Pawson XSLT XSL-FO FAQ. Docbook FAQ.
-- Contact info, blog, articles, etc. http://www.CraneSoftwrights.com/s/ | Check our site for free XML, XSLT, XSL-FO and UBL developer resources | Streaming hands-on XSLT/XPath 2 training class @US$125 (5 hours free) | Essays (UBL, XML, etc.) http://www.linkedin.com/today/author/gkholman |
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] XSLT result tree fragment, Dave Pawson dave.paw | Thread | Re: [xsl] XSLT result tree fragment, Dave Pawson dave.paw |
Re: [xsl] XSLT result tree fragment, Dave Pawson dave.paw | Date | Re: [xsl] XSLT result tree fragment, Dave Pawson dave.paw |
Month |