Bug 8852: DOM XSL now handles subfield substring extraction
authorFrédéric Demians <f.demians@tamil.fr>
Tue, 24 Sep 2013 21:14:50 +0000 (23:14 +0200)
committerGalen Charlton <gmc@esilibrary.com>
Thu, 10 Oct 2013 15:19:20 +0000 (15:19 +0000)
This patch modify koha-indexdefs-to-zebra.xsl in order to add the
ability to populate indexes with subfield substring.

It's now possible to understand such construction as:

<index_subfields xmlns="http://..." tag="100" subfields="a" offset="7" length="1">
  <target_index>tpubdate:s</target_index>
</index_subfields>

Signed-off-by:Mathieu Saby <mathieu.saby@univ-rennes2.fr>

I applied the patch and ran
  xsltproc koha-indexdefs-to-zebra.xsl ../marc_defs/unimarc/biblios/biblio-koha-indexdefs.xml \
     > ../marc_defs/unimarc/biblios/biblio-zebra-indexdefs.xsl
I looked at the generated file. It looks nice.
Then I copied it file in my INSTALLDIR/etc/zebra.... and reindexed my
records with rebuild_zebra.pl
I made some searches on coded position index and non coded position
indexes, everything works.

http://bugs.koha-community.org/show_bug.cgi?id=8252

Signed-off-by: Jonathan Druart <jonathan.druart@biblibre.com>
Signed-off-by: Galen Charlton <gmc@esilibrary.com>

etc/zebradb/xsl/koha-indexdefs-to-zebra.xsl

index 75e2a86..1488b1c 100644 (file)
@@ -253,6 +253,8 @@ definition file (probably something like {biblio,authority}-koha-indexdefs.xml)
     </xsl:template>
 
     <xsl:template name="handle-one-index-subfields">
+        <xsl:variable name="offset"><xsl:value-of select="@offset"/></xsl:variable>
+        <xsl:variable name="length"><xsl:value-of select="@length"/></xsl:variable>
         <xsl:variable name="indexes">
             <xsl:call-template name="get-target-indexes"/>
         </xsl:variable>
@@ -265,7 +267,22 @@ definition file (probably something like {biblio,authority}-koha-indexdefs.xml)
                     </xsl:attribute>
                     <z:index>
                         <xsl:attribute name="name"><xsl:value-of select="normalize-space($indexes)"/></xsl:attribute>
-                        <xslo:value-of select="."/>
+                        <xslo:value-of>
+                            <xsl:attribute name="select">
+                                <xsl:choose>
+                                    <xsl:when test="@length">
+                                        <xsl:text>substring(., </xsl:text>
+                                        <xsl:value-of select="$offset + 1" />
+                                        <xsl:text>, </xsl:text>
+                                        <xsl:value-of select="$length"/>
+                                        <xsl:text>)</xsl:text>
+                                    </xsl:when>
+                                    <xsl:otherwise>
+                                        <xsl:text>.</xsl:text>
+                                    </xsl:otherwise>
+                                </xsl:choose>
+                            </xsl:attribute>
+                        </xslo:value-of>
                     </z:index>
                 </xslo:if>
             </xslo:for-each>