10c08b6552
Bug 23290 explicitly disabled entity expansion during XML parsing for security reasons. However, many XSLTs define the following entity: <!ENTITY nbsp " " > They don't use the entity  , but its presence could lead to confusion. Signed-off-by: Eden Bacani <eden.bacani@gmail.com> Signed-off-by: Katrin Fischer <katrin.fischer.83@web.de> Signed-off-by: Katrin Fischer <katrin.fischer.83@web.de> Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
1393 lines
63 KiB
XML
1393 lines
63 KiB
XML
<?xml version="1.0" encoding="UTF-8"?>
|
|
|
|
<!DOCTYPE stylesheet>
|
|
|
|
<xsl:stylesheet version="1.0" xmlns:mads="http://www.loc.gov/mads/v2"
|
|
xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:marc="http://www.loc.gov/MARC21/slim"
|
|
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" exclude-result-prefixes="marc">
|
|
|
|
<xsl:include href="http://www.loc.gov/marcxml/xslt/MARC21slimUtils.xsl"/>
|
|
<xsl:output method="xml" indent="yes" encoding="UTF-8"/>
|
|
<xsl:strip-space elements="*"/>
|
|
<!-- Stylesheet copyright (c) 2011 Library of Congress
|
|
-->
|
|
|
|
<!--
|
|
2.10 fixed type=other and type=otherType for mads:related tmee 09/16/2011
|
|
2.09 fixed professionTerm and genreTerm empty tag error tmee 09/16/2011
|
|
2.08 fixed marc:subfield @code='i' matching error tmee 09/16/2011
|
|
2.07 fixed 555 duplication error tmee 08/10/2011
|
|
2.06 fixed topic subfield error tmee 08/10/2011
|
|
2.05 fixed title subfield error tmee 06/20/2011
|
|
2.04 fixed geographicSubdivision mapping for authority element tmee 06/16/2011
|
|
2.03 added classification for 053, 055, 060, 065, 070, 080, 082, 083, 086, 087 tmee 06/03/2011
|
|
2.02 added descriptionStandard for 008/10 tmee 04/27/2011
|
|
2.01 added extensions for 046, 336, 370, 374, 375, 376 tmee 04/08/2011
|
|
2.00 redefined imported MODS elements in version 1.0 to MADS elements in version 2.0 tmee 02/08/2011
|
|
1.08 added 372 subfields $a $s $t for <fieldOfActivity> tmee 06/24/2010
|
|
1.07 removed role/roleTerm 100, 110, 111, 400, 410, 411, 500, 510, 511, 700, 710, 711 tmee 06/24/2010
|
|
1.06 added strip-space tmee 06/24/2010
|
|
1.05 added subfield $a for 130, 430, 530 tmee 06/21/2010
|
|
1.04 fixed 550 z omission ntra 08/11/2008
|
|
1.03 removed duplication of 550 $a text tmee 11/01/2006
|
|
1.02 fixed namespace references between mads and mods ntra 10/06/2006
|
|
1.01 revised rgue/jrad 11/29/05
|
|
1.00 adapted from MARC21Slim2MODS3.xsl ntra 07/06/05
|
|
-->
|
|
|
|
<!-- authority attribute defaults to 'naf' if not set using this authority parameter, for <authority> descriptors: name, titleInfo, geographic -->
|
|
<xsl:param name="authority"/>
|
|
<xsl:variable name="auth">
|
|
<xsl:choose>
|
|
<xsl:when test="$authority">
|
|
<xsl:value-of select="$authority"/>
|
|
</xsl:when>
|
|
<xsl:otherwise>naf</xsl:otherwise>
|
|
</xsl:choose>
|
|
</xsl:variable>
|
|
<xsl:variable name="controlField008" select="marc:controlfield[@tag='008']"/>
|
|
<xsl:variable name="controlField008-06"
|
|
select="substring(descendant-or-self::marc:controlfield[@tag=008],7,1)"/>
|
|
<xsl:variable name="controlField008-11"
|
|
select="substring(descendant-or-self::marc:controlfield[@tag=008],12,1)"/>
|
|
<xsl:variable name="controlField008-14"
|
|
select="substring(descendant-or-self::marc:controlfield[@tag=008],15,1)"/>
|
|
<xsl:template match="/">
|
|
<xsl:choose>
|
|
<xsl:when test="descendant-or-self::marc:collection">
|
|
<mads:madsCollection xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
xsi:schemaLocation="http://www.loc.gov/mads/v2 http://www.loc.gov/standards/mads/v2/mads-2-0.xsd">
|
|
<xsl:for-each select="descendant-or-self::marc:collection/marc:record">
|
|
<mads:mads version="2.0">
|
|
<xsl:call-template name="marcRecord"/>
|
|
</mads:mads>
|
|
</xsl:for-each>
|
|
</mads:madsCollection>
|
|
</xsl:when>
|
|
<xsl:otherwise>
|
|
<mads:mads version="2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
xsi:schemaLocation="http://www.loc.gov/mads/v2 http://www.loc.gov/standards/mads/mads-2-0.xsd">
|
|
<xsl:for-each select="descendant-or-self::marc:record">
|
|
<xsl:call-template name="marcRecord"/>
|
|
</xsl:for-each>
|
|
</mads:mads>
|
|
</xsl:otherwise>
|
|
</xsl:choose>
|
|
</xsl:template>
|
|
|
|
<xsl:template name="marcRecord">
|
|
<mads:authority>
|
|
<!-- 2.04 -->
|
|
<xsl:choose>
|
|
<xsl:when test="$controlField008-06='d'">
|
|
<xsl:attribute name="geographicSubdivision">
|
|
<xsl:text>direct</xsl:text>
|
|
</xsl:attribute>
|
|
</xsl:when>
|
|
<xsl:when test="$controlField008-06='i'">
|
|
<xsl:attribute name="geographicSubdivision">
|
|
<xsl:text>indirect</xsl:text>
|
|
</xsl:attribute>
|
|
</xsl:when>
|
|
<xsl:when test="$controlField008-06='n'">
|
|
<xsl:attribute name="geographicSubdivision">
|
|
<xsl:text>not applicable</xsl:text>
|
|
</xsl:attribute>
|
|
</xsl:when>
|
|
</xsl:choose>
|
|
|
|
<xsl:apply-templates select="marc:datafield[100 <= @tag and @tag < 200]"/>
|
|
</mads:authority>
|
|
|
|
<!-- related -->
|
|
<xsl:apply-templates
|
|
select="marc:datafield[500 <= @tag and @tag <= 585]|marc:datafield[700 <= @tag and @tag <= 785]"/>
|
|
|
|
<!-- variant -->
|
|
<xsl:apply-templates select="marc:datafield[400 <= @tag and @tag <= 485]"/>
|
|
|
|
<!-- notes -->
|
|
<xsl:apply-templates select="marc:datafield[667 <= @tag and @tag <= 688]"/>
|
|
|
|
<!-- url -->
|
|
<xsl:apply-templates select="marc:datafield[@tag=856]"/>
|
|
<xsl:apply-templates select="marc:datafield[@tag=010]"/>
|
|
<xsl:apply-templates select="marc:datafield[@tag=024]"/>
|
|
<xsl:apply-templates select="marc:datafield[@tag=372]"/>
|
|
|
|
<!-- classification -->
|
|
<xsl:apply-templates select="marc:datafield[@tag=053]"/>
|
|
<xsl:apply-templates select="marc:datafield[@tag=055]"/>
|
|
<xsl:apply-templates select="marc:datafield[@tag=060]"/>
|
|
<xsl:apply-templates select="marc:datafield[@tag=065]"/>
|
|
<xsl:apply-templates select="marc:datafield[@tag=070]"/>
|
|
<xsl:apply-templates select="marc:datafield[@tag=080]"/>
|
|
<xsl:apply-templates select="marc:datafield[@tag=082]"/>
|
|
<xsl:apply-templates select="marc:datafield[@tag=083]"/>
|
|
<xsl:apply-templates select="marc:datafield[@tag=086]"/>
|
|
<xsl:apply-templates select="marc:datafield[@tag=087]"/>
|
|
|
|
<!-- affiliation-->
|
|
|
|
<xsl:for-each select="marc:datafield[@tag=373]">
|
|
<mads:affiliation>
|
|
<mads:position>
|
|
<xsl:value-of select="marc:subfield[@code='a']"/>
|
|
</mads:position>
|
|
<mads:dateValid point="start">
|
|
<xsl:value-of select="marc:subfield[@code='s']"/>
|
|
</mads:dateValid>
|
|
<mads:dateValid point="end">
|
|
<xsl:value-of select="marc:subfield[@code='t']"/>
|
|
</mads:dateValid>
|
|
</mads:affiliation>
|
|
</xsl:for-each>
|
|
<xsl:for-each select="marc:datafield[@tag=371]">
|
|
<mads:affiliation>
|
|
<mads:address>
|
|
<mads:street>
|
|
<xsl:value-of select="marc:subfield[@code='a']"/>
|
|
</mads:street>
|
|
<mads:city>
|
|
<xsl:value-of select="marc:subfield[@code='b']"/>
|
|
</mads:city>
|
|
<mads:state>
|
|
<xsl:value-of select="marc:subfield[@code='c']"/>
|
|
</mads:state>
|
|
<mads:country>
|
|
<xsl:value-of select="marc:subfield[@code='d']"/>
|
|
</mads:country>
|
|
<mads:postcode>
|
|
<xsl:value-of select="marc:subfield[@code='e']"/>
|
|
</mads:postcode>
|
|
</mads:address>
|
|
<mads:email>
|
|
<xsl:value-of select="marc:subfield[@code='m']"/>
|
|
</mads:email>
|
|
</mads:affiliation>
|
|
</xsl:for-each>
|
|
|
|
<!-- extension-->
|
|
<xsl:for-each select="marc:datafield[@tag=336]">
|
|
<mads:extension>
|
|
<mads:contentType>
|
|
<mads:contentType type="text">
|
|
<xsl:value-of select="marc:subfield[@code='a']"/>
|
|
</mads:contentType>
|
|
<mads:contentType type="code">
|
|
<xsl:value-of select="marc:subfield[@code='b']"/>
|
|
</mads:contentType>
|
|
</mads:contentType>
|
|
</mads:extension>
|
|
</xsl:for-each>
|
|
|
|
<xsl:for-each select="marc:datafield[@tag=374]">
|
|
<mads:extension>
|
|
<mads:profession>
|
|
<xsl:choose>
|
|
<xsl:when test="marc:subfield[@code='a']">
|
|
<mads:professionTerm>
|
|
<xsl:value-of select="marc:subfield[@code='a']"/>
|
|
</mads:professionTerm>
|
|
</xsl:when>
|
|
<xsl:when test="marc:subfield[@code='s']">
|
|
<mads:dateValid point="start">
|
|
<xsl:value-of select="marc:subfield[@code='s']"/>
|
|
</mads:dateValid>
|
|
</xsl:when>
|
|
<xsl:when test="marc:subfield[@code='t']">
|
|
<mads:dateValid point="end">
|
|
<xsl:value-of select="marc:subfield[@code='t']"/>
|
|
</mads:dateValid>
|
|
</xsl:when>
|
|
</xsl:choose>
|
|
</mads:profession>
|
|
</mads:extension>
|
|
</xsl:for-each>
|
|
|
|
<xsl:for-each select="marc:datafield[@tag=375]">
|
|
<mads:extension>
|
|
<mads:gender>
|
|
<xsl:choose>
|
|
<xsl:when test="marc:subfield[@code='a']">
|
|
<mads:genderTerm>
|
|
<xsl:value-of select="marc:subfield[@code='a']"/>
|
|
</mads:genderTerm>
|
|
</xsl:when>
|
|
<xsl:when test="marc:subfield[@code='s']">
|
|
<mads:dateValid point="start">
|
|
<xsl:value-of select="marc:subfield[@code='s']"/>
|
|
</mads:dateValid>
|
|
</xsl:when>
|
|
<xsl:when test="marc:subfield[@code='t']">
|
|
<mads:dateValid point="end">
|
|
<xsl:value-of select="marc:subfield[@code='t']"/>
|
|
</mads:dateValid>
|
|
</xsl:when>
|
|
</xsl:choose>
|
|
</mads:gender>
|
|
</mads:extension>
|
|
</xsl:for-each>
|
|
|
|
<xsl:for-each select="marc:datafield[@tag=376]">
|
|
<mads:extension>
|
|
<mads:familyInformation>
|
|
<mads:typeOfFamily>
|
|
<xsl:value-of select="marc:subfield[@code='a']"/>
|
|
</mads:typeOfFamily>
|
|
<mads:nameOfProminentMember>
|
|
<xsl:value-of select="marc:subfield[@code='b']"/>
|
|
</mads:nameOfProminentMember>
|
|
<mads:hereditaryTitle>
|
|
<xsl:value-of select="marc:subfield[@code='c']"/>
|
|
</mads:hereditaryTitle>
|
|
<mads:dateValid point="start">
|
|
<xsl:value-of select="marc:subfield[@code='s']"/>
|
|
</mads:dateValid>
|
|
<mads:dateValid point="end">
|
|
<xsl:value-of select="marc:subfield[@code='t']"/>
|
|
</mads:dateValid>
|
|
</mads:familyInformation>
|
|
</mads:extension>
|
|
</xsl:for-each>
|
|
|
|
<mads:recordInfo>
|
|
<mads:recordOrigin>Converted from MARCXML to MADS version 2.0 (Revision 2.10)</mads:recordOrigin>
|
|
<!-- <xsl:apply-templates select="marc:datafield[@tag=024]"/> -->
|
|
|
|
<xsl:apply-templates select="marc:datafield[@tag=040]/marc:subfield[@code='a']"/>
|
|
<xsl:apply-templates select="marc:controlfield[@tag=005]"/>
|
|
<xsl:apply-templates select="marc:controlfield[@tag=001]"/>
|
|
<xsl:apply-templates select="marc:datafield[@tag=040]/marc:subfield[@code='b']"/>
|
|
<xsl:apply-templates select="marc:datafield[@tag=040]/marc:subfield[@code='e']"/>
|
|
<xsl:for-each select="marc:controlfield[@tag=008]">
|
|
<xsl:if test="substring(.,11,1)='a'">
|
|
<mads:descriptionStandard>
|
|
<xsl:text>earlier rules</xsl:text>
|
|
</mads:descriptionStandard>
|
|
</xsl:if>
|
|
<xsl:if test="substring(.,11,1)='b'">
|
|
<mads:descriptionStandard>
|
|
<xsl:text>aacr1</xsl:text>
|
|
</mads:descriptionStandard>
|
|
</xsl:if>
|
|
<xsl:if test="substring(.,11,1)='c'">
|
|
<mads:descriptionStandard>
|
|
<xsl:text>aacr2</xsl:text>
|
|
</mads:descriptionStandard>
|
|
</xsl:if>
|
|
<xsl:if test="substring(.,11,1)='d'">
|
|
<mads:descriptionStandard>
|
|
<xsl:text>aacr2 compatible</xsl:text>
|
|
</mads:descriptionStandard>
|
|
</xsl:if>
|
|
<xsl:if test="substring(.,11,1)='z'">
|
|
<mads:descriptionStandard>
|
|
<xsl:text>other rules</xsl:text>
|
|
</mads:descriptionStandard>
|
|
</xsl:if>
|
|
</xsl:for-each>
|
|
</mads:recordInfo>
|
|
</xsl:template>
|
|
|
|
<!-- start of secondary templates -->
|
|
|
|
<!-- ======== xlink ======== -->
|
|
|
|
<!-- <xsl:template name="uri">
|
|
<xsl:for-each select="marc:subfield[@code='0']">
|
|
<xsl:attribute name="xlink:href">
|
|
<xsl:value-of select="."/>
|
|
</xsl:attribute>
|
|
</xsl:for-each>
|
|
</xsl:template>
|
|
-->
|
|
<xsl:template match="marc:subfield[@code='i']">
|
|
<xsl:attribute name="otherType">
|
|
<xsl:value-of select="."/>
|
|
</xsl:attribute>
|
|
</xsl:template>
|
|
|
|
<!-- No role/roleTerm mapped in MADS 06/24/2010
|
|
<xsl:template name="role">
|
|
<xsl:for-each select="marc:subfield[@code='e']">
|
|
<mads:role>
|
|
<mads:roleTerm type="text">
|
|
<xsl:value-of select="."/>
|
|
</mads:roleTerm>
|
|
</mads:role>
|
|
</xsl:for-each>
|
|
</xsl:template>
|
|
-->
|
|
|
|
<xsl:template name="part">
|
|
<xsl:variable name="partNumber">
|
|
<xsl:call-template name="specialSubfieldSelect">
|
|
<xsl:with-param name="axis">n</xsl:with-param>
|
|
<xsl:with-param name="anyCodes">n</xsl:with-param>
|
|
<xsl:with-param name="afterCodes">fghkdlmor</xsl:with-param>
|
|
</xsl:call-template>
|
|
</xsl:variable>
|
|
<xsl:variable name="partName">
|
|
<xsl:call-template name="specialSubfieldSelect">
|
|
<xsl:with-param name="axis">p</xsl:with-param>
|
|
<xsl:with-param name="anyCodes">p</xsl:with-param>
|
|
<xsl:with-param name="afterCodes">fghkdlmor</xsl:with-param>
|
|
</xsl:call-template>
|
|
</xsl:variable>
|
|
<xsl:if test="string-length(normalize-space($partNumber))">
|
|
<mads:partNumber>
|
|
<xsl:call-template name="chopPunctuation">
|
|
<xsl:with-param name="chopString" select="$partNumber"/>
|
|
</xsl:call-template>
|
|
</mads:partNumber>
|
|
</xsl:if>
|
|
<xsl:if test="string-length(normalize-space($partName))">
|
|
<mads:partName>
|
|
<xsl:call-template name="chopPunctuation">
|
|
<xsl:with-param name="chopString" select="$partName"/>
|
|
</xsl:call-template>
|
|
</mads:partName>
|
|
</xsl:if>
|
|
</xsl:template>
|
|
|
|
<xsl:template name="nameABCDN">
|
|
<xsl:for-each select="marc:subfield[@code='a']">
|
|
<mads:namePart>
|
|
<xsl:call-template name="chopPunctuation">
|
|
<xsl:with-param name="chopString" select="."/>
|
|
</xsl:call-template>
|
|
</mads:namePart>
|
|
</xsl:for-each>
|
|
<xsl:for-each select="marc:subfield[@code='b']">
|
|
<mads:namePart>
|
|
<xsl:value-of select="."/>
|
|
</mads:namePart>
|
|
</xsl:for-each>
|
|
<xsl:if
|
|
test="marc:subfield[@code='c'] or marc:subfield[@code='d'] or marc:subfield[@code='n']">
|
|
<mads:namePart>
|
|
<xsl:call-template name="subfieldSelect">
|
|
<xsl:with-param name="codes">cdn</xsl:with-param>
|
|
</xsl:call-template>
|
|
</mads:namePart>
|
|
</xsl:if>
|
|
</xsl:template>
|
|
|
|
<xsl:template name="nameABCDQ">
|
|
<mads:namePart>
|
|
<xsl:call-template name="chopPunctuation">
|
|
<xsl:with-param name="chopString">
|
|
<xsl:call-template name="subfieldSelect">
|
|
<xsl:with-param name="codes">aq</xsl:with-param>
|
|
</xsl:call-template>
|
|
</xsl:with-param>
|
|
</xsl:call-template>
|
|
</mads:namePart>
|
|
<xsl:call-template name="termsOfAddress"/>
|
|
<xsl:call-template name="nameDate"/>
|
|
</xsl:template>
|
|
|
|
<xsl:template name="nameACDENQ">
|
|
<mads:namePart>
|
|
<xsl:call-template name="subfieldSelect">
|
|
<xsl:with-param name="codes">acdenq</xsl:with-param>
|
|
</xsl:call-template>
|
|
</mads:namePart>
|
|
</xsl:template>
|
|
|
|
<xsl:template name="nameDate">
|
|
<xsl:for-each select="marc:subfield[@code='d']">
|
|
<mads:namePart type="date">
|
|
<xsl:call-template name="chopPunctuation">
|
|
<xsl:with-param name="chopString" select="."/>
|
|
</xsl:call-template>
|
|
</mads:namePart>
|
|
</xsl:for-each>
|
|
</xsl:template>
|
|
|
|
<xsl:template name="specialSubfieldSelect">
|
|
<xsl:param name="anyCodes"/>
|
|
<xsl:param name="axis"/>
|
|
<xsl:param name="beforeCodes"/>
|
|
<xsl:param name="afterCodes"/>
|
|
<xsl:variable name="str">
|
|
<xsl:for-each select="marc:subfield">
|
|
<xsl:if
|
|
test="contains($anyCodes, @code) or (contains($beforeCodes,@code) and following-sibling::marc:subfield[@code=$axis]) or (contains($afterCodes,@code) and preceding-sibling::marc:subfield[@code=$axis])">
|
|
<xsl:value-of select="text()"/>
|
|
<xsl:text> </xsl:text>
|
|
</xsl:if>
|
|
</xsl:for-each>
|
|
</xsl:variable>
|
|
<xsl:value-of select="substring($str,1,string-length($str)-1)"/>
|
|
</xsl:template>
|
|
|
|
<xsl:template name="termsOfAddress">
|
|
<xsl:if test="marc:subfield[@code='b' or @code='c']">
|
|
<mads:namePart type="termsOfAddress">
|
|
<xsl:call-template name="chopPunctuation">
|
|
<xsl:with-param name="chopString">
|
|
<xsl:call-template name="subfieldSelect">
|
|
<xsl:with-param name="codes">bc</xsl:with-param>
|
|
</xsl:call-template>
|
|
</xsl:with-param>
|
|
</xsl:call-template>
|
|
</mads:namePart>
|
|
</xsl:if>
|
|
</xsl:template>
|
|
|
|
<xsl:template name="displayLabel">
|
|
<xsl:if test="marc:subfield[@code='z']">
|
|
<xsl:attribute name="displayLabel">
|
|
<xsl:value-of select="marc:subfield[@code='z']"/>
|
|
</xsl:attribute>
|
|
</xsl:if>
|
|
<xsl:if test="marc:subfield[@code='3']">
|
|
<xsl:attribute name="displayLabel">
|
|
<xsl:value-of select="marc:subfield[@code='3']"/>
|
|
</xsl:attribute>
|
|
</xsl:if>
|
|
</xsl:template>
|
|
|
|
<xsl:template name="isInvalid">
|
|
<xsl:if test="@code='z'">
|
|
<xsl:attribute name="invalid">yes</xsl:attribute>
|
|
</xsl:if>
|
|
</xsl:template>
|
|
|
|
<xsl:template name="sub2Attribute">
|
|
<!-- 024 -->
|
|
<xsl:if test="../marc:subfield[@code='2']">
|
|
<xsl:attribute name="type">
|
|
<xsl:value-of select="../marc:subfield[@code='2']"/>
|
|
</xsl:attribute>
|
|
</xsl:if>
|
|
</xsl:template>
|
|
|
|
<xsl:template match="marc:controlfield[@tag=001]">
|
|
<mads:recordIdentifier>
|
|
<xsl:if test="../marc:controlfield[@tag=003]">
|
|
<xsl:attribute name="source">
|
|
<xsl:value-of select="../marc:controlfield[@tag=003]"/>
|
|
</xsl:attribute>
|
|
</xsl:if>
|
|
<xsl:value-of select="."/>
|
|
</mads:recordIdentifier>
|
|
</xsl:template>
|
|
|
|
<xsl:template match="marc:controlfield[@tag=005]">
|
|
<mads:recordChangeDate encoding="iso8601">
|
|
<xsl:value-of select="."/>
|
|
</mads:recordChangeDate>
|
|
</xsl:template>
|
|
|
|
<xsl:template match="marc:controlfield[@tag=008]">
|
|
<mads:recordCreationDate encoding="marc">
|
|
<xsl:value-of select="substring(.,1,6)"/>
|
|
</mads:recordCreationDate>
|
|
</xsl:template>
|
|
|
|
<xsl:template match="marc:datafield[@tag=010]">
|
|
<xsl:for-each select="marc:subfield">
|
|
<mads:identifier type="lccn">
|
|
<xsl:call-template name="isInvalid"/>
|
|
<xsl:value-of select="."/>
|
|
</mads:identifier>
|
|
</xsl:for-each>
|
|
</xsl:template>
|
|
|
|
<xsl:template match="marc:datafield[@tag=024]">
|
|
<xsl:for-each select="marc:subfield[not(@code=2)]">
|
|
<mads:identifier>
|
|
<xsl:call-template name="isInvalid"/>
|
|
<xsl:call-template name="sub2Attribute"/>
|
|
<xsl:value-of select="."/>
|
|
</mads:identifier>
|
|
</xsl:for-each>
|
|
</xsl:template>
|
|
|
|
<!-- ========== 372 ========== -->
|
|
<xsl:template match="marc:datafield[@tag=372]">
|
|
<mads:fieldOfActivity>
|
|
<xsl:call-template name="subfieldSelect">
|
|
<xsl:with-param name="codes">a</xsl:with-param>
|
|
</xsl:call-template>
|
|
<xsl:text>-</xsl:text>
|
|
<xsl:call-template name="subfieldSelect">
|
|
<xsl:with-param name="codes">st</xsl:with-param>
|
|
</xsl:call-template>
|
|
</mads:fieldOfActivity>
|
|
</xsl:template>
|
|
|
|
|
|
<!-- ========== 040 ========== -->
|
|
<xsl:template match="marc:datafield[@tag=040]/marc:subfield[@code='a']">
|
|
<mads:recordContentSource authority="marcorg">
|
|
<xsl:value-of select="."/>
|
|
</mads:recordContentSource>
|
|
</xsl:template>
|
|
|
|
<xsl:template match="marc:datafield[@tag=040]/marc:subfield[@code='b']">
|
|
<mads:languageOfCataloging>
|
|
<mads:languageTerm authority="iso639-2b" type="code">
|
|
<xsl:value-of select="."/>
|
|
</mads:languageTerm>
|
|
</mads:languageOfCataloging>
|
|
</xsl:template>
|
|
|
|
<xsl:template match="marc:datafield[@tag=040]/marc:subfield[@code='e']">
|
|
<mads:descriptionStandard>
|
|
<xsl:value-of select="."/>
|
|
</mads:descriptionStandard>
|
|
</xsl:template>
|
|
|
|
<!-- ========== classification 2.03 ========== -->
|
|
|
|
<xsl:template match="marc:datafield[@tag=053]">
|
|
<mads:classification>
|
|
<xsl:value-of select="."/>
|
|
</mads:classification>
|
|
</xsl:template>
|
|
<xsl:template match="marc:datafield[@tag=055]">
|
|
<mads:classification>
|
|
<xsl:value-of select="."/>
|
|
</mads:classification>
|
|
</xsl:template>
|
|
<xsl:template match="marc:datafield[@tag=060]">
|
|
<mads:classification>
|
|
<xsl:value-of select="."/>
|
|
</mads:classification>
|
|
</xsl:template>
|
|
<xsl:template match="marc:datafield[@tag=065]">
|
|
<mads:classification>
|
|
<xsl:value-of select="."/>
|
|
</mads:classification>
|
|
</xsl:template>
|
|
<xsl:template match="marc:datafield[@tag=070]">
|
|
<mads:classification>
|
|
<xsl:value-of select="."/>
|
|
</mads:classification>
|
|
</xsl:template>
|
|
<xsl:template match="marc:datafield[@tag=080]">
|
|
<mads:classification>
|
|
<xsl:value-of select="."/>
|
|
</mads:classification>
|
|
</xsl:template>
|
|
<xsl:template match="marc:datafield[@tag=082]">
|
|
<mads:classification>
|
|
<xsl:value-of select="."/>
|
|
</mads:classification>
|
|
</xsl:template>
|
|
<xsl:template match="marc:datafield[@tag=083]">
|
|
<mads:classification>
|
|
<xsl:value-of select="."/>
|
|
</mads:classification>
|
|
</xsl:template>
|
|
<xsl:template match="marc:datafield[@tag=086]">
|
|
<mads:classification>
|
|
<xsl:value-of select="."/>
|
|
</mads:classification>
|
|
</xsl:template>
|
|
<xsl:template match="marc:datafield[@tag=087]">
|
|
<mads:classification>
|
|
<xsl:value-of select="."/>
|
|
</mads:classification>
|
|
</xsl:template>
|
|
|
|
|
|
<!-- ========== names ========== -->
|
|
<xsl:template match="marc:datafield[@tag=100]">
|
|
<mads:name type="personal">
|
|
<xsl:call-template name="setAuthority"/>
|
|
<xsl:call-template name="nameABCDQ"/>
|
|
</mads:name>
|
|
<xsl:apply-templates select="*[marc:subfield[not(contains('abcdeq',@code))]]"/>
|
|
<xsl:call-template name="title"/>
|
|
<xsl:apply-templates select="marc:subfield[@code!='i']"/>
|
|
</xsl:template>
|
|
|
|
<xsl:template match="marc:datafield[@tag=110]">
|
|
<mads:name type="corporate">
|
|
<xsl:call-template name="setAuthority"/>
|
|
<xsl:call-template name="nameABCDN"/>
|
|
</mads:name>
|
|
<xsl:apply-templates select="marc:subfield[@code!='i']"/>
|
|
</xsl:template>
|
|
|
|
<xsl:template match="marc:datafield[@tag=111]">
|
|
<mads:name type="conference">
|
|
<xsl:call-template name="setAuthority"/>
|
|
<xsl:call-template name="nameACDENQ"/>
|
|
</mads:name>
|
|
<xsl:apply-templates select="marc:subfield[@code!='i']"/>
|
|
</xsl:template>
|
|
|
|
<xsl:template match="marc:datafield[@tag=400]">
|
|
<mads:variant>
|
|
<xsl:call-template name="variantTypeAttribute"/>
|
|
<mads:name type="personal">
|
|
<xsl:call-template name="nameABCDQ"/>
|
|
</mads:name>
|
|
<xsl:apply-templates select="marc:subfield[@code!='i']"/>
|
|
<xsl:call-template name="title"/>
|
|
</mads:variant>
|
|
</xsl:template>
|
|
|
|
<xsl:template match="marc:datafield[@tag=410]">
|
|
<mads:variant>
|
|
<xsl:call-template name="variantTypeAttribute"/>
|
|
<mads:name type="corporate">
|
|
<xsl:call-template name="nameABCDN"/>
|
|
</mads:name>
|
|
<xsl:apply-templates select="marc:subfield[@code!='i']"/>
|
|
</mads:variant>
|
|
</xsl:template>
|
|
|
|
<xsl:template match="marc:datafield[@tag=411]">
|
|
<mads:variant>
|
|
<xsl:call-template name="variantTypeAttribute"/>
|
|
<mads:name type="conference">
|
|
<xsl:call-template name="nameACDENQ"/>
|
|
</mads:name>
|
|
<xsl:apply-templates select="marc:subfield[@code!='i']"/>
|
|
</mads:variant>
|
|
</xsl:template>
|
|
|
|
<xsl:template match="marc:datafield[@tag=500]|marc:datafield[@tag=700]">
|
|
<mads:related>
|
|
<xsl:call-template name="relatedTypeAttribute"/>
|
|
<!-- <xsl:call-template name="uri"/> -->
|
|
<mads:name type="personal">
|
|
<xsl:call-template name="setAuthority"/>
|
|
<xsl:call-template name="nameABCDQ"/>
|
|
</mads:name>
|
|
<xsl:call-template name="title"/>
|
|
<xsl:apply-templates select="marc:subfield[@code!='i']"/>
|
|
</mads:related>
|
|
</xsl:template>
|
|
|
|
<xsl:template match="marc:datafield[@tag=510]|marc:datafield[@tag=710]">
|
|
<mads:related>
|
|
<xsl:call-template name="relatedTypeAttribute"/>
|
|
<!-- <xsl:call-template name="uri"/> -->
|
|
<mads:name type="corporate">
|
|
<xsl:call-template name="setAuthority"/>
|
|
<xsl:call-template name="nameABCDN"/>
|
|
</mads:name>
|
|
<xsl:apply-templates select="marc:subfield[@code!='i']"/>
|
|
</mads:related>
|
|
</xsl:template>
|
|
|
|
<xsl:template match="marc:datafield[@tag=511]|marc:datafield[@tag=711]">
|
|
<mads:related>
|
|
<xsl:call-template name="relatedTypeAttribute"/>
|
|
<!-- <xsl:call-template name="uri"/> -->
|
|
<mads:name type="conference">
|
|
<xsl:call-template name="setAuthority"/>
|
|
<xsl:call-template name="nameACDENQ"/>
|
|
</mads:name>
|
|
<xsl:apply-templates select="marc:subfield[@code!='i']"/>
|
|
</mads:related>
|
|
</xsl:template>
|
|
|
|
<!-- ========== titles ========== -->
|
|
<xsl:template match="marc:datafield[@tag=130]">
|
|
<xsl:call-template name="uniform-title"/>
|
|
<xsl:apply-templates select="marc:subfield[@code!='i']"/>
|
|
</xsl:template>
|
|
|
|
<xsl:template match="marc:datafield[@tag=430]">
|
|
<mads:variant>
|
|
<xsl:call-template name="variantTypeAttribute"/>
|
|
<xsl:call-template name="uniform-title"/>
|
|
<xsl:apply-templates select="marc:subfield[@code!='i']"/>
|
|
</mads:variant>
|
|
</xsl:template>
|
|
|
|
<xsl:template match="marc:datafield[@tag=530]|marc:datafield[@tag=730]">
|
|
<mads:related>
|
|
<xsl:call-template name="relatedTypeAttribute"/>
|
|
<xsl:call-template name="uniform-title"/>
|
|
<xsl:apply-templates select="marc:subfield[@code!='i']"/>
|
|
</mads:related>
|
|
</xsl:template>
|
|
|
|
<xsl:template name="title">
|
|
<xsl:variable name="hasTitle">
|
|
<xsl:for-each select="marc:subfield">
|
|
<xsl:if test="(contains('tfghklmors',@code) )">
|
|
<xsl:value-of select="@code"/>
|
|
</xsl:if>
|
|
</xsl:for-each>
|
|
</xsl:variable>
|
|
<xsl:if test="string-length($hasTitle) > 0 ">
|
|
<mads:titleInfo>
|
|
<xsl:call-template name="setAuthority"/>
|
|
<mads:title>
|
|
<xsl:variable name="str">
|
|
<xsl:for-each select="marc:subfield">
|
|
<xsl:if test="(contains('atfghklmors',@code) )">
|
|
<xsl:value-of select="text()"/>
|
|
<xsl:text> </xsl:text>
|
|
</xsl:if>
|
|
</xsl:for-each>
|
|
</xsl:variable>
|
|
<xsl:call-template name="chopPunctuation">
|
|
<xsl:with-param name="chopString">
|
|
<xsl:value-of select="substring($str,1,string-length($str)-1)"/>
|
|
</xsl:with-param>
|
|
</xsl:call-template>
|
|
</mads:title>
|
|
<xsl:call-template name="part"/>
|
|
<!-- <xsl:call-template name="uri"/> -->
|
|
</mads:titleInfo>
|
|
</xsl:if>
|
|
</xsl:template>
|
|
|
|
<xsl:template name="uniform-title">
|
|
<xsl:variable name="hasTitle">
|
|
<xsl:for-each select="marc:subfield">
|
|
<xsl:if test="(contains('atfghklmors',@code) )">
|
|
<xsl:value-of select="@code"/>
|
|
</xsl:if>
|
|
</xsl:for-each>
|
|
</xsl:variable>
|
|
<xsl:if test="string-length($hasTitle) > 0 ">
|
|
<mads:titleInfo>
|
|
<xsl:call-template name="setAuthority"/>
|
|
<mads:title>
|
|
<xsl:variable name="str">
|
|
<xsl:for-each select="marc:subfield">
|
|
<xsl:if test="(contains('adfghklmors',@code) )">
|
|
<xsl:value-of select="text()"/>
|
|
<xsl:text> </xsl:text>
|
|
</xsl:if>
|
|
</xsl:for-each>
|
|
</xsl:variable>
|
|
<xsl:call-template name="chopPunctuation">
|
|
<xsl:with-param name="chopString">
|
|
<xsl:value-of select="substring($str,1,string-length($str)-1)"/>
|
|
</xsl:with-param>
|
|
</xsl:call-template>
|
|
</mads:title>
|
|
<xsl:call-template name="part"/>
|
|
<!-- <xsl:call-template name="uri"/> -->
|
|
</mads:titleInfo>
|
|
</xsl:if>
|
|
</xsl:template>
|
|
|
|
|
|
<!-- ========== topics ========== -->
|
|
<xsl:template match="marc:subfield[@code='x']">
|
|
<mads:topic>
|
|
<xsl:call-template name="chopPunctuation">
|
|
<xsl:with-param name="chopString">
|
|
<xsl:value-of select="."/>
|
|
</xsl:with-param>
|
|
</xsl:call-template>
|
|
</mads:topic>
|
|
</xsl:template>
|
|
|
|
<!-- 2.06 fix -->
|
|
<xsl:template
|
|
match="marc:datafield[@tag=150][marc:subfield[@code='a' or @code='b']]|marc:datafield[@tag=180][marc:subfield[@code='x']]">
|
|
<xsl:call-template name="topic"/>
|
|
<xsl:apply-templates select="marc:subfield[@code!='i']"/>
|
|
</xsl:template>
|
|
<xsl:template
|
|
match="marc:datafield[@tag=450][marc:subfield[@code='a' or @code='b']]|marc:datafield[@tag=480][marc:subfield[@code='x']]">
|
|
<mads:variant>
|
|
<xsl:call-template name="variantTypeAttribute"/>
|
|
<xsl:call-template name="topic"/>
|
|
</mads:variant>
|
|
</xsl:template>
|
|
<xsl:template
|
|
match="marc:datafield[@tag=550 or @tag=750][marc:subfield[@code='a' or @code='b']]">
|
|
<mads:related>
|
|
<xsl:call-template name="relatedTypeAttribute"/>
|
|
<!-- <xsl:call-template name="uri"/> -->
|
|
<xsl:call-template name="topic"/>
|
|
<xsl:apply-templates select="marc:subfield[@code='z']"/>
|
|
</mads:related>
|
|
</xsl:template>
|
|
<xsl:template name="topic">
|
|
<mads:topic>
|
|
<xsl:call-template name="setAuthority"/>
|
|
<!-- tmee2006 dedupe 550a
|
|
<xsl:if test="@tag=550 or @tag=750">
|
|
<xsl:call-template name="subfieldSelect">
|
|
<xsl:with-param name="codes">ab</xsl:with-param>
|
|
</xsl:call-template>
|
|
</xsl:if>
|
|
-->
|
|
<xsl:choose>
|
|
<xsl:when test="@tag=180 or @tag=480 or @tag=580 or @tag=780">
|
|
<xsl:call-template name="chopPunctuation">
|
|
<xsl:with-param name="chopString">
|
|
<xsl:apply-templates select="marc:subfield[@code='x']"/>
|
|
</xsl:with-param>
|
|
</xsl:call-template>
|
|
</xsl:when>
|
|
</xsl:choose>
|
|
<xsl:call-template name="chopPunctuation">
|
|
<xsl:with-param name="chopString">
|
|
<xsl:choose>
|
|
<xsl:when test="@tag=180 or @tag=480 or @tag=580 or @tag=780">
|
|
<xsl:apply-templates select="marc:subfield[@code='x']"/>
|
|
</xsl:when>
|
|
<xsl:otherwise>
|
|
<xsl:call-template name="subfieldSelect">
|
|
<xsl:with-param name="codes">ab</xsl:with-param>
|
|
</xsl:call-template>
|
|
</xsl:otherwise>
|
|
</xsl:choose>
|
|
</xsl:with-param>
|
|
</xsl:call-template>
|
|
</mads:topic>
|
|
</xsl:template>
|
|
|
|
<!-- ========= temporals ========== -->
|
|
<xsl:template match="marc:subfield[@code='y']">
|
|
<mads:temporal>
|
|
<xsl:call-template name="chopPunctuation">
|
|
<xsl:with-param name="chopString">
|
|
<xsl:value-of select="."/>
|
|
</xsl:with-param>
|
|
</xsl:call-template>
|
|
</mads:temporal>
|
|
</xsl:template>
|
|
<xsl:template
|
|
match="marc:datafield[@tag=148][marc:subfield[@code='a']]|marc:datafield[@tag=182 ][marc:subfield[@code='y']]">
|
|
<xsl:call-template name="temporal"/>
|
|
</xsl:template>
|
|
<xsl:template
|
|
match="marc:datafield[@tag=448][marc:subfield[@code='a']]|marc:datafield[@tag=482][marc:subfield[@code='y']]">
|
|
<mads:variant>
|
|
<xsl:call-template name="variantTypeAttribute"/>
|
|
<xsl:call-template name="temporal"/>
|
|
</mads:variant>
|
|
</xsl:template>
|
|
<xsl:template
|
|
match="marc:datafield[@tag=548 or @tag=748][marc:subfield[@code='a']]|marc:datafield[@tag=582 or @tag=782][marc:subfield[@code='y']]">
|
|
<mads:related>
|
|
<xsl:call-template name="relatedTypeAttribute"/>
|
|
<!-- <xsl:call-template name="uri"/> -->
|
|
<xsl:call-template name="temporal"/>
|
|
</mads:related>
|
|
</xsl:template>
|
|
<xsl:template name="temporal">
|
|
<mads:temporal>
|
|
<xsl:call-template name="setAuthority"/>
|
|
<xsl:if test="@tag=548 or @tag=748">
|
|
<xsl:value-of select="marc:subfield[@code='a']"/>
|
|
</xsl:if>
|
|
<xsl:call-template name="chopPunctuation">
|
|
<xsl:with-param name="chopString">
|
|
<xsl:choose>
|
|
<xsl:when test="@tag=182 or @tag=482 or @tag=582 or @tag=782">
|
|
<xsl:apply-templates select="marc:subfield[@code='y']"/>
|
|
</xsl:when>
|
|
<xsl:otherwise>
|
|
<xsl:value-of select="marc:subfield[@code='a']"/>
|
|
</xsl:otherwise>
|
|
</xsl:choose>
|
|
</xsl:with-param>
|
|
</xsl:call-template>
|
|
</mads:temporal>
|
|
<xsl:apply-templates select="marc:subfield[@code!='i']"/>
|
|
</xsl:template>
|
|
|
|
<!-- ========== genre ========== -->
|
|
<xsl:template match="marc:subfield[@code='v']">
|
|
<mads:genre>
|
|
<xsl:call-template name="chopPunctuation">
|
|
<xsl:with-param name="chopString">
|
|
<xsl:value-of select="."/>
|
|
</xsl:with-param>
|
|
</xsl:call-template>
|
|
</mads:genre>
|
|
</xsl:template>
|
|
<xsl:template
|
|
match="marc:datafield[@tag=155][marc:subfield[@code='a']]|marc:datafield[@tag=185][marc:subfield[@code='v']]">
|
|
<xsl:call-template name="genre"/>
|
|
</xsl:template>
|
|
<xsl:template
|
|
match="marc:datafield[@tag=455][marc:subfield[@code='a']]|marc:datafield[@tag=485 ][marc:subfield[@code='v']]">
|
|
<mads:variant>
|
|
<xsl:call-template name="variantTypeAttribute"/>
|
|
<xsl:call-template name="genre"/>
|
|
</mads:variant>
|
|
</xsl:template>
|
|
<!--
|
|
<xsl:template match="marc:datafield[@tag=555]">
|
|
<mads:related>
|
|
<xsl:call-template name="relatedTypeAttribute"/>
|
|
<xsl:call-template name="uri"/>
|
|
<xsl:call-template name="genre"/>
|
|
</mads:related>
|
|
</xsl:template>
|
|
-->
|
|
<xsl:template
|
|
match="marc:datafield[@tag=555 or @tag=755][marc:subfield[@code='a']]|marc:datafield[@tag=585][marc:subfield[@code='v']]">
|
|
<mads:related>
|
|
<xsl:call-template name="relatedTypeAttribute"/>
|
|
<xsl:call-template name="genre"/>
|
|
</mads:related>
|
|
</xsl:template>
|
|
<xsl:template name="genre">
|
|
<mads:genre>
|
|
<xsl:if test="@tag=555">
|
|
<xsl:value-of select="marc:subfield[@code='a']"/>
|
|
</xsl:if>
|
|
<xsl:call-template name="setAuthority"/>
|
|
<xsl:call-template name="chopPunctuation">
|
|
<xsl:with-param name="chopString">
|
|
<xsl:choose>
|
|
<!-- 2.07 fix -->
|
|
<xsl:when test="@tag='555'"/>
|
|
<xsl:when test="@tag=185 or @tag=485 or @tag=585">
|
|
<xsl:apply-templates select="marc:subfield[@code='v']"/>
|
|
</xsl:when>
|
|
<xsl:otherwise>
|
|
<xsl:value-of select="marc:subfield[@code='a']"/>
|
|
</xsl:otherwise>
|
|
</xsl:choose>
|
|
</xsl:with-param>
|
|
</xsl:call-template>
|
|
</mads:genre>
|
|
<xsl:apply-templates/>
|
|
</xsl:template>
|
|
|
|
<!-- ========= geographic ========== -->
|
|
<xsl:template match="marc:subfield[@code='z']">
|
|
<mads:geographic>
|
|
<xsl:call-template name="chopPunctuation">
|
|
<xsl:with-param name="chopString">
|
|
<xsl:value-of select="."/>
|
|
</xsl:with-param>
|
|
</xsl:call-template>
|
|
</mads:geographic>
|
|
</xsl:template>
|
|
<xsl:template name="geographic">
|
|
<mads:geographic>
|
|
<xsl:if test="@tag=551">
|
|
<xsl:value-of select="marc:subfield[@code='a']"/>
|
|
</xsl:if>
|
|
<xsl:call-template name="setAuthority"/>
|
|
<xsl:call-template name="chopPunctuation">
|
|
<xsl:with-param name="chopString">
|
|
<xsl:choose>
|
|
<xsl:when test="@tag=181 or @tag=481 or @tag=581">
|
|
<xsl:apply-templates select="marc:subfield[@code='z']"/>
|
|
</xsl:when>
|
|
<xsl:otherwise>
|
|
<xsl:value-of select="marc:subfield[@code='a']"/>
|
|
</xsl:otherwise>
|
|
</xsl:choose>
|
|
</xsl:with-param>
|
|
</xsl:call-template>
|
|
</mads:geographic>
|
|
<xsl:apply-templates select="marc:subfield[@code!='i']"/>
|
|
</xsl:template>
|
|
<xsl:template
|
|
match="marc:datafield[@tag=151][marc:subfield[@code='a']]|marc:datafield[@tag=181][marc:subfield[@code='z']]">
|
|
<xsl:call-template name="geographic"/>
|
|
</xsl:template>
|
|
<xsl:template
|
|
match="marc:datafield[@tag=451][marc:subfield[@code='a']]|marc:datafield[@tag=481][marc:subfield[@code='z']]">
|
|
<mads:variant>
|
|
<xsl:call-template name="variantTypeAttribute"/>
|
|
<xsl:call-template name="geographic"/>
|
|
</mads:variant>
|
|
</xsl:template>
|
|
<xsl:template
|
|
match="marc:datafield[@tag=551]|marc:datafield[@tag=581][marc:subfield[@code='z']]">
|
|
<mads:related>
|
|
<xsl:call-template name="relatedTypeAttribute"/>
|
|
<!-- <xsl:call-template name="uri"/> -->
|
|
<xsl:call-template name="geographic"/>
|
|
</mads:related>
|
|
</xsl:template>
|
|
<xsl:template match="marc:datafield[@tag=580]">
|
|
<mads:related>
|
|
<xsl:call-template name="relatedTypeAttribute"/>
|
|
<xsl:apply-templates select="marc:subfield[@code!='i']"/>
|
|
</mads:related>
|
|
</xsl:template>
|
|
<xsl:template
|
|
match="marc:datafield[@tag=751][marc:subfield[@code='z']]|marc:datafield[@tag=781][marc:subfield[@code='z']]">
|
|
<mads:related>
|
|
<xsl:call-template name="relatedTypeAttribute"/>
|
|
<xsl:call-template name="geographic"/>
|
|
</mads:related>
|
|
</xsl:template>
|
|
<xsl:template match="marc:datafield[@tag=755]">
|
|
<mads:related>
|
|
<xsl:call-template name="relatedTypeAttribute"/>
|
|
<xsl:call-template name="genre"/>
|
|
<xsl:call-template name="setAuthority"/>
|
|
<xsl:apply-templates select="marc:subfield[@code!='i']"/>
|
|
</mads:related>
|
|
</xsl:template>
|
|
<xsl:template match="marc:datafield[@tag=780]">
|
|
<mads:related>
|
|
<xsl:call-template name="relatedTypeAttribute"/>
|
|
<xsl:apply-templates select="marc:subfield[@code!='i']"/>
|
|
</mads:related>
|
|
</xsl:template>
|
|
<xsl:template match="marc:datafield[@tag=785]">
|
|
<mads:related>
|
|
<xsl:call-template name="relatedTypeAttribute"/>
|
|
<xsl:apply-templates select="marc:subfield[@code!='i']"/>
|
|
</mads:related>
|
|
</xsl:template>
|
|
|
|
<!-- ========== notes ========== -->
|
|
<xsl:template match="marc:datafield[667 <= @tag and @tag <= 688]">
|
|
<mads:note>
|
|
<xsl:choose>
|
|
<xsl:when test="@tag=667">
|
|
<xsl:attribute name="type">nonpublic</xsl:attribute>
|
|
</xsl:when>
|
|
<xsl:when test="@tag=670">
|
|
<xsl:attribute name="type">source</xsl:attribute>
|
|
</xsl:when>
|
|
<xsl:when test="@tag=675">
|
|
<xsl:attribute name="type">notFound</xsl:attribute>
|
|
</xsl:when>
|
|
<xsl:when test="@tag=678">
|
|
<xsl:attribute name="type">history</xsl:attribute>
|
|
</xsl:when>
|
|
<xsl:when test="@tag=681">
|
|
<xsl:attribute name="type">subject example</xsl:attribute>
|
|
</xsl:when>
|
|
<xsl:when test="@tag=682">
|
|
<xsl:attribute name="type">deleted heading information</xsl:attribute>
|
|
</xsl:when>
|
|
<xsl:when test="@tag=688">
|
|
<xsl:attribute name="type">application history</xsl:attribute>
|
|
</xsl:when>
|
|
</xsl:choose>
|
|
<xsl:call-template name="chopPunctuation">
|
|
<xsl:with-param name="chopString">
|
|
<xsl:choose>
|
|
<xsl:when test="@tag=667 or @tag=675">
|
|
<xsl:value-of select="marc:subfield[@code='a']"/>
|
|
</xsl:when>
|
|
<xsl:when test="@tag=670 or @tag=678">
|
|
<xsl:call-template name="subfieldSelect">
|
|
<xsl:with-param name="codes">ab</xsl:with-param>
|
|
</xsl:call-template>
|
|
</xsl:when>
|
|
<xsl:when test="680 <= @tag and @tag <=688">
|
|
<xsl:call-template name="subfieldSelect">
|
|
<xsl:with-param name="codes">ai</xsl:with-param>
|
|
</xsl:call-template>
|
|
</xsl:when>
|
|
</xsl:choose>
|
|
</xsl:with-param>
|
|
</xsl:call-template>
|
|
</mads:note>
|
|
</xsl:template>
|
|
|
|
<!-- ========== url ========== -->
|
|
<xsl:template match="marc:datafield[@tag=856][marc:subfield[@code='u']]">
|
|
<mads:url>
|
|
<xsl:if test="marc:subfield[@code='z' or @code='3']">
|
|
<xsl:attribute name="displayLabel">
|
|
<xsl:call-template name="subfieldSelect">
|
|
<xsl:with-param name="codes">z3</xsl:with-param>
|
|
</xsl:call-template>
|
|
</xsl:attribute>
|
|
</xsl:if>
|
|
<xsl:value-of select="marc:subfield[@code='u']"/>
|
|
</mads:url>
|
|
</xsl:template>
|
|
|
|
<xsl:template name="relatedTypeAttribute">
|
|
<xsl:choose>
|
|
<xsl:when
|
|
test="@tag=500 or @tag=510 or @tag=511 or @tag=548 or @tag=550 or @tag=551 or @tag=555 or @tag=580 or @tag=581 or @tag=582 or @tag=585">
|
|
<xsl:if test="substring(marc:subfield[@code='w'],1,1)='a'">
|
|
<xsl:attribute name="type">earlier</xsl:attribute>
|
|
</xsl:if>
|
|
<xsl:if test="substring(marc:subfield[@code='w'],1,1)='b'">
|
|
<xsl:attribute name="type">later</xsl:attribute>
|
|
</xsl:if>
|
|
<xsl:if test="substring(marc:subfield[@code='w'],1,1)='t'">
|
|
<xsl:attribute name="type">parentOrg</xsl:attribute>
|
|
</xsl:if>
|
|
<xsl:if test="substring(marc:subfield[@code='w'],1,1)='g'">
|
|
<xsl:attribute name="type">broader</xsl:attribute>
|
|
</xsl:if>
|
|
<xsl:if test="substring(marc:subfield[@code='w'],1,1)='h'">
|
|
<xsl:attribute name="type">narrower</xsl:attribute>
|
|
</xsl:if>
|
|
<xsl:if test="substring(marc:subfield[@code='w'],1,1)='r'">
|
|
<xsl:attribute name="type">other</xsl:attribute>
|
|
</xsl:if>
|
|
<xsl:if test="contains('fin|', substring(marc:subfield[@code='w'],1,1))">
|
|
<xsl:attribute name="type">other</xsl:attribute>
|
|
</xsl:if>
|
|
</xsl:when>
|
|
<xsl:when test="@tag=530 or @tag=730">
|
|
<xsl:attribute name="type">other</xsl:attribute>
|
|
</xsl:when>
|
|
<xsl:otherwise>
|
|
<!-- 7xx -->
|
|
<xsl:attribute name="type">equivalent</xsl:attribute>
|
|
</xsl:otherwise>
|
|
</xsl:choose>
|
|
<xsl:apply-templates select="marc:subfield[@code='i']"/>
|
|
</xsl:template>
|
|
|
|
<xsl:template name="variantTypeAttribute">
|
|
<xsl:choose>
|
|
<xsl:when
|
|
test="@tag=400 or @tag=410 or @tag=411 or @tag=451 or @tag=455 or @tag=480 or @tag=481 or @tag=482 or @tag=485">
|
|
<xsl:if test="substring(marc:subfield[@code='w'],1,1)='d'">
|
|
<xsl:attribute name="type">acronym</xsl:attribute>
|
|
</xsl:if>
|
|
<xsl:if test="substring(marc:subfield[@code='w'],1,1)='n'">
|
|
<xsl:attribute name="type">other</xsl:attribute>
|
|
</xsl:if>
|
|
<xsl:if test="contains('fit', substring(marc:subfield[@code='w'],1,1))">
|
|
<xsl:attribute name="type">other</xsl:attribute>
|
|
</xsl:if>
|
|
</xsl:when>
|
|
<xsl:otherwise>
|
|
<!-- 430 -->
|
|
<xsl:attribute name="type">other</xsl:attribute>
|
|
</xsl:otherwise>
|
|
</xsl:choose>
|
|
<xsl:apply-templates select="marc:subfield[@code='i']"/>
|
|
</xsl:template>
|
|
|
|
<xsl:template name="setAuthority">
|
|
<xsl:choose>
|
|
<!-- can be called from the datafield or subfield level, so "..//@tag" means
|
|
the tag can be at the subfield's parent level or at the datafields own level -->
|
|
|
|
<xsl:when
|
|
test="ancestor-or-self::marc:datafield/@tag=100 and (@ind1=0 or @ind1=1) and $controlField008-11='a' and $controlField008-14='a'">
|
|
<xsl:attribute name="authority">
|
|
<xsl:text>naf</xsl:text>
|
|
</xsl:attribute>
|
|
</xsl:when>
|
|
<xsl:when
|
|
test="ancestor-or-self::marc:datafield/@tag=100 and (@ind1=0 or @ind1=1) and $controlField008-11='a' and $controlField008-14='b'">
|
|
<xsl:attribute name="authority">
|
|
<xsl:text>lcsh</xsl:text>
|
|
</xsl:attribute>
|
|
</xsl:when>
|
|
<xsl:when
|
|
test="ancestor-or-self::marc:datafield/@tag=100 and (@ind1=0 or @ind1=1) and $controlField008-11='k'">
|
|
<xsl:attribute name="authority">
|
|
<xsl:text>lacnaf</xsl:text>
|
|
</xsl:attribute>
|
|
</xsl:when>
|
|
<xsl:when
|
|
test="ancestor-or-self::marc:datafield/@tag=100 and @ind1=3 and $controlField008-11='a' and $controlField008-14='b'">
|
|
<xsl:attribute name="authority">
|
|
<xsl:text>lcsh</xsl:text>
|
|
</xsl:attribute>
|
|
</xsl:when>
|
|
<xsl:when
|
|
test="ancestor-or-self::marc:datafield/@tag=100 and @ind1=3 and $controlField008-11='k' and $controlField008-14='b'">
|
|
<xsl:attribute name="authority">cash</xsl:attribute>
|
|
</xsl:when>
|
|
<xsl:when
|
|
test="ancestor-or-self::marc:datafield/@tag=110 and $controlField008-11='a' and $controlField008-14='a'">
|
|
<xsl:attribute name="authority">naf</xsl:attribute>
|
|
</xsl:when>
|
|
<xsl:when
|
|
test="ancestor-or-self::marc:datafield/@tag=110 and $controlField008-11='a' and $controlField008-14='b'">
|
|
<xsl:attribute name="authority">lcsh</xsl:attribute>
|
|
</xsl:when>
|
|
<xsl:when
|
|
test="ancestor-or-self::marc:datafield/@tag=110 and $controlField008-11='k' and $controlField008-14='a'">
|
|
<xsl:attribute name="authority">
|
|
<xsl:text>lacnaf</xsl:text>
|
|
</xsl:attribute>
|
|
</xsl:when>
|
|
<xsl:when
|
|
test="ancestor-or-self::marc:datafield/@tag=110 and $controlField008-11='k' and $controlField008-14='b'">
|
|
<xsl:attribute name="authority">
|
|
<xsl:text>cash</xsl:text>
|
|
</xsl:attribute>
|
|
</xsl:when>
|
|
<xsl:when
|
|
test="100 <= ancestor-or-self::marc:datafield/@tag and ancestor-or-self::marc:datafield/@tag <= 155 and $controlField008-11='b'">
|
|
<xsl:attribute name="authority">
|
|
<xsl:text>lcshcl</xsl:text>
|
|
</xsl:attribute>
|
|
</xsl:when>
|
|
<xsl:when
|
|
test="(ancestor-or-self::marc:datafield/@tag=100 or ancestor-or-self::marc:datafield/@tag=110 or ancestor-or-self::marc:datafield/@tag=111 or ancestor-or-self::marc:datafield/@tag=130 or ancestor-or-self::marc:datafield/@tag=151) and $controlField008-11='c'">
|
|
<xsl:attribute name="authority">
|
|
<xsl:text>nlmnaf</xsl:text>
|
|
</xsl:attribute>
|
|
</xsl:when>
|
|
<xsl:when
|
|
test="(ancestor-or-self::marc:datafield/@tag=100 or ancestor-or-self::marc:datafield/@tag=110 or ancestor-or-self::marc:datafield/@tag=111 or ancestor-or-self::marc:datafield/@tag=130 or ancestor-or-self::marc:datafield/@tag=151) and $controlField008-11='d'">
|
|
<xsl:attribute name="authority">
|
|
<xsl:text>nalnaf</xsl:text>
|
|
</xsl:attribute>
|
|
</xsl:when>
|
|
<xsl:when
|
|
test="100 <= ancestor-or-self::marc:datafield/@tag and ancestor-or-self::marc:datafield/@tag <= 155 and $controlField008-11='r'">
|
|
<xsl:attribute name="authority">
|
|
<xsl:text>aat</xsl:text>
|
|
</xsl:attribute>
|
|
</xsl:when>
|
|
<xsl:when
|
|
test="100 <= ancestor-or-self::marc:datafield/@tag and ancestor-or-self::marc:datafield/@tag <= 155 and $controlField008-11='s'">
|
|
<xsl:attribute name="authority">sears</xsl:attribute>
|
|
</xsl:when>
|
|
<xsl:when
|
|
test="100 <= ancestor-or-self::marc:datafield/@tag and ancestor-or-self::marc:datafield/@tag <= 155 and $controlField008-11='v'">
|
|
<xsl:attribute name="authority">rvm</xsl:attribute>
|
|
</xsl:when>
|
|
<xsl:when
|
|
test="100 <= ancestor-or-self::marc:datafield/@tag and ancestor-or-self::marc:datafield/@tag <= 155 and $controlField008-11='z'">
|
|
<xsl:attribute name="authority">
|
|
<xsl:value-of
|
|
select="../marc:datafield[ancestor-or-self::marc:datafield/@tag=040]/marc:subfield[@code='f']"
|
|
/>
|
|
</xsl:attribute>
|
|
</xsl:when>
|
|
<xsl:when
|
|
test="(ancestor-or-self::marc:datafield/@tag=111 or ancestor-or-self::marc:datafield/@tag=130) and $controlField008-11='a' and $controlField008-14='a'">
|
|
<xsl:attribute name="authority">
|
|
<xsl:text>naf</xsl:text>
|
|
</xsl:attribute>
|
|
</xsl:when>
|
|
<xsl:when
|
|
test="(ancestor-or-self::marc:datafield/@tag=111 or ancestor-or-self::marc:datafield/@tag=130) and $controlField008-11='a' and $controlField008-14='b'">
|
|
<xsl:attribute name="authority">
|
|
<xsl:text>lcsh</xsl:text>
|
|
</xsl:attribute>
|
|
</xsl:when>
|
|
<xsl:when
|
|
test="(ancestor-or-self::marc:datafield/@tag=111 or ancestor-or-self::marc:datafield/@tag=130) and $controlField008-11='k' ">
|
|
<xsl:attribute name="authority">
|
|
<xsl:text>lacnaf</xsl:text>
|
|
</xsl:attribute>
|
|
</xsl:when>
|
|
<xsl:when
|
|
test="(ancestor-or-self::marc:datafield/@tag=148 or ancestor-or-self::marc:datafield/@tag=150 or ancestor-or-self::marc:datafield/@tag=155) and $controlField008-11='a' ">
|
|
<xsl:attribute name="authority">
|
|
<xsl:text>lcsh</xsl:text>
|
|
</xsl:attribute>
|
|
</xsl:when>
|
|
<xsl:when
|
|
test="(ancestor-or-self::marc:datafield/@tag=148 or ancestor-or-self::marc:datafield/@tag=150 or ancestor-or-self::marc:datafield/@tag=155) and $controlField008-11='a' ">
|
|
<xsl:attribute name="authority">
|
|
<xsl:text>lcsh</xsl:text>
|
|
</xsl:attribute>
|
|
</xsl:when>
|
|
<xsl:when
|
|
test="(ancestor-or-self::marc:datafield/@tag=148 or ancestor-or-self::marc:datafield/@tag=150 or ancestor-or-self::marc:datafield/@tag=155) and $controlField008-11='c' ">
|
|
<xsl:attribute name="authority">
|
|
<xsl:text>mesh</xsl:text>
|
|
</xsl:attribute>
|
|
</xsl:when>
|
|
<xsl:when
|
|
test="(ancestor-or-self::marc:datafield/@tag=148 or ancestor-or-self::marc:datafield/@tag=150 or ancestor-or-self::marc:datafield/@tag=155) and $controlField008-11='d' ">
|
|
<xsl:attribute name="authority">
|
|
<xsl:text>nal</xsl:text>
|
|
</xsl:attribute>
|
|
</xsl:when>
|
|
<xsl:when
|
|
test="(ancestor-or-self::marc:datafield/@tag=148 or ancestor-or-self::marc:datafield/@tag=150 or ancestor-or-self::marc:datafield/@tag=155) and $controlField008-11='k' ">
|
|
<xsl:attribute name="authority">
|
|
<xsl:text>cash</xsl:text>
|
|
</xsl:attribute>
|
|
</xsl:when>
|
|
<xsl:when
|
|
test="ancestor-or-self::marc:datafield/@tag=151 and $controlField008-11='a' and $controlField008-14='a'">
|
|
<xsl:attribute name="authority">
|
|
<xsl:text>naf</xsl:text>
|
|
</xsl:attribute>
|
|
</xsl:when>
|
|
<xsl:when
|
|
test="ancestor-or-self::marc:datafield/@tag=151 and $controlField008-11='a' and $controlField008-14='b'">
|
|
<xsl:attribute name="authority">lcsh</xsl:attribute>
|
|
</xsl:when>
|
|
<xsl:when
|
|
test="ancestor-or-self::marc:datafield/@tag=151 and $controlField008-11='k' and $controlField008-14='a'">
|
|
<xsl:attribute name="authority">lacnaf</xsl:attribute>
|
|
</xsl:when>
|
|
<xsl:when
|
|
test="ancestor-or-self::marc:datafield/@tag=151 and $controlField008-11='k' and $controlField008-14='b'">
|
|
<xsl:attribute name="authority">cash</xsl:attribute>
|
|
</xsl:when>
|
|
<xsl:when
|
|
test="(..//ancestor-or-self::marc:datafield/@tag=180 or ..//ancestor-or-self::marc:datafield/@tag=181 or ..//ancestor-or-self::marc:datafield/@tag=182 or ..//ancestor-or-self::marc:datafield/@tag=185) and $controlField008-11='a'">
|
|
<xsl:attribute name="authority">lcsh</xsl:attribute>
|
|
</xsl:when>
|
|
<xsl:when
|
|
test="ancestor-or-self::marc:datafield/@tag=700 and (@ind1='0' or @ind1='1') and @ind2='0'">
|
|
<xsl:attribute name="authority">naf</xsl:attribute>
|
|
</xsl:when>
|
|
<xsl:when
|
|
test="ancestor-or-self::marc:datafield/@tag=700 and (@ind1='0' or @ind1='1') and @ind2='5'">
|
|
<xsl:attribute name="authority">lacnaf</xsl:attribute>
|
|
</xsl:when>
|
|
<xsl:when test="ancestor-or-self::marc:datafield/@tag=700 and @ind1='3' and @ind2='0'">
|
|
<xsl:attribute name="authority">lcsh</xsl:attribute>
|
|
</xsl:when>
|
|
<xsl:when test="ancestor-or-self::marc:datafield/@tag=700 and @ind1='3' and @ind2='5'">
|
|
<xsl:attribute name="authority">cash</xsl:attribute>
|
|
</xsl:when>
|
|
<xsl:when
|
|
test="(700 <= ancestor-or-self::marc:datafield/@tag and ancestor-or-self::marc:datafield/@tag <= 755 ) and @ind2='1'">
|
|
<xsl:attribute name="authority">lcshcl</xsl:attribute>
|
|
</xsl:when>
|
|
<xsl:when
|
|
test="(ancestor-or-self::marc:datafield/@tag=700 or ancestor-or-self::marc:datafield/@tag=710 or ancestor-or-self::marc:datafield/@tag=711 or ancestor-or-self::marc:datafield/@tag=730 or ancestor-or-self::marc:datafield/@tag=751) and @ind2='2'">
|
|
<xsl:attribute name="authority">nlmnaf</xsl:attribute>
|
|
</xsl:when>
|
|
<xsl:when
|
|
test="(ancestor-or-self::marc:datafield/@tag=700 or ancestor-or-self::marc:datafield/@tag=710 or ancestor-or-self::marc:datafield/@tag=711 or ancestor-or-self::marc:datafield/@tag=730 or ancestor-or-self::marc:datafield/@tag=751) and @ind2='3'">
|
|
<xsl:attribute name="authority">nalnaf</xsl:attribute>
|
|
</xsl:when>
|
|
<xsl:when
|
|
test="(700 <= ancestor-or-self::marc:datafield/@tag and ancestor-or-self::marc:datafield/@tag <= 755 ) and @ind2='6'">
|
|
<xsl:attribute name="authority">rvm</xsl:attribute>
|
|
</xsl:when>
|
|
<xsl:when
|
|
test="(700 <= ancestor-or-self::marc:datafield/@tag and ancestor-or-self::marc:datafield/@tag <= 755 ) and @ind2='7'">
|
|
<xsl:attribute name="authority">
|
|
<xsl:value-of select="marc:subfield[@code='2']"/>
|
|
</xsl:attribute>
|
|
</xsl:when>
|
|
<xsl:when
|
|
test="(ancestor-or-self::marc:datafield/@tag=710 or ancestor-or-self::marc:datafield/@tag=711 or ancestor-or-self::marc:datafield/@tag=730 or ancestor-or-self::marc:datafield/@tag=751) and @ind2='5'">
|
|
<xsl:attribute name="authority">lacnaf</xsl:attribute>
|
|
</xsl:when>
|
|
<xsl:when
|
|
test="(ancestor-or-self::marc:datafield/@tag=710 or ancestor-or-self::marc:datafield/@tag=711 or ancestor-or-self::marc:datafield/@tag=730 or ancestor-or-self::marc:datafield/@tag=751) and @ind2='0'">
|
|
<xsl:attribute name="authority">naf</xsl:attribute>
|
|
</xsl:when>
|
|
<xsl:when
|
|
test="(ancestor-or-self::marc:datafield/@tag=748 or ancestor-or-self::marc:datafield/@tag=750 or ancestor-or-self::marc:datafield/@tag=755) and @ind2='0'">
|
|
<xsl:attribute name="authority">lcsh</xsl:attribute>
|
|
</xsl:when>
|
|
<xsl:when
|
|
test="(ancestor-or-self::marc:datafield/@tag=748 or ancestor-or-self::marc:datafield/@tag=750 or ancestor-or-self::marc:datafield/@tag=755) and @ind2='2'">
|
|
<xsl:attribute name="authority">mesh</xsl:attribute>
|
|
</xsl:when>
|
|
<xsl:when
|
|
test="(ancestor-or-self::marc:datafield/@tag=748 or ancestor-or-self::marc:datafield/@tag=750 or ancestor-or-self::marc:datafield/@tag=755) and @ind2='3'">
|
|
<xsl:attribute name="authority">nal</xsl:attribute>
|
|
</xsl:when>
|
|
<xsl:when
|
|
test="(ancestor-or-self::marc:datafield/@tag=748 or ancestor-or-self::marc:datafield/@tag=750 or ancestor-or-self::marc:datafield/@tag=755) and @ind2='5'">
|
|
<xsl:attribute name="authority">cash</xsl:attribute>
|
|
</xsl:when>
|
|
</xsl:choose>
|
|
</xsl:template>
|
|
<xsl:template match="*"/>
|
|
</xsl:stylesheet>
|