Bug 31532: Add preprocessor to Zebra indexing pipeline to index 880 as linked field

This patch adds a preprocessor XSLT to the Zebra indexing pipeline,
so that 880 fields get indexed as the fields they're linked to. For example,
a "880 $6 245" field would be indexed as a "245" field.

However, because the preprocessor only occurs in the indexing part of the pipeline,
it does not affect the retrieval of MARCXML from Zebra. That MARCXML will be
the same MARCXML that was sent to Zebra from Koha.

Test plan:

0. Revert bug 15187, and apply patch for 31532
1. cp ./etc/zebradb/biblios/etc/dom-config.xml /etc/koha/zebradb/biblios/etc/dom-config.xml
2a. cp etc/zebradb/marc_defs/marc21/biblios/preprocess_marcxml.xsl /etc/koha/zebradb/marc_defs/marc21/biblios/.
2b. cp etc/zebradb/marc_defs/normarc/biblios/preprocess_marcxml.xsl /etc/koha/zebradb/marc_defs/normarc/biblios/.
2c. cp etc/zebradb/marc_defs/unimarc/biblios/preprocess_marcxml.xsl /etc/koha/zebradb/marc_defs/unimarc/biblios/.
3. koha-rebuild-zebra -b -f -v kohadev
4. Note that in search results the 880$6245$a data appears before the 245$a data
5. Note that you can do a title index search on the 880$6245$a data

Signed-off-by: Katrin Fischer <katrin.fischer.83@web.de>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
This commit is contained in:
David Cook 2022-09-08 05:06:38 +00:00 committed by Tomas Cohen Arazi
parent b35df70656
commit 2c673944ba
No known key found for this signature in database
GPG Key ID: 0A272EA1B2F3C15F
4 changed files with 63 additions and 0 deletions

View File

@ -28,6 +28,7 @@ Bibliographic DOM config for MARC XML input
-->
<dom>
<extract name="index">
<xslt stylesheet="preprocess_marcxml.xsl"/>
<xslt stylesheet="biblio-zebra-indexdefs.xsl"/>
</extract>
<retrieve name="marc">

View File

@ -0,0 +1,23 @@
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:marc="http://www.loc.gov/MARC21/slim"
version="1.0">
<xsl:output indent="yes"
method="xml"
version="1.0"
encoding="UTF-8"/>
<xsl:template name="identity" match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="marc:datafield[@tag=880]">
<xsl:element name="datafield" namespace="http://www.loc.gov/MARC21/slim">
<xsl:attribute name="tag"><xsl:value-of select="substring(marc:subfield[@code=6],1,3)"/></xsl:attribute>
<xsl:attribute name="ind1"><xsl:value-of select="@ind1"/></xsl:attribute>
<xsl:attribute name="ind2"><xsl:value-of select="@ind2"/></xsl:attribute>
<xsl:apply-templates select="marc:subfield[@code != '6']"/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>

View File

@ -0,0 +1,23 @@
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:marc="http://www.loc.gov/MARC21/slim"
version="1.0">
<xsl:output indent="yes"
method="xml"
version="1.0"
encoding="UTF-8"/>
<xsl:template name="identity" match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="marc:datafield[@tag=880]">
<xsl:element name="datafield" namespace="http://www.loc.gov/MARC21/slim">
<xsl:attribute name="tag"><xsl:value-of select="substring(marc:subfield[@code=6],1,3)"/></xsl:attribute>
<xsl:attribute name="ind1"><xsl:value-of select="@ind1"/></xsl:attribute>
<xsl:attribute name="ind2"><xsl:value-of select="@ind2"/></xsl:attribute>
<xsl:apply-templates select="marc:subfield[@code != '6']"/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>

View File

@ -0,0 +1,16 @@
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:marc="http://www.loc.gov/MARC21/slim"
version="1.0">
<xsl:output indent="yes"
method="xml"
version="1.0"
encoding="UTF-8"/>
<xsl:template name="identity" match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<!-- There's nothing to do here for UNIMARC but we need this file since the dom-config.xml file is cross-format -->
</xsl:stylesheet>