xsl-list
[Top] [All Lists]

Re: [xsl] Efficient way to check sequence membership

2011-03-02 16:28:51
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

--~------------------------------------------------------------------
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>
--~--