| |Optimize the word search algorithm. Comparison using product |set is a better solution to evaluate whether a node is included |in a partial node-set or not. |
		
			
				
	
	
		
			50 lines
		
	
	
	
		
			1.9 KiB
		
	
	
	
		
			XML
		
	
	
	
	
	
			
		
		
	
	
			50 lines
		
	
	
	
		
			1.9 KiB
		
	
	
	
		
			XML
		
	
	
	
	
	
<?xml version="1.0" encoding="iso-8859-1"?>
 | 
						|
<!-- $FreeBSD: www/share/sgml/transtable-common.xsl,v 1.3 2005/09/18 05:40:09 hrs Exp $ -->
 | 
						|
 | 
						|
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
 | 
						|
 | 
						|
  <!-- these params should be externally bound. The values
 | 
						|
       here are not used actually -->
 | 
						|
  <xsl:param name="transtable.xml" select="'./transtable.xml'" />
 | 
						|
  <xsl:param name="transtable-sortkey.xml" select="'./transtable-sortkey.xml'" />
 | 
						|
 | 
						|
  <xsl:key name="transtable-lookup-key" match="word" use="orig" />
 | 
						|
  <xsl:key name="transtable-lookup-group" match="group/word" use="../@id" />
 | 
						|
  <xsl:key name="transtable-sortkey-lookup-key" match="word" use="@orig" />
 | 
						|
 | 
						|
  <xsl:template name="transtable-lookup">
 | 
						|
    <xsl:param name="word" select="''"/>
 | 
						|
    <xsl:param name="word-group" select="''"/>
 | 
						|
 | 
						|
    <xsl:for-each select="document($transtable.xml)">
 | 
						|
      <xsl:choose>
 | 
						|
	<!-- $p[count(.|$q) = count($q)] means product set of $p and $q-->
 | 
						|
	<xsl:when test="
 | 
						|
	  key('transtable-lookup-group', string($word-group))
 | 
						|
	  [count(.|key('transtable-lookup-key', string($word)))
 | 
						|
	  = count(key('transtable-lookup-key', string($word)))]
 | 
						|
	  ">
 | 
						|
	  <xsl:value-of select="
 | 
						|
	    key('transtable-lookup-group', string($word-group))
 | 
						|
	    [count(.|key('transtable-lookup-key', string($word)))
 | 
						|
	    = count(key('transtable-lookup-key', string($word)))]/tran" />
 | 
						|
	</xsl:when>
 | 
						|
	<xsl:otherwise>
 | 
						|
	  <xsl:value-of select="$word" />
 | 
						|
	</xsl:otherwise>
 | 
						|
      </xsl:choose>
 | 
						|
    </xsl:for-each>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <xsl:template name="transtable-sortkey-lookup">
 | 
						|
    <xsl:param name="word" select="''"/>
 | 
						|
 | 
						|
    <xsl:for-each select="document($transtable-sortkey.xml)/sortkeys">
 | 
						|
      <xsl:for-each select="key('transtable-sortkey-lookup-key', string($word))">
 | 
						|
	<xsl:attribute name="sortkey">
 | 
						|
	  <xsl:value-of select="@sortkey" />
 | 
						|
	</xsl:attribute>
 | 
						|
      </xsl:for-each>
 | 
						|
    </xsl:for-each>
 | 
						|
  </xsl:template>
 | 
						|
</xsl:stylesheet>
 |