Hi Andrew,

A precious observation; it appears there isn’t a single test case for that
in the W3 test suite. We’ll fix it with the next release; until then, you
can use head(id(...)).

Thank you,
Christian


On Wed, Jul 24, 2024 at 6:14 PM Andrew Sales <and...@andrewsales.com> wrote:

> Hello,
>
> If I understand the spec for this function[1] correctly, at most one
> element should be returned for a given ID value:
>
> "If several elements have the same ID value, then E is the one that is
> first in document order."
> ("Rules", item 3)
>
> BaseX behaves differently from e.g. Saxon in this respect. The query:
>
> let $doc := document{<foo xml:id='a1'><bar xml:id='a1'/></foo>}
>
> return (
>   'Saxon-HE 11.6:',
>   xslt:transform($doc, <xsl:stylesheet xmlns:xsl="
> http://www.w3.org/1999/XSL/Transform";
>     xmlns:xs="http://www.w3.org/2001/XMLSchema";
>     exclude-result-prefixes="xs"
>     version="3.0">
>
>     <xsl:template match="/">
>         <xsl:sequence select="id('a1')"/>
>     </xsl:template>
>
> </xsl:stylesheet>),
>   'BaseX 10.7:',
>   $doc/id('a1')
> )
>
> returns:
>
> Saxon-HE 11.6:
> <foo xml:id="a1"><bar xml:id="a1"/></foo>
> BaseX 10.7:
> <foo xml:id="a1"><bar xml:id="a1"/></foo>
> <bar xml:id="a1"/>
>
> i.e. Saxon returns only the first in document order, whereas BaseX returns
> both of them.
>
> Grateful for your thoughts,
> Andrew
>
> [1] https://www.w3.org/TR/xpath-functions-31/#func-id
>

Reply via email to