[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: [saxon] Pattern matching error in xsl:key

Subject: Re: [saxon] Pattern matching error in xsl:key
From: "Dimitre Novatchev dnovatchev@xxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Sat, 5 Sep 2020 17:54:59 -0000
 Re: [saxon] Pattern matching error in xsl:key
> So I have ended up doing an eq comparison and quoting the $source and
$target, which is what I was trying to avoid.

Why do you think any logical reasoning would result in deciding that the
type of $source below must be a string?

>  <xsl:param name="source" select="4.0"/>

The value of the "select" attribute is evaluated as an XPath expression,
What is the type of the xpath expression (hint: it is obviously a decimal
number):

   4.0

Why do you think anyone should conclude that this is a string?

Just curious...

Cheers,
Dimitre

On Sat, Sep 5, 2020 at 10:49 AM Ihe Onwuka <ihe.onwuka@xxxxxxxxx> wrote:

>
>
> On Sat, Sep 5, 2020 at 11:56 AM Martin Honnen <martin.honnen@xxxxxx>
> wrote:
>
>> Am 05.09.2020 um 17:34 schrieb Ihe Onwuka:
>>
>> > No doubt in excerpting I omitted some relevant info. I'll try and fix
>> > that. The XML content is in a separate document and globally namespaced.
>> > Here.
>> >
>> > <versionChanges xmlns="http://changes" >
>> >    <changes from="4.0" to="4.1">
>> >       <rename>
>> >          <metadata/>
>> >       </rename>
>> >    </changes>
>> > </versionChanges>
>> >
>> > and here is the error message
>> >
>> > Warning at char 11 in xsl:key/@match on line 36 column 111 of
>> > myStylesheet.xsl:
>> >    XPTY0004  An error occurred matching pattern
>> >
>> > {element(Q{http://changes}changes)[((data(attribute::attribute(Q{}from)))
>> eq
>> >    (atomizeSingleton($source))) and
>> ((data(attribute::attribute(Q{}to))) eq
>> >    (atomizeSingleton($target)))]}:
>> >
>> >     My guess would be that it's a type error connected with the fact
>> >     you're comparing numbers to strings, but beyond that,
>> >
>> >
>> > I am comparing parameters whose values are 4.0 and 4.1 respectively to
>> > attributes whose values are 4.0 and 4.1 respectively. Saxon has made
>> > it's own assumptions about what types they are and come up with that
>> error.
>>
>> The types are not made up by Saxon but are defined in the XPath/XSLT
>> specs. In the XSLT code if you declare
>>
>>    <xsl:param name="source" select="4.0"/>
>>
>> the expression 4.0 in the select attribute is of type xs:decimal (in a
>> version="2.0" or version="3.0" XSLT code).
>>
>> However, in your untyped XML the attribute value of e.g. @from or @to is
>> of type xs:untypedAtomic.
>>
>> The eq operator only works if both operands have a comparable type, in
>> your case the rules in
>> https://www.w3.org/TR/xpath-31/#id-value-comparisons (5.d) give
>> "Otherwise, a type error is raised [err:XPTY0004].".
>>
>> So using = instead of eq is one way to avoid that, as it in 4.a of
>> https://www.w3.org/TR/xpath-31/#id-general-comparisons stipulates: "If
>> at least one of the two atomic values is an instance of a numeric type,
>> then both atomic values are converted to the type xs:double by applying
>> the fn:number function".
>>
>>
> Correction to my earlier post.
> Using = instead of eq changes the behaviour of the program and it ends up
> incorrectly omitting some of the output.
>
> I'm not going to investigate why because I shouldn't be using an
> existential evaluator anyway.
>
> So I have ended up doing an eq comparison and quoting the $source and
> $target, which is what I was trying to avoid.
>
>
>
> _______________________________________________
> saxon-help mailing list archived at http://saxon.markmail.org/
> saxon-help@xxxxxxxxxxxxxxxxxxxxx
> https://lists.sourceforge.net/lists/listinfo/saxon-help



-- 
Cheers,
Dimitre Novatchev
---------------------------------------
Truly great madness cannot be achieved without significant intelligence.
---------------------------------------
To invent, you need a good imagination and a pile of junk
-------------------------------------
Never fight an inanimate object
-------------------------------------
To avoid situations in which you might make mistakes may be the
biggest mistake of all
------------------------------------
Quality means doing it right when no one is looking.
-------------------------------------
You've achieved success in your field when you don't know whether what
you're doing is work or play
-------------------------------------
To achieve the impossible dream, try going to sleep.
-------------------------------------
Facts do not cease to exist because they are ignored.
-------------------------------------
Typing monkeys will write all Shakespeare's works in 200yrs.Will they write
all patents, too? :)
-------------------------------------
Sanity is madness put to good use.
-------------------------------------
I finally figured out the only reason to be alive is to enjoy it.

Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.