File contents
<?xml version="1.0" encoding="utf-8"?>
<!--
JISC ELF Discovery+ Poject - http://devil.lib.ed.ac.uk
Copyright (C) 2004, University of Edinburgh.
This stylesheet is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This styelsheet is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Author: Boon Low
MARC2RLI xslt stylesheet version 1.0
Purpose: Mapping OAI MARC metadata to metadata based on the IMS RLI XML Binding
-->
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
xmlns="http://www.imsglobal.org/xsd/imsRLICommonSchema_v1p0"
xmlns:oai_marc="http://www.openarchives.org/OAI/oai_marc" exclude-result-prefixes="oai_marc">
<xsl:template match="oai_marc:oai_marc">
<resource xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.imsglobal.org/xsd/imsRLICommonSchema_v1p0 http://www.imsglobal.org/rli/rliv1p0pd/bindings/rlicommon/xsd/imsRLICommonSchema_v1p0.xsd">
<indexId>
<xsl:value-of select="substring-before(substring(oai_marc:fixfield[@oai_marc:id='001'], 2), '"')"/>
</indexId>
<resourceMetadata>
<!-- *** description *** -->
<!-- abstract 520 -->
<xsl:if test="oai_marc:varfield[@oai_marc:id='520']">
<description>
<metadataLangString><xsl:value-of select="oai_marc:varfield[@oai_marc:id='520']/oai_marc:subfield[@oai_marc:label='a']"/></metadataLangString>
</description>
</xsl:if>
<!-- *** Languages *** -->
<!-- 008 -->
<xsl:if test="oai_marc:fixfield[@oai_marc:id='008']">
<language>
<xsl:value-of select="substring(oai_marc:fixfield[@oai_marc:id='008'], 37, 3)"/>
</language>
</xsl:if>
<!-- *** MIME types *** -->
<xsl:for-each select="oai_marc:varfield[@oai_marc:id='856']/oai_marc:subfield[@oai_marc:label='q']">
<format><xsl:value-of select="."/></format>
</xsl:for-each>
<citation>
<!-- *** titles *** -->
<!-- feasible MARC fields: 130, 210, 240, 242, 245, 246, 247, 730, 740 -->
<xsl:if test="oai_marc:varfield[@oai_marc:id='130' or @oai_marc:id='210'
or @oai_marc:id='222' or @oai_marc:id='240' or @oai_marc:id='242' or @oai_marc:id='245'
or @oai_marc:id='246' or @oai_marc:id='247' or @oai_marc:id='730' or @oai_marc:id='740']">
<!-- maps the mandantory 245, other fields pending -->
<title>
<xsl:for-each select="oai_marc:varfield[@oai_marc:id='245']">
<metadataLangString>
<xsl:for-each select="oai_marc:subfield[@oai_marc:label='a']">
<xsl:value-of select="."/>
</xsl:for-each>
<xsl:for-each select="oai_marc:subfield[@oai_marc:label='b']">
<xsl:value-of select="."/>
</xsl:for-each>
<xsl:for-each select="oai_marc:subfield[@oai_marc:label='n']">
<xsl:value-of select="."/>
</xsl:for-each>
<xsl:for-each select="oai_marc:subfield[@oai_marc:label='p']">
<xsl:value-of select="."/>
</xsl:for-each>
<xsl:for-each select="oai_marc:subfield[@oai_marc:label='s']">
<xsl:value-of select="."/>
</xsl:for-each>
</metadataLangString>
</xsl:for-each>
</title>
</xsl:if>
<!-- *** Authors *** -->
<!-- personal 100 -->
<xsl:for-each select="oai_marc:varfield[@oai_marc:id='100']">
<creator>
<metadataLangString>
<xsl:if test="oai_marc:subfield[@oai_marc:label='c']"><xsl:value-of select="oai_marc:subfield[@oai_marc:label='c']"/> </xsl:if>
<xsl:value-of select="oai_marc:subfield[@oai_marc:label='a']"/>
</metadataLangString>
</creator>
</xsl:for-each>
<!-- corporate author 110-->
<xsl:for-each select="oai_marc:varfield[@oai_marc:id='110']">
<creator>
<metadataLangString>
<xsl:value-of select="oai_marc:subfield[@oai_marc:label='a']"/>\n
</metadataLangString>
</creator>
</xsl:for-each>
<!-- *** Edition *** -->
<!-- 250 -->
<xsl:if test="oai_marc:varfield[@oai_marc:id='250']/oai_marc:subfield[@oai_marc:label='a']">
<edition>
<metadataLangString>
<xsl:value-of select="oai_marc:varfield[@oai_marc:id='250']/oai_marc:subfield[@oai_marc:label='a']"/>
</metadataLangString>
</edition>
</xsl:if>
<!-- *** Publication *** -->
<!-- 260 -->
<xsl:if test="oai_marc:varfield[@oai_marc:id='260']/oai_marc:subfield[@oai_marc:label='c']">
<publicationDate>
<metadataDate>
<xsl:value-of select="oai_marc:varfield[@oai_marc:id='260']/oai_marc:subfield[@oai_marc:label='c']"/>
</metadataDate>
</publicationDate>
</xsl:if>
<xsl:if test="oai_marc:varfield[@oai_marc:id='260']/oai_marc:subfield[@oai_marc:label='a']">
<publicationPlace>
<metadataLangString>
<xsl:value-of select="oai_marc:varfield[@oai_marc:id='260']/oai_marc:subfield[@oai_marc:label='a']"/>
</metadataLangString>
</publicationPlace>
</xsl:if>
<xsl:if test="oai_marc:varfield[@oai_marc:id='260']/oai_marc:subfield[@oai_marc:label='b']">
<publisher>
<metadataLangString>
<xsl:value-of select="oai_marc:varfield[@oai_marc:id='260']/oai_marc:subfield[@oai_marc:label='b']"/>
</metadataLangString>
</publisher>
</xsl:if>
<!-- *** Volume *** -->
<!-- 440 -->
<xsl:if test="oai_marc:varfield[@oai_marc:id='440']/oai_marc:subfield[@oai_marc:label='v']">
<volumeDesignation>
<metadataString>
<xsl:value-of select="oai_marc:varfield[@oai_marc:id='440']/oai_marc:subfield[@oai_marc:label='v']"/>
</metadataString>
</volumeDesignation>
</xsl:if>
<!-- *** Part/Issue number*** -->
<!-- 440 -->
<xsl:if test="oai_marc:varfield[@oai_marc:id='440']/oai_marc:subfield[@oai_marc:label='n']">
<partDesignation>
<metadataString>
<xsl:value-of select="oai_marc:varfield[@oai_marc:id='440']/oai_marc:subfield[@oai_marc:label='n']"/>
</metadataString>
</partDesignation>
</xsl:if>
<!-- *** identifiers *** -->
<!-- isbn 20 -->
<xsl:if test="oai_marc:varfield[@oai_marc:id='020']">
<xsl:for-each select="oai_marc:varfield[@oai_marc:id='020']">
<xsl:if test="oai_marc:subfield[@oai_marc:label='a']">
<standardIdentifier>
<standardIdentifierType>URI</standardIdentifierType>
<identifierString>
<metadataString>urn:ISBN:<xsl:value-of select="oai_marc:subfield[@oai_marc:label='a']"/></metadataString>
</identifierString>
</standardIdentifier>
</xsl:if>
</xsl:for-each>
</xsl:if>
<!-- issn 22 -->
<xsl:if test="oai_marc:varfield[@oai_marc:id='022']">
<xsl:for-each select="oai_marc:varfield[@oai_marc:id='022']">
<xsl:if test="oai_marc:subfield[@oai_marc:label='a']">
<standardIdentifier>
<standardIdentifierType>URI</standardIdentifierType>
<identifierString>
<metadataString>urn:ISSN:<xsl:value-of select="oai_marc:subfield[@oai_marc:label='a']"/></metadataString>
</identifierString>
</standardIdentifier>
</xsl:if>
</xsl:for-each>
</xsl:if>
<!-- library of congress control number 10 -->
<xsl:if test="oai_marc:varfield[@oai_marc:id='010']/oai_marc:subfield[@oai_marc:label='a']">
<standardIdentifier>
<standardIdentifierType>URI</standardIdentifierType>
<identifierString>
<metadataString>
info:lccn:<xsl:value-of select="oai_marc:varfield[@oai_marc:id='010']/oai_marc:subfield[@oai_marc:label='a']"/>
</metadataString>
</identifierString>
</standardIdentifier>
</xsl:if>
<!-- oclc control number 19 -->
<xsl:if test="oai_marc:varfield[@oai_marc:id='019']/oai_marc:subfield[@oai_marc:label='a']">
<standardIdentifier>
<standardIdentifierType>URI</standardIdentifierType>
<identifierString>
<metadataString>
info:oclcnum:<xsl:value-of select="oai_marc:varfield[@oai_marc:id='019']/oai_marc:subfield[@oai_marc:label='a']"/>
</metadataString>
</identifierString>
</standardIdentifier>
</xsl:if>
<!-- other unique idenfifier 24 -->
<xsl:if test="oai_marc:varfield[@oai_marc:id='024']">
<xsl:for-each select="oai_marc:varfield[@oai_marc:id='024']">
<xsl:choose>
<xsl:when test="self::node()/@oai_marc:i1='0'">
<standardIdentifier>
<standardIdentifierType>ISRC</standardIdentifierType>
<identifierString>
<metadataString>
<xsl:value-of select="oai_marc:subfield[@oai_marc:label='a']"/>
</metadataString>
</identifierString>
</standardIdentifier>
</xsl:when>
<xsl:when test="self::node()/@oai_marc:i1='1'">
<standardIdentifier>
<standardIdentifierType>UPC</standardIdentifierType>
<identifierString>
<metadataString>
<xsl:value-of select="oai_marc:subfield[@oai_marc:label='a']"/>
</metadataString>
</identifierString>
</standardIdentifier>
</xsl:when>
<xsl:when test="self::node()/@oai_marc:i1='2'">
<standardIdentifier>
<standardIdentifierType>ISMN</standardIdentifierType>
<identifierString>
<metadataString>
<xsl:value-of select="oai_marc:subfield[@oai_marc:label='a']"/>
</metadataString>
</identifierString>
</standardIdentifier>
</xsl:when>
<xsl:when test="self::node()/@oai_marc:i1='3'">
<standardIdentifier>
<standardIdentifierType>IAN</standardIdentifierType>
<identifierString>
<metadataString>
<xsl:value-of select="oai_marc:subfield[@oai_marc:label='a']"/>
</metadataString>
</identifierString>
</standardIdentifier>
</xsl:when>
<xsl:when test="self::node()/@oai_marc:i1='4'">
<standardIdentifier>
<standardIdentifierType>URI</standardIdentifierType>
<identifierString>
<metadataString>
info:sici:<xsl:value-of select="oai_marc:subfield[@oai_marc:label='a']"/>
</metadataString>
</identifierString>
</standardIdentifier>
</xsl:when>
<xsl:when test="self::node()/@oai_marc:i1='7'">
<standardIdentifier>
<standardIdentifierType><xsl:value-of select="oai_marc:subfield[@oai_marc:label='2']"/></standardIdentifierType>
<identifierString>
<metadataString>
<xsl:value-of select="oai_marc:subfield[@oai_marc:label='a']"/>
</metadataString>
</identifierString>
</standardIdentifier>
</xsl:when>
<xsl:when test="self::node()/@oai_marc:i1='8'">
<standardIdentifier>
<standardIdentifierType>unknown</standardIdentifierType>
<identifierString>
<metadataString>
<xsl:value-of select="oai_marc:subfield[@oai_marc:label='a']"/>
</metadataString>
</identifierString>
</standardIdentifier>
</xsl:when>
</xsl:choose>
</xsl:for-each>
</xsl:if>
<!-- related series title 440, e.g. lecture notes on computer science series -->
<xsl:if test="oai_marc:varfield[@oai_marc:id='440']">
<relatedTitle>
<title>
<metadataLangString>
<xsl:value-of select="oai_marc:varfield[@oai_marc:id='440']/oai_marc:subfield[@oai_marc:label='a']"/>
</metadataLangString>
</title>
<!-- *** Volume *** -->
<!-- 440 -->
<xsl:if test="oai_marc:varfield[@oai_marc:id='440']/oai_marc:subfield[@oai_marc:label='v']">
<volumeDesignation>
<metadataString>
<xsl:value-of select="oai_marc:varfield[@oai_marc:id='440']/oai_marc:subfield[@oai_marc:label='v']"/>
</metadataString>
</volumeDesignation>
</xsl:if>
<!-- *** Part/Issue number*** -->
<!-- 440 -->
<xsl:if test="oai_marc:varfield[@oai_marc:id='440']/oai_marc:subfield[@oai_marc:label='n']">
<partDesignation>
<metadataString>
<xsl:value-of select="oai_marc:varfield[@oai_marc:id='440']/oai_marc:subfield[@oai_marc:label='n']"/>
</metadataString>
</partDesignation>
</xsl:if>
</relatedTitle>
</xsl:if>
</citation>
<!-- *** online location *** -->
<xsl:for-each select="oai_marc:varfield[@oai_marc:id='856']/oai_marc:subfield[@oai_marc:label='u']">
<location>
<locationType>URI</locationType>
<locator>
<metadataString><xsl:value-of select="."/></metadataString>
</locator>
</location>
</xsl:for-each>
<!-- *** physical location *** -->
<xsl:for-each select="oai_marc:varfield[@oai_marc:id='852']">
<location>
<locationType>physical</locationType>
<locator>
<metadataString>
<xsl:value-of select="oai_marc:subfield[@oai_marc:label='a']"/><xsl:text> </xsl:text>
<xsl:for-each select="oai_marc:subfield[@oai_marc:label='b' or @oai_marc:label='c' or @oai_marc:label='j']">
<xsl:value-of select="."/><xsl:text> </xsl:text>
</xsl:for-each>
<xsl:if test="oai_marc:subfield[@oai_marc:label='e']">
<xsl:value-of select="oai_marc:subfield[@oai_marc:label='e']"/><xsl:text> </xsl:text>
</xsl:if>
<xsl:if test="oai_marc:subfield[@oai_marc:label='h']">
<xsl:value-of select="oai_marc:subfield[@oai_marc:label='h']"/><xsl:text> </xsl:text>
</xsl:if>
<xsl:if test="oai_marc:subfield[@oai_marc:label='m']">
<xsl:value-of select="oai_marc:subfield[@oai_marc:label='m']"/><xsl:text> </xsl:text>
</xsl:if>
</metadataString>
</locator>
</location>
</xsl:for-each>
</resourceMetadata>
</resource>
</xsl:template>
</xsl:stylesheet>