diff options
author | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2010-03-01 19:17:32 +0000 |
---|---|---|
committer | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2010-03-01 19:17:32 +0000 |
commit | e38d2351b83fa65c66ccde443777647ef5cb6cff (patch) | |
tree | 1897fc20e9f73a81c520a5b9f76f8ed042124883 /xslt/amazon2tellico.xsl | |
download | tellico-e38d2351b83fa65c66ccde443777647ef5cb6cff.tar.gz tellico-e38d2351b83fa65c66ccde443777647ef5cb6cff.zip |
Added KDE3 version of Tellico
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/applications/tellico@1097620 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'xslt/amazon2tellico.xsl')
-rw-r--r-- | xslt/amazon2tellico.xsl | 590 |
1 files changed, 590 insertions, 0 deletions
diff --git a/xslt/amazon2tellico.xsl b/xslt/amazon2tellico.xsl new file mode 100644 index 0000000..065886a --- /dev/null +++ b/xslt/amazon2tellico.xsl @@ -0,0 +1,590 @@ +<?xml version="1.0"?> +<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + xmlns="http://periapsis.org/tellico/" + xmlns:aws="http://webservices.amazon.com/AWSECommerceService/2007-10-29" + xmlns:exsl="http://exslt.org/common" + extension-element-prefixes="exsl" + version="1.0"> + +<!-- + =================================================================== + Tellico XSLT file - used for importing Amazon Web Services data. + + Copyright (C) 2004-2007 Robby Stephenson - robby@periapsis.org + + 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"/> + + +<!-- need to figure out what type of collection --> +<xsl:variable name="args" select="//aws:OperationRequest/aws:Arguments"/> +<xsl:variable name="tmp"> + <xsl:choose> + <!-- SearchIndex is mode, unless doing ISBN or UPC search --> + <xsl:when test="$args/aws:Argument[@Name='SearchIndex']"> + <xsl:value-of select="$args/aws:Argument[@Name='SearchIndex']/@Value"/> + </xsl:when> + <!-- only happens for books --> + <xsl:when test="$args/aws:Argument[@Name='Operation']/@Value='ItemLookup'"> + <xsl:text>Books</xsl:text> + </xsl:when> + </xsl:choose> +</xsl:variable> +<!-- France might have DVD instead of Video --> +<xsl:variable name="mode"> + <xsl:choose> + <xsl:when test="$tmp='DVD'"> + <xsl:text>Video</xsl:text> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="$tmp"/> + </xsl:otherwise> + </xsl:choose> +</xsl:variable> + +<!-- for lower-casing --> +<xsl:variable name="lcletters">abcdefghijklmnopqrstuvwxyz</xsl:variable> +<xsl:variable name="ucletters">ABCDEFGHIJKLMNOPQRSTUVWXYZ</xsl:variable> + +<xsl:template match="/"> + <tellico syntaxVersion="10"> + <collection title="Amazon Import"> + <xsl:attribute name="type"> + <xsl:choose> + <xsl:when test="$mode='Books'"> + <xsl:text>2</xsl:text> + </xsl:when> + <xsl:when test="$mode='Video'"> + <xsl:text>3</xsl:text> + </xsl:when> + <!-- also can be pop-music-de --> + <xsl:when test="$mode='Music'"> + <xsl:text>4</xsl:text> + </xsl:when> + <xsl:when test="$mode='VideoGames'"> + <xsl:text>11</xsl:text> + </xsl:when> + </xsl:choose> + </xsl:attribute> + <fields> + <field name="_default"/> + <field flags="0" title="Amazon Link" category="General" format="4" type="7" name="amazon" i18n="true"/> + <!-- the amazon importer will actually download the images and ignore these fields --> + <field flags="0" title="Small Image" category="Images" format="4" type="7" name="small-image"/> + <field flags="0" title="Medium Image" category="Images" format="4" type="7" name="medium-image"/> + <field flags="0" title="Large Image" category="Images" format="4" type="7" name="large-image"/> + </fields> + <xsl:for-each select="//aws:Items/aws:Item"> + <xsl:apply-templates select="."/> + </xsl:for-each> + </collection> + </tellico> +</xsl:template> + +<xsl:template match="aws:Item"> + <entry> + <amazon> + <xsl:value-of select="aws:DetailPageURL"/> + </amazon> + + <small-image> + <xsl:value-of select="aws:SmallImage/aws:URL"/> + </small-image> + + <medium-image> + <xsl:value-of select="aws:MediumImage/aws:URL"/> + </medium-image> + + <large-image> + <xsl:value-of select="aws:LargeImage/aws:URL"/> + </large-image> + + <xsl:choose> + <xsl:when test="$mode='Books'"> + <comments> + <xsl:value-of select="aws:EditorialReviews/aws:EditorialReview/aws:Content"/> + </comments> + + <keywords i18n="true"> + <xsl:for-each select="aws:BrowseNodes/aws:BrowseNode"> + <keyword> + <xsl:call-template name="nodes"> + <xsl:with-param name="node" select="."/> + </xsl:call-template> + </keyword> + </xsl:for-each> + </keywords> + </xsl:when> + + <xsl:when test="$mode='Music'"> + <comments> + <xsl:value-of select="aws:EditorialReviews/aws:EditorialReview[1]/aws:Content"/> + </comments> + + <tracks> + <!-- too hard to know which artist goes with which track, just grab first --> + <xsl:variable name="artist" select="aws:ItemAttributes/aws:Artist[1]"/> + <xsl:for-each select="aws:Tracks//aws:Track"> + <track> + <xsl:value-of select="."/> + <xsl:text>::</xsl:text> + <!-- too hard to know which artist goes with which track, just grab first --> + <xsl:value-of select="$artist"/> + </track> + </xsl:for-each> + </tracks> + + <!-- these get cleaned up within Tellico itself --> + <genres i18n="true"> + <xsl:for-each select="aws:BrowseNodes/aws:BrowseNode"> + <genre> + <xsl:call-template name="nodes"> + <xsl:with-param name="node" select="."/> + </xsl:call-template> + </genre> + </xsl:for-each> + </genres> + </xsl:when> + + <xsl:when test="$mode='Video'"> + <plot> + <xsl:value-of select="aws:EditorialReviews/aws:EditorialReview[1]/aws:Content"/> + </plot> + + <!-- these get cleaned up within Tellico itself --> + <genres i18n="true"> + <xsl:for-each select="aws:BrowseNodes/aws:BrowseNode"> + <genre> + <xsl:call-template name="nodes"> + <xsl:with-param name="node" select="."/> + </xsl:call-template> + </genre> + </xsl:for-each> + </genres> + </xsl:when> + + <xsl:when test="$mode='VideoGames'"> + <description> + <xsl:value-of select="aws:EditorialReviews/aws:EditorialReview[1]/aws:Content"/> + </description> + </xsl:when> + </xsl:choose> + + <xsl:apply-templates select="aws:ItemAttributes"/> + </entry> +</xsl:template> + +<xsl:template match="aws:ItemAttributes"> + <title> + <xsl:value-of select="aws:Title"/> + </title> + + <languages> + <xsl:for-each select="aws:Languages/aws:Language[not(aws:Name=preceding-sibling::aws:Language/aws:Name)]"> + <language> + <xsl:value-of select="aws:Name"/> + </language> + </xsl:for-each> + </languages> + + <xsl:choose> + <!-- book collection stuff --> + <xsl:when test="$mode='Books'"> + <authors> + <xsl:for-each select="aws:Author"> + <author> + <xsl:value-of select="."/> + </author> + </xsl:for-each> + </authors> + + <isbn> + <!-- the EAN is the isbn-13 value for books --> + <xsl:choose> + <xsl:when test="aws:ISBN"> + <xsl:value-of select="aws:ISBN"/> + </xsl:when> + <xsl:when test="aws:EAN"> + <xsl:value-of select="aws:EAN"/> + </xsl:when> + </xsl:choose> + </isbn> + + <publisher> + <xsl:value-of select="aws:Publisher"/> + </publisher> + + <editors> + <xsl:for-each select="aws:Creator[@Role='Editor']"> + <editor> + <xsl:value-of select="."/> + </editor> + </xsl:for-each> + </editors> + + <binding i18n="true"> + <xsl:choose> + <xsl:when test="aws:Binding='Hardcover'"> + <xsl:text>Hardback</xsl:text> + </xsl:when> + <xsl:when test="contains(aws:Binding, 'Paperback')"> + <xsl:text>Paperback</xsl:text> + </xsl:when> + <!-- specifically for France --> + <xsl:when test="aws:Binding='Broché' or aws:Binding='Poche'"> + <xsl:text>Souple</xsl:text> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="aws:Binding"/> + </xsl:otherwise> + </xsl:choose> + </binding> + + <pub_year> + <xsl:call-template name="year"> + <xsl:with-param name="value" select="aws:PublicationDate"/> + </xsl:call-template> + </pub_year> + + <edition> + <xsl:value-of select="aws:Edition"/> + </edition> + + <pages> + <xsl:value-of select="aws:NumberOfPages"/> + </pages> + </xsl:when> + + <!-- music collection stuff --> + <xsl:when test="$mode='Music'"> + <artists> + <xsl:for-each select="aws:Artist"> + <artist> + <xsl:value-of select="."/> + </artist> + </xsl:for-each> + <!-- only add composers if no artist --> + <xsl:if test="not(aws:Artist)"> + <xsl:for-each select="aws:Creator[@Role='Composer']"> + <artist> + <xsl:value-of select="."/> + </artist> + </xsl:for-each> + </xsl:if> + </artists> + + <year> + <xsl:call-template name="year"> + <xsl:with-param name="value" select="aws:ReleaseDate"/> + </xsl:call-template> + </year> + + <labels> + <label> + <xsl:value-of select="aws:Label"/> + </label> + </labels> + + <medium i18n="true"> + <xsl:variable name="medium" select="aws:Binding"/> + <xsl:choose> + <xsl:when test="$medium='Audio CD'"> + <xsl:text>Compact Disc</xsl:text> + </xsl:when> + <xsl:otherwise> + <xsl:comment> + <xsl:value-of select="$medium"/> + </xsl:comment> + </xsl:otherwise> + </xsl:choose> + </medium> + </xsl:when> + + <!-- video collection stuff --> + <xsl:when test="$mode='Video'"> + <directors> + <xsl:for-each select="aws:Director"> + <director> + <xsl:value-of select="."/> + </director> + </xsl:for-each> + </directors> + + <casts> + <!-- special case for french, there might be more actors than aws:Actor elements --> + <xsl:for-each select="aws:Creator[@Role='Acteur']"> + <!-- cast is a 2-column table --> + <cast> + <column> + <xsl:value-of select="."/> + </column> + </cast> + </xsl:for-each> + <!-- assume only add actor if no creators --> + <xsl:if test="not(aws:Creator[@Role='Acteur'])"> + <xsl:for-each select="aws:Actor"> + <!-- cast is a 2-column table --> + <cast> + <column> + <xsl:value-of select="."/> + </column> + </cast> + </xsl:for-each> + </xsl:if> + </casts> + + <year> + <xsl:call-template name="year"> + <xsl:with-param name="value" select="aws:TheatricalReleaseDate"/> + </xsl:call-template> + </year> + + <medium i18n="true"> + <xsl:variable name="medium" select="aws:ProductGroup"/> + <xsl:choose> + <xsl:when test="$medium='Video'"> + <xsl:text>VHS</xsl:text> + </xsl:when> + <xsl:when test="contains(translate($medium,$lcletters,$ucletters),'blu-ray')"> + <xsl:text>Blu-ray</xsl:text> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="$medium"/> + </xsl:otherwise> + </xsl:choose> + </medium> + + <color i18n="true"> + <xsl:choose> + <xsl:when test="aws:Format[.='Black & White']"> + <xsl:text>Black & White</xsl:text> + </xsl:when> + <xsl:otherwise> + <xsl:text>Color</xsl:text> + </xsl:otherwise> + </xsl:choose> + </color> + + <aspect-ratios> + <xsl:for-each select="aws:AspectRatio"> + <aspect-ratio> + <xsl:value-of select="."/> + </aspect-ratio> + </xsl:for-each> + </aspect-ratios> + + <xsl:if test="aws:Format[.='Widescreen']"> + <widescreen> + <xsl:text>true</xsl:text> + </widescreen> + </xsl:if> + + <languages> + <xsl:for-each select="aws:Languages/aws:Language[not(aws:Name=preceding-sibling::aws:Language/aws:Name)]"> + <language> + <xsl:value-of select="aws:Name"/> + </language> + </xsl:for-each> + </languages> + + <audio-tracks> + <xsl:choose> + <xsl:when test="aws:Languages/aws:Language/aws:AudioFormat[starts-with(.,'Dolby')]"> + <audio-track> + <xsl:value-of select="aws:Languages/aws:Language/aws:AudioFormat[starts-with(.,'Dolby')][1]"/> + </audio-track> + </xsl:when> + <xsl:when test="aws:Format[starts-with(.,'Dolby')]"> + <audio-track> + <xsl:value-of select="aws:Format[starts-with(.,'Dolby')][1]"/> + </audio-track> + </xsl:when> + </xsl:choose> + <xsl:if test="aws:Languages/aws:Language/aws:AudioFormat[starts-with(.,'DTS')]"> + <audio-track> + <xsl:value-of select="aws:Languages/aws:Language/aws:AudioFormat[starts-with(.,'DTS')][1]"/> + </audio-track> + </xsl:if> + </audio-tracks> + + <certification i18n="true"> + <xsl:variable name="mpaa" select="aws:AudienceRating"/> + <xsl:choose> + <xsl:when test="starts-with($mpaa, 'PG-13')"> + <xsl:text>PG-13 (USA)</xsl:text> + </xsl:when> + <xsl:when test="starts-with($mpaa, 'PG')"> + <xsl:text>PG (USA)</xsl:text> + </xsl:when> + <xsl:when test="starts-with($mpaa, 'R')"> + <xsl:text>R (USA)</xsl:text> + </xsl:when> + <xsl:when test="starts-with($mpaa, 'G')"> + <xsl:text>G (USA)</xsl:text> + </xsl:when> + <xsl:otherwise> + <xsl:comment> + <xsl:value-of select="$mpaa"/> + </xsl:comment> + </xsl:otherwise> + </xsl:choose> + </certification> + + <studios> + <studio> + <xsl:value-of select="aws:Studio"/> + </studio> + </studios> + + <xsl:if test="aws:RegionCode"> + <region i18n="true"> + <xsl:value-of select="concat('Region ', aws:RegionCode)"/> + </region> + </xsl:if> + + <xsl:if test="aws:RunningTime[@Units='minutes']"> + <running-time> + <xsl:value-of select="aws:RunningTime[@Units='minutes']"/> + </running-time> + </xsl:if> + + </xsl:when> + + <!-- video game collection stuff --> + <xsl:when test="$mode='VideoGames'"> + <publisher> + <xsl:value-of select="aws:Publisher"/> + </publisher> + + <!-- assume year is last four characters of ReleaseDate --> + <year> + <xsl:call-template name="year"> + <xsl:with-param name="value" select="aws:ReleaseDate"/> + </xsl:call-template> + </year> + + <!-- assume that the only time there are multiple platforms is when it's for multiple versions of windows --> + <platform i18n="true"> + <xsl:call-template name="platform"> + <xsl:with-param name="value" select="aws:Platform"/> + </xsl:call-template> + </platform> + + <genres i18n="true"> + <xsl:for-each select="aws:Feature[starts-with(., 'Genre:')]"> + <genre> + <xsl:value-of select="substring(., 7)"/> <!-- ends with a space --> + </genre> + </xsl:for-each> + </genres> + + <certification i18n="true"> + <xsl:choose> + <xsl:when test="aws:ESRBAgeRating = 'Rating Pending'"> + <xsl:text>Pending</xsl:text> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="aws:ESRBAgeRating"/> + </xsl:otherwise> + </xsl:choose> + </certification> + </xsl:when> + </xsl:choose> +</xsl:template> + +<xsl:template name="nodes"> + <xsl:param name="node"/> + + <xsl:variable name="firstNode" select="$node/aws:Name"/> + + <xsl:variable name="tailNodes"> + <xsl:choose> + <xsl:when test="$node/aws:Ancestors/aws:BrowseNode[1]/aws:Name"> + <xsl:call-template name="nodes"> + <xsl:with-param name="node" select="$node/aws:Ancestors/aws:BrowseNode[1]"/> + </xsl:call-template> + </xsl:when> + </xsl:choose> + </xsl:variable> + + <xsl:choose> + <xsl:when test="string-length($firstNode)"> + <xsl:choose> + <xsl:when test="string-length($tailNodes)"> + <xsl:value-of select="concat($tailNodes, '/', $firstNode)"/> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="$firstNode"/> + </xsl:otherwise> + </xsl:choose> + </xsl:when> + <xsl:when test="string-length($tailNodes)"> + <xsl:value-of select="$tailNodes"/> + </xsl:when> + </xsl:choose> +</xsl:template> + +<xsl:template name="year"> + <xsl:param name="value"/> + <xsl:variable name="numbers"> + <xsl:value-of select="translate($value, translate($value, '0123456789', ''), '')"/> + </xsl:variable> + <!-- assume that Amazon always encodes the date with the 4-digit year first --> + <xsl:value-of select="substring($numbers, 0, 5)"/> +</xsl:template> + +<xsl:template name="platform"> + <xsl:param name="value"/> + <xsl:variable name="lcvalue"> + <xsl:value-of select="translate($value, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', + 'abcdefghijklmnopqrstuvwxyz')"/> + </xsl:variable> + <xsl:choose> + <xsl:when test="contains($lcvalue, '360')"> + <xsl:text>Xbox 360</xsl:text> + </xsl:when> + <xsl:when test="starts-with($lcvalue, 'x')"> + <xsl:text>Xbox</xsl:text> <!-- as defined in the default field --> + </xsl:when> + <xsl:when test="contains($lcvalue, 'wii')"> + <xsl:text>Nintendo Wii</xsl:text> <!-- as defined in the default field --> + </xsl:when> + <xsl:when test="$lcvalue = 'sony psp'"> + <xsl:text>PSP</xsl:text> <!-- as defined in the default field --> + </xsl:when> + <xsl:when test="starts-with($lcvalue, 'windows')"> + <xsl:text>Windows</xsl:text> <!-- as defined in the default field --> + </xsl:when> + <xsl:when test="starts-with($lcvalue, 'mac')"> + <xsl:text>Mac OS</xsl:text> <!-- as defined in the default field --> + </xsl:when> + <xsl:when test="$lcvalue = 'sega dreamcast'"> + <xsl:text>Dreamcast</xsl:text> <!-- as defined in the default field --> + </xsl:when> + <xsl:when test="starts-with($lcvalue, 'playstation')"> + <xsl:choose> + <xsl:when test="contains($lcvalue, '3')"> + <xsl:text>PlayStation3</xsl:text> + </xsl:when> + <xsl:when test="contains($lcvalue, '2')"> + <xsl:text>PlayStation2</xsl:text> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="$value"/> + </xsl:otherwise> + </xsl:choose> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="$value"/> + </xsl:otherwise> + </xsl:choose> +</xsl:template> + +</xsl:stylesheet> |