XPath 3.1 (maps only appear in XPath 3.1...) should better be considered for XForms 3. XQuery 3.1 and XQuery Update Facility could, then, also be supported in actions.
--Alain
Le 1 juin 2016 à 05:41, Erik Bruchez <erik@bruchez.org> a écrit :All,When XForms is lagging behind XPath, we find ourselves trying to reinvent things that have been already done. This is the case with the `transform()` function. So I wonder how much effort we should be spending on this given that there is such a function in XPath 3 and it does everything we need.The thinking so far has been that we don't mandate XPath 3, and it would be nice if we could provide `transform()` anyway.I think that is a valid approach, but only if:1. The use cases for `transform()` are really strong.2. It is reasonably easy to provide a `transform()` function without XPath 3 support.Otherwise, I am tempted to say that efforts would be better spent updating to XPath 3.So far the possibilities to add support include:- providing a simplified `transform()` function, which e.g. doesn't support multiple inputs/outputs- trying to use `xf:submission` (but it is unclear how to do that and whether that would be any easier)- supporting what XPath 3 supports, but without XPath 3 maps- with sequences- embedding values and documents within XMLThe last 2 sub-options have issues and in the end they are not quite equivalent to the XPath 3 version.I mentioned during the last call last a 3rd possibility: provide very minimal support for maps, namely:- a way to create an empty map (XPath doesn't seem to have a `map:empty()`)- `map:put()`- `map:get()`- `map:keys()`With this, if your XPath implementation supports custom functions and custom objects, you could create and pass a map to `transform()`, get a map back, and have something identical to the XPath 3 function.With XPath 3, you would typically use the native map syntax:let $result := transform(map {"stylesheet-uri" : "render.xsl","source-node" : doc('test.xml')})return $result?output//bodyWith XForms 2/XPath 2, you would instead use the functions above to create a new map:map:get(transform(map:put(map:put(map:empty(),"stylesheet-uri","render.xsl"),"source-node",doc('test.xml')),"output")//bodyThe requirement is 4 small functions backing a basic implementation of maps, plus a function to create an empty map. The result would be source-compatible with the XPath 3 version, modulo maybe the namespaces for the `map:` functions.It would do the job and be relatively usable, but is it worth it?Regards,-Erik