Skip to content
Snippets Groups Projects

Update marc2pivot.xsl - added treatment to clean data when importing

Merged Jean-Blaise Claivaz requested to merge jbc-xsl_MARC2pivot into master
1 file
+ 49
27
Compare changes
  • Side-by-side
  • Inline
@@ -24,7 +24,7 @@
- MARC 856 discarded if $3 != Alternate edition or Dataset
- MARC 300 is cleaned with removal of " p."
- SNSF codes are reduced to their second part only
- Subsubtype of article is added if missing + new treatment of diplomas
-->
<xsl:output method="xml" indent="yes"/>
@@ -46,11 +46,14 @@
<xsl:variable name="subview">
<xsl:choose>
<xsl:when test="marc:datafield[@tag='980']/marc:subfield[@code='b'] = 'Livre'">livre</xsl:when>
<xsl:when test="marc:datafield[@tag='980']/marc:subfield[@code='b'] = 'Chapitre de livre'">chap_liv</xsl:when>
<xsl:when test="marc:datafield[@tag='980']/marc:subfield[@code='b'] = 'Actes de conférence'">actes</xsl:when>
<xsl:when test="marc:datafield[@tag='980']/marc:subfield[@code='b'] = 'Chapitre d''actes'">chap_act</xsl:when>
<xsl:when test="marc:datafield[@tag='980']/marc:subfield[@code='b'] = 'Ouvrage collectif'">livre_collectif</xsl:when>
<xsl:when test="marc:datafield[@tag='980']/marc:subfield[@code='b'] = 'Contribution à un dictionnaire / une encyclopédie'">contrib</xsl:when>
<xsl:when test="marc:datafield[@tag='980']/marc:subfield[@code='b'] = 'Article scientifique'">art_sci</xsl:when>
<xsl:when test="marc:datafield[@tag='980']/marc:subfield[@code='b'] = 'Article professionnel'">art_pro</xsl:when>
<xsl:when test="marc:datafield[@tag='980']/marc:subfield[@code='b'] = 'Thèse'">thesis</xsl:when>
</xsl:choose>
</xsl:variable>
@@ -76,6 +79,11 @@
<xsl:value-of select="marc:datafield[@tag='980']/marc:subfield[@code='c']"/>
</subsubtype>
</xsl:if>
<xsl:if test="$view = 'article' and not(marc:datafield[@tag='980']/marc:subfield[@code='c'])">
<subsubtype>
<xsl:text>Article</xsl:text>
</subsubtype>
</xsl:if>
<!-- **** ***** **** -->
<!-- **** TITLE **** -->
@@ -288,7 +296,7 @@
<!-- **** PAGES **** -->
<!-- **** ***** **** -->
<xsl:choose>
<xsl:when test="marc:datafield[@tag='300']">
<xsl:when test="marc:datafield[@tag='300'] and $view != 'article' and $subview != 'chap_act' and $subview != 'chap_liv' and $subview != 'contrib'">
<pages>
<paging><xsl:value-of select="translate(marc:datafield[@tag='300']/marc:subfield[@code='a'],' p.','')"/></paging>
</pages>
@@ -296,11 +304,14 @@
<xsl:when test="marc:datafield[@tag='773']/marc:subfield[@code='p'] != ''">
<pages>
<xsl:choose>
<xsl:when test="contains(marc:datafield[@tag='773']/marc:subfield[@code='p'],'-')">
<paging><xsl:value-of select="marc:datafield[@tag='773']/marc:subfield[@code='p']"/></paging>
<xsl:when test="contains(marc:datafield[@tag='773']/marc:subfield[@code='p'],'-') or contains(marc:datafield[@tag='773']/marc:subfield[@code='p'],'–')">
<paging><xsl:value-of select="translate(marc:datafield[@tag='773']/marc:subfield[@code='p'],'– ','-')"/></paging>
</xsl:when>
<xsl:otherwise>
<xsl:when test="$view = 'article'">
<other><xsl:value-of select="marc:datafield[@tag='773']/marc:subfield[@code='p']"/></other>
</xsl:when>
<xsl:otherwise>
<paging><xsl:value-of select="translate(marc:datafield[@tag='773']/marc:subfield[@code='p'],' p.','')"/></paging>
</xsl:otherwise>
</xsl:choose>
</pages>
@@ -341,22 +352,16 @@
<urn><xsl:value-of select="marc:subfield[@code='a']"/></urn>
</xsl:if>
</xsl:for-each>
<xsl:for-each select="marc:datafield[@tag='088']">
<xsl:if test="marc:subfield[@code='a'] != ''">
<local_number><xsl:value-of select="marc:subfield[@code='a']"/></local_number>
</xsl:if>
</xsl:for-each>
<xsl:for-each select="marc:datafield[@tag='502']">
<xsl:choose>
<xsl:when test="marc:subfield[@code='8'] != ''">
<local_number><xsl:value-of select="marc:subfield[@code='8']"/></local_number>
</xsl:when>
<!-- **** Thèses non UNIGE **** -->
<xsl:otherwise>
<local_number><xsl:value-of select="substring(marc:subfield[@code='a'],21,string-length(marc:subfield[@code='a'])-26)"/></local_number>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
<xsl:choose>
<xsl:when test="marc:datafield[@tag='502']/marc:subfield[@code='8'] != ''">
<local_number><xsl:value-of select="marc:datafield[@tag='502']/marc:subfield[@code='8']"/></local_number>
</xsl:when>
<xsl:when test="marc:datafield[@tag='088']">
<xsl:if test="marc:datafield[@tag='088']/marc:subfield[@code='a'] != marc:datafield[@tag='490']/marc:subfield[@code='v']">
<local_number><xsl:value-of select="marc:datafield[@tag='088']/marc:subfield[@code='a']"/></local_number>
</xsl:if>
</xsl:when>
</xsl:choose>
</identifiers>
</xsl:if>
@@ -388,9 +393,26 @@
<!-- **** **** **** -->
<!-- **** NOTE **** -->
<!-- **** **** **** -->
<xsl:for-each select="marc:datafield[@tag='500']">
<note><xsl:value-of select="marc:subfield[@code='a']"/></note>
</xsl:for-each>
<xsl:choose>
<xsl:when test="contains(marc:datafield[@tag='502']/marc:subfield[@code='a'],'Genève') and contains(marc:datafield[@tag='502']/marc:subfield[@code='a'],'Lausanne')">
<note><xsl:text>Diplôme commun des univ. de Genève et Lausanne</xsl:text>
<xsl:if test="marc:datafield[@tag='500']">
<xsl:text>. </xsl:text>
<xsl:value-of select="marc:datafield[@tag='500']/marc:subfield[@code='a']"/>
</xsl:if>
</note>
</xsl:when>
<xsl:when test="contains(marc:datafield[@tag='502']/marc:subfield[@code='a'],'Genève')">
</xsl:when>
<xsl:otherwise>
<note><xsl:text>Diplôme décerné par </xsl:text><xsl:value-of select="substring-before(substring-after(marc:datafield[@tag='502']/marc:subfield[@code='a'],' : '),', ')"/>
<xsl:if test="marc:datafield[@tag='500']">
<xsl:text>. </xsl:text>
<xsl:value-of select="marc:datafield[@tag='500']/marc:subfield[@code='a']"/>
</xsl:if>
</note>
</xsl:otherwise>
</xsl:choose>
<!-- **** ******** **** -->
<!-- **** KEYWORDS **** -->
@@ -474,12 +496,12 @@
<xsl:for-each select="marc:datafield[@tag='260']">
<xsl:if test="marc:subfield[@code='a'] or marc:subfield[@code='b']">
<publisher>
<xsl:if test="marc:subfield[@code='a']">
<xsl:if test="marc:subfield[@code='a'] and marc:subfield[@code='a'] != '[S.l.]'">
<place>
<xsl:value-of select="marc:subfield[@code='a']"/>
</place>
</xsl:if>
<xsl:if test="marc:subfield[@code='b']">
<xsl:if test="marc:subfield[@code='b'] and marc:subfield[@code='b'] != '[s.n.]'">
<name>
<xsl:value-of select="marc:subfield[@code='b']"/>
</name>
@@ -753,7 +775,7 @@
<xsl:value-of select="marc:subfield[@code='n']"/>
</issue>
</xsl:if>
<xsl:if test="marc:subfield[@code='h'] != ''">
<xsl:if test="marc:subfield[@code='h'] != '' and marc:subfield[@code='h'] != 'C'">
<special_issue>
<xsl:value-of select="marc:subfield[@code='h']"/>
</special_issue>
Loading