home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / WindowsServerTrial / server.iso / sources / install.wim / 1 / Windows / System32 / msfeeds.dll / HTML / RSS2NORMALIZER.XSL < prev    next >
Extensible Markup Language  |  2008-01-19  |  30KB  |  576 lines

  1. <?xml version="1.0" ?>
  2. <xsl:stylesheet version="1.0" 
  3.   xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
  4.   xmlns:atom="http://www.w3.org/2005/Atom"
  5.   xmlns:dcterms="http://purl.org/dc/terms/"
  6.   xmlns:cf="http://www.microsoft.com/schemas/rss/core/2005"
  7.   xmlns:msfeednorm="urn:microsoft:feed-normalization"
  8.   exclude-result-prefixes="dcterms msfeednorm"
  9.   >
  10.  
  11. <!-- Shared templates -->
  12.   <xsl:import href="res://msfeeds.dll/SharedNormalizer.xsl" />
  13.  
  14. <!-- Output XML UTF-8 -->
  15.   <xsl:output method="xml" encoding="utf-8" />
  16.   
  17. <!-- Figure out the type for RSS 2.0 text fields -->
  18.   <xsl:template name="_GetRSS2TypeValue">
  19.     <xsl:param name="type" />
  20.     <xsl:param name="default" />
  21.     <xsl:choose>
  22.       <xsl:when test="normalize-space($type) = 'html'">html</xsl:when>
  23.       <xsl:when test="normalize-space($type) = 'text'">text</xsl:when>
  24.       <xsl:when test="not(string($type)) or normalize-space($type) = ''"><xsl:value-of select="$default" /></xsl:when>
  25.       <xsl:otherwise>invalid</xsl:otherwise>
  26.       <!-- Note that unknown value for a type will yield empty output -->
  27.     </xsl:choose>
  28.   </xsl:template>
  29.  
  30. <!-- Entry point -->
  31.   <xsl:template match="/rss">
  32.     <rss>
  33.       <!-- Copy all namespaces -->
  34.       <xsl:for-each select="namespace::*"><xsl:copy /></xsl:for-each>
  35.  
  36.       <!-- Ensure version is 2.0 -->
  37.       <xsl:attribute name="version">2.0</xsl:attribute>
  38.  
  39.       <!-- Process channel -->
  40.       <channel>
  41.         <xsl:apply-templates select="channel" />
  42.       </channel>
  43.     </rss>
  44.   </xsl:template>
  45.  
  46. <!-- Channel processing -->
  47.   <xsl:template match="channel">
  48.     <!-- Copy all namespaces -->
  49.     <xsl:for-each select="namespace::*">
  50.       <xsl:copy />
  51.     </xsl:for-each>
  52.  
  53.     <xsl:call-template name="_OutputXmlBase"><xsl:with-param name="value" select="@xml:base" /></xsl:call-template>
  54.     <xsl:call-template name="_OutputXmlLang"><xsl:with-param name="value" select="@xml:lang" /></xsl:call-template>
  55.     <xsl:if test="not(language)">
  56.       <xsl:call-template name="_OutputLanguage"><xsl:with-param name="value" select="@xml:lang" /></xsl:call-template>
  57.     </xsl:if>
  58.  
  59.     <!-- Figure out the base URL value; xml:base overrides the download URL -->
  60.     <xsl:variable name="baseChannelUrl">
  61.       <xsl:call-template name="_GetFeedBaseUrl">
  62.         <xsl:with-param name="downloadUrl" select="$downloadUrl" />
  63.         <xsl:with-param name="rootNode" select="." />
  64.       </xsl:call-template>
  65.     </xsl:variable>
  66.  
  67.     <!-- Build a list of referenced nodes from cf:sort and cf:group -->
  68.     <xsl:variable name="cfReferences">
  69.       <xsl:call-template name="_BuildCfReferenceList"><xsl:with-param name="value" select="." /></xsl:call-template>
  70.     </xsl:variable>
  71.  
  72.     <!-- Process channel elements -->
  73.     <xsl:apply-templates select="*" mode="channel">
  74.       <xsl:with-param name="baseChannelUrl" select="$baseChannelUrl" />
  75.     </xsl:apply-templates>
  76.  
  77.     <!-- Process items -->
  78.     <xsl:apply-templates select="item">
  79.       <xsl:with-param name="baseChannelUrl" select="$baseChannelUrl" />
  80.       <xsl:with-param name="references" select="$cfReferences" />
  81.     </xsl:apply-templates>
  82.   </xsl:template>
  83.  
  84.   <xsl:template match="*" mode="channel">
  85.     <xsl:param name="baseChannelUrl" />
  86.     <xsl:variable name="isFirst">
  87.       <xsl:call-template name="_IsFirstChildOfItsKind"><xsl:with-param name="value" select="." /></xsl:call-template>
  88.     </xsl:variable>
  89.     <xsl:choose>
  90.       <xsl:when test="namespace-uri(.) = '' and local-name(.) = 'title' and $isFirst = 'true'">
  91.         <xsl:variable name="type">
  92.           <xsl:call-template name="_GetRSS2TypeValue">
  93.             <xsl:with-param name="type" select="@cf:type" />
  94.             <xsl:with-param name="default" select="'text'" />
  95.           </xsl:call-template>
  96.         </xsl:variable>
  97.         <xsl:call-template name="_OutputTitle">
  98.           <xsl:with-param name="value" select="." />
  99.           <xsl:with-param name="type" select="$type" />
  100.         </xsl:call-template>
  101.       </xsl:when>
  102.       <xsl:when test="namespace-uri(.) = '' and local-name(.) = 'link' and $isFirst = 'true'">
  103.         <xsl:variable name="linkUrl">
  104.           <xsl:call-template name="_CompleteUrl">
  105.             <xsl:with-param name="baseUrl" select="$baseChannelUrl" />
  106.             <xsl:with-param name="Url" select="." />
  107.           </xsl:call-template>
  108.         </xsl:variable>
  109.         <xsl:call-template name="_OutputLink"><xsl:with-param name="value" select="$linkUrl" /></xsl:call-template>
  110.       </xsl:when>
  111.       <xsl:when test="namespace-uri(.) = '' and local-name(.) = 'description' and $isFirst = 'true'">
  112.         <xsl:variable name="type">
  113.           <xsl:call-template name="_GetRSS2TypeValue">
  114.             <xsl:with-param name="type" select="@cf:type" />
  115.             <xsl:with-param name="default" select="'text'" />
  116.           </xsl:call-template>
  117.         </xsl:variable>
  118.         <xsl:call-template name="_OutputTextDescription">
  119.           <xsl:with-param name="value" select="." />
  120.           <xsl:with-param name="type" select="$type" />
  121.         </xsl:call-template>
  122.       </xsl:when>
  123.       <xsl:when test="namespace-uri(.) = '' and local-name(.) = 'pubDate' and $isFirst = 'true'">
  124.         <xsl:call-template name="_OutputPubDate"><xsl:with-param name="value" select="." /></xsl:call-template>
  125.         <xsl:if test="not(../lastBuildDate)">
  126.           <xsl:call-template name="_OutputLastBuildDate"><xsl:with-param name="value" select="." /></xsl:call-template>
  127.           <xsl:if test="not(../atom:updated)">
  128.             <xsl:call-template name="_OutputAtomUpdated"><xsl:with-param name="value" select="." /></xsl:call-template>
  129.           </xsl:if>
  130.         </xsl:if>
  131.       </xsl:when>
  132.       <xsl:when test="namespace-uri(.) = $_NSatom1 and local-name(.) = 'published'">
  133.  
  134.       </xsl:when>
  135.       <xsl:when test="namespace-uri(.) = $_NSatom1 and local-name(.) = 'updated'">
  136.         <xsl:if test="$isFirst = 'true'">
  137.           <xsl:call-template name="_OutputAtomUpdated"><xsl:with-param name="value" select="." /></xsl:call-template>
  138.           <xsl:if test="not(../pubDate) and not(../lastBuildDate)">
  139.             <xsl:call-template name="_OutputLastBuildDate"><xsl:with-param name="value" select="." /></xsl:call-template>
  140.           </xsl:if>
  141.         </xsl:if>  
  142.       </xsl:when>
  143.       <xsl:when test="namespace-uri(.) = '' and local-name(.) = 'language' and $isFirst = 'true'">
  144.         <xsl:call-template name="_OutputLanguage"><xsl:with-param name="value" select="." /></xsl:call-template>
  145.       </xsl:when>
  146.       <xsl:when test="namespace-uri(.) = '' and local-name(.) = 'copyright' and $isFirst = 'true'">
  147.         <xsl:variable name="type">
  148.           <xsl:call-template name="_GetRSS2TypeValue">
  149.             <xsl:with-param name="type" select="@cf:type" />
  150.             <xsl:with-param name="default" select="'text'" />
  151.           </xsl:call-template>
  152.         </xsl:variable>
  153.         <xsl:call-template name="_OutputCopyright">
  154.           <xsl:with-param name="value" select="." />
  155.           <xsl:with-param name="type" select="$type" />
  156.         </xsl:call-template>
  157.       </xsl:when>
  158.       <xsl:when test="namespace-uri(.) = '' and local-name(.) = 'lastBuildDate' and $isFirst = 'true'">
  159.         <xsl:call-template name="_OutputLastBuildDate"><xsl:with-param name="value" select="." /></xsl:call-template>
  160.         <xsl:if test="not(../atom:updated)">
  161.           <xsl:call-template name="_OutputAtomUpdated"><xsl:with-param name="value" select="." /></xsl:call-template>
  162.         </xsl:if>
  163.       </xsl:when>
  164.       <xsl:when test="namespace-uri(.) = '' and local-name(.) = 'managingEditor' and $isFirst = 'true'">
  165.         <xsl:variable name="convertToAtom">
  166.           <xsl:choose>
  167.             <xsl:when test="../atom:author">false</xsl:when>
  168.             <xsl:otherwise>true</xsl:otherwise>
  169.           </xsl:choose>
  170.         </xsl:variable>
  171.         <xsl:call-template name="_OutputManagingEditor">
  172.           <xsl:with-param name="value" select="." />
  173.           <xsl:with-param name="convertToAtom" select="$convertToAtom" />
  174.         </xsl:call-template>
  175.       </xsl:when>
  176.       <xsl:when test="namespace-uri(.) = '' and local-name(.) = 'webMaster' and $isFirst = 'true'">
  177.         <xsl:call-template name="_OutputWebMaster"><xsl:with-param name="value" select="." /></xsl:call-template>
  178.       </xsl:when>
  179.       <xsl:when test="namespace-uri(.) = '' and local-name(.) = 'category'">
  180.         <xsl:call-template name="_OutputCategory">
  181.           <xsl:with-param name="value" select="." />
  182.           <xsl:with-param name="domain" select="@domain" />
  183.         </xsl:call-template>
  184.       </xsl:when>
  185.       <xsl:when test="namespace-uri(.) = '' and local-name(.) = 'generator' and $isFirst = 'true'">
  186.         <xsl:call-template name="_OutputGenerator">
  187.           <xsl:with-param name="value" select="." />
  188.           <xsl:with-param name="uri" select="@cf:uri" />
  189.           <xsl:with-param name="version" select="@cf:version" />
  190.         </xsl:call-template>
  191.       </xsl:when>
  192.       <xsl:when test="namespace-uri(.) = '' and local-name(.) = 'docs' and $isFirst = 'true'">
  193.         <xsl:call-template name="_OutputDocs"><xsl:with-param name="value" select="." /></xsl:call-template>
  194.       </xsl:when>
  195.       <xsl:when test="namespace-uri(.) = '' and local-name(.) = 'cloud' and $isFirst = 'true'">
  196.         <xsl:call-template name="_OutputCloud"><xsl:with-param name="value" select="." /></xsl:call-template>
  197.       </xsl:when>
  198.       <xsl:when test="namespace-uri(.) = '' and local-name(.) = 'ttl' and $isFirst = 'true'">
  199.         <xsl:call-template name="_OutputTtl"><xsl:with-param name="value" select="." /></xsl:call-template>
  200.       </xsl:when>
  201.       <xsl:when test="namespace-uri(.) = '' and local-name(.) = 'image' and $isFirst = 'true'">
  202.         <xsl:variable name="imageUrl">
  203.           <xsl:call-template name="_CompleteUrl">
  204.             <xsl:with-param name="baseUrl" select="$baseChannelUrl" />
  205.             <xsl:with-param name="Url" select="url" />
  206.           </xsl:call-template>
  207.         </xsl:variable>
  208.         <xsl:variable name="imageLink">
  209.           <xsl:call-template name="_CompleteUrl">
  210.             <xsl:with-param name="baseUrl" select="$baseChannelUrl" />
  211.             <xsl:with-param name="Url" select="link" />
  212.           </xsl:call-template>
  213.         </xsl:variable>
  214.         <xsl:call-template name="_OutputImage">
  215.           <xsl:with-param name="url" select="$imageUrl" />
  216.           <xsl:with-param name="title" select="title" />
  217.           <xsl:with-param name="link" select="$imageLink" />
  218.           <xsl:with-param name="width" select="width" />
  219.           <xsl:with-param name="height" select="height" />
  220.           <xsl:with-param name="description" select="description" />
  221.         </xsl:call-template>
  222.       </xsl:when>
  223.       <xsl:when test="namespace-uri(.) = '' and local-name(.) = 'rating' and $isFirst = 'true'">
  224.         <xsl:call-template name="_OutputRating"><xsl:with-param name="value" select="." /></xsl:call-template>
  225.       </xsl:when>
  226.       <xsl:when test="namespace-uri(.) = '' and local-name(.) = 'textInput' and $isFirst = 'true'">
  227.         <xsl:call-template name="_OutputTextInput">
  228.           <xsl:with-param name="title" select="title" />
  229.           <xsl:with-param name="name" select="name" />
  230.           <xsl:with-param name="link" select="link" />
  231.           <xsl:with-param name="description" select="description" />
  232.         </xsl:call-template>
  233.       </xsl:when>
  234.       <xsl:when test="namespace-uri(.) = '' and local-name(.) = 'skipHours' and $isFirst = 'true'">
  235.         <xsl:call-template name="_OutputSkipHours"><xsl:with-param name="value" select="." /></xsl:call-template>
  236.       </xsl:when>
  237.       <xsl:when test="namespace-uri(.) = '' and local-name(.) = 'skipDays' and $isFirst = 'true'">
  238.         <xsl:call-template name="_OutputSkipDays"><xsl:with-param name="value" select="." /></xsl:call-template>
  239.       </xsl:when>
  240.       <xsl:when test="namespace-uri(.) = $_NSatom1 and local-name(.) = 'link'">
  241.         <xsl:call-template name="_OutputAtomLink">
  242.           <xsl:with-param name="href" select="@href" />
  243.           <xsl:with-param name="rel" select="@rel" />
  244.           <xsl:with-param name="type" select="@type" />
  245.           <xsl:with-param name="title" select="@title" />
  246.           <xsl:with-param name="hreflang" select="@hreflang" />
  247.           <xsl:with-param name="length" select="@length" />
  248.           <xsl:with-param name="xmlBase" select="@xml:base" />
  249.         </xsl:call-template>
  250.       </xsl:when>
  251.       <xsl:when test="namespace-uri(.) = $_NSatom1 and local-name(.) = 'author'">
  252.         <xsl:if test="$isFirst = 'true'">
  253.           <xsl:call-template name="_OutputAtomAuthor">
  254.             <xsl:with-param name="name" select="atom:name" />
  255.             <xsl:with-param name="email" select="atom:email" />
  256.             <xsl:with-param name="uri" select="atom:uri" />
  257.           </xsl:call-template>
  258.         </xsl:if>
  259.       </xsl:when>
  260.       <xsl:when test="namespace-uri(.) = $_NSatom1 and local-name(.) = 'contributor'">
  261.           <xsl:call-template name="_OutputAtomContributor">
  262.             <xsl:with-param name="name" select="atom:name" />
  263.             <xsl:with-param name="email" select="atom:email" />
  264.             <xsl:with-param name="uri" select="atom:uri" />
  265.           </xsl:call-template>
  266.       </xsl:when>
  267.       <xsl:when test="namespace-uri(.) = $_NScf and local-name(.) = 'treatAs'">
  268.         <xsl:if test="$isFirst = 'true'">
  269.           <xsl:call-template name="_OutputCfTreatAs"><xsl:with-param name="value" select="." /></xsl:call-template>
  270.         </xsl:if>
  271.       </xsl:when>
  272.       <xsl:when test="namespace-uri(.) = $_NScf and local-name(.) = 'listinfo'">
  273.         <xsl:if test="$isFirst = 'true'">
  274.           <xsl:call-template name="_OutputCfListinfo"><xsl:with-param name="value" select="." /></xsl:call-template>
  275.         </xsl:if>
  276.       </xsl:when>
  277.       <xsl:when test="namespace-uri(.) = '' and local-name(.) = 'item'">
  278.         <!-- Do nothing here for items -->
  279.       </xsl:when>
  280.       <!-- Copy extension nodes -->
  281.       <xsl:when test="namespace-uri(.) != ''">
  282.         <xsl:call-template name="_OutputExtension"><xsl:with-param name="value" select="." /></xsl:call-template>
  283.       </xsl:when>
  284.     </xsl:choose>
  285.   </xsl:template>
  286.  
  287. <!-- Item processing -->
  288.   <xsl:template match="item">
  289.     <xsl:param name="baseChannelUrl" />
  290.     <xsl:param name="references" />
  291.     <item>
  292.       <!-- Copy all namespaces -->
  293.       <xsl:for-each select="namespace::*">
  294.         <xsl:copy />
  295.       </xsl:for-each>
  296.  
  297.       <xsl:call-template name="_OutputXmlBase"><xsl:with-param name="value" select="@xml:base" /></xsl:call-template>
  298.       <xsl:call-template name="_OutputXmlLang"><xsl:with-param name="value" select="@xml:lang" /></xsl:call-template>
  299.  
  300.       <!-- Item's base URL stacks onto channel's base URL -->
  301.       <xsl:variable name="baseChannelItemUrl">
  302.         <xsl:call-template name="_CombineUrls">
  303.           <xsl:with-param name="baseUrl" select="$baseChannelUrl" />
  304.           <xsl:with-param name="relUrl" select="@xml:base" />
  305.         </xsl:call-template>
  306.       </xsl:variable>
  307.  
  308.       <!-- Process item elements -->
  309.       <xsl:apply-templates select="*" mode="item">
  310.         <xsl:with-param name="baseItemUrl" select="$baseChannelItemUrl" />
  311.         <xsl:with-param name="references" select="$references" />
  312.       </xsl:apply-templates>
  313.     </item>
  314.   </xsl:template>
  315.  
  316.   <xsl:template match="*" mode="item">
  317.     <xsl:param name="baseItemUrl" />
  318.     <xsl:param name="references" />
  319.     <xsl:variable name="isFirst">
  320.       <xsl:call-template name="_IsFirstChildOfItsKind"><xsl:with-param name="value" select="." /></xsl:call-template>
  321.     </xsl:variable>
  322.     <xsl:choose>
  323.       <xsl:when test="namespace-uri(.) = '' and local-name(.) = 'title' and $isFirst = 'true'">
  324.         <xsl:variable name="type">
  325.           <xsl:call-template name="_GetRSS2TypeValue">
  326.             <xsl:with-param name="type" select="@cf:type" />
  327.             <xsl:with-param name="default" select="'text'" />
  328.           </xsl:call-template>
  329.         </xsl:variable>
  330.         <xsl:call-template name="_OutputTitle">
  331.           <xsl:with-param name="value" select="." />
  332.           <xsl:with-param name="type" select="$type" />
  333.         </xsl:call-template>
  334.       </xsl:when>
  335.       <xsl:when test="namespace-uri(.) = '' and local-name(.) = 'link' and $isFirst = 'true'">
  336.         <xsl:variable name="linkUrl">
  337.           <xsl:call-template name="_CompleteUrl">
  338.             <xsl:with-param name="baseUrl" select="$baseItemUrl" />
  339.             <xsl:with-param name="Url" select="." />
  340.           </xsl:call-template>
  341.         </xsl:variable>
  342.         <xsl:call-template name="_OutputLink"><xsl:with-param name="value" select="$linkUrl" /></xsl:call-template>
  343.       </xsl:when>
  344.       <xsl:when test="(namespace-uri(.) = '' and local-name(.) = 'author') or (namespace-uri(.) = $_NSdc and local-name(.) = 'creator')">
  345.         <xsl:variable name="convertToAtom">
  346.           <xsl:choose>
  347.             <xsl:when test="../atom:author">false</xsl:when>
  348.             <xsl:otherwise>true</xsl:otherwise>
  349.           </xsl:choose>
  350.         </xsl:variable>
  351.         <xsl:call-template name="_OutputAuthor">
  352.           <xsl:with-param name="value" select="." />
  353.           <xsl:with-param name="convertToAtom" select="$convertToAtom" />
  354.         </xsl:call-template>
  355.       </xsl:when>
  356.       <xsl:when test="namespace-uri(.) = $_NSatom1 and local-name(.) = 'contributor'">
  357.         <xsl:call-template name="_OutputAtomContributor">
  358.           <xsl:with-param name="name" select="atom:name" />
  359.           <xsl:with-param name="email" select="atom:email" />
  360.           <xsl:with-param name="uri" select="atom:uri" />
  361.         </xsl:call-template>
  362.       </xsl:when>
  363.       <xsl:when test="namespace-uri(.) = '' and local-name(.) = 'category'">
  364.         <xsl:call-template name="_OutputCategory">
  365.           <xsl:with-param name="value" select="." />
  366.           <xsl:with-param name="domain" select="@domain" />
  367.         </xsl:call-template>
  368.       </xsl:when>
  369.       <xsl:when test="namespace-uri(.) = '' and local-name(.) = 'comments' and $isFirst = 'true'">
  370.         <xsl:variable name="commentUrl">
  371.           <xsl:call-template name="_CompleteUrl">
  372.             <xsl:with-param name="baseUrl" select="$baseItemUrl" />
  373.             <xsl:with-param name="Url" select="." />
  374.           </xsl:call-template>
  375.         </xsl:variable>
  376.         <xsl:call-template name="_OutputComments"><xsl:with-param name="value" select="$commentUrl" /></xsl:call-template>
  377.       </xsl:when>
  378.       <xsl:when test="namespace-uri(.) = '' and local-name(.) = 'enclosure'">
  379.         <xsl:variable name="enclosureUrl">
  380.           <xsl:call-template name="_CompleteUrl">
  381.             <xsl:with-param name="baseUrl" select="$baseItemUrl" />
  382.             <xsl:with-param name="Url" select="@url" />
  383.           </xsl:call-template>
  384.         </xsl:variable>
  385.         <xsl:call-template name="_OutputEnclosure">
  386.           <xsl:with-param name="url" select="$enclosureUrl" />
  387.           <xsl:with-param name="length" select="@length" />
  388.           <xsl:with-param name="type" select="@type" />
  389.         </xsl:call-template>
  390.       </xsl:when>
  391.       <xsl:when test="namespace-uri(.) = '' and local-name(.) = 'guid' and $isFirst = 'true'">
  392.         <xsl:choose>
  393.           <xsl:when test="normalize-space(@isPermaLink) = 'true' or not(string(@isPermaLink))">
  394.             <xsl:variable name="linkUrl">
  395.               <xsl:call-template name="_CompleteUrl">
  396.                 <xsl:with-param name="baseUrl" select="$baseItemUrl" />
  397.                 <xsl:with-param name="Url" select="." />
  398.               </xsl:call-template>
  399.             </xsl:variable>
  400.             <xsl:call-template name="_OutputGuid">
  401.               <xsl:with-param name="value" select="$linkUrl" />
  402.               <xsl:with-param name="isPermaLink" select="@isPermaLink" />
  403.             </xsl:call-template>
  404.             <!-- If there is no link we'll use permalink guid instead -->
  405.             <xsl:if test="not(../link)">
  406.               <xsl:call-template name="_OutputLink"><xsl:with-param name="value" select="$linkUrl" /></xsl:call-template>
  407.             </xsl:if>
  408.           </xsl:when>
  409.           <xsl:otherwise>
  410.             <xsl:call-template name="_OutputGuid">
  411.               <xsl:with-param name="value" select="." />
  412.               <xsl:with-param name="isPermaLink" select="@isPermaLink" />
  413.             </xsl:call-template>
  414.           </xsl:otherwise>
  415.         </xsl:choose>
  416.       </xsl:when>
  417.       <xsl:when test="namespace-uri(.) = '' and local-name(.) = 'pubDate' and $isFirst = 'true'">
  418.         <xsl:call-template name="_OutputPubDate"><xsl:with-param name="value" select="." /></xsl:call-template>
  419.         <xsl:if test="not(../atom:published)">
  420.           <xsl:call-template name="_OutputAtomPublished"><xsl:with-param name="value" select="." /></xsl:call-template>
  421.         </xsl:if>
  422.         <xsl:if test="not(../atom:updated) and not(../dcterms:modified)">
  423.           <xsl:call-template name="_OutputAtomUpdated"><xsl:with-param name="value" select="." /></xsl:call-template>
  424.         </xsl:if>
  425.       </xsl:when>
  426.       <xsl:when test="namespace-uri(.) = $_NSdc and local-name(.) = 'date'">
  427.         <xsl:if test="$isFirst = 'true' and not(../pubDate) and not(../dcterms:modified) and not(../atom:updated)">
  428.           <xsl:call-template name="_OutputAtomUpdated"><xsl:with-param name="value" select="." /></xsl:call-template>
  429.         </xsl:if>
  430.       </xsl:when>
  431.       <xsl:when test="namespace-uri(.) = $_NSdcterms and local-name(.) = 'modified'">
  432.         <xsl:if test="$isFirst = 'true' and not(../atom:updated)">
  433.           <xsl:call-template name="_OutputAtomUpdated"><xsl:with-param name="value" select="." /></xsl:call-template>
  434.         </xsl:if>  
  435.       </xsl:when>
  436.       <xsl:when test="namespace-uri(.) = $_NSatom1 and local-name(.) = 'updated'">
  437.         <xsl:if test="$isFirst = 'true'">
  438.           <xsl:call-template name="_OutputAtomUpdated"><xsl:with-param name="value" select="." /></xsl:call-template>
  439.         </xsl:if>  
  440.       </xsl:when>
  441.       <xsl:when test="namespace-uri(.) = $_NSatom1 and local-name(.) = 'published'">
  442.         <xsl:if test="$isFirst = 'true'">
  443.           <xsl:call-template name="_OutputAtomPublished"><xsl:with-param name="value" select="." /></xsl:call-template>
  444.           <xsl:if test="not(../pubDate)">
  445.             <xsl:call-template name="_OutputPubDate"><xsl:with-param name="value" select="." /></xsl:call-template>
  446.           </xsl:if>
  447.         </xsl:if>  
  448.       </xsl:when>
  449.       <xsl:when test="namespace-uri(.) = '' and local-name(.) = 'source' and $isFirst = 'true'">
  450.         <xsl:variable name="srcUrl">
  451.           <xsl:call-template name="_CompleteUrl">
  452.             <xsl:with-param name="baseUrl" select="$baseItemUrl" />
  453.             <xsl:with-param name="Url" select="@url" />
  454.           </xsl:call-template>
  455.         </xsl:variable>
  456.         <xsl:call-template name="_OutputSource">
  457.           <xsl:with-param name="value" select="." />
  458.           <xsl:with-param name="url" select="$srcUrl" />
  459.         </xsl:call-template>
  460.       </xsl:when>
  461.       <!-- content:encoded takes precedence over the description -->
  462.       <xsl:when test="namespace-uri(.) = $_NScontent and local-name(.) = 'encoded'">
  463.         <xsl:if test="$isFirst = 'true'">
  464.           <xsl:variable name="summType">
  465.             <xsl:call-template name="_GetRSS2TypeValue">
  466.               <xsl:with-param name="type" select="../description/@cf:type" />
  467.               <xsl:with-param name="default" select="'html'" />
  468.             </xsl:call-template>
  469.           </xsl:variable>
  470.           <xsl:variable name="baseDescUrl">
  471.             <xsl:call-template name="_CombineUrls">
  472.               <xsl:with-param name="baseUrl" select="$baseItemUrl" />
  473.               <xsl:with-param name="relUrl" select="@xml:base" />
  474.             </xsl:call-template>
  475.           </xsl:variable>
  476.           <xsl:variable name="baseSummUrl">
  477.             <xsl:call-template name="_CombineUrls">
  478.               <xsl:with-param name="baseUrl" select="$baseItemUrl" />
  479.               <xsl:with-param name="relUrl" select="../description/@xml:base" />
  480.             </xsl:call-template>
  481.           </xsl:variable>
  482.           <xsl:call-template name="_OutputDescriptionAndSummary">
  483.             <xsl:with-param name="description" select="." />
  484.             <xsl:with-param name="descriptionType" select="'html'" />
  485.             <xsl:with-param name="descriptionBaseUrl" select="$baseDescUrl" />
  486.             <xsl:with-param name="summary" select="../description" />
  487.             <xsl:with-param name="summaryType" select="$summType" />
  488.             <xsl:with-param name="summaryXmlBase" select="../description/@xml:base" />
  489.             <xsl:with-param name="summaryBaseUrl" select="$baseSummUrl" />
  490.           </xsl:call-template>
  491.         </xsl:if>
  492.       </xsl:when>
  493.       <!-- description will be used if there is no content:encoded -->
  494.       <xsl:when test="namespace-uri(.) = '' and local-name(.) = 'description' and $isFirst = 'true'">
  495.         <xsl:if test="not(../*[namespace-uri(.) = $_NScontent and local-name(.) = 'encoded'])">
  496.           <xsl:variable name="type">
  497.             <xsl:call-template name="_GetRSS2TypeValue">
  498.               <xsl:with-param name="type" select="@cf:type" />
  499.               <xsl:with-param name="default" select="'html'" />
  500.             </xsl:call-template>
  501.           </xsl:variable>
  502.           <xsl:variable name="baseDescUrl">
  503.             <xsl:call-template name="_CombineUrls">
  504.               <xsl:with-param name="baseUrl" select="$baseItemUrl" />
  505.               <xsl:with-param name="relUrl" select="@xml:base" />
  506.             </xsl:call-template>
  507.           </xsl:variable>
  508.           <xsl:call-template name="_OutputDescription">
  509.             <xsl:with-param name="value" select="." />
  510.             <xsl:with-param name="type" select="$type" />
  511.             <xsl:with-param name="baseUrl" select="$baseDescUrl" />
  512.           </xsl:call-template>
  513.         </xsl:if>
  514.       </xsl:when>
  515.       <!-- atom:summary will be preserved unless both content:encoded and description are present -->
  516.       <xsl:when test="namespace-uri(.) = $_NSatom1 and local-name(.) = 'summary'">
  517.         <xsl:if test="$isFirst = 'true' and not(../description and ../*[namespace-uri(.) = $_NScontent and local-name(.) = 'encoded'])">
  518.           <xsl:variable name="baseSummUrl">
  519.             <xsl:call-template name="_CombineUrls">
  520.               <xsl:with-param name="baseUrl" select="$baseItemUrl" />
  521.               <xsl:with-param name="relUrl" select="@xml:base" />
  522.             </xsl:call-template>
  523.           </xsl:variable>
  524.           <xsl:call-template name="_OutputAtomSummary">
  525.             <xsl:with-param name="value" select="." />
  526.             <xsl:with-param name="type" select="@type" />
  527.             <xsl:with-param name="xmlBase" select="@xml:base" />
  528.             <xsl:with-param name="baseUrl" select="$baseSummUrl" />
  529.           </xsl:call-template>
  530.         </xsl:if>
  531.       </xsl:when>
  532.       <xsl:when test="namespace-uri(.) = $_NSatom1 and local-name(.) = 'link'">
  533.         <xsl:call-template name="_OutputAtomLink">
  534.           <xsl:with-param name="href" select="@href" />
  535.           <xsl:with-param name="rel" select="@rel" />
  536.           <xsl:with-param name="type" select="@type" />
  537.           <xsl:with-param name="title" select="@title" />
  538.           <xsl:with-param name="hreflang" select="@hreflang" />
  539.           <xsl:with-param name="length" select="@length" />
  540.           <xsl:with-param name="xmlBase" select="@xml:base" />
  541.         </xsl:call-template>
  542.       </xsl:when>
  543.       <xsl:when test="namespace-uri(.) = $_NSatom1 and local-name(.) = 'author'">
  544.         <xsl:call-template name="_OutputAtomAuthor">
  545.           <xsl:with-param name="name" select="atom:name" />
  546.           <xsl:with-param name="email" select="atom:email" />
  547.           <xsl:with-param name="uri" select="atom:uri" />
  548.         </xsl:call-template>
  549.       </xsl:when>
  550.       <xsl:when test="namespace-uri(.) = $_NSslash and local-name(.) = 'comments'">
  551.         <xsl:if test="$isFirst = 'true'">
  552.           <xsl:call-template name="_OutputSlashComments"><xsl:with-param name="value" select="." /></xsl:call-template>
  553.         </xsl:if>
  554.       </xsl:when>
  555.       <xsl:when test="namespace-uri(.) = $_NSwfw and (local-name(.) = 'commentRss' or local-name(.) = 'commentRSS')">
  556.         <xsl:if test="$isFirst = 'true'">
  557.           <xsl:variable name="commentRssUrl">
  558.             <xsl:call-template name="_CompleteUrl">
  559.               <xsl:with-param name="baseUrl" select="$baseItemUrl" />
  560.               <xsl:with-param name="Url" select="." />
  561.             </xsl:call-template>
  562.           </xsl:variable>
  563.           <xsl:call-template name="_OutputWfwCommentRSS"><xsl:with-param name="value" select="$commentRssUrl" /></xsl:call-template>
  564.         </xsl:if>
  565.       </xsl:when>
  566.       <!-- Copy extension nodes -->
  567.       <xsl:when test="namespace-uri(.) != ''">
  568.         <xsl:call-template name="_OutputExtension">
  569.           <xsl:with-param name="value" select="." />
  570.           <xsl:with-param name="references" select="$references" />
  571.         </xsl:call-template>
  572.       </xsl:when>
  573.     </xsl:choose>
  574.   </xsl:template>
  575.  
  576. </xsl:stylesheet>