xsl-list
[Top] [All Lists]

RE: is arity-based "polymorphism" safe to use in xsl 2.0 functions?

2006-02-28 08:53:38
The spec allows you to write this because the designers thought it was
useful, so go ahead and use it.

But I prefer the version at

http://www.w3.org/TR/xpath-functions/#index-of-node


Michael Kay
http://www.saxonica.com/
  

-----Original Message-----
From: Joern Nettingsmeier [mailto:nettings(_at_)folkwang-hochschule(_dot_)de] 
Sent: 28 February 2006 14:57
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: [xsl] is arity-based "polymorphism" safe to use in 
xsl 2.0 functions?

hi !


since the built-in position() function is awkward in some 
cases, i wrote
a little helper positionInContext($haystack, $needle) that 
will tell you
the position of $needle within $haystack.

since it needs to keep an internal counter, i have solved it 
like this:

<!-- this is the "internal" function: -->
<xsl:function name="r2c:positionInContext" as="xs:integer">
   <xsl:param name="haystack" as="node()*"/>
   <xsl:param name="needle" as="node()"/>
   <xsl:param name="position" as="xs:integer"/>
   <xsl:choose>
     <!-- found? -->
     <xsl:when test="$needle is $haystack[1]">
       <xsl:sequence select="$position"/>
     </xsl:when>
     <!-- haystack empty? -->
     <xsl:when test="not($haystack[2])">
       <xsl:sequence select="0"/>
     </xsl:when>
     <!-- try next node in haystack: -->
     <xsl:otherwise>
       <xsl:sequence select="
         r2c:positionInContext(
           $haystack[position() gt 1],
           $needle,
           $position + 1)"
       />
     </xsl:otherwise>
   </xsl:choose>
</xsl:function>

<!-- this is the "API" function: -->
<xsl:function name="r2c:positionInContext" as="xs:integer">
   <xsl:param name="haystack" as="node()*"/>
   <xsl:param name="needle" as="node()"/>
   <xsl:sequence select="r2c:positionInContext($haystack, 
$needle, 1)"/>
</xsl:function>


i know that xsl functions are not polymorphic as to datatypes, but the
spec says they are wrt number of arguments. i wonder: is this sort of
programming style ok, or am i stretching the spec? saxon processes it
just fine.


regards,

jörn

-- 
jörn nettingsmeier

home://germany/45128 essen/lortzingstr. 11/
http://spunk.dnsalias.org
phone://+49/201/491621

if you are a free (as in "free speech") software developer
and you happen to be travelling near my home, drop me a line
and come round for a free (as in "free beer") beer. :-D

--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: 
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--





--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--



<Prev in Thread] Current Thread [Next in Thread>