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 / RSS1NORMALIZER.XSL < prev    next >
Extensible Markup Language  |  2008-01-19  |  17KB  |  339 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:cf="http://www.microsoft.com/schemas/rss/core/2005"
  6.   xmlns:content="http://purl.org/rss/1.0/modules/content/"
  7.   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  8.   xmlns:rss="http://purl.org/rss/1.0/"
  9.   xmlns:dc="http://purl.org/dc/elements/1.1/"
  10.   xmlns:dcterms="http://purl.org/dc/terms/"
  11.   xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
  12.   xmlns:msfeednorm="urn:microsoft:feed-normalization" 
  13.   exclude-result-prefixes="content rdf rss dc dcterms sy msfeednorm"
  14.   >
  15.  
  16. <!-- Shared templates -->
  17.   <xsl:import href="res://msfeeds.dll/SharedNormalizer.xsl" />
  18.  
  19. <!-- Output XML UTF-8 -->
  20.   <xsl:output method="xml" encoding="utf-8" />
  21.  
  22. <!-- Entry point -->
  23.   <xsl:template match="/rdf:RDF">
  24.     <rss version="2.0">
  25.       <channel>
  26.         <!-- Build a list of referenced nodes from cf:sort and cf:group -->
  27.         <xsl:variable name="cfReferences">
  28.           <xsl:call-template name="_BuildCfReferenceList"><xsl:with-param name="value" select="rss:channel" /></xsl:call-template>
  29.         </xsl:variable>
  30.  
  31.         <!-- Process feed elements -->
  32.         <xsl:apply-templates select="rss:channel" />
  33.         <xsl:apply-templates select="rss:image" />
  34.         <xsl:apply-templates select="rss:textinput" />
  35.         <xsl:apply-templates select="rss:item">
  36.           <xsl:with-param name="references" select="$cfReferences" />
  37.         </xsl:apply-templates>
  38.       </channel>
  39.     </rss>
  40.   </xsl:template>
  41.  
  42. <!-- Channel processing -->
  43.   <xsl:template match="rss:channel">
  44.     <xsl:apply-templates select="*" mode="channel" />
  45.   </xsl:template>
  46.  
  47.   <xsl:template match="*" mode="channel">
  48.     <xsl:variable name="isFirst">
  49.       <xsl:call-template name="_IsFirstChildOfItsKind"><xsl:with-param name="value" select="." /></xsl:call-template>
  50.     </xsl:variable>
  51.     <xsl:choose>
  52.       <xsl:when test="namespace-uri(.) = $_NSrss and local-name(.) = 'title' and $isFirst = 'true'">
  53.         <xsl:call-template name="_OutputTitle"><xsl:with-param name="value" select="." /></xsl:call-template>
  54.       </xsl:when>
  55.       <xsl:when test="namespace-uri(.) = $_NSrss and local-name(.) = 'link' and $isFirst = 'true'">
  56.         <xsl:variable name="linkUrl">
  57.           <xsl:call-template name="_CompleteUrl">
  58.             <xsl:with-param name="baseUrl" select="$downloadUrl" />
  59.             <xsl:with-param name="Url" select="." />
  60.           </xsl:call-template>
  61.         </xsl:variable>
  62.         <xsl:call-template name="_OutputLink"><xsl:with-param name="value" select="$linkUrl" /></xsl:call-template>
  63.       </xsl:when>
  64.       <xsl:when test="namespace-uri(.) = $_NSrss and local-name(.) = 'description' and $isFirst = 'true'">
  65.         <xsl:call-template name="_OutputTextDescription"><xsl:with-param name="value" select="." /></xsl:call-template>
  66.       </xsl:when>
  67.       <xsl:when test="namespace-uri(.) = $_NSdc and local-name(.) = 'creator'">
  68.         <xsl:if test="$isFirst = 'true'">
  69.           <xsl:call-template name="_OutputManagingEditor">
  70.             <xsl:with-param name="value" select="." />
  71.             <xsl:with-param name="convertToAtom" select="'true'" />
  72.           </xsl:call-template>
  73.         </xsl:if>
  74.       </xsl:when>
  75.       <xsl:when test="namespace-uri(.) = $_NSdc and local-name(.) = 'subject'">
  76.         <xsl:call-template name="_OutputCategory"><xsl:with-param name="value" select="." /></xsl:call-template>
  77.       </xsl:when>
  78.       <xsl:when test="namespace-uri(.) = $_NSdc and local-name(.) = 'publisher'">
  79.         <xsl:if test="$isFirst = 'true'">
  80.           <xsl:call-template name="_OutputWebMaster"><xsl:with-param name="value" select="." /></xsl:call-template>
  81.         </xsl:if>
  82.       </xsl:when>
  83.       <xsl:when test="namespace-uri(.) = $_NSdc and local-name(.) = 'language'">
  84.         <xsl:if test="$isFirst = 'true'">
  85.           <xsl:call-template name="_OutputLanguage"><xsl:with-param name="value" select="." /></xsl:call-template>
  86.         </xsl:if>
  87.       </xsl:when>
  88.       <xsl:when test="namespace-uri(.) = $_NSdc and local-name(.) = 'rights'">
  89.         <xsl:if test="$isFirst = 'true'">
  90.           <xsl:call-template name="_OutputCopyright"><xsl:with-param name="value" select="." /></xsl:call-template>
  91.         </xsl:if>
  92.       </xsl:when>
  93.       <xsl:when test="namespace-uri(.) = $_NSdcterms and local-name(.) = 'modified'">
  94.         <xsl:if test="$isFirst = 'true'">
  95.           <xsl:call-template name="_OutputLastBuildDate"><xsl:with-param name="value" select="." /></xsl:call-template>
  96.           <xsl:if test="not(../atom:updated)">
  97.             <xsl:call-template name="_OutputAtomUpdated"><xsl:with-param name="value" select="." /></xsl:call-template>
  98.           </xsl:if>
  99.         </xsl:if>
  100.       </xsl:when>
  101.       <xsl:when test="namespace-uri(.) = $_NSdc and local-name(.) = 'date'">
  102.         <xsl:if test="$isFirst = 'true'">
  103.           <xsl:call-template name="_OutputPubDate"><xsl:with-param name="value" select="." /></xsl:call-template>
  104.           <xsl:if test="not(../dcterms:modified)">
  105.             <xsl:call-template name="_OutputLastBuildDate"><xsl:with-param name="value" select="." /></xsl:call-template>
  106.             <xsl:if test="not(../atom:updated)">
  107.               <xsl:call-template name="_OutputAtomUpdated"><xsl:with-param name="value" select="." /></xsl:call-template>
  108.             </xsl:if>
  109.           </xsl:if>
  110.         </xsl:if>
  111.       </xsl:when>
  112.       <xsl:when test="namespace-uri(.) = $_NSdcterms and local-name(.) = 'available'">
  113.         <xsl:if test="$isFirst = 'true' and not(../dc:date) and not(../dcterms:modified)">
  114.           <xsl:call-template name="_OutputLastBuildDate"><xsl:with-param name="value" select="." /></xsl:call-template>
  115.           <xsl:if test="not(../atom:updated)">
  116.             <xsl:call-template name="_OutputAtomUpdated"><xsl:with-param name="value" select="." /></xsl:call-template>
  117.           </xsl:if>
  118.         </xsl:if>
  119.       </xsl:when>
  120.       <xsl:when test="namespace-uri(.) = $_NSdcterms and local-name(.) = 'issued'">
  121.         <xsl:if test="$isFirst = 'true' and not(../dc:date) and not(../dcterms:available) and not(../dcterms:modified)">
  122.           <xsl:call-template name="_OutputLastBuildDate"><xsl:with-param name="value" select="." /></xsl:call-template>
  123.           <xsl:if test="not(../atom:updated)">
  124.             <xsl:call-template name="_OutputAtomUpdated"><xsl:with-param name="value" select="." /></xsl:call-template>
  125.           </xsl:if>
  126.         </xsl:if>
  127.       </xsl:when>
  128.       <xsl:when test="namespace-uri(.) = $_NSatom1 and local-name(.) = 'published'">
  129.  
  130.       </xsl:when>
  131.       <xsl:when test="namespace-uri(.) = $_NSatom1 and local-name(.) = 'updated'">
  132.         <xsl:if test="$isFirst = 'true'">
  133.           <xsl:call-template name="_OutputAtomUpdated"><xsl:with-param name="value" select="." /></xsl:call-template>
  134.           <xsl:if test="not(../dc:date) and not(../dcterms:available) and not(../dcterms:modified) and not(../dcterms:issued)">
  135.             <xsl:call-template name="_OutputLastBuildDate"><xsl:with-param name="value" select="." /></xsl:call-template>
  136.           </xsl:if>
  137.         </xsl:if>
  138.  
  139.       </xsl:when>
  140.       <!-- First pair of updateFrequency and updatePeriod gets converted to ttl; all sy:* nodes are preserved as extensions -->
  141.       <xsl:when test="namespace-uri(.) = $_NSsy and local-name(.) = 'updatePeriod' and $isFirst = 'true'">
  142.         <xsl:if test="../sy:updateFrequency">
  143.           <xsl:call-template name="_ConvertUpdatesToTtl">
  144.             <xsl:with-param name="updatePeriod" select="string(.)" />
  145.             <xsl:with-param name="updateFrequency" select="string(../sy:updateFrequency)" />
  146.           </xsl:call-template>
  147.         </xsl:if>
  148.         <xsl:call-template name="_OutputExtension"><xsl:with-param name="value" select="." /></xsl:call-template>
  149.       </xsl:when>
  150.       <xsl:when test="namespace-uri(.) = $_NScf and local-name(.) = 'treatAs'">
  151.         <xsl:if test="$isFirst = 'true'">
  152.           <xsl:call-template name="_OutputCfTreatAs"><xsl:with-param name="value" select="." /></xsl:call-template>
  153.         </xsl:if>
  154.       </xsl:when>
  155.       <xsl:when test="namespace-uri(.) = $_NScf and local-name(.) = 'listinfo'">
  156.         <xsl:if test="$isFirst = 'true'">
  157.           <xsl:call-template name="_OutputCfListinfo"><xsl:with-param name="value" select="." /></xsl:call-template>
  158.         </xsl:if>
  159.       </xsl:when>
  160.       <!-- Copy extension nodes -->
  161.       <xsl:when test="namespace-uri(.) != $_NSrss and namespace-uri(.) != ''">
  162.         <xsl:call-template name="_OutputExtension"><xsl:with-param name="value" select="." /></xsl:call-template>
  163.       </xsl:when>
  164.     </xsl:choose>
  165.   </xsl:template>
  166.  
  167. <!-- Image processing -->
  168.   <xsl:template match="rss:image">
  169.     <xsl:if test="position() = 1">
  170.       <xsl:variable name="imageUrl">
  171.         <xsl:call-template name="_CompleteUrl">
  172.           <xsl:with-param name="baseUrl" select="$downloadUrl" />
  173.           <xsl:with-param name="Url" select="rss:url" />
  174.         </xsl:call-template>
  175.       </xsl:variable>
  176.       <xsl:variable name="imageLink">
  177.         <xsl:call-template name="_CompleteUrl">
  178.           <xsl:with-param name="baseUrl" select="$downloadUrl" />
  179.           <xsl:with-param name="Url" select="rss:link" />
  180.         </xsl:call-template>
  181.       </xsl:variable>
  182.       <xsl:call-template name="_OutputImage">
  183.         <xsl:with-param name="url" select="$imageUrl" />
  184.         <xsl:with-param name="title" select="rss:title" />
  185.         <xsl:with-param name="link" select="$imageLink" />
  186.         <xsl:with-param name="subnodesToCopy" select="*[namespace-uri(.) != $_NSrss and namespace-uri(.) != '']" />
  187.       </xsl:call-template>
  188.     </xsl:if>
  189.   </xsl:template>
  190.  
  191. <!-- Text Input processing -->
  192.   <xsl:template match="rss:textinput">
  193.     <xsl:if test="position() = 1">
  194.       <xsl:variable name="linkUrl">
  195.         <xsl:call-template name="_CompleteUrl">
  196.           <xsl:with-param name="baseUrl" select="$downloadUrl" />
  197.           <xsl:with-param name="Url" select="rss:link" />
  198.         </xsl:call-template>
  199.       </xsl:variable>
  200.       <xsl:call-template name="_OutputTextInput">
  201.         <xsl:with-param name="title" select="rss:title" />
  202.         <xsl:with-param name="name" select="rss:name" />
  203.         <xsl:with-param name="link" select="$linkUrl" />
  204.         <xsl:with-param name="description" select="rss:description" />
  205.         <xsl:with-param name="subnodesToCopy" select="*[namespace-uri(.) != $_NSrss and namespace-uri(.) != '']" />
  206.       </xsl:call-template>
  207.     </xsl:if>
  208.   </xsl:template>
  209.  
  210. <!-- Item processing -->
  211.   <xsl:template match="rss:item">
  212.     <xsl:param name="references" />
  213.     <item>
  214.       <xsl:call-template name="_OutputXmlLang"><xsl:with-param name="value" select="@xml:lang" /></xsl:call-template>
  215.  
  216.       <xsl:apply-templates select="* | @*" mode="item">
  217.         <xsl:with-param name="references" select="$references" />
  218.       </xsl:apply-templates>
  219.     </item>
  220.   </xsl:template>
  221.  
  222.   <xsl:template match="*" mode="item">
  223.     <xsl:param name="references" />
  224.     <xsl:variable name="isFirst">
  225.       <xsl:call-template name="_IsFirstChildOfItsKind"><xsl:with-param name="value" select="." /></xsl:call-template>
  226.     </xsl:variable>
  227.     <xsl:choose>
  228.       <xsl:when test="namespace-uri(.) = $_NSrss and local-name(.) = 'title' and $isFirst = 'true'">
  229.         <xsl:call-template name="_OutputTitle"><xsl:with-param name="value" select="." /></xsl:call-template>
  230.       </xsl:when>
  231.       <xsl:when test="namespace-uri(.) = $_NSrss and local-name(.) = 'link' and $isFirst = 'true'">
  232.         <xsl:variable name="linkUrl">
  233.           <xsl:call-template name="_CompleteUrl">
  234.             <xsl:with-param name="baseUrl" select="$downloadUrl" />
  235.             <xsl:with-param name="Url" select="." />
  236.           </xsl:call-template>
  237.         </xsl:variable>
  238.         <xsl:call-template name="_OutputLink"><xsl:with-param name="value" select="$linkUrl" /></xsl:call-template>
  239.       </xsl:when>
  240.       <xsl:when test="namespace-uri(.) = $_NSdc and local-name(.) = 'creator'">
  241.           <xsl:call-template name="_OutputAuthor">
  242.             <xsl:with-param name="value" select="." />
  243.             <xsl:with-param name="convertToAtom" select="'true'" />
  244.           </xsl:call-template>
  245.       </xsl:when>
  246.       <xsl:when test="namespace-uri(.) = $_NSdc and local-name(.) = 'subject'">
  247.         <xsl:call-template name="_OutputCategory"><xsl:with-param name="value" select="." /></xsl:call-template>
  248.       </xsl:when>
  249.       <xsl:when test="namespace-uri(.) = $_NSdc and local-name(.) = 'date'">
  250.         <xsl:if test="$isFirst= 'true'">
  251.           <xsl:call-template name="_OutputPubDate"><xsl:with-param name="value" select="." /></xsl:call-template>    
  252.           <xsl:if test="not(../atom:published)">
  253.             <xsl:call-template name="_OutputAtomPublished"><xsl:with-param name="value" select="." /></xsl:call-template>
  254.           </xsl:if>
  255.           <xsl:if test="not(../atom:updated) and not(../dcterms:modified)">
  256.             <xsl:call-template name="_OutputAtomUpdated"><xsl:with-param name="value" select="." /></xsl:call-template>
  257.           </xsl:if>
  258.         </xsl:if>
  259.       </xsl:when>
  260.       <xsl:when test="namespace-uri(.) = $_NSatom1 and local-name(.) = 'published'">
  261.         <xsl:if test="$isFirst= 'true'">
  262.           <xsl:call-template name="_OutputAtomPublished"><xsl:with-param name="value" select="." /></xsl:call-template>
  263.           <xsl:if test="not(../dc:date)">
  264.             <xsl:call-template name="_OutputPubDate"><xsl:with-param name="value" select="." /></xsl:call-template>
  265.           </xsl:if> 
  266.         </xsl:if>
  267.  
  268.       </xsl:when>
  269.       <xsl:when test="namespace-uri(.) = $_NSatom1 and local-name(.) = 'updated'">
  270.         <xsl:if test="$isFirst = 'true'">
  271.           <xsl:call-template name="_OutputAtomUpdated"><xsl:with-param name="value" select="." /></xsl:call-template>
  272.         </xsl:if>  
  273.       </xsl:when>
  274.       <xsl:when test="namespace-uri(.) = $_NSdcterms and local-name(.) = 'modified'">
  275.         <xsl:if test="$isFirst = 'true'">
  276.           <xsl:if test="not(../atom:updated)">
  277.             <xsl:call-template name="_OutputAtomUpdated"><xsl:with-param name="value" select="." /></xsl:call-template>
  278.           </xsl:if> 
  279.         </xsl:if>
  280.  
  281.       </xsl:when>
  282.       <xsl:when test="namespace-uri(.) = $_NScontent and local-name(.) = 'encoded'">
  283.         <xsl:if test="$isFirst = 'true'">
  284.           <xsl:call-template name="_OutputDescriptionAndSummary">
  285.             <xsl:with-param name="description" select="." />
  286.             <xsl:with-param name="descriptionType" select="'html'" />
  287.             <xsl:with-param name="descriptionBaseUrl" select="$downloadUrl" />
  288.             <xsl:with-param name="summary" select="../rss:description" />
  289.             <xsl:with-param name="summaryType" select="'html'" />
  290.             <xsl:with-param name="summaryBaseUrl" select="$downloadUrl" />
  291.           </xsl:call-template>
  292.         </xsl:if>
  293.       </xsl:when>
  294.       <xsl:when test="namespace-uri(.) = $_NSrss and local-name(.) = 'description' and $isFirst = 'true'">
  295.         <xsl:if test="not(../content:encoded)">
  296.           <xsl:call-template name="_OutputDescription">
  297.             <xsl:with-param name="value" select="." />
  298.             <xsl:with-param name="type" select="'html'" />
  299.             <xsl:with-param name="baseUrl" select="$downloadUrl" />
  300.           </xsl:call-template>
  301.         </xsl:if>
  302.       </xsl:when>
  303.       <xsl:when test="namespace-uri(.) = $_NSslash and local-name(.) = 'comments'">
  304.         <xsl:if test="$isFirst = 'true'">
  305.           <xsl:call-template name="_OutputSlashComments"><xsl:with-param name="value" select="." /></xsl:call-template>
  306.         </xsl:if>
  307.       </xsl:when>
  308.       <xsl:when test="namespace-uri(.) = $_NSwfw and (local-name(.) = 'commentRss' or local-name(.) = 'commentRSS')">
  309.         <xsl:if test="$isFirst = 'true'">
  310.           <xsl:variable name="commentRssUrl">
  311.             <xsl:call-template name="_CompleteUrl">
  312.               <xsl:with-param name="baseUrl" select="$downloadUrl" />
  313.               <xsl:with-param name="Url" select="." />
  314.             </xsl:call-template>
  315.           </xsl:variable>
  316.           <xsl:call-template name="_OutputWfwCommentRSS"><xsl:with-param name="value" select="$commentRssUrl" /></xsl:call-template>
  317.         </xsl:if>
  318.       </xsl:when>
  319.       <!-- Copy extension nodes -->
  320.       <xsl:when test="namespace-uri(.) != $_NSrss and namespace-uri(.) != ''">
  321.         <xsl:call-template name="_OutputExtension">
  322.           <xsl:with-param name="value" select="." />
  323.           <xsl:with-param name="references" select="$references" />
  324.         </xsl:call-template>
  325.       </xsl:when>
  326.     </xsl:choose>
  327.   </xsl:template>
  328.  
  329.   <xsl:template match="@*" mode="item">
  330.     <!-- No need to check if first, because XML doesn't allow duplicate attributes -->
  331.     <xsl:if test="namespace-uri(.) = $_NSrdf and local-name(.) = 'about'">
  332.       <xsl:call-template name="_OutputGuid">
  333.         <xsl:with-param name="value" select="." />
  334.         <xsl:with-param name="isPermaLink" select="'false'" />
  335.       </xsl:call-template>
  336.     </xsl:if>
  337.   </xsl:template>
  338.  
  339. </xsl:stylesheet>