Re: [xsl] Signature of a function that may throw an error

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