Re: XSLT 2.0: On xsl:sequence and xsl:copy-of
> > Now that everything is a sequence in > > XPath 2.0, the word sequence has become a buzz word and its > > overuse (not to say misuse) can only lead to confusion. If > > the result of this instruction is placing references to nodes > > in the output, then a more exact name would be one of the > > following: > > > > xsl:reference > > > > xsl:add-reference > > > > xsl:node-reference > > None of these are suitable, because xsl:sequence can produce any > sequence of nodes and/or atomic values. That means xsl:reference describes all of these cases. > > > > > > O2. xsl:sequence does everything that can be done with > > xsl:copy-of and these two xslt instructions are mutually redundant. > > There is certainly an overlap. With atomic values, they do the same > thing. And it's true that in some contexts, nodes returned be > xsl:sequence are going to get copied anyway, to add them to a new tree. > But returning a node and making a copy of a node are rather different > things. Yes, but when we'll need a copy of a node and having a reference will not do? Using a copy may make sense if what is copied could change in time -- but XSLT is a functional language and this is not possible. > > > > Q1. Is there anything that can be accomplished with > > xsl:copy-of and which cannot be accomplished by using xsl:sequence? > > At this time of a Friday night, I can't immediately recall what the use > case was. Some of the examples we looked at involved validation. I think that many people in this list would be interested to have a look too. Could you, please, give us such an example whenever you have the time? > > > > Q3. Let's have: > > > > <xsl:variable name="v1"> > > <xsl:sequence select="/"/> > > </xsl:variable> > > <xsl:variable name="v2"> > > <xsl:sequence select="/"/> > > </xsl:variable> > > > > <xsl:copy-of select="$v1 except $v2"/> > > > > Should the output of this code be empty or not? If not, what > > should the output be? > > xsl:variable without an "as" attribute constructs a temporary tree, so > in this context xsl:sequence has the same effect as xsl:copy-of. You are > constructing two different trees containing distinct nodes, so ($v1 > except $v2) returns $v1. Then a slight modification: <xsl:variable name="v1" as="item()*"> <xsl:sequence select="/"/> </xsl:variable> <xsl:variable name="v2" as="item()*"> <xsl:sequence select="/"/> </xsl:variable> <xsl:copy-of select="$v1 except $v2"/> I guess this will not produce any output -- am I right? My last question is the following: In the example above the two sequences consist not of nodes, but of *references to nodes*. This is a very useful new datatype, not present in the XPath data model. Will it not be nice to explain this in detail in the XSLT spec.? ===== Cheers, Dimitre Novatchev. http://fxsl.sourceforge.net/ -- the home of FXSL XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
PURCHASE STYLUS STUDIO ONLINE TODAY!
Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!
Download The World's Best XML IDE!
Accelerate XML development with our award-winning XML IDE - Download a free trial today!
Subscribe in XML format