- From: Erik Bruchez <erik@bruchez.org>
- Date: Thu, 19 Sep 2013 07:55:47 -0700
- To: Eric van der Vlist <vdv@dyomedea.com>
- Cc: "public-xformsusers@w3.org" <public-xformsusers@w3.org>
Eric, A way to detect individual XPath functions would be good. Ideally, there would be a try/catch in XPath, and with an evaluate() function you could then dynamically test what works and what doesn't. But there isn't, even with XPath 3 (XQuery 3 does have that though). Short of this With Orbeon Forms, an action which fails dispatches an event xxforms-action-error. That with saxon:evaluate() might allow testing on individual functions. -Erik On Thu, Sep 19, 2013 at 6:20 AM, Eric van der Vlist <vdv@dyomedea.com> wrote: > To differentiate between Orbeon Forms,betterFORM and XSLTForms the > following seems to be working: > > <?xml version="1.0" encoding="utf-8"?> > <html xmlns="http://www.w3.org/1999/xhtml" > xmlns:xf="http://www.w3.org/2002/xforms" > xmlns:xxf="http://orbeon.org/oxf/xml/xforms" > xmlns:ev="http://www.w3.org/2001/xml-events"> > <head> > <title>Implementation/version sniffing</title> > <xf:model id="model"> > <xf:instance id="instance" xmlns=""> > <snif> > <tests> > <xpath10></xpath10> > <context></context> > </tests> > <implementations> > <betterform></betterform> > <xsltforms></xsltforms> > <orbeon></orbeon> > </implementations> > <implementation></implementation> > </snif> > </xf:instance> > <xf:bind ref="instance()"> > <xf:bind nodeset="tests"> > <xf:bind nodeset="xpath10" calculate="'1' = > '1.0'"></xf:bind> > <xf:bind nodeset="context" > id="context-bind"></xf:bind> > </xf:bind> > <xf:bind nodeset="implementations"> > <xf:bind nodeset="betterform" > calculate="/snif/tests/xpath10='false' and > not(/snif/tests/context = 'true')"></xf:bind> > <xf:bind nodeset="xsltforms" > calculate="/snif/tests/xpath10"></xf:bind> > <xf:bind nodeset="orbeon" > calculate="/snif/tests/xpath10='false' and /snif/tests/context = 'true'" > ></xf:bind> > </xf:bind> > <xf:bind nodeset="implementation" > calculate="name(/snif/implementations/*[. = 'true'])"></xf:bind> > </xf:bind> > <xf:dispatch ev:event="xforms-ready" name="context-event" > targetid="model"> > <xxf:context name="context" > select="true()"></xxf:context> > </xf:dispatch> > <xf:setvalue ev:event="context-event" bind="context-bind" > value="event('context')"></xf:setvalue> > </xf:model> > </head> > <body> > <xf:output ref="implementation"> > <xf:label>implementation: </xf:label> > </xf:output> > <ul> > <xf:repeat nodeset="*/*"> > <li> > <xf:output ref="."> > <xf:label> > <xf:output value="concat(name(), ': > ')"></xf:output> > </xf:label> > </xf:output> > </li> > </xf:repeat> > </ul> > </body> > </html> > > (http://xformsunit.org/trac/browser/resources/sandbox/sniffing.xhtml ) > > Reminds me of the ugliness of browsers sniffing though and I wish we > could have something better ;) ... > > Thanks, > > Eric > > > Le jeudi 19 septembre 2013 à 11:38 +0200, Eric van der Vlist a écrit : >> Hi, >> >> My test framework (http://xformsunit.org/) is trying hard to work with >> several XForms implementations using generic/standard XForms features >> but I get a number of interoperability issues and I would need to test >> if extension functions are available in the implementation that's >> running a form (or a test suite) and/or to identify the implementation. >> >> The mechanism to do so in XForms 1.1 >> (http://www.w3.org/TR/xforms11/#expr-lib-extension ) seems to be rather >> "destructive" as it would stop any processing when a function is not >> available. >> >> Do you have any idea on how I can achieve this kind of things? >> >> Thanks, >> >> Eric >> >> >> >> > > >
Received on Thursday, 19 September 2013 14:56:36 UTC