XSLT stylesheet: Generalising over time relations

For the extraction of generalisations another script is used, the XSLT implementation is the following, using a baseline parameter to avoid the inclusion of singular relations.

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
      version="1.0">
     <xsl:output method="xml" version="1.0" encoding="utf-8" 
          omit-xml-declaration="yes" indent="yes"/>
    <!-- gen_lex_times.xsl
       by Thorsten Trippel
       Department of Linguistics and Literary Studies, 
       Bielefeld University
       March 2003
       
       XSL Stylesheet for transforming a set list of time related 
       annotation entities and grouping them.

       A basline is taken as a global parameter.
    ...   

       Tested with saxon, xalan,sablotron and xsltproc ; 
       call from commandline (Linux/Unix) with;
       DOS-systems in the appropriate way.

    Xalan: 
    Call with 
    java -cp /usr/share/java/xalan2.jar 
          org.apache.xalan.xslt.Process 
          -in XMLFILE  -xsl gen_lex_times.xsl -param baseline 3

    Saxon: call with
    java -cp /usr/share/java/saxon.jar com.icl.saxon.StyleSheet  
          XMLFILE gen_lex_times.xsl baseline=3

    XSLTPROC:
    xsltproc -param baseline 3 gen_lex_times.xsl XMLFILE

    Sablotron
    sabcmd gen_lex_times.xsl XMLFILE \$baseline=3
    Requires XSLT 1.0
       -->
   <xsl:param name="baseline"/>
    <xsl:key name="wordsandrelations" 
             match="relationpair" 
             use="concat(baseelement/text(),'_',
                  compelement/text(),'_',relation/@rel)"/>
   <xsl:template match="//struct_rel">
     <xsl:element name="lexicon">
       <xsl:for-each select="relationpair[
                  baseelement and 
                  generate-id()=generate-id(
                  key('wordsandrelations',concat(baseelement,'_',
                       compelement,'_',relation/@rel))[1])]">
         <xsl:if test="count(key('wordsandrelations',
                       concat(baseelement/text(),'_',
                       compelement/text(),'_',relation/@rel))) 
                       &gt; $baseline">
	   <xsl:element name="lexentry">
             <xsl:attribute name="number_of_relations">
               <xsl:value-of select="count(key('wordsandrelations',
                       concat(baseelement/text(),'_',
                       compelement/text(),'_',relation/@rel)))"/>
             </xsl:attribute>
             <xsl:attribute name="relation">
               <xsl:value-of select="relation/@rel"/>
             </xsl:attribute>
             <xsl:element name="baseelement">
               <xsl:value-of select="baseelement"/>
             </xsl:element>
             <xsl:element name="compelement">
               <xsl:value-of select="compelement"/>
             </xsl:element>
             <xsl:element name="baselayer">
               <xsl:value-of select="baselayerid"/>
             </xsl:element>
             <xsl:element name="complayer">
               <xsl:value-of select="complayer"/>
             </xsl:element>
	   </xsl:element>
         </xsl:if>
       </xsl:for-each>  
     </xsl:element>
   </xsl:template>
</xsl:stylesheet>
Thorsten Trippel 2006-11-18