12 May 2006

NCBI Pubmed, RSS feeds & Geotagging

Pubmed Queries can be saved as a RSS feed and today I used this tool to test the rss-to-georss-converter using the following terms: H5N1 AND epidemiology (this might interest Declan Butler...). The Geonames "RSS to GeoRSS Converter" reads the entries of an RSS feed and searches the Geonames Database to find a location for the entry text. If a relevant location is found, its latitude and longitude are added to the RSS feed using the GeoRSS encoding..




(...)
<item>
<title>Outbreak news. Avian influenza, Cambodia.</title>
<link>http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?db=PubMed&amp;list_uids=166
73510
</link>
<description>
(...)Outbreak news. Avian influenza, Cambodia.(...)
Wkly Epidemiol Rec. 2006 Mar 31;81(13):117
</description>
<category>Wkly Epidemiol Rec</category>
<guid isPermaLink="false">PubMed:16673510</guid>
<dc:creator />
<geo:lat>11.55</geo:lat>
<geo:long>104.9166667</geo:long>
</item>
<item>
(...)


ok, what's next ?

Using the following XSLT sheet, the new feed can be transformed into a RIS file and imported and shared into connotea, exported to KML for google earth.

See the result in connotea at : http://www.connotea.org//user/testclient/tag/geotagged/date/2006-05-12


<?xml version='1.0' ?>
<xsl:stylesheet
xmlns:xsl='http://www.w3.org/1999/XSL/Transform'
xmlns:gml="http://www.opengis.net/gml/"
xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/"
xmlns:georss="http://www.georss.org/georss/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#"
xmlns:dc="http://purl.org/dc/elements/1.1/"
version="1.0"
>
<xsl:output method='text'/>



<xsl:template match="/">
<xsl:apply-templates/>
</xsl:template>

<xsl:template match="rss">
<xsl:apply-templates select="channel"/>
</xsl:template>

<xsl:template match="channel">
<xsl:apply-templates select="item"/>
</xsl:template>

<xsl:template match="item">
<xsl:if test="geo:lat and geo:long">

TY - JOUR
TI - <xsl:value-of select="title"/>
<xsl:call-template name="loop">
<xsl:with-param name="s"><xsl:value-of select="normalize-space(/rss/channel/title)"/></xsl:with-param>
</xsl:call-template>
KW - geotagged
KW - geo:lat=<xsl:value-of select="geo:lat"/>
KW - geo:long=<xsl:value-of select="geo:long"/>
UR - <xsl:value-of select="link"/>
ER -
<xsl:text>
</xsl:text>
</xsl:if>
</xsl:template>

<xsl:template name="loop">
<xsl:param name="s"/>
<xsl:choose>
<xsl:when test="contains(normalize-space($s),' ')">
<xsl:variable name="first" select="normalize-space(substring-before($s,' '))" />
<xsl:variable name="remain" select="normalize-space(substring-after($s,' '))" />
<xsl:if test="string-length($first)&gt;0 and $first!=&apos;PubMed:&apos;">
KW - <xsl:value-of select="$first"/>
</xsl:if>
<xsl:if test="string-length($remain)&gt;0">
<xsl:call-template name="loop">
<xsl:with-param name="s"><xsl:value-of select="$remain"/></xsl:with-param>
</xsl:call-template>
</xsl:if>
</xsl:when>
<xsl:otherwise>
<xsl:if test="string-length(normalize-space($s))&gt;0 and $s!=&apos;PubMed:&apos;">
KW - <xsl:value-of select="normalize-space($s)"/>
</xsl:if>
</xsl:otherwise>
</xsl:choose>

</xsl:template>

</xsl:stylesheet>


2 comments:

Anonymous said...

Very interesting ! But it would be nice to have a display online for several users ... How can you get a direct link into google maps instead of google earth ?

Pierre Lindenbaum said...

I requested that feature on connotea.
See http://www.connotea.org/wiki/RequestTagGoogleMap

Pierre