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

Subject: Re: [xsl] Signature of a function that may throw an error
From: "Michael Kay mike@xxxxxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Wed, 23 Jan 2019 23:46:57 -0000
> On 23 Jan 2019, at 23:05, Christophe Marchand cmarchand@xxxxxxxxxx
<xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote:
>
> It has been very difficult to understand, and your help, especially on the
code that may raise this error, help us a lot.
>
>

Debugging XSLT can be very challenging. I'm working on a complex stylesheet
myself at the moment (more details, come to XML Prague) and I've been trying
to improve the diagnostics and debugging aids in the product as I go.
> As a conclusion, this orchestrator is going to be re-written totally. Never
trust a program made by a developer you can't trust !
>
Never hesitate to refactor code that's poorly structured, regardless of who
wrote it. Base your decisions on the code, not the author. The best developers
write bad code if their understanding of the requirements was still evolving
while they wrote it.

Michael Kay
Saxonica

> Thanks a lot,
> Christophe
> Le 22/01/2019 C  17:28, Michael Kay mike@xxxxxxxxxxxx
<mailto:mike@xxxxxxxxxxxx> a C)crit :
>> 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" <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 <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 <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 <applewebdata://B21E9064-582E-4BEC-A2F1-BDFB9A3A40B5>)
>>
>> XSL-List info and archive <http://www.mulberrytech.com/xsl/xsl-list>
>> EasyUnsubscribe <http://lists.mulberrytech.com/unsub/xsl-list/2837134> (by
email <applewebdata://B21E9064-582E-4BEC-A2F1-BDFB9A3A40B5>)
>
> XSL-List info and archive <http://www.mulberrytech.com/xsl/xsl-list>
> EasyUnsubscribe <http://lists.mulberrytech.com/unsub/xsl-list/293509> (by
email <>)

Current Thread