[XSL-LIST Mailing List Archive Home] [By Thread] [By Date]

Re: [xsl] Efficient way to check sequence membership


Subject: Re: [xsl] Efficient way to check sequence membership
From: David Carlisle <davidc@xxxxxxxxx>
Date: Wed, 02 Mar 2011 22:28:38 +0000

On 02/03/2011 21:23, Henry S. Thompson wrote:

<xsl:variable
name="stopPat">it|its|itself|they|them|their|what|which|who|whom|this|that|these|those|am|is|are|was|were|be|been|being|have|has|had|having|do|does|did|doing|a|an|the|and|but|if|or|because|as|until|while|of|at|by|for|with|about|against|between|into|through|during|before|after|above|below|to|from|up|down|in|out|on|off|over|under|again|further|then|once|here|there|when|where|why|how|all|any|both|each|few|more|most|other|some|such|no|nor|not|only|own|same|so|than|too|very|s|t|can|will|just|don|should|now</xsl:variable>

<xsl:variable name="stops" select="tokenize($stopPat,'\|')"/>

  <xsl:function name="my:stop1" as="xs:boolean">
   <xsl:param name="w" as="xs:string"/>
   <xsl:sequence select="some $s in $stops satisfies ($s eq $w)"/>
  </xsl:function>

For obvious reasons this seems unlikely to be very efficient.


personally I'd just use <xsl:sequence select="$s=$stops"/>
and leave it to the query optimiser to make this common requirement efficient rather than using a more complicated idiom and then hoping the query optimiser recognises it.


As Dimitre just commented if you want to manually control the efficiency you can build different structures "by hand" or (you could use a xsl:key (although I believe the commercial version of saxon's optimiser may index the sequence lookup even without the hint of using xsl:key, which is a bit inconvenient for a sequence of strings rather than nodes)

David


Current Thread