[XSL-LIST Mailing List Archive Home]
[By Thread]
[By Date]
[xsl] XPath as a stand-alone programming language (Was: Re: [xsl] [Summary] XPath 3.0 is a composable language ... what does that mean?)
Subject: [xsl] XPath as a stand-alone programming language (Was: Re: [xsl] [Summary] XPath 3.0 is a composable language ... what does that mean?) From: Dimitre Novatchev <dnovatchev@xxxxxxxxx> Date: Wed, 24 Oct 2012 06:32:29 -0700 |
A few months ago I had the pleasure to do "all XPath programming". I developed the Binary tree data type and the Set data type essentially completely in XPath 3.0. These can be found in my blog, respectively at: http://dnovatchev.wordpress.com/2012/01/09/the-binary-search-tree-data-st ructurehaving-fun-with-xpath-3-0/ and http://dnovatchev.wordpress.com/2012/01/12/the-set-datatype-implemented-i n-xpath-3-0/ At the time this happened accidentally. I don't like to work with XQuery, but at that time Saxon's XSLT 3.0 processor didn't fully implement higher order functions. Saxon's XQuery 3.0 did, so I reluctantly used XQuery 3.0 in my work. Doing so, I planned to move my whole code to XSLT 3.0 --whenever Saxon's XSLT 3.0 processor was ready for this (and now, in version 9.4 it is). Therefore I essentially coded everything as much in pure XPath 3.0 as possible. This experience clearly showed to me that it is possible to use XPath 3.0 as a stand-alone programming language. This has many benefits, and one of them is that XPath-only code is fully transferrable between XSLT and XQuery. At the end of my latest blog post "Recursion with anonymous (inline) functions in XPath 3.0", I list a number of nice features we still need in XPath as a programming language, that could be added in a future, post-3.0 version: 1. Stand-alone XPath processors. 2. Import/include directives for XPath-only files (expression-files). 3. Separate packaging/compilation of XPath-only programs. 4. New data structures such as tuples. 5. Generics b parametric data types. Cheers, Dimitre On Wed, Oct 24, 2012 at 4:55 AM, Costello, Roger L. <costello@xxxxxxxxx> wrote: > Thanks a lot Michael for the explanation. Fantastic! > > Below is a summary of my question plus Michael's answer (slightly expanded). > > The XPath 3.0 specification says this: > > XPath 3.0 is a composable language > > What does that mean? > > It means that every operator and language construct allows any XPath expression to appear as its operand (subject only to operator precedence and data typing constraints). > > For example, take this expression: > > 3 + ____ > > The plus (+) operator has a left-operand, 3. What can the right-operand be? Answer: any XPath expression! Let's use the max() function as the right-operand: > > 3 + max(___) > > Now, what can the argument to the max() function be? Answer: any XPath expression! Let's use a for-loop as its argument: > > 3 + max(for $i in 1 to 10 return ___) > > Now, what can the return value of the for-loop be? Answer: any XPath expression! Let's use an if-statement: > > 3 + max(for $i in 1 to 10 return (if ($i gt 5) then $i*3 else $i*2))) > > The fact that XPath is a composable language is very cool and very powerful. > > Contrast this with XSLT, which is not fully composable: XPath expressions can be used as operands to XSLT instructions, but not the other way around. Similarly Java has constructs called statements that > cannot be nested inside expressions. > > /Roger > -- 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 ------------------------------------- To avoid situations in which you might make mistakes may be the biggest mistake of all ------------------------------------ Quality means doing it right when no one is looking. ------------------------------------- You've achieved success in your field when you don't know whether what you're doing is work or play ------------------------------------- Facts do not cease to exist because they are ignored. ------------------------------------- Typing monkeys will write all Shakespeare's works in 200yrs.Will they write all patents, too? :) ------------------------------------- I finally figured out the only reason to be alive is to enjoy it.
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] [Summary] XPath 3.0 is a comp, Costello, Roger L. | Thread | [xsl] Re: [xml-dev] XPath as a stan, Dimitre Novatchev |
[xsl] [Summary] XPath 3.0 is a comp, Costello, Roger L. | Date | RE: [xsl] Diffing XML, Emma Burrows |
Month |