Subject: Re: [xsl] Signature of a function that may throw an error From: "Christophe Marchand cmarchand@xxxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> Date: Tue, 22 Jan 2019 17:24:45 -0000 |
SaxonEE 9.8.0-14. Christophe Le 22/01/2019 ` 17:28, Michael Kay mike@xxxxxxxxxxxx a icrit : > The XPath spec defines the return type of the error() function as > "none", and the role of "none" in the type system is pretty much > unspecified. As a result, there was always a steady stream of problems > with edge cases in the W3C test suites in this area. > > Saxon actually implements the static return type of error() as item(), > which is intended to ensure that you won't get a static type error > from this sort of construct. > > This particular example doesn't seem to give a static error with Saxon > 9.9, though the error message looks like it comes from Saxon. The code > that produces this error is intended for the case where one of the > branches of the conditional always returns an empty sequence > (typically, an implicit xsl:otherwise). > > What software version are you running? > > Michael Kay > Saxonica > > > >> On 22 Jan 2019, at 14:36, Christophe Marchand cmarchand@xxxxxxxxxx >> <mailto:cmarchand@xxxxxxxxxx> >> <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx >> <mailto:xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>> wrote: >> >> Hello, >> >> I have a function that must return a xs:string, or raise an error, if >> result value can not be computed, or is empty-sequence. >> >> Here is function : >> >> <xsl:function name="conf:getConfVar" as="xs:string"> >> <xsl:param name="conf" as="element(els-conf:conf)"/> >> <xsl:param name="varName" as="xs:string"/> >> <xsl:sequence select=" >> if (exists($conf/els-conf:variable[@name=$varName])) >> then $conf/els-conf:variable[@name=$varName]/@value >> else ( >> error( >> $conf:ERROR_MISSING_ENTRY, >> concat('Entry ',$varName,' is missing in environment >> configuration') >> ) >> ) >> "/> >> </xsl:function> >> >> When a variable does not exist in $conf, I expect an error being >> raised, and expect to catch it in a xsl:try / xsl:catch. >> >> But, in this case, I get this : >> >> XTTE0780: Conditional expression: The condition is not satisfied, so >> an empty sequence is returned, but this is not allowed as the result >> of call to conf:getConfVar >> in xsl:sequence/@select .... >> >> * I understand that error() function never return a value, so >> return value does not satisfies xsl:function/@as constrint. Is it >> correct ? >> * How could I write this, as I want the return type being >> xs:string, and not xs:string?, and I want my error to be raised >> when entry is missing ? >> >> Best regards, >> Christophe >> >> XSL-List info and archive <http://www.mulberrytech.com/xsl/xsl-list> >> EasyUnsubscribe <http://lists.mulberrytech.com/unsub/xsl-list/293509> >> (by email) > > XSL-List info and archive <http://www.mulberrytech.com/xsl/xsl-list> > EasyUnsubscribe <http://lists.mulberrytech.com/unsub/xsl-list/2837134> > (by email <>)
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Signature of a function t, Christophe Marchand | Thread | Re: [xsl] Signature of a function t, Christophe Marchand |
Re: [xsl] Signature of a function t, Imsieke, Gerrit, le- | Date | Re: [xsl] Signature of a function t, Christophe Marchand |
Month |