You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
207 lines
5.3 KiB
207 lines
5.3 KiB
<?xml version="1.0"?>
|
|
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
|
xmlns="http://periapsis.org/tellico/"
|
|
xmlns:str="http://exslt.org/strings"
|
|
extension-element-prefixes="str"
|
|
version="1.0">
|
|
|
|
<!--
|
|
===================================================================
|
|
Tellico XSLT file - used for importing Discogs release search data.
|
|
|
|
Copyright (C) 2008 Robby Stephenson -robby@periapsis.org
|
|
Roman L. Senn - roman.l.senn@gmail.com
|
|
|
|
This XSLT stylesheet is designed to be used with the 'Tellico'
|
|
application, which can be found at http://www.periapsis.org/tellico/
|
|
|
|
===================================================================
|
|
-->
|
|
|
|
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"
|
|
doctype-public="-//Robby Stephenson/DTD Tellico V10.0//EN"
|
|
doctype-system="http://periapsis.org/tellico/dtd/v10/tellico.dtd"/>
|
|
|
|
<xsl:template match="/">
|
|
<tellico syntaxVersion="10">
|
|
<collection title="Discogs API" type="4"> <!-- 4 is music -->
|
|
<fields>
|
|
<field name="_default"/>
|
|
<!-- the importer will actually download the image and ignore this field -->
|
|
<field flags="0" title="Discogs ID" category="General" format="4" type="1" name="discogs-id"/>
|
|
<field flags="0" title="Discogs Link" category="General" format="4" type="7" name="discogs"/>
|
|
<field flags="7" title="Nationality" category="General" format="0" type="1" name="nationality" i18n="true"/>
|
|
<xsl:if test="contains(resp/release/extraartists/artist/role, 'Producer')">
|
|
<field flags="7" title="Producer" category="General" format="2" type="1" name="producer" i18n="true"/>
|
|
</xsl:if>
|
|
|
|
</fields>
|
|
<xsl:apply-templates select="/resp/searchresults/result[@type='release'] | resp/artist | resp/release"/>
|
|
</collection>
|
|
</tellico>
|
|
</xsl:template>
|
|
|
|
<xsl:template match="resp/searchresults/result">
|
|
<entry>
|
|
<title>
|
|
<xsl:value-of select="substring-after(title,' - ')"/>
|
|
</title>
|
|
|
|
<artists>
|
|
<artist>
|
|
<xsl:value-of select="substring-before(title,' - ')"/>
|
|
</artist>
|
|
</artists>
|
|
|
|
<labels>
|
|
<label>
|
|
<xsl:value-of select="substring-before(substring-after(normalize-space(summary),'Label: '),' Catalog#:')"/>
|
|
</label>
|
|
</labels>
|
|
|
|
<comments>
|
|
<xsl:value-of select="summary"/>
|
|
</comments>
|
|
|
|
<discogs>
|
|
<xsl:value-of select="uri"/>
|
|
</discogs>
|
|
|
|
<discogs-id>
|
|
<xsl:variable name="tokens" select="str:tokenize(uri, '/')"/>
|
|
<xsl:value-of select="$tokens[count($tokens)]"/>
|
|
</discogs-id>
|
|
</entry>
|
|
</xsl:template>
|
|
|
|
<xsl:template match="resp/artist">
|
|
<xsl:for-each select="releases/release">
|
|
<entry>
|
|
<title>
|
|
<xsl:value-of select="title"/>
|
|
</title>
|
|
|
|
<artists>
|
|
<artist>
|
|
<xsl:value-of select="../../name"/>
|
|
</artist>
|
|
</artists>
|
|
|
|
<labels>
|
|
<label>
|
|
<xsl:value-of select="label"/>
|
|
</label>
|
|
</labels>
|
|
|
|
<discogs-id>
|
|
<xsl:value-of select="@id"/>
|
|
</discogs-id>
|
|
|
|
</entry>
|
|
</xsl:for-each>
|
|
|
|
</xsl:template>
|
|
|
|
<xsl:template match="resp/release">
|
|
<entry>
|
|
<title>
|
|
<xsl:value-of select="title"/>
|
|
</title>
|
|
|
|
<artists>
|
|
<xsl:for-each select="artists/artist">
|
|
<artist>
|
|
<xsl:value-of select="."/>
|
|
</artist>
|
|
</xsl:for-each>
|
|
</artists>
|
|
|
|
<labels>
|
|
<xsl:for-each select="labels/label">
|
|
<label>
|
|
<xsl:value-of select="@name"/>
|
|
</label>
|
|
</xsl:for-each>
|
|
</labels>
|
|
|
|
<genres i18n="true">
|
|
<xsl:for-each select="genres/genre">
|
|
<genre>
|
|
<xsl:value-of select="."/>
|
|
</genre>
|
|
</xsl:for-each>
|
|
</genres>
|
|
|
|
<keywords i18n="true">
|
|
<xsl:for-each select="styles/style">
|
|
<keyword>
|
|
<xsl:value-of select="."/>
|
|
</keyword>
|
|
</xsl:for-each>
|
|
</keywords>
|
|
|
|
<discogs-id>
|
|
<xsl:value-of select="@id"/>
|
|
</discogs-id>
|
|
|
|
<comments>
|
|
<xsl:value-of select="notes"/>
|
|
</comments>
|
|
|
|
<medium i18n="true">
|
|
<xsl:variable name="medium" select="formats/format[1]/@name"/>
|
|
<xsl:choose>
|
|
<xsl:when test="$medium='CD'">
|
|
<xsl:text>Compact Disc</xsl:text>
|
|
</xsl:when>
|
|
<xsl:otherwise>
|
|
<xsl:value-of select="$medium"/>
|
|
</xsl:otherwise>
|
|
</xsl:choose>
|
|
</medium>
|
|
|
|
<year>
|
|
<xsl:value-of select="substring(released,0,5)"/>
|
|
</year>
|
|
|
|
<tracks>
|
|
<xsl:for-each select="tracklist/track">
|
|
<xsl:sort select="position" data-type="number"/>
|
|
<track>
|
|
<column><xsl:value-of select="title"/></column>
|
|
<column><xsl:value-of select="../../artists/artist[1]"/></column>
|
|
<column><xsl:value-of select="duration"/></column>
|
|
</track>
|
|
</xsl:for-each>
|
|
</tracks>
|
|
|
|
<producers>
|
|
<xsl:for-each select="extraartists/artist[contains(role, 'Producer')]">
|
|
<producer>
|
|
<xsl:value-of select="name"/>
|
|
</producer>
|
|
</xsl:for-each>
|
|
</producers>
|
|
|
|
<nationalitys>
|
|
<nationality>
|
|
<xsl:value-of select="country"/>
|
|
</nationality>
|
|
</nationalitys>
|
|
|
|
<cover>
|
|
<xsl:for-each select="images/image">
|
|
<xsl:sort select="type"/> <!-- 'primary' before 'secondary' -->
|
|
<xsl:sort select="height*width" data-type="number" order="descending"/>
|
|
<xsl:if test="position() = 1">
|
|
<xsl:value-of select="@uri150"/><!-- I wish I could put a 'break' statement here -->
|
|
<!-- use small image -->
|
|
</xsl:if>
|
|
</xsl:for-each>
|
|
</cover>
|
|
|
|
</entry>
|
|
</xsl:template>
|
|
|
|
</xsl:stylesheet>
|