<?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:php="http://php.net/xsl" xmlns:my="http://kusoftas.com/my" xmlns:func="http://exslt.org/functions" xmlns:exsl="http://exslt.org/common" xmlns:regexp="http://exslt.org/regular-expressions" extension-element-prefixes="func exsl regexp my" exclude-result-prefixes="php"> <xsl:output method="xml" encoding="utf-8" indent="yes"/> <xsl:param name="objLabel"/> <xsl:param name="objTitle"/> <xsl:param name="objDescription"/> <xsl:param name="objKeywords"/> <xsl:param name="objLanguage"/> <xsl:param name="objSEQ"/> <xsl:param name="objPID"/> <xsl:param name="objCode"/> <xsl:param name="objModel"/> <xsl:param name="objURL"/> <xsl:param name="objProtocol"/> <xsl:param name="objCreator"/> <xsl:param name="objCreateDate"/> <xsl:param name="objEditor"/> <xsl:param name="objLastModDate"/> <xsl:param name="objSearch"/> <xsl:param name="objBoost" select="1.0"/> <xsl:param name="baseURL"/> <xsl:param name="searchURL"/> <xsl:variable name="lt"> <xsl:text disable-output-escaping="yes"><![CDATA[<]]></xsl:text> </xsl:variable> <xsl:variable name="gt"> <xsl:text disable-output-escaping="yes"><![CDATA[>]]></xsl:text> </xsl:variable> <xsl:variable name="guote"> <xsl:text disable-output-escaping="yes"><![CDATA["]]></xsl:text> </xsl:variable> <func:function name="my:replace"> <xsl:param name="pattern"></xsl:param> <xsl:param name="replacement"></xsl:param> <xsl:param name="subject"></xsl:param> <xsl:param name="attributes"><xsl:value-of select="'i'"/></xsl:param> <func:result select="php:function('plugin_ldb_api_utils::replace', $pattern, $replacement, $subject, $attributes)" /> </func:function> <func:function name="my:match"> <xsl:param name="pattern"></xsl:param> <xsl:param name="subject"></xsl:param> <xsl:param name="attributes"><xsl:value-of select="'i'"/></xsl:param> <func:result select="php:function('plugin_ldb_api_utils::match', $pattern, $subject, $attributes)" /> </func:function> <func:function name="my:trim"> <xsl:param name="subject"></xsl:param> <func:result select="php:function('plugin_ldb_api_utils::replace', '(^[ ]+|[ :.]+$)', '', $subject)" /> </func:function> <func:function name="my:trimx"> <xsl:param name="subject"></xsl:param> <func:result select="php:function('plugin_ldb_api_utils::replace', '(^[ ,.;&quot;]+|[ ,.;&quot;]+$|&quot;)', '', $subject)" /> </func:function> <func:function name="my:trimy"> <xsl:param name="subject"></xsl:param> <func:result select="php:function('plugin_ldb_api_utils::replace', '(^[ ,.;:]+|[ ,.;:\/]+$)', '', $subject)" /> </func:function> <func:function name="my:escape"> <xsl:param name="subject"></xsl:param> <func:result select="php:function('plugin_ldb_api_utils::escape', $subject)" /> </func:function> <xsl:template match="/"> <xsl:call-template name="item"/> </xsl:template> <xsl:template name="item"> <data> <link rel="schema.DCTERMS" href="http://purl.org/dc/terms/" /> <link rel="schema.DC" href="http://purl.org/dc/elements/1.1/" /> <xsl:for-each select="objectDatastreams/datastream"> <xsl:variable name="stream"> <xsl:copy-of select="php:function('plugin_ldb_api_item::getDatastreamContent', string(dsid))"/> </xsl:variable> <xsl:for-each select="exsl:node-set($stream)/find-doc/record/metadata/oai_marc"> <xsl:variable name="ldr"> <xsl:value-of select="fixfield[@id='LDR']"/> </xsl:variable> <xsl:variable name="f008"> <xsl:value-of select="fixfield[@id='008']"/> </xsl:variable> <xsl:variable name="f005"> <xsl:value-of select="fixfield[@id='005']"/> </xsl:variable> <xsl:variable name="lang"> <xsl:choose> <xsl:when test="varfield[@id='041']/subfield[@label='a']"> <xsl:for-each select="varfield[@id='041'][subfield[@label='a']]"> <xsl:if test="position()=1"> <xsl:value-of select="php:function('plugin_ldb_api_utils::getLanguageCode', subfield[@label='a'])"/> </xsl:if> </xsl:for-each> </xsl:when> <xsl:otherwise> <xsl:value-of select="php:function('plugin_ldb_api_utils::getLanguageCode', substring($f008,36,3))"/> </xsl:otherwise> </xsl:choose> </xsl:variable> <xsl:variable name="country"> <xsl:choose> <xsl:when test="varfield[@id='044']/subfield[@label='a']"> <xsl:value-of select="php:function('plugin_ldb_api_utils::getCountryCode', varfield[@id='044']/subfield[@label='a'][text()])"/> </xsl:when> <xsl:otherwise> <xsl:value-of select="php:function('plugin_ldb_api_utils::getCountryCode', php:function('preg_replace', '/\^/', '', substring($f008,16,3)))"/> </xsl:otherwise> </xsl:choose> </xsl:variable> <xsl:variable name="langalt"> <xsl:if test="varfield[@id='041']/subfield[@label='a']"> <xsl:for-each select="varfield[@id='041'][subfield[@label='a']]"> <xsl:if test="position()=1 and subfield[@label='b']"> <xsl:value-of select="php:function('plugin_ldb_api_utils::getLanguageCode', subfield[@label='b'])"/> </xsl:if> </xsl:for-each> </xsl:if> </xsl:variable> <xsl:for-each select="varfield[@id='245']"> <xsl:if test="position()=1"> <xsl:variable name="ab"> <xsl:for-each select="subfield[@label='a' or @label='b']"><xsl:value-of select="text()"/><xsl:text> </xsl:text></xsl:for-each> </xsl:variable> <meta name="DC.title" content="{my:trim(my:replace('\s*[:=\/]+\s*$', '', $ab))}" xml:lang="{$lang}" /> </xsl:if> </xsl:for-each> <xsl:if test="string-length($langalt)>0"> <xsl:for-each select="varfield[@id='246' and @i1='1']"> <xsl:if test="position()=1"> <xsl:variable name="ab"> <xsl:for-each select="subfield[@label='a' or @label='b']"><xsl:value-of select="text()"/><xsl:text> </xsl:text></xsl:for-each> </xsl:variable> <meta name="DCTERMS.alternative" content="{my:trim(my:replace('\s*[:=\/]+\s*$', '', $ab))}" xml:lang="{$langalt}" /> </xsl:if> </xsl:for-each> </xsl:if> <xsl:for-each select="varfield[@id='100' or @id='110' or @id='120']/subfield[@label='a']"> <meta name="DC.creator" content="{my:trimy(text())}" /> </xsl:for-each> <xsl:for-each select="varfield[@id='700' or @id='710' or @id='720']/subfield[@label='a']"> <meta name="DC.creator" content="{my:trimy(text())}" /> </xsl:for-each> <xsl:for-each select="varfield[@id='709']/subfield[@label='a']"> <meta name="DC.creator" content="{my:trimy(text())}" /> </xsl:for-each> <meta name="DC.identifier" content="{concat($baseURL, '/', $objPID)}" scheme="DCTERMS.URI" /> <xsl:for-each select="varfield[@id='856' or @id='859']/subfield[@label='u']"> <meta name="DC.identifier" content="{text()}" scheme="DCTERMS.URI" /> </xsl:for-each> <xsl:variable name="rights"> <xsl:choose> <xsl:when test="varfield[@id='856' or @id='859']"> <xsl:text>open</xsl:text> </xsl:when> <xsl:otherwise> <xsl:text>closed</xsl:text> </xsl:otherwise> </xsl:choose> </xsl:variable> <meta name="DC.rights" content="{$rights}" /> <xsl:if test="varfield[@id='773' and @i1='0' and (@i2=' ' or @i2='U')]"> <xsl:variable name="source"> <xsl:for-each select="varfield[@id='773' and @i1='0' and (@i2=' ' or @i2='U')]"> <xsl:if test="position()=1"> <xsl:variable name="ps"> <xsl:if test="subfield[@label='p' or @label='s']"> <xsl:for-each select="subfield[@label='p' or @label='s']"> <xsl:if test="position()>1"><xsl:text>. </xsl:text></xsl:if> <xsl:value-of select="my:trimy(text())"/> <xsl:if test="position()=last()"><xsl:text>.</xsl:text></xsl:if> </xsl:for-each> </xsl:if> </xsl:variable> <xsl:variable name="k"> <xsl:if test="subfield[@label='k']"> <xsl:for-each select="subfield[@label='k']"> <xsl:if test="position()=1"> <xsl:text>(</xsl:text><xsl:value-of select="my:trimy(text())"/><xsl:text>).</xsl:text> </xsl:if> </xsl:for-each> </xsl:if> </xsl:variable> <xsl:variable name="h"> <xsl:if test="subfield[@label='h']"> <xsl:for-each select="subfield[@label='k']"> <xsl:if test="position()=1"> <xsl:value-of select="my:trimy(text())"/><xsl:text>.</xsl:text> </xsl:if> </xsl:for-each> </xsl:if> </xsl:variable> <xsl:variable name="n"> <xsl:if test="subfield[@label='n']"> <xsl:for-each select="subfield[@label='n']"> <xsl:if test="position()=1"> <xsl:value-of select="my:trimy(text())"/><xsl:text>.</xsl:text> </xsl:if> </xsl:for-each> </xsl:if> </xsl:variable> <xsl:variable name="issn"> <xsl:if test="subfield[@label='x' or @label='o']"> <xsl:for-each select="subfield[@label='x' or @label='o']"> <xsl:text>ISSN </xsl:text> <xsl:value-of select="my:trimy(text())"/> <xsl:text>.</xsl:text> </xsl:for-each> </xsl:if> </xsl:variable> <xsl:variable name="isbn"> <xsl:if test="subfield[@label='z']"> <xsl:for-each select="subfield[@label='z']"> <xsl:text>ISBN </xsl:text> <xsl:value-of select="my:trimy(text())"/> <xsl:text>.</xsl:text> </xsl:for-each> </xsl:if> </xsl:variable> <xsl:value-of select="my:replace(' +', ' ', my:trimy(concat(my:trimy(subfield[@label='t']), '. ', $ps, ' ', subfield[@label='d'], ' ', subfield[@label='g'], ' ', $h, ' ', $k, ' ', $n, ' ', $issn, ' ', $isbn)))"/> </xsl:if> </xsl:for-each> </xsl:variable> <meta name="DCTERMS.isPartOf" content="{$source}" /> </xsl:if> <xsl:for-each select="varfield[@id='653'][subfield[@label='a'] and subfield[@label='9']]"> <meta name="DC.subject" content="{my:trimx(subfield[@label='a'])}" xml:lang="en" /> </xsl:for-each> <xsl:for-each select="varfield[@id='653'][subfield[@label='a'] and not(subfield[@label='9'])]"> <meta name="DC.subject" content="{my:trimx(subfield[@label='a'])}" xml:lang="lt" /> </xsl:for-each> <xsl:for-each select="varfield[@id='505' and @i1='0'][subfield[@label='a']]"> <meta name="DC.description" content="{my:trimy(subfield[@label='a'])}" /> </xsl:for-each> <xsl:if test="varfield[@id='520'][subfield[@label='a']]"> <xsl:variable name="abstractlt"> <xsl:for-each select="varfield[@id='520'][subfield[@label='a']]"> <xsl:if test="position()>1"> ; </xsl:if> <xsl:value-of select="my:trimy(subfield[@label='a'])"/> </xsl:for-each> </xsl:variable> <meta name="DCTERMS.abstract" content="{$abstractlt}" xml:lang="lt" /> </xsl:if> <xsl:if test="varfield[@id='590'][subfield[@label='a']]"> <xsl:variable name="abstracten"> <xsl:for-each select="varfield[@id='590'][subfield[@label='a']]"> <xsl:if test="position()>1"> ; </xsl:if> <xsl:value-of select="my:trimy(subfield[@label='a'])"/> </xsl:for-each> </xsl:variable> <meta name="DCTERMS.abstract" content="{$abstracten}" xml:lang="en" /> </xsl:if> <xsl:for-each select="varfield[@id='260'][subfield[@label='b']]"> <meta name="DC.publisher" content="{my:trimy(subfield[@label='b'])}" /> </xsl:for-each> <xsl:for-each select="varfield[@id='773'][subfield[@label='d' and my:match(':[^:,]+,', text())=1]]"> <meta name="DC.publisher" content="{my:trimy(my:replace('^.*:(.+),.*$', '$1', subfield[@label='d']))}" /> </xsl:for-each> <xsl:variable name="type"> <xsl:choose> <xsl:when test="substring($ldr,8,1)='a' and varfield[@id='773'][1]/subfield[@label='7' and my:match('s$', text())=1 and my:match('^Recenz', text())=0]"> <xsl:text>article</xsl:text> </xsl:when> <xsl:when test="substring($ldr,8,1)='m' and varfield[@id='655']/subfield[@label='a' and my:match('^Disert', text())=0]"> <xsl:text>book</xsl:text> </xsl:when> <xsl:when test="substring($ldr,8,1)='a' and varfield[@id='773'][1]/subfield[@label='7' and my:match('m$', text())=1] and varfield[@id='655']/subfield[@label='a' and my:match('^Recenz', text())=0]"> <xsl:text>book part</xsl:text> </xsl:when> <xsl:when test="varfield[@id='655']/subfield[@label='a' and my:match('^Recenz', text())=1]"> <xsl:text>review</xsl:text> </xsl:when> <xsl:when test="varfield[@id='655']/subfield[@label='a' and my:match('^Disert', text())=1]"> <xsl:text>doctoral thesis</xsl:text> </xsl:when> <xsl:otherwise><xsl:text>other</xsl:text></xsl:otherwise> </xsl:choose> </xsl:variable> <meta name="DC.type" content="{$type}" /> <meta name="DC.date" content="{substring($f008, 8, 4)}" /> <meta name="DC.format" content="application/pdf" /> <xsl:for-each select="varfield[@id='024'][subfield[@label='a'] and subfield[@label='2' and text()='doi']]"> <xsl:if test="position()=1"> <meta name="DC.identifier" content="{concat('https://doi.org/', my:replace('^\s*doi\s*', '', subfield[@label='a']))}" scheme="DCTERMS.URI" /> </xsl:if> </xsl:for-each> <xsl:choose> <xsl:when test="$type='article' or $type='book part'"> <xsl:for-each select="varfield[@id='773' and @i1='0' and (@i2='' or @i2=' ' or @i2='U')][subfield[@label='h']]"> <xsl:if test="position()=1"> <meta name="DCTERMS.extent" content="{my:trim(subfield[@label='h'])}" /> </xsl:if> </xsl:for-each> </xsl:when> <xsl:otherwise> <xsl:for-each select="varfield[@id='300'][subfield[@label='a']]"> <xsl:if test="position()=1"> <meta name="DCTERMS.extent" content="{my:trim(concat(subfield[@label='a'], ' ', subfield[@label='b']))}" /> </xsl:if> </xsl:for-each> </xsl:otherwise> </xsl:choose> <xsl:for-each select="varfield[@id='787'][subfield[@label='t'] and subfield[@label='d']]"> <meta name="DC.relation" content="{concat(subfield[@label='t'], ' ', subfield[@label='d'])}" /> </xsl:for-each> <xsl:for-each select="varfield[@id='787'][subfield[@label='w']]"> <meta name="DC.relation" content="{concat($baseURL, my:replace('^0+', '', subfield[@label='w']))}" /> </xsl:for-each> <xsl:for-each select="varfield[@id='940'][subfield[@label='w']]"> <meta name="DC.relation" content="{concat($baseURL, my:replace('^0+', '', subfield[@label='w']))}" /> </xsl:for-each> <meta name="DCTERMS.spatial" content="{$country}" /> <xsl:variable name="available"> <xsl:value-of select="concat(substring($f005,1,4), '-', substring($f005,5,2),'-', substring($f005,7,2), 'T', substring($f005,9,2), ':', substring($f005,11,2), ':', substring($f005,13,2), 'Z')"/> </xsl:variable> <meta name="DCTERMS.available" content="{$available}" scheme="DCTERMS.W3CDTF" /> </xsl:for-each> </xsl:for-each> </data> </xsl:template> </xsl:stylesheet>